From a259145612aff86e8fc994d4cdb333713e16da6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E6=98=9F=E7=B9=81?= Date: Sun, 18 May 2025 21:47:40 +0800 Subject: [PATCH 01/10] feat: initial implementation of SpeechSynthesizer --- sample/Cnblogs.DashScope.Sample/Program.cs | 18 ++ sample/Cnblogs.DashScope.Sample/SampleType.cs | 4 +- .../SampleTypeDescriptor.cs | 1 + .../Cnblogs.DashScope.AspNetCore.csproj | 1 + .../DashScopeAspNetCoreDefaults.cs | 6 + .../DashScopeClientAspNetCore.cs | 10 + .../ServiceCollectionInjector.cs | 42 +++- src/Cnblogs.DashScope.Core/DashScopeClient.cs | 42 +++- .../DashScopeClientCore.cs | 43 ++-- .../DashScopeClientWebSocket.cs | 221 ++++++++++++++++++ .../DashScopeClientWebSocketPool.cs | 105 +++++++++ .../DashScopeClientWebSocketWrapper.cs | 46 ++++ .../DashScopeOptions.cs | 34 +++ .../DashScopeWebSocketRequest.cs | 21 ++ .../DashScopeWebSocketRequestHeader.cs | 22 ++ .../DashScopeWebSocketRequestPayload.cs | 39 ++++ .../DashScopeWebSocketResponse.cs | 12 + .../DashScopeWebSocketResponseHeader.cs | 16 ++ ...hScopeWebSocketResponseHeaderAttributes.cs | 7 + .../DashScopeWebSocketResponsePayload.cs | 10 + .../DashScopeWebSocketResponseUsage.cs | 7 + .../DashScopeWebSocketState.cs | 27 +++ .../IDashScopeClient.cs | 10 + .../Internals/DashScopeDefaults.cs | 30 ++- .../SpeechSynthesizerInput.cs | 12 + .../SpeechSynthesizerOutput.cs | 7 + .../SpeechSynthesizerOutputSentences.cs | 7 + .../SpeechSynthesizerParameters.cs | 42 ++++ .../SpeechSynthesizerSocketSession.cs | 108 +++++++++ .../DashScopeClientTests.cs | 2 +- .../ServiceCollectionInjectorTests.cs | 17 +- .../Utils/Sut.cs | 4 +- 32 files changed, 936 insertions(+), 37 deletions(-) create mode 100644 src/Cnblogs.DashScope.AspNetCore/DashScopeAspNetCoreDefaults.cs create mode 100644 src/Cnblogs.DashScope.AspNetCore/DashScopeClientAspNetCore.cs create mode 100644 src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs create mode 100644 src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs create mode 100644 src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs create mode 100644 src/Cnblogs.DashScope.Core/DashScopeOptions.cs create mode 100644 src/Cnblogs.DashScope.Core/DashScopeWebSocketRequest.cs create mode 100644 src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestHeader.cs create mode 100644 src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestPayload.cs create mode 100644 src/Cnblogs.DashScope.Core/DashScopeWebSocketResponse.cs create mode 100644 src/Cnblogs.DashScope.Core/DashScopeWebSocketResponseHeader.cs create mode 100644 src/Cnblogs.DashScope.Core/DashScopeWebSocketResponseHeaderAttributes.cs create mode 100644 src/Cnblogs.DashScope.Core/DashScopeWebSocketResponsePayload.cs create mode 100644 src/Cnblogs.DashScope.Core/DashScopeWebSocketResponseUsage.cs create mode 100644 src/Cnblogs.DashScope.Core/DashScopeWebSocketState.cs create mode 100644 src/Cnblogs.DashScope.Core/SpeechSynthesizerInput.cs create mode 100644 src/Cnblogs.DashScope.Core/SpeechSynthesizerOutput.cs create mode 100644 src/Cnblogs.DashScope.Core/SpeechSynthesizerOutputSentences.cs create mode 100644 src/Cnblogs.DashScope.Core/SpeechSynthesizerParameters.cs create mode 100644 src/Cnblogs.DashScope.Core/SpeechSynthesizerSocketSession.cs diff --git a/sample/Cnblogs.DashScope.Sample/Program.cs b/sample/Cnblogs.DashScope.Sample/Program.cs index 87bfe69..8b2d6f9 100644 --- a/sample/Cnblogs.DashScope.Sample/Program.cs +++ b/sample/Cnblogs.DashScope.Sample/Program.cs @@ -63,6 +63,24 @@ userInput = Console.ReadLine()!; await ApplicationCallAsync(applicationId, userInput); break; + case SampleType.TextToSpeech: + var tts = await dashScopeClient.CreateSpeechSynthesizerSocketSessionAsync("cosyvoice-v2"); + var taskId = await tts.RunTaskAsync( + new SpeechSynthesizerParameters() { Voice = "longxiaochun_v2", Format = "mp3" }); + await tts.ContinueTaskAsync(taskId, "博客园"); + await tts.ContinueTaskAsync(taskId, "代码改变世界"); + await tts.FinishTaskAsync(taskId); + var file = new FileInfo("tts.mp3"); + var writer = file.OpenWrite(); + await foreach (var b in tts.GetAudioAsync()) + { + writer.WriteByte(b); + } + + writer.Close(); + + Console.WriteLine($"audio saved to {file.FullName}"); + break; } return; diff --git a/sample/Cnblogs.DashScope.Sample/SampleType.cs b/sample/Cnblogs.DashScope.Sample/SampleType.cs index feddf79..138ed9a 100644 --- a/sample/Cnblogs.DashScope.Sample/SampleType.cs +++ b/sample/Cnblogs.DashScope.Sample/SampleType.cs @@ -16,5 +16,7 @@ public enum SampleType MicrosoftExtensionsAiToolCall, - ApplicationCall + ApplicationCall, + + TextToSpeech, } diff --git a/sample/Cnblogs.DashScope.Sample/SampleTypeDescriptor.cs b/sample/Cnblogs.DashScope.Sample/SampleTypeDescriptor.cs index 26988a5..a6d1b94 100644 --- a/sample/Cnblogs.DashScope.Sample/SampleTypeDescriptor.cs +++ b/sample/Cnblogs.DashScope.Sample/SampleTypeDescriptor.cs @@ -14,6 +14,7 @@ public static string GetDescription(this SampleType sampleType) SampleType.MicrosoftExtensionsAi => "Use with Microsoft.Extensions.AI", SampleType.MicrosoftExtensionsAiToolCall => "Use tool call with Microsoft.Extensions.AI interfaces", SampleType.ApplicationCall => "Call pre-defined application", + SampleType.TextToSpeech => "TTS task", _ => throw new ArgumentOutOfRangeException(nameof(sampleType), sampleType, "Unsupported sample option") }; } diff --git a/src/Cnblogs.DashScope.AspNetCore/Cnblogs.DashScope.AspNetCore.csproj b/src/Cnblogs.DashScope.AspNetCore/Cnblogs.DashScope.AspNetCore.csproj index 1ab06a5..79fb6c6 100644 --- a/src/Cnblogs.DashScope.AspNetCore/Cnblogs.DashScope.AspNetCore.csproj +++ b/src/Cnblogs.DashScope.AspNetCore/Cnblogs.DashScope.AspNetCore.csproj @@ -4,6 +4,7 @@ Cnblogs.DashScopeSDK true Cnblogs;Dashscope;AI;Sdk;Embedding;AspNetCore + Cnblogs.DashScope.AspNetCore diff --git a/src/Cnblogs.DashScope.AspNetCore/DashScopeAspNetCoreDefaults.cs b/src/Cnblogs.DashScope.AspNetCore/DashScopeAspNetCoreDefaults.cs new file mode 100644 index 0000000..1cdbb63 --- /dev/null +++ b/src/Cnblogs.DashScope.AspNetCore/DashScopeAspNetCoreDefaults.cs @@ -0,0 +1,6 @@ +namespace Cnblogs.DashScope.AspNetCore; + +internal static class DashScopeAspNetCoreDefaults +{ + public const string DefaultHttpClientName = "Cnblogs.DashScope.Http"; +} diff --git a/src/Cnblogs.DashScope.AspNetCore/DashScopeClientAspNetCore.cs b/src/Cnblogs.DashScope.AspNetCore/DashScopeClientAspNetCore.cs new file mode 100644 index 0000000..cc75202 --- /dev/null +++ b/src/Cnblogs.DashScope.AspNetCore/DashScopeClientAspNetCore.cs @@ -0,0 +1,10 @@ +using Cnblogs.DashScope.Core; +using Microsoft.Extensions.Options; + +namespace Cnblogs.DashScope.AspNetCore; + +/// +/// The with DI and options pattern support. +/// +public class DashScopeClientAspNetCore(IHttpClientFactory factory, DashScopeClientWebSocketPool pool) + : DashScopeClientCore(factory.CreateClient(DashScopeAspNetCoreDefaults.DefaultHttpClientName), pool); diff --git a/src/Cnblogs.DashScope.AspNetCore/ServiceCollectionInjector.cs b/src/Cnblogs.DashScope.AspNetCore/ServiceCollectionInjector.cs index ee6b00a..aa8cc7c 100644 --- a/src/Cnblogs.DashScope.AspNetCore/ServiceCollectionInjector.cs +++ b/src/Cnblogs.DashScope.AspNetCore/ServiceCollectionInjector.cs @@ -1,6 +1,9 @@ using System.Net.Http.Headers; +using Cnblogs.DashScope.AspNetCore; using Cnblogs.DashScope.Core; +using Cnblogs.DashScope.Core.Internals; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Options; // ReSharper disable once CheckNamespace namespace Microsoft.Extensions.DependencyInjection; @@ -37,9 +40,10 @@ public static IHttpClientBuilder AddDashScopeClient(this IServiceCollection serv { var apiKey = section["apiKey"] ?? throw new InvalidOperationException("There is no apiKey provided in given section"); - var baseAddress = section["baseAddress"]; + var baseAddress = section["baseAddress"] ?? DashScopeDefaults.DashScopeHttpApiBaseAddress; var workspaceId = section["workspaceId"]; - return services.AddDashScopeClient(apiKey, baseAddress, workspaceId); + services.Configure(section); + return services.AddDashScopeHttpClient(apiKey, baseAddress, workspaceId); } /// @@ -48,16 +52,46 @@ public static IHttpClientBuilder AddDashScopeClient(this IServiceCollection serv /// The service collection to add service to. /// The DashScope api key. /// The DashScope api base address, you may change this value if you are using proxy. + /// The DashScope websocket base address, you may want to change this value if use are using proxy. /// Default workspace id to use. /// public static IHttpClientBuilder AddDashScopeClient( this IServiceCollection services, string apiKey, string? baseAddress = null, + string? baseWebsocketAddress = null, string? workspaceId = null) { - baseAddress ??= "https://dashscope.aliyuncs.com/api/v1/"; - return services.AddHttpClient( + services.Configure(o => + { + o.ApiKey = apiKey; + if (baseAddress != null) + { + o.BaseAddress = baseAddress; + } + + if (baseWebsocketAddress != null) + { + o.BaseWebsocketAddress = baseWebsocketAddress; + } + + o.WorkspaceId = workspaceId; + }); + + return services.AddDashScopeHttpClient(apiKey, baseAddress, workspaceId); + } + + private static IHttpClientBuilder AddDashScopeHttpClient( + this IServiceCollection services, + string apiKey, + string baseAddress, + string? workspaceId) + { + services.AddSingleton(sp + => new DashScopeClientWebSocketPool(sp.GetRequiredService>().Value)); + services.AddScoped(); + return services.AddHttpClient( + DashScopeAspNetCoreDefaults.DefaultHttpClientName, h => { h.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey); diff --git a/src/Cnblogs.DashScope.Core/DashScopeClient.cs b/src/Cnblogs.DashScope.Core/DashScopeClient.cs index dea20f9..2f197e6 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClient.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClient.cs @@ -9,14 +9,17 @@ namespace Cnblogs.DashScope.Core; public class DashScopeClient : DashScopeClientCore { private static readonly Dictionary ClientPools = new(); + private static readonly Dictionary SocketPools = new(); /// /// Creates a DashScopeClient for further api call. /// /// The DashScope api key. /// The timeout for internal http client, defaults to 2 minute. - /// The base address for dashscope api call. + /// The base address for DashScope api call. + /// The base address for DashScope websocket api call. /// The workspace id. + /// Maximum size of socket pool. /// /// The underlying httpclient is cached by constructor parameter list. /// Client created with same parameter value will share same underlying instance. @@ -24,10 +27,41 @@ public class DashScopeClient : DashScopeClientCore public DashScopeClient( string apiKey, TimeSpan? timeout = null, - string? baseAddress = null, + string baseAddress = DashScopeDefaults.DashScopeHttpApiBaseAddress, + string baseWebsocketAddress = DashScopeDefaults.DashScopeWebsocketApiBaseAddress, + string? workspaceId = null, + int socketPoolSize = 5) + : base( + GetConfiguredClient(apiKey, timeout, baseAddress, workspaceId), + GetConfiguredSocketPool(apiKey, baseWebsocketAddress, socketPoolSize, workspaceId)) + { + } + + private static DashScopeClientWebSocketPool GetConfiguredSocketPool( + string apiKey, + string baseAddress, + int socketPoolSize = 5, string? workspaceId = null) - : base(GetConfiguredClient(apiKey, timeout, baseAddress, workspaceId)) { + var key = GetCacheKey(); + + var pool = SocketPools.GetValueOrDefault(key); + if (pool is null) + { + pool = new DashScopeClientWebSocketPool( + new DashScopeOptions() + { + ApiKey = apiKey, + BaseWebsocketAddress = baseAddress, + SocketPoolSize = socketPoolSize, + WorkspaceId = workspaceId + }); + SocketPools.Add(key, pool); + } + + return pool; + + string GetCacheKey() => $"{apiKey}-{socketPoolSize}-{baseAddress}-{workspaceId}"; } private static HttpClient GetConfiguredClient( @@ -41,7 +75,7 @@ private static HttpClient GetConfiguredClient( { client = new HttpClient { - BaseAddress = new Uri(baseAddress ?? DashScopeDefaults.DashScopeApiBaseAddress), + BaseAddress = new Uri(baseAddress ?? DashScopeDefaults.DashScopeHttpApiBaseAddress), Timeout = timeout ?? TimeSpan.FromMinutes(2) }; diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientCore.cs b/src/Cnblogs.DashScope.Core/DashScopeClientCore.cs index e0f3159..a2ce231 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClientCore.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClientCore.cs @@ -4,7 +4,6 @@ using System.Runtime.CompilerServices; using System.Text; using System.Text.Json; -using System.Text.Json.Serialization; using Cnblogs.DashScope.Core.Internals; namespace Cnblogs.DashScope.Core; @@ -14,22 +13,18 @@ namespace Cnblogs.DashScope.Core; /// public class DashScopeClientCore : IDashScopeClient { - private static readonly JsonSerializerOptions SerializationOptions = - new() - { - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, - PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower - }; - private readonly HttpClient _httpClient; + private readonly DashScopeClientWebSocketPool _socketPool; /// /// For DI container to inject pre-configured httpclient. /// /// Pre-configured httpclient. - public DashScopeClientCore(HttpClient httpClient) + /// Websocket pool. + public DashScopeClientCore(HttpClient httpClient, DashScopeClientWebSocketPool pool) { _httpClient = httpClient; + _socketPool = pool; } /// @@ -283,6 +278,15 @@ public async Task DeleteFileAsync( return (await SendCompatibleAsync(request, cancellationToken))!; } + /// + public async Task CreateSpeechSynthesizerSocketSessionAsync( + string modelId, + CancellationToken cancellationToken = default) + { + var socket = await _socketPool.RentSocketAsync(cancellationToken); + return new SpeechSynthesizerSocketSession(socket, modelId); + } + private static HttpRequestMessage BuildSseRequest(HttpMethod method, string url, TPayload payload) where TPayload : class { @@ -304,7 +308,9 @@ private static HttpRequestMessage BuildRequest( { var message = new HttpRequestMessage(method, url) { - Content = payload != null ? JsonContent.Create(payload, options: SerializationOptions) : null + Content = payload != null + ? JsonContent.Create(payload, options: DashScopeDefaults.SerializationOptions) + : null }; if (sse) @@ -340,7 +346,9 @@ private static HttpRequestMessage BuildRequest( }, HttpCompletionOption.ResponseContentRead, cancellationToken); - return await response.Content.ReadFromJsonAsync(SerializationOptions, cancellationToken); + return await response.Content.ReadFromJsonAsync( + DashScopeDefaults.SerializationOptions, + cancellationToken); } private async Task SendAsync(HttpRequestMessage message, CancellationToken cancellationToken) @@ -350,7 +358,9 @@ private static HttpRequestMessage BuildRequest( message, HttpCompletionOption.ResponseContentRead, cancellationToken); - return await response.Content.ReadFromJsonAsync(SerializationOptions, cancellationToken); + return await response.Content.ReadFromJsonAsync( + DashScopeDefaults.SerializationOptions, + cancellationToken); } private async IAsyncEnumerable StreamAsync( @@ -373,7 +383,8 @@ private async IAsyncEnumerable StreamAsync( var data = line["data:".Length..]; if (data.StartsWith("{\"code\":")) { - var error = JsonSerializer.Deserialize(data, SerializationOptions)!; + var error = + JsonSerializer.Deserialize(data, DashScopeDefaults.SerializationOptions)!; throw new DashScopeException( message.RequestUri?.ToString(), (int)response.StatusCode, @@ -381,7 +392,7 @@ private async IAsyncEnumerable StreamAsync( error.Message); } - yield return JsonSerializer.Deserialize(data, SerializationOptions)!; + yield return JsonSerializer.Deserialize(data, DashScopeDefaults.SerializationOptions)!; } } } @@ -418,7 +429,9 @@ private async Task GetSuccessResponseAsync( DashScopeError? error = null; try { - var r = await response.Content.ReadFromJsonAsync(SerializationOptions, cancellationToken); + var r = await response.Content.ReadFromJsonAsync( + DashScopeDefaults.SerializationOptions, + cancellationToken); error = r == null ? null : errorMapper.Invoke(r); } catch (Exception) diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs new file mode 100644 index 0000000..066911f --- /dev/null +++ b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs @@ -0,0 +1,221 @@ +using System.Net.WebSockets; +using System.Text; +using System.Text.Json; +using System.Threading.Channels; +using Cnblogs.DashScope.Core.Internals; + +namespace Cnblogs.DashScope.Core; + +/// +/// A websocket client for DashScope websocket API. +/// +public sealed class DashScopeClientWebSocket : IDisposable +{ + private static readonly UnboundedChannelOptions UnboundedChannelOptions = new() + { + SingleReader = true, SingleWriter = true, + }; + + private readonly ClientWebSocket _socket = new(); + private Task? _receiveTask; + private TaskCompletionSource _taskStartedSignal = new(); + + /// + /// The binary output. + /// + public Channel BinaryOutput { get; private set; } = Channel.CreateUnbounded(UnboundedChannelOptions); + + /// + /// A task that completed when received task-started event. + /// + public Task TaskStarted => _taskStartedSignal.Task; + + /// + /// Current state for this websocket. + /// + public DashScopeWebSocketState State { get; private set; } + + /// + /// Initialize a configured web socket client. + /// + /// The api key to use. + /// Optional workspace id. + public DashScopeClientWebSocket(string apiKey, string? workspaceId = null) + { + _socket.Options.SetRequestHeader("X-DashScope-DataInspection", "enable"); + _socket.Options.SetRequestHeader("Authorization", $"bearer {apiKey}"); + if (string.IsNullOrEmpty(workspaceId) == false) + { + _socket.Options.SetRequestHeader("X-DashScope-WorkspaceId", workspaceId); + } + } + + /// + /// Start a websocket connection. + /// + /// Websocket API uri. + /// The cancellation token to use. + /// + /// The type of the response content. + /// When was request. + public async Task ConnectAsync(Uri uri, CancellationToken cancellationToken = default) + where TOutput : class + { + await _socket.ConnectAsync(uri, cancellationToken); + _receiveTask = ReceiveMessagesAsync(cancellationToken); + State = DashScopeWebSocketState.Connected; + } + + /// + /// Reset binary output. + /// + public void ResetOutput() + { + BinaryOutput = Channel.CreateUnbounded(UnboundedChannelOptions); + _taskStartedSignal = new TaskCompletionSource(); + } + + /// + /// Send message to server. + /// + /// Request to send. + /// A cancellation token used to propagate notification that this operation should be canceled. + /// + /// Type of the input. + /// Type of the parameter. + /// The is requested. + /// Websocket is not connected. + /// The underlying websocket has already been closed. + public Task SendMessageAsync( + DashScopeWebSocketRequest request, + CancellationToken cancellationToken = default) + where TInput : class + where TParameter : class + { + return _socket.SendAsync( + new ArraySegment( + Encoding.UTF8.GetBytes(JsonSerializer.Serialize(request, DashScopeDefaults.SerializationOptions))), + WebSocketMessageType.Text, + true, + cancellationToken); + } + + private async Task?> ReceiveMessageAsync( + CancellationToken cancellationToken = default) + where TOutput : class + { + var buffer = new byte[1024 * 4]; + var segment = new ArraySegment(buffer); + + try + { + var result = await _socket.ReceiveAsync(segment, cancellationToken); + + if (result.MessageType == WebSocketMessageType.Close) + { + await CloseAsync(cancellationToken); + return null; + } + + if (result.MessageType == WebSocketMessageType.Binary) + { + for (var i = 0; i < result.Count; i++) + { + await BinaryOutput.Writer.WriteAsync(buffer[i], cancellationToken); + } + + return null; + } + + var message = Encoding.UTF8.GetString(buffer, 0, result.Count); + var jsonResponse = + JsonSerializer.Deserialize>( + message, + DashScopeDefaults.SerializationOptions); + return jsonResponse; + } + catch + { + // close socket when exception happens. + await CloseAsync(cancellationToken); + } + + return null; + } + + /// + /// Wait for server response. + /// + /// A cancellation token used to propagate notification that this operation should be canceled. + /// Type of the response content. + /// The task was failed. + public async Task ReceiveMessagesAsync(CancellationToken cancellationToken = default) + where TOutput : class + { + while (State != DashScopeWebSocketState.Closed && _socket.CloseStatus == null) + { + var json = await ReceiveMessageAsync(cancellationToken); + if (json == null) + { + continue; + } + + var eventStr = json.Header.Event; + switch (eventStr) + { + case "task-started": + State = DashScopeWebSocketState.RunningTask; + _taskStartedSignal.TrySetResult(true); + break; + case "task-finished": + State = DashScopeWebSocketState.Connected; + BinaryOutput.Writer.Complete(); + break; + case "task-failed": + await CloseAsync(cancellationToken); + throw new DashScopeException( + null, + 400, + new DashScopeError() + { + Code = json.Header.ErrorCode ?? string.Empty, + Message = json.Header.ErrorMessage ?? string.Empty, + RequestId = json.Header.Attributes.RequestUuid ?? string.Empty + }, + json.Header.ErrorMessage ?? "The task was failed"); + default: + break; + } + } + + await CloseAsync(cancellationToken); + } + + /// + /// Close the underlying websocket. + /// + /// A cancellation token used to propagate notification that this operation should be canceled. + /// + public async Task CloseAsync(CancellationToken cancellationToken = default) + { + await _socket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", cancellationToken); + Dispose(); + } + + private void Dispose(bool disposing) + { + if (disposing) + { + // Dispose managed resources. + _socket.Dispose(); + State = DashScopeWebSocketState.Closed; + BinaryOutput.Writer.TryComplete(); + } + } + + /// + public void Dispose() + { + Dispose(true); + } +} diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs new file mode 100644 index 0000000..265bf74 --- /dev/null +++ b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs @@ -0,0 +1,105 @@ +using System.Collections.Concurrent; +using System.Net.WebSockets; + +namespace Cnblogs.DashScope.Core; + +/// +/// Socket pool for DashScope API. +/// +/// +public sealed class DashScopeClientWebSocketPool(DashScopeOptions options) : IDisposable +{ + private readonly ConcurrentBag _available = new(); + private readonly ConcurrentBag _active = new(); + + internal void ReturnSocketAsync(DashScopeClientWebSocket socket) + { + if (socket.State != DashScopeWebSocketState.Connected) + { + // not returnable, disposing. + socket.Dispose(); + } + + _available.Add(socket); + } + + /// + /// Rent or create a socket connection from pool. + /// + /// + /// The output type. + /// + public async Task RentSocketAsync( + CancellationToken cancellationToken = default) + where TOutput : class + { + var found = false; + DashScopeClientWebSocket? socket = null; + while (found == false) + { + if (_available.IsEmpty == false) + { + found = _available.TryTake(out socket); + if (socket?.State != DashScopeWebSocketState.Connected) + { + // expired + found = false; + } + } + else + { + socket = await InitializeNewSocketAsync(options.BaseWebsocketAddress, cancellationToken); + found = true; + } + } + + return ActiveSocket(socket!); + } + + private DashScopeClientWebSocketWrapper ActiveSocket(DashScopeClientWebSocket socket) + { + socket.ResetOutput(); + _active.Add(socket); + return new DashScopeClientWebSocketWrapper(socket, this); + } + + private async Task InitializeNewSocketAsync( + string url, + CancellationToken cancellationToken = default) + where TOutput : class + { + if (_available.Count + _active.Count >= options.SocketPoolSize) + { + throw new InvalidOperationException("[DashScopeSDK] Socket pool is full"); + } + + var socket = new DashScopeClientWebSocket(options.ApiKey, options.WorkspaceId); + await socket.ConnectAsync(new Uri(url), cancellationToken); + return socket; + } + + private void Dispose(bool disposing) + { + if (disposing) + { + // Dispose managed resources. + while (_available.IsEmpty == false) + { + _available.TryTake(out var socket); + socket?.Dispose(); + } + + while (_active.IsEmpty == false) + { + _active.TryTake(out var socket); + socket?.Dispose(); + } + } + } + + /// + public void Dispose() + { + Dispose(true); + } +} diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs new file mode 100644 index 0000000..2285e76 --- /dev/null +++ b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs @@ -0,0 +1,46 @@ +using System.Threading.Channels; + +namespace Cnblogs.DashScope.Core; + +/// +/// Represents a transient wrapper for rented websocket, should be transient. +/// +/// The rented websocket +/// The pool to return the socket to. +public sealed record DashScopeClientWebSocketWrapper(DashScopeClientWebSocket Socket, DashScopeClientWebSocketPool Pool) + : IDisposable +{ + /// + /// The binary output. + /// + public IAsyncEnumerable BinaryOutput => Socket.BinaryOutput.Reader.ReadAllAsync(); + + /// + /// The task that completes when received task-started event from server. + /// + public Task TaskStarted => Socket.TaskStarted; + + /// + /// Send message to server. + /// + /// Request to send. + /// A cancellation token used to propagate notification that this operation should be canceled. + /// + /// Type of the input. + /// Type of the parameter. + /// The is requested. + /// Websocket is not connected. + /// The underlying websocket has already been closed. + public Task SendMessageAsync( + DashScopeWebSocketRequest request, + CancellationToken cancellationToken = default) + where TInput : class + where TParameter : class + => Socket.SendMessageAsync(request, cancellationToken); + + /// + public void Dispose() + { + Pool.ReturnSocketAsync(Socket); + } +} diff --git a/src/Cnblogs.DashScope.Core/DashScopeOptions.cs b/src/Cnblogs.DashScope.Core/DashScopeOptions.cs new file mode 100644 index 0000000..1e02180 --- /dev/null +++ b/src/Cnblogs.DashScope.Core/DashScopeOptions.cs @@ -0,0 +1,34 @@ +using Cnblogs.DashScope.Core.Internals; + +namespace Cnblogs.DashScope.Core; + +/// +/// Options for DashScope client. +/// +public class DashScopeOptions +{ + /// + /// The api key used to access DashScope api + /// + public string ApiKey { get; set; } = string.Empty; + + /// + /// Base address for DashScope HTTP API. + /// + public string BaseAddress { get; set; } = DashScopeDefaults.DashScopeHttpApiBaseAddress; + + /// + /// Base address for DashScope websocket API. + /// + public string BaseWebsocketAddress { get; set; } = DashScopeDefaults.DashScopeWebsocketApiBaseAddress; + + /// + /// Default workspace Id. + /// + public string? WorkspaceId { get; set; } + + /// + /// Default socket pool size. + /// + public int SocketPoolSize { get; set; } = 10; +} diff --git a/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequest.cs b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequest.cs new file mode 100644 index 0000000..964aba9 --- /dev/null +++ b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequest.cs @@ -0,0 +1,21 @@ +namespace Cnblogs.DashScope.Core; + +/// +/// Represents a websocket request to DashScope. +/// +/// Type of the input. +/// Type of the parameter. +public class DashScopeWebSocketRequest + where TInput : class + where TParameter : class +{ + /// + /// Metadata of the request. + /// + public required DashScopeWebSocketRequestHeader Header { get; set; } + + /// + /// Payload of the request. + /// + public required DashScopeWebSocketRequestPayload Payload { get; set; } +} diff --git a/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestHeader.cs b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestHeader.cs new file mode 100644 index 0000000..6760e2b --- /dev/null +++ b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestHeader.cs @@ -0,0 +1,22 @@ +namespace Cnblogs.DashScope.Core; + +/// +/// Metadata for websocket request. +/// +public class DashScopeWebSocketRequestHeader +{ + /// + /// Action name. + /// + public required string Action { get; set; } + + /// + /// UUID for task. + /// + public required string TaskId { get; set; } + + /// + /// Streaming type. + /// + public string Streaming { get; set; } = "duplex"; +} diff --git a/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestPayload.cs b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestPayload.cs new file mode 100644 index 0000000..a951d69 --- /dev/null +++ b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestPayload.cs @@ -0,0 +1,39 @@ +namespace Cnblogs.DashScope.Core; + +/// +/// Payload for websocket request. +/// +public class DashScopeWebSocketRequestPayload + where TInput : class + where TParameter : class +{ + /// + /// Group name of task. + /// + public string? TaskGroup { get; set; } + + /// + /// Requesting task name. + /// + public string? Task { get; set; } + + /// + /// Requesting function name. + /// + public string? Function { get; set; } + + /// + /// Model id. + /// + public string? Model { get; set; } + + /// + /// Optional parameters. + /// + public TParameter? Parameters { get; set; } + + /// + /// The input of the request. + /// + public required TInput Input { get; set; } +} diff --git a/src/Cnblogs.DashScope.Core/DashScopeWebSocketResponse.cs b/src/Cnblogs.DashScope.Core/DashScopeWebSocketResponse.cs new file mode 100644 index 0000000..9409f92 --- /dev/null +++ b/src/Cnblogs.DashScope.Core/DashScopeWebSocketResponse.cs @@ -0,0 +1,12 @@ +namespace Cnblogs.DashScope.Core; + +/// +/// Response from websocket API. +/// +/// Response metadatas. +/// Response body. +/// Output type of the response. +public record DashScopeWebSocketResponse( + DashScopeWebSocketResponseHeader Header, + DashScopeWebSocketResponsePayload Payload) + where TOutput : class; diff --git a/src/Cnblogs.DashScope.Core/DashScopeWebSocketResponseHeader.cs b/src/Cnblogs.DashScope.Core/DashScopeWebSocketResponseHeader.cs new file mode 100644 index 0000000..26bbb9f --- /dev/null +++ b/src/Cnblogs.DashScope.Core/DashScopeWebSocketResponseHeader.cs @@ -0,0 +1,16 @@ +namespace Cnblogs.DashScope.Core; + +/// +/// Metadata of the websocket response. +/// +/// TaskId of the task. +/// Event name. +/// Error code when is task-failed. +/// Error message when is task-failed. +/// Optional attributes +public record DashScopeWebSocketResponseHeader( + string TaskId, + string Event, + string? ErrorCode, + string? ErrorMessage, + DashScopeWebSocketResponseHeaderAttributes Attributes); diff --git a/src/Cnblogs.DashScope.Core/DashScopeWebSocketResponseHeaderAttributes.cs b/src/Cnblogs.DashScope.Core/DashScopeWebSocketResponseHeaderAttributes.cs new file mode 100644 index 0000000..1ee663e --- /dev/null +++ b/src/Cnblogs.DashScope.Core/DashScopeWebSocketResponseHeaderAttributes.cs @@ -0,0 +1,7 @@ +namespace Cnblogs.DashScope.Core; + +/// +/// Attributes field in websocket response header. +/// +/// UUID for current request. +public record DashScopeWebSocketResponseHeaderAttributes(string? RequestUuid); diff --git a/src/Cnblogs.DashScope.Core/DashScopeWebSocketResponsePayload.cs b/src/Cnblogs.DashScope.Core/DashScopeWebSocketResponsePayload.cs new file mode 100644 index 0000000..9f39256 --- /dev/null +++ b/src/Cnblogs.DashScope.Core/DashScopeWebSocketResponsePayload.cs @@ -0,0 +1,10 @@ +namespace Cnblogs.DashScope.Core; + +/// +/// Payload field of websocket API response. +/// +/// Content of the response. +/// Task usage info. +/// Type of the response content. +public record DashScopeWebSocketResponsePayload(TOutput? Output, DashScopeWebSocketResponseUsage? Usage) + where TOutput : class; diff --git a/src/Cnblogs.DashScope.Core/DashScopeWebSocketResponseUsage.cs b/src/Cnblogs.DashScope.Core/DashScopeWebSocketResponseUsage.cs new file mode 100644 index 0000000..7e7f734 --- /dev/null +++ b/src/Cnblogs.DashScope.Core/DashScopeWebSocketResponseUsage.cs @@ -0,0 +1,7 @@ +namespace Cnblogs.DashScope.Core; + +/// +/// Usage info of websocket task. +/// +/// Current character usage count. +public record DashScopeWebSocketResponseUsage(int Characters); diff --git a/src/Cnblogs.DashScope.Core/DashScopeWebSocketState.cs b/src/Cnblogs.DashScope.Core/DashScopeWebSocketState.cs new file mode 100644 index 0000000..246be03 --- /dev/null +++ b/src/Cnblogs.DashScope.Core/DashScopeWebSocketState.cs @@ -0,0 +1,27 @@ +namespace Cnblogs.DashScope.Core; + +/// +/// The state of . +/// +public enum DashScopeWebSocketState +{ + /// + /// The socket has been created but not connected yet. + /// + Created, + + /// + /// The socket has been connected and ready. + /// + Connected, + + /// + /// The socket has a running task waiting to be finished. + /// + RunningTask, + + /// + /// The socket has been closed. + /// + Closed +} diff --git a/src/Cnblogs.DashScope.Core/IDashScopeClient.cs b/src/Cnblogs.DashScope.Core/IDashScopeClient.cs index a123050..cb61eb5 100644 --- a/src/Cnblogs.DashScope.Core/IDashScopeClient.cs +++ b/src/Cnblogs.DashScope.Core/IDashScopeClient.cs @@ -247,4 +247,14 @@ public Task UploadFileAsync( public Task DeleteFileAsync( DashScopeFileId id, CancellationToken cancellationToken = default); + + /// + /// Start a speech synthesizer session. Related model: cosyvoice + /// + /// The model to use. + /// Cancellation token. + /// + public Task CreateSpeechSynthesizerSocketSessionAsync( + string modelId, + CancellationToken cancellationToken = default); } diff --git a/src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs b/src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs index 5c1b537..cb31f82 100644 --- a/src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs +++ b/src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs @@ -1,6 +1,30 @@ -namespace Cnblogs.DashScope.Core.Internals; +using System.Text.Json; +using System.Text.Json.Serialization; -internal static class DashScopeDefaults +namespace Cnblogs.DashScope.Core.Internals; + +/// +/// Default values for DashScope client. +/// +public static class DashScopeDefaults { - public const string DashScopeApiBaseAddress = "https://dashscope.aliyuncs.com/api/v1/"; + /// + /// Base address for HTTP API. + /// + public const string DashScopeHttpApiBaseAddress = "https://dashscope.aliyuncs.com/api/v1/"; + + /// + /// Base address for websocket API. + /// + public const string DashScopeWebsocketApiBaseAddress = "wss://dashscope.aliyuncs.com/api-ws/v1/inference/"; + + /// + /// Default json serializer options. + /// + public static readonly JsonSerializerOptions SerializationOptions = + new() + { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower, + }; } diff --git a/src/Cnblogs.DashScope.Core/SpeechSynthesizerInput.cs b/src/Cnblogs.DashScope.Core/SpeechSynthesizerInput.cs new file mode 100644 index 0000000..8421fe2 --- /dev/null +++ b/src/Cnblogs.DashScope.Core/SpeechSynthesizerInput.cs @@ -0,0 +1,12 @@ +namespace Cnblogs.DashScope.Core; + +/// +/// Input for TTS task. +/// +public class SpeechSynthesizerInput +{ + /// + /// Input text, can be null for run-task command. + /// + public string? Text { get; set; } +} diff --git a/src/Cnblogs.DashScope.Core/SpeechSynthesizerOutput.cs b/src/Cnblogs.DashScope.Core/SpeechSynthesizerOutput.cs new file mode 100644 index 0000000..3e15197 --- /dev/null +++ b/src/Cnblogs.DashScope.Core/SpeechSynthesizerOutput.cs @@ -0,0 +1,7 @@ +namespace Cnblogs.DashScope.Core; + +/// +/// Output for TTS task. +/// +/// The output sentences. +public record SpeechSynthesizerOutput(SpeechSynthesizerOutputSentences? Sentences); diff --git a/src/Cnblogs.DashScope.Core/SpeechSynthesizerOutputSentences.cs b/src/Cnblogs.DashScope.Core/SpeechSynthesizerOutputSentences.cs new file mode 100644 index 0000000..0698aba --- /dev/null +++ b/src/Cnblogs.DashScope.Core/SpeechSynthesizerOutputSentences.cs @@ -0,0 +1,7 @@ +namespace Cnblogs.DashScope.Core; + +/// +/// Sentences for TTS output. +/// +/// Output words. +public record SpeechSynthesizerOutputSentences(string[]? Words); diff --git a/src/Cnblogs.DashScope.Core/SpeechSynthesizerParameters.cs b/src/Cnblogs.DashScope.Core/SpeechSynthesizerParameters.cs new file mode 100644 index 0000000..8180bba --- /dev/null +++ b/src/Cnblogs.DashScope.Core/SpeechSynthesizerParameters.cs @@ -0,0 +1,42 @@ +namespace Cnblogs.DashScope.Core; + +/// +/// Parameters for TTS task. +/// +public class SpeechSynthesizerParameters +{ + /// + /// Fixed to "PlainText" + /// + public string TextType { get; set; } = "PlainText"; + + /// + /// The voice to use. + /// + public required string Voice { get; set; } + + /// + /// Output file format, can be pcm, wav or mp3. + /// + public string? Format { get; set; } + + /// + /// Output audio sample rate. + /// + public int? SampleRate { get; set; } + + /// + /// Output audio volume, range between 0-100, defaults to 50. + /// + public int? Volume { get; set; } + + /// + /// Speech speed, range between 0.5~2.0, defaults to 1.0. + /// + public float? Rate { get; set; } + + /// + /// Pitch of the voice, range between 0.5~2, defaults to 1.0. + /// + public float? Pitch { get; set; } +} diff --git a/src/Cnblogs.DashScope.Core/SpeechSynthesizerSocketSession.cs b/src/Cnblogs.DashScope.Core/SpeechSynthesizerSocketSession.cs new file mode 100644 index 0000000..e6db918 --- /dev/null +++ b/src/Cnblogs.DashScope.Core/SpeechSynthesizerSocketSession.cs @@ -0,0 +1,108 @@ +namespace Cnblogs.DashScope.Core; + +/// +/// Represents a socket-based TTS session. +/// +/// Underlying websocket. +/// Model name to use. +public class SpeechSynthesizerSocketSession(DashScopeClientWebSocketWrapper socket, string modelId) +{ + /// + /// Send a run-task command, use random GUID as taskId. + /// + /// Input parameters. + /// Input text. + /// The cancellation token to use. + /// The generated taskId. + public Task RunTaskAsync( + SpeechSynthesizerParameters parameters, + string? text = null, + CancellationToken cancellationToken = default) + { + return RunTaskAsync(Guid.NewGuid().ToString(), parameters, text, cancellationToken); + } + + /// + /// Send a run-task command. + /// + /// Unique taskId. + /// Input parameters. + /// Input text. + /// The cancellation token to use. + /// . + public async Task RunTaskAsync( + string taskId, + SpeechSynthesizerParameters parameters, + string? text = null, + CancellationToken cancellationToken = default) + { + var command = new DashScopeWebSocketRequest() + { + Header = new DashScopeWebSocketRequestHeader() + { + Action = "run-task", TaskId = taskId, + }, + Payload = new DashScopeWebSocketRequestPayload() + { + Input = new SpeechSynthesizerInput() { Text = text, }, + TaskGroup = "audio", + Task = "tts", + Function = "SpeechSynthesizer", + Model = modelId, + Parameters = parameters + } + }; + await socket.SendMessageAsync(command, cancellationToken); + await socket.TaskStarted; + return taskId; + } + + /// + /// Append input text to task. + /// + /// TaskId to append. + /// Text to append. + /// Cancellation token to use. + public async Task ContinueTaskAsync(string taskId, string input, CancellationToken cancellationToken = default) + { + var command = new DashScopeWebSocketRequest() + { + Header = new DashScopeWebSocketRequestHeader() + { + Action = "continue-task", TaskId = taskId, + }, + Payload = new DashScopeWebSocketRequestPayload() + { + Input = new SpeechSynthesizerInput() { Text = input } + } + }; + await socket.SendMessageAsync(command, cancellationToken); + } + + /// + /// Send finish-task command. + /// + /// Unique id of the task. + /// The cancellation token to use. + public async Task FinishTaskAsync(string taskId, CancellationToken cancellationToken = default) + { + var command = new DashScopeWebSocketRequest() + { + Header = new DashScopeWebSocketRequestHeader() { TaskId = taskId, Action = "finish-task" }, + Payload = new DashScopeWebSocketRequestPayload() + { + Input = new SpeechSynthesizerInput() + } + }; + await socket.SendMessageAsync(command, cancellationToken); + } + + /// + /// Get the audio stream. + /// + /// + public IAsyncEnumerable GetAudioAsync() + { + return socket.BinaryOutput; + } +} diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/DashScopeClientTests.cs b/test/Cnblogs.DashScope.Sdk.UnitTests/DashScopeClientTests.cs index 93f7d4d..7b3aab5 100644 --- a/test/Cnblogs.DashScope.Sdk.UnitTests/DashScopeClientTests.cs +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/DashScopeClientTests.cs @@ -81,7 +81,7 @@ public void DashScopeClient_Constructor_WithWorkspaceId() // Arrange const string apiKey = "key"; const string workspaceId = "workspaceId"; - var client = new DashScopeClient(apiKey, null, null, workspaceId); + var client = new DashScopeClient(apiKey, workspaceId: workspaceId); // Act var value = HttpClientAccessor.GetValue(client) as HttpClient; diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/ServiceCollectionInjectorTests.cs b/test/Cnblogs.DashScope.Sdk.UnitTests/ServiceCollectionInjectorTests.cs index 02230cc..15ae71d 100644 --- a/test/Cnblogs.DashScope.Sdk.UnitTests/ServiceCollectionInjectorTests.cs +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/ServiceCollectionInjectorTests.cs @@ -1,4 +1,5 @@ using System.Net.Http.Headers; +using Cnblogs.DashScope.AspNetCore; using Cnblogs.DashScope.Core; using FluentAssertions; using Microsoft.Extensions.Configuration; @@ -24,7 +25,7 @@ public void Parameter_Normal_Inject() // Assert provider.GetRequiredService().Should().NotBeNull().And - .BeOfType(); + .BeOfType(); httpClient.Should().NotBeNull(); httpClient.DefaultRequestHeaders.Authorization.Should() .BeEquivalentTo(new AuthenticationHeaderValue("Bearer", ApiKey)); @@ -37,13 +38,13 @@ public void Parameter_HasProxy_Inject() var services = new ServiceCollection(); // Act - services.AddDashScopeClient(ApiKey, ProxyApi); + services.AddDashScopeClient(ApiKey, baseAddress: ProxyApi); var provider = services.BuildServiceProvider(); var httpClient = provider.GetRequiredService().CreateClient(nameof(IDashScopeClient)); // Assert provider.GetRequiredService().Should().NotBeNull().And - .BeOfType(); + .BeOfType(); httpClient.Should().NotBeNull(); httpClient.DefaultRequestHeaders.Authorization.Should() .BeEquivalentTo(new AuthenticationHeaderValue("Bearer", ApiKey)); @@ -70,7 +71,7 @@ public void Configuration_Normal_Inject() // Assert provider.GetRequiredService().Should().NotBeNull().And - .BeOfType(); + .BeOfType(); httpClient.Should().NotBeNull(); httpClient.DefaultRequestHeaders.Authorization.Should() .BeEquivalentTo(new AuthenticationHeaderValue("Bearer", ApiKey)); @@ -97,7 +98,7 @@ public void Configuration_CustomSectionName_Inject() // Assert provider.GetRequiredService().Should().NotBeNull().And - .BeOfType(); + .BeOfType(); httpClient.Should().NotBeNull(); httpClient.DefaultRequestHeaders.Authorization.Should() .BeEquivalentTo(new AuthenticationHeaderValue("Bearer", ApiKey)); @@ -111,14 +112,14 @@ public void Configuration_AddMultipleTime_Replace() var services = new ServiceCollection(); // Act - services.AddDashScopeClient(ApiKey, ProxyApi); - services.AddDashScopeClient(ApiKey, ProxyApi); + services.AddDashScopeClient(ApiKey, baseAddress: ProxyApi); + services.AddDashScopeClient(ApiKey, baseAddress: ProxyApi); var provider = services.BuildServiceProvider(); var httpClient = provider.GetRequiredService().CreateClient(nameof(IDashScopeClient)); // Assert provider.GetRequiredService().Should().NotBeNull().And - .BeOfType(); + .BeOfType(); httpClient.Should().NotBeNull(); httpClient.DefaultRequestHeaders.Authorization.Should() .BeEquivalentTo(new AuthenticationHeaderValue("Bearer", ApiKey)); diff --git a/test/Cnblogs.DashScope.Tests.Shared/Utils/Sut.cs b/test/Cnblogs.DashScope.Tests.Shared/Utils/Sut.cs index cb42ce2..560b308 100644 --- a/test/Cnblogs.DashScope.Tests.Shared/Utils/Sut.cs +++ b/test/Cnblogs.DashScope.Tests.Shared/Utils/Sut.cs @@ -20,7 +20,9 @@ public static class Sut public static (DashScopeClientCore Client, MockHttpMessageHandler Handler) GetTestClient() { var handler = Substitute.ForPartsOf(); - var client = new DashScopeClientCore(new HttpClient(handler) { BaseAddress = new Uri("https://example.com") }); + var client = new DashScopeClientCore( + new HttpClient(handler) { BaseAddress = new Uri("https://example.com") }, + new DashScopeClientWebSocketPool(new DashScopeOptions())); return (client, handler); } } From 7c4840bc2f4d9f91e31454063b76c6eac4d88877 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E6=98=9F=E7=B9=81?= Date: Sun, 18 May 2025 21:51:36 +0800 Subject: [PATCH 02/10] feat: code clean up --- .../DashScopeClientAspNetCore.cs | 1 - .../ServiceCollectionInjector.cs | 6 +++--- src/Cnblogs.DashScope.Core/DashScopeClient.cs | 6 +++--- src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs | 1 - .../DashScopeClientWebSocketWrapper.cs | 4 +--- src/Cnblogs.DashScope.Core/DashScopeOptions.cs | 4 ++-- .../DashScopeWebSocketRequestPayload.cs | 2 ++ src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs | 4 ++-- 8 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/Cnblogs.DashScope.AspNetCore/DashScopeClientAspNetCore.cs b/src/Cnblogs.DashScope.AspNetCore/DashScopeClientAspNetCore.cs index cc75202..173c558 100644 --- a/src/Cnblogs.DashScope.AspNetCore/DashScopeClientAspNetCore.cs +++ b/src/Cnblogs.DashScope.AspNetCore/DashScopeClientAspNetCore.cs @@ -1,5 +1,4 @@ using Cnblogs.DashScope.Core; -using Microsoft.Extensions.Options; namespace Cnblogs.DashScope.AspNetCore; diff --git a/src/Cnblogs.DashScope.AspNetCore/ServiceCollectionInjector.cs b/src/Cnblogs.DashScope.AspNetCore/ServiceCollectionInjector.cs index aa8cc7c..39a388a 100644 --- a/src/Cnblogs.DashScope.AspNetCore/ServiceCollectionInjector.cs +++ b/src/Cnblogs.DashScope.AspNetCore/ServiceCollectionInjector.cs @@ -40,7 +40,7 @@ public static IHttpClientBuilder AddDashScopeClient(this IServiceCollection serv { var apiKey = section["apiKey"] ?? throw new InvalidOperationException("There is no apiKey provided in given section"); - var baseAddress = section["baseAddress"] ?? DashScopeDefaults.DashScopeHttpApiBaseAddress; + var baseAddress = section["baseAddress"] ?? DashScopeDefaults.HttpApiBaseAddress; var workspaceId = section["workspaceId"]; services.Configure(section); return services.AddDashScopeHttpClient(apiKey, baseAddress, workspaceId); @@ -84,7 +84,7 @@ public static IHttpClientBuilder AddDashScopeClient( private static IHttpClientBuilder AddDashScopeHttpClient( this IServiceCollection services, string apiKey, - string baseAddress, + string? baseAddress, string? workspaceId) { services.AddSingleton(sp @@ -100,7 +100,7 @@ private static IHttpClientBuilder AddDashScopeHttpClient( h.DefaultRequestHeaders.Add("X-DashScope-WorkSpace", workspaceId); } - h.BaseAddress = new Uri(baseAddress); + h.BaseAddress = new Uri(baseAddress ?? DashScopeDefaults.HttpApiBaseAddress); }); } } diff --git a/src/Cnblogs.DashScope.Core/DashScopeClient.cs b/src/Cnblogs.DashScope.Core/DashScopeClient.cs index 2f197e6..19757a7 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClient.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClient.cs @@ -27,8 +27,8 @@ public class DashScopeClient : DashScopeClientCore public DashScopeClient( string apiKey, TimeSpan? timeout = null, - string baseAddress = DashScopeDefaults.DashScopeHttpApiBaseAddress, - string baseWebsocketAddress = DashScopeDefaults.DashScopeWebsocketApiBaseAddress, + string baseAddress = DashScopeDefaults.HttpApiBaseAddress, + string baseWebsocketAddress = DashScopeDefaults.WebsocketApiBaseAddress, string? workspaceId = null, int socketPoolSize = 5) : base( @@ -75,7 +75,7 @@ private static HttpClient GetConfiguredClient( { client = new HttpClient { - BaseAddress = new Uri(baseAddress ?? DashScopeDefaults.DashScopeHttpApiBaseAddress), + BaseAddress = new Uri(baseAddress ?? DashScopeDefaults.HttpApiBaseAddress), Timeout = timeout ?? TimeSpan.FromMinutes(2) }; diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs index 265bf74..272b479 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs @@ -1,5 +1,4 @@ using System.Collections.Concurrent; -using System.Net.WebSockets; namespace Cnblogs.DashScope.Core; diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs index 2285e76..6f3e8f7 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs @@ -1,6 +1,4 @@ -using System.Threading.Channels; - -namespace Cnblogs.DashScope.Core; +namespace Cnblogs.DashScope.Core; /// /// Represents a transient wrapper for rented websocket, should be transient. diff --git a/src/Cnblogs.DashScope.Core/DashScopeOptions.cs b/src/Cnblogs.DashScope.Core/DashScopeOptions.cs index 1e02180..dbcd4fe 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeOptions.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeOptions.cs @@ -15,12 +15,12 @@ public class DashScopeOptions /// /// Base address for DashScope HTTP API. /// - public string BaseAddress { get; set; } = DashScopeDefaults.DashScopeHttpApiBaseAddress; + public string BaseAddress { get; set; } = DashScopeDefaults.HttpApiBaseAddress; /// /// Base address for DashScope websocket API. /// - public string BaseWebsocketAddress { get; set; } = DashScopeDefaults.DashScopeWebsocketApiBaseAddress; + public string BaseWebsocketAddress { get; set; } = DashScopeDefaults.WebsocketApiBaseAddress; /// /// Default workspace Id. diff --git a/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestPayload.cs b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestPayload.cs index a951d69..4204e96 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestPayload.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestPayload.cs @@ -3,6 +3,8 @@ /// /// Payload for websocket request. /// +/// Type of the input. +/// Type of the parameter. public class DashScopeWebSocketRequestPayload where TInput : class where TParameter : class diff --git a/src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs b/src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs index cb31f82..7623c1b 100644 --- a/src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs +++ b/src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs @@ -11,12 +11,12 @@ public static class DashScopeDefaults /// /// Base address for HTTP API. /// - public const string DashScopeHttpApiBaseAddress = "https://dashscope.aliyuncs.com/api/v1/"; + public const string HttpApiBaseAddress = "https://dashscope.aliyuncs.com/api/v1/"; /// /// Base address for websocket API. /// - public const string DashScopeWebsocketApiBaseAddress = "wss://dashscope.aliyuncs.com/api-ws/v1/inference/"; + public const string WebsocketApiBaseAddress = "wss://dashscope.aliyuncs.com/api-ws/v1/inference/"; /// /// Default json serializer options. From 51397404788afa9906095cd35b3c14fa56f90d09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E6=98=9F=E7=B9=81?= Date: Mon, 19 May 2025 11:48:21 +0800 Subject: [PATCH 03/10] feat: allow multi-read --- src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs index 066911f..0d054b9 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs @@ -13,7 +13,7 @@ public sealed class DashScopeClientWebSocket : IDisposable { private static readonly UnboundedChannelOptions UnboundedChannelOptions = new() { - SingleReader = true, SingleWriter = true, + SingleWriter = true, }; private readonly ClientWebSocket _socket = new(); From f3f83de38c848997199b1045c312f451a136adb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E6=98=9F=E7=B9=81?= Date: Sun, 25 May 2025 00:55:44 +0800 Subject: [PATCH 04/10] fix: return socket after session disposed --- sample/Cnblogs.DashScope.Sample/Program.cs | 34 ++++++++++--------- .../Cnblogs.DashScope.AspNetCore.csproj | 2 +- .../Cnblogs.DashScope.Core.csproj | 4 +-- src/Cnblogs.DashScope.Core/DashScopeClient.cs | 4 +-- .../DashScopeClientWebSocket.cs | 31 ++++++++++------- .../DashScopeClientWebSocketPool.cs | 11 +++--- .../DashScopeClientWebSocketWrapper.cs | 11 ++++++ .../DashScopeOptions.cs | 2 +- .../DashScopeWebSocketState.cs | 2 +- .../SpeechSynthesizerSocketSession.cs | 18 +++++++++- 10 files changed, 78 insertions(+), 41 deletions(-) diff --git a/sample/Cnblogs.DashScope.Sample/Program.cs b/sample/Cnblogs.DashScope.Sample/Program.cs index 8b2d6f9..f9f74d7 100644 --- a/sample/Cnblogs.DashScope.Sample/Program.cs +++ b/sample/Cnblogs.DashScope.Sample/Program.cs @@ -9,7 +9,8 @@ using Microsoft.Extensions.AI; Console.WriteLine("Reading key from environment variable DASHSCOPE_KEY"); -var apiKey = Environment.GetEnvironmentVariable("DASHSCOPE_API_KEY"); +var apiKey = Environment.GetEnvironmentVariable("DASHSCOPE_KEY", EnvironmentVariableTarget.Process) + ?? Environment.GetEnvironmentVariable("DASHSCOPE_KEY", EnvironmentVariableTarget.User); if (string.IsNullOrEmpty(apiKey)) { Console.Write("ApiKey > "); @@ -64,23 +65,24 @@ await ApplicationCallAsync(applicationId, userInput); break; case SampleType.TextToSpeech: - var tts = await dashScopeClient.CreateSpeechSynthesizerSocketSessionAsync("cosyvoice-v2"); - var taskId = await tts.RunTaskAsync( - new SpeechSynthesizerParameters() { Voice = "longxiaochun_v2", Format = "mp3" }); - await tts.ContinueTaskAsync(taskId, "博客园"); - await tts.ContinueTaskAsync(taskId, "代码改变世界"); - await tts.FinishTaskAsync(taskId); - var file = new FileInfo("tts.mp3"); - var writer = file.OpenWrite(); - await foreach (var b in tts.GetAudioAsync()) { - writer.WriteByte(b); - } - - writer.Close(); + using var tts = await dashScopeClient.CreateSpeechSynthesizerSocketSessionAsync("cosyvoice-v2"); + var taskId = await tts.RunTaskAsync( + new SpeechSynthesizerParameters() { Voice = "longxiaochun_v2", Format = "mp3" }); + await tts.ContinueTaskAsync(taskId, "博客园"); + await tts.ContinueTaskAsync(taskId, "代码改变世界"); + await tts.FinishTaskAsync(taskId); + var file = new FileInfo("tts.mp3"); + var writer = file.OpenWrite(); + await foreach (var b in tts.GetAudioAsync()) + { + writer.WriteByte(b); + } - Console.WriteLine($"audio saved to {file.FullName}"); - break; + writer.Close(); + Console.WriteLine($"audio saved to {file.FullName}"); + break; + } } return; diff --git a/src/Cnblogs.DashScope.AspNetCore/Cnblogs.DashScope.AspNetCore.csproj b/src/Cnblogs.DashScope.AspNetCore/Cnblogs.DashScope.AspNetCore.csproj index 79fb6c6..ba30d5f 100644 --- a/src/Cnblogs.DashScope.AspNetCore/Cnblogs.DashScope.AspNetCore.csproj +++ b/src/Cnblogs.DashScope.AspNetCore/Cnblogs.DashScope.AspNetCore.csproj @@ -3,7 +3,7 @@ Cnblogs.DashScopeSDK true - Cnblogs;Dashscope;AI;Sdk;Embedding;AspNetCore + Cnblogs;Dashscope;AI;Sdk;Embedding;AspNetCore;Bailian Cnblogs.DashScope.AspNetCore diff --git a/src/Cnblogs.DashScope.Core/Cnblogs.DashScope.Core.csproj b/src/Cnblogs.DashScope.Core/Cnblogs.DashScope.Core.csproj index b164ed0..f337ae6 100644 --- a/src/Cnblogs.DashScope.Core/Cnblogs.DashScope.Core.csproj +++ b/src/Cnblogs.DashScope.Core/Cnblogs.DashScope.Core.csproj @@ -3,7 +3,7 @@ Cnblogs.DashScopeSDK true - Cnblogs;Dashscope;AI;Sdk;Embedding; + Cnblogs;Dashscope;AI;Sdk;Embedding;Bailian; Provide pure api access to DashScope without extra references. Cnblogs.DashScope.Sdk should be used for general purpose. @@ -15,5 +15,5 @@ - + diff --git a/src/Cnblogs.DashScope.Core/DashScopeClient.cs b/src/Cnblogs.DashScope.Core/DashScopeClient.cs index 19757a7..11b20e2 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClient.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClient.cs @@ -30,7 +30,7 @@ public DashScopeClient( string baseAddress = DashScopeDefaults.HttpApiBaseAddress, string baseWebsocketAddress = DashScopeDefaults.WebsocketApiBaseAddress, string? workspaceId = null, - int socketPoolSize = 5) + int socketPoolSize = 32) : base( GetConfiguredClient(apiKey, timeout, baseAddress, workspaceId), GetConfiguredSocketPool(apiKey, baseWebsocketAddress, socketPoolSize, workspaceId)) @@ -40,7 +40,7 @@ public DashScopeClient( private static DashScopeClientWebSocketPool GetConfiguredSocketPool( string apiKey, string baseAddress, - int socketPoolSize = 5, + int socketPoolSize, string? workspaceId = null) { var key = GetCacheKey(); diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs index 0d054b9..0191cda 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs @@ -11,10 +11,13 @@ namespace Cnblogs.DashScope.Core; /// public sealed class DashScopeClientWebSocket : IDisposable { - private static readonly UnboundedChannelOptions UnboundedChannelOptions = new() - { - SingleWriter = true, - }; + private static readonly UnboundedChannelOptions UnboundedChannelOptions = + new() + { + SingleWriter = true, + SingleReader = true, + AllowSynchronousContinuations = true + }; private readonly ClientWebSocket _socket = new(); private Task? _receiveTask; @@ -63,7 +66,7 @@ public async Task ConnectAsync(Uri uri, CancellationToken cancellationT { await _socket.ConnectAsync(uri, cancellationToken); _receiveTask = ReceiveMessagesAsync(cancellationToken); - State = DashScopeWebSocketState.Connected; + State = DashScopeWebSocketState.Ready; } /// @@ -71,6 +74,7 @@ public async Task ConnectAsync(Uri uri, CancellationToken cancellationT /// public void ResetOutput() { + BinaryOutput.Writer.TryComplete(); BinaryOutput = Channel.CreateUnbounded(UnboundedChannelOptions); _taskStartedSignal = new TaskCompletionSource(); } @@ -84,7 +88,7 @@ public void ResetOutput() /// Type of the input. /// Type of the parameter. /// The is requested. - /// Websocket is not connected. + /// Websocket is not connected or already closed. /// The underlying websocket has already been closed. public Task SendMessageAsync( DashScopeWebSocketRequest request, @@ -92,9 +96,14 @@ public Task SendMessageAsync( where TInput : class where TParameter : class { + if (State == DashScopeWebSocketState.Closed) + { + throw new InvalidOperationException("Socket is already closed."); + } + + var json = JsonSerializer.Serialize(request, DashScopeDefaults.SerializationOptions); return _socket.SendAsync( - new ArraySegment( - Encoding.UTF8.GetBytes(JsonSerializer.Serialize(request, DashScopeDefaults.SerializationOptions))), + new ArraySegment(Encoding.UTF8.GetBytes(json)), WebSocketMessageType.Text, true, cancellationToken); @@ -110,7 +119,6 @@ public Task SendMessageAsync( try { var result = await _socket.ReceiveAsync(segment, cancellationToken); - if (result.MessageType == WebSocketMessageType.Close) { await CloseAsync(cancellationToken); @@ -168,7 +176,7 @@ public async Task ReceiveMessagesAsync(CancellationToken cancellationTo _taskStartedSignal.TrySetResult(true); break; case "task-finished": - State = DashScopeWebSocketState.Connected; + State = DashScopeWebSocketState.Ready; BinaryOutput.Writer.Complete(); break; case "task-failed": @@ -199,7 +207,7 @@ public async Task ReceiveMessagesAsync(CancellationToken cancellationTo public async Task CloseAsync(CancellationToken cancellationToken = default) { await _socket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", cancellationToken); - Dispose(); + State = DashScopeWebSocketState.Closed; } private void Dispose(bool disposing) @@ -208,7 +216,6 @@ private void Dispose(bool disposing) { // Dispose managed resources. _socket.Dispose(); - State = DashScopeWebSocketState.Closed; BinaryOutput.Writer.TryComplete(); } } diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs index 272b479..aab9a8e 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs @@ -13,10 +13,11 @@ public sealed class DashScopeClientWebSocketPool(DashScopeOptions options) : IDi internal void ReturnSocketAsync(DashScopeClientWebSocket socket) { - if (socket.State != DashScopeWebSocketState.Connected) + if (socket.State != DashScopeWebSocketState.Ready) { // not returnable, disposing. socket.Dispose(); + return; } _available.Add(socket); @@ -39,10 +40,11 @@ public async Task RentSocketAsync( if (_available.IsEmpty == false) { found = _available.TryTake(out socket); - if (socket?.State != DashScopeWebSocketState.Connected) + if (socket?.State != DashScopeWebSocketState.Ready) { // expired found = false; + socket?.Dispose(); } } else @@ -52,12 +54,11 @@ public async Task RentSocketAsync( } } - return ActiveSocket(socket!); + return ActivateSocket(socket!); } - private DashScopeClientWebSocketWrapper ActiveSocket(DashScopeClientWebSocket socket) + private DashScopeClientWebSocketWrapper ActivateSocket(DashScopeClientWebSocket socket) { - socket.ResetOutput(); _active.Add(socket); return new DashScopeClientWebSocketWrapper(socket, this); } diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs index 6f3e8f7..50885b3 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs @@ -18,6 +18,11 @@ public sealed record DashScopeClientWebSocketWrapper(DashScopeClientWebSocket So /// public Task TaskStarted => Socket.TaskStarted; + /// + /// Reset task signal and output cannel. + /// + public void ResetTask() => Socket.ResetOutput(); + /// /// Send message to server. /// @@ -40,5 +45,11 @@ public Task SendMessageAsync( public void Dispose() { Pool.ReturnSocketAsync(Socket); + GC.SuppressFinalize(this); + } + + ~DashScopeClientWebSocketWrapper() + { + Dispose(); } } diff --git a/src/Cnblogs.DashScope.Core/DashScopeOptions.cs b/src/Cnblogs.DashScope.Core/DashScopeOptions.cs index dbcd4fe..cf2f3c3 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeOptions.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeOptions.cs @@ -30,5 +30,5 @@ public class DashScopeOptions /// /// Default socket pool size. /// - public int SocketPoolSize { get; set; } = 10; + public int SocketPoolSize { get; set; } = 32; } diff --git a/src/Cnblogs.DashScope.Core/DashScopeWebSocketState.cs b/src/Cnblogs.DashScope.Core/DashScopeWebSocketState.cs index 246be03..2cb73b1 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeWebSocketState.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeWebSocketState.cs @@ -13,7 +13,7 @@ public enum DashScopeWebSocketState /// /// The socket has been connected and ready. /// - Connected, + Ready, /// /// The socket has a running task waiting to be finished. diff --git a/src/Cnblogs.DashScope.Core/SpeechSynthesizerSocketSession.cs b/src/Cnblogs.DashScope.Core/SpeechSynthesizerSocketSession.cs index e6db918..15000fe 100644 --- a/src/Cnblogs.DashScope.Core/SpeechSynthesizerSocketSession.cs +++ b/src/Cnblogs.DashScope.Core/SpeechSynthesizerSocketSession.cs @@ -5,7 +5,8 @@ /// /// Underlying websocket. /// Model name to use. -public class SpeechSynthesizerSocketSession(DashScopeClientWebSocketWrapper socket, string modelId) +public sealed class SpeechSynthesizerSocketSession(DashScopeClientWebSocketWrapper socket, string modelId) + : IDisposable { /// /// Send a run-task command, use random GUID as taskId. @@ -52,6 +53,7 @@ public async Task RunTaskAsync( Parameters = parameters } }; + socket.ResetTask(); await socket.SendMessageAsync(command, cancellationToken); await socket.TaskStarted; return taskId; @@ -105,4 +107,18 @@ public IAsyncEnumerable GetAudioAsync() { return socket.BinaryOutput; } + + private void Dispose(bool disposing) + { + if (disposing) + { + socket.Dispose(); + } + } + + /// + public void Dispose() + { + Dispose(true); + } } From 8015f9f34aab98f3f04071c616d67b5485492fdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E6=98=9F=E7=B9=81?= Date: Sun, 25 May 2025 12:20:49 +0800 Subject: [PATCH 05/10] feat: add blazor sample template --- Cnblogs.DashScope.Sdk.sln | 14 +++ .../Cnblogs.DashScope.Sample.csproj | 38 +++---- .../Cnblogs.DashScope.WebSample.Client.csproj | 16 +++ .../Pages/Counter.razor | 20 ++++ .../Program.cs | 5 + .../_Imports.razor | 9 ++ .../wwwroot/appsettings.Development.json | 8 ++ .../wwwroot/appsettings.json | 8 ++ .../Cnblogs.DashScope.WebSample.csproj | 23 ++++ .../Components/App.razor | 20 ++++ .../Components/Layout/MainLayout.razor | 23 ++++ .../Components/Layout/MainLayout.razor.css | 96 ++++++++++++++++ .../Components/Layout/NavMenu.razor | 29 +++++ .../Components/Layout/NavMenu.razor.css | 105 ++++++++++++++++++ .../Components/Pages/Error.razor | 38 +++++++ .../Components/Pages/Home.razor | 7 ++ .../Components/Pages/Weather.razor | 67 +++++++++++ .../Components/Routes.razor | 6 + .../Components/_Imports.razor | 11 ++ sample/Cnblogs.DashScope.WebSample/Program.cs | 36 ++++++ .../Properties/launchSettings.json | 41 +++++++ .../appsettings.Development.json | 8 ++ .../appsettings.json | 9 ++ .../wwwroot/app.css | 51 +++++++++ .../wwwroot/favicon.png | Bin 0 -> 1148 bytes .../wwwroot/tailwind.min.js | 8 ++ 26 files changed, 677 insertions(+), 19 deletions(-) create mode 100644 sample/Cnblogs.DashScope.WebSample.Client/Cnblogs.DashScope.WebSample.Client.csproj create mode 100644 sample/Cnblogs.DashScope.WebSample.Client/Pages/Counter.razor create mode 100644 sample/Cnblogs.DashScope.WebSample.Client/Program.cs create mode 100644 sample/Cnblogs.DashScope.WebSample.Client/_Imports.razor create mode 100644 sample/Cnblogs.DashScope.WebSample.Client/wwwroot/appsettings.Development.json create mode 100644 sample/Cnblogs.DashScope.WebSample.Client/wwwroot/appsettings.json create mode 100644 sample/Cnblogs.DashScope.WebSample/Cnblogs.DashScope.WebSample.csproj create mode 100644 sample/Cnblogs.DashScope.WebSample/Components/App.razor create mode 100644 sample/Cnblogs.DashScope.WebSample/Components/Layout/MainLayout.razor create mode 100644 sample/Cnblogs.DashScope.WebSample/Components/Layout/MainLayout.razor.css create mode 100644 sample/Cnblogs.DashScope.WebSample/Components/Layout/NavMenu.razor create mode 100644 sample/Cnblogs.DashScope.WebSample/Components/Layout/NavMenu.razor.css create mode 100644 sample/Cnblogs.DashScope.WebSample/Components/Pages/Error.razor create mode 100644 sample/Cnblogs.DashScope.WebSample/Components/Pages/Home.razor create mode 100644 sample/Cnblogs.DashScope.WebSample/Components/Pages/Weather.razor create mode 100644 sample/Cnblogs.DashScope.WebSample/Components/Routes.razor create mode 100644 sample/Cnblogs.DashScope.WebSample/Components/_Imports.razor create mode 100644 sample/Cnblogs.DashScope.WebSample/Program.cs create mode 100644 sample/Cnblogs.DashScope.WebSample/Properties/launchSettings.json create mode 100644 sample/Cnblogs.DashScope.WebSample/appsettings.Development.json create mode 100644 sample/Cnblogs.DashScope.WebSample/appsettings.json create mode 100644 sample/Cnblogs.DashScope.WebSample/wwwroot/app.css create mode 100644 sample/Cnblogs.DashScope.WebSample/wwwroot/favicon.png create mode 100644 sample/Cnblogs.DashScope.WebSample/wwwroot/tailwind.min.js diff --git a/Cnblogs.DashScope.Sdk.sln b/Cnblogs.DashScope.Sdk.sln index 165038d..328508e 100644 --- a/Cnblogs.DashScope.Sdk.sln +++ b/Cnblogs.DashScope.Sdk.sln @@ -24,6 +24,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cnblogs.DashScope.AI.UnitTe EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cnblogs.DashScope.Tests.Shared", "test\Cnblogs.DashScope.Tests.Shared\Cnblogs.DashScope.Tests.Shared.csproj", "{06F0AF23-445B-4C6F-9E19-570DA9B7435D}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cnblogs.DashScope.WebSample", "sample\Cnblogs.DashScope.WebSample\Cnblogs.DashScope.WebSample.csproj", "{A3BC8B2D-BE81-4614-963B-9313F74D89B4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cnblogs.DashScope.WebSample.Client", "sample\Cnblogs.DashScope.WebSample.Client\Cnblogs.DashScope.WebSample.Client.csproj", "{FA6E73D6-32C4-453A-88C5-00E1AFFE1397}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -37,6 +41,8 @@ Global {CC389455-A3EA-4F09-B524-4DC351A1E1AA} = {008988ED-0A3B-4272-BCC3-7B4110699345} {5088DE77-1CE3-46FB-B9D0-27A6C9A5EED1} = {CFC8ECB3-5248-46CD-A56C-EC088F2A3804} {5D5AD75A-8084-4738-AC56-B8A23E649452} = {008988ED-0A3B-4272-BCC3-7B4110699345} + {A3BC8B2D-BE81-4614-963B-9313F74D89B4} = {2E15D1EC-4A07-416E-8BE6-D907F509FD35} + {FA6E73D6-32C4-453A-88C5-00E1AFFE1397} = {2E15D1EC-4A07-416E-8BE6-D907F509FD35} {25EE79E1-147B-42FD-AFEA-E1550EDD1D36} = {CFC8ECB3-5248-46CD-A56C-EC088F2A3804} {06F0AF23-445B-4C6F-9E19-570DA9B7435D} = {CFC8ECB3-5248-46CD-A56C-EC088F2A3804} EndGlobalSection @@ -69,6 +75,14 @@ Global {5D5AD75A-8084-4738-AC56-B8A23E649452}.Debug|Any CPU.Build.0 = Debug|Any CPU {5D5AD75A-8084-4738-AC56-B8A23E649452}.Release|Any CPU.ActiveCfg = Release|Any CPU {5D5AD75A-8084-4738-AC56-B8A23E649452}.Release|Any CPU.Build.0 = Release|Any CPU + {A3BC8B2D-BE81-4614-963B-9313F74D89B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A3BC8B2D-BE81-4614-963B-9313F74D89B4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A3BC8B2D-BE81-4614-963B-9313F74D89B4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A3BC8B2D-BE81-4614-963B-9313F74D89B4}.Release|Any CPU.Build.0 = Release|Any CPU + {FA6E73D6-32C4-453A-88C5-00E1AFFE1397}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FA6E73D6-32C4-453A-88C5-00E1AFFE1397}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FA6E73D6-32C4-453A-88C5-00E1AFFE1397}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FA6E73D6-32C4-453A-88C5-00E1AFFE1397}.Release|Any CPU.Build.0 = Release|Any CPU {25EE79E1-147B-42FD-AFEA-E1550EDD1D36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {25EE79E1-147B-42FD-AFEA-E1550EDD1D36}.Debug|Any CPU.Build.0 = Debug|Any CPU {25EE79E1-147B-42FD-AFEA-E1550EDD1D36}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/sample/Cnblogs.DashScope.Sample/Cnblogs.DashScope.Sample.csproj b/sample/Cnblogs.DashScope.Sample/Cnblogs.DashScope.Sample.csproj index ba80da7..76001b4 100644 --- a/sample/Cnblogs.DashScope.Sample/Cnblogs.DashScope.Sample.csproj +++ b/sample/Cnblogs.DashScope.Sample/Cnblogs.DashScope.Sample.csproj @@ -1,26 +1,26 @@  - - Exe - net8.0 - enable - enable - false - + + Exe + net8.0 + enable + enable + false + - - - - + + + + - - - Always - - + + + Always + + - - - + + + diff --git a/sample/Cnblogs.DashScope.WebSample.Client/Cnblogs.DashScope.WebSample.Client.csproj b/sample/Cnblogs.DashScope.WebSample.Client/Cnblogs.DashScope.WebSample.Client.csproj new file mode 100644 index 0000000..ab410d9 --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample.Client/Cnblogs.DashScope.WebSample.Client.csproj @@ -0,0 +1,16 @@ + + + + net8.0 + enable + enable + true + Default + false + + + + + + + diff --git a/sample/Cnblogs.DashScope.WebSample.Client/Pages/Counter.razor b/sample/Cnblogs.DashScope.WebSample.Client/Pages/Counter.razor new file mode 100644 index 0000000..ce6626a --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample.Client/Pages/Counter.razor @@ -0,0 +1,20 @@ +@page "/counter" +@rendermode InteractiveAuto + +Counter + +

Counter

+ +

Current count: @currentCount

+ + + +@code { + private int currentCount = 0; + + private void IncrementCount() + { + currentCount++; + } + +} diff --git a/sample/Cnblogs.DashScope.WebSample.Client/Program.cs b/sample/Cnblogs.DashScope.WebSample.Client/Program.cs new file mode 100644 index 0000000..519269f --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample.Client/Program.cs @@ -0,0 +1,5 @@ +using Microsoft.AspNetCore.Components.WebAssembly.Hosting; + +var builder = WebAssemblyHostBuilder.CreateDefault(args); + +await builder.Build().RunAsync(); diff --git a/sample/Cnblogs.DashScope.WebSample.Client/_Imports.razor b/sample/Cnblogs.DashScope.WebSample.Client/_Imports.razor new file mode 100644 index 0000000..84ddc7a --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample.Client/_Imports.razor @@ -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 Cnblogs.DashScope.WebSample.Client diff --git a/sample/Cnblogs.DashScope.WebSample.Client/wwwroot/appsettings.Development.json b/sample/Cnblogs.DashScope.WebSample.Client/wwwroot/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample.Client/wwwroot/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/sample/Cnblogs.DashScope.WebSample.Client/wwwroot/appsettings.json b/sample/Cnblogs.DashScope.WebSample.Client/wwwroot/appsettings.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample.Client/wwwroot/appsettings.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/sample/Cnblogs.DashScope.WebSample/Cnblogs.DashScope.WebSample.csproj b/sample/Cnblogs.DashScope.WebSample/Cnblogs.DashScope.WebSample.csproj new file mode 100644 index 0000000..b8f2ba9 --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample/Cnblogs.DashScope.WebSample.csproj @@ -0,0 +1,23 @@ + + + + net8.0 + enable + enable + false + + + + + + + + + + + <_ContentIncludedByDefault Remove="Cnblogs.DashScope.WebSample\obj\Cnblogs.DashScope.WebSample.csproj.nuget.dgspec.json" /> + <_ContentIncludedByDefault Remove="Cnblogs.DashScope.WebSample\obj\project.assets.json" /> + <_ContentIncludedByDefault Remove="wwwroot\tailwind.min.js" /> + + + diff --git a/sample/Cnblogs.DashScope.WebSample/Components/App.razor b/sample/Cnblogs.DashScope.WebSample/Components/App.razor new file mode 100644 index 0000000..64c93c2 --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample/Components/App.razor @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Layout/MainLayout.razor b/sample/Cnblogs.DashScope.WebSample/Components/Layout/MainLayout.razor new file mode 100644 index 0000000..89f4b0c --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample/Components/Layout/MainLayout.razor @@ -0,0 +1,23 @@ +@inherits LayoutComponentBase + +
+ + +
+
+ About +
+ +
+ @Body +
+
+
+ +
+ An unhandled error has occurred. + Reload + 🗙 +
diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Layout/MainLayout.razor.css b/sample/Cnblogs.DashScope.WebSample/Components/Layout/MainLayout.razor.css new file mode 100644 index 0000000..038baf1 --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample/Components/Layout/MainLayout.razor.css @@ -0,0 +1,96 @@ +.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 { + background: lightyellow; + bottom: 0; + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); + display: none; + left: 0; + padding: 0.6rem 1.25rem 0.7rem 1.25rem; + position: fixed; + width: 100%; + z-index: 1000; +} + + #blazor-error-ui .dismiss { + cursor: pointer; + position: absolute; + right: 0.75rem; + top: 0.5rem; + } diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Layout/NavMenu.razor b/sample/Cnblogs.DashScope.WebSample/Components/Layout/NavMenu.razor new file mode 100644 index 0000000..aacaa12 --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample/Components/Layout/NavMenu.razor @@ -0,0 +1,29 @@ + + + + + diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Layout/NavMenu.razor.css b/sample/Cnblogs.DashScope.WebSample/Components/Layout/NavMenu.razor.css new file mode 100644 index 0000000..4e15395 --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample/Components/Layout/NavMenu.razor.css @@ -0,0 +1,105 @@ +.navbar-toggler { + appearance: none; + cursor: pointer; + width: 3.5rem; + height: 2.5rem; + color: white; + position: absolute; + top: 0.5rem; + right: 1rem; + border: 1px solid rgba(255, 255, 255, 0.1); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1); +} + +.navbar-toggler:checked { + background-color: rgba(255, 255, 255, 0.5); +} + +.top-row { + height: 3.5rem; + background-color: rgba(0,0,0,0.4); +} + +.navbar-brand { + font-size: 1.1rem; +} + +.bi { + display: inline-block; + position: relative; + width: 1.25rem; + height: 1.25rem; + margin-right: 0.75rem; + top: -1px; + background-size: cover; +} + +.bi-house-door-fill-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E"); +} + +.bi-plus-square-fill-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E"); +} + +.bi-list-nested-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E"); +} + +.nav-item { + font-size: 0.9rem; + padding-bottom: 0.5rem; +} + + .nav-item:first-of-type { + padding-top: 1rem; + } + + .nav-item:last-of-type { + padding-bottom: 1rem; + } + + .nav-item ::deep .nav-link { + color: #d7d7d7; + background: none; + border: none; + border-radius: 4px; + height: 3rem; + display: flex; + align-items: center; + line-height: 3rem; + width: 100%; + } + +.nav-item ::deep a.active { + background-color: rgba(255,255,255,0.37); + color: white; +} + +.nav-item ::deep .nav-link:hover { + background-color: rgba(255,255,255,0.1); + color: white; +} + +.nav-scrollable { + display: none; +} + +.navbar-toggler:checked ~ .nav-scrollable { + display: block; +} + +@media (min-width: 641px) { + .navbar-toggler { + display: none; + } + + .nav-scrollable { + /* Never collapse the sidebar for wide screens */ + display: block; + + /* Allow sidebar to scroll for tall menus */ + height: calc(100vh - 3.5rem); + overflow-y: auto; + } +} diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Pages/Error.razor b/sample/Cnblogs.DashScope.WebSample/Components/Pages/Error.razor new file mode 100644 index 0000000..c8dfb55 --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample/Components/Pages/Error.razor @@ -0,0 +1,38 @@ +@page "/Error" +@using System.Diagnostics + +Error + +

Error.

+

An error occurred while processing your request.

+ +@if (ShowRequestId) +{ +

+ Request ID: @RequestId +

+} + +

Development Mode

+

+ Swapping to Development environment will display more detailed information about the error that occurred. +

+

+ The Development environment shouldn't be enabled for deployed applications. + It can result in displaying sensitive information from exceptions to end users. + For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development + and restarting the app. +

+ +@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; + +} diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Pages/Home.razor b/sample/Cnblogs.DashScope.WebSample/Components/Pages/Home.razor new file mode 100644 index 0000000..9001e0b --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample/Components/Pages/Home.razor @@ -0,0 +1,7 @@ +@page "/" + +Home + +

Hello, world!

+ +Welcome to your new app. diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Pages/Weather.razor b/sample/Cnblogs.DashScope.WebSample/Components/Pages/Weather.razor new file mode 100644 index 0000000..4074a91 --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample/Components/Pages/Weather.razor @@ -0,0 +1,67 @@ +@page "/weather" +@attribute [StreamRendering] + +Weather + +

Weather

+ +

This component demonstrates showing data.

+ +@if (forecasts == null) +{ +

+ Loading... +

+} +else +{ + + + + + + + + + + + @foreach (var forecast in forecasts) + { + + + + + + + } + +
DateTemp. (C)Temp. (F)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
+} + +@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); + } + +} diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Routes.razor b/sample/Cnblogs.DashScope.WebSample/Components/Routes.razor new file mode 100644 index 0000000..fd6715a --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample/Components/Routes.razor @@ -0,0 +1,6 @@ + + + + + + diff --git a/sample/Cnblogs.DashScope.WebSample/Components/_Imports.razor b/sample/Cnblogs.DashScope.WebSample/Components/_Imports.razor new file mode 100644 index 0000000..2642071 --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample/Components/_Imports.razor @@ -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 Cnblogs.DashScope.WebSample +@using Cnblogs.DashScope.WebSample.Client +@using Cnblogs.DashScope.WebSample.Components diff --git a/sample/Cnblogs.DashScope.WebSample/Program.cs b/sample/Cnblogs.DashScope.WebSample/Program.cs new file mode 100644 index 0000000..b728c3d --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample/Program.cs @@ -0,0 +1,36 @@ +using Cnblogs.DashScope.WebSample.Client.Pages; +using Cnblogs.DashScope.WebSample.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.UseHttpsRedirection(); + +app.UseStaticFiles(); +app.UseAntiforgery(); + +app.MapRazorComponents() + .AddInteractiveServerRenderMode() + .AddInteractiveWebAssemblyRenderMode() + .AddAdditionalAssemblies(typeof(Cnblogs.DashScope.WebSample.Client._Imports).Assembly); + +app.Run(); diff --git a/sample/Cnblogs.DashScope.WebSample/Properties/launchSettings.json b/sample/Cnblogs.DashScope.WebSample/Properties/launchSettings.json new file mode 100644 index 0000000..4ff3962 --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample/Properties/launchSettings.json @@ -0,0 +1,41 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:22697", + "sslPort": 44358 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "http://localhost:5033", + "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:7194;http://localhost:5033", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } + } diff --git a/sample/Cnblogs.DashScope.WebSample/appsettings.Development.json b/sample/Cnblogs.DashScope.WebSample/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/sample/Cnblogs.DashScope.WebSample/appsettings.json b/sample/Cnblogs.DashScope.WebSample/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/sample/Cnblogs.DashScope.WebSample/wwwroot/app.css b/sample/Cnblogs.DashScope.WebSample/wwwroot/app.css new file mode 100644 index 0000000..2bd9b78 --- /dev/null +++ b/sample/Cnblogs.DashScope.WebSample/wwwroot/app.css @@ -0,0 +1,51 @@ +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; +} diff --git a/sample/Cnblogs.DashScope.WebSample/wwwroot/favicon.png b/sample/Cnblogs.DashScope.WebSample/wwwroot/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8422b59695935d180d11d5dbe99653e711097819 GIT binary patch literal 1148 zcmV-?1cUpDP)9h26h2-Cs%i*@Moc3?#6qJID|D#|3|2Hn7gTIYEkr|%Xjp);YgvFmB&0#2E2b=| zkVr)lMv9=KqwN&%obTp-$<51T%rx*NCwceh-E+=&e(oLO`@Z~7gybJ#U|^tB2Pai} zRN@5%1qsZ1e@R(XC8n~)nU1S0QdzEYlWPdUpH{wJ2Pd4V8kI3BM=)sG^IkUXF2-j{ zrPTYA6sxpQ`Q1c6mtar~gG~#;lt=s^6_OccmRd>o{*=>)KS=lM zZ!)iG|8G0-9s3VLm`bsa6e ze*TlRxAjXtm^F8V`M1%s5d@tYS>&+_ga#xKGb|!oUBx3uc@mj1%=MaH4GR0tPBG_& z9OZE;->dO@`Q)nr<%dHAsEZRKl zedN6+3+uGHejJp;Q==pskSAcRcyh@6mjm2z-uG;s%dM-u0*u##7OxI7wwyCGpS?4U zBFAr(%GBv5j$jS@@t@iI8?ZqE36I^4t+P^J9D^ELbS5KMtZ z{Qn#JnSd$15nJ$ggkF%I4yUQC+BjDF^}AtB7w348EL>7#sAsLWs}ndp8^DsAcOIL9 zTOO!!0!k2`9BLk25)NeZp7ev>I1Mn={cWI3Yhx2Q#DnAo4IphoV~R^c0x&nw*MoIV zPthX?{6{u}sMS(MxD*dmd5rU(YazQE59b|TsB5Tm)I4a!VaN@HYOR)DwH1U5y(E)z zQqQU*B%MwtRQ$%x&;1p%ANmc|PkoFJZ%<-uq%PX&C!c-7ypis=eP+FCeuv+B@h#{4 zGx1m0PjS~FJt}3mdt4c!lel`1;4W|03kcZRG+DzkTy|7-F~eDsV2Tx!73dM0H0CTh zl)F-YUkE1zEzEW(;JXc|KR5{ox%YTh{$%F$a36JP6Nb<0%#NbSh$dMYF-{ z1_x(Vx)}fs?5_|!5xBTWiiIQHG<%)*e=45Fhjw_tlnmlixq;mUdC$R8v#j( zhQ$9YR-o%i5Uc`S?6EC51!bTRK=Xkyb<18FkCKnS2;o*qlij1YA@-nRpq#OMTX&RbL<^2q@0qja!uIvI;j$6>~k@IMwD42=8$$!+R^@5o6HX(*n~{var e=10;function t(t,o){let a=o?.from?{file:o.from,code:t}:null;"\ufeff"===t[0]&&(t=" "+t.slice(1));let i,l=[],s=[],c=[],u=null,d=null,f="",p="",h=0;for(let o=0;o0&&t[n]===e[e.length-1]&&(e=e.slice(0,-1))}}let c=n(f,s);if(!c)throw new Error("Invalid custom property, expected a value");a&&(c.src=[a,r,o],c.dst=[a,r,o]),u?u.nodes.push(c):l.push(c),f=""}else if(59===m&&64===f.charCodeAt(0))d=r(f),a&&(d.src=[a,h,o],d.dst=[a,h,o]),u?u.nodes.push(d):l.push(d),f="",d=null;else if(59===m&&")"!==p[p.length-1]){let e=n(f);if(!e)throw 0===f.length?new Error("Unexpected semicolon"):new Error(`Invalid declaration: \`${f.trim()}\``);a&&(e.src=[a,h,o],e.dst=[a,h,o]),u?u.nodes.push(e):l.push(e),f=""}else if(123===m&&")"!==p[p.length-1])p+="}",d=b(f.trim()),a&&(d.src=[a,h,o],d.dst=[a,h,o]),u&&u.nodes.push(d),c.push(u),u=d,f="",d=null;else if(125===m&&")"!==p[p.length-1]){if(""===p)throw new Error("Missing opening {");if(p=p.slice(0,-1),f.length>0)if(64===f.charCodeAt(0))d=r(f),a&&(d.src=[a,h,o],d.dst=[a,h,o]),u?u.nodes.push(d):l.push(d),f="",d=null;else{let e=f.indexOf(":");if(u){let t=n(f,e);if(!t)throw new Error(`Invalid declaration: \`${f.trim()}\``);a&&(t.src=[a,h,o],t.dst=[a,h,o]),u.nodes.push(t)}}let e=c.pop()??null;null===e&&u&&l.push(u),u=e,f="",d=null}else if(40===m)p+=")",f+="(";else if(41===m){if(")"!==p[p.length-1])throw new Error("Missing opening (");p=p.slice(0,-1),f+=")"}else{if(0===f.length&&(32===m||m===e||9===m))continue;""===f&&(h=o),f+=String.fromCharCode(m)}}}if(64===f.charCodeAt(0)){let e=r(f);a&&(e.src=[a,h,t.length],e.dst=[a,h,t.length]),l.push(e)}if(p.length>0&&u){if("rule"===u.kind)throw new Error(`Missing closing } at ${u.selector}`);if("at-rule"===u.kind)throw new Error(`Missing closing } at ${u.name} ${u.params}`)}return s.length>0?s.concat(l):l}function r(e,t=[]){let r=e,n="";for(let t=5;t=1&&t<=31||127===t||0===o&&t>=48&&t<=57||1===o&&t>=48&&t<=57&&45===i?"\\"+t.toString(16)+" ":t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?r.charAt(o):"\\"+r.charAt(o):"�";return a}function a(e){return e.replace(/\\([\dA-Fa-f]{1,6}[\t\n\f\r ]?|[\S\s])/g,(e=>e.length>2?String.fromCodePoint(Number.parseInt(e.slice(1).trim(),16)):e[1]))}var i=new Map([["--font",["--font-weight","--font-size"]],["--inset",["--inset-shadow","--inset-ring"]],["--text",["--text-color","--text-decoration-color","--text-decoration-thickness","--text-indent","--text-shadow","--text-underline-offset"]]]);function l(e,t){return(i.get(t)??[]).some((t=>e===t||e.startsWith(`${t}-`)))}var s=class{constructor(e=new Map,t=new Set([])){this.values=e,this.keyframes=t}prefix=null;add(e,t,r=0,n){if(e.endsWith("-*")){if("initial"!==t)throw new Error(`Invalid theme value \`${t}\` for namespace \`${e}\``);"--*"===e?this.values.clear():this.clearNamespace(e.slice(0,-2),0)}if(4&r){let t=this.values.get(e);if(t&&!(4&t.options))return}"initial"===t?this.values.delete(e):this.values.set(e,{value:t,options:r,src:n})}keysInNamespaces(e){let t=[];for(let r of e){let e=`${r}-`;for(let n of this.values.keys())n.startsWith(e)&&-1===n.indexOf("--",2)&&(l(n,r)||t.push(n.slice(e.length)))}return t}get(e){for(let t of e){let e=this.values.get(t);if(e)return e.value}return null}hasDefault(e){return!(4&~this.getOptions(e))}getOptions(e){return e=a(this.#e(e)),this.values.get(e)?.options??0}entries(){return this.prefix?Array.from(this.values,(e=>(e[0]=this.prefixKey(e[0]),e))):this.values.entries()}prefixKey(e){return this.prefix?`--${this.prefix}-${e.slice(2)}`:e}#e(e){return this.prefix?`--${e.slice(3+this.prefix.length)}`:e}clearNamespace(e,t){let r=i.get(e)??[];e:for(let n of this.values.keys())if(n.startsWith(e)){if(0!==t&&(this.getOptions(n)&t)!==t)continue;for(let e of r)if(n.startsWith(e))continue e;this.values.delete(n)}}#t(e,t){for(let r of t){let t=null!==e?`${r}-${e}`:r;if(!this.values.has(t)){if(null===e||!e.includes("."))continue;if(t=`${r}-${e.replaceAll(".","_")}`,!this.values.has(t))continue}if(!l(t,r))return t}return null}#r(e){let t=this.values.get(e);if(!t)return null;let r=null;return 2&t.options&&(r=t.value),`var(${o(this.prefixKey(e))}${r?`, ${r}`:""})`}markUsedVariable(e){let t=a(this.#e(e)),r=this.values.get(t);if(!r)return!1;let n=16&r.options;return r.options|=16,!n}resolve(e,t,r=0){let n=this.#t(e,t);if(!n)return null;let o=this.values.get(n);return 1&(r|o.options)?o.value:this.#r(n)}resolveValue(e,t){let r=this.#t(e,t);return r?this.values.get(r).value:null}resolveWith(e,t,r=[]){let n=this.#t(e,t);if(!n)return null;let o={};for(let e of r){let t=`${n}${e}`,r=this.values.get(t);r&&(1&r.options?o[e]=r.value:o[e]=this.#r(t))}let a=this.values.get(n);return 1&a.options?[a.value,o]:[this.#r(n),o]}namespace(e){let t=new Map,r=`${e}-`;for(let[n,o]of this.values)n===e?t.set(null,o.value):n.startsWith(`${r}-`)?t.set(n.slice(e.length),o.value):n.startsWith(r)&&t.set(n.slice(r.length),o.value);return t}addKeyframes(e){this.keyframes.add(e)}getKeyframes(){return Array.from(this.keyframes)}},c=class extends Map{constructor(e){super(),this.factory=e}get(e){let t=super.get(e);return void 0===t&&(t=this.factory(e,this),this.set(e,t)),t}};function u(e){return{kind:"word",value:e}}function d(e,t){return{kind:"function",value:e,nodes:t}}function f(e){return{kind:"separator",value:e}}function p(e,t,r=null){for(let n=0;n0){let e=u(a);o?o.nodes.push(e):r.push(e),a=""}let n=i,l=i+1;for(;l0){let t=u(a);e.nodes.push(t),a=""}o=n.length>0?n[n.length-1]:null;break}default:a+=String.fromCharCode(l)}}return a.length>0&&r.push(u(a)),r}function g(e){let t=[];return p(m(e),(e=>{if("function"===e.kind&&"var"===e.value)return p(e.nodes,(e=>{"word"!==e.kind||"-"!==e.value[0]||"-"!==e.value[1]||t.push(e.value)})),1})),t}var v=64;function w(e,t=[]){return{kind:"rule",selector:e,nodes:t}}function k(e,t="",r=[]){return{kind:"at-rule",name:e,params:t,nodes:r}}function b(e,t=[]){return e.charCodeAt(0)===v?r(e,t):w(e,t)}function y(e,t,r=!1){return{kind:"declaration",property:e,value:t,important:r}}function x(e){return{kind:"comment",value:e}}function $(e,t){return{kind:"context",context:e,nodes:t}}function z(e){return{kind:"at-root",nodes:e}}function A(e,t,r=[],n={}){for(let o=0;onew Set)),i=new c((()=>new Set)),l=new Set,s=new Set,u=[],d=[],f=new c((()=>new Set));function v(e,c,p={},h=0){if("declaration"===e.kind){if("--tw-sort"===e.property||void 0===e.value||null===e.value)return;if(p.theme&&"-"===e.property[0]&&"-"===e.property[1]){if("initial"===e.value)return void(e.value=void 0);p.keyframes||a.get(c).add(e)}if(e.value.includes("var("))if(p.theme&&"-"===e.property[0]&&"-"===e.property[1])for(let t of g(e.value))f.get(t).add(e.property);else t.trackUsedVariables(e.value);if("animation"===e.property)for(let t of E(e.value))s.add(t);2&r&&e.value.includes("color-mix(")&&i.get(c).add(e),c.push(e)}else if("rule"===e.kind)if("&"===e.selector)for(let t of e.nodes){let e=[];v(t,e,p,h+1),e.length>0&&c.push(...e)}else{let t={...e,nodes:[]};for(let r of e.nodes)v(r,t.nodes,p,h+1);t.nodes.length>0&&c.push(t)}else if("at-rule"===e.kind&&"@property"===e.name&&0===h){if(o.has(e.params))return;if(1&r){let t=e.params,r=null,n=!1;for(let t of e.nodes)"declaration"===t.kind&&("initial-value"===t.property?r=t.value:"inherits"===t.property&&(n="true"===t.value));let o=y(t,r??"initial");o.src=e.src,n?u.push(o):d.push(o)}o.add(e.params);let t={...e,nodes:[]};for(let r of e.nodes)v(r,t.nodes,p,h+1);c.push(t)}else if("at-rule"===e.kind){"@keyframes"===e.name&&(p={...p,keyframes:!0});let t={...e,nodes:[]};for(let r of e.nodes)v(r,t.nodes,p,h+1);"@keyframes"===e.name&&p.theme&&l.add(t),(t.nodes.length>0||"@layer"===t.name||"@charset"===t.name||"@custom-media"===t.name||"@namespace"===t.name||"@import"===t.name)&&c.push(t)}else if("at-root"===e.kind)for(let t of e.nodes){let e=[];v(t,e,p,0);for(let t of e)n.push(t)}else if("context"===e.kind){if(e.context.reference)return;for(let t of e.nodes)v(t,c,{...p,...e.context},h)}else"comment"===e.kind&&c.push(e)}let w=[];for(let t of e)v(t,w,{},0);e:for(let[e,r]of a)for(let n of r){if(K(n.property,t.theme,f)){if(n.property.startsWith(t.theme.prefixKey("--animate-")))for(let e of E(n.value))s.add(e);continue}let r=e.indexOf(n);if(e.splice(r,1),0===e.length){let t=S(w,(t=>"rule"===t.kind&&t.nodes===e));if(!t||0===t.length)continue e;for(t.unshift({kind:"at-root",nodes:w});;){let e=t.pop();if(!e)break;let r=t[t.length-1];if(!r||"at-root"!==r.kind&&"at-rule"!==r.kind)break;let n=r.nodes.indexOf(e);if(-1===n)break;r.nodes.splice(n,1)}continue e}}for(let e of l)if(!s.has(e.params)){let t=n.indexOf(e);n.splice(t,1)}if(w=w.concat(n),2&r)for(let[e,r]of i)for(let n of r){let r=e.indexOf(n);if(-1===r||null==n.value)continue;let o=m(n.value),a=!1;if(p(o,((e,{replaceWith:r})=>{if("function"!==e.kind||"color-mix"!==e.value)return;let n=!1,o=!1;if(p(e.nodes,((e,{replaceWith:r})=>{if("word"==e.kind&&"currentcolor"===e.value.toLowerCase())return o=!0,void(a=!0);let i=e,l=null,s=new Set;do{if("function"!==i.kind||"var"!==i.value)return;let e=i.nodes[0];if(!e||"word"!==e.kind)return;let r=e.value;if(s.has(r))return void(n=!0);if(s.add(r),a=!0,l=t.theme.resolveValue(null,[e.value]),!l)return void(n=!0);if("currentcolor"===l.toLowerCase())return void(o=!0);i=l.startsWith("var(")?m(l)[0]:null}while(i);r({kind:"word",value:l})})),n||o){let t=e.nodes.findIndex((e=>"separator"===e.kind&&e.value.trim().includes(",")));if(-1===t)return;let n=e.nodes.length>t?e.nodes[t+1]:null;if(!n)return;r(n)}else if(a){let t=e.nodes[2];"word"===t.kind&&("oklab"===t.value||"oklch"===t.value||"lab"===t.value||"lch"===t.value)&&(t.value="srgb")}})),!a)continue;let i={...n,value:h(o)},l=b("@supports (color: color-mix(in lab, red, red))",[n]);l.src=n.src,e.splice(r,1,i,l)}if(1&r){let e=[];if(u.length>0){let t=b(":root, :host",u);t.src=u[0].src,e.push(t)}if(d.length>0){let t=b("*, ::before, ::after, ::backdrop",d);t.src=d[0].src,e.push(t)}if(e.length>0){let t=w.findIndex((e=>!("comment"===e.kind||"at-rule"===e.kind&&("@charset"===e.name||"@import"===e.name)))),r=k("@layer","properties",[]);r.src=e[0].src,w.splice(t<0?w.length:t,0,r);let n=b("@layer properties",[k("@supports","((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b))))",e)]);n.src=e[0].src,n.nodes[0].src=e[0].src,w.push(n)}}return w}function T(e,t){let r=0,n={file:null,code:""};function o(e,a=0){let i="",l=" ".repeat(a);if("declaration"===e.kind){if(i+=`${l}${e.property}: ${e.value}${e.important?" !important":""};\n`,t){r+=l.length;let t=r;r+=e.property.length,r+=2,r+=e.value?.length??0,e.important&&(r+=11);let o=r;r+=2,e.dst=[n,t,o]}}else if("rule"===e.kind){if(i+=`${l}${e.selector} {\n`,t){r+=l.length;let t=r;r+=e.selector.length,r+=1;let o=r;e.dst=[n,t,o],r+=2}for(let t of e.nodes)i+=o(t,a+1);i+=`${l}}\n`,t&&(r+=l.length,r+=2)}else if("at-rule"===e.kind){if(0===e.nodes.length){let o=`${l}${e.name} ${e.params};\n`;if(t){r+=l.length;let t=r;r+=e.name.length,r+=1,r+=e.params.length;let o=r;r+=2,e.dst=[n,t,o]}return o}if(i+=`${l}${e.name}${e.params?` ${e.params} `:" "}{\n`,t){r+=l.length;let t=r;r+=e.name.length,e.params&&(r+=1,r+=e.params.length),r+=1;let o=r;e.dst=[n,t,o],r+=2}for(let t of e.nodes)i+=o(t,a+1);i+=`${l}}\n`,t&&(r+=l.length,r+=2)}else if("comment"===e.kind){if(i+=`${l}/*${e.value}*/\n`,t){r+=l.length;let t=r;r+=2+e.value.length+2;let o=r;e.dst=[n,t,o],r+=1}}else if("context"===e.kind||"at-root"===e.kind)return"";return i}let a="";for(let t of e)a+=o(t,0);return n.code=a,a}function S(e,t){let r=[];return A(e,((e,{path:n})=>{if(t(e))return r=[...n],2})),r}function K(e,t,r,n=new Set){if(n.has(e)||(n.add(e),24&t.getOptions(e)))return!0;{let o=r.get(e)??[];for(let e of o)if(K(e,t,r,n))return!0}return!1}function E(e){return e.split(/[\s,]+/)}var V=["calc","min","max","clamp","mod","rem","sin","cos","tan","asin","acos","atan","atan2","pow","sqrt","hypot","log","exp","round"],N=["anchor-size"],O=new RegExp(`(${N.join("|")})\\(`,"g");function F(e){return-1!==e.indexOf("(")&&V.some((t=>e.includes(`${t}(`)))}function W(e){if(-1===e.indexOf("("))return U(e);let t=m(e);return D(t),e=function(e){if(!V.some((t=>e.includes(t))))return e;let t=!1;N.some((t=>e.includes(t)))&&(O.lastIndex=0,e=e.replace(O,((e,r)=>(t=!0,`$${N.indexOf(r)}$(`))));let r="",n=[];for(let t=0;t=0;r--){let t=e.charCodeAt(r);if(t>=48&&t<=57)a=r;else{if(!(t>=97&&t<=122))break;a=r}}let i=e.slice(a,t);if(V.includes(i)){n.unshift(!0);continue}if(n[0]&&""===i){n.unshift(!0);continue}n.unshift(!1)}}return t?r.replace(/\$(\d+)\$/g,((e,t)=>N[t]??e)):r}(e=h(t)),e}function U(e,t=!1){let r="";for(let n=0;n0&&o===M[t-1]&&t--;break;case 59:if(0===t)return!1}}return!0}var L=new Uint8Array(256);function R(e,t){let r=0,n=[],o=0,a=e.length,i=t.charCodeAt(0);for(let t=0;t0&&l===L[r-1]&&r--}else n.push(e.slice(o,t)),o=t+1}return n.push(e.slice(o)),n}function I(e){if("["===e[0]&&"]"===e[e.length-1]){let t=W(e.slice(1,-1));return B(t)&&0!==t.length&&0!==t.trim().length?{kind:"arbitrary",value:t}:null}return"("===e[0]&&")"===e[e.length-1]?"-"===(e=e.slice(1,-1))[0]&&"-"===e[1]&&B(e)?{kind:"arbitrary",value:W(e=`var(${e})`)}:null:{kind:"named",value:e}}function*P(e,t){t(e)&&(yield[e,null]);let r=e.lastIndexOf("-");for(;r>0;){let n=e.slice(0,r);if(t(n)){let t=[n,e.slice(r+1)];if(""===t[1])break;yield t}r=e.lastIndexOf("-",r-1)}"@"===e[0]&&t("@")&&(yield["@",e.slice(1)])}function q(e){if(null===e)return"";let t=Q(e.value),r=t?e.value.slice(4,-1):e.value,[n,o]=t?["(",")"]:["[","]"];return"arbitrary"===e.kind?`/${n}${Y(r)}${o}`:"named"===e.kind?`/${e.value}`:""}function H(e){if("static"===e.kind)return e.root;if("arbitrary"===e.kind)return`[${Y(function(e){return G.get(e)}(e.selector))}]`;let t="";if("functional"===e.kind){t+=e.root;let r="@"!==e.root;if(e.value)if("arbitrary"===e.value.kind){let n=Q(e.value.value),o=n?e.value.value.slice(4,-1):e.value.value,[a,i]=n?["(",")"]:["[","]"];t+=`${r?"-":""}${a}${Y(o)}${i}`}else"named"===e.value.kind&&(t+=`${r?"-":""}${e.value.value}`)}return"compound"===e.kind&&(t+=e.root,t+="-",t+=H(e.variant)),("functional"===e.kind||"compound"===e.kind)&&(t+=q(e.modifier)),t}var Z=new c((e=>{let t=m(e),r=new Set;return p(t,((e,{parent:n})=>{let o=null===n?t:n.nodes??[];if("word"!==e.kind||"+"!==e.value&&"-"!==e.value&&"*"!==e.value&&"/"!==e.value)"separator"===e.kind&&"/"===e.value.trim()?e.value="/":"separator"===e.kind&&e.value.length>0&&""===e.value.trim()?(o[0]===e||o[o.length-1]===e)&&r.add(e):"separator"===e.kind&&","===e.value.trim()&&(e.value=",");else{let t=o.indexOf(e)??-1;if(-1===t)return;let n=o[t-1];if("separator"!==n?.kind||" "!==n.value)return;let a=o[t+1];if("separator"!==a?.kind||" "!==a.value)return;r.add(n),r.add(a)}})),r.size>0&&p(t,((e,{replaceWith:t})=>{r.has(e)&&(r.delete(e),t([]))})),J(t),h(t)}));function Y(e){return Z.get(e)}var G=new c((e=>{let t=m(e);return 3===t.length&&"word"===t[0].kind&&"&"===t[0].value&&"separator"===t[1].kind&&":"===t[1].value&&"function"===t[2].kind&&"is"===t[2].value?h(t[2].nodes):e}));function J(e){for(let t of e)switch(t.kind){case"function":if("url"===t.value||t.value.endsWith("_url")){t.value=te(t.value);break}if("var"===t.value||t.value.endsWith("_var")||"theme"===t.value||t.value.endsWith("_theme")){t.value=te(t.value);for(let e=0;e{let t=m(e);return 1===t.length&&"function"===t[0].kind&&"var"===t[0].value}));function Q(e){return X.get(e)}function ee(e){throw new Error(`Unexpected value: ${e}`)}function te(e){return e.replaceAll("_",String.raw`\_`).replaceAll(" ","_")}function re(e,t,r){if(e===t)return 0;let n=e.indexOf("("),o=t.indexOf("("),a=-1===n?e.replace(/[\d.]+/g,""):e.slice(0,n),i=-1===o?t.replace(/[\d.]+/g,""):t.slice(0,o),l=(a===i?0:a0},"bg-size":function(e){let t=0;for(let r of R(e,",")){if("cover"===r||"contain"===r){t+=1;continue}let e=R(r," ");if(1!==e.length&&2!==e.length)return!1;e.every((e=>"auto"===e||we(e)||me(e)))&&(t+=1)}return t>0},"line-width":function(e){return R(e," ").every((e=>we(e)||pe(e)||"thin"===e||"medium"===e||"thick"===e))},image:function(e){let t=0;for(let r of R(e,","))if(!r.startsWith("var(")){if(se(r)){t+=1;continue}if(ue.test(r)){t+=1;continue}if(ce.test(r)){t+=1;continue}return!1}return t>0},"family-name":function(e){let t=0;for(let r of R(e,",")){let e=r.charCodeAt(0);if(e>=48&&e<=57)return!1;r.startsWith("var(")||(t+=1)}return t>0},"generic-name":function(e){return"serif"===e||"sans-serif"===e||"monospace"===e||"cursive"===e||"fantasy"===e||"system-ui"===e||"ui-serif"===e||"ui-sans-serif"===e||"ui-monospace"===e||"ui-rounded"===e||"math"===e||"emoji"===e||"fangsong"===e},"absolute-size":function(e){return"xx-small"===e||"x-small"===e||"small"===e||"medium"===e||"large"===e||"x-large"===e||"xx-large"===e||"xxx-large"===e},"relative-size":function(e){return"larger"===e||"smaller"===e},angle:function(e){return ke.test(e)},vector:function(e){return be.test(e)}};function ie(e,t){if(e.startsWith("var("))return null;for(let r of t)if(ae[r]?.(e))return r;return null}var le=/^url\(.*\)$/;function se(e){return le.test(e)}var ce=/^(?:element|image|cross-fade|image-set)\(/,ue=/^(repeating-)?(conic|linear|radial)-gradient\(/;var de=/[+-]?\d*\.?\d+(?:[eE][+-]?\d+)?/,fe=new RegExp(`^${de.source}$`);function pe(e){return fe.test(e)||F(e)}var he=new RegExp(`^${de.source}%$`);function me(e){return he.test(e)||F(e)}var ge=new RegExp(`^${de.source}s*/s*${de.source}$`);var ve=new RegExp(`^${de.source}(${["cm","mm","Q","in","pc","pt","px","em","ex","ch","rem","lh","rlh","vw","vh","vmin","vmax","vb","vi","svw","svh","lvw","lvh","dvw","dvh","cqw","cqh","cqi","cqb","cqmin","cqmax"].join("|")})$`);function we(e){return ve.test(e)||F(e)}var ke=new RegExp(`^${de.source}(${["deg","rad","grad","turn"].join("|")})$`);var be=new RegExp(`^${de.source} +${de.source} +${de.source}$`);function ye(e){let t=Number(e);return Number.isInteger(t)&&t>=0&&String(t)===String(e)}function xe(e){let t=Number(e);return Number.isInteger(t)&&t>0&&String(t)===String(e)}function $e(e){return Ae(e,.25)}function ze(e){return Ae(e,.25)}function Ae(e,t){let r=Number(e);return r>=0&&r%t==0&&String(r)===String(e)}var je=new Set(["inset","inherit","initial","revert","unset"]),Ce=/^-?(\d+|\.\d+)(.*?)$/g;function Te(e,t){return R(e,",").map((e=>{let r=R(e=e.trim()," ").filter((e=>""!==e.trim())),n=null,o=null,a=null;for(let e of r)je.has(e)||(Ce.test(e)?(null===o?o=e:null===a&&(a=e),Ce.lastIndex=0):null===n&&(n=e));if(null===o||null===a)return e;let i=t(n??"currentcolor");return null!==n?e.replace(n,i):`${e} ${i}`})).join(", ")}var Se=/^-?[a-z][a-zA-Z0-9/%._-]*$/,Ke=/^-?[a-z][a-zA-Z0-9/%._-]*-\*$/,Ee=["0","0.5","1","1.5","2","2.5","3","3.5","4","5","6","7","8","9","10","11","12","14","16","20","24","28","32","36","40","44","48","52","56","60","64","72","80","96"],Ve=class{utilities=new c((()=>[]));completions=new Map;static(e,t){this.utilities.get(e).push({kind:"static",compileFn:t})}functional(e,t,r){this.utilities.get(e).push({kind:"functional",compileFn:t,options:r})}has(e,t){return this.utilities.has(e)&&this.utilities.get(e).some((e=>e.kind===t))}get(e){return this.utilities.has(e)?this.utilities.get(e):[]}getCompletions(e){return this.completions.get(e)?.()??[]}suggest(e,t){this.completions.set(e,t)}keys(e){let t=[];for(let[r,n]of this.utilities.entries())for(let o of n)if(o.kind===e){t.push(r);break}return t}};function Ne(e,t,r){return k("@property",e,[y("syntax",r?`"${r}"`:'"*"'),y("inherits","false"),...t?[y("initial-value",t)]:[]])}function Oe(e,t){if(null===t)return e;let r=Number(t);return Number.isNaN(r)||(t=100*r+"%"),"100%"===t?e:`color-mix(in oklab, ${e} ${t}, transparent)`}function Fe(e,t){let r=Number(t);return Number.isNaN(r)||(t=100*r+"%"),`oklab(from ${e} l a b / ${t})`}function We(e,t,r){if(!t)return e;if("arbitrary"===t.kind)return Oe(e,t.value);let n=r.resolve(t.value,["--opacity"]);return n?Oe(e,n):ze(t.value)?Oe(e,`${t.value}%`):null}function Ue(e,t,r){let n=null;switch(e.value.value){case"inherit":n="inherit";break;case"transparent":n="transparent";break;case"current":n="currentcolor";break;default:n=t.resolve(e.value.value,r)}return n?We(n,e.modifier,t):null}var De=/(\d+)_(\d+)/g;var _e=["number","integer","ratio","percentage"];function Me(e,t,r){for(let n of t.nodes){if("named"===e.kind&&"word"===n.kind&&("'"===n.value[0]||'"'===n.value[0])&&n.value[n.value.length-1]===n.value[0]&&n.value.slice(1,-1)===e.value)return{nodes:m(e.value)};if("named"===e.kind&&"word"===n.kind&&"-"===n.value[0]&&"-"===n.value[1]){let t=n.value;if(t.endsWith("-*")){t=t.slice(0,-2);let n=r.theme.resolve(e.value,[t]);if(n)return{nodes:m(n)}}else{let n=t.split("-*");if(n.length<=1)continue;let o=[n.shift()],a=r.theme.resolveWith(e.value,o,n);if(a){let[,e={}]=a;{let t=e[n.pop()];if(t)return{nodes:m(t)}}}}}else{if("named"===e.kind&&"word"===n.kind){if(!_e.includes(n.value))continue;let t="ratio"===n.value&&"fraction"in e?e.fraction:e.value;if(!t)continue;let r=ie(t,[n.value]);if(null===r)continue;if("ratio"===r){let[e,r]=R(t,"/");if(!ye(e)||!ye(r))continue}else{if("number"===r&&!$e(t))continue;if("percentage"===r&&!ye(t.slice(0,-1)))continue}return{nodes:m(t),ratio:"ratio"===r}}if("arbitrary"===e.kind&&"word"===n.kind&&"["===n.value[0]&&"]"===n.value[n.value.length-1]){let t=n.value.slice(1,-1);if("*"===t)return{nodes:m(e.value)};if("dataType"in e&&e.dataType&&e.dataType!==t)continue;if("dataType"in e&&e.dataType)return{nodes:m(e.value)};if(null!==ie(e.value,[t]))return{nodes:m(e.value)}}}}}function Be(e,t,r,n,o=""){let a=!1,i=Te(t,(e=>null==r?n(e):e.startsWith("current")?n(Oe(e,r)):((e.startsWith("var(")||r.startsWith("var("))&&(a=!0),n(Fe(e,r)))));function l(e){return o?R(e,",").map((e=>o+e)).join(","):e}return a?[y(e,l(Te(t,n))),b("@supports (color: lab(from red l a b))",[y(e,l(i))])]:[y(e,l(i))]}function Le(e,t,r,n,o=""){let a=!1,i=R(t,",").map((e=>Te(e,(e=>null==r?n(e):e.startsWith("current")?n(Oe(e,r)):((e.startsWith("var(")||r.startsWith("var("))&&(a=!0),n(Fe(e,r))))))).map((e=>`drop-shadow(${e})`)).join(" ");return a?[y(e,o+R(t,",").map((e=>`drop-shadow(${Te(e,n)})`)).join(" ")),b("@supports (color: lab(from red l a b))",[y(e,o+i)])]:[y(e,o+i)]}var Re={"--alpha":function(e,t,r,...n){let[o,a]=R(r,"/").map((e=>e.trim()));if(!o||!a)throw new Error(`The --alpha(…) function requires a color and an alpha value, e.g.: \`--alpha(${o||"var(--my-color)"} / ${a||"50%"})\``);if(n.length>0)throw new Error(`The --alpha(…) function only accepts one argument, e.g.: \`--alpha(${o||"var(--my-color)"} / ${a||"50%"})\``);return Oe(o,a)},"--spacing":function(e,t,r,...n){if(!r)throw new Error("The --spacing(…) function requires an argument, but received none.");if(n.length>0)throw new Error(`The --spacing(…) function only accepts a single argument, but received ${n.length+1}.`);let o=e.theme.resolve(null,["--spacing"]);if(!o)throw new Error("The --spacing(…) function requires that the `--spacing` theme variable exists, but it was not found.");return`calc(${o} * ${r})`},"--theme":function(e,t,r,...n){if(!r.startsWith("--"))throw new Error("The --theme(…) function can only be used with CSS variables from your theme.");let o=!1;r.endsWith(" inline")&&(o=!0,r=r.slice(0,-7)),"at-rule"===t.kind&&(o=!0);let a=e.resolveThemeValue(r,o);if(!a){if(n.length>0)return n.join(", ");throw new Error(`Could not resolve value for theme function: \`theme(${r})\`. Consider checking if the variable name is correct or provide a fallback value to silence this error.`)}if(0===n.length)return a;let i=n.join(", ");if("initial"===i)return a;if("initial"===a)return i;if(a.startsWith("var(")||a.startsWith("theme(")||a.startsWith("--theme(")){let e=m(a);return function(e,t){p(e,(e=>{if("function"===e.kind&&("var"===e.value||"theme"===e.value||"--theme"===e.value))if(1===e.nodes.length)e.nodes.push({kind:"word",value:`, ${t}`});else{let r=e.nodes[e.nodes.length-1];"word"===r.kind&&"initial"===r.value&&(r.value=t)}}))}(e,i),h(e)}return a},theme:function(e,t,r,...n){r=function(e){if("'"!==e[0]&&'"'!==e[0])return e;let t="",r=e[0];for(let n=1;n0)return n.join(", ");if(!o)throw new Error(`Could not resolve value for theme function: \`theme(${r})\`. Consider checking if the path is correct or provide a fallback value to silence this error.`);return o}};var Ie=new RegExp(Object.keys(Re).map((e=>`${e}\\(`)).join("|"));function Pe(e,t){let r=0;return A(e,(e=>{if("declaration"===e.kind&&e.value&&Ie.test(e.value))return r|=8,void(e.value=qe(e.value,e,t));"at-rule"===e.kind&&("@media"===e.name||"@custom-media"===e.name||"@container"===e.name||"@supports"===e.name)&&Ie.test(e.params)&&(r|=8,e.params=qe(e.params,e,t))})),r}function qe(e,t,r){let n=m(e);return p(n,((e,{replaceWith:n})=>{if("function"===e.kind&&e.value in Re){let o=R(h(e.nodes).trim(),",").map((e=>e.trim()));return n(m(Re[e.value](r,t,...o)))}})),h(n)}function He(e,t){let r=e.length,n=t.length,o=r=48&&n<=57&&o>=48&&o<=57){let a=r,i=r+1,l=r,s=r+1;for(n=e.charCodeAt(i);n>=48&&n<=57;)n=e.charCodeAt(++i);for(o=t.charCodeAt(s);o>=48&&o<=57;)o=t.charCodeAt(++s);let c=e.slice(a,i),u=t.slice(l,s),d=Number(c)-Number(u);if(d)return d;if(cu)return 1}else if(n!==o)return n-o}return e.length-t.length}var Ze=/^\d+\/\d+$/;function Ye(e){let t=new c((e=>({name:e,utility:e,fraction:!1,modifiers:[]})));for(let r of e.utilities.keys("static")){let e=t.get(r);e.fraction=!1,e.modifiers=[]}for(let r of e.utilities.keys("functional")){let n=e.utilities.getCompletions(r);for(let e of n)for(let n of e.values){let o=null!==n&&Ze.test(n),a=null===n?r:`${r}-${n}`,i=t.get(a);if(i.utility=r,i.fraction||=o,i.modifiers.push(...e.modifiers),e.supportsNegative){let n=t.get(`-${a}`);n.utility=`-${r}`,n.fraction||=o,n.modifiers.push(...e.modifiers)}}}if(0===t.size)return[];let r=Array.from(t.values());return r.sort(((e,t)=>He(e.name,t.name))),function(e){let t=[],r=null,n=new Map,o=new c((()=>[]));for(let a of e){let{utility:e,fraction:i}=a;r||(r={utility:e,items:[]},n.set(e,r)),e!==r.utility&&(t.push(r),r={utility:e,items:[]},n.set(e,r)),i?o.get(e).push(a):r.items.push(a)}r&&t[t.length-1]!==r&&t.push(r);for(let[e,t]of o){let r=n.get(e);r&&r.items.push(...t)}let a=[];for(let e of t)for(let t of e.items)a.push([t.name,{modifiers:t.modifiers}]);return a}(r)}var Ge=/^@?[a-zA-Z0-9_-]*$/,Je=class{compareFns=new Map;variants=new Map;completions=new Map;groupOrder=null;lastOrder=0;static(e,t,{compounds:r,order:n}={}){this.set(e,{kind:"static",applyFn:t,compoundsWith:0,compounds:r??2,order:n})}fromAst(e,t){let r=[];A(t,(e=>{"rule"===e.kind?r.push(e.selector):"at-rule"===e.kind&&"@slot"!==e.name&&r.push(`${e.name} ${e.params}`)})),this.static(e,(e=>{let r=structuredClone(t);et(r,e.nodes),e.nodes=r}),{compounds:Xe(r)})}functional(e,t,{compounds:r,order:n}={}){this.set(e,{kind:"functional",applyFn:t,compoundsWith:0,compounds:r??2,order:n})}compound(e,t,r,{compounds:n,order:o}={}){this.set(e,{kind:"compound",applyFn:r,compoundsWith:t,compounds:n??2,order:o})}group(e,t){this.groupOrder=this.nextOrder(),t&&this.compareFns.set(this.groupOrder,t),e(),this.groupOrder=null}has(e){return this.variants.has(e)}get(e){return this.variants.get(e)}kind(e){return this.variants.get(e)?.kind}compoundsWith(e,t){let r=this.variants.get(e),n="string"==typeof t?this.variants.get(t):"arbitrary"===t.kind?{compounds:Xe([t.selector])}:this.variants.get(t.root);return!!(r&&n&&"compound"===r.kind&&0!==n.compounds&&0!==r.compoundsWith&&r.compoundsWith&n.compounds)}suggest(e,t){this.completions.set(e,t)}getCompletions(e){return this.completions.get(e)?.()??[]}compare(e,t){if(e===t)return 0;if(null===e)return-1;if(null===t)return 1;if("arbitrary"===e.kind&&"arbitrary"===t.kind)return e.selector1){let e=n[n.length-1];if(" "===n[n.length-2]&&("i"===e||"I"===e||"s"===e||"S"===e))return`${t}="${n.slice(0,-2)}" ${e}`}return`${t}="${n}"`}return e}function et(e,t){A(e,((e,{replaceWith:r})=>{if("at-rule"===e.kind&&"@slot"===e.name)r(t);else if("at-rule"===e.kind&&("@keyframes"===e.name||"@property"===e.name))return Object.assign(e,z([k(e.name,e.params,e.nodes)])),1}))}function tt(e){let t=function(e){let t=new Ve;function r(r,n){function*o(t){for(let r of e.keysInNamespaces(t))yield r.replace(De,((e,t,r)=>`${t}.${r}`))}let a=["1/2","1/3","2/3","1/4","2/4","3/4","1/5","2/5","3/5","4/5","1/6","2/6","3/6","4/6","5/6","1/12","2/12","3/12","4/12","5/12","6/12","7/12","8/12","9/12","10/12","11/12"];t.suggest(r,(()=>{let e=[];for(let t of n()){if("string"==typeof t){e.push({values:[t],modifiers:[]});continue}let r=[...t.values??[],...o(t.valueThemeKeys??[])],n=[...t.modifiers??[],...o(t.modifierThemeKeys??[])];t.supportsFractions&&r.push(...a),t.hasDefaultValue&&r.unshift(null),e.push({supportsNegative:t.supportsNegative,values:r,modifiers:n})}return e}))}function n(e,r){t.static(e,(()=>r.map((e=>"function"==typeof e?e():y(e[0],e[1])))))}function o(n,o){function a({negative:t}){return r=>{let n=null,a=null;if(r.value)if("arbitrary"===r.value.kind){if(r.modifier)return;n=r.value.value,a=r.value.dataType}else{if(n=e.resolve(r.value.fraction??r.value.value,o.themeKeys??[]),null===n&&o.supportsFractions&&r.value.fraction){let[e,t]=R(r.value.fraction,"/");if(!ye(e)||!ye(t))return;n=`calc(${r.value.fraction} * 100%)`}if(null===n&&t&&o.handleNegativeBareValue){if(n=o.handleNegativeBareValue(r.value),!n?.includes("/")&&r.modifier)return;if(null!==n)return o.handle(n,null)}if(null===n&&o.handleBareValue&&(n=o.handleBareValue(r.value),!n?.includes("/")&&r.modifier))return}else{if(r.modifier)return;n=void 0!==o.defaultValue?o.defaultValue:e.resolve(null,o.themeKeys??[])}if(null!==n)return o.handle(t?`calc(${n} * -1)`:n,a)}}o.supportsNegative&&t.functional(`-${n}`,a({negative:!0})),t.functional(n,a({negative:!1})),r(n,(()=>[{supportsNegative:o.supportsNegative,valueThemeKeys:o.themeKeys??[],hasDefaultValue:void 0!==o.defaultValue&&null!==o.defaultValue,supportsFractions:o.supportsFractions}]))}function a(n,o){t.functional(n,(t=>{if(!t.value)return;let r=null;return"arbitrary"===t.value.kind?(r=t.value.value,r=We(r,t.modifier,e)):r=Ue(t,e,o.themeKeys),null!==r?o.handle(r):void 0})),r(n,(()=>[{values:["current","inherit","transparent"],valueThemeKeys:o.themeKeys,modifiers:Array.from({length:21},((e,t)=>""+5*t))}]))}function i(n,a,i,{supportsNegative:l=!1,supportsFractions:s=!1}={}){l&&t.static(`-${n}-px`,(()=>i("-1px"))),t.static(`${n}-px`,(()=>i("1px"))),o(n,{themeKeys:a,supportsFractions:s,supportsNegative:l,defaultValue:null,handleBareValue:({value:t})=>{let r=e.resolve(null,["--spacing"]);return r&&$e(t)?`calc(${r} * ${t})`:null},handleNegativeBareValue:({value:t})=>{let r=e.resolve(null,["--spacing"]);return r&&$e(t)?`calc(${r} * -${t})`:null},handle:i}),r(n,(()=>[{values:e.get(["--spacing"])?Ee:[],supportsNegative:l,supportsFractions:s,valueThemeKeys:a}]))}n("sr-only",[["position","absolute"],["width","1px"],["height","1px"],["padding","0"],["margin","-1px"],["overflow","hidden"],["clip","rect(0, 0, 0, 0)"],["white-space","nowrap"],["border-width","0"]]),n("not-sr-only",[["position","static"],["width","auto"],["height","auto"],["padding","0"],["margin","0"],["overflow","visible"],["clip","auto"],["white-space","normal"]]),n("pointer-events-none",[["pointer-events","none"]]),n("pointer-events-auto",[["pointer-events","auto"]]),n("visible",[["visibility","visible"]]),n("invisible",[["visibility","hidden"]]),n("collapse",[["visibility","collapse"]]),n("static",[["position","static"]]),n("fixed",[["position","fixed"]]),n("absolute",[["position","absolute"]]),n("relative",[["position","relative"]]),n("sticky",[["position","sticky"]]);for(let[e,t]of[["inset","inset"],["inset-x","inset-inline"],["inset-y","inset-block"],["start","inset-inline-start"],["end","inset-inline-end"],["top","top"],["right","right"],["bottom","bottom"],["left","left"]])n(`${e}-auto`,[[t,"auto"]]),n(`${e}-full`,[[t,"100%"]]),n(`-${e}-full`,[[t,"-100%"]]),i(e,["--inset","--spacing"],(e=>[y(t,e)]),{supportsNegative:!0,supportsFractions:!0});n("isolate",[["isolation","isolate"]]),n("isolation-auto",[["isolation","auto"]]),n("z-auto",[["z-index","auto"]]),o("z",{supportsNegative:!0,handleBareValue:({value:e})=>ye(e)?e:null,themeKeys:["--z-index"],handle:e=>[y("z-index",e)]}),r("z",(()=>[{supportsNegative:!0,values:["0","10","20","30","40","50"],valueThemeKeys:["--z-index"]}])),n("order-first",[["order","-9999"]]),n("order-last",[["order","9999"]]),n("order-none",[["order","0"]]),o("order",{supportsNegative:!0,handleBareValue:({value:e})=>ye(e)?e:null,themeKeys:["--order"],handle:e=>[y("order",e)]}),r("order",(()=>[{supportsNegative:!0,values:Array.from({length:12},((e,t)=>`${t+1}`)),valueThemeKeys:["--order"]}])),n("col-auto",[["grid-column","auto"]]),o("col",{supportsNegative:!0,handleBareValue:({value:e})=>ye(e)?e:null,themeKeys:["--grid-column"],handle:e=>[y("grid-column",e)]}),n("col-span-full",[["grid-column","1 / -1"]]),o("col-span",{handleBareValue:({value:e})=>ye(e)?e:null,handle:e=>[y("grid-column",`span ${e} / span ${e}`)]}),n("col-start-auto",[["grid-column-start","auto"]]),o("col-start",{supportsNegative:!0,handleBareValue:({value:e})=>ye(e)?e:null,themeKeys:["--grid-column-start"],handle:e=>[y("grid-column-start",e)]}),n("col-end-auto",[["grid-column-end","auto"]]),o("col-end",{supportsNegative:!0,handleBareValue:({value:e})=>ye(e)?e:null,themeKeys:["--grid-column-end"],handle:e=>[y("grid-column-end",e)]}),r("col-span",(()=>[{values:Array.from({length:12},((e,t)=>`${t+1}`)),valueThemeKeys:[]}])),r("col-start",(()=>[{supportsNegative:!0,values:Array.from({length:13},((e,t)=>`${t+1}`)),valueThemeKeys:["--grid-column-start"]}])),r("col-end",(()=>[{supportsNegative:!0,values:Array.from({length:13},((e,t)=>`${t+1}`)),valueThemeKeys:["--grid-column-end"]}])),n("row-auto",[["grid-row","auto"]]),o("row",{supportsNegative:!0,handleBareValue:({value:e})=>ye(e)?e:null,themeKeys:["--grid-row"],handle:e=>[y("grid-row",e)]}),n("row-span-full",[["grid-row","1 / -1"]]),o("row-span",{themeKeys:[],handleBareValue:({value:e})=>ye(e)?e:null,handle:e=>[y("grid-row",`span ${e} / span ${e}`)]}),n("row-start-auto",[["grid-row-start","auto"]]),o("row-start",{supportsNegative:!0,handleBareValue:({value:e})=>ye(e)?e:null,themeKeys:["--grid-row-start"],handle:e=>[y("grid-row-start",e)]}),n("row-end-auto",[["grid-row-end","auto"]]),o("row-end",{supportsNegative:!0,handleBareValue:({value:e})=>ye(e)?e:null,themeKeys:["--grid-row-end"],handle:e=>[y("grid-row-end",e)]}),r("row-span",(()=>[{values:Array.from({length:12},((e,t)=>`${t+1}`)),valueThemeKeys:[]}])),r("row-start",(()=>[{supportsNegative:!0,values:Array.from({length:13},((e,t)=>`${t+1}`)),valueThemeKeys:["--grid-row-start"]}])),r("row-end",(()=>[{supportsNegative:!0,values:Array.from({length:13},((e,t)=>`${t+1}`)),valueThemeKeys:["--grid-row-end"]}])),n("float-start",[["float","inline-start"]]),n("float-end",[["float","inline-end"]]),n("float-right",[["float","right"]]),n("float-left",[["float","left"]]),n("float-none",[["float","none"]]),n("clear-start",[["clear","inline-start"]]),n("clear-end",[["clear","inline-end"]]),n("clear-right",[["clear","right"]]),n("clear-left",[["clear","left"]]),n("clear-both",[["clear","both"]]),n("clear-none",[["clear","none"]]);for(let[e,t]of[["m","margin"],["mx","margin-inline"],["my","margin-block"],["ms","margin-inline-start"],["me","margin-inline-end"],["mt","margin-top"],["mr","margin-right"],["mb","margin-bottom"],["ml","margin-left"]])n(`${e}-auto`,[[t,"auto"]]),i(e,["--margin","--spacing"],(e=>[y(t,e)]),{supportsNegative:!0});n("box-border",[["box-sizing","border-box"]]),n("box-content",[["box-sizing","content-box"]]),n("line-clamp-none",[["overflow","visible"],["display","block"],["-webkit-box-orient","horizontal"],["-webkit-line-clamp","unset"]]),o("line-clamp",{themeKeys:["--line-clamp"],handleBareValue:({value:e})=>ye(e)?e:null,handle:e=>[y("overflow","hidden"),y("display","-webkit-box"),y("-webkit-box-orient","vertical"),y("-webkit-line-clamp",e)]}),r("line-clamp",(()=>[{values:["1","2","3","4","5","6"],valueThemeKeys:["--line-clamp"]}])),n("block",[["display","block"]]),n("inline-block",[["display","inline-block"]]),n("inline",[["display","inline"]]),n("hidden",[["display","none"]]),n("inline-flex",[["display","inline-flex"]]),n("table",[["display","table"]]),n("inline-table",[["display","inline-table"]]),n("table-caption",[["display","table-caption"]]),n("table-cell",[["display","table-cell"]]),n("table-column",[["display","table-column"]]),n("table-column-group",[["display","table-column-group"]]),n("table-footer-group",[["display","table-footer-group"]]),n("table-header-group",[["display","table-header-group"]]),n("table-row-group",[["display","table-row-group"]]),n("table-row",[["display","table-row"]]),n("flow-root",[["display","flow-root"]]),n("flex",[["display","flex"]]),n("grid",[["display","grid"]]),n("inline-grid",[["display","inline-grid"]]),n("contents",[["display","contents"]]),n("list-item",[["display","list-item"]]),n("field-sizing-content",[["field-sizing","content"]]),n("field-sizing-fixed",[["field-sizing","fixed"]]),n("aspect-auto",[["aspect-ratio","auto"]]),n("aspect-square",[["aspect-ratio","1 / 1"]]),o("aspect",{themeKeys:["--aspect"],handleBareValue:({fraction:e})=>{if(null===e)return null;let[t,r]=R(e,"/");return ye(t)&&ye(r)?e:null},handle:e=>[y("aspect-ratio",e)]});for(let[e,t]of[["full","100%"],["svw","100svw"],["lvw","100lvw"],["dvw","100dvw"],["svh","100svh"],["lvh","100lvh"],["dvh","100dvh"],["min","min-content"],["max","max-content"],["fit","fit-content"]])n(`size-${e}`,[["--tw-sort","size"],["width",t],["height",t]]),n(`w-${e}`,[["width",t]]),n(`h-${e}`,[["height",t]]),n(`min-w-${e}`,[["min-width",t]]),n(`min-h-${e}`,[["min-height",t]]),n(`max-w-${e}`,[["max-width",t]]),n(`max-h-${e}`,[["max-height",t]]);n("size-auto",[["--tw-sort","size"],["width","auto"],["height","auto"]]),n("w-auto",[["width","auto"]]),n("h-auto",[["height","auto"]]),n("min-w-auto",[["min-width","auto"]]),n("min-h-auto",[["min-height","auto"]]),n("h-lh",[["height","1lh"]]),n("min-h-lh",[["min-height","1lh"]]),n("max-h-lh",[["max-height","1lh"]]),n("w-screen",[["width","100vw"]]),n("min-w-screen",[["min-width","100vw"]]),n("max-w-screen",[["max-width","100vw"]]),n("h-screen",[["height","100vh"]]),n("min-h-screen",[["min-height","100vh"]]),n("max-h-screen",[["max-height","100vh"]]),n("max-w-none",[["max-width","none"]]),n("max-h-none",[["max-height","none"]]),i("size",["--size","--spacing"],(e=>[y("--tw-sort","size"),y("width",e),y("height",e)]),{supportsFractions:!0});for(let[e,t,r]of[["w",["--width","--spacing","--container"],"width"],["min-w",["--min-width","--spacing","--container"],"min-width"],["max-w",["--max-width","--spacing","--container"],"max-width"],["h",["--height","--spacing"],"height"],["min-h",["--min-height","--height","--spacing"],"min-height"],["max-h",["--max-height","--height","--spacing"],"max-height"]])i(e,t,(e=>[y(r,e)]),{supportsFractions:!0});t.static("container",(()=>{let t=[...e.namespace("--breakpoint").values()];t.sort(((e,t)=>re(e,t,"asc")));let r=[y("--tw-sort","--tw-container-component"),y("width","100%")];for(let e of t)r.push(k("@media",`(width >= ${e})`,[y("max-width",e)]));return r})),n("flex-auto",[["flex","auto"]]),n("flex-initial",[["flex","0 auto"]]),n("flex-none",[["flex","none"]]),t.functional("flex",(e=>{if(e.value){if("arbitrary"===e.value.kind)return e.modifier?void 0:[y("flex",e.value.value)];if(e.value.fraction){let[t,r]=R(e.value.fraction,"/");return ye(t)&&ye(r)?[y("flex",`calc(${e.value.fraction} * 100%)`)]:void 0}if(ye(e.value.value))return e.modifier?void 0:[y("flex",e.value.value)]}})),r("flex",(()=>[{supportsFractions:!0}])),o("shrink",{defaultValue:"1",handleBareValue:({value:e})=>ye(e)?e:null,handle:e=>[y("flex-shrink",e)]}),o("grow",{defaultValue:"1",handleBareValue:({value:e})=>ye(e)?e:null,handle:e=>[y("flex-grow",e)]}),r("shrink",(()=>[{values:["0"],valueThemeKeys:[],hasDefaultValue:!0}])),r("grow",(()=>[{values:["0"],valueThemeKeys:[],hasDefaultValue:!0}])),n("basis-auto",[["flex-basis","auto"]]),n("basis-full",[["flex-basis","100%"]]),i("basis",["--flex-basis","--spacing","--container"],(e=>[y("flex-basis",e)]),{supportsFractions:!0}),n("table-auto",[["table-layout","auto"]]),n("table-fixed",[["table-layout","fixed"]]),n("caption-top",[["caption-side","top"]]),n("caption-bottom",[["caption-side","bottom"]]),n("border-collapse",[["border-collapse","collapse"]]),n("border-separate",[["border-collapse","separate"]]);let l=()=>z([Ne("--tw-border-spacing-x","0",""),Ne("--tw-border-spacing-y","0","")]);i("border-spacing",["--border-spacing","--spacing"],(e=>[l(),y("--tw-border-spacing-x",e),y("--tw-border-spacing-y",e),y("border-spacing","var(--tw-border-spacing-x) var(--tw-border-spacing-y)")])),i("border-spacing-x",["--border-spacing","--spacing"],(e=>[l(),y("--tw-border-spacing-x",e),y("border-spacing","var(--tw-border-spacing-x) var(--tw-border-spacing-y)")])),i("border-spacing-y",["--border-spacing","--spacing"],(e=>[l(),y("--tw-border-spacing-y",e),y("border-spacing","var(--tw-border-spacing-x) var(--tw-border-spacing-y)")])),n("origin-center",[["transform-origin","center"]]),n("origin-top",[["transform-origin","top"]]),n("origin-top-right",[["transform-origin","top right"]]),n("origin-right",[["transform-origin","right"]]),n("origin-bottom-right",[["transform-origin","bottom right"]]),n("origin-bottom",[["transform-origin","bottom"]]),n("origin-bottom-left",[["transform-origin","bottom left"]]),n("origin-left",[["transform-origin","left"]]),n("origin-top-left",[["transform-origin","top left"]]),o("origin",{themeKeys:["--transform-origin"],handle:e=>[y("transform-origin",e)]}),n("perspective-origin-center",[["perspective-origin","center"]]),n("perspective-origin-top",[["perspective-origin","top"]]),n("perspective-origin-top-right",[["perspective-origin","top right"]]),n("perspective-origin-right",[["perspective-origin","right"]]),n("perspective-origin-bottom-right",[["perspective-origin","bottom right"]]),n("perspective-origin-bottom",[["perspective-origin","bottom"]]),n("perspective-origin-bottom-left",[["perspective-origin","bottom left"]]),n("perspective-origin-left",[["perspective-origin","left"]]),n("perspective-origin-top-left",[["perspective-origin","top left"]]),o("perspective-origin",{themeKeys:["--perspective-origin"],handle:e=>[y("perspective-origin",e)]}),n("perspective-none",[["perspective","none"]]),o("perspective",{themeKeys:["--perspective"],handle:e=>[y("perspective",e)]});let s=()=>z([Ne("--tw-translate-x","0"),Ne("--tw-translate-y","0"),Ne("--tw-translate-z","0")]);n("translate-none",[["translate","none"]]),n("-translate-full",[s,["--tw-translate-x","-100%"],["--tw-translate-y","-100%"],["translate","var(--tw-translate-x) var(--tw-translate-y)"]]),n("translate-full",[s,["--tw-translate-x","100%"],["--tw-translate-y","100%"],["translate","var(--tw-translate-x) var(--tw-translate-y)"]]),i("translate",["--translate","--spacing"],(e=>[s(),y("--tw-translate-x",e),y("--tw-translate-y",e),y("translate","var(--tw-translate-x) var(--tw-translate-y)")]),{supportsNegative:!0,supportsFractions:!0});for(let e of["x","y"])n(`-translate-${e}-full`,[s,[`--tw-translate-${e}`,"-100%"],["translate","var(--tw-translate-x) var(--tw-translate-y)"]]),n(`translate-${e}-full`,[s,[`--tw-translate-${e}`,"100%"],["translate","var(--tw-translate-x) var(--tw-translate-y)"]]),i(`translate-${e}`,["--translate","--spacing"],(t=>[s(),y(`--tw-translate-${e}`,t),y("translate","var(--tw-translate-x) var(--tw-translate-y)")]),{supportsNegative:!0,supportsFractions:!0});i("translate-z",["--translate","--spacing"],(e=>[s(),y("--tw-translate-z",e),y("translate","var(--tw-translate-x) var(--tw-translate-y) var(--tw-translate-z)")]),{supportsNegative:!0}),n("translate-3d",[s,["translate","var(--tw-translate-x) var(--tw-translate-y) var(--tw-translate-z)"]]);let c=()=>z([Ne("--tw-scale-x","1"),Ne("--tw-scale-y","1"),Ne("--tw-scale-z","1")]);function u({negative:t}){return r=>{if(!r.value||r.modifier)return;let n;return"arbitrary"===r.value.kind?(n=r.value.value,n=t?`calc(${n} * -1)`:n,[y("scale",n)]):(n=e.resolve(r.value.value,["--scale"]),!n&&ye(r.value.value)&&(n=`${r.value.value}%`),n?(n=t?`calc(${n} * -1)`:n,[c(),y("--tw-scale-x",n),y("--tw-scale-y",n),y("--tw-scale-z",n),y("scale","var(--tw-scale-x) var(--tw-scale-y)")]):void 0)}}n("scale-none",[["scale","none"]]),t.functional("-scale",u({negative:!0})),t.functional("scale",u({negative:!1})),r("scale",(()=>[{supportsNegative:!0,values:["0","50","75","90","95","100","105","110","125","150","200"],valueThemeKeys:["--scale"]}]));for(let e of["x","y","z"])o(`scale-${e}`,{supportsNegative:!0,themeKeys:["--scale"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,handle:t=>[c(),y(`--tw-scale-${e}`,t),y("scale","var(--tw-scale-x) var(--tw-scale-y)"+("z"===e?" var(--tw-scale-z)":""))]}),r(`scale-${e}`,(()=>[{supportsNegative:!0,values:["0","50","75","90","95","100","105","110","125","150","200"],valueThemeKeys:["--scale"]}]));function d({negative:t}){return r=>{if(!r.value||r.modifier)return;let n;if("arbitrary"===r.value.kind){n=r.value.value;let e=r.value.dataType??ie(n,["angle","vector"]);if("vector"===e)return[y("rotate",`${n} var(--tw-rotate)`)];if("angle"!==e)return[y("rotate",t?`calc(${n} * -1)`:n)]}else if(n=e.resolve(r.value.value,["--rotate"]),!n&&ye(r.value.value)&&(n=`${r.value.value}deg`),!n)return;return[y("rotate",t?`calc(${n} * -1)`:n)]}}n("scale-3d",[c,["scale","var(--tw-scale-x) var(--tw-scale-y) var(--tw-scale-z)"]]),n("rotate-none",[["rotate","none"]]),t.functional("-rotate",d({negative:!0})),t.functional("rotate",d({negative:!1})),r("rotate",(()=>[{supportsNegative:!0,values:["0","1","2","3","6","12","45","90","180"],valueThemeKeys:["--rotate"]}]));{let e=["var(--tw-rotate-x,)","var(--tw-rotate-y,)","var(--tw-rotate-z,)","var(--tw-skew-x,)","var(--tw-skew-y,)"].join(" "),a=()=>z([Ne("--tw-rotate-x"),Ne("--tw-rotate-y"),Ne("--tw-rotate-z"),Ne("--tw-skew-x"),Ne("--tw-skew-y")]);for(let t of["x","y","z"])o(`rotate-${t}`,{supportsNegative:!0,themeKeys:["--rotate"],handleBareValue:({value:e})=>ye(e)?`${e}deg`:null,handle:r=>[a(),y(`--tw-rotate-${t}`,`rotate${t.toUpperCase()}(${r})`),y("transform",e)]}),r(`rotate-${t}`,(()=>[{supportsNegative:!0,values:["0","1","2","3","6","12","45","90","180"],valueThemeKeys:["--rotate"]}]));o("skew",{supportsNegative:!0,themeKeys:["--skew"],handleBareValue:({value:e})=>ye(e)?`${e}deg`:null,handle:t=>[a(),y("--tw-skew-x",`skewX(${t})`),y("--tw-skew-y",`skewY(${t})`),y("transform",e)]}),o("skew-x",{supportsNegative:!0,themeKeys:["--skew"],handleBareValue:({value:e})=>ye(e)?`${e}deg`:null,handle:t=>[a(),y("--tw-skew-x",`skewX(${t})`),y("transform",e)]}),o("skew-y",{supportsNegative:!0,themeKeys:["--skew"],handleBareValue:({value:e})=>ye(e)?`${e}deg`:null,handle:t=>[a(),y("--tw-skew-y",`skewY(${t})`),y("transform",e)]}),r("skew",(()=>[{supportsNegative:!0,values:["0","1","2","3","6","12"],valueThemeKeys:["--skew"]}])),r("skew-x",(()=>[{supportsNegative:!0,values:["0","1","2","3","6","12"],valueThemeKeys:["--skew"]}])),r("skew-y",(()=>[{supportsNegative:!0,values:["0","1","2","3","6","12"],valueThemeKeys:["--skew"]}])),t.functional("transform",(t=>{if(t.modifier)return;let r=null;return t.value?"arbitrary"===t.value.kind&&(r=t.value.value):r=e,null!==r?[a(),y("transform",r)]:void 0})),r("transform",(()=>[{hasDefaultValue:!0}])),n("transform-cpu",[["transform",e]]),n("transform-gpu",[["transform",`translateZ(0) ${e}`]]),n("transform-none",[["transform","none"]])}n("transform-flat",[["transform-style","flat"]]),n("transform-3d",[["transform-style","preserve-3d"]]),n("transform-content",[["transform-box","content-box"]]),n("transform-border",[["transform-box","border-box"]]),n("transform-fill",[["transform-box","fill-box"]]),n("transform-stroke",[["transform-box","stroke-box"]]),n("transform-view",[["transform-box","view-box"]]),n("backface-visible",[["backface-visibility","visible"]]),n("backface-hidden",[["backface-visibility","hidden"]]);for(let e of["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out"])n(`cursor-${e}`,[["cursor",e]]);o("cursor",{themeKeys:["--cursor"],handle:e=>[y("cursor",e)]});for(let e of["auto","none","manipulation"])n(`touch-${e}`,[["touch-action",e]]);let f=()=>z([Ne("--tw-pan-x"),Ne("--tw-pan-y"),Ne("--tw-pinch-zoom")]);for(let e of["x","left","right"])n(`touch-pan-${e}`,[f,["--tw-pan-x",`pan-${e}`],["touch-action","var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)"]]);for(let e of["y","up","down"])n(`touch-pan-${e}`,[f,["--tw-pan-y",`pan-${e}`],["touch-action","var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)"]]);n("touch-pinch-zoom",[f,["--tw-pinch-zoom","pinch-zoom"],["touch-action","var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)"]]);for(let e of["none","text","all","auto"])n(`select-${e}`,[["-webkit-user-select",e],["user-select",e]]);n("resize-none",[["resize","none"]]),n("resize-x",[["resize","horizontal"]]),n("resize-y",[["resize","vertical"]]),n("resize",[["resize","both"]]),n("snap-none",[["scroll-snap-type","none"]]);let p=()=>z([Ne("--tw-scroll-snap-strictness","proximity","*")]);for(let e of["x","y","both"])n(`snap-${e}`,[p,["scroll-snap-type",`${e} var(--tw-scroll-snap-strictness)`]]);n("snap-mandatory",[p,["--tw-scroll-snap-strictness","mandatory"]]),n("snap-proximity",[p,["--tw-scroll-snap-strictness","proximity"]]),n("snap-align-none",[["scroll-snap-align","none"]]),n("snap-start",[["scroll-snap-align","start"]]),n("snap-end",[["scroll-snap-align","end"]]),n("snap-center",[["scroll-snap-align","center"]]),n("snap-normal",[["scroll-snap-stop","normal"]]),n("snap-always",[["scroll-snap-stop","always"]]);for(let[e,t]of[["scroll-m","scroll-margin"],["scroll-mx","scroll-margin-inline"],["scroll-my","scroll-margin-block"],["scroll-ms","scroll-margin-inline-start"],["scroll-me","scroll-margin-inline-end"],["scroll-mt","scroll-margin-top"],["scroll-mr","scroll-margin-right"],["scroll-mb","scroll-margin-bottom"],["scroll-ml","scroll-margin-left"]])i(e,["--scroll-margin","--spacing"],(e=>[y(t,e)]),{supportsNegative:!0});for(let[e,t]of[["scroll-p","scroll-padding"],["scroll-px","scroll-padding-inline"],["scroll-py","scroll-padding-block"],["scroll-ps","scroll-padding-inline-start"],["scroll-pe","scroll-padding-inline-end"],["scroll-pt","scroll-padding-top"],["scroll-pr","scroll-padding-right"],["scroll-pb","scroll-padding-bottom"],["scroll-pl","scroll-padding-left"]])i(e,["--scroll-padding","--spacing"],(e=>[y(t,e)]));n("list-inside",[["list-style-position","inside"]]),n("list-outside",[["list-style-position","outside"]]),n("list-none",[["list-style-type","none"]]),n("list-disc",[["list-style-type","disc"]]),n("list-decimal",[["list-style-type","decimal"]]),o("list",{themeKeys:["--list-style-type"],handle:e=>[y("list-style-type",e)]}),n("list-image-none",[["list-style-image","none"]]),o("list-image",{themeKeys:["--list-style-image"],handle:e=>[y("list-style-image",e)]}),n("appearance-none",[["appearance","none"]]),n("appearance-auto",[["appearance","auto"]]),n("scheme-normal",[["color-scheme","normal"]]),n("scheme-dark",[["color-scheme","dark"]]),n("scheme-light",[["color-scheme","light"]]),n("scheme-light-dark",[["color-scheme","light dark"]]),n("scheme-only-dark",[["color-scheme","only dark"]]),n("scheme-only-light",[["color-scheme","only light"]]),n("columns-auto",[["columns","auto"]]),o("columns",{themeKeys:["--columns","--container"],handleBareValue:({value:e})=>ye(e)?e:null,handle:e=>[y("columns",e)]}),r("columns",(()=>[{values:Array.from({length:12},((e,t)=>`${t+1}`)),valueThemeKeys:["--columns","--container"]}]));for(let e of["auto","avoid","all","avoid-page","page","left","right","column"])n(`break-before-${e}`,[["break-before",e]]);for(let e of["auto","avoid","avoid-page","avoid-column"])n(`break-inside-${e}`,[["break-inside",e]]);for(let e of["auto","avoid","all","avoid-page","page","left","right","column"])n(`break-after-${e}`,[["break-after",e]]);n("grid-flow-row",[["grid-auto-flow","row"]]),n("grid-flow-col",[["grid-auto-flow","column"]]),n("grid-flow-dense",[["grid-auto-flow","dense"]]),n("grid-flow-row-dense",[["grid-auto-flow","row dense"]]),n("grid-flow-col-dense",[["grid-auto-flow","column dense"]]),n("auto-cols-auto",[["grid-auto-columns","auto"]]),n("auto-cols-min",[["grid-auto-columns","min-content"]]),n("auto-cols-max",[["grid-auto-columns","max-content"]]),n("auto-cols-fr",[["grid-auto-columns","minmax(0, 1fr)"]]),o("auto-cols",{themeKeys:["--grid-auto-columns"],handle:e=>[y("grid-auto-columns",e)]}),n("auto-rows-auto",[["grid-auto-rows","auto"]]),n("auto-rows-min",[["grid-auto-rows","min-content"]]),n("auto-rows-max",[["grid-auto-rows","max-content"]]),n("auto-rows-fr",[["grid-auto-rows","minmax(0, 1fr)"]]),o("auto-rows",{themeKeys:["--grid-auto-rows"],handle:e=>[y("grid-auto-rows",e)]}),n("grid-cols-none",[["grid-template-columns","none"]]),n("grid-cols-subgrid",[["grid-template-columns","subgrid"]]),o("grid-cols",{themeKeys:["--grid-template-columns"],handleBareValue:({value:e})=>xe(e)?`repeat(${e}, minmax(0, 1fr))`:null,handle:e=>[y("grid-template-columns",e)]}),n("grid-rows-none",[["grid-template-rows","none"]]),n("grid-rows-subgrid",[["grid-template-rows","subgrid"]]),o("grid-rows",{themeKeys:["--grid-template-rows"],handleBareValue:({value:e})=>xe(e)?`repeat(${e}, minmax(0, 1fr))`:null,handle:e=>[y("grid-template-rows",e)]}),r("grid-cols",(()=>[{values:Array.from({length:12},((e,t)=>`${t+1}`)),valueThemeKeys:["--grid-template-columns"]}])),r("grid-rows",(()=>[{values:Array.from({length:12},((e,t)=>`${t+1}`)),valueThemeKeys:["--grid-template-rows"]}])),n("flex-row",[["flex-direction","row"]]),n("flex-row-reverse",[["flex-direction","row-reverse"]]),n("flex-col",[["flex-direction","column"]]),n("flex-col-reverse",[["flex-direction","column-reverse"]]),n("flex-wrap",[["flex-wrap","wrap"]]),n("flex-nowrap",[["flex-wrap","nowrap"]]),n("flex-wrap-reverse",[["flex-wrap","wrap-reverse"]]),n("place-content-center",[["place-content","center"]]),n("place-content-start",[["place-content","start"]]),n("place-content-end",[["place-content","end"]]),n("place-content-center-safe",[["place-content","safe center"]]),n("place-content-end-safe",[["place-content","safe end"]]),n("place-content-between",[["place-content","space-between"]]),n("place-content-around",[["place-content","space-around"]]),n("place-content-evenly",[["place-content","space-evenly"]]),n("place-content-baseline",[["place-content","baseline"]]),n("place-content-stretch",[["place-content","stretch"]]),n("place-items-center",[["place-items","center"]]),n("place-items-start",[["place-items","start"]]),n("place-items-end",[["place-items","end"]]),n("place-items-center-safe",[["place-items","safe center"]]),n("place-items-end-safe",[["place-items","safe end"]]),n("place-items-baseline",[["place-items","baseline"]]),n("place-items-stretch",[["place-items","stretch"]]),n("content-normal",[["align-content","normal"]]),n("content-center",[["align-content","center"]]),n("content-start",[["align-content","flex-start"]]),n("content-end",[["align-content","flex-end"]]),n("content-center-safe",[["align-content","safe center"]]),n("content-end-safe",[["align-content","safe flex-end"]]),n("content-between",[["align-content","space-between"]]),n("content-around",[["align-content","space-around"]]),n("content-evenly",[["align-content","space-evenly"]]),n("content-baseline",[["align-content","baseline"]]),n("content-stretch",[["align-content","stretch"]]),n("items-center",[["align-items","center"]]),n("items-start",[["align-items","flex-start"]]),n("items-end",[["align-items","flex-end"]]),n("items-center-safe",[["align-items","safe center"]]),n("items-end-safe",[["align-items","safe flex-end"]]),n("items-baseline",[["align-items","baseline"]]),n("items-baseline-last",[["align-items","last baseline"]]),n("items-stretch",[["align-items","stretch"]]),n("justify-normal",[["justify-content","normal"]]),n("justify-center",[["justify-content","center"]]),n("justify-start",[["justify-content","flex-start"]]),n("justify-end",[["justify-content","flex-end"]]),n("justify-center-safe",[["justify-content","safe center"]]),n("justify-end-safe",[["justify-content","safe flex-end"]]),n("justify-between",[["justify-content","space-between"]]),n("justify-around",[["justify-content","space-around"]]),n("justify-evenly",[["justify-content","space-evenly"]]),n("justify-baseline",[["justify-content","baseline"]]),n("justify-stretch",[["justify-content","stretch"]]),n("justify-items-normal",[["justify-items","normal"]]),n("justify-items-center",[["justify-items","center"]]),n("justify-items-start",[["justify-items","start"]]),n("justify-items-end",[["justify-items","end"]]),n("justify-items-center-safe",[["justify-items","safe center"]]),n("justify-items-end-safe",[["justify-items","safe end"]]),n("justify-items-stretch",[["justify-items","stretch"]]),i("gap",["--gap","--spacing"],(e=>[y("gap",e)])),i("gap-x",["--gap","--spacing"],(e=>[y("column-gap",e)])),i("gap-y",["--gap","--spacing"],(e=>[y("row-gap",e)])),i("space-x",["--space","--spacing"],(e=>[z([Ne("--tw-space-x-reverse","0")]),w(":where(& > :not(:last-child))",[y("--tw-sort","row-gap"),y("--tw-space-x-reverse","0"),y("margin-inline-start",`calc(${e} * var(--tw-space-x-reverse))`),y("margin-inline-end",`calc(${e} * calc(1 - var(--tw-space-x-reverse)))`)])]),{supportsNegative:!0}),i("space-y",["--space","--spacing"],(e=>[z([Ne("--tw-space-y-reverse","0")]),w(":where(& > :not(:last-child))",[y("--tw-sort","column-gap"),y("--tw-space-y-reverse","0"),y("margin-block-start",`calc(${e} * var(--tw-space-y-reverse))`),y("margin-block-end",`calc(${e} * calc(1 - var(--tw-space-y-reverse)))`)])]),{supportsNegative:!0}),n("space-x-reverse",[()=>z([Ne("--tw-space-x-reverse","0")]),()=>w(":where(& > :not(:last-child))",[y("--tw-sort","row-gap"),y("--tw-space-x-reverse","1")])]),n("space-y-reverse",[()=>z([Ne("--tw-space-y-reverse","0")]),()=>w(":where(& > :not(:last-child))",[y("--tw-sort","column-gap"),y("--tw-space-y-reverse","1")])]),n("accent-auto",[["accent-color","auto"]]),a("accent",{themeKeys:["--accent-color","--color"],handle:e=>[y("accent-color",e)]}),a("caret",{themeKeys:["--caret-color","--color"],handle:e=>[y("caret-color",e)]}),a("divide",{themeKeys:["--divide-color","--color"],handle:e=>[w(":where(& > :not(:last-child))",[y("--tw-sort","divide-color"),y("border-color",e)])]}),n("place-self-auto",[["place-self","auto"]]),n("place-self-start",[["place-self","start"]]),n("place-self-end",[["place-self","end"]]),n("place-self-center",[["place-self","center"]]),n("place-self-end-safe",[["place-self","safe end"]]),n("place-self-center-safe",[["place-self","safe center"]]),n("place-self-stretch",[["place-self","stretch"]]),n("self-auto",[["align-self","auto"]]),n("self-start",[["align-self","flex-start"]]),n("self-end",[["align-self","flex-end"]]),n("self-center",[["align-self","center"]]),n("self-end-safe",[["align-self","safe flex-end"]]),n("self-center-safe",[["align-self","safe center"]]),n("self-stretch",[["align-self","stretch"]]),n("self-baseline",[["align-self","baseline"]]),n("self-baseline-last",[["align-self","last baseline"]]),n("justify-self-auto",[["justify-self","auto"]]),n("justify-self-start",[["justify-self","flex-start"]]),n("justify-self-end",[["justify-self","flex-end"]]),n("justify-self-center",[["justify-self","center"]]),n("justify-self-end-safe",[["justify-self","safe flex-end"]]),n("justify-self-center-safe",[["justify-self","safe center"]]),n("justify-self-stretch",[["justify-self","stretch"]]);for(let e of["auto","hidden","clip","visible","scroll"])n(`overflow-${e}`,[["overflow",e]]),n(`overflow-x-${e}`,[["overflow-x",e]]),n(`overflow-y-${e}`,[["overflow-y",e]]);for(let e of["auto","contain","none"])n(`overscroll-${e}`,[["overscroll-behavior",e]]),n(`overscroll-x-${e}`,[["overscroll-behavior-x",e]]),n(`overscroll-y-${e}`,[["overscroll-behavior-y",e]]);n("scroll-auto",[["scroll-behavior","auto"]]),n("scroll-smooth",[["scroll-behavior","smooth"]]),n("truncate",[["overflow","hidden"],["text-overflow","ellipsis"],["white-space","nowrap"]]),n("text-ellipsis",[["text-overflow","ellipsis"]]),n("text-clip",[["text-overflow","clip"]]),n("hyphens-none",[["-webkit-hyphens","none"],["hyphens","none"]]),n("hyphens-manual",[["-webkit-hyphens","manual"],["hyphens","manual"]]),n("hyphens-auto",[["-webkit-hyphens","auto"],["hyphens","auto"]]),n("whitespace-normal",[["white-space","normal"]]),n("whitespace-nowrap",[["white-space","nowrap"]]),n("whitespace-pre",[["white-space","pre"]]),n("whitespace-pre-line",[["white-space","pre-line"]]),n("whitespace-pre-wrap",[["white-space","pre-wrap"]]),n("whitespace-break-spaces",[["white-space","break-spaces"]]),n("text-wrap",[["text-wrap","wrap"]]),n("text-nowrap",[["text-wrap","nowrap"]]),n("text-balance",[["text-wrap","balance"]]),n("text-pretty",[["text-wrap","pretty"]]),n("break-normal",[["overflow-wrap","normal"],["word-break","normal"]]),n("break-words",[["overflow-wrap","break-word"]]),n("break-all",[["word-break","break-all"]]),n("break-keep",[["word-break","keep-all"]]),n("wrap-anywhere",[["overflow-wrap","anywhere"]]),n("wrap-break-word",[["overflow-wrap","break-word"]]),n("wrap-normal",[["overflow-wrap","normal"]]);for(let[e,t]of[["rounded",["border-radius"]],["rounded-s",["border-start-start-radius","border-end-start-radius"]],["rounded-e",["border-start-end-radius","border-end-end-radius"]],["rounded-t",["border-top-left-radius","border-top-right-radius"]],["rounded-r",["border-top-right-radius","border-bottom-right-radius"]],["rounded-b",["border-bottom-right-radius","border-bottom-left-radius"]],["rounded-l",["border-top-left-radius","border-bottom-left-radius"]],["rounded-ss",["border-start-start-radius"]],["rounded-se",["border-start-end-radius"]],["rounded-ee",["border-end-end-radius"]],["rounded-es",["border-end-start-radius"]],["rounded-tl",["border-top-left-radius"]],["rounded-tr",["border-top-right-radius"]],["rounded-br",["border-bottom-right-radius"]],["rounded-bl",["border-bottom-left-radius"]]])n(`${e}-none`,t.map((e=>[e,"0"]))),n(`${e}-full`,t.map((e=>[e,"calc(infinity * 1px)"]))),o(e,{themeKeys:["--radius"],handle:e=>t.map((t=>y(t,e)))});n("border-solid",[["--tw-border-style","solid"],["border-style","solid"]]),n("border-dashed",[["--tw-border-style","dashed"],["border-style","dashed"]]),n("border-dotted",[["--tw-border-style","dotted"],["border-style","dotted"]]),n("border-double",[["--tw-border-style","double"],["border-style","double"]]),n("border-hidden",[["--tw-border-style","hidden"],["border-style","hidden"]]),n("border-none",[["--tw-border-style","none"],["border-style","none"]]);{let a=function(n,o){t.functional(n,(t=>{if(!t.value){if(t.modifier)return;let r=e.get(["--default-border-width"])??"1px",n=o.width(r);return n?[i(),...n]:void 0}if("arbitrary"===t.value.kind){let r=t.value.value;switch(t.value.dataType??ie(r,["color","line-width","length"])){case"line-width":case"length":{if(t.modifier)return;let e=o.width(r);return e?[i(),...e]:void 0}default:return r=We(r,t.modifier,e),null===r?void 0:o.color(r)}}{let r=Ue(t,e,["--border-color","--color"]);if(r)return o.color(r)}{if(t.modifier)return;let r=e.resolve(t.value.value,["--border-width"]);if(r){let e=o.width(r);return e?[i(),...e]:void 0}if(ye(t.value.value)){let e=o.width(`${t.value.value}px`);return e?[i(),...e]:void 0}}})),r(n,(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--border-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t)),hasDefaultValue:!0},{values:["0","2","4","8"],valueThemeKeys:["--border-width"]}]))},i=()=>z([Ne("--tw-border-style","solid")]);a("border",{width:e=>[y("border-style","var(--tw-border-style)"),y("border-width",e)],color:e=>[y("border-color",e)]}),a("border-x",{width:e=>[y("border-inline-style","var(--tw-border-style)"),y("border-inline-width",e)],color:e=>[y("border-inline-color",e)]}),a("border-y",{width:e=>[y("border-block-style","var(--tw-border-style)"),y("border-block-width",e)],color:e=>[y("border-block-color",e)]}),a("border-s",{width:e=>[y("border-inline-start-style","var(--tw-border-style)"),y("border-inline-start-width",e)],color:e=>[y("border-inline-start-color",e)]}),a("border-e",{width:e=>[y("border-inline-end-style","var(--tw-border-style)"),y("border-inline-end-width",e)],color:e=>[y("border-inline-end-color",e)]}),a("border-t",{width:e=>[y("border-top-style","var(--tw-border-style)"),y("border-top-width",e)],color:e=>[y("border-top-color",e)]}),a("border-r",{width:e=>[y("border-right-style","var(--tw-border-style)"),y("border-right-width",e)],color:e=>[y("border-right-color",e)]}),a("border-b",{width:e=>[y("border-bottom-style","var(--tw-border-style)"),y("border-bottom-width",e)],color:e=>[y("border-bottom-color",e)]}),a("border-l",{width:e=>[y("border-left-style","var(--tw-border-style)"),y("border-left-width",e)],color:e=>[y("border-left-color",e)]}),o("divide-x",{defaultValue:e.get(["--default-border-width"])??"1px",themeKeys:["--divide-width","--border-width"],handleBareValue:({value:e})=>ye(e)?`${e}px`:null,handle:e=>[z([Ne("--tw-divide-x-reverse","0")]),w(":where(& > :not(:last-child))",[y("--tw-sort","divide-x-width"),i(),y("--tw-divide-x-reverse","0"),y("border-inline-style","var(--tw-border-style)"),y("border-inline-start-width",`calc(${e} * var(--tw-divide-x-reverse))`),y("border-inline-end-width",`calc(${e} * calc(1 - var(--tw-divide-x-reverse)))`)])]}),o("divide-y",{defaultValue:e.get(["--default-border-width"])??"1px",themeKeys:["--divide-width","--border-width"],handleBareValue:({value:e})=>ye(e)?`${e}px`:null,handle:e=>[z([Ne("--tw-divide-y-reverse","0")]),w(":where(& > :not(:last-child))",[y("--tw-sort","divide-y-width"),i(),y("--tw-divide-y-reverse","0"),y("border-bottom-style","var(--tw-border-style)"),y("border-top-style","var(--tw-border-style)"),y("border-top-width",`calc(${e} * var(--tw-divide-y-reverse))`),y("border-bottom-width",`calc(${e} * calc(1 - var(--tw-divide-y-reverse)))`)])]}),r("divide-x",(()=>[{values:["0","2","4","8"],valueThemeKeys:["--divide-width","--border-width"],hasDefaultValue:!0}])),r("divide-y",(()=>[{values:["0","2","4","8"],valueThemeKeys:["--divide-width","--border-width"],hasDefaultValue:!0}])),n("divide-x-reverse",[()=>z([Ne("--tw-divide-x-reverse","0")]),()=>w(":where(& > :not(:last-child))",[y("--tw-divide-x-reverse","1")])]),n("divide-y-reverse",[()=>z([Ne("--tw-divide-y-reverse","0")]),()=>w(":where(& > :not(:last-child))",[y("--tw-divide-y-reverse","1")])]);for(let e of["solid","dashed","dotted","double","none"])n(`divide-${e}`,[()=>w(":where(& > :not(:last-child))",[y("--tw-sort","divide-style"),y("--tw-border-style",e),y("border-style",e)])])}n("bg-auto",[["background-size","auto"]]),n("bg-cover",[["background-size","cover"]]),n("bg-contain",[["background-size","contain"]]),o("bg-size",{handle(e){if(e)return[y("background-size",e)]}}),n("bg-fixed",[["background-attachment","fixed"]]),n("bg-local",[["background-attachment","local"]]),n("bg-scroll",[["background-attachment","scroll"]]),n("bg-top",[["background-position","top"]]),n("bg-top-left",[["background-position","left top"]]),n("bg-top-right",[["background-position","right top"]]),n("bg-bottom",[["background-position","bottom"]]),n("bg-bottom-left",[["background-position","left bottom"]]),n("bg-bottom-right",[["background-position","right bottom"]]),n("bg-left",[["background-position","left"]]),n("bg-right",[["background-position","right"]]),n("bg-center",[["background-position","center"]]),o("bg-position",{handle(e){if(e)return[y("background-position",e)]}}),n("bg-repeat",[["background-repeat","repeat"]]),n("bg-no-repeat",[["background-repeat","no-repeat"]]),n("bg-repeat-x",[["background-repeat","repeat-x"]]),n("bg-repeat-y",[["background-repeat","repeat-y"]]),n("bg-repeat-round",[["background-repeat","round"]]),n("bg-repeat-space",[["background-repeat","space"]]),n("bg-none",[["background-image","none"]]);{let e=function(e){let t="in oklab";if("named"===e?.kind)switch(e.value){case"longer":case"shorter":case"increasing":case"decreasing":t=`in oklch ${e.value} hue`;break;default:t=`in ${e.value}`}else"arbitrary"===e?.kind&&(t=e.value);return t},n=function({negative:t}){return r=>{if(!r.value)return;if("arbitrary"===r.value.kind){if(r.modifier)return;let e=r.value.value;return"angle"===(r.value.dataType??ie(e,["angle"]))?(e=t?`calc(${e} * -1)`:`${e}`,[y("--tw-gradient-position",e),y("background-image",`linear-gradient(var(--tw-gradient-stops,${e}))`)]):t?void 0:[y("--tw-gradient-position",e),y("background-image",`linear-gradient(var(--tw-gradient-stops,${e}))`)]}let n=r.value.value;if(!t&&i.has(n))n=i.get(n);else{if(!ye(n))return;n=t?`calc(${n}deg * -1)`:`${n}deg`}let o=e(r.modifier);return[y("--tw-gradient-position",`${n}`),b("@supports (background-image: linear-gradient(in lab, red, red))",[y("--tw-gradient-position",`${n} ${o}`)]),y("background-image","linear-gradient(var(--tw-gradient-stops))")]}},o=function({negative:t}){return r=>{if("arbitrary"===r.value?.kind){if(r.modifier)return;let e=r.value.value;return[y("--tw-gradient-position",e),y("background-image",`conic-gradient(var(--tw-gradient-stops,${e}))`)]}let n=e(r.modifier);if(!r.value)return[y("--tw-gradient-position",n),y("background-image","conic-gradient(var(--tw-gradient-stops))")];let o=r.value.value;return ye(o)?(o=t?`calc(${o}deg * -1)`:`${o}deg`,[y("--tw-gradient-position",`from ${o} ${n}`),y("background-image","conic-gradient(var(--tw-gradient-stops))")]):void 0}},a=["oklab","oklch","srgb","hsl","longer","shorter","increasing","decreasing"],i=new Map([["to-t","to top"],["to-tr","to top right"],["to-r","to right"],["to-br","to bottom right"],["to-b","to bottom"],["to-bl","to bottom left"],["to-l","to left"],["to-tl","to top left"]]);t.functional("-bg-linear",n({negative:!0})),t.functional("bg-linear",n({negative:!1})),r("bg-linear",(()=>[{values:[...i.keys()],modifiers:a},{values:["0","30","60","90","120","150","180","210","240","270","300","330"],supportsNegative:!0,modifiers:a}])),t.functional("-bg-conic",o({negative:!0})),t.functional("bg-conic",o({negative:!1})),r("bg-conic",(()=>[{hasDefaultValue:!0,modifiers:a},{values:["0","30","60","90","120","150","180","210","240","270","300","330"],supportsNegative:!0,modifiers:a}])),t.functional("bg-radial",(t=>{if(!t.value)return[y("--tw-gradient-position",e(t.modifier)),y("background-image","radial-gradient(var(--tw-gradient-stops))")];if("arbitrary"===t.value.kind){if(t.modifier)return;let e=t.value.value;return[y("--tw-gradient-position",e),y("background-image",`radial-gradient(var(--tw-gradient-stops,${e}))`)]}})),r("bg-radial",(()=>[{hasDefaultValue:!0,modifiers:a}]))}t.functional("bg",(t=>{if(t.value){if("arbitrary"===t.value.kind){let r=t.value.value;switch(t.value.dataType??ie(r,["image","color","percentage","position","bg-size","length","url"])){case"percentage":case"position":return t.modifier?void 0:[y("background-position",r)];case"bg-size":case"length":case"size":return t.modifier?void 0:[y("background-size",r)];case"image":case"url":return t.modifier?void 0:[y("background-image",r)];default:return r=We(r,t.modifier,e),null===r?void 0:[y("background-color",r)]}}{let r=Ue(t,e,["--background-color","--color"]);if(r)return[y("background-color",r)]}{if(t.modifier)return;let r=e.resolve(t.value.value,["--background-image"]);if(r)return[y("background-image",r)]}}})),r("bg",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--background-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:[],valueThemeKeys:["--background-image"]}]));let h=()=>z([Ne("--tw-gradient-position"),Ne("--tw-gradient-from","#0000",""),Ne("--tw-gradient-via","#0000",""),Ne("--tw-gradient-to","#0000",""),Ne("--tw-gradient-stops"),Ne("--tw-gradient-via-stops"),Ne("--tw-gradient-from-position","0%",""),Ne("--tw-gradient-via-position","50%",""),Ne("--tw-gradient-to-position","100%","")]);function m(n,o){t.functional(n,(t=>{if(t.value){if("arbitrary"===t.value.kind){let r=t.value.value;switch(t.value.dataType??ie(r,["color","length","percentage"])){case"length":case"percentage":return t.modifier?void 0:o.position(r);default:return r=We(r,t.modifier,e),null===r?void 0:o.color(r)}}{let r=Ue(t,e,["--background-color","--color"]);if(r)return o.color(r)}{if(t.modifier)return;let r=e.resolve(t.value.value,["--gradient-color-stop-positions"]);if(r)return o.position(r);if("%"===t.value.value[t.value.value.length-1]&&ye(t.value.value.slice(0,-1)))return o.position(t.value.value)}}})),r(n,(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--background-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:Array.from({length:21},((e,t)=>5*t+"%")),valueThemeKeys:["--gradient-color-stop-positions"]}]))}m("from",{color:e=>[h(),y("--tw-sort","--tw-gradient-from"),y("--tw-gradient-from",e),y("--tw-gradient-stops","var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))")],position:e=>[h(),y("--tw-gradient-from-position",e)]}),n("via-none",[["--tw-gradient-via-stops","initial"]]),m("via",{color:e=>[h(),y("--tw-sort","--tw-gradient-via"),y("--tw-gradient-via",e),y("--tw-gradient-via-stops","var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position)"),y("--tw-gradient-stops","var(--tw-gradient-via-stops)")],position:e=>[h(),y("--tw-gradient-via-position",e)]}),m("to",{color:e=>[h(),y("--tw-sort","--tw-gradient-to"),y("--tw-gradient-to",e),y("--tw-gradient-stops","var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))")],position:e=>[h(),y("--tw-gradient-to-position",e)]}),n("mask-none",[["mask-image","none"]]),t.functional("mask",(e=>{if(!e.value||e.modifier||"arbitrary"!==e.value.kind)return;let t=e.value.value;switch(e.value.dataType??ie(t,["image","percentage","position","bg-size","length","url"])){case"percentage":case"position":return e.modifier?void 0:[y("mask-position",t)];case"bg-size":case"length":case"size":return[y("mask-size",t)];default:return[y("mask-image",t)]}})),n("mask-add",[["mask-composite","add"]]),n("mask-subtract",[["mask-composite","subtract"]]),n("mask-intersect",[["mask-composite","intersect"]]),n("mask-exclude",[["mask-composite","exclude"]]),n("mask-alpha",[["mask-mode","alpha"]]),n("mask-luminance",[["mask-mode","luminance"]]),n("mask-match",[["mask-mode","match-source"]]),n("mask-type-alpha",[["mask-type","alpha"]]),n("mask-type-luminance",[["mask-type","luminance"]]),n("mask-auto",[["mask-size","auto"]]),n("mask-cover",[["mask-size","cover"]]),n("mask-contain",[["mask-size","contain"]]),o("mask-size",{handle(e){if(e)return[y("mask-size",e)]}}),n("mask-top",[["mask-position","top"]]),n("mask-top-left",[["mask-position","left top"]]),n("mask-top-right",[["mask-position","right top"]]),n("mask-bottom",[["mask-position","bottom"]]),n("mask-bottom-left",[["mask-position","left bottom"]]),n("mask-bottom-right",[["mask-position","right bottom"]]),n("mask-left",[["mask-position","left"]]),n("mask-right",[["mask-position","right"]]),n("mask-center",[["mask-position","center"]]),o("mask-position",{handle(e){if(e)return[y("mask-position",e)]}}),n("mask-repeat",[["mask-repeat","repeat"]]),n("mask-no-repeat",[["mask-repeat","no-repeat"]]),n("mask-repeat-x",[["mask-repeat","repeat-x"]]),n("mask-repeat-y",[["mask-repeat","repeat-y"]]),n("mask-repeat-round",[["mask-repeat","round"]]),n("mask-repeat-space",[["mask-repeat","space"]]),n("mask-clip-border",[["mask-clip","border-box"]]),n("mask-clip-padding",[["mask-clip","padding-box"]]),n("mask-clip-content",[["mask-clip","content-box"]]),n("mask-clip-fill",[["mask-clip","fill-box"]]),n("mask-clip-stroke",[["mask-clip","stroke-box"]]),n("mask-clip-view",[["mask-clip","view-box"]]),n("mask-no-clip",[["mask-clip","no-clip"]]),n("mask-origin-border",[["mask-origin","border-box"]]),n("mask-origin-padding",[["mask-origin","padding-box"]]),n("mask-origin-content",[["mask-origin","content-box"]]),n("mask-origin-fill",[["mask-origin","fill-box"]]),n("mask-origin-stroke",[["mask-origin","stroke-box"]]),n("mask-origin-view",[["mask-origin","view-box"]]);let g=()=>z([Ne("--tw-mask-linear","linear-gradient(#fff, #fff)"),Ne("--tw-mask-radial","linear-gradient(#fff, #fff)"),Ne("--tw-mask-conic","linear-gradient(#fff, #fff)")]);function v(n,o){t.functional(n,(t=>{if(t.value){if("arbitrary"===t.value.kind){let r=t.value.value;switch(t.value.dataType??ie(r,["length","percentage","color"])){case"color":return r=We(r,t.modifier,e),null===r?void 0:o.color(r);case"percentage":return t.modifier||!ye(r.slice(0,-1))?void 0:o.position(r);default:return t.modifier?void 0:o.position(r)}}{let r=Ue(t,e,["--background-color","--color"]);if(r)return o.color(r)}{if(t.modifier)return;let r=ie(t.value.value,["number","percentage"]);if(!r)return;switch(r){case"number":{let r=e.resolve(null,["--spacing"]);return r&&$e(t.value.value)?o.position(`calc(${r} * ${t.value.value})`):void 0}case"percentage":return ye(t.value.value.slice(0,-1))?o.position(t.value.value):void 0;default:return}}}})),r(n,(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--background-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:Array.from({length:21},((e,t)=>5*t+"%")),valueThemeKeys:["--gradient-color-stop-positions"]}])),r(n,(()=>[{values:Array.from({length:21},((e,t)=>5*t+"%"))},{values:e.get(["--spacing"])?Ee:[]},{values:["current","inherit","transparent"],valueThemeKeys:["--background-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))}]))}let x=()=>z([Ne("--tw-mask-left","linear-gradient(#fff, #fff)"),Ne("--tw-mask-right","linear-gradient(#fff, #fff)"),Ne("--tw-mask-bottom","linear-gradient(#fff, #fff)"),Ne("--tw-mask-top","linear-gradient(#fff, #fff)")]);function $(e,t,r){v(e,{color(e){let n=[g(),x(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-linear","var(--tw-mask-left), var(--tw-mask-right), var(--tw-mask-bottom), var(--tw-mask-top)")];for(let o of["top","right","bottom","left"])r[o]&&(n.push(y(`--tw-mask-${o}`,`linear-gradient(to ${o}, var(--tw-mask-${o}-from-color) var(--tw-mask-${o}-from-position), var(--tw-mask-${o}-to-color) var(--tw-mask-${o}-to-position))`)),n.push(z([Ne(`--tw-mask-${o}-from-position`,"0%"),Ne(`--tw-mask-${o}-to-position`,"100%"),Ne(`--tw-mask-${o}-from-color`,"black"),Ne(`--tw-mask-${o}-to-color`,"transparent")])),n.push(y(`--tw-mask-${o}-${t}-color`,e)));return n},position(e){let n=[g(),x(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-linear","var(--tw-mask-left), var(--tw-mask-right), var(--tw-mask-bottom), var(--tw-mask-top)")];for(let o of["top","right","bottom","left"])r[o]&&(n.push(y(`--tw-mask-${o}`,`linear-gradient(to ${o}, var(--tw-mask-${o}-from-color) var(--tw-mask-${o}-from-position), var(--tw-mask-${o}-to-color) var(--tw-mask-${o}-to-position))`)),n.push(z([Ne(`--tw-mask-${o}-from-position`,"0%"),Ne(`--tw-mask-${o}-to-position`,"100%"),Ne(`--tw-mask-${o}-from-color`,"black"),Ne(`--tw-mask-${o}-to-color`,"transparent")])),n.push(y(`--tw-mask-${o}-${t}-position`,e)));return n}})}$("mask-x-from","from",{top:!1,right:!0,bottom:!1,left:!0}),$("mask-x-to","to",{top:!1,right:!0,bottom:!1,left:!0}),$("mask-y-from","from",{top:!0,right:!1,bottom:!0,left:!1}),$("mask-y-to","to",{top:!0,right:!1,bottom:!0,left:!1}),$("mask-t-from","from",{top:!0,right:!1,bottom:!1,left:!1}),$("mask-t-to","to",{top:!0,right:!1,bottom:!1,left:!1}),$("mask-r-from","from",{top:!1,right:!0,bottom:!1,left:!1}),$("mask-r-to","to",{top:!1,right:!0,bottom:!1,left:!1}),$("mask-b-from","from",{top:!1,right:!1,bottom:!0,left:!1}),$("mask-b-to","to",{top:!1,right:!1,bottom:!0,left:!1}),$("mask-l-from","from",{top:!1,right:!1,bottom:!1,left:!0}),$("mask-l-to","to",{top:!1,right:!1,bottom:!1,left:!0});let A=()=>z([Ne("--tw-mask-linear-position","0deg"),Ne("--tw-mask-linear-from-position","0%"),Ne("--tw-mask-linear-to-position","100%"),Ne("--tw-mask-linear-from-color","black"),Ne("--tw-mask-linear-to-color","transparent")]);o("mask-linear",{defaultValue:null,supportsNegative:!0,supportsFractions:!1,handleBareValue:e=>ye(e.value)?`calc(1deg * ${e.value})`:null,handleNegativeBareValue:e=>ye(e.value)?`calc(1deg * -${e.value})`:null,handle:e=>[g(),A(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-linear","linear-gradient(var(--tw-mask-linear-stops, var(--tw-mask-linear-position)))"),y("--tw-mask-linear-position",e)]}),r("mask-linear",(()=>[{supportsNegative:!0,values:["0","1","2","3","6","12","45","90","180"]}])),v("mask-linear-from",{color:e=>[g(),A(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-linear-stops","var(--tw-mask-linear-position), var(--tw-mask-linear-from-color) var(--tw-mask-linear-from-position), var(--tw-mask-linear-to-color) var(--tw-mask-linear-to-position)"),y("--tw-mask-linear","linear-gradient(var(--tw-mask-linear-stops))"),y("--tw-mask-linear-from-color",e)],position:e=>[g(),A(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-linear-stops","var(--tw-mask-linear-position), var(--tw-mask-linear-from-color) var(--tw-mask-linear-from-position), var(--tw-mask-linear-to-color) var(--tw-mask-linear-to-position)"),y("--tw-mask-linear","linear-gradient(var(--tw-mask-linear-stops))"),y("--tw-mask-linear-from-position",e)]}),v("mask-linear-to",{color:e=>[g(),A(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-linear-stops","var(--tw-mask-linear-position), var(--tw-mask-linear-from-color) var(--tw-mask-linear-from-position), var(--tw-mask-linear-to-color) var(--tw-mask-linear-to-position)"),y("--tw-mask-linear","linear-gradient(var(--tw-mask-linear-stops))"),y("--tw-mask-linear-to-color",e)],position:e=>[g(),A(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-linear-stops","var(--tw-mask-linear-position), var(--tw-mask-linear-from-color) var(--tw-mask-linear-from-position), var(--tw-mask-linear-to-color) var(--tw-mask-linear-to-position)"),y("--tw-mask-linear","linear-gradient(var(--tw-mask-linear-stops))"),y("--tw-mask-linear-to-position",e)]});let j=()=>z([Ne("--tw-mask-radial-from-position","0%"),Ne("--tw-mask-radial-to-position","100%"),Ne("--tw-mask-radial-from-color","black"),Ne("--tw-mask-radial-to-color","transparent"),Ne("--tw-mask-radial-shape","ellipse"),Ne("--tw-mask-radial-size","farthest-corner"),Ne("--tw-mask-radial-position","center")]);n("mask-circle",[["--tw-mask-radial-shape","circle"]]),n("mask-ellipse",[["--tw-mask-radial-shape","ellipse"]]),n("mask-radial-closest-side",[["--tw-mask-radial-size","closest-side"]]),n("mask-radial-farthest-side",[["--tw-mask-radial-size","farthest-side"]]),n("mask-radial-closest-corner",[["--tw-mask-radial-size","closest-corner"]]),n("mask-radial-farthest-corner",[["--tw-mask-radial-size","farthest-corner"]]),n("mask-radial-at-top",[["--tw-mask-radial-position","top"]]),n("mask-radial-at-top-left",[["--tw-mask-radial-position","top left"]]),n("mask-radial-at-top-right",[["--tw-mask-radial-position","top right"]]),n("mask-radial-at-bottom",[["--tw-mask-radial-position","bottom"]]),n("mask-radial-at-bottom-left",[["--tw-mask-radial-position","bottom left"]]),n("mask-radial-at-bottom-right",[["--tw-mask-radial-position","bottom right"]]),n("mask-radial-at-left",[["--tw-mask-radial-position","left"]]),n("mask-radial-at-right",[["--tw-mask-radial-position","right"]]),n("mask-radial-at-center",[["--tw-mask-radial-position","center"]]),o("mask-radial-at",{defaultValue:null,supportsNegative:!1,supportsFractions:!1,handle:e=>[y("--tw-mask-radial-position",e)]}),o("mask-radial",{defaultValue:null,supportsNegative:!1,supportsFractions:!1,handle:e=>[g(),j(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-radial","radial-gradient(var(--tw-mask-radial-stops, var(--tw-mask-radial-size)))"),y("--tw-mask-radial-size",e)]}),v("mask-radial-from",{color:e=>[g(),j(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-radial-stops","var(--tw-mask-radial-shape) var(--tw-mask-radial-size) at var(--tw-mask-radial-position), var(--tw-mask-radial-from-color) var(--tw-mask-radial-from-position), var(--tw-mask-radial-to-color) var(--tw-mask-radial-to-position)"),y("--tw-mask-radial","radial-gradient(var(--tw-mask-radial-stops))"),y("--tw-mask-radial-from-color",e)],position:e=>[g(),j(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-radial-stops","var(--tw-mask-radial-shape) var(--tw-mask-radial-size) at var(--tw-mask-radial-position), var(--tw-mask-radial-from-color) var(--tw-mask-radial-from-position), var(--tw-mask-radial-to-color) var(--tw-mask-radial-to-position)"),y("--tw-mask-radial","radial-gradient(var(--tw-mask-radial-stops))"),y("--tw-mask-radial-from-position",e)]}),v("mask-radial-to",{color:e=>[g(),j(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-radial-stops","var(--tw-mask-radial-shape) var(--tw-mask-radial-size) at var(--tw-mask-radial-position), var(--tw-mask-radial-from-color) var(--tw-mask-radial-from-position), var(--tw-mask-radial-to-color) var(--tw-mask-radial-to-position)"),y("--tw-mask-radial","radial-gradient(var(--tw-mask-radial-stops))"),y("--tw-mask-radial-to-color",e)],position:e=>[g(),j(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-radial-stops","var(--tw-mask-radial-shape) var(--tw-mask-radial-size) at var(--tw-mask-radial-position), var(--tw-mask-radial-from-color) var(--tw-mask-radial-from-position), var(--tw-mask-radial-to-color) var(--tw-mask-radial-to-position)"),y("--tw-mask-radial","radial-gradient(var(--tw-mask-radial-stops))"),y("--tw-mask-radial-to-position",e)]});let C=()=>z([Ne("--tw-mask-conic-position","0deg"),Ne("--tw-mask-conic-from-position","0%"),Ne("--tw-mask-conic-to-position","100%"),Ne("--tw-mask-conic-from-color","black"),Ne("--tw-mask-conic-to-color","transparent")]);o("mask-conic",{defaultValue:null,supportsNegative:!0,supportsFractions:!1,handleBareValue:e=>ye(e.value)?`calc(1deg * ${e.value})`:null,handleNegativeBareValue:e=>ye(e.value)?`calc(1deg * -${e.value})`:null,handle:e=>[g(),C(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-conic","conic-gradient(var(--tw-mask-conic-stops, var(--tw-mask-conic-position)))"),y("--tw-mask-conic-position",e)]}),r("mask-conic",(()=>[{supportsNegative:!0,values:["0","1","2","3","6","12","45","90","180"]}])),v("mask-conic-from",{color:e=>[g(),C(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-conic-stops","from var(--tw-mask-conic-position), var(--tw-mask-conic-from-color) var(--tw-mask-conic-from-position), var(--tw-mask-conic-to-color) var(--tw-mask-conic-to-position)"),y("--tw-mask-conic","conic-gradient(var(--tw-mask-conic-stops))"),y("--tw-mask-conic-from-color",e)],position:e=>[g(),C(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-conic-stops","from var(--tw-mask-conic-position), var(--tw-mask-conic-from-color) var(--tw-mask-conic-from-position), var(--tw-mask-conic-to-color) var(--tw-mask-conic-to-position)"),y("--tw-mask-conic","conic-gradient(var(--tw-mask-conic-stops))"),y("--tw-mask-conic-from-position",e)]}),v("mask-conic-to",{color:e=>[g(),C(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-conic-stops","from var(--tw-mask-conic-position), var(--tw-mask-conic-from-color) var(--tw-mask-conic-from-position), var(--tw-mask-conic-to-color) var(--tw-mask-conic-to-position)"),y("--tw-mask-conic","conic-gradient(var(--tw-mask-conic-stops))"),y("--tw-mask-conic-to-color",e)],position:e=>[g(),C(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-conic-stops","from var(--tw-mask-conic-position), var(--tw-mask-conic-from-color) var(--tw-mask-conic-from-position), var(--tw-mask-conic-to-color) var(--tw-mask-conic-to-position)"),y("--tw-mask-conic","conic-gradient(var(--tw-mask-conic-stops))"),y("--tw-mask-conic-to-position",e)]}),n("box-decoration-slice",[["-webkit-box-decoration-break","slice"],["box-decoration-break","slice"]]),n("box-decoration-clone",[["-webkit-box-decoration-break","clone"],["box-decoration-break","clone"]]),n("bg-clip-text",[["background-clip","text"]]),n("bg-clip-border",[["background-clip","border-box"]]),n("bg-clip-padding",[["background-clip","padding-box"]]),n("bg-clip-content",[["background-clip","content-box"]]),n("bg-origin-border",[["background-origin","border-box"]]),n("bg-origin-padding",[["background-origin","padding-box"]]),n("bg-origin-content",[["background-origin","content-box"]]);for(let e of["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"])n(`bg-blend-${e}`,[["background-blend-mode",e]]),n(`mix-blend-${e}`,[["mix-blend-mode",e]]);n("mix-blend-plus-darker",[["mix-blend-mode","plus-darker"]]),n("mix-blend-plus-lighter",[["mix-blend-mode","plus-lighter"]]),n("fill-none",[["fill","none"]]),t.functional("fill",(t=>{if(!t.value)return;if("arbitrary"===t.value.kind){let r=We(t.value.value,t.modifier,e);return null===r?void 0:[y("fill",r)]}let r=Ue(t,e,["--fill","--color"]);return r?[y("fill",r)]:void 0})),r("fill",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--fill","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))}])),n("stroke-none",[["stroke","none"]]),t.functional("stroke",(t=>{if(t.value){if("arbitrary"===t.value.kind){let r=t.value.value;switch(t.value.dataType??ie(r,["color","number","length","percentage"])){case"number":case"length":case"percentage":return t.modifier?void 0:[y("stroke-width",r)];default:return r=We(t.value.value,t.modifier,e),null===r?void 0:[y("stroke",r)]}}{let r=Ue(t,e,["--stroke","--color"]);if(r)return[y("stroke",r)]}{let r=e.resolve(t.value.value,["--stroke-width"]);if(r)return[y("stroke-width",r)];if(ye(t.value.value))return[y("stroke-width",t.value.value)]}}})),r("stroke",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--stroke","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:["0","1","2","3"],valueThemeKeys:["--stroke-width"]}])),n("object-contain",[["object-fit","contain"]]),n("object-cover",[["object-fit","cover"]]),n("object-fill",[["object-fit","fill"]]),n("object-none",[["object-fit","none"]]),n("object-scale-down",[["object-fit","scale-down"]]),n("object-top",[["object-position","top"]]),n("object-top-left",[["object-position","left top"]]),n("object-top-right",[["object-position","right top"]]),n("object-bottom",[["object-position","bottom"]]),n("object-bottom-left",[["object-position","left bottom"]]),n("object-bottom-right",[["object-position","right bottom"]]),n("object-left",[["object-position","left"]]),n("object-right",[["object-position","right"]]),n("object-center",[["object-position","center"]]),o("object",{themeKeys:["--object-position"],handle:e=>[y("object-position",e)]});for(let[e,t]of[["p","padding"],["px","padding-inline"],["py","padding-block"],["ps","padding-inline-start"],["pe","padding-inline-end"],["pt","padding-top"],["pr","padding-right"],["pb","padding-bottom"],["pl","padding-left"]])i(e,["--padding","--spacing"],(e=>[y(t,e)]));n("text-left",[["text-align","left"]]),n("text-center",[["text-align","center"]]),n("text-right",[["text-align","right"]]),n("text-justify",[["text-align","justify"]]),n("text-start",[["text-align","start"]]),n("text-end",[["text-align","end"]]),i("indent",["--text-indent","--spacing"],(e=>[y("text-indent",e)]),{supportsNegative:!0}),n("align-baseline",[["vertical-align","baseline"]]),n("align-top",[["vertical-align","top"]]),n("align-middle",[["vertical-align","middle"]]),n("align-bottom",[["vertical-align","bottom"]]),n("align-text-top",[["vertical-align","text-top"]]),n("align-text-bottom",[["vertical-align","text-bottom"]]),n("align-sub",[["vertical-align","sub"]]),n("align-super",[["vertical-align","super"]]),o("align",{themeKeys:[],handle:e=>[y("vertical-align",e)]}),t.functional("font",(t=>{if(t.value&&!t.modifier){if("arbitrary"===t.value.kind){let e=t.value.value;switch(t.value.dataType??ie(e,["number","generic-name","family-name"])){case"generic-name":case"family-name":return[y("font-family",e)];default:return[z([Ne("--tw-font-weight")]),y("--tw-font-weight",e),y("font-weight",e)]}}{let r=e.resolveWith(t.value.value,["--font"],["--font-feature-settings","--font-variation-settings"]);if(r){let[e,t={}]=r;return[y("font-family",e),y("font-feature-settings",t["--font-feature-settings"]),y("font-variation-settings",t["--font-variation-settings"])]}}{let r=e.resolve(t.value.value,["--font-weight"]);if(r)return[z([Ne("--tw-font-weight")]),y("--tw-font-weight",r),y("font-weight",r)]}}})),r("font",(()=>[{values:[],valueThemeKeys:["--font"]},{values:[],valueThemeKeys:["--font-weight"]}])),n("uppercase",[["text-transform","uppercase"]]),n("lowercase",[["text-transform","lowercase"]]),n("capitalize",[["text-transform","capitalize"]]),n("normal-case",[["text-transform","none"]]),n("italic",[["font-style","italic"]]),n("not-italic",[["font-style","normal"]]),n("underline",[["text-decoration-line","underline"]]),n("overline",[["text-decoration-line","overline"]]),n("line-through",[["text-decoration-line","line-through"]]),n("no-underline",[["text-decoration-line","none"]]),n("font-stretch-normal",[["font-stretch","normal"]]),n("font-stretch-ultra-condensed",[["font-stretch","ultra-condensed"]]),n("font-stretch-extra-condensed",[["font-stretch","extra-condensed"]]),n("font-stretch-condensed",[["font-stretch","condensed"]]),n("font-stretch-semi-condensed",[["font-stretch","semi-condensed"]]),n("font-stretch-semi-expanded",[["font-stretch","semi-expanded"]]),n("font-stretch-expanded",[["font-stretch","expanded"]]),n("font-stretch-extra-expanded",[["font-stretch","extra-expanded"]]),n("font-stretch-ultra-expanded",[["font-stretch","ultra-expanded"]]),o("font-stretch",{handleBareValue:({value:e})=>{if(!e.endsWith("%"))return null;let t=Number(e.slice(0,-1));return!ye(t)||Number.isNaN(t)||t<50||t>200?null:e},handle:e=>[y("font-stretch",e)]}),r("font-stretch",(()=>[{values:["50%","75%","90%","95%","100%","105%","110%","125%","150%","200%"]}])),a("placeholder",{themeKeys:["--background-color","--color"],handle:e=>[w("&::placeholder",[y("--tw-sort","placeholder-color"),y("color",e)])]}),n("decoration-solid",[["text-decoration-style","solid"]]),n("decoration-double",[["text-decoration-style","double"]]),n("decoration-dotted",[["text-decoration-style","dotted"]]),n("decoration-dashed",[["text-decoration-style","dashed"]]),n("decoration-wavy",[["text-decoration-style","wavy"]]),n("decoration-auto",[["text-decoration-thickness","auto"]]),n("decoration-from-font",[["text-decoration-thickness","from-font"]]),t.functional("decoration",(t=>{if(t.value){if("arbitrary"===t.value.kind){let r=t.value.value;switch(t.value.dataType??ie(r,["color","length","percentage"])){case"length":case"percentage":return t.modifier?void 0:[y("text-decoration-thickness",r)];default:return r=We(r,t.modifier,e),null===r?void 0:[y("text-decoration-color",r)]}}{let r=e.resolve(t.value.value,["--text-decoration-thickness"]);if(r)return t.modifier?void 0:[y("text-decoration-thickness",r)];if(ye(t.value.value))return t.modifier?void 0:[y("text-decoration-thickness",`${t.value.value}px`)]}{let r=Ue(t,e,["--text-decoration-color","--color"]);if(r)return[y("text-decoration-color",r)]}}})),r("decoration",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--text-decoration-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:["0","1","2"],valueThemeKeys:["--text-decoration-thickness"]}])),n("animate-none",[["animation","none"]]),o("animate",{themeKeys:["--animate"],handle:e=>[y("animation",e)]});{let a=["var(--tw-blur,)","var(--tw-brightness,)","var(--tw-contrast,)","var(--tw-grayscale,)","var(--tw-hue-rotate,)","var(--tw-invert,)","var(--tw-saturate,)","var(--tw-sepia,)","var(--tw-drop-shadow,)"].join(" "),i=["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,)"].join(" "),l=()=>z([Ne("--tw-blur"),Ne("--tw-brightness"),Ne("--tw-contrast"),Ne("--tw-grayscale"),Ne("--tw-hue-rotate"),Ne("--tw-invert"),Ne("--tw-opacity"),Ne("--tw-saturate"),Ne("--tw-sepia"),Ne("--tw-drop-shadow"),Ne("--tw-drop-shadow-color"),Ne("--tw-drop-shadow-alpha","100%",""),Ne("--tw-drop-shadow-size")]),s=()=>z([Ne("--tw-backdrop-blur"),Ne("--tw-backdrop-brightness"),Ne("--tw-backdrop-contrast"),Ne("--tw-backdrop-grayscale"),Ne("--tw-backdrop-hue-rotate"),Ne("--tw-backdrop-invert"),Ne("--tw-backdrop-opacity"),Ne("--tw-backdrop-saturate"),Ne("--tw-backdrop-sepia")]);t.functional("filter",(e=>{if(!e.modifier){if(null===e.value)return[l(),y("filter",a)];if("arbitrary"===e.value.kind)return[y("filter",e.value.value)];if("none"===e.value.value)return[y("filter","none")]}})),t.functional("backdrop-filter",(e=>{if(!e.modifier){if(null===e.value)return[s(),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)];if("arbitrary"===e.value.kind)return[y("-webkit-backdrop-filter",e.value.value),y("backdrop-filter",e.value.value)];if("none"===e.value.value)return[y("-webkit-backdrop-filter","none"),y("backdrop-filter","none")]}})),o("blur",{themeKeys:["--blur"],handle:e=>[l(),y("--tw-blur",`blur(${e})`),y("filter",a)]}),n("blur-none",[l,["--tw-blur"," "],["filter",a]]),o("backdrop-blur",{themeKeys:["--backdrop-blur","--blur"],handle:e=>[s(),y("--tw-backdrop-blur",`blur(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),n("backdrop-blur-none",[s,["--tw-backdrop-blur"," "],["-webkit-backdrop-filter",i],["backdrop-filter",i]]),o("brightness",{themeKeys:["--brightness"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,handle:e=>[l(),y("--tw-brightness",`brightness(${e})`),y("filter",a)]}),o("backdrop-brightness",{themeKeys:["--backdrop-brightness","--brightness"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,handle:e=>[s(),y("--tw-backdrop-brightness",`brightness(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),r("brightness",(()=>[{values:["0","50","75","90","95","100","105","110","125","150","200"],valueThemeKeys:["--brightness"]}])),r("backdrop-brightness",(()=>[{values:["0","50","75","90","95","100","105","110","125","150","200"],valueThemeKeys:["--backdrop-brightness","--brightness"]}])),o("contrast",{themeKeys:["--contrast"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,handle:e=>[l(),y("--tw-contrast",`contrast(${e})`),y("filter",a)]}),o("backdrop-contrast",{themeKeys:["--backdrop-contrast","--contrast"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,handle:e=>[s(),y("--tw-backdrop-contrast",`contrast(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),r("contrast",(()=>[{values:["0","50","75","100","125","150","200"],valueThemeKeys:["--contrast"]}])),r("backdrop-contrast",(()=>[{values:["0","50","75","100","125","150","200"],valueThemeKeys:["--backdrop-contrast","--contrast"]}])),o("grayscale",{themeKeys:["--grayscale"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,defaultValue:"100%",handle:e=>[l(),y("--tw-grayscale",`grayscale(${e})`),y("filter",a)]}),o("backdrop-grayscale",{themeKeys:["--backdrop-grayscale","--grayscale"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,defaultValue:"100%",handle:e=>[s(),y("--tw-backdrop-grayscale",`grayscale(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),r("grayscale",(()=>[{values:["0","25","50","75","100"],valueThemeKeys:["--grayscale"],hasDefaultValue:!0}])),r("backdrop-grayscale",(()=>[{values:["0","25","50","75","100"],valueThemeKeys:["--backdrop-grayscale","--grayscale"],hasDefaultValue:!0}])),o("hue-rotate",{supportsNegative:!0,themeKeys:["--hue-rotate"],handleBareValue:({value:e})=>ye(e)?`${e}deg`:null,handle:e=>[l(),y("--tw-hue-rotate",`hue-rotate(${e})`),y("filter",a)]}),o("backdrop-hue-rotate",{supportsNegative:!0,themeKeys:["--backdrop-hue-rotate","--hue-rotate"],handleBareValue:({value:e})=>ye(e)?`${e}deg`:null,handle:e=>[s(),y("--tw-backdrop-hue-rotate",`hue-rotate(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),r("hue-rotate",(()=>[{values:["0","15","30","60","90","180"],valueThemeKeys:["--hue-rotate"]}])),r("backdrop-hue-rotate",(()=>[{values:["0","15","30","60","90","180"],valueThemeKeys:["--backdrop-hue-rotate","--hue-rotate"]}])),o("invert",{themeKeys:["--invert"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,defaultValue:"100%",handle:e=>[l(),y("--tw-invert",`invert(${e})`),y("filter",a)]}),o("backdrop-invert",{themeKeys:["--backdrop-invert","--invert"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,defaultValue:"100%",handle:e=>[s(),y("--tw-backdrop-invert",`invert(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),r("invert",(()=>[{values:["0","25","50","75","100"],valueThemeKeys:["--invert"],hasDefaultValue:!0}])),r("backdrop-invert",(()=>[{values:["0","25","50","75","100"],valueThemeKeys:["--backdrop-invert","--invert"],hasDefaultValue:!0}])),o("saturate",{themeKeys:["--saturate"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,handle:e=>[l(),y("--tw-saturate",`saturate(${e})`),y("filter",a)]}),o("backdrop-saturate",{themeKeys:["--backdrop-saturate","--saturate"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,handle:e=>[s(),y("--tw-backdrop-saturate",`saturate(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),r("saturate",(()=>[{values:["0","50","100","150","200"],valueThemeKeys:["--saturate"]}])),r("backdrop-saturate",(()=>[{values:["0","50","100","150","200"],valueThemeKeys:["--backdrop-saturate","--saturate"]}])),o("sepia",{themeKeys:["--sepia"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,defaultValue:"100%",handle:e=>[l(),y("--tw-sepia",`sepia(${e})`),y("filter",a)]}),o("backdrop-sepia",{themeKeys:["--backdrop-sepia","--sepia"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,defaultValue:"100%",handle:e=>[s(),y("--tw-backdrop-sepia",`sepia(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),r("sepia",(()=>[{values:["0","50","100"],valueThemeKeys:["--sepia"],hasDefaultValue:!0}])),r("backdrop-sepia",(()=>[{values:["0","50","100"],valueThemeKeys:["--backdrop-sepia","--sepia"],hasDefaultValue:!0}])),n("drop-shadow-none",[l,["--tw-drop-shadow"," "],["filter",a]]),t.functional("drop-shadow",(t=>{let r;if(t.modifier&&("arbitrary"===t.modifier.kind?r=t.modifier.value:ye(t.modifier.value)&&(r=`${t.modifier.value}%`)),!t.value){let t=e.get(["--drop-shadow"]),n=e.resolve(null,["--drop-shadow"]);return null===t||null===n?void 0:[l(),y("--tw-drop-shadow-alpha",r),...Le("--tw-drop-shadow-size",t,r,(e=>`var(--tw-drop-shadow-color, ${e})`)),y("--tw-drop-shadow",R(n,",").map((e=>`drop-shadow(${e})`)).join(" ")),y("filter",a)]}if("arbitrary"===t.value.kind){let n=t.value.value;return"color"===(t.value.dataType??ie(n,["color"]))?(n=We(n,t.modifier,e),null===n?void 0:[l(),y("--tw-drop-shadow-color",Oe(n,"var(--tw-drop-shadow-alpha)")),y("--tw-drop-shadow","var(--tw-drop-shadow-size)")]):t.modifier&&!r?void 0:[l(),y("--tw-drop-shadow-alpha",r),...Le("--tw-drop-shadow-size",n,r,(e=>`var(--tw-drop-shadow-color, ${e})`)),y("--tw-drop-shadow","var(--tw-drop-shadow-size)"),y("filter",a)]}{let n=e.get([`--drop-shadow-${t.value.value}`]),o=e.resolve(t.value.value,["--drop-shadow"]);if(n&&o)return t.modifier&&!r?void 0:r?[l(),y("--tw-drop-shadow-alpha",r),...Le("--tw-drop-shadow-size",n,r,(e=>`var(--tw-drop-shadow-color, ${e})`)),y("--tw-drop-shadow","var(--tw-drop-shadow-size)"),y("filter",a)]:[l(),y("--tw-drop-shadow-alpha",r),...Le("--tw-drop-shadow-size",n,r,(e=>`var(--tw-drop-shadow-color, ${e})`)),y("--tw-drop-shadow",R(o,",").map((e=>`drop-shadow(${e})`)).join(" ")),y("filter",a)]}{let r=Ue(t,e,["--drop-shadow-color","--color"]);if(r)return"inherit"===r?[l(),y("--tw-drop-shadow-color","inherit"),y("--tw-drop-shadow","var(--tw-drop-shadow-size)")]:[l(),y("--tw-drop-shadow-color",Oe(r,"var(--tw-drop-shadow-alpha)")),y("--tw-drop-shadow","var(--tw-drop-shadow-size)")]}})),r("drop-shadow",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--drop-shadow-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{valueThemeKeys:["--drop-shadow"]}])),o("backdrop-opacity",{themeKeys:["--backdrop-opacity","--opacity"],handleBareValue:({value:e})=>ze(e)?`${e}%`:null,handle:e=>[s(),y("--tw-backdrop-opacity",`opacity(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),r("backdrop-opacity",(()=>[{values:Array.from({length:21},((e,t)=>""+5*t)),valueThemeKeys:["--backdrop-opacity","--opacity"]}]))}{let a=`var(--tw-ease, ${e.resolve(null,["--default-transition-timing-function"])??"ease"})`,i=`var(--tw-duration, ${e.resolve(null,["--default-transition-duration"])??"0s"})`;n("transition-none",[["transition-property","none"]]),n("transition-all",[["transition-property","all"],["transition-timing-function",a],["transition-duration",i]]),n("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",a],["transition-duration",i]]),n("transition-opacity",[["transition-property","opacity"],["transition-timing-function",a],["transition-duration",i]]),n("transition-shadow",[["transition-property","box-shadow"],["transition-timing-function",a],["transition-duration",i]]),n("transition-transform",[["transition-property","transform, translate, scale, rotate"],["transition-timing-function",a],["transition-duration",i]]),o("transition",{defaultValue:"color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, visibility, content-visibility, overlay, pointer-events",themeKeys:["--transition-property"],handle:e=>[y("transition-property",e),y("transition-timing-function",a),y("transition-duration",i)]}),n("transition-discrete",[["transition-behavior","allow-discrete"]]),n("transition-normal",[["transition-behavior","normal"]]),o("delay",{handleBareValue:({value:e})=>ye(e)?`${e}ms`:null,themeKeys:["--transition-delay"],handle:e=>[y("transition-delay",e)]});{let r=()=>z([Ne("--tw-duration")]);n("duration-initial",[r,["--tw-duration","initial"]]),t.functional("duration",(t=>{if(t.modifier||!t.value)return;let n=null;return"arbitrary"===t.value.kind?n=t.value.value:(n=e.resolve(t.value.fraction??t.value.value,["--transition-duration"]),null===n&&ye(t.value.value)&&(n=`${t.value.value}ms`)),null!==n?[r(),y("--tw-duration",n),y("transition-duration",n)]:void 0}))}r("delay",(()=>[{values:["75","100","150","200","300","500","700","1000"],valueThemeKeys:["--transition-delay"]}])),r("duration",(()=>[{values:["75","100","150","200","300","500","700","1000"],valueThemeKeys:["--transition-duration"]}]))}{let e=()=>z([Ne("--tw-ease")]);n("ease-initial",[e,["--tw-ease","initial"]]),n("ease-linear",[e,["--tw-ease","linear"],["transition-timing-function","linear"]]),o("ease",{themeKeys:["--ease"],handle:t=>[e(),y("--tw-ease",t),y("transition-timing-function",t)]})}n("will-change-auto",[["will-change","auto"]]),n("will-change-scroll",[["will-change","scroll-position"]]),n("will-change-contents",[["will-change","contents"]]),n("will-change-transform",[["will-change","transform"]]),o("will-change",{themeKeys:[],handle:e=>[y("will-change",e)]}),n("content-none",[["--tw-content","none"],["content","none"]]),o("content",{themeKeys:[],handle:e=>[z([Ne("--tw-content",'""')]),y("--tw-content",e),y("content","var(--tw-content)")]});{let e="var(--tw-contain-size,) var(--tw-contain-layout,) var(--tw-contain-paint,) var(--tw-contain-style,)",t=()=>z([Ne("--tw-contain-size"),Ne("--tw-contain-layout"),Ne("--tw-contain-paint"),Ne("--tw-contain-style")]);n("contain-none",[["contain","none"]]),n("contain-content",[["contain","content"]]),n("contain-strict",[["contain","strict"]]),n("contain-size",[t,["--tw-contain-size","size"],["contain",e]]),n("contain-inline-size",[t,["--tw-contain-size","inline-size"],["contain",e]]),n("contain-layout",[t,["--tw-contain-layout","layout"],["contain",e]]),n("contain-paint",[t,["--tw-contain-paint","paint"],["contain",e]]),n("contain-style",[t,["--tw-contain-style","style"],["contain",e]]),o("contain",{themeKeys:[],handle:e=>[y("contain",e)]})}n("forced-color-adjust-none",[["forced-color-adjust","none"]]),n("forced-color-adjust-auto",[["forced-color-adjust","auto"]]),n("leading-none",[()=>z([Ne("--tw-leading")]),["--tw-leading","1"],["line-height","1"]]),i("leading",["--leading","--spacing"],(e=>[z([Ne("--tw-leading")]),y("--tw-leading",e),y("line-height",e)])),o("tracking",{supportsNegative:!0,themeKeys:["--tracking"],handle:e=>[z([Ne("--tw-tracking")]),y("--tw-tracking",e),y("letter-spacing",e)]}),n("antialiased",[["-webkit-font-smoothing","antialiased"],["-moz-osx-font-smoothing","grayscale"]]),n("subpixel-antialiased",[["-webkit-font-smoothing","auto"],["-moz-osx-font-smoothing","auto"]]);{let e="var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)",t=()=>z([Ne("--tw-ordinal"),Ne("--tw-slashed-zero"),Ne("--tw-numeric-figure"),Ne("--tw-numeric-spacing"),Ne("--tw-numeric-fraction")]);n("normal-nums",[["font-variant-numeric","normal"]]),n("ordinal",[t,["--tw-ordinal","ordinal"],["font-variant-numeric",e]]),n("slashed-zero",[t,["--tw-slashed-zero","slashed-zero"],["font-variant-numeric",e]]),n("lining-nums",[t,["--tw-numeric-figure","lining-nums"],["font-variant-numeric",e]]),n("oldstyle-nums",[t,["--tw-numeric-figure","oldstyle-nums"],["font-variant-numeric",e]]),n("proportional-nums",[t,["--tw-numeric-spacing","proportional-nums"],["font-variant-numeric",e]]),n("tabular-nums",[t,["--tw-numeric-spacing","tabular-nums"],["font-variant-numeric",e]]),n("diagonal-fractions",[t,["--tw-numeric-fraction","diagonal-fractions"],["font-variant-numeric",e]]),n("stacked-fractions",[t,["--tw-numeric-fraction","stacked-fractions"],["font-variant-numeric",e]])}{let a=()=>z([Ne("--tw-outline-style","solid")]);t.static("outline-hidden",(()=>[y("--tw-outline-style","none"),y("outline-style","none"),k("@media","(forced-colors: active)",[y("outline","2px solid transparent"),y("outline-offset","2px")])])),n("outline-none",[["--tw-outline-style","none"],["outline-style","none"]]),n("outline-solid",[["--tw-outline-style","solid"],["outline-style","solid"]]),n("outline-dashed",[["--tw-outline-style","dashed"],["outline-style","dashed"]]),n("outline-dotted",[["--tw-outline-style","dotted"],["outline-style","dotted"]]),n("outline-double",[["--tw-outline-style","double"],["outline-style","double"]]),t.functional("outline",(t=>{if(null===t.value){if(t.modifier)return;let r=e.get(["--default-outline-width"])??"1px";return[a(),y("outline-style","var(--tw-outline-style)"),y("outline-width",r)]}if("arbitrary"===t.value.kind){let r=t.value.value;switch(t.value.dataType??ie(r,["color","length","number","percentage"])){case"length":case"number":case"percentage":return t.modifier?void 0:[a(),y("outline-style","var(--tw-outline-style)"),y("outline-width",r)];default:return r=We(r,t.modifier,e),null===r?void 0:[y("outline-color",r)]}}{let r=Ue(t,e,["--outline-color","--color"]);if(r)return[y("outline-color",r)]}{if(t.modifier)return;let r=e.resolve(t.value.value,["--outline-width"]);if(r)return[a(),y("outline-style","var(--tw-outline-style)"),y("outline-width",r)];if(ye(t.value.value))return[a(),y("outline-style","var(--tw-outline-style)"),y("outline-width",`${t.value.value}px`)]}})),r("outline",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--outline-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t)),hasDefaultValue:!0},{values:["0","1","2","4","8"],valueThemeKeys:["--outline-width"]}])),o("outline-offset",{supportsNegative:!0,themeKeys:["--outline-offset"],handleBareValue:({value:e})=>ye(e)?`${e}px`:null,handle:e=>[y("outline-offset",e)]}),r("outline-offset",(()=>[{supportsNegative:!0,values:["0","1","2","4","8"],valueThemeKeys:["--outline-offset"]}]))}o("opacity",{themeKeys:["--opacity"],handleBareValue:({value:e})=>ze(e)?`${e}%`:null,handle:e=>[y("opacity",e)]}),r("opacity",(()=>[{values:Array.from({length:21},((e,t)=>""+5*t)),valueThemeKeys:["--opacity"]}])),n("underline-offset-auto",[["text-underline-offset","auto"]]),o("underline-offset",{supportsNegative:!0,themeKeys:["--text-underline-offset"],handleBareValue:({value:e})=>ye(e)?`${e}px`:null,handle:e=>[y("text-underline-offset",e)]}),r("underline-offset",(()=>[{supportsNegative:!0,values:["0","1","2","4","8"],valueThemeKeys:["--text-underline-offset"]}])),t.functional("text",(t=>{if(t.value){if("arbitrary"===t.value.kind){let r=t.value.value;switch(t.value.dataType??ie(r,["color","length","percentage","absolute-size","relative-size"])){case"size":case"length":case"percentage":case"absolute-size":case"relative-size":if(t.modifier){let n="arbitrary"===t.modifier.kind?t.modifier.value:e.resolve(t.modifier.value,["--leading"]);if(!n&&$e(t.modifier.value)){let r=e.resolve(null,["--spacing"]);if(!r)return null;n=`calc(${r} * ${t.modifier.value})`}return!n&&"none"===t.modifier.value&&(n="1"),n?[y("font-size",r),y("line-height",n)]:null}return[y("font-size",r)];default:return r=We(r,t.modifier,e),null===r?void 0:[y("color",r)]}}{let r=Ue(t,e,["--text-color","--color"]);if(r)return[y("color",r)]}{let r=e.resolveWith(t.value.value,["--text"],["--line-height","--letter-spacing","--font-weight"]);if(r){let[n,o={}]=Array.isArray(r)?r:[r];if(t.modifier){let r="arbitrary"===t.modifier.kind?t.modifier.value:e.resolve(t.modifier.value,["--leading"]);if(!r&&$e(t.modifier.value)){let n=e.resolve(null,["--spacing"]);if(!n)return null;r=`calc(${n} * ${t.modifier.value})`}if(!r&&"none"===t.modifier.value&&(r="1"),!r)return null;let o=[y("font-size",n)];return r&&o.push(y("line-height",r)),o}return"string"==typeof o?[y("font-size",n),y("line-height",o)]:[y("font-size",n),y("line-height",o["--line-height"]?`var(--tw-leading, ${o["--line-height"]})`:void 0),y("letter-spacing",o["--letter-spacing"]?`var(--tw-tracking, ${o["--letter-spacing"]})`:void 0),y("font-weight",o["--font-weight"]?`var(--tw-font-weight, ${o["--font-weight"]})`:void 0)]}}}})),r("text",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--text-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:[],valueThemeKeys:["--text"],modifiers:[],modifierThemeKeys:["--leading"]}]));let T=()=>z([Ne("--tw-text-shadow-color"),Ne("--tw-text-shadow-alpha","100%","")]);n("text-shadow-initial",[T,["--tw-text-shadow-color","initial"]]),t.functional("text-shadow",(t=>{let r;if(t.modifier&&("arbitrary"===t.modifier.kind?r=t.modifier.value:ye(t.modifier.value)&&(r=`${t.modifier.value}%`)),!t.value){let t=e.get(["--text-shadow"]);return null===t?void 0:[T(),y("--tw-text-shadow-alpha",r),...Be("text-shadow",t,r,(e=>`var(--tw-text-shadow-color, ${e})`))]}if("arbitrary"===t.value.kind){let n=t.value.value;return"color"===(t.value.dataType??ie(n,["color"]))?(n=We(n,t.modifier,e),null===n?void 0:[T(),y("--tw-text-shadow-color",Oe(n,"var(--tw-text-shadow-alpha)"))]):[T(),y("--tw-text-shadow-alpha",r),...Be("text-shadow",n,r,(e=>`var(--tw-text-shadow-color, ${e})`))]}switch(t.value.value){case"none":return t.modifier?void 0:[T(),y("text-shadow","none")];case"inherit":return t.modifier?void 0:[T(),y("--tw-text-shadow-color","inherit")]}{let n=e.get([`--text-shadow-${t.value.value}`]);if(n)return[T(),y("--tw-text-shadow-alpha",r),...Be("text-shadow",n,r,(e=>`var(--tw-text-shadow-color, ${e})`))]}{let r=Ue(t,e,["--text-shadow-color","--color"]);if(r)return[T(),y("--tw-text-shadow-color",Oe(r,"var(--tw-text-shadow-alpha)"))]}})),r("text-shadow",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--text-shadow-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:["none"]},{valueThemeKeys:["--text-shadow"],modifiers:Array.from({length:21},((e,t)=>""+5*t)),hasDefaultValue:null!==e.get(["--text-shadow"])}]));{let o=function(e){return`var(--tw-ring-inset,) 0 0 0 calc(${e} + var(--tw-ring-offset-width)) var(--tw-ring-color, ${c})`},a=function(e){return`inset 0 0 0 ${e} var(--tw-inset-ring-color, currentcolor)`},i=["var(--tw-inset-shadow)","var(--tw-inset-ring-shadow)","var(--tw-ring-offset-shadow)","var(--tw-ring-shadow)","var(--tw-shadow)"].join(", "),l="0 0 #0000",s=()=>z([Ne("--tw-shadow",l),Ne("--tw-shadow-color"),Ne("--tw-shadow-alpha","100%",""),Ne("--tw-inset-shadow",l),Ne("--tw-inset-shadow-color"),Ne("--tw-inset-shadow-alpha","100%",""),Ne("--tw-ring-color"),Ne("--tw-ring-shadow",l),Ne("--tw-inset-ring-color"),Ne("--tw-inset-ring-shadow",l),Ne("--tw-ring-inset"),Ne("--tw-ring-offset-width","0px",""),Ne("--tw-ring-offset-color","#fff"),Ne("--tw-ring-offset-shadow",l)]);n("shadow-initial",[s,["--tw-shadow-color","initial"]]),t.functional("shadow",(t=>{let r;if(t.modifier&&("arbitrary"===t.modifier.kind?r=t.modifier.value:ye(t.modifier.value)&&(r=`${t.modifier.value}%`)),!t.value){let t=e.get(["--shadow"]);return null===t?void 0:[s(),y("--tw-shadow-alpha",r),...Be("--tw-shadow",t,r,(e=>`var(--tw-shadow-color, ${e})`)),y("box-shadow",i)]}if("arbitrary"===t.value.kind){let n=t.value.value;return"color"===(t.value.dataType??ie(n,["color"]))?(n=We(n,t.modifier,e),null===n?void 0:[s(),y("--tw-shadow-color",Oe(n,"var(--tw-shadow-alpha)"))]):[s(),y("--tw-shadow-alpha",r),...Be("--tw-shadow",n,r,(e=>`var(--tw-shadow-color, ${e})`)),y("box-shadow",i)]}switch(t.value.value){case"none":return t.modifier?void 0:[s(),y("--tw-shadow",l),y("box-shadow",i)];case"inherit":return t.modifier?void 0:[s(),y("--tw-shadow-color","inherit")]}{let n=e.get([`--shadow-${t.value.value}`]);if(n)return[s(),y("--tw-shadow-alpha",r),...Be("--tw-shadow",n,r,(e=>`var(--tw-shadow-color, ${e})`)),y("box-shadow",i)]}{let r=Ue(t,e,["--box-shadow-color","--color"]);if(r)return[s(),y("--tw-shadow-color",Oe(r,"var(--tw-shadow-alpha)"))]}})),r("shadow",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--box-shadow-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:["none"]},{valueThemeKeys:["--shadow"],modifiers:Array.from({length:21},((e,t)=>""+5*t)),hasDefaultValue:null!==e.get(["--shadow"])}])),n("inset-shadow-initial",[s,["--tw-inset-shadow-color","initial"]]),t.functional("inset-shadow",(t=>{let r;if(t.modifier&&("arbitrary"===t.modifier.kind?r=t.modifier.value:ye(t.modifier.value)&&(r=`${t.modifier.value}%`)),!t.value){let t=e.get(["--inset-shadow"]);return null===t?void 0:[s(),y("--tw-inset-shadow-alpha",r),...Be("--tw-inset-shadow",t,r,(e=>`var(--tw-inset-shadow-color, ${e})`)),y("box-shadow",i)]}if("arbitrary"===t.value.kind){let n=t.value.value;return"color"===(t.value.dataType??ie(n,["color"]))?(n=We(n,t.modifier,e),null===n?void 0:[s(),y("--tw-inset-shadow-color",Oe(n,"var(--tw-inset-shadow-alpha)"))]):[s(),y("--tw-inset-shadow-alpha",r),...Be("--tw-inset-shadow",n,r,(e=>`var(--tw-inset-shadow-color, ${e})`),"inset "),y("box-shadow",i)]}switch(t.value.value){case"none":return t.modifier?void 0:[s(),y("--tw-inset-shadow",l),y("box-shadow",i)];case"inherit":return t.modifier?void 0:[s(),y("--tw-inset-shadow-color","inherit")]}{let n=e.get([`--inset-shadow-${t.value.value}`]);if(n)return[s(),y("--tw-inset-shadow-alpha",r),...Be("--tw-inset-shadow",n,r,(e=>`var(--tw-inset-shadow-color, ${e})`)),y("box-shadow",i)]}{let r=Ue(t,e,["--box-shadow-color","--color"]);if(r)return[s(),y("--tw-inset-shadow-color",Oe(r,"var(--tw-inset-shadow-alpha)"))]}})),r("inset-shadow",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--box-shadow-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:["none"]},{valueThemeKeys:["--inset-shadow"],modifiers:Array.from({length:21},((e,t)=>""+5*t)),hasDefaultValue:null!==e.get(["--inset-shadow"])}])),n("ring-inset",[s,["--tw-ring-inset","inset"]]);let c=e.get(["--default-ring-color"])??"currentcolor";t.functional("ring",(t=>{if(!t.value){if(t.modifier)return;let r=e.get(["--default-ring-width"])??"1px";return[s(),y("--tw-ring-shadow",o(r)),y("box-shadow",i)]}if("arbitrary"===t.value.kind){let r=t.value.value;return"length"===(t.value.dataType??ie(r,["color","length"]))?t.modifier?void 0:[s(),y("--tw-ring-shadow",o(r)),y("box-shadow",i)]:(r=We(r,t.modifier,e),null===r?void 0:[y("--tw-ring-color",r)])}{let r=Ue(t,e,["--ring-color","--color"]);if(r)return[y("--tw-ring-color",r)]}{if(t.modifier)return;let r=e.resolve(t.value.value,["--ring-width"]);if(null===r&&ye(t.value.value)&&(r=`${t.value.value}px`),r)return[s(),y("--tw-ring-shadow",o(r)),y("box-shadow",i)]}})),r("ring",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--ring-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:["0","1","2","4","8"],valueThemeKeys:["--ring-width"],hasDefaultValue:!0}])),t.functional("inset-ring",(t=>{if(!t.value)return t.modifier?void 0:[s(),y("--tw-inset-ring-shadow",a("1px")),y("box-shadow",i)];if("arbitrary"===t.value.kind){let r=t.value.value;return"length"===(t.value.dataType??ie(r,["color","length"]))?t.modifier?void 0:[s(),y("--tw-inset-ring-shadow",a(r)),y("box-shadow",i)]:(r=We(r,t.modifier,e),null===r?void 0:[y("--tw-inset-ring-color",r)])}{let r=Ue(t,e,["--ring-color","--color"]);if(r)return[y("--tw-inset-ring-color",r)]}{if(t.modifier)return;let r=e.resolve(t.value.value,["--ring-width"]);if(null===r&&ye(t.value.value)&&(r=`${t.value.value}px`),r)return[s(),y("--tw-inset-ring-shadow",a(r)),y("box-shadow",i)]}})),r("inset-ring",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--ring-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:["0","1","2","4","8"],valueThemeKeys:["--ring-width"],hasDefaultValue:!0}]));let u="var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)";t.functional("ring-offset",(t=>{if(t.value){if("arbitrary"===t.value.kind){let r=t.value.value;return"length"===(t.value.dataType??ie(r,["color","length"]))?t.modifier?void 0:[y("--tw-ring-offset-width",r),y("--tw-ring-offset-shadow",u)]:(r=We(r,t.modifier,e),null===r?void 0:[y("--tw-ring-offset-color",r)])}{let r=e.resolve(t.value.value,["--ring-offset-width"]);if(r)return t.modifier?void 0:[y("--tw-ring-offset-width",r),y("--tw-ring-offset-shadow",u)];if(ye(t.value.value))return t.modifier?void 0:[y("--tw-ring-offset-width",`${t.value.value}px`),y("--tw-ring-offset-shadow",u)]}{let r=Ue(t,e,["--ring-offset-color","--color"]);if(r)return[y("--tw-ring-offset-color",r)]}}}))}return r("ring-offset",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--ring-offset-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:["0","1","2","4","8"],valueThemeKeys:["--ring-offset-width"]}])),t.functional("@container",(e=>{let t=null;if(null===e.value?t="inline-size":"arbitrary"===e.value.kind?t=e.value.value:"named"===e.value.kind&&"normal"===e.value.value&&(t="normal"),null!==t)return e.modifier?[y("container-type",t),y("container-name",e.modifier.value)]:[y("container-type",t)]})),r("@container",(()=>[{values:["normal"],valueThemeKeys:[],hasDefaultValue:!0}])),t}(e),r=function(e){let t=new Je;function r(e,r,{compounds:n}={}){n=n??Xe(r),t.static(e,(e=>{e.nodes=r.map((t=>b(t,e.nodes)))}),{compounds:n})}function n(e,t){return t.map((t=>{let r=R(t=t.trim()," ");return"not"===r[0]?r.slice(1).join(" "):"@container"===e?"("===r[0][0]?`not ${t}`:"not"===r[1]?`${r[0]} ${r.slice(2).join(" ")}`:`${r[0]} not ${r.slice(1).join(" ")}`:`not ${t}`}))}r("*",[":is(& > *)"],{compounds:0}),r("**",[":is(& *)"],{compounds:0});let o=["@media","@supports","@container"];function a(e){for(let t of o){if(t!==e.name)continue;let r=R(e.params,",");return r.length>1?null:(r=n(e.name,r),k(e.name,r.join(", ")))}return null}function i(e){return e.includes("::")?null:`&:not(${R(e,",").map((e=>e.replaceAll("&","*"))).join(", ")})`}t.compound("not",3,((e,t)=>{if("arbitrary"===t.variant.kind&&t.variant.relative||t.modifier)return null;let r=!1;return A([e],((t,{path:n})=>{if("rule"!==t.kind&&"at-rule"!==t.kind)return 0;if(t.nodes.length>0)return 0;let o=[],l=[];for(let e of n)"at-rule"===e.kind?o.push(e):"rule"===e.kind&&l.push(e);if(o.length>1)return 2;if(l.length>1)return 2;let s=[];for(let e of l){let t=i(e.selector);if(!t)return r=!1,2;s.push(w(t,[]))}for(let e of o){let t=a(e);if(!t)return r=!1,2;s.push(t)}return Object.assign(e,w("&",s)),r=!0,1})),"rule"===e.kind&&"&"===e.selector&&1===e.nodes.length&&Object.assign(e,e.nodes[0]),r?void 0:null})),t.suggest("not",(()=>Array.from(t.keys()).filter((e=>t.compoundsWith("not",e))))),t.compound("group",2,((t,r)=>{if("arbitrary"===r.variant.kind&&r.variant.relative)return null;let n=r.modifier?`:where(.${e.prefix?`${e.prefix}\\:`:""}group\\/${r.modifier.value})`:`:where(.${e.prefix?`${e.prefix}\\:`:""}group)`,o=!1;return A([t],((e,{path:t})=>{if("rule"!==e.kind)return 0;for(let e of t.slice(0,-1))if("rule"===e.kind)return o=!1,2;let r=e.selector.replaceAll("&",n);R(r,",").length>1&&(r=`:is(${r})`),e.selector=`&:is(${r} *)`,o=!0})),o?void 0:null})),t.suggest("group",(()=>Array.from(t.keys()).filter((e=>t.compoundsWith("group",e))))),t.compound("peer",2,((t,r)=>{if("arbitrary"===r.variant.kind&&r.variant.relative)return null;let n=r.modifier?`:where(.${e.prefix?`${e.prefix}\\:`:""}peer\\/${r.modifier.value})`:`:where(.${e.prefix?`${e.prefix}\\:`:""}peer)`,o=!1;return A([t],((e,{path:t})=>{if("rule"!==e.kind)return 0;for(let e of t.slice(0,-1))if("rule"===e.kind)return o=!1,2;let r=e.selector.replaceAll("&",n);R(r,",").length>1&&(r=`:is(${r})`),e.selector=`&:is(${r} ~ *)`,o=!0})),o?void 0:null})),t.suggest("peer",(()=>Array.from(t.keys()).filter((e=>t.compoundsWith("peer",e))))),r("first-letter",["&::first-letter"]),r("first-line",["&::first-line"]),r("marker",["& *::marker","&::marker","& *::-webkit-details-marker","&::-webkit-details-marker"]),r("selection",["& *::selection","&::selection"]),r("file",["&::file-selector-button"]),r("placeholder",["&::placeholder"]),r("backdrop",["&::backdrop"]),r("details-content",["&::details-content"]);{let e=function(){return z([k("@property","--tw-content",[y("syntax",'"*"'),y("initial-value",'""'),y("inherits","false")])])};t.static("before",(t=>{t.nodes=[w("&::before",[e(),y("content","var(--tw-content)"),...t.nodes])]}),{compounds:0}),t.static("after",(t=>{t.nodes=[w("&::after",[e(),y("content","var(--tw-content)"),...t.nodes])]}),{compounds:0})}r("first",["&:first-child"]),r("last",["&:last-child"]),r("only",["&:only-child"]),r("odd",["&:nth-child(odd)"]),r("even",["&:nth-child(even)"]),r("first-of-type",["&:first-of-type"]),r("last-of-type",["&:last-of-type"]),r("only-of-type",["&:only-of-type"]),r("visited",["&:visited"]),r("target",["&:target"]),r("open",["&:is([open], :popover-open, :open)"]),r("default",["&:default"]),r("checked",["&:checked"]),r("indeterminate",["&:indeterminate"]),r("placeholder-shown",["&:placeholder-shown"]),r("autofill",["&:autofill"]),r("optional",["&:optional"]),r("required",["&:required"]),r("valid",["&:valid"]),r("invalid",["&:invalid"]),r("user-valid",["&:user-valid"]),r("user-invalid",["&:user-invalid"]),r("in-range",["&:in-range"]),r("out-of-range",["&:out-of-range"]),r("read-only",["&:read-only"]),r("empty",["&:empty"]),r("focus-within",["&:focus-within"]),t.static("hover",(e=>{e.nodes=[w("&:hover",[k("@media","(hover: hover)",e.nodes)])]})),r("focus",["&:focus"]),r("focus-visible",["&:focus-visible"]),r("active",["&:active"]),r("enabled",["&:enabled"]),r("disabled",["&:disabled"]),r("inert",["&:is([inert], [inert] *)"]),t.compound("in",2,((e,t)=>{if(t.modifier)return null;let r=!1;return A([e],((e,{path:t})=>{if("rule"!==e.kind)return 0;for(let e of t.slice(0,-1))if("rule"===e.kind)return r=!1,2;e.selector=`:where(${e.selector.replaceAll("&","*")}) &`,r=!0})),r?void 0:null})),t.suggest("in",(()=>Array.from(t.keys()).filter((e=>t.compoundsWith("in",e))))),t.compound("has",2,((e,t)=>{if(t.modifier)return null;let r=!1;return A([e],((e,{path:t})=>{if("rule"!==e.kind)return 0;for(let e of t.slice(0,-1))if("rule"===e.kind)return r=!1,2;e.selector=`&:has(${e.selector.replaceAll("&","*")})`,r=!0})),r?void 0:null})),t.suggest("has",(()=>Array.from(t.keys()).filter((e=>t.compoundsWith("has",e))))),t.functional("aria",((e,t)=>{if(!t.value||t.modifier)return null;"arbitrary"===t.value.kind?e.nodes=[w(`&[aria-${Qe(t.value.value)}]`,e.nodes)]:e.nodes=[w(`&[aria-${t.value.value}="true"]`,e.nodes)]})),t.suggest("aria",(()=>["busy","checked","disabled","expanded","hidden","pressed","readonly","required","selected"])),t.functional("data",((e,t)=>{if(!t.value||t.modifier)return null;e.nodes=[w(`&[data-${Qe(t.value.value)}]`,e.nodes)]})),t.functional("nth",((e,t)=>{if(!t.value||t.modifier||"named"===t.value.kind&&!ye(t.value.value))return null;e.nodes=[w(`&:nth-child(${t.value.value})`,e.nodes)]})),t.functional("nth-last",((e,t)=>{if(!t.value||t.modifier||"named"===t.value.kind&&!ye(t.value.value))return null;e.nodes=[w(`&:nth-last-child(${t.value.value})`,e.nodes)]})),t.functional("nth-of-type",((e,t)=>{if(!t.value||t.modifier||"named"===t.value.kind&&!ye(t.value.value))return null;e.nodes=[w(`&:nth-of-type(${t.value.value})`,e.nodes)]})),t.functional("nth-last-of-type",((e,t)=>{if(!t.value||t.modifier||"named"===t.value.kind&&!ye(t.value.value))return null;e.nodes=[w(`&:nth-last-of-type(${t.value.value})`,e.nodes)]})),t.functional("supports",((e,t)=>{if(!t.value||t.modifier)return null;let r=t.value.value;if(null===r)return null;if(/^[\w-]*\s*\(/.test(r)){let t=r.replace(/\b(and|or|not)\b/g," $1 ");e.nodes=[k("@supports",t,e.nodes)]}else r.includes(":")||(r=`${r}: var(--tw)`),("("!==r[0]||")"!==r[r.length-1])&&(r=`(${r})`),e.nodes=[k("@supports",r,e.nodes)]}),{compounds:1}),r("motion-safe",["@media (prefers-reduced-motion: no-preference)"]),r("motion-reduce",["@media (prefers-reduced-motion: reduce)"]),r("contrast-more",["@media (prefers-contrast: more)"]),r("contrast-less",["@media (prefers-contrast: less)"]);{let r=function(e,t,r,n){if(e===t)return 0;let o=n.get(e);if(null===o)return"asc"===r?-1:1;let a=n.get(t);return null===a?"asc"===r?1:-1:re(o,a,r)};{let n=e.namespace("--breakpoint"),o=new c((t=>{switch(t.kind){case"static":return e.resolveValue(t.root,["--breakpoint"])??null;case"functional":{if(!t.value||t.modifier)return null;let r=null;return"arbitrary"===t.value.kind?r=t.value.value:"named"===t.value.kind&&(r=e.resolveValue(t.value.value,["--breakpoint"])),!r||r.includes("var(")?null:r}case"arbitrary":case"compound":return null}}));t.group((()=>{t.functional("max",((e,t)=>{if(t.modifier)return null;let r=o.get(t);if(null===r)return null;e.nodes=[k("@media",`(width < ${r})`,e.nodes)]}),{compounds:1})}),((e,t)=>r(e,t,"desc",o))),t.suggest("max",(()=>Array.from(n.keys()).filter((e=>null!==e)))),t.group((()=>{for(let[r,n]of e.namespace("--breakpoint"))null!==r&&t.static(r,(e=>{e.nodes=[k("@media",`(width >= ${n})`,e.nodes)]}),{compounds:1});t.functional("min",((e,t)=>{if(t.modifier)return null;let r=o.get(t);if(null===r)return null;e.nodes=[k("@media",`(width >= ${r})`,e.nodes)]}),{compounds:1})}),((e,t)=>r(e,t,"asc",o))),t.suggest("min",(()=>Array.from(n.keys()).filter((e=>null!==e))))}{let n=e.namespace("--container"),o=new c((t=>{switch(t.kind){case"functional":{if(null===t.value)return null;let r=null;return"arbitrary"===t.value.kind?r=t.value.value:"named"===t.value.kind&&(r=e.resolveValue(t.value.value,["--container"])),!r||r.includes("var(")?null:r}case"static":case"arbitrary":case"compound":return null}}));t.group((()=>{t.functional("@max",((e,t)=>{let r=o.get(t);if(null===r)return null;e.nodes=[k("@container",t.modifier?`${t.modifier.value} (width < ${r})`:`(width < ${r})`,e.nodes)]}),{compounds:1})}),((e,t)=>r(e,t,"desc",o))),t.suggest("@max",(()=>Array.from(n.keys()).filter((e=>null!==e)))),t.group((()=>{t.functional("@",((e,t)=>{let r=o.get(t);if(null===r)return null;e.nodes=[k("@container",t.modifier?`${t.modifier.value} (width >= ${r})`:`(width >= ${r})`,e.nodes)]}),{compounds:1}),t.functional("@min",((e,t)=>{let r=o.get(t);if(null===r)return null;e.nodes=[k("@container",t.modifier?`${t.modifier.value} (width >= ${r})`:`(width >= ${r})`,e.nodes)]}),{compounds:1})}),((e,t)=>r(e,t,"asc",o))),t.suggest("@min",(()=>Array.from(n.keys()).filter((e=>null!==e)))),t.suggest("@",(()=>Array.from(n.keys()).filter((e=>null!==e))))}}return r("portrait",["@media (orientation: portrait)"]),r("landscape",["@media (orientation: landscape)"]),r("ltr",['&:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *)']),r("rtl",['&:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *)']),r("dark",["@media (prefers-color-scheme: dark)"]),r("starting",["@starting-style"]),r("print",["@media print"]),r("forced-colors",["@media (forced-colors: active)"]),r("inverted-colors",["@media (inverted-colors: inverted)"]),r("pointer-none",["@media (pointer: none)"]),r("pointer-coarse",["@media (pointer: coarse)"]),r("pointer-fine",["@media (pointer: fine)"]),r("any-pointer-none",["@media (any-pointer: none)"]),r("any-pointer-coarse",["@media (any-pointer: coarse)"]),r("any-pointer-fine",["@media (any-pointer: fine)"]),r("noscript",["@media (scripting: none)"]),t}(e),n=new c((e=>function(e,t){if("["===e[0]&&"]"===e[e.length-1]){if("@"===e[1]&&e.includes("&"))return null;let t=W(e.slice(1,-1));if(!B(t)||0===t.length||0===t.trim().length)return null;let r=">"===t[0]||"+"===t[0]||"~"===t[0];return!r&&"@"!==t[0]&&!t.includes("&")&&(t=`&:is(${t})`),{kind:"arbitrary",selector:t,relative:r}}{let[r,n=null,o]=R(e,"/");if(o)return null;let a=P(r,(e=>t.variants.has(e)));for(let[e,r]of a)switch(t.variants.kind(e)){case"static":return null!==r||null!==n?null:{kind:"static",root:e};case"functional":{let t=null===n?null:I(n);if(null!==n&&null===t)return null;if(null===r)return{kind:"functional",root:e,modifier:t,value:null};if("]"===r[r.length-1]){if("["!==r[0])continue;let n=W(r.slice(1,-1));return B(n)&&0!==n.length&&0!==n.trim().length?{kind:"functional",root:e,modifier:t,value:{kind:"arbitrary",value:n}}:null}if(")"===r[r.length-1]){if("("!==r[0])continue;let n=W(r.slice(1,-1));return B(n)&&0!==n.length&&0!==n.trim().length&&"-"===n[0]&&"-"===n[1]?{kind:"functional",root:e,modifier:t,value:{kind:"arbitrary",value:`var(${n})`}}:null}return{kind:"functional",root:e,modifier:t,value:{kind:"named",value:r}}}case"compound":{if(null===r)return null;let o=t.parseVariant(r);if(null===o||!t.variants.compoundsWith(e,o))return null;let a=null===n?null:I(n);return null!==n&&null===a?null:{kind:"compound",root:e,modifier:a,variant:o}}}}return null}(e,s))),a=new c((e=>Array.from(function*(e,t){let r=R(e,":");if(t.theme.prefix){if(1===r.length||r[0]!==t.theme.prefix)return null;r.shift()}let n=r.pop(),o=[];for(let e=r.length-1;e>=0;--e){let n=t.parseVariant(r[e]);if(null===n)return;o.push(n)}let a=!1;"!"===n[n.length-1]?(a=!0,n=n.slice(0,-1)):"!"===n[0]&&(a=!0,n=n.slice(1)),t.utilities.has(n,"static")&&!n.includes("[")&&(yield{kind:"static",root:n,variants:o,important:a,raw:e});let[i,l=null,s]=R(n,"/");if(s)return;let c,u=null===l?null:I(l);if(null===l||null!==u)if("["!==i[0]){if("]"===i[i.length-1]){let e=i.indexOf("-[");if(-1===e)return;let r=i.slice(0,e);if(!t.utilities.has(r,"functional"))return;c=[[r,i.slice(e+1)]]}else if(")"===i[i.length-1]){let e=i.indexOf("-(");if(-1===e)return;let r=i.slice(0,e);if(!t.utilities.has(r,"functional"))return;let n=i.slice(e+2,-1),o=R(n,":"),a=null;if(2===o.length&&(a=o[0],n=o[1]),"-"!==n[0]||"-"!==n[1]||!B(n))return;c=[[r,null===a?`[var(${n})]`:`[${a}:var(${n})]`]]}else c=P(i,(e=>t.utilities.has(e,"functional")));for(let[t,r]of c){let n={kind:"functional",root:t,modifier:u,value:null,variants:o,important:a,raw:e};if(null!==r){{let e=r.indexOf("[");if(-1!==e){if("]"!==r[r.length-1])return;let t=W(r.slice(e+1,-1));if(!B(t))continue;let o="";for(let e=0;e=97&&r<=122))break}if(0===t.length||0===t.trim().length)continue;n.value={kind:"arbitrary",dataType:o||null,value:t}}else{let e=null===l||"arbitrary"===n.modifier?.kind?null:`${r}/${l}`;n.value={kind:"named",value:r,fraction:e}}}yield n}else yield n}}else{if("]"!==i[i.length-1])return;let t=i.charCodeAt(1);if(45!==t&&!(t>=97&&t<=122))return;i=i.slice(1,-1);let r=i.indexOf(":");if(-1===r||0===r||r===i.length-1)return;let n=i.slice(0,r),l=W(i.slice(r+1));if(!B(l))return;yield{kind:"arbitrary",property:n,value:l,modifier:u,variants:o,important:a,raw:e}}}(e,s)))),i=new c((e=>{let t=function(e,t){let r=function(e,t){if("arbitrary"===e.kind){let r=e.value;return e.modifier&&(r=We(r,e.modifier,t.theme)),null===r?[]:[[y(e.property,r)]]}let r=t.utilities.get(e.root)??[],n=[],o=r.filter((e=>!at(e)));for(let t of o){if(t.kind!==e.kind)continue;let r=t.compileFn(e);if(void 0!==r){if(null===r)return n;n.push(r)}}if(n.length>0)return n;let a=r.filter((e=>at(e)));for(let t of a){if(t.kind!==e.kind)continue;let r=t.compileFn(e);if(void 0!==r){if(null===r)return n;n.push(r)}}return n}(e,t);if(0===r.length)return[];let n=[],a=`.${o(e.raw)}`;for(let o of r){let r=lt(o);(e.important||t.important)&&it(o);let i={kind:"rule",selector:a,nodes:o};for(let r of e.variants)if(null===ot(i,r,t.variants))return[];n.push({node:i,propertySort:r})}return n}(e,s);try{Pe(t.map((({node:e})=>e)),s)}catch{return[]}return t})),l=new c((t=>{for(let r of g(t))e.markUsedVariable(r)})),s={theme:e,utilities:t,variants:r,invalidCandidates:new Set,important:!1,candidatesToCss(e){let t=[];for(let r of e){let e=!1,{astNodes:n}=nt([r],this,{onInvalidCandidate(){e=!0}});n=C(n,s,0),0===n.length||e?t.push(null):t.push(T(n))}return t},getClassOrder(e){return function(e,t){let{astNodes:r,nodeSorting:n}=nt(Array.from(t),e),o=new Map(t.map((e=>[e,null]))),a=0n;for(let e of r){let t=n.get(e)?.candidate;t&&o.set(t,o.get(t)??a++)}return t.map((e=>[e,o.get(e)??null]))}(this,e)},getClassList(){return Ye(this)},getVariants(){return function(e){let t=[];for(let[r,n]of e.variants.entries()){let o=function({value:t,modifier:n}={}){let o=r;t&&(o+=a?`-${t}`:t),n&&(o+=`/${n}`);let i=e.parseVariant(o);if(!i)return[];let l=w(".__placeholder__",[]);if(null===ot(l,i,e.variants))return[];let s=[];return j(l.nodes,((e,{path:t})=>{if("rule"!==e.kind&&"at-rule"!==e.kind||e.nodes.length>0)return;t.sort(((e,t)=>{let r="at-rule"===e.kind,n="at-rule"===t.kind;return r&&!n?-1:!r&&n?1:0}));let r=t.flatMap((e=>"rule"===e.kind?"&"===e.selector?[]:[e.selector]:"at-rule"===e.kind?[`${e.name} ${e.params}`]:[])),n="";for(let e=r.length-1;e>=0;e--)n=""===n?r[e]:`${r[e]} { ${n} }`;s.push(n)})),s};if("arbitrary"===n.kind)continue;let a="@"!==r,i=e.variants.getCompletions(r);switch(n.kind){case"static":t.push({name:r,values:i,isArbitrary:!1,hasDash:a,selectors:o});break;case"functional":case"compound":t.push({name:r,values:i,isArbitrary:!0,hasDash:a,selectors:o})}}return t}(this)},parseCandidate:e=>a.get(e),parseVariant:e=>n.get(e),compileAstNodes:e=>i.get(e),printCandidate:e=>function(e,t){let r=[];for(let e of t.variants)r.unshift(H(e));e.theme.prefix&&r.unshift(e.theme.prefix);let n="";if("static"===t.kind&&(n+=t.root),"functional"===t.kind&&(n+=t.root,t.value))if("arbitrary"===t.value.kind){if(null!==t.value){let e=Q(t.value.value),r=e?t.value.value.slice(4,-1):t.value.value,[o,a]=e?["(",")"]:["[","]"];t.value.dataType?n+=`-${o}${t.value.dataType}:${Y(r)}${a}`:n+=`-${o}${Y(r)}${a}`}}else"named"===t.value.kind&&(n+=`-${t.value.value}`);return"arbitrary"===t.kind&&(n+=`[${t.property}:${Y(t.value)}]`),("arbitrary"===t.kind||"functional"===t.kind)&&(n+=q(t.modifier)),t.important&&(n+="!"),r.push(n),r.join(":")}(s,e),printVariant:e=>H(e),getVariantOrder(){let e=Array.from(n.values());e.sort(((e,t)=>this.variants.compare(e,t)));let t,r=new Map,o=0;for(let n of e)null!==n&&(void 0!==t&&0!==this.variants.compare(t,n)&&o++,r.set(n,o),t=n);return r},resolveThemeValue(t,r=!0){let n=t.lastIndexOf("/"),o=null;-1!==n&&(o=t.slice(n+1).trim(),t=t.slice(0,n).trim());let a=e.resolve(null,[t],r?1:0)??void 0;return o&&a?Oe(a,o):a},trackUsedVariables(e){l.get(e)}};return s}var rt=["container-type","pointer-events","visibility","position","inset","inset-inline","inset-block","inset-inline-start","inset-inline-end","top","right","bottom","left","isolation","z-index","order","grid-column","grid-column-start","grid-column-end","grid-row","grid-row-start","grid-row-end","float","clear","--tw-container-component","margin","margin-inline","margin-block","margin-inline-start","margin-inline-end","margin-top","margin-right","margin-bottom","margin-left","box-sizing","display","field-sizing","aspect-ratio","height","max-height","min-height","width","max-width","min-width","flex","flex-shrink","flex-grow","flex-basis","table-layout","caption-side","border-collapse","border-spacing","transform-origin","translate","--tw-translate-x","--tw-translate-y","--tw-translate-z","scale","--tw-scale-x","--tw-scale-y","--tw-scale-z","rotate","--tw-rotate-x","--tw-rotate-y","--tw-rotate-z","--tw-skew-x","--tw-skew-y","transform","animation","cursor","touch-action","--tw-pan-x","--tw-pan-y","--tw-pinch-zoom","resize","scroll-snap-type","--tw-scroll-snap-strictness","scroll-snap-align","scroll-snap-stop","scroll-margin","scroll-margin-inline","scroll-margin-block","scroll-margin-inline-start","scroll-margin-inline-end","scroll-margin-top","scroll-margin-right","scroll-margin-bottom","scroll-margin-left","scroll-padding","scroll-padding-inline","scroll-padding-block","scroll-padding-inline-start","scroll-padding-inline-end","scroll-padding-top","scroll-padding-right","scroll-padding-bottom","scroll-padding-left","list-style-position","list-style-type","list-style-image","appearance","columns","break-before","break-inside","break-after","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-template-columns","grid-template-rows","flex-direction","flex-wrap","place-content","place-items","align-content","align-items","justify-content","justify-items","gap","column-gap","row-gap","--tw-space-x-reverse","--tw-space-y-reverse","divide-x-width","divide-y-width","--tw-divide-y-reverse","divide-style","divide-color","place-self","align-self","justify-self","overflow","overflow-x","overflow-y","overscroll-behavior","overscroll-behavior-x","overscroll-behavior-y","scroll-behavior","border-radius","border-start-radius","border-end-radius","border-top-radius","border-right-radius","border-bottom-radius","border-left-radius","border-start-start-radius","border-start-end-radius","border-end-end-radius","border-end-start-radius","border-top-left-radius","border-top-right-radius","border-bottom-right-radius","border-bottom-left-radius","border-width","border-inline-width","border-block-width","border-inline-start-width","border-inline-end-width","border-top-width","border-right-width","border-bottom-width","border-left-width","border-style","border-inline-style","border-block-style","border-inline-start-style","border-inline-end-style","border-top-style","border-right-style","border-bottom-style","border-left-style","border-color","border-inline-color","border-block-color","border-inline-start-color","border-inline-end-color","border-top-color","border-right-color","border-bottom-color","border-left-color","background-color","background-image","--tw-gradient-position","--tw-gradient-stops","--tw-gradient-via-stops","--tw-gradient-from","--tw-gradient-from-position","--tw-gradient-via","--tw-gradient-via-position","--tw-gradient-to","--tw-gradient-to-position","mask-image","--tw-mask-top","--tw-mask-top-from-color","--tw-mask-top-from-position","--tw-mask-top-to-color","--tw-mask-top-to-position","--tw-mask-right","--tw-mask-right-from-color","--tw-mask-right-from-position","--tw-mask-right-to-color","--tw-mask-right-to-position","--tw-mask-bottom","--tw-mask-bottom-from-color","--tw-mask-bottom-from-position","--tw-mask-bottom-to-color","--tw-mask-bottom-to-position","--tw-mask-left","--tw-mask-left-from-color","--tw-mask-left-from-position","--tw-mask-left-to-color","--tw-mask-left-to-position","--tw-mask-linear","--tw-mask-linear-position","--tw-mask-linear-from-color","--tw-mask-linear-from-position","--tw-mask-linear-to-color","--tw-mask-linear-to-position","--tw-mask-radial","--tw-mask-radial-shape","--tw-mask-radial-size","--tw-mask-radial-position","--tw-mask-radial-from-color","--tw-mask-radial-from-position","--tw-mask-radial-to-color","--tw-mask-radial-to-position","--tw-mask-conic","--tw-mask-conic-position","--tw-mask-conic-from-color","--tw-mask-conic-from-position","--tw-mask-conic-to-color","--tw-mask-conic-to-position","box-decoration-break","background-size","background-attachment","background-clip","background-position","background-repeat","background-origin","mask-composite","mask-mode","mask-type","mask-size","mask-clip","mask-position","mask-repeat","mask-origin","fill","stroke","stroke-width","object-fit","object-position","padding","padding-inline","padding-block","padding-inline-start","padding-inline-end","padding-top","padding-right","padding-bottom","padding-left","text-align","text-indent","vertical-align","font-family","font-size","line-height","font-weight","letter-spacing","text-wrap","overflow-wrap","word-break","text-overflow","hyphens","white-space","color","text-transform","font-style","font-stretch","font-variant-numeric","text-decoration-line","text-decoration-color","text-decoration-style","text-decoration-thickness","text-underline-offset","-webkit-font-smoothing","placeholder-color","caret-color","accent-color","color-scheme","opacity","background-blend-mode","mix-blend-mode","box-shadow","--tw-shadow","--tw-shadow-color","--tw-ring-shadow","--tw-ring-color","--tw-inset-shadow","--tw-inset-shadow-color","--tw-inset-ring-shadow","--tw-inset-ring-color","--tw-ring-offset-width","--tw-ring-offset-color","outline","outline-width","outline-offset","outline-color","--tw-blur","--tw-brightness","--tw-contrast","--tw-drop-shadow","--tw-grayscale","--tw-hue-rotate","--tw-invert","--tw-saturate","--tw-sepia","filter","--tw-backdrop-blur","--tw-backdrop-brightness","--tw-backdrop-contrast","--tw-backdrop-grayscale","--tw-backdrop-hue-rotate","--tw-backdrop-invert","--tw-backdrop-opacity","--tw-backdrop-saturate","--tw-backdrop-sepia","backdrop-filter","transition-property","transition-behavior","transition-delay","transition-duration","transition-timing-function","will-change","contain","content","forced-color-adjust"];function nt(e,t,{onInvalidCandidate:r}={}){let n=new Map,o=[],a=new Map;for(let n of e){if(t.invalidCandidates.has(n)){r?.(n);continue}let e=t.parseCandidate(n);0!==e.length?a.set(n,e):r?.(n)}let i=t.getVariantOrder();for(let[e,l]of a){let a=!1;for(let r of l){let l=t.compileAstNodes(r);if(0!==l.length){a=!0;for(let{node:t,propertySort:a}of l){let l=0n;for(let e of r.variants)l|=1n<{let r=n.get(e),o=n.get(t);if(r.variants-o.variants!==0n)return Number(r.variants-o.variants);let a=0;for(;a1)return null;for(let e of a.nodes)if("rule"!==e.kind&&"at-rule"!==e.kind||null===o(e,t))return null;return A(a.nodes,(t=>{if(("rule"===t.kind||"at-rule"===t.kind)&&t.nodes.length<=0)return t.nodes=e.nodes,1})),void(e.nodes=a.nodes)}return null===o(e,t)?null:void 0}function at(e){let t=e.options?.types??[];return t.length>1&&t.includes("any")}function it(e){for(let t of e)"at-root"!==t.kind&&("declaration"===t.kind?t.important=!0:("rule"===t.kind||"at-rule"===t.kind)&&it(t.nodes))}function lt(e){let t=new Set,r=0,n=e.slice(),o=!1;for(;n.length>0;){let e=n.shift();if("declaration"===e.kind){if(void 0===e.value||(r++,o))continue;if("--tw-sort"===e.property){let r=rt.indexOf(e.value??"");if(-1!==r){t.add(r),o=!0;continue}}let n=rt.indexOf(e.property);-1!==n&&t.add(n)}else if("rule"===e.kind||"at-rule"===e.kind)for(let t of e.nodes)n.push(t)}return{order:Array.from(t).sort(((e,t)=>e-t)),count:r}}function st(e,t){let r=0,n=b("&",e),o=new Set,a=new c((()=>new Set)),i=new c((()=>new Set));A([n],((e,{parent:n,path:l})=>{if("at-rule"===e.kind){if("@keyframes"===e.name)return A(e.nodes,(e=>{if("at-rule"===e.kind&&"@apply"===e.name)throw new Error("You cannot use `@apply` inside `@keyframes`.")})),1;if("@utility"===e.name){let r=e.params.replace(/-\*$/,"");return i.get(r).add(e),void A(e.nodes,(r=>{if("at-rule"===r.kind&&"@apply"===r.name){o.add(e);for(let n of ct(r,t))a.get(e).add(n)}}))}if("@apply"===e.name){if(null===n)return;r|=1,o.add(n);for(let r of ct(e,t))for(let t of l)t!==e&&o.has(t)&&a.get(t).add(r)}}}));let l=new Set,s=[],u=new Set;function d(e,r=[]){if(!l.has(e)){if(u.has(e)){let n=r[(r.indexOf(e)+1)%r.length];throw"at-rule"===e.kind&&"@utility"===e.name&&"at-rule"===n.kind&&"@utility"===n.name&&A(e.nodes,(e=>{if("at-rule"!==e.kind||"@apply"!==e.name)return;let r=e.params.split(/\s+/g);for(let e of r)for(let r of t.parseCandidate(e))switch(r.kind){case"arbitrary":break;case"static":case"functional":if(n.params.replace(/-\*$/,"")===r.root)throw new Error(`You cannot \`@apply\` the \`${e}\` utility here because it creates a circular dependency.`)}})),new Error(`Circular dependency detected:\n\n${T([e])}\nRelies on:\n\n${T([n])}`)}u.add(e);for(let t of a.get(e))for(let n of i.get(t))r.push(e),d(n,r),r.pop();l.add(e),u.delete(e),s.push(e)}}for(let e of o)d(e);for(let e of s)"nodes"in e&&A(e.nodes,((e,{replaceWith:r})=>{if("at-rule"!==e.kind||"@apply"!==e.name)return;let n=e.params.split(/(\s+)/g),o={},a=0;for(let[e,t]of n.entries())e%2==0&&(o[t]=a),a+=t.length;{let n=nt(Object.keys(o),t,{onInvalidCandidate:e=>{throw new Error(`Cannot apply unknown utility class: ${e}`)}}),a=e.src,i=n.astNodes.map((e=>{let t=n.nodeSorting.get(e)?.candidate,r=t?o[t]:void 0;if(e=structuredClone(e),!a||!t||void 0===r)return A([e],(e=>{e.src=a})),e;let i=[a[0],a[1],a[2]];return i[1]+=7+r,i[2]=i[1]+t.length,A([e],(e=>{e.src=i})),e})),l=[];for(let e of i)if("rule"===e.kind)for(let t of e.nodes)l.push(t);else l.push(e);r(l)}}));return r}function*ct(e,t){for(let r of e.params.split(/\s+/g))for(let e of t.parseCandidate(r))switch(e.kind){case"arbitrary":break;case"static":case"functional":yield e.root}}async function ut(e,r,n,o=0,a=!1){let i=0,l=[];return A(e,((e,{replaceWith:s})=>{if("at-rule"===e.kind&&("@import"===e.name||"@reference"===e.name)){let c=function(e){let t,r=null,n=null,o=null;for(let a=0;a{if(o>100)throw new Error(`Exceeded maximum recursion depth while resolving \`${u}\` in \`${r}\`)`);let i=await n(u,r),l=t(i.content,{from:a?i.path:void 0});await ut(l,i.base,n,o+1,a),g.nodes=function(e,t,r,n,o){let a=t;if(null!==r){let t=k("@layer",r,a);t.src=e.src,a=[t]}if(null!==n){let t=k("@media",n,a);t.src=e.src,a=[t]}if(null!==o){let t=k("@supports","("===o[0]?o:`(${o})`,a);t.src=e.src,a=[t]}return a}(e,[$({base:i.base},l)],d,f,p)})()),s(g),1}})),l.length>0&&await Promise.all(l),i}function dt(e,t=null){return Array.isArray(e)&&2===e.length&&"object"==typeof e[1]&&null!==typeof e[1]?t?e[1][t]??null:e[0]:Array.isArray(e)&&null===t?e.join(", "):"string"==typeof e&&null===t?e:null}function ft(e,{theme:t},r){for(let t of r){let r=ht([t]);r&&e.theme.clearNamespace(`--${r}`,4)}for(let[r,n]of function(e){let t=[];return mt(e,[],((e,r)=>{if(function(e){return"number"==typeof e||"string"==typeof e}(e))return t.push([r,e]),1;if(function(e){if(!Array.isArray(e)||2!==e.length||"string"!=typeof e[0]&&"number"!=typeof e[0]||void 0===e[1]||null===e[1]||"object"!=typeof e[1])return!1;for(let t of Reflect.ownKeys(e[1]))if("string"!=typeof t||"string"!=typeof e[1][t]&&"number"!=typeof e[1][t])return!1;return!0}(e)){t.push([r,e[0]]);for(let n of Reflect.ownKeys(e[1]))t.push([[...r,`-${n}`],e[1][n]]);return 1}return Array.isArray(e)&&e.every((e=>"string"==typeof e))?("fontSize"===r[0]?(t.push([r,e[0]]),e.length>=2&&t.push([[...r,"-line-height"],e[1]])):t.push([r,e.join(", ")]),1):void 0})),t}(t)){if("string"!=typeof n&&"number"!=typeof n)continue;if("string"==typeof n&&(n=n.replace(//g,"1")),"opacity"===r[0]&&("number"==typeof n||"string"==typeof n)){let e="string"==typeof n?parseFloat(n):n;e>=0&&e<=1&&(n=100*e+"%")}let t=ht(r);t&&e.theme.add(`--${t}`,""+n,7)}if(Object.hasOwn(t,"fontFamily")){let r=5;{let n=dt(t.fontFamily.sans);n&&e.theme.hasDefault("--font-sans")&&(e.theme.add("--default-font-family",n,r),e.theme.add("--default-font-feature-settings",dt(t.fontFamily.sans,"fontFeatureSettings")??"normal",r),e.theme.add("--default-font-variation-settings",dt(t.fontFamily.sans,"fontVariationSettings")??"normal",r))}{let n=dt(t.fontFamily.mono);n&&e.theme.hasDefault("--font-mono")&&(e.theme.add("--default-mono-font-family",n,r),e.theme.add("--default-mono-font-feature-settings",dt(t.fontFamily.mono,"fontFeatureSettings")??"normal",r),e.theme.add("--default-mono-font-variation-settings",dt(t.fontFamily.mono,"fontVariationSettings")??"normal",r))}}return t}var pt=/^[a-zA-Z0-9-_%/\.]+$/;function ht(e){if("container"===e[0])return null;"animation"===(e=structuredClone(e))[0]&&(e[0]="animate"),"aspectRatio"===e[0]&&(e[0]="aspect"),"borderRadius"===e[0]&&(e[0]="radius"),"boxShadow"===e[0]&&(e[0]="shadow"),"colors"===e[0]&&(e[0]="color"),"containers"===e[0]&&(e[0]="container"),"fontFamily"===e[0]&&(e[0]="font"),"fontSize"===e[0]&&(e[0]="text"),"letterSpacing"===e[0]&&(e[0]="tracking"),"lineHeight"===e[0]&&(e[0]="leading"),"maxWidth"===e[0]&&(e[0]="container"),"screens"===e[0]&&(e[0]="breakpoint"),"transitionTimingFunction"===e[0]&&(e[0]="ease");for(let t of e)if(!pt.test(t))return null;return e.map(((e,t,r)=>"1"===e&&t!==r.length-1?"":e)).map((e=>e.replaceAll(".","_").replace(/([a-z])([A-Z])/g,((e,t,r)=>`${t}-${r.toLowerCase()}`)))).filter(((t,r)=>"DEFAULT"!==t||r!==e.length-1)).join("-")}function mt(e,t=[],r){for(let n of Reflect.ownKeys(e)){let o=e[n];if(null==o)continue;let a=[...t,n],i=r(o,a)??0;if(1!==i){if(2===i)return 2;if((Array.isArray(o)||"object"==typeof o)&&2===mt(o,a,r))return 2}}}function gt(e){let t=[];for(let r of R(e,".")){if(!r.includes("[")){t.push(r);continue}let e=0;for(;;){let n=r.indexOf("[",e),o=r.indexOf("]",n);if(-1===n||-1===o)break;n>e&&t.push(r.slice(e,n)),t.push(r.slice(n+1,o)),e=o+1}e<=r.length-1&&t.push(r.slice(e))}return t}function vt(e){if("[object Object]"!==Object.prototype.toString.call(e))return!1;let t=Object.getPrototypeOf(e);return null===t||null===Object.getPrototypeOf(t)}function wt(e,t,r,n=[]){for(let o of t)if(null!=o)for(let t of Reflect.ownKeys(o)){n.push(t);let a=r(e[t],o[t],n);void 0!==a?e[t]=a:vt(e[t])&&vt(o[t])?e[t]=wt({},[e[t],o[t]],r,n):e[t]=o[t],n.pop()}return e}function kt(e,t,r){return function(n,o){let i=n.lastIndexOf("/"),l=null;-1!==i&&(l=n.slice(i+1).trim(),n=n.slice(0,i).trim());let s=(()=>{let o=gt(n),[i,l]=function(e,t){if(1===t.length&&t[0].startsWith("--"))return[e.get([t[0]]),e.getOptions(t[0])];let r=ht(t),n=new Map,o=new c((()=>new Map)),a=e.namespace(`--${r}`);if(0===a.size)return[null,0];let i=new Map;for(let[t,l]of a){if(!t||!t.includes("--")){n.set(t,l),i.set(t,e.getOptions(t?`--${r}-${t}`:`--${r}`));continue}let a=t.indexOf("--"),s=t.slice(0,a),c=t.slice(a+2);c=c.replace(/-([a-z])/g,((e,t)=>t.toUpperCase())),o.get(""===s?null:s).set(c,[l,e.getOptions(`--${r}${t}`)])}let l=e.getOptions(`--${r}`);for(let[e,t]of o){let r=n.get(e);if("string"!=typeof r)continue;let o={},a={};for(let[e,[r,n]]of t)o[e]=r,a[e]=n;n.set(e,[r,o]),i.set(e,[l,a])}let s={},u={};for(let[e,t]of n)yt(s,[e??"DEFAULT"],t);for(let[e,t]of i)yt(u,[e??"DEFAULT"],t);return"DEFAULT"===t[t.length-1]?[s?.DEFAULT??null,u.DEFAULT??0]:"DEFAULT"in s&&1===Object.keys(s).length?[s.DEFAULT,u.DEFAULT??0]:(s.__CSS_VALUES__=u,[s,u])}(e.theme,o),s=r(bt(t()??{},o)??null);if("string"==typeof s&&(s=s.replace("","1")),"object"!=typeof i)return"object"!=typeof l&&4&l?s??i:i;if(null!==s&&"object"==typeof s&&!Array.isArray(s)){let e=wt({},[s],((e,t)=>t));if(null===i&&Object.hasOwn(s,"__CSS_VALUES__")){let t={};for(let r in s.__CSS_VALUES__)t[r]=s[r],delete e[r];i=t}for(let t in i)"__CSS_VALUES__"!==t&&(4&s?.__CSS_VALUES__?.[t]&&void 0!==bt(e,t.split("-"))||(e[a(t)]=i[t]));return e}if(Array.isArray(i)&&Array.isArray(l)&&Array.isArray(s)){let e=i[0],t=i[1];4&l[0]&&(e=s[0]??e);for(let e of Object.keys(t))4&l[1][e]&&(t[e]=s[1][e]??t[e]);return[e,t]}return i??s})();return l&&"string"==typeof s&&(s=Oe(s,l)),s??o}}function bt(e,t){for(let r=0;r0){let e=zt(a);o?o.nodes.push(e):r.push(e),a=""}let n=i,l=i+1;for(;l0){let t=zt(a);e.nodes.push(t),a=""}o=n.length>0?n[n.length-1]:null;break}case 46:case 58:case 35:if(a.length>0){let e=zt(a);o?o.nodes.push(e):r.push(e)}a=String.fromCharCode(l);break;case 91:{if(a.length>0){let e=zt(a);o?o.nodes.push(e):r.push(e)}a="";let n=i,l=0;for(let r=i+1;r0&&r.push(zt(a)),r}var Kt=/^[a-z@][a-zA-Z0-9/%._-]*$/;function Et({designSystem:e,ast:t,resolvedConfig:r,featuresRef:n,referenceMode:o}){let a={addBase(r){if(o)return;let a=Vt(r);n.current|=Pe(a,e),t.push(k("@layer","base",a))},addVariant(t,r){if(!Ge.test(t))throw new Error(`\`addVariant('${t}')\` defines an invalid variant name. Variants should only contain alphanumeric, dashes or underscore characters.`);if("string"==typeof r){if(r.includes(":merge("))return}else if(Array.isArray(r)){if(r.some((e=>e.includes(":merge("))))return}else if("object"==typeof r){let e=function(t,r){return Object.entries(t).some((([t,n])=>t.includes(r)||"object"==typeof n&&e(n,r)))};if(e(r,":merge("))return}"string"==typeof r||Array.isArray(r)?e.variants.static(t,(e=>{e.nodes=Nt(r,e.nodes)}),{compounds:Xe("string"==typeof r?[r]:r)}):"object"==typeof r&&e.variants.fromAst(t,Vt(r))},matchVariant(t,r,n){function o(e,t,n){return Nt(r(e,{modifier:t?.value??null}),n)}try{let e=r("a",{modifier:null});if("string"==typeof e&&e.includes(":merge("))return;if(Array.isArray(e)&&e.some((e=>e.includes(":merge("))))return}catch{}let a=Object.keys(n?.values??{});e.variants.group((()=>{e.variants.functional(t,((e,t)=>{if(!t.value)return n?.values&&"DEFAULT"in n.values?void(e.nodes=o(n.values.DEFAULT,t.modifier,e.nodes)):null;if("arbitrary"===t.value.kind)e.nodes=o(t.value.value,t.modifier,e.nodes);else if("named"===t.value.kind&&n?.values){let r=n.values[t.value.value];if("string"!=typeof r)return;e.nodes=o(r,t.modifier,e.nodes)}}))}),((e,t)=>{if("functional"!==e.kind||"functional"!==t.kind)return 0;let r=e.value?e.value.value:"DEFAULT",o=t.value?t.value.value:"DEFAULT",i=n?.values?.[r]??r,l=n?.values?.[o]??o;if(n&&"function"==typeof n.sort)return n.sort({value:i,modifier:e.modifier?.value??null},{value:l,modifier:t.modifier?.value??null});let s=a.indexOf(r),c=a.indexOf(o);return s=-1===s?a.length:s,c=-1===c?a.length:c,s!==c?s-c:iObject.entries(e)));a=a.flatMap((([e,t])=>R(e,",").map((e=>[e.trim(),t]))));let i=new c((()=>[]));for(let[e,r]of a){if(e.startsWith("@keyframes ")){o||t.push(b(e,Vt(r)));continue}let n=St(e),a=!1;if(Ct(n,(e=>{if("selector"===e.kind&&"."===e.value[0]&&Kt.test(e.value.slice(1))){let t=e.value;e.value="&";let o=Tt(n),l=t.slice(1),s="&"===o?Vt(r):[b(o,Vt(r))];return i.get(l).push(...s),a=!0,void(e.value=t)}if("function"===e.kind&&":not"===e.value)return 1})),!a)throw new Error(`\`addUtilities({ '${e}' : … })\` defines an invalid utility selector. Utilities must be a single class name and start with a lowercase letter, eg. \`.scrollbar-none\`.`)}for(let[t,r]of i)e.theme.prefix&&A(r,(t=>{if("rule"===t.kind){let r=St(t.selector);Ct(r,(t=>{"selector"===t.kind&&"."===t.value[0]&&(t.value=`.${e.theme.prefix}\\:${t.value.slice(1)}`)})),t.selector=Tt(r)}})),e.utilities.static(t,(o=>{let a=structuredClone(r);return Ot(a,t,o.raw),n.current|=st(a,e),a}))},matchUtilities(t,r){let o=r?.type?Array.isArray(r?.type)?r.type:[r.type]:["any"];for(let[a,i]of Object.entries(t)){let t=function({negative:t}){return l=>{if("arbitrary"===l.value?.kind&&o.length>0&&!o.includes("any")&&(l.value.dataType&&!o.includes(l.value.dataType)||!l.value.dataType&&!ie(l.value.value,o)))return;let s,c=o.includes("color"),u=null,d=!1;{let e=r?.values??{};c&&(e=Object.assign({inherit:"inherit",transparent:"transparent",current:"currentcolor"},e)),l.value?"arbitrary"===l.value.kind?u=l.value.value:l.value.fraction&&e[l.value.fraction]?(u=e[l.value.fraction],d=!0):e[l.value.value]?u=e[l.value.value]:e.__BARE_VALUE__&&(u=e.__BARE_VALUE__(l.value)??null,d=(null!==l.value.fraction&&u?.includes("/"))??!1):u=e.DEFAULT??null}if(null===u)return;{let e=r?.modifiers??null;s=l.modifier?"any"===e||"arbitrary"===l.modifier.kind?l.modifier.value:e?.[l.modifier.value]?e[l.modifier.value]:c&&!Number.isNaN(Number(l.modifier.value))?`${l.modifier.value}%`:null:null}if(l.modifier&&null===s&&!d)return"arbitrary"===l.value?.kind?null:void 0;c&&null!==s&&(u=Oe(u,s)),t&&(u=`calc(${u} * -1)`);let f=Vt(i(u,{modifier:s}));return Ot(f,a,l.raw),n.current|=st(f,e),f}};if(!Kt.test(a))throw new Error(`\`matchUtilities({ '${a}' : … })\` defines an invalid utility name. Utilities should be alphanumeric and start with a lowercase letter, eg. \`scrollbar\`.`);r?.supportsNegativeValues&&e.utilities.functional(`-${a}`,t({negative:!0}),{types:o}),e.utilities.functional(a,t({negative:!1}),{types:o}),e.utilities.suggest(a,(()=>{let e=r?.values??{},t=new Set(Object.keys(e));t.delete("__BARE_VALUE__"),t.has("DEFAULT")&&(t.delete("DEFAULT"),t.add(null));let n=r?.modifiers??{},o="any"===n?[]:Object.keys(n);return[{supportsNegative:r?.supportsNegativeValues??!1,values:Array.from(t),modifiers:o}]}))}},addComponents(e,t){this.addUtilities(e,t)},matchComponents(e,t){this.matchUtilities(e,t)},theme:kt(e,(()=>r.theme??{}),(e=>e)),prefix:e=>e,config(e,t){let n=r;if(!e)return n;let o=gt(e);for(let e=0;eObject.entries(e)));for(let[e,n]of r)if("object"!=typeof n){if(!e.startsWith("--")){if("@slot"===n){t.push(b(e,[k("@slot")]));continue}e=e.replace(/([A-Z])/g,"-$1").toLowerCase()}t.push(y(e,String(n)))}else if(Array.isArray(n))for(let r of n)"string"==typeof r?t.push(y(e,r)):t.push(b(e,Vt(r)));else null!==n&&t.push(b(e,Vt(n)));return t}function Nt(e,r){return("string"==typeof e?[e]:e).flatMap((e=>{if(e.trim().endsWith("}")){let n=t(e.replace("}","{@slot}}"));return et(n,r),n}return b(e,r)}))}function Ot(e,t,r){A(e,(e=>{if("rule"===e.kind){let n=St(e.selector);Ct(n,(e=>{"selector"===e.kind&&e.value===`.${t}`&&(e.value=`.${o(r)}`)})),e.selector=Tt(n)}}))}function Ft(e,t,r){for(let r of function(e){let t=[];if("keyframes"in e.theme)for(let[r,n]of Object.entries(e.theme.keyframes))t.push(k("@keyframes",r,Vt(n)));return t}(t))e.theme.addKeyframes(r)}var Wt={inherit:"inherit",current:"currentcolor",transparent:"transparent",black:"#000",white:"#fff",slate:{50:"oklch(98.4% 0.003 247.858)",100:"oklch(96.8% 0.007 247.896)",200:"oklch(92.9% 0.013 255.508)",300:"oklch(86.9% 0.022 252.894)",400:"oklch(70.4% 0.04 256.788)",500:"oklch(55.4% 0.046 257.417)",600:"oklch(44.6% 0.043 257.281)",700:"oklch(37.2% 0.044 257.287)",800:"oklch(27.9% 0.041 260.031)",900:"oklch(20.8% 0.042 265.755)",950:"oklch(12.9% 0.042 264.695)"},gray:{50:"oklch(98.5% 0.002 247.839)",100:"oklch(96.7% 0.003 264.542)",200:"oklch(92.8% 0.006 264.531)",300:"oklch(87.2% 0.01 258.338)",400:"oklch(70.7% 0.022 261.325)",500:"oklch(55.1% 0.027 264.364)",600:"oklch(44.6% 0.03 256.802)",700:"oklch(37.3% 0.034 259.733)",800:"oklch(27.8% 0.033 256.848)",900:"oklch(21% 0.034 264.665)",950:"oklch(13% 0.028 261.692)"},zinc:{50:"oklch(98.5% 0 0)",100:"oklch(96.7% 0.001 286.375)",200:"oklch(92% 0.004 286.32)",300:"oklch(87.1% 0.006 286.286)",400:"oklch(70.5% 0.015 286.067)",500:"oklch(55.2% 0.016 285.938)",600:"oklch(44.2% 0.017 285.786)",700:"oklch(37% 0.013 285.805)",800:"oklch(27.4% 0.006 286.033)",900:"oklch(21% 0.006 285.885)",950:"oklch(14.1% 0.005 285.823)"},neutral:{50:"oklch(98.5% 0 0)",100:"oklch(97% 0 0)",200:"oklch(92.2% 0 0)",300:"oklch(87% 0 0)",400:"oklch(70.8% 0 0)",500:"oklch(55.6% 0 0)",600:"oklch(43.9% 0 0)",700:"oklch(37.1% 0 0)",800:"oklch(26.9% 0 0)",900:"oklch(20.5% 0 0)",950:"oklch(14.5% 0 0)"},stone:{50:"oklch(98.5% 0.001 106.423)",100:"oklch(97% 0.001 106.424)",200:"oklch(92.3% 0.003 48.717)",300:"oklch(86.9% 0.005 56.366)",400:"oklch(70.9% 0.01 56.259)",500:"oklch(55.3% 0.013 58.071)",600:"oklch(44.4% 0.011 73.639)",700:"oklch(37.4% 0.01 67.558)",800:"oklch(26.8% 0.007 34.298)",900:"oklch(21.6% 0.006 56.043)",950:"oklch(14.7% 0.004 49.25)"},red:{50:"oklch(97.1% 0.013 17.38)",100:"oklch(93.6% 0.032 17.717)",200:"oklch(88.5% 0.062 18.334)",300:"oklch(80.8% 0.114 19.571)",400:"oklch(70.4% 0.191 22.216)",500:"oklch(63.7% 0.237 25.331)",600:"oklch(57.7% 0.245 27.325)",700:"oklch(50.5% 0.213 27.518)",800:"oklch(44.4% 0.177 26.899)",900:"oklch(39.6% 0.141 25.723)",950:"oklch(25.8% 0.092 26.042)"},orange:{50:"oklch(98% 0.016 73.684)",100:"oklch(95.4% 0.038 75.164)",200:"oklch(90.1% 0.076 70.697)",300:"oklch(83.7% 0.128 66.29)",400:"oklch(75% 0.183 55.934)",500:"oklch(70.5% 0.213 47.604)",600:"oklch(64.6% 0.222 41.116)",700:"oklch(55.3% 0.195 38.402)",800:"oklch(47% 0.157 37.304)",900:"oklch(40.8% 0.123 38.172)",950:"oklch(26.6% 0.079 36.259)"},amber:{50:"oklch(98.7% 0.022 95.277)",100:"oklch(96.2% 0.059 95.617)",200:"oklch(92.4% 0.12 95.746)",300:"oklch(87.9% 0.169 91.605)",400:"oklch(82.8% 0.189 84.429)",500:"oklch(76.9% 0.188 70.08)",600:"oklch(66.6% 0.179 58.318)",700:"oklch(55.5% 0.163 48.998)",800:"oklch(47.3% 0.137 46.201)",900:"oklch(41.4% 0.112 45.904)",950:"oklch(27.9% 0.077 45.635)"},yellow:{50:"oklch(98.7% 0.026 102.212)",100:"oklch(97.3% 0.071 103.193)",200:"oklch(94.5% 0.129 101.54)",300:"oklch(90.5% 0.182 98.111)",400:"oklch(85.2% 0.199 91.936)",500:"oklch(79.5% 0.184 86.047)",600:"oklch(68.1% 0.162 75.834)",700:"oklch(55.4% 0.135 66.442)",800:"oklch(47.6% 0.114 61.907)",900:"oklch(42.1% 0.095 57.708)",950:"oklch(28.6% 0.066 53.813)"},lime:{50:"oklch(98.6% 0.031 120.757)",100:"oklch(96.7% 0.067 122.328)",200:"oklch(93.8% 0.127 124.321)",300:"oklch(89.7% 0.196 126.665)",400:"oklch(84.1% 0.238 128.85)",500:"oklch(76.8% 0.233 130.85)",600:"oklch(64.8% 0.2 131.684)",700:"oklch(53.2% 0.157 131.589)",800:"oklch(45.3% 0.124 130.933)",900:"oklch(40.5% 0.101 131.063)",950:"oklch(27.4% 0.072 132.109)"},green:{50:"oklch(98.2% 0.018 155.826)",100:"oklch(96.2% 0.044 156.743)",200:"oklch(92.5% 0.084 155.995)",300:"oklch(87.1% 0.15 154.449)",400:"oklch(79.2% 0.209 151.711)",500:"oklch(72.3% 0.219 149.579)",600:"oklch(62.7% 0.194 149.214)",700:"oklch(52.7% 0.154 150.069)",800:"oklch(44.8% 0.119 151.328)",900:"oklch(39.3% 0.095 152.535)",950:"oklch(26.6% 0.065 152.934)"},emerald:{50:"oklch(97.9% 0.021 166.113)",100:"oklch(95% 0.052 163.051)",200:"oklch(90.5% 0.093 164.15)",300:"oklch(84.5% 0.143 164.978)",400:"oklch(76.5% 0.177 163.223)",500:"oklch(69.6% 0.17 162.48)",600:"oklch(59.6% 0.145 163.225)",700:"oklch(50.8% 0.118 165.612)",800:"oklch(43.2% 0.095 166.913)",900:"oklch(37.8% 0.077 168.94)",950:"oklch(26.2% 0.051 172.552)"},teal:{50:"oklch(98.4% 0.014 180.72)",100:"oklch(95.3% 0.051 180.801)",200:"oklch(91% 0.096 180.426)",300:"oklch(85.5% 0.138 181.071)",400:"oklch(77.7% 0.152 181.912)",500:"oklch(70.4% 0.14 182.503)",600:"oklch(60% 0.118 184.704)",700:"oklch(51.1% 0.096 186.391)",800:"oklch(43.7% 0.078 188.216)",900:"oklch(38.6% 0.063 188.416)",950:"oklch(27.7% 0.046 192.524)"},cyan:{50:"oklch(98.4% 0.019 200.873)",100:"oklch(95.6% 0.045 203.388)",200:"oklch(91.7% 0.08 205.041)",300:"oklch(86.5% 0.127 207.078)",400:"oklch(78.9% 0.154 211.53)",500:"oklch(71.5% 0.143 215.221)",600:"oklch(60.9% 0.126 221.723)",700:"oklch(52% 0.105 223.128)",800:"oklch(45% 0.085 224.283)",900:"oklch(39.8% 0.07 227.392)",950:"oklch(30.2% 0.056 229.695)"},sky:{50:"oklch(97.7% 0.013 236.62)",100:"oklch(95.1% 0.026 236.824)",200:"oklch(90.1% 0.058 230.902)",300:"oklch(82.8% 0.111 230.318)",400:"oklch(74.6% 0.16 232.661)",500:"oklch(68.5% 0.169 237.323)",600:"oklch(58.8% 0.158 241.966)",700:"oklch(50% 0.134 242.749)",800:"oklch(44.3% 0.11 240.79)",900:"oklch(39.1% 0.09 240.876)",950:"oklch(29.3% 0.066 243.157)"},blue:{50:"oklch(97% 0.014 254.604)",100:"oklch(93.2% 0.032 255.585)",200:"oklch(88.2% 0.059 254.128)",300:"oklch(80.9% 0.105 251.813)",400:"oklch(70.7% 0.165 254.624)",500:"oklch(62.3% 0.214 259.815)",600:"oklch(54.6% 0.245 262.881)",700:"oklch(48.8% 0.243 264.376)",800:"oklch(42.4% 0.199 265.638)",900:"oklch(37.9% 0.146 265.522)",950:"oklch(28.2% 0.091 267.935)"},indigo:{50:"oklch(96.2% 0.018 272.314)",100:"oklch(93% 0.034 272.788)",200:"oklch(87% 0.065 274.039)",300:"oklch(78.5% 0.115 274.713)",400:"oklch(67.3% 0.182 276.935)",500:"oklch(58.5% 0.233 277.117)",600:"oklch(51.1% 0.262 276.966)",700:"oklch(45.7% 0.24 277.023)",800:"oklch(39.8% 0.195 277.366)",900:"oklch(35.9% 0.144 278.697)",950:"oklch(25.7% 0.09 281.288)"},violet:{50:"oklch(96.9% 0.016 293.756)",100:"oklch(94.3% 0.029 294.588)",200:"oklch(89.4% 0.057 293.283)",300:"oklch(81.1% 0.111 293.571)",400:"oklch(70.2% 0.183 293.541)",500:"oklch(60.6% 0.25 292.717)",600:"oklch(54.1% 0.281 293.009)",700:"oklch(49.1% 0.27 292.581)",800:"oklch(43.2% 0.232 292.759)",900:"oklch(38% 0.189 293.745)",950:"oklch(28.3% 0.141 291.089)"},purple:{50:"oklch(97.7% 0.014 308.299)",100:"oklch(94.6% 0.033 307.174)",200:"oklch(90.2% 0.063 306.703)",300:"oklch(82.7% 0.119 306.383)",400:"oklch(71.4% 0.203 305.504)",500:"oklch(62.7% 0.265 303.9)",600:"oklch(55.8% 0.288 302.321)",700:"oklch(49.6% 0.265 301.924)",800:"oklch(43.8% 0.218 303.724)",900:"oklch(38.1% 0.176 304.987)",950:"oklch(29.1% 0.149 302.717)"},fuchsia:{50:"oklch(97.7% 0.017 320.058)",100:"oklch(95.2% 0.037 318.852)",200:"oklch(90.3% 0.076 319.62)",300:"oklch(83.3% 0.145 321.434)",400:"oklch(74% 0.238 322.16)",500:"oklch(66.7% 0.295 322.15)",600:"oklch(59.1% 0.293 322.896)",700:"oklch(51.8% 0.253 323.949)",800:"oklch(45.2% 0.211 324.591)",900:"oklch(40.1% 0.17 325.612)",950:"oklch(29.3% 0.136 325.661)"},pink:{50:"oklch(97.1% 0.014 343.198)",100:"oklch(94.8% 0.028 342.258)",200:"oklch(89.9% 0.061 343.231)",300:"oklch(82.3% 0.12 346.018)",400:"oklch(71.8% 0.202 349.761)",500:"oklch(65.6% 0.241 354.308)",600:"oklch(59.2% 0.249 0.584)",700:"oklch(52.5% 0.223 3.958)",800:"oklch(45.9% 0.187 3.815)",900:"oklch(40.8% 0.153 2.432)",950:"oklch(28.4% 0.109 3.907)"},rose:{50:"oklch(96.9% 0.015 12.422)",100:"oklch(94.1% 0.03 12.58)",200:"oklch(89.2% 0.058 10.001)",300:"oklch(81% 0.117 11.638)",400:"oklch(71.2% 0.194 13.428)",500:"oklch(64.5% 0.246 16.439)",600:"oklch(58.6% 0.253 17.585)",700:"oklch(51.4% 0.222 16.935)",800:"oklch(45.5% 0.188 13.697)",900:"oklch(41% 0.159 10.272)",950:"oklch(27.1% 0.105 12.094)"}};function Ut(e){return{__BARE_VALUE__:e}}var Dt=Ut((e=>{if(ye(e.value))return e.value})),_t=Ut((e=>{if(ye(e.value))return`${e.value}%`})),Mt=Ut((e=>{if(ye(e.value))return`${e.value}px`})),Bt=Ut((e=>{if(ye(e.value))return`${e.value}ms`})),Lt=Ut((e=>{if(ye(e.value))return`${e.value}deg`})),Rt=Ut((e=>{if(null===e.fraction)return;let[t,r]=R(e.fraction,"/");return ye(t)&&ye(r)?e.fraction:void 0})),It=Ut((e=>{if(ye(Number(e.value)))return`repeat(${e.value}, minmax(0, 1fr))`})),Pt={accentColor:({theme:e})=>e("colors"),animation:{none:"none",spin:"spin 1s linear infinite",ping:"ping 1s cubic-bezier(0, 0, 0.2, 1) infinite",pulse:"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite",bounce:"bounce 1s infinite"},aria:{busy:'busy="true"',checked:'checked="true"',disabled:'disabled="true"',expanded:'expanded="true"',hidden:'hidden="true"',pressed:'pressed="true"',readonly:'readonly="true"',required:'required="true"',selected:'selected="true"'},aspectRatio:{auto:"auto",square:"1 / 1",video:"16 / 9",...Rt},backdropBlur:({theme:e})=>e("blur"),backdropBrightness:({theme:e})=>({...e("brightness"),..._t}),backdropContrast:({theme:e})=>({...e("contrast"),..._t}),backdropGrayscale:({theme:e})=>({...e("grayscale"),..._t}),backdropHueRotate:({theme:e})=>({...e("hueRotate"),...Lt}),backdropInvert:({theme:e})=>({...e("invert"),..._t}),backdropOpacity:({theme:e})=>({...e("opacity"),..._t}),backdropSaturate:({theme:e})=>({...e("saturate"),..._t}),backdropSepia:({theme:e})=>({...e("sepia"),..._t}),backgroundColor:({theme:e})=>e("colors"),backgroundImage:{none:"none","gradient-to-t":"linear-gradient(to top, var(--tw-gradient-stops))","gradient-to-tr":"linear-gradient(to top right, var(--tw-gradient-stops))","gradient-to-r":"linear-gradient(to right, var(--tw-gradient-stops))","gradient-to-br":"linear-gradient(to bottom right, var(--tw-gradient-stops))","gradient-to-b":"linear-gradient(to bottom, var(--tw-gradient-stops))","gradient-to-bl":"linear-gradient(to bottom left, var(--tw-gradient-stops))","gradient-to-l":"linear-gradient(to left, var(--tw-gradient-stops))","gradient-to-tl":"linear-gradient(to top left, var(--tw-gradient-stops))"},backgroundOpacity:({theme:e})=>e("opacity"),backgroundPosition:{bottom:"bottom",center:"center",left:"left","left-bottom":"left bottom","left-top":"left top",right:"right","right-bottom":"right bottom","right-top":"right top",top:"top"},backgroundSize:{auto:"auto",cover:"cover",contain:"contain"},blur:{0:"0",none:"",sm:"4px",DEFAULT:"8px",md:"12px",lg:"16px",xl:"24px","2xl":"40px","3xl":"64px"},borderColor:({theme:e})=>({DEFAULT:"currentcolor",...e("colors")}),borderOpacity:({theme:e})=>e("opacity"),borderRadius:{none:"0px",sm:"0.125rem",DEFAULT:"0.25rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},borderSpacing:({theme:e})=>e("spacing"),borderWidth:{DEFAULT:"1px",0:"0px",2:"2px",4:"4px",8:"8px",...Mt},boxShadow:{sm:"0 1px 2px 0 rgb(0 0 0 / 0.05)",DEFAULT:"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",md:"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",lg:"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",xl:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)","2xl":"0 25px 50px -12px rgb(0 0 0 / 0.25)",inner:"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)",none:"none"},boxShadowColor:({theme:e})=>e("colors"),brightness:{0:"0",50:".5",75:".75",90:".9",95:".95",100:"1",105:"1.05",110:"1.1",125:"1.25",150:"1.5",200:"2",..._t},caretColor:({theme:e})=>e("colors"),colors:()=>({...Wt}),columns:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12","3xs":"16rem","2xs":"18rem",xs:"20rem",sm:"24rem",md:"28rem",lg:"32rem",xl:"36rem","2xl":"42rem","3xl":"48rem","4xl":"56rem","5xl":"64rem","6xl":"72rem","7xl":"80rem",...Dt},container:{},content:{none:"none"},contrast:{0:"0",50:".5",75:".75",100:"1",125:"1.25",150:"1.5",200:"2",..._t},cursor:{auto:"auto",default:"default",pointer:"pointer",wait:"wait",text:"text",move:"move",help:"help","not-allowed":"not-allowed",none:"none","context-menu":"context-menu",progress:"progress",cell:"cell",crosshair:"crosshair","vertical-text":"vertical-text",alias:"alias",copy:"copy","no-drop":"no-drop",grab:"grab",grabbing:"grabbing","all-scroll":"all-scroll","col-resize":"col-resize","row-resize":"row-resize","n-resize":"n-resize","e-resize":"e-resize","s-resize":"s-resize","w-resize":"w-resize","ne-resize":"ne-resize","nw-resize":"nw-resize","se-resize":"se-resize","sw-resize":"sw-resize","ew-resize":"ew-resize","ns-resize":"ns-resize","nesw-resize":"nesw-resize","nwse-resize":"nwse-resize","zoom-in":"zoom-in","zoom-out":"zoom-out"},divideColor:({theme:e})=>e("borderColor"),divideOpacity:({theme:e})=>e("borderOpacity"),divideWidth:({theme:e})=>({...e("borderWidth"),...Mt}),dropShadow:{sm:"0 1px 1px rgb(0 0 0 / 0.05)",DEFAULT:["0 1px 2px rgb(0 0 0 / 0.1)","0 1px 1px rgb(0 0 0 / 0.06)"],md:["0 4px 3px rgb(0 0 0 / 0.07)","0 2px 2px rgb(0 0 0 / 0.06)"],lg:["0 10px 8px rgb(0 0 0 / 0.04)","0 4px 3px rgb(0 0 0 / 0.1)"],xl:["0 20px 13px rgb(0 0 0 / 0.03)","0 8px 5px rgb(0 0 0 / 0.08)"],"2xl":"0 25px 25px rgb(0 0 0 / 0.15)",none:"0 0 #0000"},fill:({theme:e})=>e("colors"),flex:{1:"1 1 0%",auto:"1 1 auto",initial:"0 1 auto",none:"none"},flexBasis:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%","1/5":"20%","2/5":"40%","3/5":"60%","4/5":"80%","1/6":"16.666667%","2/6":"33.333333%","3/6":"50%","4/6":"66.666667%","5/6":"83.333333%","1/12":"8.333333%","2/12":"16.666667%","3/12":"25%","4/12":"33.333333%","5/12":"41.666667%","6/12":"50%","7/12":"58.333333%","8/12":"66.666667%","9/12":"75%","10/12":"83.333333%","11/12":"91.666667%",full:"100%",...e("spacing")}),flexGrow:{0:"0",DEFAULT:"1",...Dt},flexShrink:{0:"0",DEFAULT:"1",...Dt},fontFamily:{sans:["ui-sans-serif","system-ui","sans-serif",'"Apple Color Emoji"','"Segoe UI Emoji"','"Segoe UI Symbol"','"Noto Color Emoji"'],serif:["ui-serif","Georgia","Cambria",'"Times New Roman"',"Times","serif"],mono:["ui-monospace","SFMono-Regular","Menlo","Monaco","Consolas",'"Liberation Mono"','"Courier New"',"monospace"]},fontSize:{xs:["0.75rem",{lineHeight:"1rem"}],sm:["0.875rem",{lineHeight:"1.25rem"}],base:["1rem",{lineHeight:"1.5rem"}],lg:["1.125rem",{lineHeight:"1.75rem"}],xl:["1.25rem",{lineHeight:"1.75rem"}],"2xl":["1.5rem",{lineHeight:"2rem"}],"3xl":["1.875rem",{lineHeight:"2.25rem"}],"4xl":["2.25rem",{lineHeight:"2.5rem"}],"5xl":["3rem",{lineHeight:"1"}],"6xl":["3.75rem",{lineHeight:"1"}],"7xl":["4.5rem",{lineHeight:"1"}],"8xl":["6rem",{lineHeight:"1"}],"9xl":["8rem",{lineHeight:"1"}]},fontWeight:{thin:"100",extralight:"200",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800",black:"900"},gap:({theme:e})=>e("spacing"),gradientColorStops:({theme:e})=>e("colors"),gradientColorStopPositions:{"0%":"0%","5%":"5%","10%":"10%","15%":"15%","20%":"20%","25%":"25%","30%":"30%","35%":"35%","40%":"40%","45%":"45%","50%":"50%","55%":"55%","60%":"60%","65%":"65%","70%":"70%","75%":"75%","80%":"80%","85%":"85%","90%":"90%","95%":"95%","100%":"100%",..._t},grayscale:{0:"0",DEFAULT:"100%",..._t},gridAutoColumns:{auto:"auto",min:"min-content",max:"max-content",fr:"minmax(0, 1fr)"},gridAutoRows:{auto:"auto",min:"min-content",max:"max-content",fr:"minmax(0, 1fr)"},gridColumn:{auto:"auto","span-1":"span 1 / span 1","span-2":"span 2 / span 2","span-3":"span 3 / span 3","span-4":"span 4 / span 4","span-5":"span 5 / span 5","span-6":"span 6 / span 6","span-7":"span 7 / span 7","span-8":"span 8 / span 8","span-9":"span 9 / span 9","span-10":"span 10 / span 10","span-11":"span 11 / span 11","span-12":"span 12 / span 12","span-full":"1 / -1"},gridColumnEnd:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",13:"13",...Dt},gridColumnStart:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",13:"13",...Dt},gridRow:{auto:"auto","span-1":"span 1 / span 1","span-2":"span 2 / span 2","span-3":"span 3 / span 3","span-4":"span 4 / span 4","span-5":"span 5 / span 5","span-6":"span 6 / span 6","span-7":"span 7 / span 7","span-8":"span 8 / span 8","span-9":"span 9 / span 9","span-10":"span 10 / span 10","span-11":"span 11 / span 11","span-12":"span 12 / span 12","span-full":"1 / -1"},gridRowEnd:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",13:"13",...Dt},gridRowStart:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",13:"13",...Dt},gridTemplateColumns:{none:"none",subgrid:"subgrid",1:"repeat(1, minmax(0, 1fr))",2:"repeat(2, minmax(0, 1fr))",3:"repeat(3, minmax(0, 1fr))",4:"repeat(4, minmax(0, 1fr))",5:"repeat(5, minmax(0, 1fr))",6:"repeat(6, minmax(0, 1fr))",7:"repeat(7, minmax(0, 1fr))",8:"repeat(8, minmax(0, 1fr))",9:"repeat(9, minmax(0, 1fr))",10:"repeat(10, minmax(0, 1fr))",11:"repeat(11, minmax(0, 1fr))",12:"repeat(12, minmax(0, 1fr))",...It},gridTemplateRows:{none:"none",subgrid:"subgrid",1:"repeat(1, minmax(0, 1fr))",2:"repeat(2, minmax(0, 1fr))",3:"repeat(3, minmax(0, 1fr))",4:"repeat(4, minmax(0, 1fr))",5:"repeat(5, minmax(0, 1fr))",6:"repeat(6, minmax(0, 1fr))",7:"repeat(7, minmax(0, 1fr))",8:"repeat(8, minmax(0, 1fr))",9:"repeat(9, minmax(0, 1fr))",10:"repeat(10, minmax(0, 1fr))",11:"repeat(11, minmax(0, 1fr))",12:"repeat(12, minmax(0, 1fr))",...It},height:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%","1/5":"20%","2/5":"40%","3/5":"60%","4/5":"80%","1/6":"16.666667%","2/6":"33.333333%","3/6":"50%","4/6":"66.666667%","5/6":"83.333333%",full:"100%",screen:"100vh",svh:"100svh",lvh:"100lvh",dvh:"100dvh",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),hueRotate:{0:"0deg",15:"15deg",30:"30deg",60:"60deg",90:"90deg",180:"180deg",...Lt},inset:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%",full:"100%",...e("spacing")}),invert:{0:"0",DEFAULT:"100%",..._t},keyframes:{spin:{to:{transform:"rotate(360deg)"}},ping:{"75%, 100%":{transform:"scale(2)",opacity:"0"}},pulse:{"50%":{opacity:".5"}},bounce:{"0%, 100%":{transform:"translateY(-25%)",animationTimingFunction:"cubic-bezier(0.8,0,1,1)"},"50%":{transform:"none",animationTimingFunction:"cubic-bezier(0,0,0.2,1)"}}},letterSpacing:{tighter:"-0.05em",tight:"-0.025em",normal:"0em",wide:"0.025em",wider:"0.05em",widest:"0.1em"},lineHeight:{none:"1",tight:"1.25",snug:"1.375",normal:"1.5",relaxed:"1.625",loose:"2",3:".75rem",4:"1rem",5:"1.25rem",6:"1.5rem",7:"1.75rem",8:"2rem",9:"2.25rem",10:"2.5rem"},listStyleType:{none:"none",disc:"disc",decimal:"decimal"},listStyleImage:{none:"none"},margin:({theme:e})=>({auto:"auto",...e("spacing")}),lineClamp:{1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",...Dt},maxHeight:({theme:e})=>({none:"none",full:"100%",screen:"100vh",svh:"100svh",lvh:"100lvh",dvh:"100dvh",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),maxWidth:({theme:e})=>({none:"none",xs:"20rem",sm:"24rem",md:"28rem",lg:"32rem",xl:"36rem","2xl":"42rem","3xl":"48rem","4xl":"56rem","5xl":"64rem","6xl":"72rem","7xl":"80rem",full:"100%",min:"min-content",max:"max-content",fit:"fit-content",prose:"65ch",...e("spacing")}),minHeight:({theme:e})=>({full:"100%",screen:"100vh",svh:"100svh",lvh:"100lvh",dvh:"100dvh",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),minWidth:({theme:e})=>({full:"100%",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),objectPosition:{bottom:"bottom",center:"center",left:"left","left-bottom":"left bottom","left-top":"left top",right:"right","right-bottom":"right bottom","right-top":"right top",top:"top"},opacity:{0:"0",5:"0.05",10:"0.1",15:"0.15",20:"0.2",25:"0.25",30:"0.3",35:"0.35",40:"0.4",45:"0.45",50:"0.5",55:"0.55",60:"0.6",65:"0.65",70:"0.7",75:"0.75",80:"0.8",85:"0.85",90:"0.9",95:"0.95",100:"1",..._t},order:{first:"-9999",last:"9999",none:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",...Dt},outlineColor:({theme:e})=>e("colors"),outlineOffset:{0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...Mt},outlineWidth:{0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...Mt},padding:({theme:e})=>e("spacing"),placeholderColor:({theme:e})=>e("colors"),placeholderOpacity:({theme:e})=>e("opacity"),ringColor:({theme:e})=>({DEFAULT:"currentcolor",...e("colors")}),ringOffsetColor:({theme:e})=>e("colors"),ringOffsetWidth:{0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...Mt},ringOpacity:({theme:e})=>({DEFAULT:"0.5",...e("opacity")}),ringWidth:{DEFAULT:"3px",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...Mt},rotate:{0:"0deg",1:"1deg",2:"2deg",3:"3deg",6:"6deg",12:"12deg",45:"45deg",90:"90deg",180:"180deg",...Lt},saturate:{0:"0",50:".5",100:"1",150:"1.5",200:"2",..._t},scale:{0:"0",50:".5",75:".75",90:".9",95:".95",100:"1",105:"1.05",110:"1.1",125:"1.25",150:"1.5",..._t},screens:{sm:"40rem",md:"48rem",lg:"64rem",xl:"80rem","2xl":"96rem"},scrollMargin:({theme:e})=>e("spacing"),scrollPadding:({theme:e})=>e("spacing"),sepia:{0:"0",DEFAULT:"100%",..._t},skew:{0:"0deg",1:"1deg",2:"2deg",3:"3deg",6:"6deg",12:"12deg",...Lt},space:({theme:e})=>e("spacing"),spacing:{px:"1px",0:"0px",.5:"0.125rem",1:"0.25rem",1.5:"0.375rem",2:"0.5rem",2.5:"0.625rem",3:"0.75rem",3.5:"0.875rem",4:"1rem",5:"1.25rem",6:"1.5rem",7:"1.75rem",8:"2rem",9:"2.25rem",10:"2.5rem",11:"2.75rem",12:"3rem",14:"3.5rem",16:"4rem",20:"5rem",24:"6rem",28:"7rem",32:"8rem",36:"9rem",40:"10rem",44:"11rem",48:"12rem",52:"13rem",56:"14rem",60:"15rem",64:"16rem",72:"18rem",80:"20rem",96:"24rem"},stroke:({theme:e})=>({none:"none",...e("colors")}),strokeWidth:{0:"0",1:"1",2:"2",...Dt},supports:{},data:{},textColor:({theme:e})=>e("colors"),textDecorationColor:({theme:e})=>e("colors"),textDecorationThickness:{auto:"auto","from-font":"from-font",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...Mt},textIndent:({theme:e})=>e("spacing"),textOpacity:({theme:e})=>e("opacity"),textUnderlineOffset:{auto:"auto",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...Mt},transformOrigin:{center:"center",top:"top","top-right":"top right",right:"right","bottom-right":"bottom right",bottom:"bottom","bottom-left":"bottom left",left:"left","top-left":"top left"},transitionDelay:{0:"0s",75:"75ms",100:"100ms",150:"150ms",200:"200ms",300:"300ms",500:"500ms",700:"700ms",1e3:"1000ms",...Bt},transitionDuration:{DEFAULT:"150ms",0:"0s",75:"75ms",100:"100ms",150:"150ms",200:"200ms",300:"300ms",500:"500ms",700:"700ms",1e3:"1000ms",...Bt},transitionProperty:{none:"none",all:"all",DEFAULT:"color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter",colors:"color, background-color, border-color, outline-color, text-decoration-color, fill, stroke",opacity:"opacity",shadow:"box-shadow",transform:"transform"},transitionTimingFunction:{DEFAULT:"cubic-bezier(0.4, 0, 0.2, 1)",linear:"linear",in:"cubic-bezier(0.4, 0, 1, 1)",out:"cubic-bezier(0, 0, 0.2, 1)","in-out":"cubic-bezier(0.4, 0, 0.2, 1)"},translate:({theme:e})=>({"1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%",full:"100%",...e("spacing")}),size:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%","1/5":"20%","2/5":"40%","3/5":"60%","4/5":"80%","1/6":"16.666667%","2/6":"33.333333%","3/6":"50%","4/6":"66.666667%","5/6":"83.333333%","1/12":"8.333333%","2/12":"16.666667%","3/12":"25%","4/12":"33.333333%","5/12":"41.666667%","6/12":"50%","7/12":"58.333333%","8/12":"66.666667%","9/12":"75%","10/12":"83.333333%","11/12":"91.666667%",full:"100%",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),width:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%","1/5":"20%","2/5":"40%","3/5":"60%","4/5":"80%","1/6":"16.666667%","2/6":"33.333333%","3/6":"50%","4/6":"66.666667%","5/6":"83.333333%","1/12":"8.333333%","2/12":"16.666667%","3/12":"25%","4/12":"33.333333%","5/12":"41.666667%","6/12":"50%","7/12":"58.333333%","8/12":"66.666667%","9/12":"75%","10/12":"83.333333%","11/12":"91.666667%",full:"100%",screen:"100vw",svw:"100svw",lvw:"100lvw",dvw:"100dvw",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),willChange:{auto:"auto",scroll:"scroll-position",contents:"contents",transform:"transform"},zIndex:{auto:"auto",0:"0",10:"10",20:"20",30:"30",40:"40",50:"50",...Dt}};function qt(e){return{theme:{...Pt,colors:({theme:e})=>e("color",{}),extend:{fontSize:({theme:e})=>({...e("text",{})}),boxShadow:({theme:e})=>({...e("shadow",{})}),animation:({theme:e})=>({...e("animate",{})}),aspectRatio:({theme:e})=>({...e("aspect",{})}),borderRadius:({theme:e})=>({...e("radius",{})}),screens:({theme:e})=>({...e("breakpoint",{})}),letterSpacing:({theme:e})=>({...e("tracking",{})}),lineHeight:({theme:e})=>({...e("leading",{})}),transitionDuration:{DEFAULT:e.get(["--default-transition-duration"])??null},transitionTimingFunction:{DEFAULT:e.get(["--default-transition-timing-function"])??null},maxWidth:({theme:e})=>({...e("container",{})})}}}}var Ht={blocklist:[],future:{},prefix:"",important:!1,darkMode:null,theme:{},plugins:[],content:{files:[]}};function Zt(e,t){let r={design:e,configs:[],plugins:[],content:{files:[]},theme:{},extend:{},result:structuredClone(Ht)};for(let e of t)Gt(r,e);for(let e of r.configs)"darkMode"in e&&void 0!==e.darkMode&&(r.result.darkMode=e.darkMode??null),"prefix"in e&&void 0!==e.prefix&&(r.result.prefix=e.prefix??""),"blocklist"in e&&void 0!==e.blocklist&&(r.result.blocklist=e.blocklist??[]),"important"in e&&void 0!==e.important&&(r.result.important=e.important??!1);let n=function(e){let t=new Set,r=kt(e.design,(()=>e.theme),o),n=Object.assign(r,{theme:r,colors:Wt});function o(e){return"function"==typeof e?e(n)??null:e??null}for(let r of e.configs){let n=r.theme??{},o=n.extend??{};for(let e in n)"extend"!==e&&t.add(e);Object.assign(e.theme,n);for(let t in o)e.extend[t]??=[],e.extend[t].push(o[t])}delete e.theme.extend;for(let t in e.extend){let r=[e.theme[t],...e.extend[t]];e.theme[t]=()=>wt({},r.map(o),Yt)}for(let t in e.theme)e.theme[t]=o(e.theme[t]);if(e.theme.screens&&"object"==typeof e.theme.screens)for(let t of Object.keys(e.theme.screens)){let r=e.theme.screens[t];r&&"object"==typeof r&&("raw"in r||"max"in r||"min"in r&&(e.theme.screens[t]=r.min))}return t}(r);return{resolvedConfig:{...r.result,content:r.content,theme:r.theme,plugins:r.plugins},replacedThemeKeys:n}}function Yt(e,t){return Array.isArray(e)&&vt(e[0])?e.concat(t):Array.isArray(t)&&vt(t[0])&&vt(e)?[e,...t]:Array.isArray(t)?t:void 0}function Gt(e,{config:t,base:r,path:n,reference:o}){let a=[];for(let e of t.plugins??[])"__isOptionsFunction"in e?a.push({...e(),reference:o}):"handler"in e?a.push({...e,reference:o}):a.push({handler:e,reference:o});if(Array.isArray(t.presets)&&0===t.presets.length)throw new Error("Error in the config file/plugin/preset. An empty preset (`preset: []`) is not currently supported.");for(let a of t.presets??[])Gt(e,{path:n,base:r,config:a,reference:o});for(let t of a)e.plugins.push(t),t.config&&Gt(e,{path:n,base:r,config:t.config,reference:!!t.reference});let i=t.content??[],l=Array.isArray(i)?i:i.files;for(let t of l)e.content.files.push("object"==typeof t?t:{base:r,pattern:t});e.configs.push(t)}function Jt(e,t){let r=e.theme.container||{};if("object"!=typeof r||null===r)return;let n=function({center:e,padding:t,screens:r},n){let o=[],a=null;if(e&&o.push(y("margin-inline","auto")),("string"==typeof t||"object"==typeof t&&null!==t&&"DEFAULT"in t)&&o.push(y("padding-inline","string"==typeof t?t:t.DEFAULT)),"object"==typeof r&&null!==r){a=new Map;let e=Array.from(n.theme.namespace("--breakpoint").entries());if(e.sort(((e,t)=>re(e[1],t[1],"asc"))),e.length>0){let[t]=e[0];o.push(k("@media",`(width >= --theme(--breakpoint-${t}))`,[y("max-width","none")]))}for(let[e,t]of Object.entries(r)){if("object"==typeof t){if(!("min"in t))continue;t=t.min}a.set(e,k("@media",`(width >= ${t})`,[y("max-width",t)]))}}if("object"==typeof t&&null!==t){let e=Object.entries(t).filter((([e])=>"DEFAULT"!==e)).map((([e,t])=>[e,n.theme.resolveValue(e,["--breakpoint"]),t])).filter(Boolean);e.sort(((e,t)=>re(e[1],t[1],"asc")));for(let[t,,r]of e)if(a&&a.has(t))a.get(t).nodes.push(y("padding-inline",r));else{if(a)continue;o.push(k("@media",`(width >= theme(--breakpoint-${t}))`,[y("padding-inline",r)]))}}if(a)for(let[,e]of a)o.push(e);return o}(r,t);0!==n.length&&t.utilities.static("container",(()=>structuredClone(n)))}function Xt({addVariant:e,config:t}){let r=t("darkMode",null),[n,o=".dark"]=Array.isArray(r)?r:[r];if("variant"===n){let e;if(Array.isArray(o)||"function"==typeof o?e=o:"string"==typeof o&&(e=[o]),Array.isArray(e))for(let t of e)".dark"===t?(n=!1,console.warn('When using `variant` for `darkMode`, you must provide a selector.\nExample: `darkMode: ["variant", ".your-selector &"]`')):t.includes("&")||(n=!1,console.warn('When using `variant` for `darkMode`, your selector must contain `&`.\nExample `darkMode: ["variant", ".your-selector &"]`'));o=e}null===n||("selector"===n?e("dark",`&:where(${o}, ${o} *)`):"media"===n?e("dark","@media (prefers-color-scheme: dark)"):"variant"===n?e("dark",o):"class"===n&&e("dark",`&:is(${o} *)`))}function Qt(e){return(Array.isArray(e)?e:[e]).map((e=>"string"==typeof e?{min:e}:e&&"object"==typeof e?e:null)).map((e=>{if(null===e)return null;if("raw"in e)return e.raw;let t="";return void 0!==e.max&&(t+=`${e.max} >= `),t+="width",void 0!==e.min&&(t+=` >= ${e.min}`),`(${t})`})).filter(Boolean).join(", ")}var er=/^[a-z]+$/;async function tr({designSystem:e,base:t,ast:r,loadModule:n,sources:o}){let a=0,i=[],l=[];A(r,((e,{parent:t,replaceWith:r,context:n})=>{if("at-rule"===e.kind){if("@plugin"===e.name){if(null!==t)throw new Error("`@plugin` cannot be nested.");let o=e.params.slice(1,-1);if(0===o.length)throw new Error("`@plugin` must have a path.");let l={};for(let t of e.nodes??[]){if("declaration"!==t.kind)throw new Error(`Unexpected \`@plugin\` option:\n\n${T([t])}\n\n\`@plugin\` options must be a flat list of declarations.`);if(void 0===t.value)continue;let e=R(t.value,",").map((e=>{if("null"===(e=e.trim()))return null;if("true"===e)return!0;if("false"===e)return!1;if(!Number.isNaN(Number(e)))return Number(e);if('"'===e[0]&&'"'===e[e.length-1]||"'"===e[0]&&"'"===e[e.length-1])return e.slice(1,-1);if("{"===e[0]&&"}"===e[e.length-1])throw new Error(`Unexpected \`@plugin\` option: Value of declaration \`${T([t]).trim()}\` is not supported.\n\nUsing an object as a plugin option is currently only supported in JavaScript configuration files.`);return e}));l[t.property]=1===e.length?e[0]:e}return i.push([{id:o,base:n.base,reference:!!n.reference},Object.keys(l).length>0?l:null]),r([]),void(a|=4)}if("@config"===e.name){if(e.nodes.length>0)throw new Error("`@config` cannot have a body.");if(null!==t)throw new Error("`@config` cannot be nested.");return l.push({id:e.params.slice(1,-1),base:n.base,reference:!!n.reference}),r([]),void(a|=4)}}})),function(e){for(let[t,r]of[["t","top"],["tr","top right"],["r","right"],["br","bottom right"],["b","bottom"],["bl","bottom left"],["l","left"],["tl","top left"]])e.utilities.static(`bg-gradient-to-${t}`,(()=>[y("--tw-gradient-position",`to ${r} in oklab`),y("background-image","linear-gradient(var(--tw-gradient-stops))")]));e.utilities.static("bg-left-top",(()=>[y("background-position","left top")])),e.utilities.static("bg-right-top",(()=>[y("background-position","right top")])),e.utilities.static("bg-left-bottom",(()=>[y("background-position","left bottom")])),e.utilities.static("bg-right-bottom",(()=>[y("background-position","right bottom")])),e.utilities.static("object-left-top",(()=>[y("object-position","left top")])),e.utilities.static("object-right-top",(()=>[y("object-position","right top")])),e.utilities.static("object-left-bottom",(()=>[y("object-position","left bottom")])),e.utilities.static("object-right-bottom",(()=>[y("object-position","right bottom")])),e.utilities.functional("max-w-screen",(t=>{if(!t.value||"arbitrary"===t.value.kind)return;let r=e.theme.resolve(t.value.value,["--breakpoint"]);return r?[y("max-width",r)]:void 0})),e.utilities.static("overflow-ellipsis",(()=>[y("text-overflow","ellipsis")])),e.utilities.static("decoration-slice",(()=>[y("-webkit-box-decoration-break","slice"),y("box-decoration-break","slice")])),e.utilities.static("decoration-clone",(()=>[y("-webkit-box-decoration-break","clone"),y("box-decoration-break","clone")])),e.utilities.functional("flex-shrink",(e=>{if(!e.modifier){if(!e.value)return[y("flex-shrink","1")];if("arbitrary"===e.value.kind)return[y("flex-shrink",e.value.value)];if(ye(e.value.value))return[y("flex-shrink",e.value.value)]}})),e.utilities.functional("flex-grow",(e=>{if(!e.modifier){if(!e.value)return[y("flex-grow","1")];if("arbitrary"===e.value.kind)return[y("flex-grow",e.value.value)];if(ye(e.value.value))return[y("flex-grow",e.value.value)]}}))}(e);let s=e.resolveThemeValue;if(e.resolveThemeValue=function(n,i){return n.startsWith("--")?s(n,i):(a|=rr({designSystem:e,base:t,ast:r,sources:o,configs:[],pluginDetails:[]}),e.resolveThemeValue(n,i))},!i.length&&!l.length)return 0;let[c,u]=await Promise.all([Promise.all(l.map((async({id:e,base:t,reference:r})=>{let o=await n(e,t,"config");return{path:e,base:o.base,config:o.module,reference:r}}))),Promise.all(i.map((async([{id:e,base:t,reference:r},o])=>{let a=await n(e,t,"plugin");return{path:e,base:a.base,plugin:a.module,options:o,reference:r}})))]);return a|=rr({designSystem:e,base:t,ast:r,sources:o,configs:c,pluginDetails:u}),a}function rr({designSystem:e,base:t,ast:r,sources:n,configs:o,pluginDetails:a}){let i=0,l=[...a.map((e=>{if(!e.options)return{config:{plugins:[e.plugin]},base:e.base,reference:e.reference};if("__isOptionsFunction"in e.plugin)return{config:{plugins:[e.plugin(e.options)]},base:e.base,reference:e.reference};throw new Error(`The plugin "${e.path}" does not accept options`)})),...o],{resolvedConfig:s}=Zt(e,[{config:qt(e.theme),base:t,reference:!0},...l,{config:{plugins:[Xt]},base:t,reference:!0}]),{resolvedConfig:c,replacedThemeKeys:u}=Zt(e,l),d=e.resolveThemeValue;e.resolveThemeValue=function(e,t){if("-"===e[0]&&"-"===e[1])return d(e,t);let r=h.theme(e,void 0);return Array.isArray(r)&&2===r.length?r[0]:Array.isArray(r)?r.join(", "):"string"==typeof r?r:void 0};let f,p={designSystem:e,ast:r,resolvedConfig:s,featuresRef:{set current(e){i|=e}}},h=Et({...p,referenceMode:!1});for(let{handler:e,reference:t}of s.plugins)t?(f||=Et({...p,referenceMode:!0}),e(f)):e(h);if(ft(e,c,u),Ft(e,c),function(e,t){let r=e.theme.aria||{},n=e.theme.supports||{},o=e.theme.data||{};if(Object.keys(r).length>0){let e=t.variants.get("aria"),n=e?.applyFn,o=e?.compounds;t.variants.functional("aria",((e,t)=>{let o=t.value;return o&&"named"===o.kind&&o.value in r?n?.(e,{...t,value:{kind:"arbitrary",value:r[o.value]}}):n?.(e,t)}),{compounds:o})}if(Object.keys(n).length>0){let e=t.variants.get("supports"),r=e?.applyFn,o=e?.compounds;t.variants.functional("supports",((e,t)=>{let o=t.value;return o&&"named"===o.kind&&o.value in n?r?.(e,{...t,value:{kind:"arbitrary",value:n[o.value]}}):r?.(e,t)}),{compounds:o})}if(Object.keys(o).length>0){let e=t.variants.get("data"),r=e?.applyFn,n=e?.compounds;t.variants.functional("data",((e,t)=>{let n=t.value;return n&&"named"===n.kind&&n.value in o?r?.(e,{...t,value:{kind:"arbitrary",value:o[n.value]}}):r?.(e,t)}),{compounds:n})}}(c,e),function(e,t){let r=e.theme.screens||{},n=t.variants.get("min")?.order??0,o=[];for(let[e,a]of Object.entries(r)){let r=function(r){t.variants.static(e,(e=>{e.nodes=[k("@media",c,e.nodes)]}),{order:r})},i=t.variants.get(e),l=t.theme.resolveValue(e,["--breakpoint"]);if(i&&l&&!t.theme.hasDefault(`--breakpoint-${e}`))continue;let s=!0;"string"==typeof a&&(s=!1);let c=Qt(a);s?o.push(r):r(n)}if(0!==o.length){for(let[,e]of t.variants.variants)e.order>n&&(e.order+=o.length);t.variants.compareFns=new Map(Array.from(t.variants.compareFns).map((([e,t])=>(e>n&&(e+=o.length),[e,t]))));for(let[e,t]of o.entries())t(n+e+1)}}(c,e),Jt(c,e),!e.theme.prefix&&s.prefix){if(s.prefix.endsWith("-")&&(s.prefix=s.prefix.slice(0,-1),console.warn(`The prefix "${s.prefix}" is invalid. Prefixes must be lowercase ASCII letters (a-z) only and is written as a variant before all utilities. We have fixed up the prefix for you. Remove the trailing \`-\` to silence this warning.`)),!er.test(s.prefix))throw new Error(`The prefix "${s.prefix}" is invalid. Prefixes must be lowercase ASCII letters (a-z) only.`);e.theme.prefix=s.prefix}if(!e.important&&!0===s.important&&(e.important=!0),"string"==typeof s.important){let e=s.important;A(r,((t,{replaceWith:r,parent:n})=>{if("at-rule"===t.kind&&"@tailwind"===t.name&&"utilities"===t.params)return"rule"===n?.kind&&n.selector===e||r(w(e,[t])),2}))}for(let t of s.blocklist)e.invalidCandidates.add(t);for(let e of s.content.files){if("raw"in e)throw new Error(`Error in the config file/plugin/preset. The \`content\` key contains a \`raw\` entry:\n\n${JSON.stringify(e,null,2)}\n\nThis feature is not currently supported.`);let t=!1;"!"==e.pattern[0]&&(t=!0,e.pattern=e.pattern.slice(1)),n.push({...e,negated:t})}return i}function nr({ast:e}){let t=new c((e=>function(e){let t=[0];for(let r=0;r0;){let o=n>>1,a=r+o;t[a]<=e?(r=a+1,n=n-o-1):n=o}return r-=1,{line:r+1,column:e-t[r]}},findOffset:function({line:e,column:r}){e-=1,e=Math.min(Math.max(e,0),t.length-1);let n=t[e],o=t[e+1]??n;return Math.min(Math.max(n+r,0),o)}}}(e.code))),r=new c((e=>({url:e.file,content:e.code,ignore:!1}))),n={file:null,sources:[],mappings:[]};A(e,(e=>{if(!e.src||!e.dst)return;let o=r.get(e.src[0]);if(!o.content)return;let a=t.get(e.src[0]),i=t.get(e.dst[0]),l=o.content.slice(e.src[1],e.src[2]),s=0;for(let t of l.split("\n")){if(""!==t.trim()){let t=a.find(e.src[1]+s),r=i.find(e.dst[1]);n.mappings.push({name:null,originalPosition:{source:o,...t},generatedPosition:r})}s+=t.length,s+=1}let c=a.find(e.src[2]),u=i.find(e.dst[2]);n.mappings.push({name:null,originalPosition:{source:o,...c},generatedPosition:u})}));for(let e of t.keys())n.sources.push(r.get(e));return n.mappings.sort(((e,t)=>e.generatedPosition.line-t.generatedPosition.line||e.generatedPosition.column-t.generatedPosition.column||(e.originalPosition?.line??0)-(t.originalPosition?.line??0)||(e.originalPosition?.column??0)-(t.originalPosition?.column??0))),n}var or=/^(-?\d+)\.\.(-?\d+)(?:\.\.(-?\d+))?$/;function ar(e){let t=e.indexOf("{");if(-1===t)return[e];let r=[],n=e.slice(0,t),o=e.slice(t),a=0,i=o.lastIndexOf("}");for(let e=0;e0&&(a=-a);for(let r=e;o?r<=t:r>=t;r+=a)i.push(r.toString())}return i}(s):R(s,","),l=l.flatMap((e=>ar(e)));let u=ar(c);for(let e of u)for(let t of l)r.push(n+t+e);return r}var ir=/^[a-z]+$/;function lr(){throw new Error("No `loadModule` function provided to `compile`")}function sr(){throw new Error("No `loadStylesheet` function provided to `compile`")}async function cr(e,{base:t="",from:r,loadModule:n=lr,loadStylesheet:i=sr}={}){let l=0;e=[$({base:t},e)],l|=await ut(e,t,i,0,void 0!==r);let c=null,u=new s,d=[],f=[],g=null,v=null,x=[],j=[],C=[],S=[],K=null;A(e,((e,{parent:t,replaceWith:r,context:n})=>{if("at-rule"===e.kind){if("@tailwind"===e.name&&("utilities"===e.params||e.params.startsWith("utilities"))){if(null!==v)return void r([]);if(n.reference)return void r([]);let t=R(e.params," ");for(let e of t)if(e.startsWith("source(")){let t=e.slice(7,-1);if("none"===t){K=t;continue}if('"'===t[0]&&'"'!==t[t.length-1]||"'"===t[0]&&"'"!==t[t.length-1]||"'"!==t[0]&&'"'!==t[0])throw new Error("`source(…)` paths must be quoted.");K={base:n.sourceBase??n.base,pattern:t.slice(1,-1)}}v=e,l|=16}if("@utility"===e.name){if(null!==t)throw new Error("`@utility` cannot be nested.");if(0===e.nodes.length)throw new Error(`\`@utility ${e.params}\` is empty. Utilities should include at least one property.`);let r=function(e){let t=e.params;return Ke.test(t)?r=>{let n={"--value":{usedSpacingInteger:!1,usedSpacingNumber:!1,themeKeys:new Set,literals:new Set},"--modifier":{usedSpacingInteger:!1,usedSpacingNumber:!1,themeKeys:new Set,literals:new Set}};A(e.nodes,(e=>{if("declaration"!==e.kind||!e.value||!e.value.includes("--value(")&&!e.value.includes("--modifier("))return;let t=m(e.value);p(t,(e=>{if("function"!==e.kind)return;if(!("--spacing"!==e.value||n["--modifier"].usedSpacingNumber&&n["--value"].usedSpacingNumber))return p(e.nodes,(e=>{if("function"!==e.kind||"--value"!==e.value&&"--modifier"!==e.value)return;let t=e.value;for(let r of e.nodes)if("word"===r.kind)if("integer"===r.value)n[t].usedSpacingInteger||=!0;else if("number"===r.value&&(n[t].usedSpacingNumber||=!0,n["--modifier"].usedSpacingNumber&&n["--value"].usedSpacingNumber))return 2})),0;if("--value"!==e.value&&"--modifier"!==e.value)return;let t=R(h(e.nodes),",");for(let[e,r]of t.entries())r=r.replace(/\\\*/g,"*"),r=r.replace(/--(.*?)\s--(.*?)/g,"--$1-*--$2"),r=r.replace(/\s+/g,""),r=r.replace(/(-\*){2,}/g,"-*"),"-"===r[0]&&"-"===r[1]&&!r.includes("-*")&&(r+="-*"),t[e]=r;e.nodes=m(t.join(","));for(let t of e.nodes)if("word"!==t.kind||'"'!==t.value[0]&&"'"!==t.value[0]||t.value[0]!==t.value[t.value.length-1]){if("word"===t.kind&&"-"===t.value[0]&&"-"===t.value[1]){let r=t.value.replace(/-\*.*$/g,"");n[e.value].themeKeys.add(r)}else if("word"===t.kind&&("["!==t.value[0]||"]"!==t.value[t.value.length-1])&&!_e.includes(t.value)){console.warn(`Unsupported bare value data type: "${t.value}".\nOnly valid data types are: ${_e.map((e=>`"${e}"`)).join(", ")}.\n`);let r=t.value,n=structuredClone(e),o="¶";p(n.nodes,((e,{replaceWith:t})=>{"word"===e.kind&&e.value===r&&t({kind:"word",value:o})}));let a="^".repeat(h([t]).length),i=h([n]).indexOf(o),l=["```css",h([e])," ".repeat(i)+a,"```"].join("\n");console.warn(l)}}else{let r=t.value.slice(1,-1);n[e.value].literals.add(r)}})),e.value=h(t)})),r.utilities.functional(t.slice(0,-2),(t=>{let n=structuredClone(e),o=t.value,a=t.modifier;if(null===o)return;let i=!1,l=!1,s=!1,c=!1,u=new Map,d=!1;if(A([n],((e,{parent:t,replaceWith:n})=>{if("rule"!==t?.kind&&"at-rule"!==t?.kind||"declaration"!==e.kind||!e.value)return;let f=m(e.value);0===(p(f,((f,{replaceWith:p})=>{if("function"===f.kind){if("--value"===f.value){i=!0;let a=Me(o,f,r);return a?(l=!0,a.ratio?d=!0:u.set(e,t),p(a.nodes),1):(i||=!1,n([]),2)}if("--modifier"===f.value){if(null===a)return n([]),2;s=!0;let e=Me(a,f,r);return e?(c=!0,p(e.nodes),1):(s||=!1,n([]),2)}}}))??0)&&(e.value=h(f))})),i&&!l||s&&!c||d&&c||a&&!d&&!c)return null;if(d)for(let[e,t]of u){let r=t.nodes.indexOf(e);-1!==r&&t.nodes.splice(r,1)}return n.nodes})),r.utilities.suggest(t.slice(0,-2),(()=>{let e=[],t=[];for(let[o,{literals:a,usedSpacingNumber:i,usedSpacingInteger:l,themeKeys:s}]of[[e,n["--value"]],[t,n["--modifier"]]]){for(let e of a)o.push(e);if(i)o.push(...Ee);else if(l)for(let e of Ee)ye(e)&&o.push(e);for(let e of r.theme.keysInNamespaces(s))o.push(e.replace(De,((e,t,r)=>`${t}.${r}`)))}return[{values:e,modifiers:t}]}))}:Se.test(t)?r=>{r.utilities.static(t,(()=>structuredClone(e.nodes)))}:null}(e);if(null===r)throw new Error(`\`@utility ${e.params}\` defines an invalid utility name. Utilities should be alphanumeric and start with a lowercase letter.`);f.push(r)}if("@source"===e.name){if(e.nodes.length>0)throw new Error("`@source` cannot have a body.");if(null!==t)throw new Error("`@source` cannot be nested.");let o=!1,a=!1,i=e.params;if("n"===i[0]&&i.startsWith("not ")&&(o=!0,i=i.slice(4)),"i"===i[0]&&i.startsWith("inline(")&&(a=!0,i=i.slice(7,-1)),'"'===i[0]&&'"'!==i[i.length-1]||"'"===i[0]&&"'"!==i[i.length-1]||"'"!==i[0]&&'"'!==i[0])throw new Error("`@source` paths must be quoted.");let l=i.slice(1,-1);if(a){let e=o?S:C,t=R(l," ");for(let r of t)for(let t of ar(r))e.push(t)}else j.push({base:n.base,pattern:l,negated:o});return void r([])}if("@variant"===e.name&&(null===t?0===e.nodes.length?e.name="@custom-variant":(A(e.nodes,(t=>{if("at-rule"===t.kind&&"@slot"===t.name)return e.name="@custom-variant",2})),"@variant"===e.name&&x.push(e)):x.push(e)),"@custom-variant"===e.name){if(null!==t)throw new Error("`@custom-variant` cannot be nested.");r([]);let[n,o]=R(e.params," ");if(!Ge.test(n))throw new Error(`\`@custom-variant ${n}\` defines an invalid variant name. Variants should only contain alphanumeric, dashes or underscore characters.`);if(e.nodes.length>0&&o)throw new Error(`\`@custom-variant ${n}\` cannot have both a selector and a body.`);if(0===e.nodes.length){if(!o)throw new Error(`\`@custom-variant ${n}\` has no selector or body.`);let e=R(o.slice(1,-1),",");if(0===e.length||e.some((e=>""===e.trim())))throw new Error(`\`@custom-variant ${n} (${e.join(",")})\` selector is invalid.`);let t=[],r=[];for(let n of e)n=n.trim(),"@"===n[0]?t.push(n):r.push(n);return void d.push((e=>{e.variants.static(n,(e=>{let n=[];r.length>0&&n.push(w(r.join(", "),e.nodes));for(let r of t)n.push(b(r,e.nodes));e.nodes=n}),{compounds:Xe([...r,...t])})}))}return void d.push((t=>{t.variants.fromAst(n,e.nodes)}))}if("@media"===e.name){let t=R(e.params," "),o=[];for(let r of t)if(r.startsWith("source(")){let t=r.slice(7,-1);A(e.nodes,((e,{replaceWith:r})=>{if("at-rule"===e.kind&&"@tailwind"===e.name&&"utilities"===e.params)return e.params+=` source(${t})`,r([$({sourceBase:n.base},[e])]),2}))}else if(r.startsWith("theme(")){let t=r.slice(6,-1),n=t.includes("reference");A(e.nodes,(e=>{if("at-rule"!==e.kind){if(n)throw new Error('Files imported with `@import "…" theme(reference)` must only contain `@theme` blocks.\nUse `@reference "…";` instead.');return 0}if("@theme"===e.name)return e.params+=" "+t,1}))}else if(r.startsWith("prefix(")){let t=r.slice(7,-1);A(e.nodes,(e=>{if("at-rule"===e.kind&&"@theme"===e.name)return e.params+=` prefix(${t})`,1}))}else"important"===r?c=!0:"reference"===r?e.nodes=[$({reference:!0},e.nodes)]:o.push(r);o.length>0?e.params=o.join(" "):t.length>0&&r(e.nodes)}if("@theme"===e.name){let[t,o]=function(e){let t=0,r=null;for(let n of R(e," "))"reference"===n?t|=2:"inline"===n?t|=1:"default"===n?t|=4:"static"===n?t|=8:n.startsWith("prefix(")&&n.endsWith(")")&&(r=n.slice(7,-1));return[t,r]}(e.params);if(n.reference&&(t|=2),o){if(!ir.test(o))throw new Error(`The prefix "${o}" is invalid. Prefixes must be lowercase ASCII letters (a-z) only.`);u.prefix=o}return A(e.nodes,(r=>{if("at-rule"===r.kind&&"@keyframes"===r.name)return u.addKeyframes(r),1;if("comment"===r.kind)return;if("declaration"===r.kind&&r.property.startsWith("--"))return void u.add(a(r.property),r.value??"",t,r.src);let n=T([k(e.name,e.params,[r])]).split("\n").map(((e,t,r)=>`${0===t||t>=r.length-2?" ":">"} ${e}`)).join("\n");throw new Error(`\`@theme\` blocks must only contain custom properties or \`@keyframes\`.\n\n${n}`)})),g?r([]):(g=w(":root, :host",[]),g.src=e.src,r([g])),1}}}));let E=tt(u);if(c&&(E.important=c),S.length>0)for(let e of S)E.invalidCandidates.add(e);l|=await tr({designSystem:E,base:t,ast:e,loadModule:n,sources:j});for(let e of d)e(E);for(let e of f)e(E);if(g){let t=[];for(let[e,r]of E.theme.entries()){if(2&r.options)continue;let n=y(o(e),r.value);n.src=r.src,t.push(n)}let r=E.theme.getKeyframes();for(let t of r)e.push($({theme:!0},[z([t])]));g.nodes=[$({theme:!0},t)]}if(v){let e=v;e.kind="context",e.context={}}if(x.length>0){for(let e of x){let t=w("&",e.nodes),r=e.params,n=E.parseVariant(r);if(null===n)throw new Error(`Cannot use \`@variant\` with unknown variant: ${r}`);if(null===ot(t,n,E.variants))throw new Error(`Cannot use \`@variant\` with variant: ${r}`);Object.assign(e,t)}l|=32}return l|=Pe(e,E),l|=st(e,E),A(e,((e,{replaceWith:t})=>{if("at-rule"===e.kind)return"@utility"===e.name&&t([]),1})),{designSystem:E,ast:e,sources:j,root:K,utilitiesNode:v,features:l,inlineCandidates:C}}async function ur(e,r={}){let n=t(e,{from:r.from}),o=await async function(e,t={}){let{designSystem:r,ast:n,sources:o,root:a,utilitiesNode:i,features:l,inlineCandidates:s}=await cr(e,t);function c(e){r.invalidCandidates.add(e)}n.unshift(x("! tailwindcss v4.1.7 | MIT License | https://tailwindcss.com "));let u=new Set,d=null,f=0,p=!1;for(let e of s)r.invalidCandidates.has(e)||(u.add(e),p=!0);return{sources:o,root:a,features:l,build(o){if(0===l)return e;if(!i)return d??=C(n,r,t.polyfills),d;let a=p,s=!1;p=!1;let h=u.size;for(let e of o)if(!r.invalidCandidates.has(e))if("-"===e[0]&&"-"===e[1]){let t=r.theme.markUsedVariable(e);a||=t,s||=t}else u.add(e),a||=u.size!==h;if(!a)return d??=C(n,r,t.polyfills),d;let m=nt(u,r,{onInvalidCandidate:c}).astNodes;return t.from&&A(m,(e=>{e.src??=i.src})),s||f!==m.length?(f=m.length,i.nodes=m,d=C(n,r,t.polyfills),d):(d??=C(n,r,t.polyfills),d)}}}(n,r),a=n,i=e;return{...o,build(e){let t=o.build(e);return t===a||(i=T(t,!!r.from),a=t),i},buildSourceMap:()=>nr({ast:a})}}var dr={index:"@layer theme, base, components, utilities;\n\n@import './theme.css' layer(theme);\n@import './preflight.css' layer(base);\n@import './utilities.css' layer(utilities);\n",preflight:"/*\n 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n 2. Remove default margins and padding\n 3. Reset all borders.\n*/\n\n*,\n::after,\n::before,\n::backdrop,\n::file-selector-button {\n box-sizing: border-box; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 2 */\n border: 0 solid; /* 3 */\n}\n\n/*\n 1. Use a consistent sensible line-height in all browsers.\n 2. Prevent adjustments of font size after orientation changes in iOS.\n 3. Use a more readable tab size.\n 4. Use the user's configured `sans` font-family by default.\n 5. Use the user's configured `sans` font-feature-settings by default.\n 6. Use the user's configured `sans` font-variation-settings by default.\n 7. Disable tap highlights on iOS.\n*/\n\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n tab-size: 4; /* 3 */\n font-family: --theme(\n --default-font-family,\n ui-sans-serif,\n system-ui,\n sans-serif,\n 'Apple Color Emoji',\n 'Segoe UI Emoji',\n 'Segoe UI Symbol',\n 'Noto Color Emoji'\n ); /* 4 */\n font-feature-settings: --theme(--default-font-feature-settings, normal); /* 5 */\n font-variation-settings: --theme(--default-font-variation-settings, normal); /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n\n/*\n 1. Add the correct height in Firefox.\n 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n 3. Reset the default border style to a 1px solid border.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\n Add the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\n Remove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\n Reset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n}\n\n/*\n Add the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n 1. Use the user's configured `mono` font-family by default.\n 2. Use the user's configured `mono` font-feature-settings by default.\n 3. Use the user's configured `mono` font-variation-settings by default.\n 4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: --theme(\n --default-mono-font-family,\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n 'Liberation Mono',\n 'Courier New',\n monospace\n ); /* 1 */\n font-feature-settings: --theme(--default-mono-font-feature-settings, normal); /* 2 */\n font-variation-settings: --theme(--default-mono-font-variation-settings, normal); /* 3 */\n font-size: 1em; /* 4 */\n}\n\n/*\n Add the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\n Prevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n 3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n Use the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\n Add the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\n Add the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\n Make lists unstyled by default.\n*/\n\nol,\nul,\nmenu {\n list-style: none;\n}\n\n/*\n 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\n Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/*\n 1. Inherit font styles in all browsers.\n 2. Remove border radius in all browsers.\n 3. Remove background color in all browsers.\n 4. Ensure consistent opacity for disabled states in all browsers.\n*/\n\nbutton,\ninput,\nselect,\noptgroup,\ntextarea,\n::file-selector-button {\n font: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n border-radius: 0; /* 2 */\n background-color: transparent; /* 3 */\n opacity: 1; /* 4 */\n}\n\n/*\n Restore default font weight.\n*/\n\n:where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n}\n\n/*\n Restore indentation.\n*/\n\n:where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n}\n\n/*\n Restore space after button.\n*/\n\n::file-selector-button {\n margin-inline-end: 4px;\n}\n\n/*\n Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n*/\n\n::placeholder {\n opacity: 1;\n}\n\n/*\n Set the default placeholder color to a semi-transparent version of the current text color in browsers that do not\n crash when using `color-mix(…)` with `currentcolor`. (https://github.com/tailwindlabs/tailwindcss/issues/17194)\n*/\n\n@supports (not (-webkit-appearance: -apple-pay-button)) /* Not Safari */ or\n (contain-intrinsic-size: 1px) /* Safari 17+ */ {\n ::placeholder {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n}\n\n/*\n Prevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n Remove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n 1. Ensure date/time inputs have the same height when empty in iOS Safari.\n 2. Ensure text alignment can be changed on date/time inputs in iOS Safari.\n*/\n\n::-webkit-date-and-time-value {\n min-height: 1lh; /* 1 */\n text-align: inherit; /* 2 */\n}\n\n/*\n Prevent height from changing on date/time inputs in macOS Safari when the input is set to `display: block`.\n*/\n\n::-webkit-datetime-edit {\n display: inline-flex;\n}\n\n/*\n Remove excess padding from pseudo-elements in date/time inputs to ensure consistent height across browsers.\n*/\n\n::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n}\n\n::-webkit-datetime-edit,\n::-webkit-datetime-edit-year-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-minute-field,\n::-webkit-datetime-edit-second-field,\n::-webkit-datetime-edit-millisecond-field,\n::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n}\n\n/*\n Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\n Correct the inability to style the border radius in iOS Safari.\n*/\n\nbutton,\ninput:where([type='button'], [type='reset'], [type='submit']),\n::file-selector-button {\n appearance: button;\n}\n\n/*\n Correct the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n Make elements with the HTML hidden attribute stay hidden by default.\n*/\n\n[hidden]:where(:not([hidden='until-found'])) {\n display: none !important;\n}\n",theme:"@theme default {\n --font-sans:\n ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n 'Noto Color Emoji';\n --font-serif: ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif;\n --font-mono:\n ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',\n monospace;\n\n --color-red-50: oklch(97.1% 0.013 17.38);\n --color-red-100: oklch(93.6% 0.032 17.717);\n --color-red-200: oklch(88.5% 0.062 18.334);\n --color-red-300: oklch(80.8% 0.114 19.571);\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-600: oklch(57.7% 0.245 27.325);\n --color-red-700: oklch(50.5% 0.213 27.518);\n --color-red-800: oklch(44.4% 0.177 26.899);\n --color-red-900: oklch(39.6% 0.141 25.723);\n --color-red-950: oklch(25.8% 0.092 26.042);\n\n --color-orange-50: oklch(98% 0.016 73.684);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-200: oklch(90.1% 0.076 70.697);\n --color-orange-300: oklch(83.7% 0.128 66.29);\n --color-orange-400: oklch(75% 0.183 55.934);\n --color-orange-500: oklch(70.5% 0.213 47.604);\n --color-orange-600: oklch(64.6% 0.222 41.116);\n --color-orange-700: oklch(55.3% 0.195 38.402);\n --color-orange-800: oklch(47% 0.157 37.304);\n --color-orange-900: oklch(40.8% 0.123 38.172);\n --color-orange-950: oklch(26.6% 0.079 36.259);\n\n --color-amber-50: oklch(98.7% 0.022 95.277);\n --color-amber-100: oklch(96.2% 0.059 95.617);\n --color-amber-200: oklch(92.4% 0.12 95.746);\n --color-amber-300: oklch(87.9% 0.169 91.605);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-500: oklch(76.9% 0.188 70.08);\n --color-amber-600: oklch(66.6% 0.179 58.318);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-amber-800: oklch(47.3% 0.137 46.201);\n --color-amber-900: oklch(41.4% 0.112 45.904);\n --color-amber-950: oklch(27.9% 0.077 45.635);\n\n --color-yellow-50: oklch(98.7% 0.026 102.212);\n --color-yellow-100: oklch(97.3% 0.071 103.193);\n --color-yellow-200: oklch(94.5% 0.129 101.54);\n --color-yellow-300: oklch(90.5% 0.182 98.111);\n --color-yellow-400: oklch(85.2% 0.199 91.936);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\n --color-yellow-700: oklch(55.4% 0.135 66.442);\n --color-yellow-800: oklch(47.6% 0.114 61.907);\n --color-yellow-900: oklch(42.1% 0.095 57.708);\n --color-yellow-950: oklch(28.6% 0.066 53.813);\n\n --color-lime-50: oklch(98.6% 0.031 120.757);\n --color-lime-100: oklch(96.7% 0.067 122.328);\n --color-lime-200: oklch(93.8% 0.127 124.321);\n --color-lime-300: oklch(89.7% 0.196 126.665);\n --color-lime-400: oklch(84.1% 0.238 128.85);\n --color-lime-500: oklch(76.8% 0.233 130.85);\n --color-lime-600: oklch(64.8% 0.2 131.684);\n --color-lime-700: oklch(53.2% 0.157 131.589);\n --color-lime-800: oklch(45.3% 0.124 130.933);\n --color-lime-900: oklch(40.5% 0.101 131.063);\n --color-lime-950: oklch(27.4% 0.072 132.109);\n\n --color-green-50: oklch(98.2% 0.018 155.826);\n --color-green-100: oklch(96.2% 0.044 156.743);\n --color-green-200: oklch(92.5% 0.084 155.995);\n --color-green-300: oklch(87.1% 0.15 154.449);\n --color-green-400: oklch(79.2% 0.209 151.711);\n --color-green-500: oklch(72.3% 0.219 149.579);\n --color-green-600: oklch(62.7% 0.194 149.214);\n --color-green-700: oklch(52.7% 0.154 150.069);\n --color-green-800: oklch(44.8% 0.119 151.328);\n --color-green-900: oklch(39.3% 0.095 152.535);\n --color-green-950: oklch(26.6% 0.065 152.934);\n\n --color-emerald-50: oklch(97.9% 0.021 166.113);\n --color-emerald-100: oklch(95% 0.052 163.051);\n --color-emerald-200: oklch(90.5% 0.093 164.15);\n --color-emerald-300: oklch(84.5% 0.143 164.978);\n --color-emerald-400: oklch(76.5% 0.177 163.223);\n --color-emerald-500: oklch(69.6% 0.17 162.48);\n --color-emerald-600: oklch(59.6% 0.145 163.225);\n --color-emerald-700: oklch(50.8% 0.118 165.612);\n --color-emerald-800: oklch(43.2% 0.095 166.913);\n --color-emerald-900: oklch(37.8% 0.077 168.94);\n --color-emerald-950: oklch(26.2% 0.051 172.552);\n\n --color-teal-50: oklch(98.4% 0.014 180.72);\n --color-teal-100: oklch(95.3% 0.051 180.801);\n --color-teal-200: oklch(91% 0.096 180.426);\n --color-teal-300: oklch(85.5% 0.138 181.071);\n --color-teal-400: oklch(77.7% 0.152 181.912);\n --color-teal-500: oklch(70.4% 0.14 182.503);\n --color-teal-600: oklch(60% 0.118 184.704);\n --color-teal-700: oklch(51.1% 0.096 186.391);\n --color-teal-800: oklch(43.7% 0.078 188.216);\n --color-teal-900: oklch(38.6% 0.063 188.416);\n --color-teal-950: oklch(27.7% 0.046 192.524);\n\n --color-cyan-50: oklch(98.4% 0.019 200.873);\n --color-cyan-100: oklch(95.6% 0.045 203.388);\n --color-cyan-200: oklch(91.7% 0.08 205.041);\n --color-cyan-300: oklch(86.5% 0.127 207.078);\n --color-cyan-400: oklch(78.9% 0.154 211.53);\n --color-cyan-500: oklch(71.5% 0.143 215.221);\n --color-cyan-600: oklch(60.9% 0.126 221.723);\n --color-cyan-700: oklch(52% 0.105 223.128);\n --color-cyan-800: oklch(45% 0.085 224.283);\n --color-cyan-900: oklch(39.8% 0.07 227.392);\n --color-cyan-950: oklch(30.2% 0.056 229.695);\n\n --color-sky-50: oklch(97.7% 0.013 236.62);\n --color-sky-100: oklch(95.1% 0.026 236.824);\n --color-sky-200: oklch(90.1% 0.058 230.902);\n --color-sky-300: oklch(82.8% 0.111 230.318);\n --color-sky-400: oklch(74.6% 0.16 232.661);\n --color-sky-500: oklch(68.5% 0.169 237.323);\n --color-sky-600: oklch(58.8% 0.158 241.966);\n --color-sky-700: oklch(50% 0.134 242.749);\n --color-sky-800: oklch(44.3% 0.11 240.79);\n --color-sky-900: oklch(39.1% 0.09 240.876);\n --color-sky-950: oklch(29.3% 0.066 243.157);\n\n --color-blue-50: oklch(97% 0.014 254.604);\n --color-blue-100: oklch(93.2% 0.032 255.585);\n --color-blue-200: oklch(88.2% 0.059 254.128);\n --color-blue-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-600: oklch(54.6% 0.245 262.881);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-blue-800: oklch(42.4% 0.199 265.638);\n --color-blue-900: oklch(37.9% 0.146 265.522);\n --color-blue-950: oklch(28.2% 0.091 267.935);\n\n --color-indigo-50: oklch(96.2% 0.018 272.314);\n --color-indigo-100: oklch(93% 0.034 272.788);\n --color-indigo-200: oklch(87% 0.065 274.039);\n --color-indigo-300: oklch(78.5% 0.115 274.713);\n --color-indigo-400: oklch(67.3% 0.182 276.935);\n --color-indigo-500: oklch(58.5% 0.233 277.117);\n --color-indigo-600: oklch(51.1% 0.262 276.966);\n --color-indigo-700: oklch(45.7% 0.24 277.023);\n --color-indigo-800: oklch(39.8% 0.195 277.366);\n --color-indigo-900: oklch(35.9% 0.144 278.697);\n --color-indigo-950: oklch(25.7% 0.09 281.288);\n\n --color-violet-50: oklch(96.9% 0.016 293.756);\n --color-violet-100: oklch(94.3% 0.029 294.588);\n --color-violet-200: oklch(89.4% 0.057 293.283);\n --color-violet-300: oklch(81.1% 0.111 293.571);\n --color-violet-400: oklch(70.2% 0.183 293.541);\n --color-violet-500: oklch(60.6% 0.25 292.717);\n --color-violet-600: oklch(54.1% 0.281 293.009);\n --color-violet-700: oklch(49.1% 0.27 292.581);\n --color-violet-800: oklch(43.2% 0.232 292.759);\n --color-violet-900: oklch(38% 0.189 293.745);\n --color-violet-950: oklch(28.3% 0.141 291.089);\n\n --color-purple-50: oklch(97.7% 0.014 308.299);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-200: oklch(90.2% 0.063 306.703);\n --color-purple-300: oklch(82.7% 0.119 306.383);\n --color-purple-400: oklch(71.4% 0.203 305.504);\n --color-purple-500: oklch(62.7% 0.265 303.9);\n --color-purple-600: oklch(55.8% 0.288 302.321);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-purple-800: oklch(43.8% 0.218 303.724);\n --color-purple-900: oklch(38.1% 0.176 304.987);\n --color-purple-950: oklch(29.1% 0.149 302.717);\n\n --color-fuchsia-50: oklch(97.7% 0.017 320.058);\n --color-fuchsia-100: oklch(95.2% 0.037 318.852);\n --color-fuchsia-200: oklch(90.3% 0.076 319.62);\n --color-fuchsia-300: oklch(83.3% 0.145 321.434);\n --color-fuchsia-400: oklch(74% 0.238 322.16);\n --color-fuchsia-500: oklch(66.7% 0.295 322.15);\n --color-fuchsia-600: oklch(59.1% 0.293 322.896);\n --color-fuchsia-700: oklch(51.8% 0.253 323.949);\n --color-fuchsia-800: oklch(45.2% 0.211 324.591);\n --color-fuchsia-900: oklch(40.1% 0.17 325.612);\n --color-fuchsia-950: oklch(29.3% 0.136 325.661);\n\n --color-pink-50: oklch(97.1% 0.014 343.198);\n --color-pink-100: oklch(94.8% 0.028 342.258);\n --color-pink-200: oklch(89.9% 0.061 343.231);\n --color-pink-300: oklch(82.3% 0.12 346.018);\n --color-pink-400: oklch(71.8% 0.202 349.761);\n --color-pink-500: oklch(65.6% 0.241 354.308);\n --color-pink-600: oklch(59.2% 0.249 0.584);\n --color-pink-700: oklch(52.5% 0.223 3.958);\n --color-pink-800: oklch(45.9% 0.187 3.815);\n --color-pink-900: oklch(40.8% 0.153 2.432);\n --color-pink-950: oklch(28.4% 0.109 3.907);\n\n --color-rose-50: oklch(96.9% 0.015 12.422);\n --color-rose-100: oklch(94.1% 0.03 12.58);\n --color-rose-200: oklch(89.2% 0.058 10.001);\n --color-rose-300: oklch(81% 0.117 11.638);\n --color-rose-400: oklch(71.2% 0.194 13.428);\n --color-rose-500: oklch(64.5% 0.246 16.439);\n --color-rose-600: oklch(58.6% 0.253 17.585);\n --color-rose-700: oklch(51.4% 0.222 16.935);\n --color-rose-800: oklch(45.5% 0.188 13.697);\n --color-rose-900: oklch(41% 0.159 10.272);\n --color-rose-950: oklch(27.1% 0.105 12.094);\n\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-slate-100: oklch(96.8% 0.007 247.896);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-slate-600: oklch(44.6% 0.043 257.281);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-slate-800: oklch(27.9% 0.041 260.031);\n --color-slate-900: oklch(20.8% 0.042 265.755);\n --color-slate-950: oklch(12.9% 0.042 264.695);\n\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: oklch(96.7% 0.003 264.542);\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-300: oklch(87.2% 0.01 258.338);\n --color-gray-400: oklch(70.7% 0.022 261.325);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-gray-600: oklch(44.6% 0.03 256.802);\n --color-gray-700: oklch(37.3% 0.034 259.733);\n --color-gray-800: oklch(27.8% 0.033 256.848);\n --color-gray-900: oklch(21% 0.034 264.665);\n --color-gray-950: oklch(13% 0.028 261.692);\n\n --color-zinc-50: oklch(98.5% 0 0);\n --color-zinc-100: oklch(96.7% 0.001 286.375);\n --color-zinc-200: oklch(92% 0.004 286.32);\n --color-zinc-300: oklch(87.1% 0.006 286.286);\n --color-zinc-400: oklch(70.5% 0.015 286.067);\n --color-zinc-500: oklch(55.2% 0.016 285.938);\n --color-zinc-600: oklch(44.2% 0.017 285.786);\n --color-zinc-700: oklch(37% 0.013 285.805);\n --color-zinc-800: oklch(27.4% 0.006 286.033);\n --color-zinc-900: oklch(21% 0.006 285.885);\n --color-zinc-950: oklch(14.1% 0.005 285.823);\n\n --color-neutral-50: oklch(98.5% 0 0);\n --color-neutral-100: oklch(97% 0 0);\n --color-neutral-200: oklch(92.2% 0 0);\n --color-neutral-300: oklch(87% 0 0);\n --color-neutral-400: oklch(70.8% 0 0);\n --color-neutral-500: oklch(55.6% 0 0);\n --color-neutral-600: oklch(43.9% 0 0);\n --color-neutral-700: oklch(37.1% 0 0);\n --color-neutral-800: oklch(26.9% 0 0);\n --color-neutral-900: oklch(20.5% 0 0);\n --color-neutral-950: oklch(14.5% 0 0);\n\n --color-stone-50: oklch(98.5% 0.001 106.423);\n --color-stone-100: oklch(97% 0.001 106.424);\n --color-stone-200: oklch(92.3% 0.003 48.717);\n --color-stone-300: oklch(86.9% 0.005 56.366);\n --color-stone-400: oklch(70.9% 0.01 56.259);\n --color-stone-500: oklch(55.3% 0.013 58.071);\n --color-stone-600: oklch(44.4% 0.011 73.639);\n --color-stone-700: oklch(37.4% 0.01 67.558);\n --color-stone-800: oklch(26.8% 0.007 34.298);\n --color-stone-900: oklch(21.6% 0.006 56.043);\n --color-stone-950: oklch(14.7% 0.004 49.25);\n\n --color-black: #000;\n --color-white: #fff;\n\n --spacing: 0.25rem;\n\n --breakpoint-sm: 40rem;\n --breakpoint-md: 48rem;\n --breakpoint-lg: 64rem;\n --breakpoint-xl: 80rem;\n --breakpoint-2xl: 96rem;\n\n --container-3xs: 16rem;\n --container-2xs: 18rem;\n --container-xs: 20rem;\n --container-sm: 24rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-xl: 36rem;\n --container-2xl: 42rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n --container-5xl: 64rem;\n --container-6xl: 72rem;\n --container-7xl: 80rem;\n\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --text-4xl: 2.25rem;\n --text-4xl--line-height: calc(2.5 / 2.25);\n --text-5xl: 3rem;\n --text-5xl--line-height: 1;\n --text-6xl: 3.75rem;\n --text-6xl--line-height: 1;\n --text-7xl: 4.5rem;\n --text-7xl--line-height: 1;\n --text-8xl: 6rem;\n --text-8xl--line-height: 1;\n --text-9xl: 8rem;\n --text-9xl--line-height: 1;\n\n --font-weight-thin: 100;\n --font-weight-extralight: 200;\n --font-weight-light: 300;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-extrabold: 800;\n --font-weight-black: 900;\n\n --tracking-tighter: -0.05em;\n --tracking-tight: -0.025em;\n --tracking-normal: 0em;\n --tracking-wide: 0.025em;\n --tracking-wider: 0.05em;\n --tracking-widest: 0.1em;\n\n --leading-tight: 1.25;\n --leading-snug: 1.375;\n --leading-normal: 1.5;\n --leading-relaxed: 1.625;\n --leading-loose: 2;\n\n --radius-xs: 0.125rem;\n --radius-sm: 0.25rem;\n --radius-md: 0.375rem;\n --radius-lg: 0.5rem;\n --radius-xl: 0.75rem;\n --radius-2xl: 1rem;\n --radius-3xl: 1.5rem;\n --radius-4xl: 2rem;\n\n --shadow-2xs: 0 1px rgb(0 0 0 / 0.05);\n --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / 0.05);\n --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / 0.05);\n --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / 0.05);\n\n --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / 0.05);\n --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15);\n --drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12);\n --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15);\n --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / 0.1);\n --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);\n\n --text-shadow-2xs: 0px 1px 0px rgb(0 0 0 / 0.15);\n --text-shadow-xs: 0px 1px 1px rgb(0 0 0 / 0.2);\n --text-shadow-sm:\n 0px 1px 0px rgb(0 0 0 / 0.075), 0px 1px 1px rgb(0 0 0 / 0.075), 0px 2px 2px rgb(0 0 0 / 0.075);\n --text-shadow-md:\n 0px 1px 1px rgb(0 0 0 / 0.1), 0px 1px 2px rgb(0 0 0 / 0.1), 0px 2px 4px rgb(0 0 0 / 0.1);\n --text-shadow-lg:\n 0px 1px 2px rgb(0 0 0 / 0.1), 0px 3px 2px rgb(0 0 0 / 0.1), 0px 4px 8px rgb(0 0 0 / 0.1);\n\n --ease-in: cubic-bezier(0.4, 0, 1, 1);\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n\n --animate-spin: spin 1s linear infinite;\n --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --animate-bounce: bounce 1s infinite;\n\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n @keyframes ping {\n 75%,\n 100% {\n transform: scale(2);\n opacity: 0;\n }\n }\n\n @keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n }\n\n @keyframes bounce {\n 0%,\n 100% {\n transform: translateY(-25%);\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\n }\n\n 50% {\n transform: none;\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n }\n }\n\n --blur-xs: 4px;\n --blur-sm: 8px;\n --blur-md: 12px;\n --blur-lg: 16px;\n --blur-xl: 24px;\n --blur-2xl: 40px;\n --blur-3xl: 64px;\n\n --perspective-dramatic: 100px;\n --perspective-near: 300px;\n --perspective-normal: 500px;\n --perspective-midrange: 800px;\n --perspective-distant: 1200px;\n\n --aspect-video: 16 / 9;\n\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: --theme(--font-sans, initial);\n --default-font-feature-settings: --theme(--font-sans--font-feature-settings, initial);\n --default-font-variation-settings: --theme(--font-sans--font-variation-settings, initial);\n --default-mono-font-family: --theme(--font-mono, initial);\n --default-mono-font-feature-settings: --theme(--font-mono--font-feature-settings, initial);\n --default-mono-font-variation-settings: --theme(--font-mono--font-variation-settings, initial);\n}\n\n/* Deprecated */\n@theme default inline reference {\n --blur: 8px;\n --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);\n --drop-shadow: 0 1px 2px rgb(0 0 0 / 0.1), 0 1px 1px rgb(0 0 0 / 0.06);\n --radius: 0.25rem;\n --max-width-prose: 65ch;\n}\n",utilities:"@tailwind utilities;\n"};console.warn("The browser build of Tailwind CSS should not be used in production. To use Tailwind CSS in production, use the Tailwind CLI, Vite plugin, or PostCSS plugin: https://tailwindcss.com/docs/installation");var fr,pr="text/tailwindcss",hr=new Set,mr="",gr=document.createElement("style"),vr=Promise.resolve(),wr=1,kr=new class{start(e){performance.mark(`${e} (start)`)}end(e,t){performance.mark(`${e} (end)`),performance.measure(e,{start:`${e} (start)`,end:`${e} (end)`,detail:t})}hit(e,t){performance.mark(e,{detail:t})}error(e){throw performance.mark("(error)",{detail:{error:`${e}`}}),e}};async function br(e,t){try{let r=function(){if("tailwindcss"===e)return{path:"virtual:tailwindcss/index.css",base:t,content:dr.index};if("tailwindcss/preflight"===e||"tailwindcss/preflight.css"===e||"./preflight.css"===e)return{path:"virtual:tailwindcss/preflight.css",base:t,content:dr.preflight};if("tailwindcss/theme"===e||"tailwindcss/theme.css"===e||"./theme.css"===e)return{path:"virtual:tailwindcss/theme.css",base:t,content:dr.theme};if("tailwindcss/utilities"===e||"tailwindcss/utilities.css"===e||"./utilities.css"===e)return{path:"virtual:tailwindcss/utilities.css",base:t,content:dr.utilities};throw new Error(`The browser build does not support @import for "${e}"`)}();return kr.hit("Loaded stylesheet",{id:e,base:t,size:r.content.length}),r}catch(r){throw kr.hit("Failed to load stylesheet",{id:e,base:t,error:r.message??r}),r}}async function yr(){throw new Error("The browser build does not support plugins or config files.")}function xr(e){vr=vr.then((async function(){if(!fr&&"full"!==e)return;let t=wr++;kr.start(`Build #${t} (${e})`),"full"===e&&await async function(){kr.start("Create compiler"),kr.start("Reading Stylesheets");let e=document.querySelectorAll(`style[type="${pr}"]`),t="";for(let r of e)zr(r),t+=r.textContent+"\n";if(t.includes("@import")||(t=`@import "tailwindcss";${t}`),kr.end("Reading Stylesheets",{size:t.length,changed:mr!==t}),mr!==t){mr=t,kr.start("Compile CSS");try{fr=await ur(t,{base:"/",loadStylesheet:br,loadModule:yr})}finally{kr.end("Compile CSS"),kr.end("Create compiler")}hr.clear()}}(),kr.start("Build"),await async function(e){if(!fr)return;let t=new Set;kr.start("Collect classes");for(let e of document.querySelectorAll("[class]"))for(let r of e.classList)hr.has(r)||(hr.add(r),t.add(r));kr.end("Collect classes",{count:t.size}),(0!==t.size||"incremental"!==e)&&(kr.start("Build utilities"),gr.textContent=fr.build(Array.from(t)),kr.end("Build utilities"))}(e),kr.end("Build"),kr.end(`Build #${t} (${e})`)})).catch((e=>kr.error(e)))}var $r=new MutationObserver((()=>xr("full")));function zr(e){$r.observe(e,{attributes:!0,attributeFilter:["type"],characterData:!0,subtree:!0,childList:!0})}new MutationObserver((e=>{let t=0,r=0;for(let n of e){for(let e of n.addedNodes)e.nodeType===Node.ELEMENT_NODE&&"STYLE"===e.tagName&&e.getAttribute("type")===pr&&(zr(e),t++);for(let e of n.addedNodes)1===e.nodeType&&e!==gr&&r++;"attributes"===n.type&&r++}return t>0?xr("full"):r>0?xr("incremental"):void 0})).observe(document.documentElement,{attributes:!0,attributeFilter:["class"],childList:!0,subtree:!0}),xr("full"),document.head.append(gr)})(); +//# sourceMappingURL=/sm/dd74e25c182ace0306edb0d4be9012540ad3ea721ffc032eb41aec0fbcfe474b.map From 5ceb8237ff12c67cca2bcc93bdc33bfed9d8c371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E6=98=9F=E7=B9=81?= Date: Sat, 7 Jun 2025 23:03:32 +0800 Subject: [PATCH 06/10] fix: wip --- Cnblogs.DashScope.Sdk.sln.DotSettings | 4 +- .../Pages/Counter.razor | 6 +- .../Components/Pages/Weather.razor | 8 +- sample/Cnblogs.DashScope.WebSample/Program.cs | 1 - src/Cnblogs.DashScope.AspNetCore/Assembly.cs | 4 + .../DashScopeClientWebSocket.cs | 28 +++- .../DashScopeClientWebSocketWrapper.cs | 5 +- .../Internals/Assembly.cs | 4 + .../Internals/ClientWebSocketWrapper.cs | 40 ++++++ .../Internals/IClientWebSocket.cs | 25 ++++ .../DashScopeClientWebSocketTests.cs | 121 ++++++++++++++++++ .../ServiceCollectionInjectorTests.cs | 21 +-- 12 files changed, 240 insertions(+), 27 deletions(-) create mode 100644 src/Cnblogs.DashScope.AspNetCore/Assembly.cs create mode 100644 src/Cnblogs.DashScope.Core/Internals/Assembly.cs create mode 100644 src/Cnblogs.DashScope.Core/Internals/ClientWebSocketWrapper.cs create mode 100644 src/Cnblogs.DashScope.Core/Internals/IClientWebSocket.cs create mode 100644 test/Cnblogs.DashScope.Sdk.UnitTests/DashScopeClientWebSocketTests.cs diff --git a/Cnblogs.DashScope.Sdk.sln.DotSettings b/Cnblogs.DashScope.Sdk.sln.DotSettings index 3ad7f9e..7a27e5a 100644 --- a/Cnblogs.DashScope.Sdk.sln.DotSettings +++ b/Cnblogs.DashScope.Sdk.sln.DotSettings @@ -1,4 +1,6 @@  True True - True \ No newline at end of file + True + True + True \ No newline at end of file diff --git a/sample/Cnblogs.DashScope.WebSample.Client/Pages/Counter.razor b/sample/Cnblogs.DashScope.WebSample.Client/Pages/Counter.razor index ce6626a..ed76db1 100644 --- a/sample/Cnblogs.DashScope.WebSample.Client/Pages/Counter.razor +++ b/sample/Cnblogs.DashScope.WebSample.Client/Pages/Counter.razor @@ -5,16 +5,16 @@

Counter

-

Current count: @currentCount

+

Current count: @_currentCount

@code { - private int currentCount = 0; + private int _currentCount; private void IncrementCount() { - currentCount++; + _currentCount++; } } diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Pages/Weather.razor b/sample/Cnblogs.DashScope.WebSample/Components/Pages/Weather.razor index 4074a91..d454903 100644 --- a/sample/Cnblogs.DashScope.WebSample/Components/Pages/Weather.razor +++ b/sample/Cnblogs.DashScope.WebSample/Components/Pages/Weather.razor @@ -7,7 +7,7 @@

This component demonstrates showing data.

-@if (forecasts == null) +@if (_forecasts == null) {

Loading... @@ -25,7 +25,7 @@ else - @foreach (var forecast in forecasts) + @foreach (var forecast in _forecasts) { @forecast.Date.ToShortDateString() @@ -39,7 +39,7 @@ else } @code { - private WeatherForecast[]? forecasts; + private WeatherForecast[]? _forecasts; protected override async Task OnInitializedAsync() { @@ -48,7 +48,7 @@ else 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 + _forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = startDate.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), diff --git a/sample/Cnblogs.DashScope.WebSample/Program.cs b/sample/Cnblogs.DashScope.WebSample/Program.cs index b728c3d..be30944 100644 --- a/sample/Cnblogs.DashScope.WebSample/Program.cs +++ b/sample/Cnblogs.DashScope.WebSample/Program.cs @@ -1,4 +1,3 @@ -using Cnblogs.DashScope.WebSample.Client.Pages; using Cnblogs.DashScope.WebSample.Components; var builder = WebApplication.CreateBuilder(args); diff --git a/src/Cnblogs.DashScope.AspNetCore/Assembly.cs b/src/Cnblogs.DashScope.AspNetCore/Assembly.cs new file mode 100644 index 0000000..b79c4ed --- /dev/null +++ b/src/Cnblogs.DashScope.AspNetCore/Assembly.cs @@ -0,0 +1,4 @@ +using System.Runtime.CompilerServices; + +[assembly:InternalsVisibleTo("Cnblogs.DashScope.Sdk.UnitTests")] +[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs index 0191cda..a97ea9f 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs @@ -19,14 +19,17 @@ public sealed class DashScopeClientWebSocket : IDisposable AllowSynchronousContinuations = true }; - private readonly ClientWebSocket _socket = new(); + private readonly IClientWebSocket _socket; private Task? _receiveTask; private TaskCompletionSource _taskStartedSignal = new(); + private Channel? _binaryOutput; ///

/// The binary output. /// - public Channel BinaryOutput { get; private set; } = Channel.CreateUnbounded(UnboundedChannelOptions); + public ChannelReader BinaryOutput + => _binaryOutput?.Reader + ?? throw new InvalidOperationException("Please call ResetOutput() before accessing output"); /// /// A task that completed when received task-started event. @@ -45,6 +48,7 @@ public sealed class DashScopeClientWebSocket : IDisposable /// Optional workspace id. public DashScopeClientWebSocket(string apiKey, string? workspaceId = null) { + _socket = new ClientWebSocketWrapper(new ClientWebSocket()); _socket.Options.SetRequestHeader("X-DashScope-DataInspection", "enable"); _socket.Options.SetRequestHeader("Authorization", $"bearer {apiKey}"); if (string.IsNullOrEmpty(workspaceId) == false) @@ -53,6 +57,15 @@ public DashScopeClientWebSocket(string apiKey, string? workspaceId = null) } } + /// + /// Initiate a with a pre-configured . + /// + /// Pre-configured . + internal DashScopeClientWebSocket(IClientWebSocket socket) + { + _socket = socket; + } + /// /// Start a websocket connection. /// @@ -74,8 +87,9 @@ public async Task ConnectAsync(Uri uri, CancellationToken cancellationT /// public void ResetOutput() { - BinaryOutput.Writer.TryComplete(); - BinaryOutput = Channel.CreateUnbounded(UnboundedChannelOptions); + _binaryOutput?.Writer.TryComplete(); + _binaryOutput = Channel.CreateUnbounded(UnboundedChannelOptions); + _taskStartedSignal.TrySetResult(false); _taskStartedSignal = new TaskCompletionSource(); } @@ -129,7 +143,7 @@ public Task SendMessageAsync( { for (var i = 0; i < result.Count; i++) { - await BinaryOutput.Writer.WriteAsync(buffer[i], cancellationToken); + await _binaryOutput!.Writer.WriteAsync(buffer[i], cancellationToken); } return null; @@ -177,7 +191,7 @@ public async Task ReceiveMessagesAsync(CancellationToken cancellationTo break; case "task-finished": State = DashScopeWebSocketState.Ready; - BinaryOutput.Writer.Complete(); + _binaryOutput?.Writer.Complete(); break; case "task-failed": await CloseAsync(cancellationToken); @@ -216,7 +230,7 @@ private void Dispose(bool disposing) { // Dispose managed resources. _socket.Dispose(); - BinaryOutput.Writer.TryComplete(); + _binaryOutput?.Writer.TryComplete(); } } diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs index 50885b3..a5f4b02 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs @@ -11,7 +11,7 @@ public sealed record DashScopeClientWebSocketWrapper(DashScopeClientWebSocket So /// /// The binary output. /// - public IAsyncEnumerable BinaryOutput => Socket.BinaryOutput.Reader.ReadAllAsync(); + public IAsyncEnumerable BinaryOutput => Socket.BinaryOutput.ReadAllAsync(); /// /// The task that completes when received task-started event from server. @@ -48,6 +48,9 @@ public void Dispose() GC.SuppressFinalize(this); } + /// + /// Finalizer. + /// ~DashScopeClientWebSocketWrapper() { Dispose(); diff --git a/src/Cnblogs.DashScope.Core/Internals/Assembly.cs b/src/Cnblogs.DashScope.Core/Internals/Assembly.cs new file mode 100644 index 0000000..b4c2de8 --- /dev/null +++ b/src/Cnblogs.DashScope.Core/Internals/Assembly.cs @@ -0,0 +1,4 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Cnblogs.DashScope.Sdk.UnitTests")] +[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] diff --git a/src/Cnblogs.DashScope.Core/Internals/ClientWebSocketWrapper.cs b/src/Cnblogs.DashScope.Core/Internals/ClientWebSocketWrapper.cs new file mode 100644 index 0000000..6c31a62 --- /dev/null +++ b/src/Cnblogs.DashScope.Core/Internals/ClientWebSocketWrapper.cs @@ -0,0 +1,40 @@ +using System.Net.WebSockets; + +namespace Cnblogs.DashScope.Core.Internals; + +internal sealed class ClientWebSocketWrapper(ClientWebSocket socket) : IClientWebSocket +{ + /// + public void Dispose() + { + socket.Dispose(); + } + + /// + public ClientWebSocketOptions Options => socket.Options; + + /// + public WebSocketCloseStatus? CloseStatus => socket.CloseStatus; + + /// + public Task ConnectAsync(Uri uri, CancellationToken cancellation) => socket.ConnectAsync(uri, cancellation); + + /// + public Task SendAsync( + ArraySegment buffer, + WebSocketMessageType messageType, + bool endOfMessage, + CancellationToken cancellationToken) + => socket.SendAsync(buffer, messageType, endOfMessage, cancellationToken); + + /// + public Task ReceiveAsync(ArraySegment buffer, CancellationToken cancellationToken) + => socket.ReceiveAsync(buffer, cancellationToken); + + /// + public Task CloseAsync( + WebSocketCloseStatus closeStatus, + string? statusDescription, + CancellationToken cancellationToken) + => socket.CloseAsync(closeStatus, statusDescription, cancellationToken); +} diff --git a/src/Cnblogs.DashScope.Core/Internals/IClientWebSocket.cs b/src/Cnblogs.DashScope.Core/Internals/IClientWebSocket.cs new file mode 100644 index 0000000..b4a3cd7 --- /dev/null +++ b/src/Cnblogs.DashScope.Core/Internals/IClientWebSocket.cs @@ -0,0 +1,25 @@ +using System.Net.WebSockets; + +namespace Cnblogs.DashScope.Core.Internals; + +/// +/// Extract for testing purpose. +/// +internal interface IClientWebSocket : IDisposable +{ + public ClientWebSocketOptions Options { get; } + + public WebSocketCloseStatus? CloseStatus { get; } + + public Task ConnectAsync(Uri uri, CancellationToken cancellation); + + public Task SendAsync( + ArraySegment buffer, + WebSocketMessageType messageType, + bool endOfMessage, + CancellationToken cancellationToken); + + Task ReceiveAsync(ArraySegment buffer, CancellationToken cancellationToken); + + Task CloseAsync(WebSocketCloseStatus closeStatus, string? statusDescription, CancellationToken cancellationToken); +} diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/DashScopeClientWebSocketTests.cs b/test/Cnblogs.DashScope.Sdk.UnitTests/DashScopeClientWebSocketTests.cs new file mode 100644 index 0000000..4c5c485 --- /dev/null +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/DashScopeClientWebSocketTests.cs @@ -0,0 +1,121 @@ +using System.Net; +using System.Net.WebSockets; +using System.Reflection; +using Cnblogs.DashScope.Core; +using Cnblogs.DashScope.Core.Internals; +using NSubstitute; + +namespace Cnblogs.DashScope.Sdk.UnitTests; + +public class DashScopeClientWebSocketTests +{ + private static readonly FieldInfo InnerSocketInfo = + typeof(DashScopeClientWebSocket).GetField("_socket", BindingFlags.NonPublic | BindingFlags.Instance) + ?? throw new InvalidOperationException( + $"Can not found {nameof(DashScopeClientWebSocket)}._client, please update this test after refactoring"); + + private static readonly PropertyInfo InnerRequestHeaderInfo = + typeof(ClientWebSocketOptions).GetProperty("RequestHeaders", BindingFlags.NonPublic | BindingFlags.Instance) + ?? throw new InvalidOperationException( + $"Can not found {nameof(ClientWebSocketOptions)}.RequestHeaders property, please update this test after framework change"); + + [Fact] + public void Constructor_UseApiKeyAndWorkspaceId_EnsureConfigured() + { + // Arrange + const string apiKey = "apiKey"; + const string workspaceId = "workspaceId"; + + // Act + var client = new DashScopeClientWebSocket(apiKey, workspaceId); + var headers = ExtractHeaders(client); + + // Assert + Assert.Equal($"bearer {apiKey}", headers.GetValues("Authorization")?.First()); + Assert.Equal("enable", headers.GetValues("X-DashScope-DataInspection")?.First()); + Assert.Equal(workspaceId, headers.GetValues("X-DashScope-WorkspaceId")?.First()); + } + + [Fact] + public void Constructor_UseApiKeyWithoutWorkspaceId_EnsureConfigured() + { + // Arrange + const string apiKey = "apiKey"; + + // Act + var client = new DashScopeClientWebSocket(apiKey); + var headers = ExtractHeaders(client); + + // Assert + Assert.Equal($"bearer {apiKey}", headers.GetValues("Authorization")?.First()); + Assert.Equal("enable", headers.GetValues("X-DashScope-DataInspection")?.First()); + Assert.Null(headers.GetValues("X-DashScope-WorkspaceId")); + } + + [Fact] + public void Constructor_UsePreconfiguredSocket_EnsureConfigured() + { + // Arrange + using var socket = new ClientWebSocketWrapper(new ClientWebSocket()); + + // Act + var client = new DashScopeClientWebSocket(socket); + + // Assert + Assert.StrictEqual(socket, InnerSocketInfo.GetValue(client)); + } + + [Fact] + public async Task ConnectAsync_InitialConnect_ChangeStateAsync() + { + // Arrange + var socket = Substitute.For(); + var client = new DashScopeClientWebSocket(socket); + var apiUri = new Uri("ws://test.com"); + + // Act + await client.ConnectAsync(apiUri); + + // Assert + Assert.Equal(DashScopeWebSocketState.Ready, client.State); + await socket.Received(1).ConnectAsync(Arg.Is(apiUri), Arg.Any()); + await socket.Received().ReceiveAsync(Arg.Any>(), Arg.Any()); + } + + [Fact] + public async Task ResetOutput_WithInitialOutput_CompleteThenCreateNewOutputAsync() + { + // Arrange + var socket = Substitute.For(); + var client = new DashScopeClientWebSocket(socket); + var oldOutput = client.BinaryOutput; + var oldSignal = client.TaskStarted; + + // Act + client.ResetOutput(); + + // Assert + Assert.False(await oldSignal); + Assert.True(oldOutput.Completion.IsCompletedSuccessfully); + Assert.NotSame(oldOutput, client.BinaryOutput); + Assert.NotSame(oldSignal, client.TaskStarted); + } + + private static WebHeaderCollection ExtractHeaders(DashScopeClientWebSocket socket) + { + var obj = InnerSocketInfo.GetValue(socket); + if (obj is not IClientWebSocket clientWebSocket) + { + throw new InvalidOperationException($"Get null when trying to fetch {InnerSocketInfo.Name}"); + } + + obj = InnerRequestHeaderInfo.GetValue(clientWebSocket.Options); + if (obj is not WebHeaderCollection headers) + { + throw new InvalidOperationException( + $"Wrong type or null when trying to fetch {InnerRequestHeaderInfo.Name}"); + } + + return headers; + } +} diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/ServiceCollectionInjectorTests.cs b/test/Cnblogs.DashScope.Sdk.UnitTests/ServiceCollectionInjectorTests.cs index 15ae71d..2d3ff04 100644 --- a/test/Cnblogs.DashScope.Sdk.UnitTests/ServiceCollectionInjectorTests.cs +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/ServiceCollectionInjectorTests.cs @@ -21,7 +21,8 @@ public void Parameter_Normal_Inject() // Act services.AddDashScopeClient(ApiKey); var provider = services.BuildServiceProvider(); - var httpClient = provider.GetRequiredService().CreateClient(nameof(IDashScopeClient)); + var httpClient = provider.GetRequiredService() + .CreateClient(DashScopeAspNetCoreDefaults.DefaultHttpClientName); // Assert provider.GetRequiredService().Should().NotBeNull().And @@ -40,7 +41,8 @@ public void Parameter_HasProxy_Inject() // Act services.AddDashScopeClient(ApiKey, baseAddress: ProxyApi); var provider = services.BuildServiceProvider(); - var httpClient = provider.GetRequiredService().CreateClient(nameof(IDashScopeClient)); + var httpClient = provider.GetRequiredService() + .CreateClient(DashScopeAspNetCoreDefaults.DefaultHttpClientName); // Assert provider.GetRequiredService().Should().NotBeNull().And @@ -67,7 +69,8 @@ public void Configuration_Normal_Inject() // Act services.AddDashScopeClient(configuration); var provider = services.BuildServiceProvider(); - var httpClient = provider.GetRequiredService().CreateClient(nameof(IDashScopeClient)); + var httpClient = provider.GetRequiredService() + .CreateClient(DashScopeAspNetCoreDefaults.DefaultHttpClientName); // Assert provider.GetRequiredService().Should().NotBeNull().And @@ -94,7 +97,8 @@ public void Configuration_CustomSectionName_Inject() // Act services.AddDashScopeClient(configuration, "dashScopeCustom"); var provider = services.BuildServiceProvider(); - var httpClient = provider.GetRequiredService().CreateClient(nameof(IDashScopeClient)); + var httpClient = provider.GetRequiredService() + .CreateClient(DashScopeAspNetCoreDefaults.DefaultHttpClientName); // Assert provider.GetRequiredService().Should().NotBeNull().And @@ -115,7 +119,8 @@ public void Configuration_AddMultipleTime_Replace() services.AddDashScopeClient(ApiKey, baseAddress: ProxyApi); services.AddDashScopeClient(ApiKey, baseAddress: ProxyApi); var provider = services.BuildServiceProvider(); - var httpClient = provider.GetRequiredService().CreateClient(nameof(IDashScopeClient)); + var httpClient = provider.GetRequiredService() + .CreateClient(DashScopeAspNetCoreDefaults.DefaultHttpClientName); // Assert provider.GetRequiredService().Should().NotBeNull().And @@ -131,11 +136,7 @@ public void Configuration_NoApiKey_Throw() { // Arrange var services = new ServiceCollection(); - var config = new Dictionary - { - { "irrelevant", "irr" }, - { "dashScope:baseAddress", ProxyApi } - }; + var config = new Dictionary { { "irrelevant", "irr" }, { "dashScope:baseAddress", ProxyApi } }; var configuration = new ConfigurationBuilder().AddInMemoryCollection(config).Build(); // Act From e3a417855abdbb3891fc0a5d089424a16968f7dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E6=98=9F=E7=B9=81?= Date: Sun, 8 Jun 2025 22:49:46 +0800 Subject: [PATCH 07/10] test: adds more tests --- Cnblogs.DashScope.Sdk.sln.DotSettings | 2 + .../Cnblogs.DashScope.AI.csproj | 2 +- .../DashScopeClientAspNetCore.cs | 15 ++++- .../DashScopeClientWebSocketPool.cs | 19 ++++-- .../DashScopeWebSocketRequest.cs | 4 +- .../DashScopeWebSocketRequestHeader.cs | 4 +- .../DashScopeWebSocketRequestPayload.cs | 2 +- .../Internals/ClientWebSocketWrapper.cs | 23 +++++--- .../Internals/DashScopeDefaults.cs | 2 +- .../SpeechSynthesizerParameters.cs | 2 +- .../SpeechSynthesizerSocketSession.cs | 34 +++++++---- .../BaiChuanApiTests.cs | 33 ++++++++++- .../Cnblogs.DashScope.Sdk.UnitTests.csproj | 1 - .../DashScopeClientWebSocketTests.cs | 1 + .../DeepSeekTextGenerationApiTests.cs | 37 ++++++++---- .../Llama2TextGenerationApiTests.cs | 13 ++++ .../QWenMultimodalApiTests.cs | 31 +++++++--- .../QWenTextGenerationApiTests.cs | 14 +++++ .../TextEmbeddingApiTests.cs | 15 +++++ .../WanxApiTests.cs | 59 +++++++++++++++++++ .../Cnblogs.DashScope.Tests.Shared.csproj | 2 +- 21 files changed, 257 insertions(+), 58 deletions(-) diff --git a/Cnblogs.DashScope.Sdk.sln.DotSettings b/Cnblogs.DashScope.Sdk.sln.DotSettings index 7a27e5a..9866f59 100644 --- a/Cnblogs.DashScope.Sdk.sln.DotSettings +++ b/Cnblogs.DashScope.Sdk.sln.DotSettings @@ -1,6 +1,8 @@  + True True True True + True True True \ No newline at end of file diff --git a/src/Cnblogs.DashScope.AI/Cnblogs.DashScope.AI.csproj b/src/Cnblogs.DashScope.AI/Cnblogs.DashScope.AI.csproj index 8de1ebd..c34f277 100644 --- a/src/Cnblogs.DashScope.AI/Cnblogs.DashScope.AI.csproj +++ b/src/Cnblogs.DashScope.AI/Cnblogs.DashScope.AI.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/Cnblogs.DashScope.AspNetCore/DashScopeClientAspNetCore.cs b/src/Cnblogs.DashScope.AspNetCore/DashScopeClientAspNetCore.cs index 173c558..be4a685 100644 --- a/src/Cnblogs.DashScope.AspNetCore/DashScopeClientAspNetCore.cs +++ b/src/Cnblogs.DashScope.AspNetCore/DashScopeClientAspNetCore.cs @@ -5,5 +5,16 @@ namespace Cnblogs.DashScope.AspNetCore; /// /// The with DI and options pattern support. /// -public class DashScopeClientAspNetCore(IHttpClientFactory factory, DashScopeClientWebSocketPool pool) - : DashScopeClientCore(factory.CreateClient(DashScopeAspNetCoreDefaults.DefaultHttpClientName), pool); +public class DashScopeClientAspNetCore + : DashScopeClientCore +{ + /// + /// The with DI and options pattern support. + /// + /// The factory to create . + /// The socket pool for WebSocket API calls. + public DashScopeClientAspNetCore(IHttpClientFactory factory, DashScopeClientWebSocketPool pool) + : base(factory.CreateClient(DashScopeAspNetCoreDefaults.DefaultHttpClientName), pool) + { + } +} diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs index aab9a8e..290bc7c 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs @@ -5,11 +5,20 @@ namespace Cnblogs.DashScope.Core; /// /// Socket pool for DashScope API. /// -/// -public sealed class DashScopeClientWebSocketPool(DashScopeOptions options) : IDisposable +public sealed class DashScopeClientWebSocketPool : IDisposable { private readonly ConcurrentBag _available = new(); private readonly ConcurrentBag _active = new(); + private readonly DashScopeOptions _options; + + /// + /// Socket pool for DashScope API. + /// + /// Options for DashScope sdk. + public DashScopeClientWebSocketPool(DashScopeOptions options) + { + _options = options; + } internal void ReturnSocketAsync(DashScopeClientWebSocket socket) { @@ -49,7 +58,7 @@ public async Task RentSocketAsync( } else { - socket = await InitializeNewSocketAsync(options.BaseWebsocketAddress, cancellationToken); + socket = await InitializeNewSocketAsync(_options.BaseWebsocketAddress, cancellationToken); found = true; } } @@ -68,12 +77,12 @@ private async Task InitializeNewSocketAsync( CancellationToken cancellationToken = default) where TOutput : class { - if (_available.Count + _active.Count >= options.SocketPoolSize) + if (_available.Count + _active.Count >= _options.SocketPoolSize) { throw new InvalidOperationException("[DashScopeSDK] Socket pool is full"); } - var socket = new DashScopeClientWebSocket(options.ApiKey, options.WorkspaceId); + var socket = new DashScopeClientWebSocket(_options.ApiKey, _options.WorkspaceId); await socket.ConnectAsync(new Uri(url), cancellationToken); return socket; } diff --git a/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequest.cs b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequest.cs index 964aba9..41bc527 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequest.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequest.cs @@ -12,10 +12,10 @@ public class DashScopeWebSocketRequest /// /// Metadata of the request. /// - public required DashScopeWebSocketRequestHeader Header { get; set; } + public DashScopeWebSocketRequestHeader Header { get; set; } = new(); /// /// Payload of the request. /// - public required DashScopeWebSocketRequestPayload Payload { get; set; } + public DashScopeWebSocketRequestPayload Payload { get; set; } = new(); } diff --git a/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestHeader.cs b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestHeader.cs index 6760e2b..5b6e5cc 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestHeader.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestHeader.cs @@ -8,12 +8,12 @@ public class DashScopeWebSocketRequestHeader /// /// Action name. /// - public required string Action { get; set; } + public string Action { get; set; } = string.Empty; /// /// UUID for task. /// - public required string TaskId { get; set; } + public string TaskId { get; set; } = string.Empty; /// /// Streaming type. diff --git a/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestPayload.cs b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestPayload.cs index 4204e96..6d9ab42 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestPayload.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestPayload.cs @@ -37,5 +37,5 @@ public class DashScopeWebSocketRequestPayload /// /// The input of the request. /// - public required TInput Input { get; set; } + public TInput Input { get; set; } = null!; } diff --git a/src/Cnblogs.DashScope.Core/Internals/ClientWebSocketWrapper.cs b/src/Cnblogs.DashScope.Core/Internals/ClientWebSocketWrapper.cs index 6c31a62..71ebddb 100644 --- a/src/Cnblogs.DashScope.Core/Internals/ClientWebSocketWrapper.cs +++ b/src/Cnblogs.DashScope.Core/Internals/ClientWebSocketWrapper.cs @@ -2,22 +2,29 @@ namespace Cnblogs.DashScope.Core.Internals; -internal sealed class ClientWebSocketWrapper(ClientWebSocket socket) : IClientWebSocket +internal sealed class ClientWebSocketWrapper : IClientWebSocket { + private readonly ClientWebSocket _socket; + + public ClientWebSocketWrapper(ClientWebSocket socket) + { + _socket = socket; + } + /// public void Dispose() { - socket.Dispose(); + _socket.Dispose(); } /// - public ClientWebSocketOptions Options => socket.Options; + public ClientWebSocketOptions Options => _socket.Options; /// - public WebSocketCloseStatus? CloseStatus => socket.CloseStatus; + public WebSocketCloseStatus? CloseStatus => _socket.CloseStatus; /// - public Task ConnectAsync(Uri uri, CancellationToken cancellation) => socket.ConnectAsync(uri, cancellation); + public Task ConnectAsync(Uri uri, CancellationToken cancellation) => _socket.ConnectAsync(uri, cancellation); /// public Task SendAsync( @@ -25,16 +32,16 @@ public Task SendAsync( WebSocketMessageType messageType, bool endOfMessage, CancellationToken cancellationToken) - => socket.SendAsync(buffer, messageType, endOfMessage, cancellationToken); + => _socket.SendAsync(buffer, messageType, endOfMessage, cancellationToken); /// public Task ReceiveAsync(ArraySegment buffer, CancellationToken cancellationToken) - => socket.ReceiveAsync(buffer, cancellationToken); + => _socket.ReceiveAsync(buffer, cancellationToken); /// public Task CloseAsync( WebSocketCloseStatus closeStatus, string? statusDescription, CancellationToken cancellationToken) - => socket.CloseAsync(closeStatus, statusDescription, cancellationToken); + => _socket.CloseAsync(closeStatus, statusDescription, cancellationToken); } diff --git a/src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs b/src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs index 7623c1b..e8277dc 100644 --- a/src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs +++ b/src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs @@ -25,6 +25,6 @@ public static class DashScopeDefaults new() { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, - PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower, + PropertyNamingPolicy = JsonSnakeCaseLowerNamingPolicy.SnakeCaseLower, }; } diff --git a/src/Cnblogs.DashScope.Core/SpeechSynthesizerParameters.cs b/src/Cnblogs.DashScope.Core/SpeechSynthesizerParameters.cs index 8180bba..50e0de0 100644 --- a/src/Cnblogs.DashScope.Core/SpeechSynthesizerParameters.cs +++ b/src/Cnblogs.DashScope.Core/SpeechSynthesizerParameters.cs @@ -13,7 +13,7 @@ public class SpeechSynthesizerParameters /// /// The voice to use. /// - public required string Voice { get; set; } + public string Voice { get; set; } = string.Empty; /// /// Output file format, can be pcm, wav or mp3. diff --git a/src/Cnblogs.DashScope.Core/SpeechSynthesizerSocketSession.cs b/src/Cnblogs.DashScope.Core/SpeechSynthesizerSocketSession.cs index 15000fe..0a96853 100644 --- a/src/Cnblogs.DashScope.Core/SpeechSynthesizerSocketSession.cs +++ b/src/Cnblogs.DashScope.Core/SpeechSynthesizerSocketSession.cs @@ -3,11 +3,23 @@ /// /// Represents a socket-based TTS session. /// -/// Underlying websocket. -/// Model name to use. -public sealed class SpeechSynthesizerSocketSession(DashScopeClientWebSocketWrapper socket, string modelId) +public sealed class SpeechSynthesizerSocketSession : IDisposable { + private readonly DashScopeClientWebSocketWrapper _socket; + private readonly string _modelId; + + /// + /// Represents a socket-based TTS session. + /// + /// Underlying websocket. + /// Model name to use. + public SpeechSynthesizerSocketSession(DashScopeClientWebSocketWrapper socket, string modelId) + { + _socket = socket; + _modelId = modelId; + } + /// /// Send a run-task command, use random GUID as taskId. /// @@ -49,13 +61,13 @@ public async Task RunTaskAsync( TaskGroup = "audio", Task = "tts", Function = "SpeechSynthesizer", - Model = modelId, + Model = _modelId, Parameters = parameters } }; - socket.ResetTask(); - await socket.SendMessageAsync(command, cancellationToken); - await socket.TaskStarted; + _socket.ResetTask(); + await _socket.SendMessageAsync(command, cancellationToken); + await _socket.TaskStarted; return taskId; } @@ -78,7 +90,7 @@ public async Task ContinueTaskAsync(string taskId, string input, CancellationTok Input = new SpeechSynthesizerInput() { Text = input } } }; - await socket.SendMessageAsync(command, cancellationToken); + await _socket.SendMessageAsync(command, cancellationToken); } /// @@ -96,7 +108,7 @@ public async Task FinishTaskAsync(string taskId, CancellationToken cancellationT Input = new SpeechSynthesizerInput() } }; - await socket.SendMessageAsync(command, cancellationToken); + await _socket.SendMessageAsync(command, cancellationToken); } /// @@ -105,14 +117,14 @@ public async Task FinishTaskAsync(string taskId, CancellationToken cancellationT /// public IAsyncEnumerable GetAudioAsync() { - return socket.BinaryOutput; + return _socket.BinaryOutput; } private void Dispose(bool disposing) { if (disposing) { - socket.Dispose(); + _socket.Dispose(); } } diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/BaiChuanApiTests.cs b/test/Cnblogs.DashScope.Sdk.UnitTests/BaiChuanApiTests.cs index 0d99cac..579789e 100644 --- a/test/Cnblogs.DashScope.Sdk.UnitTests/BaiChuanApiTests.cs +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/BaiChuanApiTests.cs @@ -22,6 +22,19 @@ public async Task BaiChuanTextGeneration_UseEnum_SuccessAsync() s => s.Model == "baichuan-7b-v1" && s.Input.Prompt == Cases.Prompt && s.Parameters == null)); } + [Fact] + public async Task BaiChuanTextGeneration_UseInvalidEnum_SuccessAsync() + { + // Arrange + var client = Substitute.For(); + + // Act + var act = async () => await client.GetBaiChuanTextCompletionAsync((BaiChuanLlm)(-1), Cases.Prompt); + + // Assert + await Assert.ThrowsAsync(act); + } + [Fact] public async Task BaiChuanTextGeneration_CustomModel_SuccessAsync() { @@ -29,12 +42,12 @@ public async Task BaiChuanTextGeneration_CustomModel_SuccessAsync() var client = Substitute.For(); // Act - _ = await client.GetBaiChuanTextCompletionAsync(BaiChuanLlm.BaiChuan7B, Cases.Prompt); + _ = await client.GetBaiChuanTextCompletionAsync(Cases.CustomModelName, Cases.Prompt); // Assert _ = await client.Received().GetTextCompletionAsync( Arg.Is>( - s => s.Model == "baichuan-7b-v1" && s.Input.Prompt == Cases.Prompt && s.Parameters == null)); + s => s.Model == Cases.CustomModelName && s.Input.Prompt == Cases.Prompt && s.Parameters == null)); } [Fact] @@ -43,6 +56,22 @@ public async Task BaiChuan2TextGeneration_UseEnum_SuccessAsync() // Arrange var client = Substitute.For(); + // Act + var act = async () => await client.GetBaiChuanTextCompletionAsync( + (BaiChuan2Llm)(-1), + Cases.TextMessages, + ResultFormats.Message); + + // Assert + await Assert.ThrowsAsync(act); + } + + [Fact] + public async Task BaiChuan2TextGeneration_UseInvalidEnum_SuccessAsync() + { + // Arrange + var client = Substitute.For(); + // Act _ = await client.GetBaiChuanTextCompletionAsync( BaiChuan2Llm.BaiChuan2_13BChatV1, diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/Cnblogs.DashScope.Sdk.UnitTests.csproj b/test/Cnblogs.DashScope.Sdk.UnitTests/Cnblogs.DashScope.Sdk.UnitTests.csproj index 94a3a5e..3fbb8f0 100644 --- a/test/Cnblogs.DashScope.Sdk.UnitTests/Cnblogs.DashScope.Sdk.UnitTests.csproj +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/Cnblogs.DashScope.Sdk.UnitTests.csproj @@ -11,7 +11,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/DashScopeClientWebSocketTests.cs b/test/Cnblogs.DashScope.Sdk.UnitTests/DashScopeClientWebSocketTests.cs index 4c5c485..8b207f6 100644 --- a/test/Cnblogs.DashScope.Sdk.UnitTests/DashScopeClientWebSocketTests.cs +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/DashScopeClientWebSocketTests.cs @@ -88,6 +88,7 @@ public async Task ResetOutput_WithInitialOutput_CompleteThenCreateNewOutputAsync // Arrange var socket = Substitute.For(); var client = new DashScopeClientWebSocket(socket); + client.ResetOutput(); var oldOutput = client.BinaryOutput; var oldSignal = client.TaskStarted; diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/DeepSeekTextGenerationApiTests.cs b/test/Cnblogs.DashScope.Sdk.UnitTests/DeepSeekTextGenerationApiTests.cs index 461b037..87643dd 100644 --- a/test/Cnblogs.DashScope.Sdk.UnitTests/DeepSeekTextGenerationApiTests.cs +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/DeepSeekTextGenerationApiTests.cs @@ -19,8 +19,23 @@ await client.GetDeepSeekChatCompletionAsync( // Assert await client.Received().GetTextCompletionAsync( - Arg.Is>( - x => x.Model == "deepseek-r1" && x.Input.Messages!.First().Content == "你好" && x.Parameters == null)); + Arg.Is>(x + => x.Model == "deepseek-r1" && x.Input.Messages!.First().Content == "你好" && x.Parameters == null)); + } + + [Fact] + public async Task TextCompletion_UseInvalidEnum_SuccessAsync() + { + // Arrange + var client = Substitute.For(); + + // Act + var act = async () => await client.GetDeepSeekChatCompletionAsync( + (DeepSeekLlm)(-1), + new List { TextChatMessage.User("你好") }.AsReadOnly()); + + // Assert + await Assert.ThrowsAsync(act); } [Fact] @@ -37,8 +52,8 @@ await client.GetDeepSeekChatCompletionAsync( // Assert await client.Received().GetTextCompletionAsync( - Arg.Is>( - x => x.Model == customModel && x.Input.Messages!.First().Content == "你好" && x.Parameters == null)); + Arg.Is>(x + => x.Model == customModel && x.Input.Messages!.First().Content == "你好" && x.Parameters == null)); } [Fact] @@ -54,10 +69,9 @@ public void StreamCompletion_UseEnum_SuccessAsync() // Assert _ = client.Received().GetTextCompletionStreamAsync( - Arg.Is>( - x => x.Model == "deepseek-v3" - && x.Input.Messages!.First().Content == "你好" - && x.Parameters!.IncrementalOutput == true)); + Arg.Is>(x => x.Model == "deepseek-v3" + && x.Input.Messages!.First().Content == "你好" + && x.Parameters!.IncrementalOutput == true)); } [Fact] @@ -74,9 +88,8 @@ public void StreamCompletion_CustomModel_SuccessAsync() // Assert _ = client.Received().GetTextCompletionStreamAsync( - Arg.Is>( - x => x.Model == customModel - && x.Input.Messages!.First().Content == "你好" - && x.Parameters!.IncrementalOutput == true)); + Arg.Is>(x => x.Model == customModel + && x.Input.Messages!.First().Content == "你好" + && x.Parameters!.IncrementalOutput == true)); } } diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/Llama2TextGenerationApiTests.cs b/test/Cnblogs.DashScope.Sdk.UnitTests/Llama2TextGenerationApiTests.cs index c4d5679..1646481 100644 --- a/test/Cnblogs.DashScope.Sdk.UnitTests/Llama2TextGenerationApiTests.cs +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/Llama2TextGenerationApiTests.cs @@ -25,6 +25,19 @@ public async Task Llama2_UseEnum_SuccessAsync() && s.Parameters.ResultFormat == ResultFormats.Message)); } + [Fact] + public async Task Llama2_UseInvalidEnum_SuccessAsync() + { + // Arrange + var client = Substitute.For(); + + // Act + var act = async () => await client.GetLlama2TextCompletionAsync(Llama2Model.Chat13Bv2, Cases.TextMessages, ResultFormats.Message); + + // Assert + await Assert.ThrowsAsync(act); + } + [Fact] public async Task Llama2_CustomModel_SuccessAsync() { diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/QWenMultimodalApiTests.cs b/test/Cnblogs.DashScope.Sdk.UnitTests/QWenMultimodalApiTests.cs index c2c15ce..8e7a553 100644 --- a/test/Cnblogs.DashScope.Sdk.UnitTests/QWenMultimodalApiTests.cs +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/QWenMultimodalApiTests.cs @@ -30,8 +30,23 @@ public async Task Multimodal_UseEnum_SuccessAsync() // Assert _ = client.Received().GetMultimodalGenerationAsync( - Arg.Is>( - s => s.Model == "qwen-vl-max" && s.Input.Messages == Messages && s.Parameters == parameters)); + Arg.Is>(s + => s.Model == "qwen-vl-max" && s.Input.Messages == Messages && s.Parameters == parameters)); + } + + [Fact] + public async Task Multimodal_UseInvalidEnum_SuccessAsync() + { + // Arrange + var client = Substitute.For(); + var parameters = new MultimodalParameters { Seed = 6666 }; + + // Act + var act = async () + => await client.GetQWenMultimodalCompletionAsync((QWenMultimodalModel)(-1), Messages, parameters); + + // Assert + await Assert.ThrowsAsync(act); } [Fact] @@ -46,8 +61,8 @@ public async Task Multimodal_CustomModel_SuccessAsync() // Assert _ = client.Received().GetMultimodalGenerationAsync( - Arg.Is>( - s => s.Model == Cases.CustomModelName && s.Input.Messages == Messages && s.Parameters == parameters)); + Arg.Is>(s + => s.Model == Cases.CustomModelName && s.Input.Messages == Messages && s.Parameters == parameters)); } [Fact] @@ -62,8 +77,8 @@ public void MultimodalStream_UseEnum_Success() // Assert _ = client.Received().GetMultimodalGenerationStreamAsync( - Arg.Is>( - s => s.Model == "qwen-vl-plus" && s.Input.Messages == Messages && s.Parameters == parameters)); + Arg.Is>(s + => s.Model == "qwen-vl-plus" && s.Input.Messages == Messages && s.Parameters == parameters)); } [Fact] @@ -78,7 +93,7 @@ public void Multimodal_CustomModel_Success() // Assert _ = client.Received().GetMultimodalGenerationStreamAsync( - Arg.Is>( - s => s.Model == Cases.CustomModelName && s.Input.Messages == Messages && s.Parameters == parameters)); + Arg.Is>(s + => s.Model == Cases.CustomModelName && s.Input.Messages == Messages && s.Parameters == parameters)); } } diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/QWenTextGenerationApiTests.cs b/test/Cnblogs.DashScope.Sdk.UnitTests/QWenTextGenerationApiTests.cs index ddd6640..5fb1f6f 100644 --- a/test/Cnblogs.DashScope.Sdk.UnitTests/QWenTextGenerationApiTests.cs +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/QWenTextGenerationApiTests.cs @@ -102,6 +102,20 @@ await client.Received().GetTextCompletionAsync( s => s.Input.Messages == Cases.TextMessages && s.Parameters == parameters && s.Model == "qwen-max-1201")); } + [Fact] + public async Task QWenChatCompletion_UseInvalidEnum_SuccessAsync() + { + // Arrange + var client = Substitute.For(); + var parameters = new TextGenerationParameters { EnableSearch = true, ResultFormat = ResultFormats.Message }; + + // Act + var act = async () => await client.GetQWenChatCompletionAsync((QWenLlm)(-1), Cases.TextMessages, parameters); + + // Assert + await Assert.ThrowsAsync(act); + } + [Fact] public async Task QWenChatCompletion_CustomModel_SuccessAsync() { diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/TextEmbeddingApiTests.cs b/test/Cnblogs.DashScope.Sdk.UnitTests/TextEmbeddingApiTests.cs index 5ad66d3..e83da70 100644 --- a/test/Cnblogs.DashScope.Sdk.UnitTests/TextEmbeddingApiTests.cs +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/TextEmbeddingApiTests.cs @@ -24,6 +24,21 @@ await client.Received().GetEmbeddingsAsync( s => s.Input.Texts == texts && s.Model == "text-embedding-v2" && s.Parameters == parameters)); } + [Fact] + public async Task GetEmbeddings_UseInvalidEnum_SuccessAsync() + { + // Arrange + var client = Substitute.For(); + var texts = new[] { "hello" }; + var parameters = new TextEmbeddingParameters { TextType = TextTypes.Query }; + + // Act + var act = async () => await client.GetTextEmbeddingsAsync(TextEmbeddingModel.TextEmbeddingV2, texts, parameters); + + // Assert + await Assert.ThrowsAsync(act); + } + [Fact] public async Task GetEmbeddings_CustomModel_SuccessAsync() { diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/WanxApiTests.cs b/test/Cnblogs.DashScope.Sdk.UnitTests/WanxApiTests.cs index ff05d7c..d74ec2e 100644 --- a/test/Cnblogs.DashScope.Sdk.UnitTests/WanxApiTests.cs +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/WanxApiTests.cs @@ -42,6 +42,27 @@ public async Task WanxImageSynthesis_UseEnum_SuccessAsync() && s.Parameters == Parameters)); } + [Fact] + public async Task WanxImageSynthesis_UseInvalidEnum_SuccessAsync() + { + // Arrange + var client = Substitute.For(); + client.Configure().CreateImageSynthesisTaskAsync( + Arg.Any>(), + Arg.Any()) + .Returns(Snapshots.ImageSynthesis.CreateTask.ResponseModel); + + // Act + var act = async () => await client.CreateWanxImageSynthesisTaskAsync( + (WanxModel)(-1), + Cases.Prompt, + Cases.PromptAlter, + Parameters); + + // Assert + await Assert.ThrowsAsync(act); + } + [Fact] public async Task WanxImageSynthesis_CustomModel_SuccessAsync() { @@ -104,6 +125,25 @@ public async Task WanxImageGeneration_UseEnum_SuccessAsync() && s.Input.StyleIndex == 3)); } + [Fact] + public async Task WanxImageGeneration_UseInvalidEnum_SuccessAsync() + { + // Arrange + var client = Substitute.For(); + client.Configure().CreateImageGenerationTaskAsync( + Arg.Any>(), + Arg.Any()) + .Returns(Snapshots.ImageGeneration.CreateTaskNoSse.ResponseModel); + + // Act + var act = async () => await client.CreateWanxImageGenerationTaskAsync( + (WanxStyleRepaintModel)(-1), + new ImageGenerationInput { ImageUrl = Cases.ImageUrl, StyleIndex = 3 }); + + // Assert + await Assert.ThrowsAsync(act); + } + [Fact] public async Task WanxImageGeneration_CustomModel_SuccessAsync() { @@ -162,6 +202,25 @@ public async Task WanxBackgroundImageGeneration_UseEnum_SuccessAsync() && s.Input.BaseImageUrl == Cases.ImageUrl)); } + [Fact] + public async Task WanxBackgroundImageGeneration_UseInvalidEnum_SuccessAsync() + { + // Arrange + var client = Substitute.For(); + client.Configure().CreateBackgroundGenerationTaskAsync( + Arg.Any>(), + Arg.Any()) + .Returns(Snapshots.BackgroundGeneration.CreateTaskNoSse.ResponseModel); + + // Act + var act = async () => await client.CreateWanxBackgroundGenerationTaskAsync( + WanxBackgroundGenerationModel.WanxBackgroundGenerationV2, + new BackgroundGenerationInput { BaseImageUrl = Cases.ImageUrl }); + + // Assert + await Assert.ThrowsAsync(act); + } + [Fact] public async Task WanxBackgroundImageGeneration_CustomModel_SuccessAsync() { diff --git a/test/Cnblogs.DashScope.Tests.Shared/Cnblogs.DashScope.Tests.Shared.csproj b/test/Cnblogs.DashScope.Tests.Shared/Cnblogs.DashScope.Tests.Shared.csproj index 6c9b008..f2aedfd 100644 --- a/test/Cnblogs.DashScope.Tests.Shared/Cnblogs.DashScope.Tests.Shared.csproj +++ b/test/Cnblogs.DashScope.Tests.Shared/Cnblogs.DashScope.Tests.Shared.csproj @@ -8,7 +8,7 @@ - + From 3dae3e943b4248a7b4ec717a97e9f7cdf048860b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E6=98=9F=E7=B9=81?= Date: Sun, 8 Jun 2025 23:52:44 +0800 Subject: [PATCH 08/10] test: update tests --- .../Llama2TextGenerationApiTests.cs | 25 +++++++++++-------- .../TextEmbeddingApiTests.cs | 10 ++++---- .../WanxApiTests.cs | 2 +- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/Llama2TextGenerationApiTests.cs b/test/Cnblogs.DashScope.Sdk.UnitTests/Llama2TextGenerationApiTests.cs index 1646481..7daf36c 100644 --- a/test/Cnblogs.DashScope.Sdk.UnitTests/Llama2TextGenerationApiTests.cs +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/Llama2TextGenerationApiTests.cs @@ -18,11 +18,11 @@ public async Task Llama2_UseEnum_SuccessAsync() // Assert _ = await client.Received().GetTextCompletionAsync( - Arg.Is>( - s => s.Input.Messages == Cases.TextMessages - && s.Model == "llama2-13b-chat-v2" - && s.Parameters != null - && s.Parameters.ResultFormat == ResultFormats.Message)); + Arg.Is>(s + => s.Input.Messages == Cases.TextMessages + && s.Model == "llama2-13b-chat-v2" + && s.Parameters != null + && s.Parameters.ResultFormat == ResultFormats.Message)); } [Fact] @@ -32,7 +32,10 @@ public async Task Llama2_UseInvalidEnum_SuccessAsync() var client = Substitute.For(); // Act - var act = async () => await client.GetLlama2TextCompletionAsync(Llama2Model.Chat13Bv2, Cases.TextMessages, ResultFormats.Message); + var act = async () => await client.GetLlama2TextCompletionAsync( + (Llama2Model)(-1), + Cases.TextMessages, + ResultFormats.Message); // Assert await Assert.ThrowsAsync(act); @@ -49,10 +52,10 @@ public async Task Llama2_CustomModel_SuccessAsync() // Assert _ = await client.Received().GetTextCompletionAsync( - Arg.Is>( - s => s.Input.Messages == Cases.TextMessages - && s.Model == Cases.CustomModelName - && s.Parameters != null - && s.Parameters.ResultFormat == ResultFormats.Message)); + Arg.Is>(s + => s.Input.Messages == Cases.TextMessages + && s.Model == Cases.CustomModelName + && s.Parameters != null + && s.Parameters.ResultFormat == ResultFormats.Message)); } } diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/TextEmbeddingApiTests.cs b/test/Cnblogs.DashScope.Sdk.UnitTests/TextEmbeddingApiTests.cs index e83da70..d82d43a 100644 --- a/test/Cnblogs.DashScope.Sdk.UnitTests/TextEmbeddingApiTests.cs +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/TextEmbeddingApiTests.cs @@ -20,8 +20,8 @@ public async Task GetEmbeddings_UseEnum_SuccessAsync() // Assert await client.Received().GetEmbeddingsAsync( - Arg.Is>( - s => s.Input.Texts == texts && s.Model == "text-embedding-v2" && s.Parameters == parameters)); + Arg.Is>(s + => s.Input.Texts == texts && s.Model == "text-embedding-v2" && s.Parameters == parameters)); } [Fact] @@ -33,7 +33,7 @@ public async Task GetEmbeddings_UseInvalidEnum_SuccessAsync() var parameters = new TextEmbeddingParameters { TextType = TextTypes.Query }; // Act - var act = async () => await client.GetTextEmbeddingsAsync(TextEmbeddingModel.TextEmbeddingV2, texts, parameters); + var act = async () => await client.GetTextEmbeddingsAsync((TextEmbeddingModel)(-1), texts, parameters); // Assert await Assert.ThrowsAsync(act); @@ -52,7 +52,7 @@ public async Task GetEmbeddings_CustomModel_SuccessAsync() // Assert await client.Received().GetEmbeddingsAsync( - Arg.Is>( - s => s.Input.Texts == texts && s.Model == Cases.CustomModelName && s.Parameters == parameters)); + Arg.Is>(s + => s.Input.Texts == texts && s.Model == Cases.CustomModelName && s.Parameters == parameters)); } } diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/WanxApiTests.cs b/test/Cnblogs.DashScope.Sdk.UnitTests/WanxApiTests.cs index d74ec2e..ad0dad0 100644 --- a/test/Cnblogs.DashScope.Sdk.UnitTests/WanxApiTests.cs +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/WanxApiTests.cs @@ -214,7 +214,7 @@ public async Task WanxBackgroundImageGeneration_UseInvalidEnum_SuccessAsync() // Act var act = async () => await client.CreateWanxBackgroundGenerationTaskAsync( - WanxBackgroundGenerationModel.WanxBackgroundGenerationV2, + (WanxBackgroundGenerationModel)(-1), new BackgroundGenerationInput { BaseImageUrl = Cases.ImageUrl }); // Assert From 1f83e230f3d9960d005a164b7bb4800f9612de85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E6=98=9F=E7=B9=81?= Date: Sat, 14 Jun 2025 19:43:31 +0800 Subject: [PATCH 09/10] fix: remove web sample for now --- Cnblogs.DashScope.Sdk.sln | 14 --- .../Cnblogs.DashScope.WebSample.Client.csproj | 16 --- .../Pages/Counter.razor | 20 ---- .../Program.cs | 5 - .../_Imports.razor | 9 -- .../wwwroot/appsettings.Development.json | 8 -- .../wwwroot/appsettings.json | 8 -- .../Cnblogs.DashScope.WebSample.csproj | 23 ---- .../Components/App.razor | 20 ---- .../Components/Layout/MainLayout.razor | 23 ---- .../Components/Layout/MainLayout.razor.css | 96 ---------------- .../Components/Layout/NavMenu.razor | 29 ----- .../Components/Layout/NavMenu.razor.css | 105 ------------------ .../Components/Pages/Error.razor | 38 ------- .../Components/Pages/Home.razor | 7 -- .../Components/Pages/Weather.razor | 67 ----------- .../Components/Routes.razor | 6 - .../Components/_Imports.razor | 11 -- sample/Cnblogs.DashScope.WebSample/Program.cs | 35 ------ .../Properties/launchSettings.json | 41 ------- .../appsettings.Development.json | 8 -- .../appsettings.json | 9 -- .../wwwroot/app.css | 51 --------- .../wwwroot/favicon.png | Bin 1148 -> 0 bytes .../wwwroot/tailwind.min.js | 8 -- .../Internals/DashScopeDefaults.cs | 2 +- 26 files changed, 1 insertion(+), 658 deletions(-) delete mode 100644 sample/Cnblogs.DashScope.WebSample.Client/Cnblogs.DashScope.WebSample.Client.csproj delete mode 100644 sample/Cnblogs.DashScope.WebSample.Client/Pages/Counter.razor delete mode 100644 sample/Cnblogs.DashScope.WebSample.Client/Program.cs delete mode 100644 sample/Cnblogs.DashScope.WebSample.Client/_Imports.razor delete mode 100644 sample/Cnblogs.DashScope.WebSample.Client/wwwroot/appsettings.Development.json delete mode 100644 sample/Cnblogs.DashScope.WebSample.Client/wwwroot/appsettings.json delete mode 100644 sample/Cnblogs.DashScope.WebSample/Cnblogs.DashScope.WebSample.csproj delete mode 100644 sample/Cnblogs.DashScope.WebSample/Components/App.razor delete mode 100644 sample/Cnblogs.DashScope.WebSample/Components/Layout/MainLayout.razor delete mode 100644 sample/Cnblogs.DashScope.WebSample/Components/Layout/MainLayout.razor.css delete mode 100644 sample/Cnblogs.DashScope.WebSample/Components/Layout/NavMenu.razor delete mode 100644 sample/Cnblogs.DashScope.WebSample/Components/Layout/NavMenu.razor.css delete mode 100644 sample/Cnblogs.DashScope.WebSample/Components/Pages/Error.razor delete mode 100644 sample/Cnblogs.DashScope.WebSample/Components/Pages/Home.razor delete mode 100644 sample/Cnblogs.DashScope.WebSample/Components/Pages/Weather.razor delete mode 100644 sample/Cnblogs.DashScope.WebSample/Components/Routes.razor delete mode 100644 sample/Cnblogs.DashScope.WebSample/Components/_Imports.razor delete mode 100644 sample/Cnblogs.DashScope.WebSample/Program.cs delete mode 100644 sample/Cnblogs.DashScope.WebSample/Properties/launchSettings.json delete mode 100644 sample/Cnblogs.DashScope.WebSample/appsettings.Development.json delete mode 100644 sample/Cnblogs.DashScope.WebSample/appsettings.json delete mode 100644 sample/Cnblogs.DashScope.WebSample/wwwroot/app.css delete mode 100644 sample/Cnblogs.DashScope.WebSample/wwwroot/favicon.png delete mode 100644 sample/Cnblogs.DashScope.WebSample/wwwroot/tailwind.min.js diff --git a/Cnblogs.DashScope.Sdk.sln b/Cnblogs.DashScope.Sdk.sln index 328508e..165038d 100644 --- a/Cnblogs.DashScope.Sdk.sln +++ b/Cnblogs.DashScope.Sdk.sln @@ -24,10 +24,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cnblogs.DashScope.AI.UnitTe EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cnblogs.DashScope.Tests.Shared", "test\Cnblogs.DashScope.Tests.Shared\Cnblogs.DashScope.Tests.Shared.csproj", "{06F0AF23-445B-4C6F-9E19-570DA9B7435D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cnblogs.DashScope.WebSample", "sample\Cnblogs.DashScope.WebSample\Cnblogs.DashScope.WebSample.csproj", "{A3BC8B2D-BE81-4614-963B-9313F74D89B4}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cnblogs.DashScope.WebSample.Client", "sample\Cnblogs.DashScope.WebSample.Client\Cnblogs.DashScope.WebSample.Client.csproj", "{FA6E73D6-32C4-453A-88C5-00E1AFFE1397}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -41,8 +37,6 @@ Global {CC389455-A3EA-4F09-B524-4DC351A1E1AA} = {008988ED-0A3B-4272-BCC3-7B4110699345} {5088DE77-1CE3-46FB-B9D0-27A6C9A5EED1} = {CFC8ECB3-5248-46CD-A56C-EC088F2A3804} {5D5AD75A-8084-4738-AC56-B8A23E649452} = {008988ED-0A3B-4272-BCC3-7B4110699345} - {A3BC8B2D-BE81-4614-963B-9313F74D89B4} = {2E15D1EC-4A07-416E-8BE6-D907F509FD35} - {FA6E73D6-32C4-453A-88C5-00E1AFFE1397} = {2E15D1EC-4A07-416E-8BE6-D907F509FD35} {25EE79E1-147B-42FD-AFEA-E1550EDD1D36} = {CFC8ECB3-5248-46CD-A56C-EC088F2A3804} {06F0AF23-445B-4C6F-9E19-570DA9B7435D} = {CFC8ECB3-5248-46CD-A56C-EC088F2A3804} EndGlobalSection @@ -75,14 +69,6 @@ Global {5D5AD75A-8084-4738-AC56-B8A23E649452}.Debug|Any CPU.Build.0 = Debug|Any CPU {5D5AD75A-8084-4738-AC56-B8A23E649452}.Release|Any CPU.ActiveCfg = Release|Any CPU {5D5AD75A-8084-4738-AC56-B8A23E649452}.Release|Any CPU.Build.0 = Release|Any CPU - {A3BC8B2D-BE81-4614-963B-9313F74D89B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A3BC8B2D-BE81-4614-963B-9313F74D89B4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A3BC8B2D-BE81-4614-963B-9313F74D89B4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A3BC8B2D-BE81-4614-963B-9313F74D89B4}.Release|Any CPU.Build.0 = Release|Any CPU - {FA6E73D6-32C4-453A-88C5-00E1AFFE1397}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FA6E73D6-32C4-453A-88C5-00E1AFFE1397}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FA6E73D6-32C4-453A-88C5-00E1AFFE1397}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FA6E73D6-32C4-453A-88C5-00E1AFFE1397}.Release|Any CPU.Build.0 = Release|Any CPU {25EE79E1-147B-42FD-AFEA-E1550EDD1D36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {25EE79E1-147B-42FD-AFEA-E1550EDD1D36}.Debug|Any CPU.Build.0 = Debug|Any CPU {25EE79E1-147B-42FD-AFEA-E1550EDD1D36}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/sample/Cnblogs.DashScope.WebSample.Client/Cnblogs.DashScope.WebSample.Client.csproj b/sample/Cnblogs.DashScope.WebSample.Client/Cnblogs.DashScope.WebSample.Client.csproj deleted file mode 100644 index ab410d9..0000000 --- a/sample/Cnblogs.DashScope.WebSample.Client/Cnblogs.DashScope.WebSample.Client.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - - net8.0 - enable - enable - true - Default - false - - - - - - - diff --git a/sample/Cnblogs.DashScope.WebSample.Client/Pages/Counter.razor b/sample/Cnblogs.DashScope.WebSample.Client/Pages/Counter.razor deleted file mode 100644 index ed76db1..0000000 --- a/sample/Cnblogs.DashScope.WebSample.Client/Pages/Counter.razor +++ /dev/null @@ -1,20 +0,0 @@ -@page "/counter" -@rendermode InteractiveAuto - -Counter - -

Counter

- -

Current count: @_currentCount

- - - -@code { - private int _currentCount; - - private void IncrementCount() - { - _currentCount++; - } - -} diff --git a/sample/Cnblogs.DashScope.WebSample.Client/Program.cs b/sample/Cnblogs.DashScope.WebSample.Client/Program.cs deleted file mode 100644 index 519269f..0000000 --- a/sample/Cnblogs.DashScope.WebSample.Client/Program.cs +++ /dev/null @@ -1,5 +0,0 @@ -using Microsoft.AspNetCore.Components.WebAssembly.Hosting; - -var builder = WebAssemblyHostBuilder.CreateDefault(args); - -await builder.Build().RunAsync(); diff --git a/sample/Cnblogs.DashScope.WebSample.Client/_Imports.razor b/sample/Cnblogs.DashScope.WebSample.Client/_Imports.razor deleted file mode 100644 index 84ddc7a..0000000 --- a/sample/Cnblogs.DashScope.WebSample.Client/_Imports.razor +++ /dev/null @@ -1,9 +0,0 @@ -@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 Cnblogs.DashScope.WebSample.Client diff --git a/sample/Cnblogs.DashScope.WebSample.Client/wwwroot/appsettings.Development.json b/sample/Cnblogs.DashScope.WebSample.Client/wwwroot/appsettings.Development.json deleted file mode 100644 index 0c208ae..0000000 --- a/sample/Cnblogs.DashScope.WebSample.Client/wwwroot/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/sample/Cnblogs.DashScope.WebSample.Client/wwwroot/appsettings.json b/sample/Cnblogs.DashScope.WebSample.Client/wwwroot/appsettings.json deleted file mode 100644 index 0c208ae..0000000 --- a/sample/Cnblogs.DashScope.WebSample.Client/wwwroot/appsettings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/sample/Cnblogs.DashScope.WebSample/Cnblogs.DashScope.WebSample.csproj b/sample/Cnblogs.DashScope.WebSample/Cnblogs.DashScope.WebSample.csproj deleted file mode 100644 index b8f2ba9..0000000 --- a/sample/Cnblogs.DashScope.WebSample/Cnblogs.DashScope.WebSample.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - - net8.0 - enable - enable - false - - - - - - - - - - - <_ContentIncludedByDefault Remove="Cnblogs.DashScope.WebSample\obj\Cnblogs.DashScope.WebSample.csproj.nuget.dgspec.json" /> - <_ContentIncludedByDefault Remove="Cnblogs.DashScope.WebSample\obj\project.assets.json" /> - <_ContentIncludedByDefault Remove="wwwroot\tailwind.min.js" /> - - - diff --git a/sample/Cnblogs.DashScope.WebSample/Components/App.razor b/sample/Cnblogs.DashScope.WebSample/Components/App.razor deleted file mode 100644 index 64c93c2..0000000 --- a/sample/Cnblogs.DashScope.WebSample/Components/App.razor +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Layout/MainLayout.razor b/sample/Cnblogs.DashScope.WebSample/Components/Layout/MainLayout.razor deleted file mode 100644 index 89f4b0c..0000000 --- a/sample/Cnblogs.DashScope.WebSample/Components/Layout/MainLayout.razor +++ /dev/null @@ -1,23 +0,0 @@ -@inherits LayoutComponentBase - -
- - -
-
- About -
- -
- @Body -
-
-
- -
- An unhandled error has occurred. - Reload - 🗙 -
diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Layout/MainLayout.razor.css b/sample/Cnblogs.DashScope.WebSample/Components/Layout/MainLayout.razor.css deleted file mode 100644 index 038baf1..0000000 --- a/sample/Cnblogs.DashScope.WebSample/Components/Layout/MainLayout.razor.css +++ /dev/null @@ -1,96 +0,0 @@ -.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 { - background: lightyellow; - bottom: 0; - box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); - display: none; - left: 0; - padding: 0.6rem 1.25rem 0.7rem 1.25rem; - position: fixed; - width: 100%; - z-index: 1000; -} - - #blazor-error-ui .dismiss { - cursor: pointer; - position: absolute; - right: 0.75rem; - top: 0.5rem; - } diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Layout/NavMenu.razor b/sample/Cnblogs.DashScope.WebSample/Components/Layout/NavMenu.razor deleted file mode 100644 index aacaa12..0000000 --- a/sample/Cnblogs.DashScope.WebSample/Components/Layout/NavMenu.razor +++ /dev/null @@ -1,29 +0,0 @@ - - - - - diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Layout/NavMenu.razor.css b/sample/Cnblogs.DashScope.WebSample/Components/Layout/NavMenu.razor.css deleted file mode 100644 index 4e15395..0000000 --- a/sample/Cnblogs.DashScope.WebSample/Components/Layout/NavMenu.razor.css +++ /dev/null @@ -1,105 +0,0 @@ -.navbar-toggler { - appearance: none; - cursor: pointer; - width: 3.5rem; - height: 2.5rem; - color: white; - position: absolute; - top: 0.5rem; - right: 1rem; - border: 1px solid rgba(255, 255, 255, 0.1); - background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1); -} - -.navbar-toggler:checked { - background-color: rgba(255, 255, 255, 0.5); -} - -.top-row { - height: 3.5rem; - background-color: rgba(0,0,0,0.4); -} - -.navbar-brand { - font-size: 1.1rem; -} - -.bi { - display: inline-block; - position: relative; - width: 1.25rem; - height: 1.25rem; - margin-right: 0.75rem; - top: -1px; - background-size: cover; -} - -.bi-house-door-fill-nav-menu { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E"); -} - -.bi-plus-square-fill-nav-menu { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E"); -} - -.bi-list-nested-nav-menu { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E"); -} - -.nav-item { - font-size: 0.9rem; - padding-bottom: 0.5rem; -} - - .nav-item:first-of-type { - padding-top: 1rem; - } - - .nav-item:last-of-type { - padding-bottom: 1rem; - } - - .nav-item ::deep .nav-link { - color: #d7d7d7; - background: none; - border: none; - border-radius: 4px; - height: 3rem; - display: flex; - align-items: center; - line-height: 3rem; - width: 100%; - } - -.nav-item ::deep a.active { - background-color: rgba(255,255,255,0.37); - color: white; -} - -.nav-item ::deep .nav-link:hover { - background-color: rgba(255,255,255,0.1); - color: white; -} - -.nav-scrollable { - display: none; -} - -.navbar-toggler:checked ~ .nav-scrollable { - display: block; -} - -@media (min-width: 641px) { - .navbar-toggler { - display: none; - } - - .nav-scrollable { - /* Never collapse the sidebar for wide screens */ - display: block; - - /* Allow sidebar to scroll for tall menus */ - height: calc(100vh - 3.5rem); - overflow-y: auto; - } -} diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Pages/Error.razor b/sample/Cnblogs.DashScope.WebSample/Components/Pages/Error.razor deleted file mode 100644 index c8dfb55..0000000 --- a/sample/Cnblogs.DashScope.WebSample/Components/Pages/Error.razor +++ /dev/null @@ -1,38 +0,0 @@ -@page "/Error" -@using System.Diagnostics - -Error - -

Error.

-

An error occurred while processing your request.

- -@if (ShowRequestId) -{ -

- Request ID: @RequestId -

-} - -

Development Mode

-

- Swapping to Development environment will display more detailed information about the error that occurred. -

-

- The Development environment shouldn't be enabled for deployed applications. - It can result in displaying sensitive information from exceptions to end users. - For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development - and restarting the app. -

- -@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; - -} diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Pages/Home.razor b/sample/Cnblogs.DashScope.WebSample/Components/Pages/Home.razor deleted file mode 100644 index 9001e0b..0000000 --- a/sample/Cnblogs.DashScope.WebSample/Components/Pages/Home.razor +++ /dev/null @@ -1,7 +0,0 @@ -@page "/" - -Home - -

Hello, world!

- -Welcome to your new app. diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Pages/Weather.razor b/sample/Cnblogs.DashScope.WebSample/Components/Pages/Weather.razor deleted file mode 100644 index d454903..0000000 --- a/sample/Cnblogs.DashScope.WebSample/Components/Pages/Weather.razor +++ /dev/null @@ -1,67 +0,0 @@ -@page "/weather" -@attribute [StreamRendering] - -Weather - -

Weather

- -

This component demonstrates showing data.

- -@if (_forecasts == null) -{ -

- Loading... -

-} -else -{ - - - - - - - - - - - @foreach (var forecast in _forecasts) - { - - - - - - - } - -
DateTemp. (C)Temp. (F)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
-} - -@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); - } - -} diff --git a/sample/Cnblogs.DashScope.WebSample/Components/Routes.razor b/sample/Cnblogs.DashScope.WebSample/Components/Routes.razor deleted file mode 100644 index fd6715a..0000000 --- a/sample/Cnblogs.DashScope.WebSample/Components/Routes.razor +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/sample/Cnblogs.DashScope.WebSample/Components/_Imports.razor b/sample/Cnblogs.DashScope.WebSample/Components/_Imports.razor deleted file mode 100644 index 2642071..0000000 --- a/sample/Cnblogs.DashScope.WebSample/Components/_Imports.razor +++ /dev/null @@ -1,11 +0,0 @@ -@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 Cnblogs.DashScope.WebSample -@using Cnblogs.DashScope.WebSample.Client -@using Cnblogs.DashScope.WebSample.Components diff --git a/sample/Cnblogs.DashScope.WebSample/Program.cs b/sample/Cnblogs.DashScope.WebSample/Program.cs deleted file mode 100644 index be30944..0000000 --- a/sample/Cnblogs.DashScope.WebSample/Program.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Cnblogs.DashScope.WebSample.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.UseHttpsRedirection(); - -app.UseStaticFiles(); -app.UseAntiforgery(); - -app.MapRazorComponents() - .AddInteractiveServerRenderMode() - .AddInteractiveWebAssemblyRenderMode() - .AddAdditionalAssemblies(typeof(Cnblogs.DashScope.WebSample.Client._Imports).Assembly); - -app.Run(); diff --git a/sample/Cnblogs.DashScope.WebSample/Properties/launchSettings.json b/sample/Cnblogs.DashScope.WebSample/Properties/launchSettings.json deleted file mode 100644 index 4ff3962..0000000 --- a/sample/Cnblogs.DashScope.WebSample/Properties/launchSettings.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:22697", - "sslPort": 44358 - } - }, - "profiles": { - "http": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", - "applicationUrl": "http://localhost:5033", - "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:7194;http://localhost:5033", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } - } diff --git a/sample/Cnblogs.DashScope.WebSample/appsettings.Development.json b/sample/Cnblogs.DashScope.WebSample/appsettings.Development.json deleted file mode 100644 index 0c208ae..0000000 --- a/sample/Cnblogs.DashScope.WebSample/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/sample/Cnblogs.DashScope.WebSample/appsettings.json b/sample/Cnblogs.DashScope.WebSample/appsettings.json deleted file mode 100644 index 10f68b8..0000000 --- a/sample/Cnblogs.DashScope.WebSample/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" -} diff --git a/sample/Cnblogs.DashScope.WebSample/wwwroot/app.css b/sample/Cnblogs.DashScope.WebSample/wwwroot/app.css deleted file mode 100644 index 2bd9b78..0000000 --- a/sample/Cnblogs.DashScope.WebSample/wwwroot/app.css +++ /dev/null @@ -1,51 +0,0 @@ -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; -} diff --git a/sample/Cnblogs.DashScope.WebSample/wwwroot/favicon.png b/sample/Cnblogs.DashScope.WebSample/wwwroot/favicon.png deleted file mode 100644 index 8422b59695935d180d11d5dbe99653e711097819..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1148 zcmV-?1cUpDP)9h26h2-Cs%i*@Moc3?#6qJID|D#|3|2Hn7gTIYEkr|%Xjp);YgvFmB&0#2E2b=| zkVr)lMv9=KqwN&%obTp-$<51T%rx*NCwceh-E+=&e(oLO`@Z~7gybJ#U|^tB2Pai} zRN@5%1qsZ1e@R(XC8n~)nU1S0QdzEYlWPdUpH{wJ2Pd4V8kI3BM=)sG^IkUXF2-j{ zrPTYA6sxpQ`Q1c6mtar~gG~#;lt=s^6_OccmRd>o{*=>)KS=lM zZ!)iG|8G0-9s3VLm`bsa6e ze*TlRxAjXtm^F8V`M1%s5d@tYS>&+_ga#xKGb|!oUBx3uc@mj1%=MaH4GR0tPBG_& z9OZE;->dO@`Q)nr<%dHAsEZRKl zedN6+3+uGHejJp;Q==pskSAcRcyh@6mjm2z-uG;s%dM-u0*u##7OxI7wwyCGpS?4U zBFAr(%GBv5j$jS@@t@iI8?ZqE36I^4t+P^J9D^ELbS5KMtZ z{Qn#JnSd$15nJ$ggkF%I4yUQC+BjDF^}AtB7w348EL>7#sAsLWs}ndp8^DsAcOIL9 zTOO!!0!k2`9BLk25)NeZp7ev>I1Mn={cWI3Yhx2Q#DnAo4IphoV~R^c0x&nw*MoIV zPthX?{6{u}sMS(MxD*dmd5rU(YazQE59b|TsB5Tm)I4a!VaN@HYOR)DwH1U5y(E)z zQqQU*B%MwtRQ$%x&;1p%ANmc|PkoFJZ%<-uq%PX&C!c-7ypis=eP+FCeuv+B@h#{4 zGx1m0PjS~FJt}3mdt4c!lel`1;4W|03kcZRG+DzkTy|7-F~eDsV2Tx!73dM0H0CTh zl)F-YUkE1zEzEW(;JXc|KR5{ox%YTh{$%F$a36JP6Nb<0%#NbSh$dMYF-{ z1_x(Vx)}fs?5_|!5xBTWiiIQHG<%)*e=45Fhjw_tlnmlixq;mUdC$R8v#j( zhQ$9YR-o%i5Uc`S?6EC51!bTRK=Xkyb<18FkCKnS2;o*qlij1YA@-nRpq#OMTX&RbL<^2q@0qja!uIvI;j$6>~k@IMwD42=8$$!+R^@5o6HX(*n~{var e=10;function t(t,o){let a=o?.from?{file:o.from,code:t}:null;"\ufeff"===t[0]&&(t=" "+t.slice(1));let i,l=[],s=[],c=[],u=null,d=null,f="",p="",h=0;for(let o=0;o0&&t[n]===e[e.length-1]&&(e=e.slice(0,-1))}}let c=n(f,s);if(!c)throw new Error("Invalid custom property, expected a value");a&&(c.src=[a,r,o],c.dst=[a,r,o]),u?u.nodes.push(c):l.push(c),f=""}else if(59===m&&64===f.charCodeAt(0))d=r(f),a&&(d.src=[a,h,o],d.dst=[a,h,o]),u?u.nodes.push(d):l.push(d),f="",d=null;else if(59===m&&")"!==p[p.length-1]){let e=n(f);if(!e)throw 0===f.length?new Error("Unexpected semicolon"):new Error(`Invalid declaration: \`${f.trim()}\``);a&&(e.src=[a,h,o],e.dst=[a,h,o]),u?u.nodes.push(e):l.push(e),f=""}else if(123===m&&")"!==p[p.length-1])p+="}",d=b(f.trim()),a&&(d.src=[a,h,o],d.dst=[a,h,o]),u&&u.nodes.push(d),c.push(u),u=d,f="",d=null;else if(125===m&&")"!==p[p.length-1]){if(""===p)throw new Error("Missing opening {");if(p=p.slice(0,-1),f.length>0)if(64===f.charCodeAt(0))d=r(f),a&&(d.src=[a,h,o],d.dst=[a,h,o]),u?u.nodes.push(d):l.push(d),f="",d=null;else{let e=f.indexOf(":");if(u){let t=n(f,e);if(!t)throw new Error(`Invalid declaration: \`${f.trim()}\``);a&&(t.src=[a,h,o],t.dst=[a,h,o]),u.nodes.push(t)}}let e=c.pop()??null;null===e&&u&&l.push(u),u=e,f="",d=null}else if(40===m)p+=")",f+="(";else if(41===m){if(")"!==p[p.length-1])throw new Error("Missing opening (");p=p.slice(0,-1),f+=")"}else{if(0===f.length&&(32===m||m===e||9===m))continue;""===f&&(h=o),f+=String.fromCharCode(m)}}}if(64===f.charCodeAt(0)){let e=r(f);a&&(e.src=[a,h,t.length],e.dst=[a,h,t.length]),l.push(e)}if(p.length>0&&u){if("rule"===u.kind)throw new Error(`Missing closing } at ${u.selector}`);if("at-rule"===u.kind)throw new Error(`Missing closing } at ${u.name} ${u.params}`)}return s.length>0?s.concat(l):l}function r(e,t=[]){let r=e,n="";for(let t=5;t=1&&t<=31||127===t||0===o&&t>=48&&t<=57||1===o&&t>=48&&t<=57&&45===i?"\\"+t.toString(16)+" ":t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?r.charAt(o):"\\"+r.charAt(o):"�";return a}function a(e){return e.replace(/\\([\dA-Fa-f]{1,6}[\t\n\f\r ]?|[\S\s])/g,(e=>e.length>2?String.fromCodePoint(Number.parseInt(e.slice(1).trim(),16)):e[1]))}var i=new Map([["--font",["--font-weight","--font-size"]],["--inset",["--inset-shadow","--inset-ring"]],["--text",["--text-color","--text-decoration-color","--text-decoration-thickness","--text-indent","--text-shadow","--text-underline-offset"]]]);function l(e,t){return(i.get(t)??[]).some((t=>e===t||e.startsWith(`${t}-`)))}var s=class{constructor(e=new Map,t=new Set([])){this.values=e,this.keyframes=t}prefix=null;add(e,t,r=0,n){if(e.endsWith("-*")){if("initial"!==t)throw new Error(`Invalid theme value \`${t}\` for namespace \`${e}\``);"--*"===e?this.values.clear():this.clearNamespace(e.slice(0,-2),0)}if(4&r){let t=this.values.get(e);if(t&&!(4&t.options))return}"initial"===t?this.values.delete(e):this.values.set(e,{value:t,options:r,src:n})}keysInNamespaces(e){let t=[];for(let r of e){let e=`${r}-`;for(let n of this.values.keys())n.startsWith(e)&&-1===n.indexOf("--",2)&&(l(n,r)||t.push(n.slice(e.length)))}return t}get(e){for(let t of e){let e=this.values.get(t);if(e)return e.value}return null}hasDefault(e){return!(4&~this.getOptions(e))}getOptions(e){return e=a(this.#e(e)),this.values.get(e)?.options??0}entries(){return this.prefix?Array.from(this.values,(e=>(e[0]=this.prefixKey(e[0]),e))):this.values.entries()}prefixKey(e){return this.prefix?`--${this.prefix}-${e.slice(2)}`:e}#e(e){return this.prefix?`--${e.slice(3+this.prefix.length)}`:e}clearNamespace(e,t){let r=i.get(e)??[];e:for(let n of this.values.keys())if(n.startsWith(e)){if(0!==t&&(this.getOptions(n)&t)!==t)continue;for(let e of r)if(n.startsWith(e))continue e;this.values.delete(n)}}#t(e,t){for(let r of t){let t=null!==e?`${r}-${e}`:r;if(!this.values.has(t)){if(null===e||!e.includes("."))continue;if(t=`${r}-${e.replaceAll(".","_")}`,!this.values.has(t))continue}if(!l(t,r))return t}return null}#r(e){let t=this.values.get(e);if(!t)return null;let r=null;return 2&t.options&&(r=t.value),`var(${o(this.prefixKey(e))}${r?`, ${r}`:""})`}markUsedVariable(e){let t=a(this.#e(e)),r=this.values.get(t);if(!r)return!1;let n=16&r.options;return r.options|=16,!n}resolve(e,t,r=0){let n=this.#t(e,t);if(!n)return null;let o=this.values.get(n);return 1&(r|o.options)?o.value:this.#r(n)}resolveValue(e,t){let r=this.#t(e,t);return r?this.values.get(r).value:null}resolveWith(e,t,r=[]){let n=this.#t(e,t);if(!n)return null;let o={};for(let e of r){let t=`${n}${e}`,r=this.values.get(t);r&&(1&r.options?o[e]=r.value:o[e]=this.#r(t))}let a=this.values.get(n);return 1&a.options?[a.value,o]:[this.#r(n),o]}namespace(e){let t=new Map,r=`${e}-`;for(let[n,o]of this.values)n===e?t.set(null,o.value):n.startsWith(`${r}-`)?t.set(n.slice(e.length),o.value):n.startsWith(r)&&t.set(n.slice(r.length),o.value);return t}addKeyframes(e){this.keyframes.add(e)}getKeyframes(){return Array.from(this.keyframes)}},c=class extends Map{constructor(e){super(),this.factory=e}get(e){let t=super.get(e);return void 0===t&&(t=this.factory(e,this),this.set(e,t)),t}};function u(e){return{kind:"word",value:e}}function d(e,t){return{kind:"function",value:e,nodes:t}}function f(e){return{kind:"separator",value:e}}function p(e,t,r=null){for(let n=0;n0){let e=u(a);o?o.nodes.push(e):r.push(e),a=""}let n=i,l=i+1;for(;l0){let t=u(a);e.nodes.push(t),a=""}o=n.length>0?n[n.length-1]:null;break}default:a+=String.fromCharCode(l)}}return a.length>0&&r.push(u(a)),r}function g(e){let t=[];return p(m(e),(e=>{if("function"===e.kind&&"var"===e.value)return p(e.nodes,(e=>{"word"!==e.kind||"-"!==e.value[0]||"-"!==e.value[1]||t.push(e.value)})),1})),t}var v=64;function w(e,t=[]){return{kind:"rule",selector:e,nodes:t}}function k(e,t="",r=[]){return{kind:"at-rule",name:e,params:t,nodes:r}}function b(e,t=[]){return e.charCodeAt(0)===v?r(e,t):w(e,t)}function y(e,t,r=!1){return{kind:"declaration",property:e,value:t,important:r}}function x(e){return{kind:"comment",value:e}}function $(e,t){return{kind:"context",context:e,nodes:t}}function z(e){return{kind:"at-root",nodes:e}}function A(e,t,r=[],n={}){for(let o=0;onew Set)),i=new c((()=>new Set)),l=new Set,s=new Set,u=[],d=[],f=new c((()=>new Set));function v(e,c,p={},h=0){if("declaration"===e.kind){if("--tw-sort"===e.property||void 0===e.value||null===e.value)return;if(p.theme&&"-"===e.property[0]&&"-"===e.property[1]){if("initial"===e.value)return void(e.value=void 0);p.keyframes||a.get(c).add(e)}if(e.value.includes("var("))if(p.theme&&"-"===e.property[0]&&"-"===e.property[1])for(let t of g(e.value))f.get(t).add(e.property);else t.trackUsedVariables(e.value);if("animation"===e.property)for(let t of E(e.value))s.add(t);2&r&&e.value.includes("color-mix(")&&i.get(c).add(e),c.push(e)}else if("rule"===e.kind)if("&"===e.selector)for(let t of e.nodes){let e=[];v(t,e,p,h+1),e.length>0&&c.push(...e)}else{let t={...e,nodes:[]};for(let r of e.nodes)v(r,t.nodes,p,h+1);t.nodes.length>0&&c.push(t)}else if("at-rule"===e.kind&&"@property"===e.name&&0===h){if(o.has(e.params))return;if(1&r){let t=e.params,r=null,n=!1;for(let t of e.nodes)"declaration"===t.kind&&("initial-value"===t.property?r=t.value:"inherits"===t.property&&(n="true"===t.value));let o=y(t,r??"initial");o.src=e.src,n?u.push(o):d.push(o)}o.add(e.params);let t={...e,nodes:[]};for(let r of e.nodes)v(r,t.nodes,p,h+1);c.push(t)}else if("at-rule"===e.kind){"@keyframes"===e.name&&(p={...p,keyframes:!0});let t={...e,nodes:[]};for(let r of e.nodes)v(r,t.nodes,p,h+1);"@keyframes"===e.name&&p.theme&&l.add(t),(t.nodes.length>0||"@layer"===t.name||"@charset"===t.name||"@custom-media"===t.name||"@namespace"===t.name||"@import"===t.name)&&c.push(t)}else if("at-root"===e.kind)for(let t of e.nodes){let e=[];v(t,e,p,0);for(let t of e)n.push(t)}else if("context"===e.kind){if(e.context.reference)return;for(let t of e.nodes)v(t,c,{...p,...e.context},h)}else"comment"===e.kind&&c.push(e)}let w=[];for(let t of e)v(t,w,{},0);e:for(let[e,r]of a)for(let n of r){if(K(n.property,t.theme,f)){if(n.property.startsWith(t.theme.prefixKey("--animate-")))for(let e of E(n.value))s.add(e);continue}let r=e.indexOf(n);if(e.splice(r,1),0===e.length){let t=S(w,(t=>"rule"===t.kind&&t.nodes===e));if(!t||0===t.length)continue e;for(t.unshift({kind:"at-root",nodes:w});;){let e=t.pop();if(!e)break;let r=t[t.length-1];if(!r||"at-root"!==r.kind&&"at-rule"!==r.kind)break;let n=r.nodes.indexOf(e);if(-1===n)break;r.nodes.splice(n,1)}continue e}}for(let e of l)if(!s.has(e.params)){let t=n.indexOf(e);n.splice(t,1)}if(w=w.concat(n),2&r)for(let[e,r]of i)for(let n of r){let r=e.indexOf(n);if(-1===r||null==n.value)continue;let o=m(n.value),a=!1;if(p(o,((e,{replaceWith:r})=>{if("function"!==e.kind||"color-mix"!==e.value)return;let n=!1,o=!1;if(p(e.nodes,((e,{replaceWith:r})=>{if("word"==e.kind&&"currentcolor"===e.value.toLowerCase())return o=!0,void(a=!0);let i=e,l=null,s=new Set;do{if("function"!==i.kind||"var"!==i.value)return;let e=i.nodes[0];if(!e||"word"!==e.kind)return;let r=e.value;if(s.has(r))return void(n=!0);if(s.add(r),a=!0,l=t.theme.resolveValue(null,[e.value]),!l)return void(n=!0);if("currentcolor"===l.toLowerCase())return void(o=!0);i=l.startsWith("var(")?m(l)[0]:null}while(i);r({kind:"word",value:l})})),n||o){let t=e.nodes.findIndex((e=>"separator"===e.kind&&e.value.trim().includes(",")));if(-1===t)return;let n=e.nodes.length>t?e.nodes[t+1]:null;if(!n)return;r(n)}else if(a){let t=e.nodes[2];"word"===t.kind&&("oklab"===t.value||"oklch"===t.value||"lab"===t.value||"lch"===t.value)&&(t.value="srgb")}})),!a)continue;let i={...n,value:h(o)},l=b("@supports (color: color-mix(in lab, red, red))",[n]);l.src=n.src,e.splice(r,1,i,l)}if(1&r){let e=[];if(u.length>0){let t=b(":root, :host",u);t.src=u[0].src,e.push(t)}if(d.length>0){let t=b("*, ::before, ::after, ::backdrop",d);t.src=d[0].src,e.push(t)}if(e.length>0){let t=w.findIndex((e=>!("comment"===e.kind||"at-rule"===e.kind&&("@charset"===e.name||"@import"===e.name)))),r=k("@layer","properties",[]);r.src=e[0].src,w.splice(t<0?w.length:t,0,r);let n=b("@layer properties",[k("@supports","((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b))))",e)]);n.src=e[0].src,n.nodes[0].src=e[0].src,w.push(n)}}return w}function T(e,t){let r=0,n={file:null,code:""};function o(e,a=0){let i="",l=" ".repeat(a);if("declaration"===e.kind){if(i+=`${l}${e.property}: ${e.value}${e.important?" !important":""};\n`,t){r+=l.length;let t=r;r+=e.property.length,r+=2,r+=e.value?.length??0,e.important&&(r+=11);let o=r;r+=2,e.dst=[n,t,o]}}else if("rule"===e.kind){if(i+=`${l}${e.selector} {\n`,t){r+=l.length;let t=r;r+=e.selector.length,r+=1;let o=r;e.dst=[n,t,o],r+=2}for(let t of e.nodes)i+=o(t,a+1);i+=`${l}}\n`,t&&(r+=l.length,r+=2)}else if("at-rule"===e.kind){if(0===e.nodes.length){let o=`${l}${e.name} ${e.params};\n`;if(t){r+=l.length;let t=r;r+=e.name.length,r+=1,r+=e.params.length;let o=r;r+=2,e.dst=[n,t,o]}return o}if(i+=`${l}${e.name}${e.params?` ${e.params} `:" "}{\n`,t){r+=l.length;let t=r;r+=e.name.length,e.params&&(r+=1,r+=e.params.length),r+=1;let o=r;e.dst=[n,t,o],r+=2}for(let t of e.nodes)i+=o(t,a+1);i+=`${l}}\n`,t&&(r+=l.length,r+=2)}else if("comment"===e.kind){if(i+=`${l}/*${e.value}*/\n`,t){r+=l.length;let t=r;r+=2+e.value.length+2;let o=r;e.dst=[n,t,o],r+=1}}else if("context"===e.kind||"at-root"===e.kind)return"";return i}let a="";for(let t of e)a+=o(t,0);return n.code=a,a}function S(e,t){let r=[];return A(e,((e,{path:n})=>{if(t(e))return r=[...n],2})),r}function K(e,t,r,n=new Set){if(n.has(e)||(n.add(e),24&t.getOptions(e)))return!0;{let o=r.get(e)??[];for(let e of o)if(K(e,t,r,n))return!0}return!1}function E(e){return e.split(/[\s,]+/)}var V=["calc","min","max","clamp","mod","rem","sin","cos","tan","asin","acos","atan","atan2","pow","sqrt","hypot","log","exp","round"],N=["anchor-size"],O=new RegExp(`(${N.join("|")})\\(`,"g");function F(e){return-1!==e.indexOf("(")&&V.some((t=>e.includes(`${t}(`)))}function W(e){if(-1===e.indexOf("("))return U(e);let t=m(e);return D(t),e=function(e){if(!V.some((t=>e.includes(t))))return e;let t=!1;N.some((t=>e.includes(t)))&&(O.lastIndex=0,e=e.replace(O,((e,r)=>(t=!0,`$${N.indexOf(r)}$(`))));let r="",n=[];for(let t=0;t=0;r--){let t=e.charCodeAt(r);if(t>=48&&t<=57)a=r;else{if(!(t>=97&&t<=122))break;a=r}}let i=e.slice(a,t);if(V.includes(i)){n.unshift(!0);continue}if(n[0]&&""===i){n.unshift(!0);continue}n.unshift(!1)}}return t?r.replace(/\$(\d+)\$/g,((e,t)=>N[t]??e)):r}(e=h(t)),e}function U(e,t=!1){let r="";for(let n=0;n0&&o===M[t-1]&&t--;break;case 59:if(0===t)return!1}}return!0}var L=new Uint8Array(256);function R(e,t){let r=0,n=[],o=0,a=e.length,i=t.charCodeAt(0);for(let t=0;t0&&l===L[r-1]&&r--}else n.push(e.slice(o,t)),o=t+1}return n.push(e.slice(o)),n}function I(e){if("["===e[0]&&"]"===e[e.length-1]){let t=W(e.slice(1,-1));return B(t)&&0!==t.length&&0!==t.trim().length?{kind:"arbitrary",value:t}:null}return"("===e[0]&&")"===e[e.length-1]?"-"===(e=e.slice(1,-1))[0]&&"-"===e[1]&&B(e)?{kind:"arbitrary",value:W(e=`var(${e})`)}:null:{kind:"named",value:e}}function*P(e,t){t(e)&&(yield[e,null]);let r=e.lastIndexOf("-");for(;r>0;){let n=e.slice(0,r);if(t(n)){let t=[n,e.slice(r+1)];if(""===t[1])break;yield t}r=e.lastIndexOf("-",r-1)}"@"===e[0]&&t("@")&&(yield["@",e.slice(1)])}function q(e){if(null===e)return"";let t=Q(e.value),r=t?e.value.slice(4,-1):e.value,[n,o]=t?["(",")"]:["[","]"];return"arbitrary"===e.kind?`/${n}${Y(r)}${o}`:"named"===e.kind?`/${e.value}`:""}function H(e){if("static"===e.kind)return e.root;if("arbitrary"===e.kind)return`[${Y(function(e){return G.get(e)}(e.selector))}]`;let t="";if("functional"===e.kind){t+=e.root;let r="@"!==e.root;if(e.value)if("arbitrary"===e.value.kind){let n=Q(e.value.value),o=n?e.value.value.slice(4,-1):e.value.value,[a,i]=n?["(",")"]:["[","]"];t+=`${r?"-":""}${a}${Y(o)}${i}`}else"named"===e.value.kind&&(t+=`${r?"-":""}${e.value.value}`)}return"compound"===e.kind&&(t+=e.root,t+="-",t+=H(e.variant)),("functional"===e.kind||"compound"===e.kind)&&(t+=q(e.modifier)),t}var Z=new c((e=>{let t=m(e),r=new Set;return p(t,((e,{parent:n})=>{let o=null===n?t:n.nodes??[];if("word"!==e.kind||"+"!==e.value&&"-"!==e.value&&"*"!==e.value&&"/"!==e.value)"separator"===e.kind&&"/"===e.value.trim()?e.value="/":"separator"===e.kind&&e.value.length>0&&""===e.value.trim()?(o[0]===e||o[o.length-1]===e)&&r.add(e):"separator"===e.kind&&","===e.value.trim()&&(e.value=",");else{let t=o.indexOf(e)??-1;if(-1===t)return;let n=o[t-1];if("separator"!==n?.kind||" "!==n.value)return;let a=o[t+1];if("separator"!==a?.kind||" "!==a.value)return;r.add(n),r.add(a)}})),r.size>0&&p(t,((e,{replaceWith:t})=>{r.has(e)&&(r.delete(e),t([]))})),J(t),h(t)}));function Y(e){return Z.get(e)}var G=new c((e=>{let t=m(e);return 3===t.length&&"word"===t[0].kind&&"&"===t[0].value&&"separator"===t[1].kind&&":"===t[1].value&&"function"===t[2].kind&&"is"===t[2].value?h(t[2].nodes):e}));function J(e){for(let t of e)switch(t.kind){case"function":if("url"===t.value||t.value.endsWith("_url")){t.value=te(t.value);break}if("var"===t.value||t.value.endsWith("_var")||"theme"===t.value||t.value.endsWith("_theme")){t.value=te(t.value);for(let e=0;e{let t=m(e);return 1===t.length&&"function"===t[0].kind&&"var"===t[0].value}));function Q(e){return X.get(e)}function ee(e){throw new Error(`Unexpected value: ${e}`)}function te(e){return e.replaceAll("_",String.raw`\_`).replaceAll(" ","_")}function re(e,t,r){if(e===t)return 0;let n=e.indexOf("("),o=t.indexOf("("),a=-1===n?e.replace(/[\d.]+/g,""):e.slice(0,n),i=-1===o?t.replace(/[\d.]+/g,""):t.slice(0,o),l=(a===i?0:a0},"bg-size":function(e){let t=0;for(let r of R(e,",")){if("cover"===r||"contain"===r){t+=1;continue}let e=R(r," ");if(1!==e.length&&2!==e.length)return!1;e.every((e=>"auto"===e||we(e)||me(e)))&&(t+=1)}return t>0},"line-width":function(e){return R(e," ").every((e=>we(e)||pe(e)||"thin"===e||"medium"===e||"thick"===e))},image:function(e){let t=0;for(let r of R(e,","))if(!r.startsWith("var(")){if(se(r)){t+=1;continue}if(ue.test(r)){t+=1;continue}if(ce.test(r)){t+=1;continue}return!1}return t>0},"family-name":function(e){let t=0;for(let r of R(e,",")){let e=r.charCodeAt(0);if(e>=48&&e<=57)return!1;r.startsWith("var(")||(t+=1)}return t>0},"generic-name":function(e){return"serif"===e||"sans-serif"===e||"monospace"===e||"cursive"===e||"fantasy"===e||"system-ui"===e||"ui-serif"===e||"ui-sans-serif"===e||"ui-monospace"===e||"ui-rounded"===e||"math"===e||"emoji"===e||"fangsong"===e},"absolute-size":function(e){return"xx-small"===e||"x-small"===e||"small"===e||"medium"===e||"large"===e||"x-large"===e||"xx-large"===e||"xxx-large"===e},"relative-size":function(e){return"larger"===e||"smaller"===e},angle:function(e){return ke.test(e)},vector:function(e){return be.test(e)}};function ie(e,t){if(e.startsWith("var("))return null;for(let r of t)if(ae[r]?.(e))return r;return null}var le=/^url\(.*\)$/;function se(e){return le.test(e)}var ce=/^(?:element|image|cross-fade|image-set)\(/,ue=/^(repeating-)?(conic|linear|radial)-gradient\(/;var de=/[+-]?\d*\.?\d+(?:[eE][+-]?\d+)?/,fe=new RegExp(`^${de.source}$`);function pe(e){return fe.test(e)||F(e)}var he=new RegExp(`^${de.source}%$`);function me(e){return he.test(e)||F(e)}var ge=new RegExp(`^${de.source}s*/s*${de.source}$`);var ve=new RegExp(`^${de.source}(${["cm","mm","Q","in","pc","pt","px","em","ex","ch","rem","lh","rlh","vw","vh","vmin","vmax","vb","vi","svw","svh","lvw","lvh","dvw","dvh","cqw","cqh","cqi","cqb","cqmin","cqmax"].join("|")})$`);function we(e){return ve.test(e)||F(e)}var ke=new RegExp(`^${de.source}(${["deg","rad","grad","turn"].join("|")})$`);var be=new RegExp(`^${de.source} +${de.source} +${de.source}$`);function ye(e){let t=Number(e);return Number.isInteger(t)&&t>=0&&String(t)===String(e)}function xe(e){let t=Number(e);return Number.isInteger(t)&&t>0&&String(t)===String(e)}function $e(e){return Ae(e,.25)}function ze(e){return Ae(e,.25)}function Ae(e,t){let r=Number(e);return r>=0&&r%t==0&&String(r)===String(e)}var je=new Set(["inset","inherit","initial","revert","unset"]),Ce=/^-?(\d+|\.\d+)(.*?)$/g;function Te(e,t){return R(e,",").map((e=>{let r=R(e=e.trim()," ").filter((e=>""!==e.trim())),n=null,o=null,a=null;for(let e of r)je.has(e)||(Ce.test(e)?(null===o?o=e:null===a&&(a=e),Ce.lastIndex=0):null===n&&(n=e));if(null===o||null===a)return e;let i=t(n??"currentcolor");return null!==n?e.replace(n,i):`${e} ${i}`})).join(", ")}var Se=/^-?[a-z][a-zA-Z0-9/%._-]*$/,Ke=/^-?[a-z][a-zA-Z0-9/%._-]*-\*$/,Ee=["0","0.5","1","1.5","2","2.5","3","3.5","4","5","6","7","8","9","10","11","12","14","16","20","24","28","32","36","40","44","48","52","56","60","64","72","80","96"],Ve=class{utilities=new c((()=>[]));completions=new Map;static(e,t){this.utilities.get(e).push({kind:"static",compileFn:t})}functional(e,t,r){this.utilities.get(e).push({kind:"functional",compileFn:t,options:r})}has(e,t){return this.utilities.has(e)&&this.utilities.get(e).some((e=>e.kind===t))}get(e){return this.utilities.has(e)?this.utilities.get(e):[]}getCompletions(e){return this.completions.get(e)?.()??[]}suggest(e,t){this.completions.set(e,t)}keys(e){let t=[];for(let[r,n]of this.utilities.entries())for(let o of n)if(o.kind===e){t.push(r);break}return t}};function Ne(e,t,r){return k("@property",e,[y("syntax",r?`"${r}"`:'"*"'),y("inherits","false"),...t?[y("initial-value",t)]:[]])}function Oe(e,t){if(null===t)return e;let r=Number(t);return Number.isNaN(r)||(t=100*r+"%"),"100%"===t?e:`color-mix(in oklab, ${e} ${t}, transparent)`}function Fe(e,t){let r=Number(t);return Number.isNaN(r)||(t=100*r+"%"),`oklab(from ${e} l a b / ${t})`}function We(e,t,r){if(!t)return e;if("arbitrary"===t.kind)return Oe(e,t.value);let n=r.resolve(t.value,["--opacity"]);return n?Oe(e,n):ze(t.value)?Oe(e,`${t.value}%`):null}function Ue(e,t,r){let n=null;switch(e.value.value){case"inherit":n="inherit";break;case"transparent":n="transparent";break;case"current":n="currentcolor";break;default:n=t.resolve(e.value.value,r)}return n?We(n,e.modifier,t):null}var De=/(\d+)_(\d+)/g;var _e=["number","integer","ratio","percentage"];function Me(e,t,r){for(let n of t.nodes){if("named"===e.kind&&"word"===n.kind&&("'"===n.value[0]||'"'===n.value[0])&&n.value[n.value.length-1]===n.value[0]&&n.value.slice(1,-1)===e.value)return{nodes:m(e.value)};if("named"===e.kind&&"word"===n.kind&&"-"===n.value[0]&&"-"===n.value[1]){let t=n.value;if(t.endsWith("-*")){t=t.slice(0,-2);let n=r.theme.resolve(e.value,[t]);if(n)return{nodes:m(n)}}else{let n=t.split("-*");if(n.length<=1)continue;let o=[n.shift()],a=r.theme.resolveWith(e.value,o,n);if(a){let[,e={}]=a;{let t=e[n.pop()];if(t)return{nodes:m(t)}}}}}else{if("named"===e.kind&&"word"===n.kind){if(!_e.includes(n.value))continue;let t="ratio"===n.value&&"fraction"in e?e.fraction:e.value;if(!t)continue;let r=ie(t,[n.value]);if(null===r)continue;if("ratio"===r){let[e,r]=R(t,"/");if(!ye(e)||!ye(r))continue}else{if("number"===r&&!$e(t))continue;if("percentage"===r&&!ye(t.slice(0,-1)))continue}return{nodes:m(t),ratio:"ratio"===r}}if("arbitrary"===e.kind&&"word"===n.kind&&"["===n.value[0]&&"]"===n.value[n.value.length-1]){let t=n.value.slice(1,-1);if("*"===t)return{nodes:m(e.value)};if("dataType"in e&&e.dataType&&e.dataType!==t)continue;if("dataType"in e&&e.dataType)return{nodes:m(e.value)};if(null!==ie(e.value,[t]))return{nodes:m(e.value)}}}}}function Be(e,t,r,n,o=""){let a=!1,i=Te(t,(e=>null==r?n(e):e.startsWith("current")?n(Oe(e,r)):((e.startsWith("var(")||r.startsWith("var("))&&(a=!0),n(Fe(e,r)))));function l(e){return o?R(e,",").map((e=>o+e)).join(","):e}return a?[y(e,l(Te(t,n))),b("@supports (color: lab(from red l a b))",[y(e,l(i))])]:[y(e,l(i))]}function Le(e,t,r,n,o=""){let a=!1,i=R(t,",").map((e=>Te(e,(e=>null==r?n(e):e.startsWith("current")?n(Oe(e,r)):((e.startsWith("var(")||r.startsWith("var("))&&(a=!0),n(Fe(e,r))))))).map((e=>`drop-shadow(${e})`)).join(" ");return a?[y(e,o+R(t,",").map((e=>`drop-shadow(${Te(e,n)})`)).join(" ")),b("@supports (color: lab(from red l a b))",[y(e,o+i)])]:[y(e,o+i)]}var Re={"--alpha":function(e,t,r,...n){let[o,a]=R(r,"/").map((e=>e.trim()));if(!o||!a)throw new Error(`The --alpha(…) function requires a color and an alpha value, e.g.: \`--alpha(${o||"var(--my-color)"} / ${a||"50%"})\``);if(n.length>0)throw new Error(`The --alpha(…) function only accepts one argument, e.g.: \`--alpha(${o||"var(--my-color)"} / ${a||"50%"})\``);return Oe(o,a)},"--spacing":function(e,t,r,...n){if(!r)throw new Error("The --spacing(…) function requires an argument, but received none.");if(n.length>0)throw new Error(`The --spacing(…) function only accepts a single argument, but received ${n.length+1}.`);let o=e.theme.resolve(null,["--spacing"]);if(!o)throw new Error("The --spacing(…) function requires that the `--spacing` theme variable exists, but it was not found.");return`calc(${o} * ${r})`},"--theme":function(e,t,r,...n){if(!r.startsWith("--"))throw new Error("The --theme(…) function can only be used with CSS variables from your theme.");let o=!1;r.endsWith(" inline")&&(o=!0,r=r.slice(0,-7)),"at-rule"===t.kind&&(o=!0);let a=e.resolveThemeValue(r,o);if(!a){if(n.length>0)return n.join(", ");throw new Error(`Could not resolve value for theme function: \`theme(${r})\`. Consider checking if the variable name is correct or provide a fallback value to silence this error.`)}if(0===n.length)return a;let i=n.join(", ");if("initial"===i)return a;if("initial"===a)return i;if(a.startsWith("var(")||a.startsWith("theme(")||a.startsWith("--theme(")){let e=m(a);return function(e,t){p(e,(e=>{if("function"===e.kind&&("var"===e.value||"theme"===e.value||"--theme"===e.value))if(1===e.nodes.length)e.nodes.push({kind:"word",value:`, ${t}`});else{let r=e.nodes[e.nodes.length-1];"word"===r.kind&&"initial"===r.value&&(r.value=t)}}))}(e,i),h(e)}return a},theme:function(e,t,r,...n){r=function(e){if("'"!==e[0]&&'"'!==e[0])return e;let t="",r=e[0];for(let n=1;n0)return n.join(", ");if(!o)throw new Error(`Could not resolve value for theme function: \`theme(${r})\`. Consider checking if the path is correct or provide a fallback value to silence this error.`);return o}};var Ie=new RegExp(Object.keys(Re).map((e=>`${e}\\(`)).join("|"));function Pe(e,t){let r=0;return A(e,(e=>{if("declaration"===e.kind&&e.value&&Ie.test(e.value))return r|=8,void(e.value=qe(e.value,e,t));"at-rule"===e.kind&&("@media"===e.name||"@custom-media"===e.name||"@container"===e.name||"@supports"===e.name)&&Ie.test(e.params)&&(r|=8,e.params=qe(e.params,e,t))})),r}function qe(e,t,r){let n=m(e);return p(n,((e,{replaceWith:n})=>{if("function"===e.kind&&e.value in Re){let o=R(h(e.nodes).trim(),",").map((e=>e.trim()));return n(m(Re[e.value](r,t,...o)))}})),h(n)}function He(e,t){let r=e.length,n=t.length,o=r=48&&n<=57&&o>=48&&o<=57){let a=r,i=r+1,l=r,s=r+1;for(n=e.charCodeAt(i);n>=48&&n<=57;)n=e.charCodeAt(++i);for(o=t.charCodeAt(s);o>=48&&o<=57;)o=t.charCodeAt(++s);let c=e.slice(a,i),u=t.slice(l,s),d=Number(c)-Number(u);if(d)return d;if(cu)return 1}else if(n!==o)return n-o}return e.length-t.length}var Ze=/^\d+\/\d+$/;function Ye(e){let t=new c((e=>({name:e,utility:e,fraction:!1,modifiers:[]})));for(let r of e.utilities.keys("static")){let e=t.get(r);e.fraction=!1,e.modifiers=[]}for(let r of e.utilities.keys("functional")){let n=e.utilities.getCompletions(r);for(let e of n)for(let n of e.values){let o=null!==n&&Ze.test(n),a=null===n?r:`${r}-${n}`,i=t.get(a);if(i.utility=r,i.fraction||=o,i.modifiers.push(...e.modifiers),e.supportsNegative){let n=t.get(`-${a}`);n.utility=`-${r}`,n.fraction||=o,n.modifiers.push(...e.modifiers)}}}if(0===t.size)return[];let r=Array.from(t.values());return r.sort(((e,t)=>He(e.name,t.name))),function(e){let t=[],r=null,n=new Map,o=new c((()=>[]));for(let a of e){let{utility:e,fraction:i}=a;r||(r={utility:e,items:[]},n.set(e,r)),e!==r.utility&&(t.push(r),r={utility:e,items:[]},n.set(e,r)),i?o.get(e).push(a):r.items.push(a)}r&&t[t.length-1]!==r&&t.push(r);for(let[e,t]of o){let r=n.get(e);r&&r.items.push(...t)}let a=[];for(let e of t)for(let t of e.items)a.push([t.name,{modifiers:t.modifiers}]);return a}(r)}var Ge=/^@?[a-zA-Z0-9_-]*$/,Je=class{compareFns=new Map;variants=new Map;completions=new Map;groupOrder=null;lastOrder=0;static(e,t,{compounds:r,order:n}={}){this.set(e,{kind:"static",applyFn:t,compoundsWith:0,compounds:r??2,order:n})}fromAst(e,t){let r=[];A(t,(e=>{"rule"===e.kind?r.push(e.selector):"at-rule"===e.kind&&"@slot"!==e.name&&r.push(`${e.name} ${e.params}`)})),this.static(e,(e=>{let r=structuredClone(t);et(r,e.nodes),e.nodes=r}),{compounds:Xe(r)})}functional(e,t,{compounds:r,order:n}={}){this.set(e,{kind:"functional",applyFn:t,compoundsWith:0,compounds:r??2,order:n})}compound(e,t,r,{compounds:n,order:o}={}){this.set(e,{kind:"compound",applyFn:r,compoundsWith:t,compounds:n??2,order:o})}group(e,t){this.groupOrder=this.nextOrder(),t&&this.compareFns.set(this.groupOrder,t),e(),this.groupOrder=null}has(e){return this.variants.has(e)}get(e){return this.variants.get(e)}kind(e){return this.variants.get(e)?.kind}compoundsWith(e,t){let r=this.variants.get(e),n="string"==typeof t?this.variants.get(t):"arbitrary"===t.kind?{compounds:Xe([t.selector])}:this.variants.get(t.root);return!!(r&&n&&"compound"===r.kind&&0!==n.compounds&&0!==r.compoundsWith&&r.compoundsWith&n.compounds)}suggest(e,t){this.completions.set(e,t)}getCompletions(e){return this.completions.get(e)?.()??[]}compare(e,t){if(e===t)return 0;if(null===e)return-1;if(null===t)return 1;if("arbitrary"===e.kind&&"arbitrary"===t.kind)return e.selector1){let e=n[n.length-1];if(" "===n[n.length-2]&&("i"===e||"I"===e||"s"===e||"S"===e))return`${t}="${n.slice(0,-2)}" ${e}`}return`${t}="${n}"`}return e}function et(e,t){A(e,((e,{replaceWith:r})=>{if("at-rule"===e.kind&&"@slot"===e.name)r(t);else if("at-rule"===e.kind&&("@keyframes"===e.name||"@property"===e.name))return Object.assign(e,z([k(e.name,e.params,e.nodes)])),1}))}function tt(e){let t=function(e){let t=new Ve;function r(r,n){function*o(t){for(let r of e.keysInNamespaces(t))yield r.replace(De,((e,t,r)=>`${t}.${r}`))}let a=["1/2","1/3","2/3","1/4","2/4","3/4","1/5","2/5","3/5","4/5","1/6","2/6","3/6","4/6","5/6","1/12","2/12","3/12","4/12","5/12","6/12","7/12","8/12","9/12","10/12","11/12"];t.suggest(r,(()=>{let e=[];for(let t of n()){if("string"==typeof t){e.push({values:[t],modifiers:[]});continue}let r=[...t.values??[],...o(t.valueThemeKeys??[])],n=[...t.modifiers??[],...o(t.modifierThemeKeys??[])];t.supportsFractions&&r.push(...a),t.hasDefaultValue&&r.unshift(null),e.push({supportsNegative:t.supportsNegative,values:r,modifiers:n})}return e}))}function n(e,r){t.static(e,(()=>r.map((e=>"function"==typeof e?e():y(e[0],e[1])))))}function o(n,o){function a({negative:t}){return r=>{let n=null,a=null;if(r.value)if("arbitrary"===r.value.kind){if(r.modifier)return;n=r.value.value,a=r.value.dataType}else{if(n=e.resolve(r.value.fraction??r.value.value,o.themeKeys??[]),null===n&&o.supportsFractions&&r.value.fraction){let[e,t]=R(r.value.fraction,"/");if(!ye(e)||!ye(t))return;n=`calc(${r.value.fraction} * 100%)`}if(null===n&&t&&o.handleNegativeBareValue){if(n=o.handleNegativeBareValue(r.value),!n?.includes("/")&&r.modifier)return;if(null!==n)return o.handle(n,null)}if(null===n&&o.handleBareValue&&(n=o.handleBareValue(r.value),!n?.includes("/")&&r.modifier))return}else{if(r.modifier)return;n=void 0!==o.defaultValue?o.defaultValue:e.resolve(null,o.themeKeys??[])}if(null!==n)return o.handle(t?`calc(${n} * -1)`:n,a)}}o.supportsNegative&&t.functional(`-${n}`,a({negative:!0})),t.functional(n,a({negative:!1})),r(n,(()=>[{supportsNegative:o.supportsNegative,valueThemeKeys:o.themeKeys??[],hasDefaultValue:void 0!==o.defaultValue&&null!==o.defaultValue,supportsFractions:o.supportsFractions}]))}function a(n,o){t.functional(n,(t=>{if(!t.value)return;let r=null;return"arbitrary"===t.value.kind?(r=t.value.value,r=We(r,t.modifier,e)):r=Ue(t,e,o.themeKeys),null!==r?o.handle(r):void 0})),r(n,(()=>[{values:["current","inherit","transparent"],valueThemeKeys:o.themeKeys,modifiers:Array.from({length:21},((e,t)=>""+5*t))}]))}function i(n,a,i,{supportsNegative:l=!1,supportsFractions:s=!1}={}){l&&t.static(`-${n}-px`,(()=>i("-1px"))),t.static(`${n}-px`,(()=>i("1px"))),o(n,{themeKeys:a,supportsFractions:s,supportsNegative:l,defaultValue:null,handleBareValue:({value:t})=>{let r=e.resolve(null,["--spacing"]);return r&&$e(t)?`calc(${r} * ${t})`:null},handleNegativeBareValue:({value:t})=>{let r=e.resolve(null,["--spacing"]);return r&&$e(t)?`calc(${r} * -${t})`:null},handle:i}),r(n,(()=>[{values:e.get(["--spacing"])?Ee:[],supportsNegative:l,supportsFractions:s,valueThemeKeys:a}]))}n("sr-only",[["position","absolute"],["width","1px"],["height","1px"],["padding","0"],["margin","-1px"],["overflow","hidden"],["clip","rect(0, 0, 0, 0)"],["white-space","nowrap"],["border-width","0"]]),n("not-sr-only",[["position","static"],["width","auto"],["height","auto"],["padding","0"],["margin","0"],["overflow","visible"],["clip","auto"],["white-space","normal"]]),n("pointer-events-none",[["pointer-events","none"]]),n("pointer-events-auto",[["pointer-events","auto"]]),n("visible",[["visibility","visible"]]),n("invisible",[["visibility","hidden"]]),n("collapse",[["visibility","collapse"]]),n("static",[["position","static"]]),n("fixed",[["position","fixed"]]),n("absolute",[["position","absolute"]]),n("relative",[["position","relative"]]),n("sticky",[["position","sticky"]]);for(let[e,t]of[["inset","inset"],["inset-x","inset-inline"],["inset-y","inset-block"],["start","inset-inline-start"],["end","inset-inline-end"],["top","top"],["right","right"],["bottom","bottom"],["left","left"]])n(`${e}-auto`,[[t,"auto"]]),n(`${e}-full`,[[t,"100%"]]),n(`-${e}-full`,[[t,"-100%"]]),i(e,["--inset","--spacing"],(e=>[y(t,e)]),{supportsNegative:!0,supportsFractions:!0});n("isolate",[["isolation","isolate"]]),n("isolation-auto",[["isolation","auto"]]),n("z-auto",[["z-index","auto"]]),o("z",{supportsNegative:!0,handleBareValue:({value:e})=>ye(e)?e:null,themeKeys:["--z-index"],handle:e=>[y("z-index",e)]}),r("z",(()=>[{supportsNegative:!0,values:["0","10","20","30","40","50"],valueThemeKeys:["--z-index"]}])),n("order-first",[["order","-9999"]]),n("order-last",[["order","9999"]]),n("order-none",[["order","0"]]),o("order",{supportsNegative:!0,handleBareValue:({value:e})=>ye(e)?e:null,themeKeys:["--order"],handle:e=>[y("order",e)]}),r("order",(()=>[{supportsNegative:!0,values:Array.from({length:12},((e,t)=>`${t+1}`)),valueThemeKeys:["--order"]}])),n("col-auto",[["grid-column","auto"]]),o("col",{supportsNegative:!0,handleBareValue:({value:e})=>ye(e)?e:null,themeKeys:["--grid-column"],handle:e=>[y("grid-column",e)]}),n("col-span-full",[["grid-column","1 / -1"]]),o("col-span",{handleBareValue:({value:e})=>ye(e)?e:null,handle:e=>[y("grid-column",`span ${e} / span ${e}`)]}),n("col-start-auto",[["grid-column-start","auto"]]),o("col-start",{supportsNegative:!0,handleBareValue:({value:e})=>ye(e)?e:null,themeKeys:["--grid-column-start"],handle:e=>[y("grid-column-start",e)]}),n("col-end-auto",[["grid-column-end","auto"]]),o("col-end",{supportsNegative:!0,handleBareValue:({value:e})=>ye(e)?e:null,themeKeys:["--grid-column-end"],handle:e=>[y("grid-column-end",e)]}),r("col-span",(()=>[{values:Array.from({length:12},((e,t)=>`${t+1}`)),valueThemeKeys:[]}])),r("col-start",(()=>[{supportsNegative:!0,values:Array.from({length:13},((e,t)=>`${t+1}`)),valueThemeKeys:["--grid-column-start"]}])),r("col-end",(()=>[{supportsNegative:!0,values:Array.from({length:13},((e,t)=>`${t+1}`)),valueThemeKeys:["--grid-column-end"]}])),n("row-auto",[["grid-row","auto"]]),o("row",{supportsNegative:!0,handleBareValue:({value:e})=>ye(e)?e:null,themeKeys:["--grid-row"],handle:e=>[y("grid-row",e)]}),n("row-span-full",[["grid-row","1 / -1"]]),o("row-span",{themeKeys:[],handleBareValue:({value:e})=>ye(e)?e:null,handle:e=>[y("grid-row",`span ${e} / span ${e}`)]}),n("row-start-auto",[["grid-row-start","auto"]]),o("row-start",{supportsNegative:!0,handleBareValue:({value:e})=>ye(e)?e:null,themeKeys:["--grid-row-start"],handle:e=>[y("grid-row-start",e)]}),n("row-end-auto",[["grid-row-end","auto"]]),o("row-end",{supportsNegative:!0,handleBareValue:({value:e})=>ye(e)?e:null,themeKeys:["--grid-row-end"],handle:e=>[y("grid-row-end",e)]}),r("row-span",(()=>[{values:Array.from({length:12},((e,t)=>`${t+1}`)),valueThemeKeys:[]}])),r("row-start",(()=>[{supportsNegative:!0,values:Array.from({length:13},((e,t)=>`${t+1}`)),valueThemeKeys:["--grid-row-start"]}])),r("row-end",(()=>[{supportsNegative:!0,values:Array.from({length:13},((e,t)=>`${t+1}`)),valueThemeKeys:["--grid-row-end"]}])),n("float-start",[["float","inline-start"]]),n("float-end",[["float","inline-end"]]),n("float-right",[["float","right"]]),n("float-left",[["float","left"]]),n("float-none",[["float","none"]]),n("clear-start",[["clear","inline-start"]]),n("clear-end",[["clear","inline-end"]]),n("clear-right",[["clear","right"]]),n("clear-left",[["clear","left"]]),n("clear-both",[["clear","both"]]),n("clear-none",[["clear","none"]]);for(let[e,t]of[["m","margin"],["mx","margin-inline"],["my","margin-block"],["ms","margin-inline-start"],["me","margin-inline-end"],["mt","margin-top"],["mr","margin-right"],["mb","margin-bottom"],["ml","margin-left"]])n(`${e}-auto`,[[t,"auto"]]),i(e,["--margin","--spacing"],(e=>[y(t,e)]),{supportsNegative:!0});n("box-border",[["box-sizing","border-box"]]),n("box-content",[["box-sizing","content-box"]]),n("line-clamp-none",[["overflow","visible"],["display","block"],["-webkit-box-orient","horizontal"],["-webkit-line-clamp","unset"]]),o("line-clamp",{themeKeys:["--line-clamp"],handleBareValue:({value:e})=>ye(e)?e:null,handle:e=>[y("overflow","hidden"),y("display","-webkit-box"),y("-webkit-box-orient","vertical"),y("-webkit-line-clamp",e)]}),r("line-clamp",(()=>[{values:["1","2","3","4","5","6"],valueThemeKeys:["--line-clamp"]}])),n("block",[["display","block"]]),n("inline-block",[["display","inline-block"]]),n("inline",[["display","inline"]]),n("hidden",[["display","none"]]),n("inline-flex",[["display","inline-flex"]]),n("table",[["display","table"]]),n("inline-table",[["display","inline-table"]]),n("table-caption",[["display","table-caption"]]),n("table-cell",[["display","table-cell"]]),n("table-column",[["display","table-column"]]),n("table-column-group",[["display","table-column-group"]]),n("table-footer-group",[["display","table-footer-group"]]),n("table-header-group",[["display","table-header-group"]]),n("table-row-group",[["display","table-row-group"]]),n("table-row",[["display","table-row"]]),n("flow-root",[["display","flow-root"]]),n("flex",[["display","flex"]]),n("grid",[["display","grid"]]),n("inline-grid",[["display","inline-grid"]]),n("contents",[["display","contents"]]),n("list-item",[["display","list-item"]]),n("field-sizing-content",[["field-sizing","content"]]),n("field-sizing-fixed",[["field-sizing","fixed"]]),n("aspect-auto",[["aspect-ratio","auto"]]),n("aspect-square",[["aspect-ratio","1 / 1"]]),o("aspect",{themeKeys:["--aspect"],handleBareValue:({fraction:e})=>{if(null===e)return null;let[t,r]=R(e,"/");return ye(t)&&ye(r)?e:null},handle:e=>[y("aspect-ratio",e)]});for(let[e,t]of[["full","100%"],["svw","100svw"],["lvw","100lvw"],["dvw","100dvw"],["svh","100svh"],["lvh","100lvh"],["dvh","100dvh"],["min","min-content"],["max","max-content"],["fit","fit-content"]])n(`size-${e}`,[["--tw-sort","size"],["width",t],["height",t]]),n(`w-${e}`,[["width",t]]),n(`h-${e}`,[["height",t]]),n(`min-w-${e}`,[["min-width",t]]),n(`min-h-${e}`,[["min-height",t]]),n(`max-w-${e}`,[["max-width",t]]),n(`max-h-${e}`,[["max-height",t]]);n("size-auto",[["--tw-sort","size"],["width","auto"],["height","auto"]]),n("w-auto",[["width","auto"]]),n("h-auto",[["height","auto"]]),n("min-w-auto",[["min-width","auto"]]),n("min-h-auto",[["min-height","auto"]]),n("h-lh",[["height","1lh"]]),n("min-h-lh",[["min-height","1lh"]]),n("max-h-lh",[["max-height","1lh"]]),n("w-screen",[["width","100vw"]]),n("min-w-screen",[["min-width","100vw"]]),n("max-w-screen",[["max-width","100vw"]]),n("h-screen",[["height","100vh"]]),n("min-h-screen",[["min-height","100vh"]]),n("max-h-screen",[["max-height","100vh"]]),n("max-w-none",[["max-width","none"]]),n("max-h-none",[["max-height","none"]]),i("size",["--size","--spacing"],(e=>[y("--tw-sort","size"),y("width",e),y("height",e)]),{supportsFractions:!0});for(let[e,t,r]of[["w",["--width","--spacing","--container"],"width"],["min-w",["--min-width","--spacing","--container"],"min-width"],["max-w",["--max-width","--spacing","--container"],"max-width"],["h",["--height","--spacing"],"height"],["min-h",["--min-height","--height","--spacing"],"min-height"],["max-h",["--max-height","--height","--spacing"],"max-height"]])i(e,t,(e=>[y(r,e)]),{supportsFractions:!0});t.static("container",(()=>{let t=[...e.namespace("--breakpoint").values()];t.sort(((e,t)=>re(e,t,"asc")));let r=[y("--tw-sort","--tw-container-component"),y("width","100%")];for(let e of t)r.push(k("@media",`(width >= ${e})`,[y("max-width",e)]));return r})),n("flex-auto",[["flex","auto"]]),n("flex-initial",[["flex","0 auto"]]),n("flex-none",[["flex","none"]]),t.functional("flex",(e=>{if(e.value){if("arbitrary"===e.value.kind)return e.modifier?void 0:[y("flex",e.value.value)];if(e.value.fraction){let[t,r]=R(e.value.fraction,"/");return ye(t)&&ye(r)?[y("flex",`calc(${e.value.fraction} * 100%)`)]:void 0}if(ye(e.value.value))return e.modifier?void 0:[y("flex",e.value.value)]}})),r("flex",(()=>[{supportsFractions:!0}])),o("shrink",{defaultValue:"1",handleBareValue:({value:e})=>ye(e)?e:null,handle:e=>[y("flex-shrink",e)]}),o("grow",{defaultValue:"1",handleBareValue:({value:e})=>ye(e)?e:null,handle:e=>[y("flex-grow",e)]}),r("shrink",(()=>[{values:["0"],valueThemeKeys:[],hasDefaultValue:!0}])),r("grow",(()=>[{values:["0"],valueThemeKeys:[],hasDefaultValue:!0}])),n("basis-auto",[["flex-basis","auto"]]),n("basis-full",[["flex-basis","100%"]]),i("basis",["--flex-basis","--spacing","--container"],(e=>[y("flex-basis",e)]),{supportsFractions:!0}),n("table-auto",[["table-layout","auto"]]),n("table-fixed",[["table-layout","fixed"]]),n("caption-top",[["caption-side","top"]]),n("caption-bottom",[["caption-side","bottom"]]),n("border-collapse",[["border-collapse","collapse"]]),n("border-separate",[["border-collapse","separate"]]);let l=()=>z([Ne("--tw-border-spacing-x","0",""),Ne("--tw-border-spacing-y","0","")]);i("border-spacing",["--border-spacing","--spacing"],(e=>[l(),y("--tw-border-spacing-x",e),y("--tw-border-spacing-y",e),y("border-spacing","var(--tw-border-spacing-x) var(--tw-border-spacing-y)")])),i("border-spacing-x",["--border-spacing","--spacing"],(e=>[l(),y("--tw-border-spacing-x",e),y("border-spacing","var(--tw-border-spacing-x) var(--tw-border-spacing-y)")])),i("border-spacing-y",["--border-spacing","--spacing"],(e=>[l(),y("--tw-border-spacing-y",e),y("border-spacing","var(--tw-border-spacing-x) var(--tw-border-spacing-y)")])),n("origin-center",[["transform-origin","center"]]),n("origin-top",[["transform-origin","top"]]),n("origin-top-right",[["transform-origin","top right"]]),n("origin-right",[["transform-origin","right"]]),n("origin-bottom-right",[["transform-origin","bottom right"]]),n("origin-bottom",[["transform-origin","bottom"]]),n("origin-bottom-left",[["transform-origin","bottom left"]]),n("origin-left",[["transform-origin","left"]]),n("origin-top-left",[["transform-origin","top left"]]),o("origin",{themeKeys:["--transform-origin"],handle:e=>[y("transform-origin",e)]}),n("perspective-origin-center",[["perspective-origin","center"]]),n("perspective-origin-top",[["perspective-origin","top"]]),n("perspective-origin-top-right",[["perspective-origin","top right"]]),n("perspective-origin-right",[["perspective-origin","right"]]),n("perspective-origin-bottom-right",[["perspective-origin","bottom right"]]),n("perspective-origin-bottom",[["perspective-origin","bottom"]]),n("perspective-origin-bottom-left",[["perspective-origin","bottom left"]]),n("perspective-origin-left",[["perspective-origin","left"]]),n("perspective-origin-top-left",[["perspective-origin","top left"]]),o("perspective-origin",{themeKeys:["--perspective-origin"],handle:e=>[y("perspective-origin",e)]}),n("perspective-none",[["perspective","none"]]),o("perspective",{themeKeys:["--perspective"],handle:e=>[y("perspective",e)]});let s=()=>z([Ne("--tw-translate-x","0"),Ne("--tw-translate-y","0"),Ne("--tw-translate-z","0")]);n("translate-none",[["translate","none"]]),n("-translate-full",[s,["--tw-translate-x","-100%"],["--tw-translate-y","-100%"],["translate","var(--tw-translate-x) var(--tw-translate-y)"]]),n("translate-full",[s,["--tw-translate-x","100%"],["--tw-translate-y","100%"],["translate","var(--tw-translate-x) var(--tw-translate-y)"]]),i("translate",["--translate","--spacing"],(e=>[s(),y("--tw-translate-x",e),y("--tw-translate-y",e),y("translate","var(--tw-translate-x) var(--tw-translate-y)")]),{supportsNegative:!0,supportsFractions:!0});for(let e of["x","y"])n(`-translate-${e}-full`,[s,[`--tw-translate-${e}`,"-100%"],["translate","var(--tw-translate-x) var(--tw-translate-y)"]]),n(`translate-${e}-full`,[s,[`--tw-translate-${e}`,"100%"],["translate","var(--tw-translate-x) var(--tw-translate-y)"]]),i(`translate-${e}`,["--translate","--spacing"],(t=>[s(),y(`--tw-translate-${e}`,t),y("translate","var(--tw-translate-x) var(--tw-translate-y)")]),{supportsNegative:!0,supportsFractions:!0});i("translate-z",["--translate","--spacing"],(e=>[s(),y("--tw-translate-z",e),y("translate","var(--tw-translate-x) var(--tw-translate-y) var(--tw-translate-z)")]),{supportsNegative:!0}),n("translate-3d",[s,["translate","var(--tw-translate-x) var(--tw-translate-y) var(--tw-translate-z)"]]);let c=()=>z([Ne("--tw-scale-x","1"),Ne("--tw-scale-y","1"),Ne("--tw-scale-z","1")]);function u({negative:t}){return r=>{if(!r.value||r.modifier)return;let n;return"arbitrary"===r.value.kind?(n=r.value.value,n=t?`calc(${n} * -1)`:n,[y("scale",n)]):(n=e.resolve(r.value.value,["--scale"]),!n&&ye(r.value.value)&&(n=`${r.value.value}%`),n?(n=t?`calc(${n} * -1)`:n,[c(),y("--tw-scale-x",n),y("--tw-scale-y",n),y("--tw-scale-z",n),y("scale","var(--tw-scale-x) var(--tw-scale-y)")]):void 0)}}n("scale-none",[["scale","none"]]),t.functional("-scale",u({negative:!0})),t.functional("scale",u({negative:!1})),r("scale",(()=>[{supportsNegative:!0,values:["0","50","75","90","95","100","105","110","125","150","200"],valueThemeKeys:["--scale"]}]));for(let e of["x","y","z"])o(`scale-${e}`,{supportsNegative:!0,themeKeys:["--scale"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,handle:t=>[c(),y(`--tw-scale-${e}`,t),y("scale","var(--tw-scale-x) var(--tw-scale-y)"+("z"===e?" var(--tw-scale-z)":""))]}),r(`scale-${e}`,(()=>[{supportsNegative:!0,values:["0","50","75","90","95","100","105","110","125","150","200"],valueThemeKeys:["--scale"]}]));function d({negative:t}){return r=>{if(!r.value||r.modifier)return;let n;if("arbitrary"===r.value.kind){n=r.value.value;let e=r.value.dataType??ie(n,["angle","vector"]);if("vector"===e)return[y("rotate",`${n} var(--tw-rotate)`)];if("angle"!==e)return[y("rotate",t?`calc(${n} * -1)`:n)]}else if(n=e.resolve(r.value.value,["--rotate"]),!n&&ye(r.value.value)&&(n=`${r.value.value}deg`),!n)return;return[y("rotate",t?`calc(${n} * -1)`:n)]}}n("scale-3d",[c,["scale","var(--tw-scale-x) var(--tw-scale-y) var(--tw-scale-z)"]]),n("rotate-none",[["rotate","none"]]),t.functional("-rotate",d({negative:!0})),t.functional("rotate",d({negative:!1})),r("rotate",(()=>[{supportsNegative:!0,values:["0","1","2","3","6","12","45","90","180"],valueThemeKeys:["--rotate"]}]));{let e=["var(--tw-rotate-x,)","var(--tw-rotate-y,)","var(--tw-rotate-z,)","var(--tw-skew-x,)","var(--tw-skew-y,)"].join(" "),a=()=>z([Ne("--tw-rotate-x"),Ne("--tw-rotate-y"),Ne("--tw-rotate-z"),Ne("--tw-skew-x"),Ne("--tw-skew-y")]);for(let t of["x","y","z"])o(`rotate-${t}`,{supportsNegative:!0,themeKeys:["--rotate"],handleBareValue:({value:e})=>ye(e)?`${e}deg`:null,handle:r=>[a(),y(`--tw-rotate-${t}`,`rotate${t.toUpperCase()}(${r})`),y("transform",e)]}),r(`rotate-${t}`,(()=>[{supportsNegative:!0,values:["0","1","2","3","6","12","45","90","180"],valueThemeKeys:["--rotate"]}]));o("skew",{supportsNegative:!0,themeKeys:["--skew"],handleBareValue:({value:e})=>ye(e)?`${e}deg`:null,handle:t=>[a(),y("--tw-skew-x",`skewX(${t})`),y("--tw-skew-y",`skewY(${t})`),y("transform",e)]}),o("skew-x",{supportsNegative:!0,themeKeys:["--skew"],handleBareValue:({value:e})=>ye(e)?`${e}deg`:null,handle:t=>[a(),y("--tw-skew-x",`skewX(${t})`),y("transform",e)]}),o("skew-y",{supportsNegative:!0,themeKeys:["--skew"],handleBareValue:({value:e})=>ye(e)?`${e}deg`:null,handle:t=>[a(),y("--tw-skew-y",`skewY(${t})`),y("transform",e)]}),r("skew",(()=>[{supportsNegative:!0,values:["0","1","2","3","6","12"],valueThemeKeys:["--skew"]}])),r("skew-x",(()=>[{supportsNegative:!0,values:["0","1","2","3","6","12"],valueThemeKeys:["--skew"]}])),r("skew-y",(()=>[{supportsNegative:!0,values:["0","1","2","3","6","12"],valueThemeKeys:["--skew"]}])),t.functional("transform",(t=>{if(t.modifier)return;let r=null;return t.value?"arbitrary"===t.value.kind&&(r=t.value.value):r=e,null!==r?[a(),y("transform",r)]:void 0})),r("transform",(()=>[{hasDefaultValue:!0}])),n("transform-cpu",[["transform",e]]),n("transform-gpu",[["transform",`translateZ(0) ${e}`]]),n("transform-none",[["transform","none"]])}n("transform-flat",[["transform-style","flat"]]),n("transform-3d",[["transform-style","preserve-3d"]]),n("transform-content",[["transform-box","content-box"]]),n("transform-border",[["transform-box","border-box"]]),n("transform-fill",[["transform-box","fill-box"]]),n("transform-stroke",[["transform-box","stroke-box"]]),n("transform-view",[["transform-box","view-box"]]),n("backface-visible",[["backface-visibility","visible"]]),n("backface-hidden",[["backface-visibility","hidden"]]);for(let e of["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out"])n(`cursor-${e}`,[["cursor",e]]);o("cursor",{themeKeys:["--cursor"],handle:e=>[y("cursor",e)]});for(let e of["auto","none","manipulation"])n(`touch-${e}`,[["touch-action",e]]);let f=()=>z([Ne("--tw-pan-x"),Ne("--tw-pan-y"),Ne("--tw-pinch-zoom")]);for(let e of["x","left","right"])n(`touch-pan-${e}`,[f,["--tw-pan-x",`pan-${e}`],["touch-action","var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)"]]);for(let e of["y","up","down"])n(`touch-pan-${e}`,[f,["--tw-pan-y",`pan-${e}`],["touch-action","var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)"]]);n("touch-pinch-zoom",[f,["--tw-pinch-zoom","pinch-zoom"],["touch-action","var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)"]]);for(let e of["none","text","all","auto"])n(`select-${e}`,[["-webkit-user-select",e],["user-select",e]]);n("resize-none",[["resize","none"]]),n("resize-x",[["resize","horizontal"]]),n("resize-y",[["resize","vertical"]]),n("resize",[["resize","both"]]),n("snap-none",[["scroll-snap-type","none"]]);let p=()=>z([Ne("--tw-scroll-snap-strictness","proximity","*")]);for(let e of["x","y","both"])n(`snap-${e}`,[p,["scroll-snap-type",`${e} var(--tw-scroll-snap-strictness)`]]);n("snap-mandatory",[p,["--tw-scroll-snap-strictness","mandatory"]]),n("snap-proximity",[p,["--tw-scroll-snap-strictness","proximity"]]),n("snap-align-none",[["scroll-snap-align","none"]]),n("snap-start",[["scroll-snap-align","start"]]),n("snap-end",[["scroll-snap-align","end"]]),n("snap-center",[["scroll-snap-align","center"]]),n("snap-normal",[["scroll-snap-stop","normal"]]),n("snap-always",[["scroll-snap-stop","always"]]);for(let[e,t]of[["scroll-m","scroll-margin"],["scroll-mx","scroll-margin-inline"],["scroll-my","scroll-margin-block"],["scroll-ms","scroll-margin-inline-start"],["scroll-me","scroll-margin-inline-end"],["scroll-mt","scroll-margin-top"],["scroll-mr","scroll-margin-right"],["scroll-mb","scroll-margin-bottom"],["scroll-ml","scroll-margin-left"]])i(e,["--scroll-margin","--spacing"],(e=>[y(t,e)]),{supportsNegative:!0});for(let[e,t]of[["scroll-p","scroll-padding"],["scroll-px","scroll-padding-inline"],["scroll-py","scroll-padding-block"],["scroll-ps","scroll-padding-inline-start"],["scroll-pe","scroll-padding-inline-end"],["scroll-pt","scroll-padding-top"],["scroll-pr","scroll-padding-right"],["scroll-pb","scroll-padding-bottom"],["scroll-pl","scroll-padding-left"]])i(e,["--scroll-padding","--spacing"],(e=>[y(t,e)]));n("list-inside",[["list-style-position","inside"]]),n("list-outside",[["list-style-position","outside"]]),n("list-none",[["list-style-type","none"]]),n("list-disc",[["list-style-type","disc"]]),n("list-decimal",[["list-style-type","decimal"]]),o("list",{themeKeys:["--list-style-type"],handle:e=>[y("list-style-type",e)]}),n("list-image-none",[["list-style-image","none"]]),o("list-image",{themeKeys:["--list-style-image"],handle:e=>[y("list-style-image",e)]}),n("appearance-none",[["appearance","none"]]),n("appearance-auto",[["appearance","auto"]]),n("scheme-normal",[["color-scheme","normal"]]),n("scheme-dark",[["color-scheme","dark"]]),n("scheme-light",[["color-scheme","light"]]),n("scheme-light-dark",[["color-scheme","light dark"]]),n("scheme-only-dark",[["color-scheme","only dark"]]),n("scheme-only-light",[["color-scheme","only light"]]),n("columns-auto",[["columns","auto"]]),o("columns",{themeKeys:["--columns","--container"],handleBareValue:({value:e})=>ye(e)?e:null,handle:e=>[y("columns",e)]}),r("columns",(()=>[{values:Array.from({length:12},((e,t)=>`${t+1}`)),valueThemeKeys:["--columns","--container"]}]));for(let e of["auto","avoid","all","avoid-page","page","left","right","column"])n(`break-before-${e}`,[["break-before",e]]);for(let e of["auto","avoid","avoid-page","avoid-column"])n(`break-inside-${e}`,[["break-inside",e]]);for(let e of["auto","avoid","all","avoid-page","page","left","right","column"])n(`break-after-${e}`,[["break-after",e]]);n("grid-flow-row",[["grid-auto-flow","row"]]),n("grid-flow-col",[["grid-auto-flow","column"]]),n("grid-flow-dense",[["grid-auto-flow","dense"]]),n("grid-flow-row-dense",[["grid-auto-flow","row dense"]]),n("grid-flow-col-dense",[["grid-auto-flow","column dense"]]),n("auto-cols-auto",[["grid-auto-columns","auto"]]),n("auto-cols-min",[["grid-auto-columns","min-content"]]),n("auto-cols-max",[["grid-auto-columns","max-content"]]),n("auto-cols-fr",[["grid-auto-columns","minmax(0, 1fr)"]]),o("auto-cols",{themeKeys:["--grid-auto-columns"],handle:e=>[y("grid-auto-columns",e)]}),n("auto-rows-auto",[["grid-auto-rows","auto"]]),n("auto-rows-min",[["grid-auto-rows","min-content"]]),n("auto-rows-max",[["grid-auto-rows","max-content"]]),n("auto-rows-fr",[["grid-auto-rows","minmax(0, 1fr)"]]),o("auto-rows",{themeKeys:["--grid-auto-rows"],handle:e=>[y("grid-auto-rows",e)]}),n("grid-cols-none",[["grid-template-columns","none"]]),n("grid-cols-subgrid",[["grid-template-columns","subgrid"]]),o("grid-cols",{themeKeys:["--grid-template-columns"],handleBareValue:({value:e})=>xe(e)?`repeat(${e}, minmax(0, 1fr))`:null,handle:e=>[y("grid-template-columns",e)]}),n("grid-rows-none",[["grid-template-rows","none"]]),n("grid-rows-subgrid",[["grid-template-rows","subgrid"]]),o("grid-rows",{themeKeys:["--grid-template-rows"],handleBareValue:({value:e})=>xe(e)?`repeat(${e}, minmax(0, 1fr))`:null,handle:e=>[y("grid-template-rows",e)]}),r("grid-cols",(()=>[{values:Array.from({length:12},((e,t)=>`${t+1}`)),valueThemeKeys:["--grid-template-columns"]}])),r("grid-rows",(()=>[{values:Array.from({length:12},((e,t)=>`${t+1}`)),valueThemeKeys:["--grid-template-rows"]}])),n("flex-row",[["flex-direction","row"]]),n("flex-row-reverse",[["flex-direction","row-reverse"]]),n("flex-col",[["flex-direction","column"]]),n("flex-col-reverse",[["flex-direction","column-reverse"]]),n("flex-wrap",[["flex-wrap","wrap"]]),n("flex-nowrap",[["flex-wrap","nowrap"]]),n("flex-wrap-reverse",[["flex-wrap","wrap-reverse"]]),n("place-content-center",[["place-content","center"]]),n("place-content-start",[["place-content","start"]]),n("place-content-end",[["place-content","end"]]),n("place-content-center-safe",[["place-content","safe center"]]),n("place-content-end-safe",[["place-content","safe end"]]),n("place-content-between",[["place-content","space-between"]]),n("place-content-around",[["place-content","space-around"]]),n("place-content-evenly",[["place-content","space-evenly"]]),n("place-content-baseline",[["place-content","baseline"]]),n("place-content-stretch",[["place-content","stretch"]]),n("place-items-center",[["place-items","center"]]),n("place-items-start",[["place-items","start"]]),n("place-items-end",[["place-items","end"]]),n("place-items-center-safe",[["place-items","safe center"]]),n("place-items-end-safe",[["place-items","safe end"]]),n("place-items-baseline",[["place-items","baseline"]]),n("place-items-stretch",[["place-items","stretch"]]),n("content-normal",[["align-content","normal"]]),n("content-center",[["align-content","center"]]),n("content-start",[["align-content","flex-start"]]),n("content-end",[["align-content","flex-end"]]),n("content-center-safe",[["align-content","safe center"]]),n("content-end-safe",[["align-content","safe flex-end"]]),n("content-between",[["align-content","space-between"]]),n("content-around",[["align-content","space-around"]]),n("content-evenly",[["align-content","space-evenly"]]),n("content-baseline",[["align-content","baseline"]]),n("content-stretch",[["align-content","stretch"]]),n("items-center",[["align-items","center"]]),n("items-start",[["align-items","flex-start"]]),n("items-end",[["align-items","flex-end"]]),n("items-center-safe",[["align-items","safe center"]]),n("items-end-safe",[["align-items","safe flex-end"]]),n("items-baseline",[["align-items","baseline"]]),n("items-baseline-last",[["align-items","last baseline"]]),n("items-stretch",[["align-items","stretch"]]),n("justify-normal",[["justify-content","normal"]]),n("justify-center",[["justify-content","center"]]),n("justify-start",[["justify-content","flex-start"]]),n("justify-end",[["justify-content","flex-end"]]),n("justify-center-safe",[["justify-content","safe center"]]),n("justify-end-safe",[["justify-content","safe flex-end"]]),n("justify-between",[["justify-content","space-between"]]),n("justify-around",[["justify-content","space-around"]]),n("justify-evenly",[["justify-content","space-evenly"]]),n("justify-baseline",[["justify-content","baseline"]]),n("justify-stretch",[["justify-content","stretch"]]),n("justify-items-normal",[["justify-items","normal"]]),n("justify-items-center",[["justify-items","center"]]),n("justify-items-start",[["justify-items","start"]]),n("justify-items-end",[["justify-items","end"]]),n("justify-items-center-safe",[["justify-items","safe center"]]),n("justify-items-end-safe",[["justify-items","safe end"]]),n("justify-items-stretch",[["justify-items","stretch"]]),i("gap",["--gap","--spacing"],(e=>[y("gap",e)])),i("gap-x",["--gap","--spacing"],(e=>[y("column-gap",e)])),i("gap-y",["--gap","--spacing"],(e=>[y("row-gap",e)])),i("space-x",["--space","--spacing"],(e=>[z([Ne("--tw-space-x-reverse","0")]),w(":where(& > :not(:last-child))",[y("--tw-sort","row-gap"),y("--tw-space-x-reverse","0"),y("margin-inline-start",`calc(${e} * var(--tw-space-x-reverse))`),y("margin-inline-end",`calc(${e} * calc(1 - var(--tw-space-x-reverse)))`)])]),{supportsNegative:!0}),i("space-y",["--space","--spacing"],(e=>[z([Ne("--tw-space-y-reverse","0")]),w(":where(& > :not(:last-child))",[y("--tw-sort","column-gap"),y("--tw-space-y-reverse","0"),y("margin-block-start",`calc(${e} * var(--tw-space-y-reverse))`),y("margin-block-end",`calc(${e} * calc(1 - var(--tw-space-y-reverse)))`)])]),{supportsNegative:!0}),n("space-x-reverse",[()=>z([Ne("--tw-space-x-reverse","0")]),()=>w(":where(& > :not(:last-child))",[y("--tw-sort","row-gap"),y("--tw-space-x-reverse","1")])]),n("space-y-reverse",[()=>z([Ne("--tw-space-y-reverse","0")]),()=>w(":where(& > :not(:last-child))",[y("--tw-sort","column-gap"),y("--tw-space-y-reverse","1")])]),n("accent-auto",[["accent-color","auto"]]),a("accent",{themeKeys:["--accent-color","--color"],handle:e=>[y("accent-color",e)]}),a("caret",{themeKeys:["--caret-color","--color"],handle:e=>[y("caret-color",e)]}),a("divide",{themeKeys:["--divide-color","--color"],handle:e=>[w(":where(& > :not(:last-child))",[y("--tw-sort","divide-color"),y("border-color",e)])]}),n("place-self-auto",[["place-self","auto"]]),n("place-self-start",[["place-self","start"]]),n("place-self-end",[["place-self","end"]]),n("place-self-center",[["place-self","center"]]),n("place-self-end-safe",[["place-self","safe end"]]),n("place-self-center-safe",[["place-self","safe center"]]),n("place-self-stretch",[["place-self","stretch"]]),n("self-auto",[["align-self","auto"]]),n("self-start",[["align-self","flex-start"]]),n("self-end",[["align-self","flex-end"]]),n("self-center",[["align-self","center"]]),n("self-end-safe",[["align-self","safe flex-end"]]),n("self-center-safe",[["align-self","safe center"]]),n("self-stretch",[["align-self","stretch"]]),n("self-baseline",[["align-self","baseline"]]),n("self-baseline-last",[["align-self","last baseline"]]),n("justify-self-auto",[["justify-self","auto"]]),n("justify-self-start",[["justify-self","flex-start"]]),n("justify-self-end",[["justify-self","flex-end"]]),n("justify-self-center",[["justify-self","center"]]),n("justify-self-end-safe",[["justify-self","safe flex-end"]]),n("justify-self-center-safe",[["justify-self","safe center"]]),n("justify-self-stretch",[["justify-self","stretch"]]);for(let e of["auto","hidden","clip","visible","scroll"])n(`overflow-${e}`,[["overflow",e]]),n(`overflow-x-${e}`,[["overflow-x",e]]),n(`overflow-y-${e}`,[["overflow-y",e]]);for(let e of["auto","contain","none"])n(`overscroll-${e}`,[["overscroll-behavior",e]]),n(`overscroll-x-${e}`,[["overscroll-behavior-x",e]]),n(`overscroll-y-${e}`,[["overscroll-behavior-y",e]]);n("scroll-auto",[["scroll-behavior","auto"]]),n("scroll-smooth",[["scroll-behavior","smooth"]]),n("truncate",[["overflow","hidden"],["text-overflow","ellipsis"],["white-space","nowrap"]]),n("text-ellipsis",[["text-overflow","ellipsis"]]),n("text-clip",[["text-overflow","clip"]]),n("hyphens-none",[["-webkit-hyphens","none"],["hyphens","none"]]),n("hyphens-manual",[["-webkit-hyphens","manual"],["hyphens","manual"]]),n("hyphens-auto",[["-webkit-hyphens","auto"],["hyphens","auto"]]),n("whitespace-normal",[["white-space","normal"]]),n("whitespace-nowrap",[["white-space","nowrap"]]),n("whitespace-pre",[["white-space","pre"]]),n("whitespace-pre-line",[["white-space","pre-line"]]),n("whitespace-pre-wrap",[["white-space","pre-wrap"]]),n("whitespace-break-spaces",[["white-space","break-spaces"]]),n("text-wrap",[["text-wrap","wrap"]]),n("text-nowrap",[["text-wrap","nowrap"]]),n("text-balance",[["text-wrap","balance"]]),n("text-pretty",[["text-wrap","pretty"]]),n("break-normal",[["overflow-wrap","normal"],["word-break","normal"]]),n("break-words",[["overflow-wrap","break-word"]]),n("break-all",[["word-break","break-all"]]),n("break-keep",[["word-break","keep-all"]]),n("wrap-anywhere",[["overflow-wrap","anywhere"]]),n("wrap-break-word",[["overflow-wrap","break-word"]]),n("wrap-normal",[["overflow-wrap","normal"]]);for(let[e,t]of[["rounded",["border-radius"]],["rounded-s",["border-start-start-radius","border-end-start-radius"]],["rounded-e",["border-start-end-radius","border-end-end-radius"]],["rounded-t",["border-top-left-radius","border-top-right-radius"]],["rounded-r",["border-top-right-radius","border-bottom-right-radius"]],["rounded-b",["border-bottom-right-radius","border-bottom-left-radius"]],["rounded-l",["border-top-left-radius","border-bottom-left-radius"]],["rounded-ss",["border-start-start-radius"]],["rounded-se",["border-start-end-radius"]],["rounded-ee",["border-end-end-radius"]],["rounded-es",["border-end-start-radius"]],["rounded-tl",["border-top-left-radius"]],["rounded-tr",["border-top-right-radius"]],["rounded-br",["border-bottom-right-radius"]],["rounded-bl",["border-bottom-left-radius"]]])n(`${e}-none`,t.map((e=>[e,"0"]))),n(`${e}-full`,t.map((e=>[e,"calc(infinity * 1px)"]))),o(e,{themeKeys:["--radius"],handle:e=>t.map((t=>y(t,e)))});n("border-solid",[["--tw-border-style","solid"],["border-style","solid"]]),n("border-dashed",[["--tw-border-style","dashed"],["border-style","dashed"]]),n("border-dotted",[["--tw-border-style","dotted"],["border-style","dotted"]]),n("border-double",[["--tw-border-style","double"],["border-style","double"]]),n("border-hidden",[["--tw-border-style","hidden"],["border-style","hidden"]]),n("border-none",[["--tw-border-style","none"],["border-style","none"]]);{let a=function(n,o){t.functional(n,(t=>{if(!t.value){if(t.modifier)return;let r=e.get(["--default-border-width"])??"1px",n=o.width(r);return n?[i(),...n]:void 0}if("arbitrary"===t.value.kind){let r=t.value.value;switch(t.value.dataType??ie(r,["color","line-width","length"])){case"line-width":case"length":{if(t.modifier)return;let e=o.width(r);return e?[i(),...e]:void 0}default:return r=We(r,t.modifier,e),null===r?void 0:o.color(r)}}{let r=Ue(t,e,["--border-color","--color"]);if(r)return o.color(r)}{if(t.modifier)return;let r=e.resolve(t.value.value,["--border-width"]);if(r){let e=o.width(r);return e?[i(),...e]:void 0}if(ye(t.value.value)){let e=o.width(`${t.value.value}px`);return e?[i(),...e]:void 0}}})),r(n,(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--border-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t)),hasDefaultValue:!0},{values:["0","2","4","8"],valueThemeKeys:["--border-width"]}]))},i=()=>z([Ne("--tw-border-style","solid")]);a("border",{width:e=>[y("border-style","var(--tw-border-style)"),y("border-width",e)],color:e=>[y("border-color",e)]}),a("border-x",{width:e=>[y("border-inline-style","var(--tw-border-style)"),y("border-inline-width",e)],color:e=>[y("border-inline-color",e)]}),a("border-y",{width:e=>[y("border-block-style","var(--tw-border-style)"),y("border-block-width",e)],color:e=>[y("border-block-color",e)]}),a("border-s",{width:e=>[y("border-inline-start-style","var(--tw-border-style)"),y("border-inline-start-width",e)],color:e=>[y("border-inline-start-color",e)]}),a("border-e",{width:e=>[y("border-inline-end-style","var(--tw-border-style)"),y("border-inline-end-width",e)],color:e=>[y("border-inline-end-color",e)]}),a("border-t",{width:e=>[y("border-top-style","var(--tw-border-style)"),y("border-top-width",e)],color:e=>[y("border-top-color",e)]}),a("border-r",{width:e=>[y("border-right-style","var(--tw-border-style)"),y("border-right-width",e)],color:e=>[y("border-right-color",e)]}),a("border-b",{width:e=>[y("border-bottom-style","var(--tw-border-style)"),y("border-bottom-width",e)],color:e=>[y("border-bottom-color",e)]}),a("border-l",{width:e=>[y("border-left-style","var(--tw-border-style)"),y("border-left-width",e)],color:e=>[y("border-left-color",e)]}),o("divide-x",{defaultValue:e.get(["--default-border-width"])??"1px",themeKeys:["--divide-width","--border-width"],handleBareValue:({value:e})=>ye(e)?`${e}px`:null,handle:e=>[z([Ne("--tw-divide-x-reverse","0")]),w(":where(& > :not(:last-child))",[y("--tw-sort","divide-x-width"),i(),y("--tw-divide-x-reverse","0"),y("border-inline-style","var(--tw-border-style)"),y("border-inline-start-width",`calc(${e} * var(--tw-divide-x-reverse))`),y("border-inline-end-width",`calc(${e} * calc(1 - var(--tw-divide-x-reverse)))`)])]}),o("divide-y",{defaultValue:e.get(["--default-border-width"])??"1px",themeKeys:["--divide-width","--border-width"],handleBareValue:({value:e})=>ye(e)?`${e}px`:null,handle:e=>[z([Ne("--tw-divide-y-reverse","0")]),w(":where(& > :not(:last-child))",[y("--tw-sort","divide-y-width"),i(),y("--tw-divide-y-reverse","0"),y("border-bottom-style","var(--tw-border-style)"),y("border-top-style","var(--tw-border-style)"),y("border-top-width",`calc(${e} * var(--tw-divide-y-reverse))`),y("border-bottom-width",`calc(${e} * calc(1 - var(--tw-divide-y-reverse)))`)])]}),r("divide-x",(()=>[{values:["0","2","4","8"],valueThemeKeys:["--divide-width","--border-width"],hasDefaultValue:!0}])),r("divide-y",(()=>[{values:["0","2","4","8"],valueThemeKeys:["--divide-width","--border-width"],hasDefaultValue:!0}])),n("divide-x-reverse",[()=>z([Ne("--tw-divide-x-reverse","0")]),()=>w(":where(& > :not(:last-child))",[y("--tw-divide-x-reverse","1")])]),n("divide-y-reverse",[()=>z([Ne("--tw-divide-y-reverse","0")]),()=>w(":where(& > :not(:last-child))",[y("--tw-divide-y-reverse","1")])]);for(let e of["solid","dashed","dotted","double","none"])n(`divide-${e}`,[()=>w(":where(& > :not(:last-child))",[y("--tw-sort","divide-style"),y("--tw-border-style",e),y("border-style",e)])])}n("bg-auto",[["background-size","auto"]]),n("bg-cover",[["background-size","cover"]]),n("bg-contain",[["background-size","contain"]]),o("bg-size",{handle(e){if(e)return[y("background-size",e)]}}),n("bg-fixed",[["background-attachment","fixed"]]),n("bg-local",[["background-attachment","local"]]),n("bg-scroll",[["background-attachment","scroll"]]),n("bg-top",[["background-position","top"]]),n("bg-top-left",[["background-position","left top"]]),n("bg-top-right",[["background-position","right top"]]),n("bg-bottom",[["background-position","bottom"]]),n("bg-bottom-left",[["background-position","left bottom"]]),n("bg-bottom-right",[["background-position","right bottom"]]),n("bg-left",[["background-position","left"]]),n("bg-right",[["background-position","right"]]),n("bg-center",[["background-position","center"]]),o("bg-position",{handle(e){if(e)return[y("background-position",e)]}}),n("bg-repeat",[["background-repeat","repeat"]]),n("bg-no-repeat",[["background-repeat","no-repeat"]]),n("bg-repeat-x",[["background-repeat","repeat-x"]]),n("bg-repeat-y",[["background-repeat","repeat-y"]]),n("bg-repeat-round",[["background-repeat","round"]]),n("bg-repeat-space",[["background-repeat","space"]]),n("bg-none",[["background-image","none"]]);{let e=function(e){let t="in oklab";if("named"===e?.kind)switch(e.value){case"longer":case"shorter":case"increasing":case"decreasing":t=`in oklch ${e.value} hue`;break;default:t=`in ${e.value}`}else"arbitrary"===e?.kind&&(t=e.value);return t},n=function({negative:t}){return r=>{if(!r.value)return;if("arbitrary"===r.value.kind){if(r.modifier)return;let e=r.value.value;return"angle"===(r.value.dataType??ie(e,["angle"]))?(e=t?`calc(${e} * -1)`:`${e}`,[y("--tw-gradient-position",e),y("background-image",`linear-gradient(var(--tw-gradient-stops,${e}))`)]):t?void 0:[y("--tw-gradient-position",e),y("background-image",`linear-gradient(var(--tw-gradient-stops,${e}))`)]}let n=r.value.value;if(!t&&i.has(n))n=i.get(n);else{if(!ye(n))return;n=t?`calc(${n}deg * -1)`:`${n}deg`}let o=e(r.modifier);return[y("--tw-gradient-position",`${n}`),b("@supports (background-image: linear-gradient(in lab, red, red))",[y("--tw-gradient-position",`${n} ${o}`)]),y("background-image","linear-gradient(var(--tw-gradient-stops))")]}},o=function({negative:t}){return r=>{if("arbitrary"===r.value?.kind){if(r.modifier)return;let e=r.value.value;return[y("--tw-gradient-position",e),y("background-image",`conic-gradient(var(--tw-gradient-stops,${e}))`)]}let n=e(r.modifier);if(!r.value)return[y("--tw-gradient-position",n),y("background-image","conic-gradient(var(--tw-gradient-stops))")];let o=r.value.value;return ye(o)?(o=t?`calc(${o}deg * -1)`:`${o}deg`,[y("--tw-gradient-position",`from ${o} ${n}`),y("background-image","conic-gradient(var(--tw-gradient-stops))")]):void 0}},a=["oklab","oklch","srgb","hsl","longer","shorter","increasing","decreasing"],i=new Map([["to-t","to top"],["to-tr","to top right"],["to-r","to right"],["to-br","to bottom right"],["to-b","to bottom"],["to-bl","to bottom left"],["to-l","to left"],["to-tl","to top left"]]);t.functional("-bg-linear",n({negative:!0})),t.functional("bg-linear",n({negative:!1})),r("bg-linear",(()=>[{values:[...i.keys()],modifiers:a},{values:["0","30","60","90","120","150","180","210","240","270","300","330"],supportsNegative:!0,modifiers:a}])),t.functional("-bg-conic",o({negative:!0})),t.functional("bg-conic",o({negative:!1})),r("bg-conic",(()=>[{hasDefaultValue:!0,modifiers:a},{values:["0","30","60","90","120","150","180","210","240","270","300","330"],supportsNegative:!0,modifiers:a}])),t.functional("bg-radial",(t=>{if(!t.value)return[y("--tw-gradient-position",e(t.modifier)),y("background-image","radial-gradient(var(--tw-gradient-stops))")];if("arbitrary"===t.value.kind){if(t.modifier)return;let e=t.value.value;return[y("--tw-gradient-position",e),y("background-image",`radial-gradient(var(--tw-gradient-stops,${e}))`)]}})),r("bg-radial",(()=>[{hasDefaultValue:!0,modifiers:a}]))}t.functional("bg",(t=>{if(t.value){if("arbitrary"===t.value.kind){let r=t.value.value;switch(t.value.dataType??ie(r,["image","color","percentage","position","bg-size","length","url"])){case"percentage":case"position":return t.modifier?void 0:[y("background-position",r)];case"bg-size":case"length":case"size":return t.modifier?void 0:[y("background-size",r)];case"image":case"url":return t.modifier?void 0:[y("background-image",r)];default:return r=We(r,t.modifier,e),null===r?void 0:[y("background-color",r)]}}{let r=Ue(t,e,["--background-color","--color"]);if(r)return[y("background-color",r)]}{if(t.modifier)return;let r=e.resolve(t.value.value,["--background-image"]);if(r)return[y("background-image",r)]}}})),r("bg",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--background-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:[],valueThemeKeys:["--background-image"]}]));let h=()=>z([Ne("--tw-gradient-position"),Ne("--tw-gradient-from","#0000",""),Ne("--tw-gradient-via","#0000",""),Ne("--tw-gradient-to","#0000",""),Ne("--tw-gradient-stops"),Ne("--tw-gradient-via-stops"),Ne("--tw-gradient-from-position","0%",""),Ne("--tw-gradient-via-position","50%",""),Ne("--tw-gradient-to-position","100%","")]);function m(n,o){t.functional(n,(t=>{if(t.value){if("arbitrary"===t.value.kind){let r=t.value.value;switch(t.value.dataType??ie(r,["color","length","percentage"])){case"length":case"percentage":return t.modifier?void 0:o.position(r);default:return r=We(r,t.modifier,e),null===r?void 0:o.color(r)}}{let r=Ue(t,e,["--background-color","--color"]);if(r)return o.color(r)}{if(t.modifier)return;let r=e.resolve(t.value.value,["--gradient-color-stop-positions"]);if(r)return o.position(r);if("%"===t.value.value[t.value.value.length-1]&&ye(t.value.value.slice(0,-1)))return o.position(t.value.value)}}})),r(n,(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--background-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:Array.from({length:21},((e,t)=>5*t+"%")),valueThemeKeys:["--gradient-color-stop-positions"]}]))}m("from",{color:e=>[h(),y("--tw-sort","--tw-gradient-from"),y("--tw-gradient-from",e),y("--tw-gradient-stops","var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))")],position:e=>[h(),y("--tw-gradient-from-position",e)]}),n("via-none",[["--tw-gradient-via-stops","initial"]]),m("via",{color:e=>[h(),y("--tw-sort","--tw-gradient-via"),y("--tw-gradient-via",e),y("--tw-gradient-via-stops","var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position)"),y("--tw-gradient-stops","var(--tw-gradient-via-stops)")],position:e=>[h(),y("--tw-gradient-via-position",e)]}),m("to",{color:e=>[h(),y("--tw-sort","--tw-gradient-to"),y("--tw-gradient-to",e),y("--tw-gradient-stops","var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))")],position:e=>[h(),y("--tw-gradient-to-position",e)]}),n("mask-none",[["mask-image","none"]]),t.functional("mask",(e=>{if(!e.value||e.modifier||"arbitrary"!==e.value.kind)return;let t=e.value.value;switch(e.value.dataType??ie(t,["image","percentage","position","bg-size","length","url"])){case"percentage":case"position":return e.modifier?void 0:[y("mask-position",t)];case"bg-size":case"length":case"size":return[y("mask-size",t)];default:return[y("mask-image",t)]}})),n("mask-add",[["mask-composite","add"]]),n("mask-subtract",[["mask-composite","subtract"]]),n("mask-intersect",[["mask-composite","intersect"]]),n("mask-exclude",[["mask-composite","exclude"]]),n("mask-alpha",[["mask-mode","alpha"]]),n("mask-luminance",[["mask-mode","luminance"]]),n("mask-match",[["mask-mode","match-source"]]),n("mask-type-alpha",[["mask-type","alpha"]]),n("mask-type-luminance",[["mask-type","luminance"]]),n("mask-auto",[["mask-size","auto"]]),n("mask-cover",[["mask-size","cover"]]),n("mask-contain",[["mask-size","contain"]]),o("mask-size",{handle(e){if(e)return[y("mask-size",e)]}}),n("mask-top",[["mask-position","top"]]),n("mask-top-left",[["mask-position","left top"]]),n("mask-top-right",[["mask-position","right top"]]),n("mask-bottom",[["mask-position","bottom"]]),n("mask-bottom-left",[["mask-position","left bottom"]]),n("mask-bottom-right",[["mask-position","right bottom"]]),n("mask-left",[["mask-position","left"]]),n("mask-right",[["mask-position","right"]]),n("mask-center",[["mask-position","center"]]),o("mask-position",{handle(e){if(e)return[y("mask-position",e)]}}),n("mask-repeat",[["mask-repeat","repeat"]]),n("mask-no-repeat",[["mask-repeat","no-repeat"]]),n("mask-repeat-x",[["mask-repeat","repeat-x"]]),n("mask-repeat-y",[["mask-repeat","repeat-y"]]),n("mask-repeat-round",[["mask-repeat","round"]]),n("mask-repeat-space",[["mask-repeat","space"]]),n("mask-clip-border",[["mask-clip","border-box"]]),n("mask-clip-padding",[["mask-clip","padding-box"]]),n("mask-clip-content",[["mask-clip","content-box"]]),n("mask-clip-fill",[["mask-clip","fill-box"]]),n("mask-clip-stroke",[["mask-clip","stroke-box"]]),n("mask-clip-view",[["mask-clip","view-box"]]),n("mask-no-clip",[["mask-clip","no-clip"]]),n("mask-origin-border",[["mask-origin","border-box"]]),n("mask-origin-padding",[["mask-origin","padding-box"]]),n("mask-origin-content",[["mask-origin","content-box"]]),n("mask-origin-fill",[["mask-origin","fill-box"]]),n("mask-origin-stroke",[["mask-origin","stroke-box"]]),n("mask-origin-view",[["mask-origin","view-box"]]);let g=()=>z([Ne("--tw-mask-linear","linear-gradient(#fff, #fff)"),Ne("--tw-mask-radial","linear-gradient(#fff, #fff)"),Ne("--tw-mask-conic","linear-gradient(#fff, #fff)")]);function v(n,o){t.functional(n,(t=>{if(t.value){if("arbitrary"===t.value.kind){let r=t.value.value;switch(t.value.dataType??ie(r,["length","percentage","color"])){case"color":return r=We(r,t.modifier,e),null===r?void 0:o.color(r);case"percentage":return t.modifier||!ye(r.slice(0,-1))?void 0:o.position(r);default:return t.modifier?void 0:o.position(r)}}{let r=Ue(t,e,["--background-color","--color"]);if(r)return o.color(r)}{if(t.modifier)return;let r=ie(t.value.value,["number","percentage"]);if(!r)return;switch(r){case"number":{let r=e.resolve(null,["--spacing"]);return r&&$e(t.value.value)?o.position(`calc(${r} * ${t.value.value})`):void 0}case"percentage":return ye(t.value.value.slice(0,-1))?o.position(t.value.value):void 0;default:return}}}})),r(n,(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--background-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:Array.from({length:21},((e,t)=>5*t+"%")),valueThemeKeys:["--gradient-color-stop-positions"]}])),r(n,(()=>[{values:Array.from({length:21},((e,t)=>5*t+"%"))},{values:e.get(["--spacing"])?Ee:[]},{values:["current","inherit","transparent"],valueThemeKeys:["--background-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))}]))}let x=()=>z([Ne("--tw-mask-left","linear-gradient(#fff, #fff)"),Ne("--tw-mask-right","linear-gradient(#fff, #fff)"),Ne("--tw-mask-bottom","linear-gradient(#fff, #fff)"),Ne("--tw-mask-top","linear-gradient(#fff, #fff)")]);function $(e,t,r){v(e,{color(e){let n=[g(),x(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-linear","var(--tw-mask-left), var(--tw-mask-right), var(--tw-mask-bottom), var(--tw-mask-top)")];for(let o of["top","right","bottom","left"])r[o]&&(n.push(y(`--tw-mask-${o}`,`linear-gradient(to ${o}, var(--tw-mask-${o}-from-color) var(--tw-mask-${o}-from-position), var(--tw-mask-${o}-to-color) var(--tw-mask-${o}-to-position))`)),n.push(z([Ne(`--tw-mask-${o}-from-position`,"0%"),Ne(`--tw-mask-${o}-to-position`,"100%"),Ne(`--tw-mask-${o}-from-color`,"black"),Ne(`--tw-mask-${o}-to-color`,"transparent")])),n.push(y(`--tw-mask-${o}-${t}-color`,e)));return n},position(e){let n=[g(),x(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-linear","var(--tw-mask-left), var(--tw-mask-right), var(--tw-mask-bottom), var(--tw-mask-top)")];for(let o of["top","right","bottom","left"])r[o]&&(n.push(y(`--tw-mask-${o}`,`linear-gradient(to ${o}, var(--tw-mask-${o}-from-color) var(--tw-mask-${o}-from-position), var(--tw-mask-${o}-to-color) var(--tw-mask-${o}-to-position))`)),n.push(z([Ne(`--tw-mask-${o}-from-position`,"0%"),Ne(`--tw-mask-${o}-to-position`,"100%"),Ne(`--tw-mask-${o}-from-color`,"black"),Ne(`--tw-mask-${o}-to-color`,"transparent")])),n.push(y(`--tw-mask-${o}-${t}-position`,e)));return n}})}$("mask-x-from","from",{top:!1,right:!0,bottom:!1,left:!0}),$("mask-x-to","to",{top:!1,right:!0,bottom:!1,left:!0}),$("mask-y-from","from",{top:!0,right:!1,bottom:!0,left:!1}),$("mask-y-to","to",{top:!0,right:!1,bottom:!0,left:!1}),$("mask-t-from","from",{top:!0,right:!1,bottom:!1,left:!1}),$("mask-t-to","to",{top:!0,right:!1,bottom:!1,left:!1}),$("mask-r-from","from",{top:!1,right:!0,bottom:!1,left:!1}),$("mask-r-to","to",{top:!1,right:!0,bottom:!1,left:!1}),$("mask-b-from","from",{top:!1,right:!1,bottom:!0,left:!1}),$("mask-b-to","to",{top:!1,right:!1,bottom:!0,left:!1}),$("mask-l-from","from",{top:!1,right:!1,bottom:!1,left:!0}),$("mask-l-to","to",{top:!1,right:!1,bottom:!1,left:!0});let A=()=>z([Ne("--tw-mask-linear-position","0deg"),Ne("--tw-mask-linear-from-position","0%"),Ne("--tw-mask-linear-to-position","100%"),Ne("--tw-mask-linear-from-color","black"),Ne("--tw-mask-linear-to-color","transparent")]);o("mask-linear",{defaultValue:null,supportsNegative:!0,supportsFractions:!1,handleBareValue:e=>ye(e.value)?`calc(1deg * ${e.value})`:null,handleNegativeBareValue:e=>ye(e.value)?`calc(1deg * -${e.value})`:null,handle:e=>[g(),A(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-linear","linear-gradient(var(--tw-mask-linear-stops, var(--tw-mask-linear-position)))"),y("--tw-mask-linear-position",e)]}),r("mask-linear",(()=>[{supportsNegative:!0,values:["0","1","2","3","6","12","45","90","180"]}])),v("mask-linear-from",{color:e=>[g(),A(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-linear-stops","var(--tw-mask-linear-position), var(--tw-mask-linear-from-color) var(--tw-mask-linear-from-position), var(--tw-mask-linear-to-color) var(--tw-mask-linear-to-position)"),y("--tw-mask-linear","linear-gradient(var(--tw-mask-linear-stops))"),y("--tw-mask-linear-from-color",e)],position:e=>[g(),A(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-linear-stops","var(--tw-mask-linear-position), var(--tw-mask-linear-from-color) var(--tw-mask-linear-from-position), var(--tw-mask-linear-to-color) var(--tw-mask-linear-to-position)"),y("--tw-mask-linear","linear-gradient(var(--tw-mask-linear-stops))"),y("--tw-mask-linear-from-position",e)]}),v("mask-linear-to",{color:e=>[g(),A(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-linear-stops","var(--tw-mask-linear-position), var(--tw-mask-linear-from-color) var(--tw-mask-linear-from-position), var(--tw-mask-linear-to-color) var(--tw-mask-linear-to-position)"),y("--tw-mask-linear","linear-gradient(var(--tw-mask-linear-stops))"),y("--tw-mask-linear-to-color",e)],position:e=>[g(),A(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-linear-stops","var(--tw-mask-linear-position), var(--tw-mask-linear-from-color) var(--tw-mask-linear-from-position), var(--tw-mask-linear-to-color) var(--tw-mask-linear-to-position)"),y("--tw-mask-linear","linear-gradient(var(--tw-mask-linear-stops))"),y("--tw-mask-linear-to-position",e)]});let j=()=>z([Ne("--tw-mask-radial-from-position","0%"),Ne("--tw-mask-radial-to-position","100%"),Ne("--tw-mask-radial-from-color","black"),Ne("--tw-mask-radial-to-color","transparent"),Ne("--tw-mask-radial-shape","ellipse"),Ne("--tw-mask-radial-size","farthest-corner"),Ne("--tw-mask-radial-position","center")]);n("mask-circle",[["--tw-mask-radial-shape","circle"]]),n("mask-ellipse",[["--tw-mask-radial-shape","ellipse"]]),n("mask-radial-closest-side",[["--tw-mask-radial-size","closest-side"]]),n("mask-radial-farthest-side",[["--tw-mask-radial-size","farthest-side"]]),n("mask-radial-closest-corner",[["--tw-mask-radial-size","closest-corner"]]),n("mask-radial-farthest-corner",[["--tw-mask-radial-size","farthest-corner"]]),n("mask-radial-at-top",[["--tw-mask-radial-position","top"]]),n("mask-radial-at-top-left",[["--tw-mask-radial-position","top left"]]),n("mask-radial-at-top-right",[["--tw-mask-radial-position","top right"]]),n("mask-radial-at-bottom",[["--tw-mask-radial-position","bottom"]]),n("mask-radial-at-bottom-left",[["--tw-mask-radial-position","bottom left"]]),n("mask-radial-at-bottom-right",[["--tw-mask-radial-position","bottom right"]]),n("mask-radial-at-left",[["--tw-mask-radial-position","left"]]),n("mask-radial-at-right",[["--tw-mask-radial-position","right"]]),n("mask-radial-at-center",[["--tw-mask-radial-position","center"]]),o("mask-radial-at",{defaultValue:null,supportsNegative:!1,supportsFractions:!1,handle:e=>[y("--tw-mask-radial-position",e)]}),o("mask-radial",{defaultValue:null,supportsNegative:!1,supportsFractions:!1,handle:e=>[g(),j(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-radial","radial-gradient(var(--tw-mask-radial-stops, var(--tw-mask-radial-size)))"),y("--tw-mask-radial-size",e)]}),v("mask-radial-from",{color:e=>[g(),j(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-radial-stops","var(--tw-mask-radial-shape) var(--tw-mask-radial-size) at var(--tw-mask-radial-position), var(--tw-mask-radial-from-color) var(--tw-mask-radial-from-position), var(--tw-mask-radial-to-color) var(--tw-mask-radial-to-position)"),y("--tw-mask-radial","radial-gradient(var(--tw-mask-radial-stops))"),y("--tw-mask-radial-from-color",e)],position:e=>[g(),j(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-radial-stops","var(--tw-mask-radial-shape) var(--tw-mask-radial-size) at var(--tw-mask-radial-position), var(--tw-mask-radial-from-color) var(--tw-mask-radial-from-position), var(--tw-mask-radial-to-color) var(--tw-mask-radial-to-position)"),y("--tw-mask-radial","radial-gradient(var(--tw-mask-radial-stops))"),y("--tw-mask-radial-from-position",e)]}),v("mask-radial-to",{color:e=>[g(),j(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-radial-stops","var(--tw-mask-radial-shape) var(--tw-mask-radial-size) at var(--tw-mask-radial-position), var(--tw-mask-radial-from-color) var(--tw-mask-radial-from-position), var(--tw-mask-radial-to-color) var(--tw-mask-radial-to-position)"),y("--tw-mask-radial","radial-gradient(var(--tw-mask-radial-stops))"),y("--tw-mask-radial-to-color",e)],position:e=>[g(),j(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-radial-stops","var(--tw-mask-radial-shape) var(--tw-mask-radial-size) at var(--tw-mask-radial-position), var(--tw-mask-radial-from-color) var(--tw-mask-radial-from-position), var(--tw-mask-radial-to-color) var(--tw-mask-radial-to-position)"),y("--tw-mask-radial","radial-gradient(var(--tw-mask-radial-stops))"),y("--tw-mask-radial-to-position",e)]});let C=()=>z([Ne("--tw-mask-conic-position","0deg"),Ne("--tw-mask-conic-from-position","0%"),Ne("--tw-mask-conic-to-position","100%"),Ne("--tw-mask-conic-from-color","black"),Ne("--tw-mask-conic-to-color","transparent")]);o("mask-conic",{defaultValue:null,supportsNegative:!0,supportsFractions:!1,handleBareValue:e=>ye(e.value)?`calc(1deg * ${e.value})`:null,handleNegativeBareValue:e=>ye(e.value)?`calc(1deg * -${e.value})`:null,handle:e=>[g(),C(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-conic","conic-gradient(var(--tw-mask-conic-stops, var(--tw-mask-conic-position)))"),y("--tw-mask-conic-position",e)]}),r("mask-conic",(()=>[{supportsNegative:!0,values:["0","1","2","3","6","12","45","90","180"]}])),v("mask-conic-from",{color:e=>[g(),C(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-conic-stops","from var(--tw-mask-conic-position), var(--tw-mask-conic-from-color) var(--tw-mask-conic-from-position), var(--tw-mask-conic-to-color) var(--tw-mask-conic-to-position)"),y("--tw-mask-conic","conic-gradient(var(--tw-mask-conic-stops))"),y("--tw-mask-conic-from-color",e)],position:e=>[g(),C(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-conic-stops","from var(--tw-mask-conic-position), var(--tw-mask-conic-from-color) var(--tw-mask-conic-from-position), var(--tw-mask-conic-to-color) var(--tw-mask-conic-to-position)"),y("--tw-mask-conic","conic-gradient(var(--tw-mask-conic-stops))"),y("--tw-mask-conic-from-position",e)]}),v("mask-conic-to",{color:e=>[g(),C(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-conic-stops","from var(--tw-mask-conic-position), var(--tw-mask-conic-from-color) var(--tw-mask-conic-from-position), var(--tw-mask-conic-to-color) var(--tw-mask-conic-to-position)"),y("--tw-mask-conic","conic-gradient(var(--tw-mask-conic-stops))"),y("--tw-mask-conic-to-color",e)],position:e=>[g(),C(),y("mask-image","var(--tw-mask-linear), var(--tw-mask-radial), var(--tw-mask-conic)"),y("mask-composite","intersect"),y("--tw-mask-conic-stops","from var(--tw-mask-conic-position), var(--tw-mask-conic-from-color) var(--tw-mask-conic-from-position), var(--tw-mask-conic-to-color) var(--tw-mask-conic-to-position)"),y("--tw-mask-conic","conic-gradient(var(--tw-mask-conic-stops))"),y("--tw-mask-conic-to-position",e)]}),n("box-decoration-slice",[["-webkit-box-decoration-break","slice"],["box-decoration-break","slice"]]),n("box-decoration-clone",[["-webkit-box-decoration-break","clone"],["box-decoration-break","clone"]]),n("bg-clip-text",[["background-clip","text"]]),n("bg-clip-border",[["background-clip","border-box"]]),n("bg-clip-padding",[["background-clip","padding-box"]]),n("bg-clip-content",[["background-clip","content-box"]]),n("bg-origin-border",[["background-origin","border-box"]]),n("bg-origin-padding",[["background-origin","padding-box"]]),n("bg-origin-content",[["background-origin","content-box"]]);for(let e of["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"])n(`bg-blend-${e}`,[["background-blend-mode",e]]),n(`mix-blend-${e}`,[["mix-blend-mode",e]]);n("mix-blend-plus-darker",[["mix-blend-mode","plus-darker"]]),n("mix-blend-plus-lighter",[["mix-blend-mode","plus-lighter"]]),n("fill-none",[["fill","none"]]),t.functional("fill",(t=>{if(!t.value)return;if("arbitrary"===t.value.kind){let r=We(t.value.value,t.modifier,e);return null===r?void 0:[y("fill",r)]}let r=Ue(t,e,["--fill","--color"]);return r?[y("fill",r)]:void 0})),r("fill",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--fill","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))}])),n("stroke-none",[["stroke","none"]]),t.functional("stroke",(t=>{if(t.value){if("arbitrary"===t.value.kind){let r=t.value.value;switch(t.value.dataType??ie(r,["color","number","length","percentage"])){case"number":case"length":case"percentage":return t.modifier?void 0:[y("stroke-width",r)];default:return r=We(t.value.value,t.modifier,e),null===r?void 0:[y("stroke",r)]}}{let r=Ue(t,e,["--stroke","--color"]);if(r)return[y("stroke",r)]}{let r=e.resolve(t.value.value,["--stroke-width"]);if(r)return[y("stroke-width",r)];if(ye(t.value.value))return[y("stroke-width",t.value.value)]}}})),r("stroke",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--stroke","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:["0","1","2","3"],valueThemeKeys:["--stroke-width"]}])),n("object-contain",[["object-fit","contain"]]),n("object-cover",[["object-fit","cover"]]),n("object-fill",[["object-fit","fill"]]),n("object-none",[["object-fit","none"]]),n("object-scale-down",[["object-fit","scale-down"]]),n("object-top",[["object-position","top"]]),n("object-top-left",[["object-position","left top"]]),n("object-top-right",[["object-position","right top"]]),n("object-bottom",[["object-position","bottom"]]),n("object-bottom-left",[["object-position","left bottom"]]),n("object-bottom-right",[["object-position","right bottom"]]),n("object-left",[["object-position","left"]]),n("object-right",[["object-position","right"]]),n("object-center",[["object-position","center"]]),o("object",{themeKeys:["--object-position"],handle:e=>[y("object-position",e)]});for(let[e,t]of[["p","padding"],["px","padding-inline"],["py","padding-block"],["ps","padding-inline-start"],["pe","padding-inline-end"],["pt","padding-top"],["pr","padding-right"],["pb","padding-bottom"],["pl","padding-left"]])i(e,["--padding","--spacing"],(e=>[y(t,e)]));n("text-left",[["text-align","left"]]),n("text-center",[["text-align","center"]]),n("text-right",[["text-align","right"]]),n("text-justify",[["text-align","justify"]]),n("text-start",[["text-align","start"]]),n("text-end",[["text-align","end"]]),i("indent",["--text-indent","--spacing"],(e=>[y("text-indent",e)]),{supportsNegative:!0}),n("align-baseline",[["vertical-align","baseline"]]),n("align-top",[["vertical-align","top"]]),n("align-middle",[["vertical-align","middle"]]),n("align-bottom",[["vertical-align","bottom"]]),n("align-text-top",[["vertical-align","text-top"]]),n("align-text-bottom",[["vertical-align","text-bottom"]]),n("align-sub",[["vertical-align","sub"]]),n("align-super",[["vertical-align","super"]]),o("align",{themeKeys:[],handle:e=>[y("vertical-align",e)]}),t.functional("font",(t=>{if(t.value&&!t.modifier){if("arbitrary"===t.value.kind){let e=t.value.value;switch(t.value.dataType??ie(e,["number","generic-name","family-name"])){case"generic-name":case"family-name":return[y("font-family",e)];default:return[z([Ne("--tw-font-weight")]),y("--tw-font-weight",e),y("font-weight",e)]}}{let r=e.resolveWith(t.value.value,["--font"],["--font-feature-settings","--font-variation-settings"]);if(r){let[e,t={}]=r;return[y("font-family",e),y("font-feature-settings",t["--font-feature-settings"]),y("font-variation-settings",t["--font-variation-settings"])]}}{let r=e.resolve(t.value.value,["--font-weight"]);if(r)return[z([Ne("--tw-font-weight")]),y("--tw-font-weight",r),y("font-weight",r)]}}})),r("font",(()=>[{values:[],valueThemeKeys:["--font"]},{values:[],valueThemeKeys:["--font-weight"]}])),n("uppercase",[["text-transform","uppercase"]]),n("lowercase",[["text-transform","lowercase"]]),n("capitalize",[["text-transform","capitalize"]]),n("normal-case",[["text-transform","none"]]),n("italic",[["font-style","italic"]]),n("not-italic",[["font-style","normal"]]),n("underline",[["text-decoration-line","underline"]]),n("overline",[["text-decoration-line","overline"]]),n("line-through",[["text-decoration-line","line-through"]]),n("no-underline",[["text-decoration-line","none"]]),n("font-stretch-normal",[["font-stretch","normal"]]),n("font-stretch-ultra-condensed",[["font-stretch","ultra-condensed"]]),n("font-stretch-extra-condensed",[["font-stretch","extra-condensed"]]),n("font-stretch-condensed",[["font-stretch","condensed"]]),n("font-stretch-semi-condensed",[["font-stretch","semi-condensed"]]),n("font-stretch-semi-expanded",[["font-stretch","semi-expanded"]]),n("font-stretch-expanded",[["font-stretch","expanded"]]),n("font-stretch-extra-expanded",[["font-stretch","extra-expanded"]]),n("font-stretch-ultra-expanded",[["font-stretch","ultra-expanded"]]),o("font-stretch",{handleBareValue:({value:e})=>{if(!e.endsWith("%"))return null;let t=Number(e.slice(0,-1));return!ye(t)||Number.isNaN(t)||t<50||t>200?null:e},handle:e=>[y("font-stretch",e)]}),r("font-stretch",(()=>[{values:["50%","75%","90%","95%","100%","105%","110%","125%","150%","200%"]}])),a("placeholder",{themeKeys:["--background-color","--color"],handle:e=>[w("&::placeholder",[y("--tw-sort","placeholder-color"),y("color",e)])]}),n("decoration-solid",[["text-decoration-style","solid"]]),n("decoration-double",[["text-decoration-style","double"]]),n("decoration-dotted",[["text-decoration-style","dotted"]]),n("decoration-dashed",[["text-decoration-style","dashed"]]),n("decoration-wavy",[["text-decoration-style","wavy"]]),n("decoration-auto",[["text-decoration-thickness","auto"]]),n("decoration-from-font",[["text-decoration-thickness","from-font"]]),t.functional("decoration",(t=>{if(t.value){if("arbitrary"===t.value.kind){let r=t.value.value;switch(t.value.dataType??ie(r,["color","length","percentage"])){case"length":case"percentage":return t.modifier?void 0:[y("text-decoration-thickness",r)];default:return r=We(r,t.modifier,e),null===r?void 0:[y("text-decoration-color",r)]}}{let r=e.resolve(t.value.value,["--text-decoration-thickness"]);if(r)return t.modifier?void 0:[y("text-decoration-thickness",r)];if(ye(t.value.value))return t.modifier?void 0:[y("text-decoration-thickness",`${t.value.value}px`)]}{let r=Ue(t,e,["--text-decoration-color","--color"]);if(r)return[y("text-decoration-color",r)]}}})),r("decoration",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--text-decoration-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:["0","1","2"],valueThemeKeys:["--text-decoration-thickness"]}])),n("animate-none",[["animation","none"]]),o("animate",{themeKeys:["--animate"],handle:e=>[y("animation",e)]});{let a=["var(--tw-blur,)","var(--tw-brightness,)","var(--tw-contrast,)","var(--tw-grayscale,)","var(--tw-hue-rotate,)","var(--tw-invert,)","var(--tw-saturate,)","var(--tw-sepia,)","var(--tw-drop-shadow,)"].join(" "),i=["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,)"].join(" "),l=()=>z([Ne("--tw-blur"),Ne("--tw-brightness"),Ne("--tw-contrast"),Ne("--tw-grayscale"),Ne("--tw-hue-rotate"),Ne("--tw-invert"),Ne("--tw-opacity"),Ne("--tw-saturate"),Ne("--tw-sepia"),Ne("--tw-drop-shadow"),Ne("--tw-drop-shadow-color"),Ne("--tw-drop-shadow-alpha","100%",""),Ne("--tw-drop-shadow-size")]),s=()=>z([Ne("--tw-backdrop-blur"),Ne("--tw-backdrop-brightness"),Ne("--tw-backdrop-contrast"),Ne("--tw-backdrop-grayscale"),Ne("--tw-backdrop-hue-rotate"),Ne("--tw-backdrop-invert"),Ne("--tw-backdrop-opacity"),Ne("--tw-backdrop-saturate"),Ne("--tw-backdrop-sepia")]);t.functional("filter",(e=>{if(!e.modifier){if(null===e.value)return[l(),y("filter",a)];if("arbitrary"===e.value.kind)return[y("filter",e.value.value)];if("none"===e.value.value)return[y("filter","none")]}})),t.functional("backdrop-filter",(e=>{if(!e.modifier){if(null===e.value)return[s(),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)];if("arbitrary"===e.value.kind)return[y("-webkit-backdrop-filter",e.value.value),y("backdrop-filter",e.value.value)];if("none"===e.value.value)return[y("-webkit-backdrop-filter","none"),y("backdrop-filter","none")]}})),o("blur",{themeKeys:["--blur"],handle:e=>[l(),y("--tw-blur",`blur(${e})`),y("filter",a)]}),n("blur-none",[l,["--tw-blur"," "],["filter",a]]),o("backdrop-blur",{themeKeys:["--backdrop-blur","--blur"],handle:e=>[s(),y("--tw-backdrop-blur",`blur(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),n("backdrop-blur-none",[s,["--tw-backdrop-blur"," "],["-webkit-backdrop-filter",i],["backdrop-filter",i]]),o("brightness",{themeKeys:["--brightness"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,handle:e=>[l(),y("--tw-brightness",`brightness(${e})`),y("filter",a)]}),o("backdrop-brightness",{themeKeys:["--backdrop-brightness","--brightness"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,handle:e=>[s(),y("--tw-backdrop-brightness",`brightness(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),r("brightness",(()=>[{values:["0","50","75","90","95","100","105","110","125","150","200"],valueThemeKeys:["--brightness"]}])),r("backdrop-brightness",(()=>[{values:["0","50","75","90","95","100","105","110","125","150","200"],valueThemeKeys:["--backdrop-brightness","--brightness"]}])),o("contrast",{themeKeys:["--contrast"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,handle:e=>[l(),y("--tw-contrast",`contrast(${e})`),y("filter",a)]}),o("backdrop-contrast",{themeKeys:["--backdrop-contrast","--contrast"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,handle:e=>[s(),y("--tw-backdrop-contrast",`contrast(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),r("contrast",(()=>[{values:["0","50","75","100","125","150","200"],valueThemeKeys:["--contrast"]}])),r("backdrop-contrast",(()=>[{values:["0","50","75","100","125","150","200"],valueThemeKeys:["--backdrop-contrast","--contrast"]}])),o("grayscale",{themeKeys:["--grayscale"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,defaultValue:"100%",handle:e=>[l(),y("--tw-grayscale",`grayscale(${e})`),y("filter",a)]}),o("backdrop-grayscale",{themeKeys:["--backdrop-grayscale","--grayscale"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,defaultValue:"100%",handle:e=>[s(),y("--tw-backdrop-grayscale",`grayscale(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),r("grayscale",(()=>[{values:["0","25","50","75","100"],valueThemeKeys:["--grayscale"],hasDefaultValue:!0}])),r("backdrop-grayscale",(()=>[{values:["0","25","50","75","100"],valueThemeKeys:["--backdrop-grayscale","--grayscale"],hasDefaultValue:!0}])),o("hue-rotate",{supportsNegative:!0,themeKeys:["--hue-rotate"],handleBareValue:({value:e})=>ye(e)?`${e}deg`:null,handle:e=>[l(),y("--tw-hue-rotate",`hue-rotate(${e})`),y("filter",a)]}),o("backdrop-hue-rotate",{supportsNegative:!0,themeKeys:["--backdrop-hue-rotate","--hue-rotate"],handleBareValue:({value:e})=>ye(e)?`${e}deg`:null,handle:e=>[s(),y("--tw-backdrop-hue-rotate",`hue-rotate(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),r("hue-rotate",(()=>[{values:["0","15","30","60","90","180"],valueThemeKeys:["--hue-rotate"]}])),r("backdrop-hue-rotate",(()=>[{values:["0","15","30","60","90","180"],valueThemeKeys:["--backdrop-hue-rotate","--hue-rotate"]}])),o("invert",{themeKeys:["--invert"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,defaultValue:"100%",handle:e=>[l(),y("--tw-invert",`invert(${e})`),y("filter",a)]}),o("backdrop-invert",{themeKeys:["--backdrop-invert","--invert"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,defaultValue:"100%",handle:e=>[s(),y("--tw-backdrop-invert",`invert(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),r("invert",(()=>[{values:["0","25","50","75","100"],valueThemeKeys:["--invert"],hasDefaultValue:!0}])),r("backdrop-invert",(()=>[{values:["0","25","50","75","100"],valueThemeKeys:["--backdrop-invert","--invert"],hasDefaultValue:!0}])),o("saturate",{themeKeys:["--saturate"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,handle:e=>[l(),y("--tw-saturate",`saturate(${e})`),y("filter",a)]}),o("backdrop-saturate",{themeKeys:["--backdrop-saturate","--saturate"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,handle:e=>[s(),y("--tw-backdrop-saturate",`saturate(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),r("saturate",(()=>[{values:["0","50","100","150","200"],valueThemeKeys:["--saturate"]}])),r("backdrop-saturate",(()=>[{values:["0","50","100","150","200"],valueThemeKeys:["--backdrop-saturate","--saturate"]}])),o("sepia",{themeKeys:["--sepia"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,defaultValue:"100%",handle:e=>[l(),y("--tw-sepia",`sepia(${e})`),y("filter",a)]}),o("backdrop-sepia",{themeKeys:["--backdrop-sepia","--sepia"],handleBareValue:({value:e})=>ye(e)?`${e}%`:null,defaultValue:"100%",handle:e=>[s(),y("--tw-backdrop-sepia",`sepia(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),r("sepia",(()=>[{values:["0","50","100"],valueThemeKeys:["--sepia"],hasDefaultValue:!0}])),r("backdrop-sepia",(()=>[{values:["0","50","100"],valueThemeKeys:["--backdrop-sepia","--sepia"],hasDefaultValue:!0}])),n("drop-shadow-none",[l,["--tw-drop-shadow"," "],["filter",a]]),t.functional("drop-shadow",(t=>{let r;if(t.modifier&&("arbitrary"===t.modifier.kind?r=t.modifier.value:ye(t.modifier.value)&&(r=`${t.modifier.value}%`)),!t.value){let t=e.get(["--drop-shadow"]),n=e.resolve(null,["--drop-shadow"]);return null===t||null===n?void 0:[l(),y("--tw-drop-shadow-alpha",r),...Le("--tw-drop-shadow-size",t,r,(e=>`var(--tw-drop-shadow-color, ${e})`)),y("--tw-drop-shadow",R(n,",").map((e=>`drop-shadow(${e})`)).join(" ")),y("filter",a)]}if("arbitrary"===t.value.kind){let n=t.value.value;return"color"===(t.value.dataType??ie(n,["color"]))?(n=We(n,t.modifier,e),null===n?void 0:[l(),y("--tw-drop-shadow-color",Oe(n,"var(--tw-drop-shadow-alpha)")),y("--tw-drop-shadow","var(--tw-drop-shadow-size)")]):t.modifier&&!r?void 0:[l(),y("--tw-drop-shadow-alpha",r),...Le("--tw-drop-shadow-size",n,r,(e=>`var(--tw-drop-shadow-color, ${e})`)),y("--tw-drop-shadow","var(--tw-drop-shadow-size)"),y("filter",a)]}{let n=e.get([`--drop-shadow-${t.value.value}`]),o=e.resolve(t.value.value,["--drop-shadow"]);if(n&&o)return t.modifier&&!r?void 0:r?[l(),y("--tw-drop-shadow-alpha",r),...Le("--tw-drop-shadow-size",n,r,(e=>`var(--tw-drop-shadow-color, ${e})`)),y("--tw-drop-shadow","var(--tw-drop-shadow-size)"),y("filter",a)]:[l(),y("--tw-drop-shadow-alpha",r),...Le("--tw-drop-shadow-size",n,r,(e=>`var(--tw-drop-shadow-color, ${e})`)),y("--tw-drop-shadow",R(o,",").map((e=>`drop-shadow(${e})`)).join(" ")),y("filter",a)]}{let r=Ue(t,e,["--drop-shadow-color","--color"]);if(r)return"inherit"===r?[l(),y("--tw-drop-shadow-color","inherit"),y("--tw-drop-shadow","var(--tw-drop-shadow-size)")]:[l(),y("--tw-drop-shadow-color",Oe(r,"var(--tw-drop-shadow-alpha)")),y("--tw-drop-shadow","var(--tw-drop-shadow-size)")]}})),r("drop-shadow",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--drop-shadow-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{valueThemeKeys:["--drop-shadow"]}])),o("backdrop-opacity",{themeKeys:["--backdrop-opacity","--opacity"],handleBareValue:({value:e})=>ze(e)?`${e}%`:null,handle:e=>[s(),y("--tw-backdrop-opacity",`opacity(${e})`),y("-webkit-backdrop-filter",i),y("backdrop-filter",i)]}),r("backdrop-opacity",(()=>[{values:Array.from({length:21},((e,t)=>""+5*t)),valueThemeKeys:["--backdrop-opacity","--opacity"]}]))}{let a=`var(--tw-ease, ${e.resolve(null,["--default-transition-timing-function"])??"ease"})`,i=`var(--tw-duration, ${e.resolve(null,["--default-transition-duration"])??"0s"})`;n("transition-none",[["transition-property","none"]]),n("transition-all",[["transition-property","all"],["transition-timing-function",a],["transition-duration",i]]),n("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",a],["transition-duration",i]]),n("transition-opacity",[["transition-property","opacity"],["transition-timing-function",a],["transition-duration",i]]),n("transition-shadow",[["transition-property","box-shadow"],["transition-timing-function",a],["transition-duration",i]]),n("transition-transform",[["transition-property","transform, translate, scale, rotate"],["transition-timing-function",a],["transition-duration",i]]),o("transition",{defaultValue:"color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, visibility, content-visibility, overlay, pointer-events",themeKeys:["--transition-property"],handle:e=>[y("transition-property",e),y("transition-timing-function",a),y("transition-duration",i)]}),n("transition-discrete",[["transition-behavior","allow-discrete"]]),n("transition-normal",[["transition-behavior","normal"]]),o("delay",{handleBareValue:({value:e})=>ye(e)?`${e}ms`:null,themeKeys:["--transition-delay"],handle:e=>[y("transition-delay",e)]});{let r=()=>z([Ne("--tw-duration")]);n("duration-initial",[r,["--tw-duration","initial"]]),t.functional("duration",(t=>{if(t.modifier||!t.value)return;let n=null;return"arbitrary"===t.value.kind?n=t.value.value:(n=e.resolve(t.value.fraction??t.value.value,["--transition-duration"]),null===n&&ye(t.value.value)&&(n=`${t.value.value}ms`)),null!==n?[r(),y("--tw-duration",n),y("transition-duration",n)]:void 0}))}r("delay",(()=>[{values:["75","100","150","200","300","500","700","1000"],valueThemeKeys:["--transition-delay"]}])),r("duration",(()=>[{values:["75","100","150","200","300","500","700","1000"],valueThemeKeys:["--transition-duration"]}]))}{let e=()=>z([Ne("--tw-ease")]);n("ease-initial",[e,["--tw-ease","initial"]]),n("ease-linear",[e,["--tw-ease","linear"],["transition-timing-function","linear"]]),o("ease",{themeKeys:["--ease"],handle:t=>[e(),y("--tw-ease",t),y("transition-timing-function",t)]})}n("will-change-auto",[["will-change","auto"]]),n("will-change-scroll",[["will-change","scroll-position"]]),n("will-change-contents",[["will-change","contents"]]),n("will-change-transform",[["will-change","transform"]]),o("will-change",{themeKeys:[],handle:e=>[y("will-change",e)]}),n("content-none",[["--tw-content","none"],["content","none"]]),o("content",{themeKeys:[],handle:e=>[z([Ne("--tw-content",'""')]),y("--tw-content",e),y("content","var(--tw-content)")]});{let e="var(--tw-contain-size,) var(--tw-contain-layout,) var(--tw-contain-paint,) var(--tw-contain-style,)",t=()=>z([Ne("--tw-contain-size"),Ne("--tw-contain-layout"),Ne("--tw-contain-paint"),Ne("--tw-contain-style")]);n("contain-none",[["contain","none"]]),n("contain-content",[["contain","content"]]),n("contain-strict",[["contain","strict"]]),n("contain-size",[t,["--tw-contain-size","size"],["contain",e]]),n("contain-inline-size",[t,["--tw-contain-size","inline-size"],["contain",e]]),n("contain-layout",[t,["--tw-contain-layout","layout"],["contain",e]]),n("contain-paint",[t,["--tw-contain-paint","paint"],["contain",e]]),n("contain-style",[t,["--tw-contain-style","style"],["contain",e]]),o("contain",{themeKeys:[],handle:e=>[y("contain",e)]})}n("forced-color-adjust-none",[["forced-color-adjust","none"]]),n("forced-color-adjust-auto",[["forced-color-adjust","auto"]]),n("leading-none",[()=>z([Ne("--tw-leading")]),["--tw-leading","1"],["line-height","1"]]),i("leading",["--leading","--spacing"],(e=>[z([Ne("--tw-leading")]),y("--tw-leading",e),y("line-height",e)])),o("tracking",{supportsNegative:!0,themeKeys:["--tracking"],handle:e=>[z([Ne("--tw-tracking")]),y("--tw-tracking",e),y("letter-spacing",e)]}),n("antialiased",[["-webkit-font-smoothing","antialiased"],["-moz-osx-font-smoothing","grayscale"]]),n("subpixel-antialiased",[["-webkit-font-smoothing","auto"],["-moz-osx-font-smoothing","auto"]]);{let e="var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)",t=()=>z([Ne("--tw-ordinal"),Ne("--tw-slashed-zero"),Ne("--tw-numeric-figure"),Ne("--tw-numeric-spacing"),Ne("--tw-numeric-fraction")]);n("normal-nums",[["font-variant-numeric","normal"]]),n("ordinal",[t,["--tw-ordinal","ordinal"],["font-variant-numeric",e]]),n("slashed-zero",[t,["--tw-slashed-zero","slashed-zero"],["font-variant-numeric",e]]),n("lining-nums",[t,["--tw-numeric-figure","lining-nums"],["font-variant-numeric",e]]),n("oldstyle-nums",[t,["--tw-numeric-figure","oldstyle-nums"],["font-variant-numeric",e]]),n("proportional-nums",[t,["--tw-numeric-spacing","proportional-nums"],["font-variant-numeric",e]]),n("tabular-nums",[t,["--tw-numeric-spacing","tabular-nums"],["font-variant-numeric",e]]),n("diagonal-fractions",[t,["--tw-numeric-fraction","diagonal-fractions"],["font-variant-numeric",e]]),n("stacked-fractions",[t,["--tw-numeric-fraction","stacked-fractions"],["font-variant-numeric",e]])}{let a=()=>z([Ne("--tw-outline-style","solid")]);t.static("outline-hidden",(()=>[y("--tw-outline-style","none"),y("outline-style","none"),k("@media","(forced-colors: active)",[y("outline","2px solid transparent"),y("outline-offset","2px")])])),n("outline-none",[["--tw-outline-style","none"],["outline-style","none"]]),n("outline-solid",[["--tw-outline-style","solid"],["outline-style","solid"]]),n("outline-dashed",[["--tw-outline-style","dashed"],["outline-style","dashed"]]),n("outline-dotted",[["--tw-outline-style","dotted"],["outline-style","dotted"]]),n("outline-double",[["--tw-outline-style","double"],["outline-style","double"]]),t.functional("outline",(t=>{if(null===t.value){if(t.modifier)return;let r=e.get(["--default-outline-width"])??"1px";return[a(),y("outline-style","var(--tw-outline-style)"),y("outline-width",r)]}if("arbitrary"===t.value.kind){let r=t.value.value;switch(t.value.dataType??ie(r,["color","length","number","percentage"])){case"length":case"number":case"percentage":return t.modifier?void 0:[a(),y("outline-style","var(--tw-outline-style)"),y("outline-width",r)];default:return r=We(r,t.modifier,e),null===r?void 0:[y("outline-color",r)]}}{let r=Ue(t,e,["--outline-color","--color"]);if(r)return[y("outline-color",r)]}{if(t.modifier)return;let r=e.resolve(t.value.value,["--outline-width"]);if(r)return[a(),y("outline-style","var(--tw-outline-style)"),y("outline-width",r)];if(ye(t.value.value))return[a(),y("outline-style","var(--tw-outline-style)"),y("outline-width",`${t.value.value}px`)]}})),r("outline",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--outline-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t)),hasDefaultValue:!0},{values:["0","1","2","4","8"],valueThemeKeys:["--outline-width"]}])),o("outline-offset",{supportsNegative:!0,themeKeys:["--outline-offset"],handleBareValue:({value:e})=>ye(e)?`${e}px`:null,handle:e=>[y("outline-offset",e)]}),r("outline-offset",(()=>[{supportsNegative:!0,values:["0","1","2","4","8"],valueThemeKeys:["--outline-offset"]}]))}o("opacity",{themeKeys:["--opacity"],handleBareValue:({value:e})=>ze(e)?`${e}%`:null,handle:e=>[y("opacity",e)]}),r("opacity",(()=>[{values:Array.from({length:21},((e,t)=>""+5*t)),valueThemeKeys:["--opacity"]}])),n("underline-offset-auto",[["text-underline-offset","auto"]]),o("underline-offset",{supportsNegative:!0,themeKeys:["--text-underline-offset"],handleBareValue:({value:e})=>ye(e)?`${e}px`:null,handle:e=>[y("text-underline-offset",e)]}),r("underline-offset",(()=>[{supportsNegative:!0,values:["0","1","2","4","8"],valueThemeKeys:["--text-underline-offset"]}])),t.functional("text",(t=>{if(t.value){if("arbitrary"===t.value.kind){let r=t.value.value;switch(t.value.dataType??ie(r,["color","length","percentage","absolute-size","relative-size"])){case"size":case"length":case"percentage":case"absolute-size":case"relative-size":if(t.modifier){let n="arbitrary"===t.modifier.kind?t.modifier.value:e.resolve(t.modifier.value,["--leading"]);if(!n&&$e(t.modifier.value)){let r=e.resolve(null,["--spacing"]);if(!r)return null;n=`calc(${r} * ${t.modifier.value})`}return!n&&"none"===t.modifier.value&&(n="1"),n?[y("font-size",r),y("line-height",n)]:null}return[y("font-size",r)];default:return r=We(r,t.modifier,e),null===r?void 0:[y("color",r)]}}{let r=Ue(t,e,["--text-color","--color"]);if(r)return[y("color",r)]}{let r=e.resolveWith(t.value.value,["--text"],["--line-height","--letter-spacing","--font-weight"]);if(r){let[n,o={}]=Array.isArray(r)?r:[r];if(t.modifier){let r="arbitrary"===t.modifier.kind?t.modifier.value:e.resolve(t.modifier.value,["--leading"]);if(!r&&$e(t.modifier.value)){let n=e.resolve(null,["--spacing"]);if(!n)return null;r=`calc(${n} * ${t.modifier.value})`}if(!r&&"none"===t.modifier.value&&(r="1"),!r)return null;let o=[y("font-size",n)];return r&&o.push(y("line-height",r)),o}return"string"==typeof o?[y("font-size",n),y("line-height",o)]:[y("font-size",n),y("line-height",o["--line-height"]?`var(--tw-leading, ${o["--line-height"]})`:void 0),y("letter-spacing",o["--letter-spacing"]?`var(--tw-tracking, ${o["--letter-spacing"]})`:void 0),y("font-weight",o["--font-weight"]?`var(--tw-font-weight, ${o["--font-weight"]})`:void 0)]}}}})),r("text",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--text-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:[],valueThemeKeys:["--text"],modifiers:[],modifierThemeKeys:["--leading"]}]));let T=()=>z([Ne("--tw-text-shadow-color"),Ne("--tw-text-shadow-alpha","100%","")]);n("text-shadow-initial",[T,["--tw-text-shadow-color","initial"]]),t.functional("text-shadow",(t=>{let r;if(t.modifier&&("arbitrary"===t.modifier.kind?r=t.modifier.value:ye(t.modifier.value)&&(r=`${t.modifier.value}%`)),!t.value){let t=e.get(["--text-shadow"]);return null===t?void 0:[T(),y("--tw-text-shadow-alpha",r),...Be("text-shadow",t,r,(e=>`var(--tw-text-shadow-color, ${e})`))]}if("arbitrary"===t.value.kind){let n=t.value.value;return"color"===(t.value.dataType??ie(n,["color"]))?(n=We(n,t.modifier,e),null===n?void 0:[T(),y("--tw-text-shadow-color",Oe(n,"var(--tw-text-shadow-alpha)"))]):[T(),y("--tw-text-shadow-alpha",r),...Be("text-shadow",n,r,(e=>`var(--tw-text-shadow-color, ${e})`))]}switch(t.value.value){case"none":return t.modifier?void 0:[T(),y("text-shadow","none")];case"inherit":return t.modifier?void 0:[T(),y("--tw-text-shadow-color","inherit")]}{let n=e.get([`--text-shadow-${t.value.value}`]);if(n)return[T(),y("--tw-text-shadow-alpha",r),...Be("text-shadow",n,r,(e=>`var(--tw-text-shadow-color, ${e})`))]}{let r=Ue(t,e,["--text-shadow-color","--color"]);if(r)return[T(),y("--tw-text-shadow-color",Oe(r,"var(--tw-text-shadow-alpha)"))]}})),r("text-shadow",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--text-shadow-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:["none"]},{valueThemeKeys:["--text-shadow"],modifiers:Array.from({length:21},((e,t)=>""+5*t)),hasDefaultValue:null!==e.get(["--text-shadow"])}]));{let o=function(e){return`var(--tw-ring-inset,) 0 0 0 calc(${e} + var(--tw-ring-offset-width)) var(--tw-ring-color, ${c})`},a=function(e){return`inset 0 0 0 ${e} var(--tw-inset-ring-color, currentcolor)`},i=["var(--tw-inset-shadow)","var(--tw-inset-ring-shadow)","var(--tw-ring-offset-shadow)","var(--tw-ring-shadow)","var(--tw-shadow)"].join(", "),l="0 0 #0000",s=()=>z([Ne("--tw-shadow",l),Ne("--tw-shadow-color"),Ne("--tw-shadow-alpha","100%",""),Ne("--tw-inset-shadow",l),Ne("--tw-inset-shadow-color"),Ne("--tw-inset-shadow-alpha","100%",""),Ne("--tw-ring-color"),Ne("--tw-ring-shadow",l),Ne("--tw-inset-ring-color"),Ne("--tw-inset-ring-shadow",l),Ne("--tw-ring-inset"),Ne("--tw-ring-offset-width","0px",""),Ne("--tw-ring-offset-color","#fff"),Ne("--tw-ring-offset-shadow",l)]);n("shadow-initial",[s,["--tw-shadow-color","initial"]]),t.functional("shadow",(t=>{let r;if(t.modifier&&("arbitrary"===t.modifier.kind?r=t.modifier.value:ye(t.modifier.value)&&(r=`${t.modifier.value}%`)),!t.value){let t=e.get(["--shadow"]);return null===t?void 0:[s(),y("--tw-shadow-alpha",r),...Be("--tw-shadow",t,r,(e=>`var(--tw-shadow-color, ${e})`)),y("box-shadow",i)]}if("arbitrary"===t.value.kind){let n=t.value.value;return"color"===(t.value.dataType??ie(n,["color"]))?(n=We(n,t.modifier,e),null===n?void 0:[s(),y("--tw-shadow-color",Oe(n,"var(--tw-shadow-alpha)"))]):[s(),y("--tw-shadow-alpha",r),...Be("--tw-shadow",n,r,(e=>`var(--tw-shadow-color, ${e})`)),y("box-shadow",i)]}switch(t.value.value){case"none":return t.modifier?void 0:[s(),y("--tw-shadow",l),y("box-shadow",i)];case"inherit":return t.modifier?void 0:[s(),y("--tw-shadow-color","inherit")]}{let n=e.get([`--shadow-${t.value.value}`]);if(n)return[s(),y("--tw-shadow-alpha",r),...Be("--tw-shadow",n,r,(e=>`var(--tw-shadow-color, ${e})`)),y("box-shadow",i)]}{let r=Ue(t,e,["--box-shadow-color","--color"]);if(r)return[s(),y("--tw-shadow-color",Oe(r,"var(--tw-shadow-alpha)"))]}})),r("shadow",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--box-shadow-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:["none"]},{valueThemeKeys:["--shadow"],modifiers:Array.from({length:21},((e,t)=>""+5*t)),hasDefaultValue:null!==e.get(["--shadow"])}])),n("inset-shadow-initial",[s,["--tw-inset-shadow-color","initial"]]),t.functional("inset-shadow",(t=>{let r;if(t.modifier&&("arbitrary"===t.modifier.kind?r=t.modifier.value:ye(t.modifier.value)&&(r=`${t.modifier.value}%`)),!t.value){let t=e.get(["--inset-shadow"]);return null===t?void 0:[s(),y("--tw-inset-shadow-alpha",r),...Be("--tw-inset-shadow",t,r,(e=>`var(--tw-inset-shadow-color, ${e})`)),y("box-shadow",i)]}if("arbitrary"===t.value.kind){let n=t.value.value;return"color"===(t.value.dataType??ie(n,["color"]))?(n=We(n,t.modifier,e),null===n?void 0:[s(),y("--tw-inset-shadow-color",Oe(n,"var(--tw-inset-shadow-alpha)"))]):[s(),y("--tw-inset-shadow-alpha",r),...Be("--tw-inset-shadow",n,r,(e=>`var(--tw-inset-shadow-color, ${e})`),"inset "),y("box-shadow",i)]}switch(t.value.value){case"none":return t.modifier?void 0:[s(),y("--tw-inset-shadow",l),y("box-shadow",i)];case"inherit":return t.modifier?void 0:[s(),y("--tw-inset-shadow-color","inherit")]}{let n=e.get([`--inset-shadow-${t.value.value}`]);if(n)return[s(),y("--tw-inset-shadow-alpha",r),...Be("--tw-inset-shadow",n,r,(e=>`var(--tw-inset-shadow-color, ${e})`)),y("box-shadow",i)]}{let r=Ue(t,e,["--box-shadow-color","--color"]);if(r)return[s(),y("--tw-inset-shadow-color",Oe(r,"var(--tw-inset-shadow-alpha)"))]}})),r("inset-shadow",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--box-shadow-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:["none"]},{valueThemeKeys:["--inset-shadow"],modifiers:Array.from({length:21},((e,t)=>""+5*t)),hasDefaultValue:null!==e.get(["--inset-shadow"])}])),n("ring-inset",[s,["--tw-ring-inset","inset"]]);let c=e.get(["--default-ring-color"])??"currentcolor";t.functional("ring",(t=>{if(!t.value){if(t.modifier)return;let r=e.get(["--default-ring-width"])??"1px";return[s(),y("--tw-ring-shadow",o(r)),y("box-shadow",i)]}if("arbitrary"===t.value.kind){let r=t.value.value;return"length"===(t.value.dataType??ie(r,["color","length"]))?t.modifier?void 0:[s(),y("--tw-ring-shadow",o(r)),y("box-shadow",i)]:(r=We(r,t.modifier,e),null===r?void 0:[y("--tw-ring-color",r)])}{let r=Ue(t,e,["--ring-color","--color"]);if(r)return[y("--tw-ring-color",r)]}{if(t.modifier)return;let r=e.resolve(t.value.value,["--ring-width"]);if(null===r&&ye(t.value.value)&&(r=`${t.value.value}px`),r)return[s(),y("--tw-ring-shadow",o(r)),y("box-shadow",i)]}})),r("ring",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--ring-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:["0","1","2","4","8"],valueThemeKeys:["--ring-width"],hasDefaultValue:!0}])),t.functional("inset-ring",(t=>{if(!t.value)return t.modifier?void 0:[s(),y("--tw-inset-ring-shadow",a("1px")),y("box-shadow",i)];if("arbitrary"===t.value.kind){let r=t.value.value;return"length"===(t.value.dataType??ie(r,["color","length"]))?t.modifier?void 0:[s(),y("--tw-inset-ring-shadow",a(r)),y("box-shadow",i)]:(r=We(r,t.modifier,e),null===r?void 0:[y("--tw-inset-ring-color",r)])}{let r=Ue(t,e,["--ring-color","--color"]);if(r)return[y("--tw-inset-ring-color",r)]}{if(t.modifier)return;let r=e.resolve(t.value.value,["--ring-width"]);if(null===r&&ye(t.value.value)&&(r=`${t.value.value}px`),r)return[s(),y("--tw-inset-ring-shadow",a(r)),y("box-shadow",i)]}})),r("inset-ring",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--ring-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:["0","1","2","4","8"],valueThemeKeys:["--ring-width"],hasDefaultValue:!0}]));let u="var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)";t.functional("ring-offset",(t=>{if(t.value){if("arbitrary"===t.value.kind){let r=t.value.value;return"length"===(t.value.dataType??ie(r,["color","length"]))?t.modifier?void 0:[y("--tw-ring-offset-width",r),y("--tw-ring-offset-shadow",u)]:(r=We(r,t.modifier,e),null===r?void 0:[y("--tw-ring-offset-color",r)])}{let r=e.resolve(t.value.value,["--ring-offset-width"]);if(r)return t.modifier?void 0:[y("--tw-ring-offset-width",r),y("--tw-ring-offset-shadow",u)];if(ye(t.value.value))return t.modifier?void 0:[y("--tw-ring-offset-width",`${t.value.value}px`),y("--tw-ring-offset-shadow",u)]}{let r=Ue(t,e,["--ring-offset-color","--color"]);if(r)return[y("--tw-ring-offset-color",r)]}}}))}return r("ring-offset",(()=>[{values:["current","inherit","transparent"],valueThemeKeys:["--ring-offset-color","--color"],modifiers:Array.from({length:21},((e,t)=>""+5*t))},{values:["0","1","2","4","8"],valueThemeKeys:["--ring-offset-width"]}])),t.functional("@container",(e=>{let t=null;if(null===e.value?t="inline-size":"arbitrary"===e.value.kind?t=e.value.value:"named"===e.value.kind&&"normal"===e.value.value&&(t="normal"),null!==t)return e.modifier?[y("container-type",t),y("container-name",e.modifier.value)]:[y("container-type",t)]})),r("@container",(()=>[{values:["normal"],valueThemeKeys:[],hasDefaultValue:!0}])),t}(e),r=function(e){let t=new Je;function r(e,r,{compounds:n}={}){n=n??Xe(r),t.static(e,(e=>{e.nodes=r.map((t=>b(t,e.nodes)))}),{compounds:n})}function n(e,t){return t.map((t=>{let r=R(t=t.trim()," ");return"not"===r[0]?r.slice(1).join(" "):"@container"===e?"("===r[0][0]?`not ${t}`:"not"===r[1]?`${r[0]} ${r.slice(2).join(" ")}`:`${r[0]} not ${r.slice(1).join(" ")}`:`not ${t}`}))}r("*",[":is(& > *)"],{compounds:0}),r("**",[":is(& *)"],{compounds:0});let o=["@media","@supports","@container"];function a(e){for(let t of o){if(t!==e.name)continue;let r=R(e.params,",");return r.length>1?null:(r=n(e.name,r),k(e.name,r.join(", ")))}return null}function i(e){return e.includes("::")?null:`&:not(${R(e,",").map((e=>e.replaceAll("&","*"))).join(", ")})`}t.compound("not",3,((e,t)=>{if("arbitrary"===t.variant.kind&&t.variant.relative||t.modifier)return null;let r=!1;return A([e],((t,{path:n})=>{if("rule"!==t.kind&&"at-rule"!==t.kind)return 0;if(t.nodes.length>0)return 0;let o=[],l=[];for(let e of n)"at-rule"===e.kind?o.push(e):"rule"===e.kind&&l.push(e);if(o.length>1)return 2;if(l.length>1)return 2;let s=[];for(let e of l){let t=i(e.selector);if(!t)return r=!1,2;s.push(w(t,[]))}for(let e of o){let t=a(e);if(!t)return r=!1,2;s.push(t)}return Object.assign(e,w("&",s)),r=!0,1})),"rule"===e.kind&&"&"===e.selector&&1===e.nodes.length&&Object.assign(e,e.nodes[0]),r?void 0:null})),t.suggest("not",(()=>Array.from(t.keys()).filter((e=>t.compoundsWith("not",e))))),t.compound("group",2,((t,r)=>{if("arbitrary"===r.variant.kind&&r.variant.relative)return null;let n=r.modifier?`:where(.${e.prefix?`${e.prefix}\\:`:""}group\\/${r.modifier.value})`:`:where(.${e.prefix?`${e.prefix}\\:`:""}group)`,o=!1;return A([t],((e,{path:t})=>{if("rule"!==e.kind)return 0;for(let e of t.slice(0,-1))if("rule"===e.kind)return o=!1,2;let r=e.selector.replaceAll("&",n);R(r,",").length>1&&(r=`:is(${r})`),e.selector=`&:is(${r} *)`,o=!0})),o?void 0:null})),t.suggest("group",(()=>Array.from(t.keys()).filter((e=>t.compoundsWith("group",e))))),t.compound("peer",2,((t,r)=>{if("arbitrary"===r.variant.kind&&r.variant.relative)return null;let n=r.modifier?`:where(.${e.prefix?`${e.prefix}\\:`:""}peer\\/${r.modifier.value})`:`:where(.${e.prefix?`${e.prefix}\\:`:""}peer)`,o=!1;return A([t],((e,{path:t})=>{if("rule"!==e.kind)return 0;for(let e of t.slice(0,-1))if("rule"===e.kind)return o=!1,2;let r=e.selector.replaceAll("&",n);R(r,",").length>1&&(r=`:is(${r})`),e.selector=`&:is(${r} ~ *)`,o=!0})),o?void 0:null})),t.suggest("peer",(()=>Array.from(t.keys()).filter((e=>t.compoundsWith("peer",e))))),r("first-letter",["&::first-letter"]),r("first-line",["&::first-line"]),r("marker",["& *::marker","&::marker","& *::-webkit-details-marker","&::-webkit-details-marker"]),r("selection",["& *::selection","&::selection"]),r("file",["&::file-selector-button"]),r("placeholder",["&::placeholder"]),r("backdrop",["&::backdrop"]),r("details-content",["&::details-content"]);{let e=function(){return z([k("@property","--tw-content",[y("syntax",'"*"'),y("initial-value",'""'),y("inherits","false")])])};t.static("before",(t=>{t.nodes=[w("&::before",[e(),y("content","var(--tw-content)"),...t.nodes])]}),{compounds:0}),t.static("after",(t=>{t.nodes=[w("&::after",[e(),y("content","var(--tw-content)"),...t.nodes])]}),{compounds:0})}r("first",["&:first-child"]),r("last",["&:last-child"]),r("only",["&:only-child"]),r("odd",["&:nth-child(odd)"]),r("even",["&:nth-child(even)"]),r("first-of-type",["&:first-of-type"]),r("last-of-type",["&:last-of-type"]),r("only-of-type",["&:only-of-type"]),r("visited",["&:visited"]),r("target",["&:target"]),r("open",["&:is([open], :popover-open, :open)"]),r("default",["&:default"]),r("checked",["&:checked"]),r("indeterminate",["&:indeterminate"]),r("placeholder-shown",["&:placeholder-shown"]),r("autofill",["&:autofill"]),r("optional",["&:optional"]),r("required",["&:required"]),r("valid",["&:valid"]),r("invalid",["&:invalid"]),r("user-valid",["&:user-valid"]),r("user-invalid",["&:user-invalid"]),r("in-range",["&:in-range"]),r("out-of-range",["&:out-of-range"]),r("read-only",["&:read-only"]),r("empty",["&:empty"]),r("focus-within",["&:focus-within"]),t.static("hover",(e=>{e.nodes=[w("&:hover",[k("@media","(hover: hover)",e.nodes)])]})),r("focus",["&:focus"]),r("focus-visible",["&:focus-visible"]),r("active",["&:active"]),r("enabled",["&:enabled"]),r("disabled",["&:disabled"]),r("inert",["&:is([inert], [inert] *)"]),t.compound("in",2,((e,t)=>{if(t.modifier)return null;let r=!1;return A([e],((e,{path:t})=>{if("rule"!==e.kind)return 0;for(let e of t.slice(0,-1))if("rule"===e.kind)return r=!1,2;e.selector=`:where(${e.selector.replaceAll("&","*")}) &`,r=!0})),r?void 0:null})),t.suggest("in",(()=>Array.from(t.keys()).filter((e=>t.compoundsWith("in",e))))),t.compound("has",2,((e,t)=>{if(t.modifier)return null;let r=!1;return A([e],((e,{path:t})=>{if("rule"!==e.kind)return 0;for(let e of t.slice(0,-1))if("rule"===e.kind)return r=!1,2;e.selector=`&:has(${e.selector.replaceAll("&","*")})`,r=!0})),r?void 0:null})),t.suggest("has",(()=>Array.from(t.keys()).filter((e=>t.compoundsWith("has",e))))),t.functional("aria",((e,t)=>{if(!t.value||t.modifier)return null;"arbitrary"===t.value.kind?e.nodes=[w(`&[aria-${Qe(t.value.value)}]`,e.nodes)]:e.nodes=[w(`&[aria-${t.value.value}="true"]`,e.nodes)]})),t.suggest("aria",(()=>["busy","checked","disabled","expanded","hidden","pressed","readonly","required","selected"])),t.functional("data",((e,t)=>{if(!t.value||t.modifier)return null;e.nodes=[w(`&[data-${Qe(t.value.value)}]`,e.nodes)]})),t.functional("nth",((e,t)=>{if(!t.value||t.modifier||"named"===t.value.kind&&!ye(t.value.value))return null;e.nodes=[w(`&:nth-child(${t.value.value})`,e.nodes)]})),t.functional("nth-last",((e,t)=>{if(!t.value||t.modifier||"named"===t.value.kind&&!ye(t.value.value))return null;e.nodes=[w(`&:nth-last-child(${t.value.value})`,e.nodes)]})),t.functional("nth-of-type",((e,t)=>{if(!t.value||t.modifier||"named"===t.value.kind&&!ye(t.value.value))return null;e.nodes=[w(`&:nth-of-type(${t.value.value})`,e.nodes)]})),t.functional("nth-last-of-type",((e,t)=>{if(!t.value||t.modifier||"named"===t.value.kind&&!ye(t.value.value))return null;e.nodes=[w(`&:nth-last-of-type(${t.value.value})`,e.nodes)]})),t.functional("supports",((e,t)=>{if(!t.value||t.modifier)return null;let r=t.value.value;if(null===r)return null;if(/^[\w-]*\s*\(/.test(r)){let t=r.replace(/\b(and|or|not)\b/g," $1 ");e.nodes=[k("@supports",t,e.nodes)]}else r.includes(":")||(r=`${r}: var(--tw)`),("("!==r[0]||")"!==r[r.length-1])&&(r=`(${r})`),e.nodes=[k("@supports",r,e.nodes)]}),{compounds:1}),r("motion-safe",["@media (prefers-reduced-motion: no-preference)"]),r("motion-reduce",["@media (prefers-reduced-motion: reduce)"]),r("contrast-more",["@media (prefers-contrast: more)"]),r("contrast-less",["@media (prefers-contrast: less)"]);{let r=function(e,t,r,n){if(e===t)return 0;let o=n.get(e);if(null===o)return"asc"===r?-1:1;let a=n.get(t);return null===a?"asc"===r?1:-1:re(o,a,r)};{let n=e.namespace("--breakpoint"),o=new c((t=>{switch(t.kind){case"static":return e.resolveValue(t.root,["--breakpoint"])??null;case"functional":{if(!t.value||t.modifier)return null;let r=null;return"arbitrary"===t.value.kind?r=t.value.value:"named"===t.value.kind&&(r=e.resolveValue(t.value.value,["--breakpoint"])),!r||r.includes("var(")?null:r}case"arbitrary":case"compound":return null}}));t.group((()=>{t.functional("max",((e,t)=>{if(t.modifier)return null;let r=o.get(t);if(null===r)return null;e.nodes=[k("@media",`(width < ${r})`,e.nodes)]}),{compounds:1})}),((e,t)=>r(e,t,"desc",o))),t.suggest("max",(()=>Array.from(n.keys()).filter((e=>null!==e)))),t.group((()=>{for(let[r,n]of e.namespace("--breakpoint"))null!==r&&t.static(r,(e=>{e.nodes=[k("@media",`(width >= ${n})`,e.nodes)]}),{compounds:1});t.functional("min",((e,t)=>{if(t.modifier)return null;let r=o.get(t);if(null===r)return null;e.nodes=[k("@media",`(width >= ${r})`,e.nodes)]}),{compounds:1})}),((e,t)=>r(e,t,"asc",o))),t.suggest("min",(()=>Array.from(n.keys()).filter((e=>null!==e))))}{let n=e.namespace("--container"),o=new c((t=>{switch(t.kind){case"functional":{if(null===t.value)return null;let r=null;return"arbitrary"===t.value.kind?r=t.value.value:"named"===t.value.kind&&(r=e.resolveValue(t.value.value,["--container"])),!r||r.includes("var(")?null:r}case"static":case"arbitrary":case"compound":return null}}));t.group((()=>{t.functional("@max",((e,t)=>{let r=o.get(t);if(null===r)return null;e.nodes=[k("@container",t.modifier?`${t.modifier.value} (width < ${r})`:`(width < ${r})`,e.nodes)]}),{compounds:1})}),((e,t)=>r(e,t,"desc",o))),t.suggest("@max",(()=>Array.from(n.keys()).filter((e=>null!==e)))),t.group((()=>{t.functional("@",((e,t)=>{let r=o.get(t);if(null===r)return null;e.nodes=[k("@container",t.modifier?`${t.modifier.value} (width >= ${r})`:`(width >= ${r})`,e.nodes)]}),{compounds:1}),t.functional("@min",((e,t)=>{let r=o.get(t);if(null===r)return null;e.nodes=[k("@container",t.modifier?`${t.modifier.value} (width >= ${r})`:`(width >= ${r})`,e.nodes)]}),{compounds:1})}),((e,t)=>r(e,t,"asc",o))),t.suggest("@min",(()=>Array.from(n.keys()).filter((e=>null!==e)))),t.suggest("@",(()=>Array.from(n.keys()).filter((e=>null!==e))))}}return r("portrait",["@media (orientation: portrait)"]),r("landscape",["@media (orientation: landscape)"]),r("ltr",['&:where(:dir(ltr), [dir="ltr"], [dir="ltr"] *)']),r("rtl",['&:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *)']),r("dark",["@media (prefers-color-scheme: dark)"]),r("starting",["@starting-style"]),r("print",["@media print"]),r("forced-colors",["@media (forced-colors: active)"]),r("inverted-colors",["@media (inverted-colors: inverted)"]),r("pointer-none",["@media (pointer: none)"]),r("pointer-coarse",["@media (pointer: coarse)"]),r("pointer-fine",["@media (pointer: fine)"]),r("any-pointer-none",["@media (any-pointer: none)"]),r("any-pointer-coarse",["@media (any-pointer: coarse)"]),r("any-pointer-fine",["@media (any-pointer: fine)"]),r("noscript",["@media (scripting: none)"]),t}(e),n=new c((e=>function(e,t){if("["===e[0]&&"]"===e[e.length-1]){if("@"===e[1]&&e.includes("&"))return null;let t=W(e.slice(1,-1));if(!B(t)||0===t.length||0===t.trim().length)return null;let r=">"===t[0]||"+"===t[0]||"~"===t[0];return!r&&"@"!==t[0]&&!t.includes("&")&&(t=`&:is(${t})`),{kind:"arbitrary",selector:t,relative:r}}{let[r,n=null,o]=R(e,"/");if(o)return null;let a=P(r,(e=>t.variants.has(e)));for(let[e,r]of a)switch(t.variants.kind(e)){case"static":return null!==r||null!==n?null:{kind:"static",root:e};case"functional":{let t=null===n?null:I(n);if(null!==n&&null===t)return null;if(null===r)return{kind:"functional",root:e,modifier:t,value:null};if("]"===r[r.length-1]){if("["!==r[0])continue;let n=W(r.slice(1,-1));return B(n)&&0!==n.length&&0!==n.trim().length?{kind:"functional",root:e,modifier:t,value:{kind:"arbitrary",value:n}}:null}if(")"===r[r.length-1]){if("("!==r[0])continue;let n=W(r.slice(1,-1));return B(n)&&0!==n.length&&0!==n.trim().length&&"-"===n[0]&&"-"===n[1]?{kind:"functional",root:e,modifier:t,value:{kind:"arbitrary",value:`var(${n})`}}:null}return{kind:"functional",root:e,modifier:t,value:{kind:"named",value:r}}}case"compound":{if(null===r)return null;let o=t.parseVariant(r);if(null===o||!t.variants.compoundsWith(e,o))return null;let a=null===n?null:I(n);return null!==n&&null===a?null:{kind:"compound",root:e,modifier:a,variant:o}}}}return null}(e,s))),a=new c((e=>Array.from(function*(e,t){let r=R(e,":");if(t.theme.prefix){if(1===r.length||r[0]!==t.theme.prefix)return null;r.shift()}let n=r.pop(),o=[];for(let e=r.length-1;e>=0;--e){let n=t.parseVariant(r[e]);if(null===n)return;o.push(n)}let a=!1;"!"===n[n.length-1]?(a=!0,n=n.slice(0,-1)):"!"===n[0]&&(a=!0,n=n.slice(1)),t.utilities.has(n,"static")&&!n.includes("[")&&(yield{kind:"static",root:n,variants:o,important:a,raw:e});let[i,l=null,s]=R(n,"/");if(s)return;let c,u=null===l?null:I(l);if(null===l||null!==u)if("["!==i[0]){if("]"===i[i.length-1]){let e=i.indexOf("-[");if(-1===e)return;let r=i.slice(0,e);if(!t.utilities.has(r,"functional"))return;c=[[r,i.slice(e+1)]]}else if(")"===i[i.length-1]){let e=i.indexOf("-(");if(-1===e)return;let r=i.slice(0,e);if(!t.utilities.has(r,"functional"))return;let n=i.slice(e+2,-1),o=R(n,":"),a=null;if(2===o.length&&(a=o[0],n=o[1]),"-"!==n[0]||"-"!==n[1]||!B(n))return;c=[[r,null===a?`[var(${n})]`:`[${a}:var(${n})]`]]}else c=P(i,(e=>t.utilities.has(e,"functional")));for(let[t,r]of c){let n={kind:"functional",root:t,modifier:u,value:null,variants:o,important:a,raw:e};if(null!==r){{let e=r.indexOf("[");if(-1!==e){if("]"!==r[r.length-1])return;let t=W(r.slice(e+1,-1));if(!B(t))continue;let o="";for(let e=0;e=97&&r<=122))break}if(0===t.length||0===t.trim().length)continue;n.value={kind:"arbitrary",dataType:o||null,value:t}}else{let e=null===l||"arbitrary"===n.modifier?.kind?null:`${r}/${l}`;n.value={kind:"named",value:r,fraction:e}}}yield n}else yield n}}else{if("]"!==i[i.length-1])return;let t=i.charCodeAt(1);if(45!==t&&!(t>=97&&t<=122))return;i=i.slice(1,-1);let r=i.indexOf(":");if(-1===r||0===r||r===i.length-1)return;let n=i.slice(0,r),l=W(i.slice(r+1));if(!B(l))return;yield{kind:"arbitrary",property:n,value:l,modifier:u,variants:o,important:a,raw:e}}}(e,s)))),i=new c((e=>{let t=function(e,t){let r=function(e,t){if("arbitrary"===e.kind){let r=e.value;return e.modifier&&(r=We(r,e.modifier,t.theme)),null===r?[]:[[y(e.property,r)]]}let r=t.utilities.get(e.root)??[],n=[],o=r.filter((e=>!at(e)));for(let t of o){if(t.kind!==e.kind)continue;let r=t.compileFn(e);if(void 0!==r){if(null===r)return n;n.push(r)}}if(n.length>0)return n;let a=r.filter((e=>at(e)));for(let t of a){if(t.kind!==e.kind)continue;let r=t.compileFn(e);if(void 0!==r){if(null===r)return n;n.push(r)}}return n}(e,t);if(0===r.length)return[];let n=[],a=`.${o(e.raw)}`;for(let o of r){let r=lt(o);(e.important||t.important)&&it(o);let i={kind:"rule",selector:a,nodes:o};for(let r of e.variants)if(null===ot(i,r,t.variants))return[];n.push({node:i,propertySort:r})}return n}(e,s);try{Pe(t.map((({node:e})=>e)),s)}catch{return[]}return t})),l=new c((t=>{for(let r of g(t))e.markUsedVariable(r)})),s={theme:e,utilities:t,variants:r,invalidCandidates:new Set,important:!1,candidatesToCss(e){let t=[];for(let r of e){let e=!1,{astNodes:n}=nt([r],this,{onInvalidCandidate(){e=!0}});n=C(n,s,0),0===n.length||e?t.push(null):t.push(T(n))}return t},getClassOrder(e){return function(e,t){let{astNodes:r,nodeSorting:n}=nt(Array.from(t),e),o=new Map(t.map((e=>[e,null]))),a=0n;for(let e of r){let t=n.get(e)?.candidate;t&&o.set(t,o.get(t)??a++)}return t.map((e=>[e,o.get(e)??null]))}(this,e)},getClassList(){return Ye(this)},getVariants(){return function(e){let t=[];for(let[r,n]of e.variants.entries()){let o=function({value:t,modifier:n}={}){let o=r;t&&(o+=a?`-${t}`:t),n&&(o+=`/${n}`);let i=e.parseVariant(o);if(!i)return[];let l=w(".__placeholder__",[]);if(null===ot(l,i,e.variants))return[];let s=[];return j(l.nodes,((e,{path:t})=>{if("rule"!==e.kind&&"at-rule"!==e.kind||e.nodes.length>0)return;t.sort(((e,t)=>{let r="at-rule"===e.kind,n="at-rule"===t.kind;return r&&!n?-1:!r&&n?1:0}));let r=t.flatMap((e=>"rule"===e.kind?"&"===e.selector?[]:[e.selector]:"at-rule"===e.kind?[`${e.name} ${e.params}`]:[])),n="";for(let e=r.length-1;e>=0;e--)n=""===n?r[e]:`${r[e]} { ${n} }`;s.push(n)})),s};if("arbitrary"===n.kind)continue;let a="@"!==r,i=e.variants.getCompletions(r);switch(n.kind){case"static":t.push({name:r,values:i,isArbitrary:!1,hasDash:a,selectors:o});break;case"functional":case"compound":t.push({name:r,values:i,isArbitrary:!0,hasDash:a,selectors:o})}}return t}(this)},parseCandidate:e=>a.get(e),parseVariant:e=>n.get(e),compileAstNodes:e=>i.get(e),printCandidate:e=>function(e,t){let r=[];for(let e of t.variants)r.unshift(H(e));e.theme.prefix&&r.unshift(e.theme.prefix);let n="";if("static"===t.kind&&(n+=t.root),"functional"===t.kind&&(n+=t.root,t.value))if("arbitrary"===t.value.kind){if(null!==t.value){let e=Q(t.value.value),r=e?t.value.value.slice(4,-1):t.value.value,[o,a]=e?["(",")"]:["[","]"];t.value.dataType?n+=`-${o}${t.value.dataType}:${Y(r)}${a}`:n+=`-${o}${Y(r)}${a}`}}else"named"===t.value.kind&&(n+=`-${t.value.value}`);return"arbitrary"===t.kind&&(n+=`[${t.property}:${Y(t.value)}]`),("arbitrary"===t.kind||"functional"===t.kind)&&(n+=q(t.modifier)),t.important&&(n+="!"),r.push(n),r.join(":")}(s,e),printVariant:e=>H(e),getVariantOrder(){let e=Array.from(n.values());e.sort(((e,t)=>this.variants.compare(e,t)));let t,r=new Map,o=0;for(let n of e)null!==n&&(void 0!==t&&0!==this.variants.compare(t,n)&&o++,r.set(n,o),t=n);return r},resolveThemeValue(t,r=!0){let n=t.lastIndexOf("/"),o=null;-1!==n&&(o=t.slice(n+1).trim(),t=t.slice(0,n).trim());let a=e.resolve(null,[t],r?1:0)??void 0;return o&&a?Oe(a,o):a},trackUsedVariables(e){l.get(e)}};return s}var rt=["container-type","pointer-events","visibility","position","inset","inset-inline","inset-block","inset-inline-start","inset-inline-end","top","right","bottom","left","isolation","z-index","order","grid-column","grid-column-start","grid-column-end","grid-row","grid-row-start","grid-row-end","float","clear","--tw-container-component","margin","margin-inline","margin-block","margin-inline-start","margin-inline-end","margin-top","margin-right","margin-bottom","margin-left","box-sizing","display","field-sizing","aspect-ratio","height","max-height","min-height","width","max-width","min-width","flex","flex-shrink","flex-grow","flex-basis","table-layout","caption-side","border-collapse","border-spacing","transform-origin","translate","--tw-translate-x","--tw-translate-y","--tw-translate-z","scale","--tw-scale-x","--tw-scale-y","--tw-scale-z","rotate","--tw-rotate-x","--tw-rotate-y","--tw-rotate-z","--tw-skew-x","--tw-skew-y","transform","animation","cursor","touch-action","--tw-pan-x","--tw-pan-y","--tw-pinch-zoom","resize","scroll-snap-type","--tw-scroll-snap-strictness","scroll-snap-align","scroll-snap-stop","scroll-margin","scroll-margin-inline","scroll-margin-block","scroll-margin-inline-start","scroll-margin-inline-end","scroll-margin-top","scroll-margin-right","scroll-margin-bottom","scroll-margin-left","scroll-padding","scroll-padding-inline","scroll-padding-block","scroll-padding-inline-start","scroll-padding-inline-end","scroll-padding-top","scroll-padding-right","scroll-padding-bottom","scroll-padding-left","list-style-position","list-style-type","list-style-image","appearance","columns","break-before","break-inside","break-after","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-template-columns","grid-template-rows","flex-direction","flex-wrap","place-content","place-items","align-content","align-items","justify-content","justify-items","gap","column-gap","row-gap","--tw-space-x-reverse","--tw-space-y-reverse","divide-x-width","divide-y-width","--tw-divide-y-reverse","divide-style","divide-color","place-self","align-self","justify-self","overflow","overflow-x","overflow-y","overscroll-behavior","overscroll-behavior-x","overscroll-behavior-y","scroll-behavior","border-radius","border-start-radius","border-end-radius","border-top-radius","border-right-radius","border-bottom-radius","border-left-radius","border-start-start-radius","border-start-end-radius","border-end-end-radius","border-end-start-radius","border-top-left-radius","border-top-right-radius","border-bottom-right-radius","border-bottom-left-radius","border-width","border-inline-width","border-block-width","border-inline-start-width","border-inline-end-width","border-top-width","border-right-width","border-bottom-width","border-left-width","border-style","border-inline-style","border-block-style","border-inline-start-style","border-inline-end-style","border-top-style","border-right-style","border-bottom-style","border-left-style","border-color","border-inline-color","border-block-color","border-inline-start-color","border-inline-end-color","border-top-color","border-right-color","border-bottom-color","border-left-color","background-color","background-image","--tw-gradient-position","--tw-gradient-stops","--tw-gradient-via-stops","--tw-gradient-from","--tw-gradient-from-position","--tw-gradient-via","--tw-gradient-via-position","--tw-gradient-to","--tw-gradient-to-position","mask-image","--tw-mask-top","--tw-mask-top-from-color","--tw-mask-top-from-position","--tw-mask-top-to-color","--tw-mask-top-to-position","--tw-mask-right","--tw-mask-right-from-color","--tw-mask-right-from-position","--tw-mask-right-to-color","--tw-mask-right-to-position","--tw-mask-bottom","--tw-mask-bottom-from-color","--tw-mask-bottom-from-position","--tw-mask-bottom-to-color","--tw-mask-bottom-to-position","--tw-mask-left","--tw-mask-left-from-color","--tw-mask-left-from-position","--tw-mask-left-to-color","--tw-mask-left-to-position","--tw-mask-linear","--tw-mask-linear-position","--tw-mask-linear-from-color","--tw-mask-linear-from-position","--tw-mask-linear-to-color","--tw-mask-linear-to-position","--tw-mask-radial","--tw-mask-radial-shape","--tw-mask-radial-size","--tw-mask-radial-position","--tw-mask-radial-from-color","--tw-mask-radial-from-position","--tw-mask-radial-to-color","--tw-mask-radial-to-position","--tw-mask-conic","--tw-mask-conic-position","--tw-mask-conic-from-color","--tw-mask-conic-from-position","--tw-mask-conic-to-color","--tw-mask-conic-to-position","box-decoration-break","background-size","background-attachment","background-clip","background-position","background-repeat","background-origin","mask-composite","mask-mode","mask-type","mask-size","mask-clip","mask-position","mask-repeat","mask-origin","fill","stroke","stroke-width","object-fit","object-position","padding","padding-inline","padding-block","padding-inline-start","padding-inline-end","padding-top","padding-right","padding-bottom","padding-left","text-align","text-indent","vertical-align","font-family","font-size","line-height","font-weight","letter-spacing","text-wrap","overflow-wrap","word-break","text-overflow","hyphens","white-space","color","text-transform","font-style","font-stretch","font-variant-numeric","text-decoration-line","text-decoration-color","text-decoration-style","text-decoration-thickness","text-underline-offset","-webkit-font-smoothing","placeholder-color","caret-color","accent-color","color-scheme","opacity","background-blend-mode","mix-blend-mode","box-shadow","--tw-shadow","--tw-shadow-color","--tw-ring-shadow","--tw-ring-color","--tw-inset-shadow","--tw-inset-shadow-color","--tw-inset-ring-shadow","--tw-inset-ring-color","--tw-ring-offset-width","--tw-ring-offset-color","outline","outline-width","outline-offset","outline-color","--tw-blur","--tw-brightness","--tw-contrast","--tw-drop-shadow","--tw-grayscale","--tw-hue-rotate","--tw-invert","--tw-saturate","--tw-sepia","filter","--tw-backdrop-blur","--tw-backdrop-brightness","--tw-backdrop-contrast","--tw-backdrop-grayscale","--tw-backdrop-hue-rotate","--tw-backdrop-invert","--tw-backdrop-opacity","--tw-backdrop-saturate","--tw-backdrop-sepia","backdrop-filter","transition-property","transition-behavior","transition-delay","transition-duration","transition-timing-function","will-change","contain","content","forced-color-adjust"];function nt(e,t,{onInvalidCandidate:r}={}){let n=new Map,o=[],a=new Map;for(let n of e){if(t.invalidCandidates.has(n)){r?.(n);continue}let e=t.parseCandidate(n);0!==e.length?a.set(n,e):r?.(n)}let i=t.getVariantOrder();for(let[e,l]of a){let a=!1;for(let r of l){let l=t.compileAstNodes(r);if(0!==l.length){a=!0;for(let{node:t,propertySort:a}of l){let l=0n;for(let e of r.variants)l|=1n<{let r=n.get(e),o=n.get(t);if(r.variants-o.variants!==0n)return Number(r.variants-o.variants);let a=0;for(;a1)return null;for(let e of a.nodes)if("rule"!==e.kind&&"at-rule"!==e.kind||null===o(e,t))return null;return A(a.nodes,(t=>{if(("rule"===t.kind||"at-rule"===t.kind)&&t.nodes.length<=0)return t.nodes=e.nodes,1})),void(e.nodes=a.nodes)}return null===o(e,t)?null:void 0}function at(e){let t=e.options?.types??[];return t.length>1&&t.includes("any")}function it(e){for(let t of e)"at-root"!==t.kind&&("declaration"===t.kind?t.important=!0:("rule"===t.kind||"at-rule"===t.kind)&&it(t.nodes))}function lt(e){let t=new Set,r=0,n=e.slice(),o=!1;for(;n.length>0;){let e=n.shift();if("declaration"===e.kind){if(void 0===e.value||(r++,o))continue;if("--tw-sort"===e.property){let r=rt.indexOf(e.value??"");if(-1!==r){t.add(r),o=!0;continue}}let n=rt.indexOf(e.property);-1!==n&&t.add(n)}else if("rule"===e.kind||"at-rule"===e.kind)for(let t of e.nodes)n.push(t)}return{order:Array.from(t).sort(((e,t)=>e-t)),count:r}}function st(e,t){let r=0,n=b("&",e),o=new Set,a=new c((()=>new Set)),i=new c((()=>new Set));A([n],((e,{parent:n,path:l})=>{if("at-rule"===e.kind){if("@keyframes"===e.name)return A(e.nodes,(e=>{if("at-rule"===e.kind&&"@apply"===e.name)throw new Error("You cannot use `@apply` inside `@keyframes`.")})),1;if("@utility"===e.name){let r=e.params.replace(/-\*$/,"");return i.get(r).add(e),void A(e.nodes,(r=>{if("at-rule"===r.kind&&"@apply"===r.name){o.add(e);for(let n of ct(r,t))a.get(e).add(n)}}))}if("@apply"===e.name){if(null===n)return;r|=1,o.add(n);for(let r of ct(e,t))for(let t of l)t!==e&&o.has(t)&&a.get(t).add(r)}}}));let l=new Set,s=[],u=new Set;function d(e,r=[]){if(!l.has(e)){if(u.has(e)){let n=r[(r.indexOf(e)+1)%r.length];throw"at-rule"===e.kind&&"@utility"===e.name&&"at-rule"===n.kind&&"@utility"===n.name&&A(e.nodes,(e=>{if("at-rule"!==e.kind||"@apply"!==e.name)return;let r=e.params.split(/\s+/g);for(let e of r)for(let r of t.parseCandidate(e))switch(r.kind){case"arbitrary":break;case"static":case"functional":if(n.params.replace(/-\*$/,"")===r.root)throw new Error(`You cannot \`@apply\` the \`${e}\` utility here because it creates a circular dependency.`)}})),new Error(`Circular dependency detected:\n\n${T([e])}\nRelies on:\n\n${T([n])}`)}u.add(e);for(let t of a.get(e))for(let n of i.get(t))r.push(e),d(n,r),r.pop();l.add(e),u.delete(e),s.push(e)}}for(let e of o)d(e);for(let e of s)"nodes"in e&&A(e.nodes,((e,{replaceWith:r})=>{if("at-rule"!==e.kind||"@apply"!==e.name)return;let n=e.params.split(/(\s+)/g),o={},a=0;for(let[e,t]of n.entries())e%2==0&&(o[t]=a),a+=t.length;{let n=nt(Object.keys(o),t,{onInvalidCandidate:e=>{throw new Error(`Cannot apply unknown utility class: ${e}`)}}),a=e.src,i=n.astNodes.map((e=>{let t=n.nodeSorting.get(e)?.candidate,r=t?o[t]:void 0;if(e=structuredClone(e),!a||!t||void 0===r)return A([e],(e=>{e.src=a})),e;let i=[a[0],a[1],a[2]];return i[1]+=7+r,i[2]=i[1]+t.length,A([e],(e=>{e.src=i})),e})),l=[];for(let e of i)if("rule"===e.kind)for(let t of e.nodes)l.push(t);else l.push(e);r(l)}}));return r}function*ct(e,t){for(let r of e.params.split(/\s+/g))for(let e of t.parseCandidate(r))switch(e.kind){case"arbitrary":break;case"static":case"functional":yield e.root}}async function ut(e,r,n,o=0,a=!1){let i=0,l=[];return A(e,((e,{replaceWith:s})=>{if("at-rule"===e.kind&&("@import"===e.name||"@reference"===e.name)){let c=function(e){let t,r=null,n=null,o=null;for(let a=0;a{if(o>100)throw new Error(`Exceeded maximum recursion depth while resolving \`${u}\` in \`${r}\`)`);let i=await n(u,r),l=t(i.content,{from:a?i.path:void 0});await ut(l,i.base,n,o+1,a),g.nodes=function(e,t,r,n,o){let a=t;if(null!==r){let t=k("@layer",r,a);t.src=e.src,a=[t]}if(null!==n){let t=k("@media",n,a);t.src=e.src,a=[t]}if(null!==o){let t=k("@supports","("===o[0]?o:`(${o})`,a);t.src=e.src,a=[t]}return a}(e,[$({base:i.base},l)],d,f,p)})()),s(g),1}})),l.length>0&&await Promise.all(l),i}function dt(e,t=null){return Array.isArray(e)&&2===e.length&&"object"==typeof e[1]&&null!==typeof e[1]?t?e[1][t]??null:e[0]:Array.isArray(e)&&null===t?e.join(", "):"string"==typeof e&&null===t?e:null}function ft(e,{theme:t},r){for(let t of r){let r=ht([t]);r&&e.theme.clearNamespace(`--${r}`,4)}for(let[r,n]of function(e){let t=[];return mt(e,[],((e,r)=>{if(function(e){return"number"==typeof e||"string"==typeof e}(e))return t.push([r,e]),1;if(function(e){if(!Array.isArray(e)||2!==e.length||"string"!=typeof e[0]&&"number"!=typeof e[0]||void 0===e[1]||null===e[1]||"object"!=typeof e[1])return!1;for(let t of Reflect.ownKeys(e[1]))if("string"!=typeof t||"string"!=typeof e[1][t]&&"number"!=typeof e[1][t])return!1;return!0}(e)){t.push([r,e[0]]);for(let n of Reflect.ownKeys(e[1]))t.push([[...r,`-${n}`],e[1][n]]);return 1}return Array.isArray(e)&&e.every((e=>"string"==typeof e))?("fontSize"===r[0]?(t.push([r,e[0]]),e.length>=2&&t.push([[...r,"-line-height"],e[1]])):t.push([r,e.join(", ")]),1):void 0})),t}(t)){if("string"!=typeof n&&"number"!=typeof n)continue;if("string"==typeof n&&(n=n.replace(//g,"1")),"opacity"===r[0]&&("number"==typeof n||"string"==typeof n)){let e="string"==typeof n?parseFloat(n):n;e>=0&&e<=1&&(n=100*e+"%")}let t=ht(r);t&&e.theme.add(`--${t}`,""+n,7)}if(Object.hasOwn(t,"fontFamily")){let r=5;{let n=dt(t.fontFamily.sans);n&&e.theme.hasDefault("--font-sans")&&(e.theme.add("--default-font-family",n,r),e.theme.add("--default-font-feature-settings",dt(t.fontFamily.sans,"fontFeatureSettings")??"normal",r),e.theme.add("--default-font-variation-settings",dt(t.fontFamily.sans,"fontVariationSettings")??"normal",r))}{let n=dt(t.fontFamily.mono);n&&e.theme.hasDefault("--font-mono")&&(e.theme.add("--default-mono-font-family",n,r),e.theme.add("--default-mono-font-feature-settings",dt(t.fontFamily.mono,"fontFeatureSettings")??"normal",r),e.theme.add("--default-mono-font-variation-settings",dt(t.fontFamily.mono,"fontVariationSettings")??"normal",r))}}return t}var pt=/^[a-zA-Z0-9-_%/\.]+$/;function ht(e){if("container"===e[0])return null;"animation"===(e=structuredClone(e))[0]&&(e[0]="animate"),"aspectRatio"===e[0]&&(e[0]="aspect"),"borderRadius"===e[0]&&(e[0]="radius"),"boxShadow"===e[0]&&(e[0]="shadow"),"colors"===e[0]&&(e[0]="color"),"containers"===e[0]&&(e[0]="container"),"fontFamily"===e[0]&&(e[0]="font"),"fontSize"===e[0]&&(e[0]="text"),"letterSpacing"===e[0]&&(e[0]="tracking"),"lineHeight"===e[0]&&(e[0]="leading"),"maxWidth"===e[0]&&(e[0]="container"),"screens"===e[0]&&(e[0]="breakpoint"),"transitionTimingFunction"===e[0]&&(e[0]="ease");for(let t of e)if(!pt.test(t))return null;return e.map(((e,t,r)=>"1"===e&&t!==r.length-1?"":e)).map((e=>e.replaceAll(".","_").replace(/([a-z])([A-Z])/g,((e,t,r)=>`${t}-${r.toLowerCase()}`)))).filter(((t,r)=>"DEFAULT"!==t||r!==e.length-1)).join("-")}function mt(e,t=[],r){for(let n of Reflect.ownKeys(e)){let o=e[n];if(null==o)continue;let a=[...t,n],i=r(o,a)??0;if(1!==i){if(2===i)return 2;if((Array.isArray(o)||"object"==typeof o)&&2===mt(o,a,r))return 2}}}function gt(e){let t=[];for(let r of R(e,".")){if(!r.includes("[")){t.push(r);continue}let e=0;for(;;){let n=r.indexOf("[",e),o=r.indexOf("]",n);if(-1===n||-1===o)break;n>e&&t.push(r.slice(e,n)),t.push(r.slice(n+1,o)),e=o+1}e<=r.length-1&&t.push(r.slice(e))}return t}function vt(e){if("[object Object]"!==Object.prototype.toString.call(e))return!1;let t=Object.getPrototypeOf(e);return null===t||null===Object.getPrototypeOf(t)}function wt(e,t,r,n=[]){for(let o of t)if(null!=o)for(let t of Reflect.ownKeys(o)){n.push(t);let a=r(e[t],o[t],n);void 0!==a?e[t]=a:vt(e[t])&&vt(o[t])?e[t]=wt({},[e[t],o[t]],r,n):e[t]=o[t],n.pop()}return e}function kt(e,t,r){return function(n,o){let i=n.lastIndexOf("/"),l=null;-1!==i&&(l=n.slice(i+1).trim(),n=n.slice(0,i).trim());let s=(()=>{let o=gt(n),[i,l]=function(e,t){if(1===t.length&&t[0].startsWith("--"))return[e.get([t[0]]),e.getOptions(t[0])];let r=ht(t),n=new Map,o=new c((()=>new Map)),a=e.namespace(`--${r}`);if(0===a.size)return[null,0];let i=new Map;for(let[t,l]of a){if(!t||!t.includes("--")){n.set(t,l),i.set(t,e.getOptions(t?`--${r}-${t}`:`--${r}`));continue}let a=t.indexOf("--"),s=t.slice(0,a),c=t.slice(a+2);c=c.replace(/-([a-z])/g,((e,t)=>t.toUpperCase())),o.get(""===s?null:s).set(c,[l,e.getOptions(`--${r}${t}`)])}let l=e.getOptions(`--${r}`);for(let[e,t]of o){let r=n.get(e);if("string"!=typeof r)continue;let o={},a={};for(let[e,[r,n]]of t)o[e]=r,a[e]=n;n.set(e,[r,o]),i.set(e,[l,a])}let s={},u={};for(let[e,t]of n)yt(s,[e??"DEFAULT"],t);for(let[e,t]of i)yt(u,[e??"DEFAULT"],t);return"DEFAULT"===t[t.length-1]?[s?.DEFAULT??null,u.DEFAULT??0]:"DEFAULT"in s&&1===Object.keys(s).length?[s.DEFAULT,u.DEFAULT??0]:(s.__CSS_VALUES__=u,[s,u])}(e.theme,o),s=r(bt(t()??{},o)??null);if("string"==typeof s&&(s=s.replace("","1")),"object"!=typeof i)return"object"!=typeof l&&4&l?s??i:i;if(null!==s&&"object"==typeof s&&!Array.isArray(s)){let e=wt({},[s],((e,t)=>t));if(null===i&&Object.hasOwn(s,"__CSS_VALUES__")){let t={};for(let r in s.__CSS_VALUES__)t[r]=s[r],delete e[r];i=t}for(let t in i)"__CSS_VALUES__"!==t&&(4&s?.__CSS_VALUES__?.[t]&&void 0!==bt(e,t.split("-"))||(e[a(t)]=i[t]));return e}if(Array.isArray(i)&&Array.isArray(l)&&Array.isArray(s)){let e=i[0],t=i[1];4&l[0]&&(e=s[0]??e);for(let e of Object.keys(t))4&l[1][e]&&(t[e]=s[1][e]??t[e]);return[e,t]}return i??s})();return l&&"string"==typeof s&&(s=Oe(s,l)),s??o}}function bt(e,t){for(let r=0;r0){let e=zt(a);o?o.nodes.push(e):r.push(e),a=""}let n=i,l=i+1;for(;l0){let t=zt(a);e.nodes.push(t),a=""}o=n.length>0?n[n.length-1]:null;break}case 46:case 58:case 35:if(a.length>0){let e=zt(a);o?o.nodes.push(e):r.push(e)}a=String.fromCharCode(l);break;case 91:{if(a.length>0){let e=zt(a);o?o.nodes.push(e):r.push(e)}a="";let n=i,l=0;for(let r=i+1;r0&&r.push(zt(a)),r}var Kt=/^[a-z@][a-zA-Z0-9/%._-]*$/;function Et({designSystem:e,ast:t,resolvedConfig:r,featuresRef:n,referenceMode:o}){let a={addBase(r){if(o)return;let a=Vt(r);n.current|=Pe(a,e),t.push(k("@layer","base",a))},addVariant(t,r){if(!Ge.test(t))throw new Error(`\`addVariant('${t}')\` defines an invalid variant name. Variants should only contain alphanumeric, dashes or underscore characters.`);if("string"==typeof r){if(r.includes(":merge("))return}else if(Array.isArray(r)){if(r.some((e=>e.includes(":merge("))))return}else if("object"==typeof r){let e=function(t,r){return Object.entries(t).some((([t,n])=>t.includes(r)||"object"==typeof n&&e(n,r)))};if(e(r,":merge("))return}"string"==typeof r||Array.isArray(r)?e.variants.static(t,(e=>{e.nodes=Nt(r,e.nodes)}),{compounds:Xe("string"==typeof r?[r]:r)}):"object"==typeof r&&e.variants.fromAst(t,Vt(r))},matchVariant(t,r,n){function o(e,t,n){return Nt(r(e,{modifier:t?.value??null}),n)}try{let e=r("a",{modifier:null});if("string"==typeof e&&e.includes(":merge("))return;if(Array.isArray(e)&&e.some((e=>e.includes(":merge("))))return}catch{}let a=Object.keys(n?.values??{});e.variants.group((()=>{e.variants.functional(t,((e,t)=>{if(!t.value)return n?.values&&"DEFAULT"in n.values?void(e.nodes=o(n.values.DEFAULT,t.modifier,e.nodes)):null;if("arbitrary"===t.value.kind)e.nodes=o(t.value.value,t.modifier,e.nodes);else if("named"===t.value.kind&&n?.values){let r=n.values[t.value.value];if("string"!=typeof r)return;e.nodes=o(r,t.modifier,e.nodes)}}))}),((e,t)=>{if("functional"!==e.kind||"functional"!==t.kind)return 0;let r=e.value?e.value.value:"DEFAULT",o=t.value?t.value.value:"DEFAULT",i=n?.values?.[r]??r,l=n?.values?.[o]??o;if(n&&"function"==typeof n.sort)return n.sort({value:i,modifier:e.modifier?.value??null},{value:l,modifier:t.modifier?.value??null});let s=a.indexOf(r),c=a.indexOf(o);return s=-1===s?a.length:s,c=-1===c?a.length:c,s!==c?s-c:iObject.entries(e)));a=a.flatMap((([e,t])=>R(e,",").map((e=>[e.trim(),t]))));let i=new c((()=>[]));for(let[e,r]of a){if(e.startsWith("@keyframes ")){o||t.push(b(e,Vt(r)));continue}let n=St(e),a=!1;if(Ct(n,(e=>{if("selector"===e.kind&&"."===e.value[0]&&Kt.test(e.value.slice(1))){let t=e.value;e.value="&";let o=Tt(n),l=t.slice(1),s="&"===o?Vt(r):[b(o,Vt(r))];return i.get(l).push(...s),a=!0,void(e.value=t)}if("function"===e.kind&&":not"===e.value)return 1})),!a)throw new Error(`\`addUtilities({ '${e}' : … })\` defines an invalid utility selector. Utilities must be a single class name and start with a lowercase letter, eg. \`.scrollbar-none\`.`)}for(let[t,r]of i)e.theme.prefix&&A(r,(t=>{if("rule"===t.kind){let r=St(t.selector);Ct(r,(t=>{"selector"===t.kind&&"."===t.value[0]&&(t.value=`.${e.theme.prefix}\\:${t.value.slice(1)}`)})),t.selector=Tt(r)}})),e.utilities.static(t,(o=>{let a=structuredClone(r);return Ot(a,t,o.raw),n.current|=st(a,e),a}))},matchUtilities(t,r){let o=r?.type?Array.isArray(r?.type)?r.type:[r.type]:["any"];for(let[a,i]of Object.entries(t)){let t=function({negative:t}){return l=>{if("arbitrary"===l.value?.kind&&o.length>0&&!o.includes("any")&&(l.value.dataType&&!o.includes(l.value.dataType)||!l.value.dataType&&!ie(l.value.value,o)))return;let s,c=o.includes("color"),u=null,d=!1;{let e=r?.values??{};c&&(e=Object.assign({inherit:"inherit",transparent:"transparent",current:"currentcolor"},e)),l.value?"arbitrary"===l.value.kind?u=l.value.value:l.value.fraction&&e[l.value.fraction]?(u=e[l.value.fraction],d=!0):e[l.value.value]?u=e[l.value.value]:e.__BARE_VALUE__&&(u=e.__BARE_VALUE__(l.value)??null,d=(null!==l.value.fraction&&u?.includes("/"))??!1):u=e.DEFAULT??null}if(null===u)return;{let e=r?.modifiers??null;s=l.modifier?"any"===e||"arbitrary"===l.modifier.kind?l.modifier.value:e?.[l.modifier.value]?e[l.modifier.value]:c&&!Number.isNaN(Number(l.modifier.value))?`${l.modifier.value}%`:null:null}if(l.modifier&&null===s&&!d)return"arbitrary"===l.value?.kind?null:void 0;c&&null!==s&&(u=Oe(u,s)),t&&(u=`calc(${u} * -1)`);let f=Vt(i(u,{modifier:s}));return Ot(f,a,l.raw),n.current|=st(f,e),f}};if(!Kt.test(a))throw new Error(`\`matchUtilities({ '${a}' : … })\` defines an invalid utility name. Utilities should be alphanumeric and start with a lowercase letter, eg. \`scrollbar\`.`);r?.supportsNegativeValues&&e.utilities.functional(`-${a}`,t({negative:!0}),{types:o}),e.utilities.functional(a,t({negative:!1}),{types:o}),e.utilities.suggest(a,(()=>{let e=r?.values??{},t=new Set(Object.keys(e));t.delete("__BARE_VALUE__"),t.has("DEFAULT")&&(t.delete("DEFAULT"),t.add(null));let n=r?.modifiers??{},o="any"===n?[]:Object.keys(n);return[{supportsNegative:r?.supportsNegativeValues??!1,values:Array.from(t),modifiers:o}]}))}},addComponents(e,t){this.addUtilities(e,t)},matchComponents(e,t){this.matchUtilities(e,t)},theme:kt(e,(()=>r.theme??{}),(e=>e)),prefix:e=>e,config(e,t){let n=r;if(!e)return n;let o=gt(e);for(let e=0;eObject.entries(e)));for(let[e,n]of r)if("object"!=typeof n){if(!e.startsWith("--")){if("@slot"===n){t.push(b(e,[k("@slot")]));continue}e=e.replace(/([A-Z])/g,"-$1").toLowerCase()}t.push(y(e,String(n)))}else if(Array.isArray(n))for(let r of n)"string"==typeof r?t.push(y(e,r)):t.push(b(e,Vt(r)));else null!==n&&t.push(b(e,Vt(n)));return t}function Nt(e,r){return("string"==typeof e?[e]:e).flatMap((e=>{if(e.trim().endsWith("}")){let n=t(e.replace("}","{@slot}}"));return et(n,r),n}return b(e,r)}))}function Ot(e,t,r){A(e,(e=>{if("rule"===e.kind){let n=St(e.selector);Ct(n,(e=>{"selector"===e.kind&&e.value===`.${t}`&&(e.value=`.${o(r)}`)})),e.selector=Tt(n)}}))}function Ft(e,t,r){for(let r of function(e){let t=[];if("keyframes"in e.theme)for(let[r,n]of Object.entries(e.theme.keyframes))t.push(k("@keyframes",r,Vt(n)));return t}(t))e.theme.addKeyframes(r)}var Wt={inherit:"inherit",current:"currentcolor",transparent:"transparent",black:"#000",white:"#fff",slate:{50:"oklch(98.4% 0.003 247.858)",100:"oklch(96.8% 0.007 247.896)",200:"oklch(92.9% 0.013 255.508)",300:"oklch(86.9% 0.022 252.894)",400:"oklch(70.4% 0.04 256.788)",500:"oklch(55.4% 0.046 257.417)",600:"oklch(44.6% 0.043 257.281)",700:"oklch(37.2% 0.044 257.287)",800:"oklch(27.9% 0.041 260.031)",900:"oklch(20.8% 0.042 265.755)",950:"oklch(12.9% 0.042 264.695)"},gray:{50:"oklch(98.5% 0.002 247.839)",100:"oklch(96.7% 0.003 264.542)",200:"oklch(92.8% 0.006 264.531)",300:"oklch(87.2% 0.01 258.338)",400:"oklch(70.7% 0.022 261.325)",500:"oklch(55.1% 0.027 264.364)",600:"oklch(44.6% 0.03 256.802)",700:"oklch(37.3% 0.034 259.733)",800:"oklch(27.8% 0.033 256.848)",900:"oklch(21% 0.034 264.665)",950:"oklch(13% 0.028 261.692)"},zinc:{50:"oklch(98.5% 0 0)",100:"oklch(96.7% 0.001 286.375)",200:"oklch(92% 0.004 286.32)",300:"oklch(87.1% 0.006 286.286)",400:"oklch(70.5% 0.015 286.067)",500:"oklch(55.2% 0.016 285.938)",600:"oklch(44.2% 0.017 285.786)",700:"oklch(37% 0.013 285.805)",800:"oklch(27.4% 0.006 286.033)",900:"oklch(21% 0.006 285.885)",950:"oklch(14.1% 0.005 285.823)"},neutral:{50:"oklch(98.5% 0 0)",100:"oklch(97% 0 0)",200:"oklch(92.2% 0 0)",300:"oklch(87% 0 0)",400:"oklch(70.8% 0 0)",500:"oklch(55.6% 0 0)",600:"oklch(43.9% 0 0)",700:"oklch(37.1% 0 0)",800:"oklch(26.9% 0 0)",900:"oklch(20.5% 0 0)",950:"oklch(14.5% 0 0)"},stone:{50:"oklch(98.5% 0.001 106.423)",100:"oklch(97% 0.001 106.424)",200:"oklch(92.3% 0.003 48.717)",300:"oklch(86.9% 0.005 56.366)",400:"oklch(70.9% 0.01 56.259)",500:"oklch(55.3% 0.013 58.071)",600:"oklch(44.4% 0.011 73.639)",700:"oklch(37.4% 0.01 67.558)",800:"oklch(26.8% 0.007 34.298)",900:"oklch(21.6% 0.006 56.043)",950:"oklch(14.7% 0.004 49.25)"},red:{50:"oklch(97.1% 0.013 17.38)",100:"oklch(93.6% 0.032 17.717)",200:"oklch(88.5% 0.062 18.334)",300:"oklch(80.8% 0.114 19.571)",400:"oklch(70.4% 0.191 22.216)",500:"oklch(63.7% 0.237 25.331)",600:"oklch(57.7% 0.245 27.325)",700:"oklch(50.5% 0.213 27.518)",800:"oklch(44.4% 0.177 26.899)",900:"oklch(39.6% 0.141 25.723)",950:"oklch(25.8% 0.092 26.042)"},orange:{50:"oklch(98% 0.016 73.684)",100:"oklch(95.4% 0.038 75.164)",200:"oklch(90.1% 0.076 70.697)",300:"oklch(83.7% 0.128 66.29)",400:"oklch(75% 0.183 55.934)",500:"oklch(70.5% 0.213 47.604)",600:"oklch(64.6% 0.222 41.116)",700:"oklch(55.3% 0.195 38.402)",800:"oklch(47% 0.157 37.304)",900:"oklch(40.8% 0.123 38.172)",950:"oklch(26.6% 0.079 36.259)"},amber:{50:"oklch(98.7% 0.022 95.277)",100:"oklch(96.2% 0.059 95.617)",200:"oklch(92.4% 0.12 95.746)",300:"oklch(87.9% 0.169 91.605)",400:"oklch(82.8% 0.189 84.429)",500:"oklch(76.9% 0.188 70.08)",600:"oklch(66.6% 0.179 58.318)",700:"oklch(55.5% 0.163 48.998)",800:"oklch(47.3% 0.137 46.201)",900:"oklch(41.4% 0.112 45.904)",950:"oklch(27.9% 0.077 45.635)"},yellow:{50:"oklch(98.7% 0.026 102.212)",100:"oklch(97.3% 0.071 103.193)",200:"oklch(94.5% 0.129 101.54)",300:"oklch(90.5% 0.182 98.111)",400:"oklch(85.2% 0.199 91.936)",500:"oklch(79.5% 0.184 86.047)",600:"oklch(68.1% 0.162 75.834)",700:"oklch(55.4% 0.135 66.442)",800:"oklch(47.6% 0.114 61.907)",900:"oklch(42.1% 0.095 57.708)",950:"oklch(28.6% 0.066 53.813)"},lime:{50:"oklch(98.6% 0.031 120.757)",100:"oklch(96.7% 0.067 122.328)",200:"oklch(93.8% 0.127 124.321)",300:"oklch(89.7% 0.196 126.665)",400:"oklch(84.1% 0.238 128.85)",500:"oklch(76.8% 0.233 130.85)",600:"oklch(64.8% 0.2 131.684)",700:"oklch(53.2% 0.157 131.589)",800:"oklch(45.3% 0.124 130.933)",900:"oklch(40.5% 0.101 131.063)",950:"oklch(27.4% 0.072 132.109)"},green:{50:"oklch(98.2% 0.018 155.826)",100:"oklch(96.2% 0.044 156.743)",200:"oklch(92.5% 0.084 155.995)",300:"oklch(87.1% 0.15 154.449)",400:"oklch(79.2% 0.209 151.711)",500:"oklch(72.3% 0.219 149.579)",600:"oklch(62.7% 0.194 149.214)",700:"oklch(52.7% 0.154 150.069)",800:"oklch(44.8% 0.119 151.328)",900:"oklch(39.3% 0.095 152.535)",950:"oklch(26.6% 0.065 152.934)"},emerald:{50:"oklch(97.9% 0.021 166.113)",100:"oklch(95% 0.052 163.051)",200:"oklch(90.5% 0.093 164.15)",300:"oklch(84.5% 0.143 164.978)",400:"oklch(76.5% 0.177 163.223)",500:"oklch(69.6% 0.17 162.48)",600:"oklch(59.6% 0.145 163.225)",700:"oklch(50.8% 0.118 165.612)",800:"oklch(43.2% 0.095 166.913)",900:"oklch(37.8% 0.077 168.94)",950:"oklch(26.2% 0.051 172.552)"},teal:{50:"oklch(98.4% 0.014 180.72)",100:"oklch(95.3% 0.051 180.801)",200:"oklch(91% 0.096 180.426)",300:"oklch(85.5% 0.138 181.071)",400:"oklch(77.7% 0.152 181.912)",500:"oklch(70.4% 0.14 182.503)",600:"oklch(60% 0.118 184.704)",700:"oklch(51.1% 0.096 186.391)",800:"oklch(43.7% 0.078 188.216)",900:"oklch(38.6% 0.063 188.416)",950:"oklch(27.7% 0.046 192.524)"},cyan:{50:"oklch(98.4% 0.019 200.873)",100:"oklch(95.6% 0.045 203.388)",200:"oklch(91.7% 0.08 205.041)",300:"oklch(86.5% 0.127 207.078)",400:"oklch(78.9% 0.154 211.53)",500:"oklch(71.5% 0.143 215.221)",600:"oklch(60.9% 0.126 221.723)",700:"oklch(52% 0.105 223.128)",800:"oklch(45% 0.085 224.283)",900:"oklch(39.8% 0.07 227.392)",950:"oklch(30.2% 0.056 229.695)"},sky:{50:"oklch(97.7% 0.013 236.62)",100:"oklch(95.1% 0.026 236.824)",200:"oklch(90.1% 0.058 230.902)",300:"oklch(82.8% 0.111 230.318)",400:"oklch(74.6% 0.16 232.661)",500:"oklch(68.5% 0.169 237.323)",600:"oklch(58.8% 0.158 241.966)",700:"oklch(50% 0.134 242.749)",800:"oklch(44.3% 0.11 240.79)",900:"oklch(39.1% 0.09 240.876)",950:"oklch(29.3% 0.066 243.157)"},blue:{50:"oklch(97% 0.014 254.604)",100:"oklch(93.2% 0.032 255.585)",200:"oklch(88.2% 0.059 254.128)",300:"oklch(80.9% 0.105 251.813)",400:"oklch(70.7% 0.165 254.624)",500:"oklch(62.3% 0.214 259.815)",600:"oklch(54.6% 0.245 262.881)",700:"oklch(48.8% 0.243 264.376)",800:"oklch(42.4% 0.199 265.638)",900:"oklch(37.9% 0.146 265.522)",950:"oklch(28.2% 0.091 267.935)"},indigo:{50:"oklch(96.2% 0.018 272.314)",100:"oklch(93% 0.034 272.788)",200:"oklch(87% 0.065 274.039)",300:"oklch(78.5% 0.115 274.713)",400:"oklch(67.3% 0.182 276.935)",500:"oklch(58.5% 0.233 277.117)",600:"oklch(51.1% 0.262 276.966)",700:"oklch(45.7% 0.24 277.023)",800:"oklch(39.8% 0.195 277.366)",900:"oklch(35.9% 0.144 278.697)",950:"oklch(25.7% 0.09 281.288)"},violet:{50:"oklch(96.9% 0.016 293.756)",100:"oklch(94.3% 0.029 294.588)",200:"oklch(89.4% 0.057 293.283)",300:"oklch(81.1% 0.111 293.571)",400:"oklch(70.2% 0.183 293.541)",500:"oklch(60.6% 0.25 292.717)",600:"oklch(54.1% 0.281 293.009)",700:"oklch(49.1% 0.27 292.581)",800:"oklch(43.2% 0.232 292.759)",900:"oklch(38% 0.189 293.745)",950:"oklch(28.3% 0.141 291.089)"},purple:{50:"oklch(97.7% 0.014 308.299)",100:"oklch(94.6% 0.033 307.174)",200:"oklch(90.2% 0.063 306.703)",300:"oklch(82.7% 0.119 306.383)",400:"oklch(71.4% 0.203 305.504)",500:"oklch(62.7% 0.265 303.9)",600:"oklch(55.8% 0.288 302.321)",700:"oklch(49.6% 0.265 301.924)",800:"oklch(43.8% 0.218 303.724)",900:"oklch(38.1% 0.176 304.987)",950:"oklch(29.1% 0.149 302.717)"},fuchsia:{50:"oklch(97.7% 0.017 320.058)",100:"oklch(95.2% 0.037 318.852)",200:"oklch(90.3% 0.076 319.62)",300:"oklch(83.3% 0.145 321.434)",400:"oklch(74% 0.238 322.16)",500:"oklch(66.7% 0.295 322.15)",600:"oklch(59.1% 0.293 322.896)",700:"oklch(51.8% 0.253 323.949)",800:"oklch(45.2% 0.211 324.591)",900:"oklch(40.1% 0.17 325.612)",950:"oklch(29.3% 0.136 325.661)"},pink:{50:"oklch(97.1% 0.014 343.198)",100:"oklch(94.8% 0.028 342.258)",200:"oklch(89.9% 0.061 343.231)",300:"oklch(82.3% 0.12 346.018)",400:"oklch(71.8% 0.202 349.761)",500:"oklch(65.6% 0.241 354.308)",600:"oklch(59.2% 0.249 0.584)",700:"oklch(52.5% 0.223 3.958)",800:"oklch(45.9% 0.187 3.815)",900:"oklch(40.8% 0.153 2.432)",950:"oklch(28.4% 0.109 3.907)"},rose:{50:"oklch(96.9% 0.015 12.422)",100:"oklch(94.1% 0.03 12.58)",200:"oklch(89.2% 0.058 10.001)",300:"oklch(81% 0.117 11.638)",400:"oklch(71.2% 0.194 13.428)",500:"oklch(64.5% 0.246 16.439)",600:"oklch(58.6% 0.253 17.585)",700:"oklch(51.4% 0.222 16.935)",800:"oklch(45.5% 0.188 13.697)",900:"oklch(41% 0.159 10.272)",950:"oklch(27.1% 0.105 12.094)"}};function Ut(e){return{__BARE_VALUE__:e}}var Dt=Ut((e=>{if(ye(e.value))return e.value})),_t=Ut((e=>{if(ye(e.value))return`${e.value}%`})),Mt=Ut((e=>{if(ye(e.value))return`${e.value}px`})),Bt=Ut((e=>{if(ye(e.value))return`${e.value}ms`})),Lt=Ut((e=>{if(ye(e.value))return`${e.value}deg`})),Rt=Ut((e=>{if(null===e.fraction)return;let[t,r]=R(e.fraction,"/");return ye(t)&&ye(r)?e.fraction:void 0})),It=Ut((e=>{if(ye(Number(e.value)))return`repeat(${e.value}, minmax(0, 1fr))`})),Pt={accentColor:({theme:e})=>e("colors"),animation:{none:"none",spin:"spin 1s linear infinite",ping:"ping 1s cubic-bezier(0, 0, 0.2, 1) infinite",pulse:"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite",bounce:"bounce 1s infinite"},aria:{busy:'busy="true"',checked:'checked="true"',disabled:'disabled="true"',expanded:'expanded="true"',hidden:'hidden="true"',pressed:'pressed="true"',readonly:'readonly="true"',required:'required="true"',selected:'selected="true"'},aspectRatio:{auto:"auto",square:"1 / 1",video:"16 / 9",...Rt},backdropBlur:({theme:e})=>e("blur"),backdropBrightness:({theme:e})=>({...e("brightness"),..._t}),backdropContrast:({theme:e})=>({...e("contrast"),..._t}),backdropGrayscale:({theme:e})=>({...e("grayscale"),..._t}),backdropHueRotate:({theme:e})=>({...e("hueRotate"),...Lt}),backdropInvert:({theme:e})=>({...e("invert"),..._t}),backdropOpacity:({theme:e})=>({...e("opacity"),..._t}),backdropSaturate:({theme:e})=>({...e("saturate"),..._t}),backdropSepia:({theme:e})=>({...e("sepia"),..._t}),backgroundColor:({theme:e})=>e("colors"),backgroundImage:{none:"none","gradient-to-t":"linear-gradient(to top, var(--tw-gradient-stops))","gradient-to-tr":"linear-gradient(to top right, var(--tw-gradient-stops))","gradient-to-r":"linear-gradient(to right, var(--tw-gradient-stops))","gradient-to-br":"linear-gradient(to bottom right, var(--tw-gradient-stops))","gradient-to-b":"linear-gradient(to bottom, var(--tw-gradient-stops))","gradient-to-bl":"linear-gradient(to bottom left, var(--tw-gradient-stops))","gradient-to-l":"linear-gradient(to left, var(--tw-gradient-stops))","gradient-to-tl":"linear-gradient(to top left, var(--tw-gradient-stops))"},backgroundOpacity:({theme:e})=>e("opacity"),backgroundPosition:{bottom:"bottom",center:"center",left:"left","left-bottom":"left bottom","left-top":"left top",right:"right","right-bottom":"right bottom","right-top":"right top",top:"top"},backgroundSize:{auto:"auto",cover:"cover",contain:"contain"},blur:{0:"0",none:"",sm:"4px",DEFAULT:"8px",md:"12px",lg:"16px",xl:"24px","2xl":"40px","3xl":"64px"},borderColor:({theme:e})=>({DEFAULT:"currentcolor",...e("colors")}),borderOpacity:({theme:e})=>e("opacity"),borderRadius:{none:"0px",sm:"0.125rem",DEFAULT:"0.25rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},borderSpacing:({theme:e})=>e("spacing"),borderWidth:{DEFAULT:"1px",0:"0px",2:"2px",4:"4px",8:"8px",...Mt},boxShadow:{sm:"0 1px 2px 0 rgb(0 0 0 / 0.05)",DEFAULT:"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",md:"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",lg:"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",xl:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)","2xl":"0 25px 50px -12px rgb(0 0 0 / 0.25)",inner:"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)",none:"none"},boxShadowColor:({theme:e})=>e("colors"),brightness:{0:"0",50:".5",75:".75",90:".9",95:".95",100:"1",105:"1.05",110:"1.1",125:"1.25",150:"1.5",200:"2",..._t},caretColor:({theme:e})=>e("colors"),colors:()=>({...Wt}),columns:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12","3xs":"16rem","2xs":"18rem",xs:"20rem",sm:"24rem",md:"28rem",lg:"32rem",xl:"36rem","2xl":"42rem","3xl":"48rem","4xl":"56rem","5xl":"64rem","6xl":"72rem","7xl":"80rem",...Dt},container:{},content:{none:"none"},contrast:{0:"0",50:".5",75:".75",100:"1",125:"1.25",150:"1.5",200:"2",..._t},cursor:{auto:"auto",default:"default",pointer:"pointer",wait:"wait",text:"text",move:"move",help:"help","not-allowed":"not-allowed",none:"none","context-menu":"context-menu",progress:"progress",cell:"cell",crosshair:"crosshair","vertical-text":"vertical-text",alias:"alias",copy:"copy","no-drop":"no-drop",grab:"grab",grabbing:"grabbing","all-scroll":"all-scroll","col-resize":"col-resize","row-resize":"row-resize","n-resize":"n-resize","e-resize":"e-resize","s-resize":"s-resize","w-resize":"w-resize","ne-resize":"ne-resize","nw-resize":"nw-resize","se-resize":"se-resize","sw-resize":"sw-resize","ew-resize":"ew-resize","ns-resize":"ns-resize","nesw-resize":"nesw-resize","nwse-resize":"nwse-resize","zoom-in":"zoom-in","zoom-out":"zoom-out"},divideColor:({theme:e})=>e("borderColor"),divideOpacity:({theme:e})=>e("borderOpacity"),divideWidth:({theme:e})=>({...e("borderWidth"),...Mt}),dropShadow:{sm:"0 1px 1px rgb(0 0 0 / 0.05)",DEFAULT:["0 1px 2px rgb(0 0 0 / 0.1)","0 1px 1px rgb(0 0 0 / 0.06)"],md:["0 4px 3px rgb(0 0 0 / 0.07)","0 2px 2px rgb(0 0 0 / 0.06)"],lg:["0 10px 8px rgb(0 0 0 / 0.04)","0 4px 3px rgb(0 0 0 / 0.1)"],xl:["0 20px 13px rgb(0 0 0 / 0.03)","0 8px 5px rgb(0 0 0 / 0.08)"],"2xl":"0 25px 25px rgb(0 0 0 / 0.15)",none:"0 0 #0000"},fill:({theme:e})=>e("colors"),flex:{1:"1 1 0%",auto:"1 1 auto",initial:"0 1 auto",none:"none"},flexBasis:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%","1/5":"20%","2/5":"40%","3/5":"60%","4/5":"80%","1/6":"16.666667%","2/6":"33.333333%","3/6":"50%","4/6":"66.666667%","5/6":"83.333333%","1/12":"8.333333%","2/12":"16.666667%","3/12":"25%","4/12":"33.333333%","5/12":"41.666667%","6/12":"50%","7/12":"58.333333%","8/12":"66.666667%","9/12":"75%","10/12":"83.333333%","11/12":"91.666667%",full:"100%",...e("spacing")}),flexGrow:{0:"0",DEFAULT:"1",...Dt},flexShrink:{0:"0",DEFAULT:"1",...Dt},fontFamily:{sans:["ui-sans-serif","system-ui","sans-serif",'"Apple Color Emoji"','"Segoe UI Emoji"','"Segoe UI Symbol"','"Noto Color Emoji"'],serif:["ui-serif","Georgia","Cambria",'"Times New Roman"',"Times","serif"],mono:["ui-monospace","SFMono-Regular","Menlo","Monaco","Consolas",'"Liberation Mono"','"Courier New"',"monospace"]},fontSize:{xs:["0.75rem",{lineHeight:"1rem"}],sm:["0.875rem",{lineHeight:"1.25rem"}],base:["1rem",{lineHeight:"1.5rem"}],lg:["1.125rem",{lineHeight:"1.75rem"}],xl:["1.25rem",{lineHeight:"1.75rem"}],"2xl":["1.5rem",{lineHeight:"2rem"}],"3xl":["1.875rem",{lineHeight:"2.25rem"}],"4xl":["2.25rem",{lineHeight:"2.5rem"}],"5xl":["3rem",{lineHeight:"1"}],"6xl":["3.75rem",{lineHeight:"1"}],"7xl":["4.5rem",{lineHeight:"1"}],"8xl":["6rem",{lineHeight:"1"}],"9xl":["8rem",{lineHeight:"1"}]},fontWeight:{thin:"100",extralight:"200",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800",black:"900"},gap:({theme:e})=>e("spacing"),gradientColorStops:({theme:e})=>e("colors"),gradientColorStopPositions:{"0%":"0%","5%":"5%","10%":"10%","15%":"15%","20%":"20%","25%":"25%","30%":"30%","35%":"35%","40%":"40%","45%":"45%","50%":"50%","55%":"55%","60%":"60%","65%":"65%","70%":"70%","75%":"75%","80%":"80%","85%":"85%","90%":"90%","95%":"95%","100%":"100%",..._t},grayscale:{0:"0",DEFAULT:"100%",..._t},gridAutoColumns:{auto:"auto",min:"min-content",max:"max-content",fr:"minmax(0, 1fr)"},gridAutoRows:{auto:"auto",min:"min-content",max:"max-content",fr:"minmax(0, 1fr)"},gridColumn:{auto:"auto","span-1":"span 1 / span 1","span-2":"span 2 / span 2","span-3":"span 3 / span 3","span-4":"span 4 / span 4","span-5":"span 5 / span 5","span-6":"span 6 / span 6","span-7":"span 7 / span 7","span-8":"span 8 / span 8","span-9":"span 9 / span 9","span-10":"span 10 / span 10","span-11":"span 11 / span 11","span-12":"span 12 / span 12","span-full":"1 / -1"},gridColumnEnd:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",13:"13",...Dt},gridColumnStart:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",13:"13",...Dt},gridRow:{auto:"auto","span-1":"span 1 / span 1","span-2":"span 2 / span 2","span-3":"span 3 / span 3","span-4":"span 4 / span 4","span-5":"span 5 / span 5","span-6":"span 6 / span 6","span-7":"span 7 / span 7","span-8":"span 8 / span 8","span-9":"span 9 / span 9","span-10":"span 10 / span 10","span-11":"span 11 / span 11","span-12":"span 12 / span 12","span-full":"1 / -1"},gridRowEnd:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",13:"13",...Dt},gridRowStart:{auto:"auto",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",13:"13",...Dt},gridTemplateColumns:{none:"none",subgrid:"subgrid",1:"repeat(1, minmax(0, 1fr))",2:"repeat(2, minmax(0, 1fr))",3:"repeat(3, minmax(0, 1fr))",4:"repeat(4, minmax(0, 1fr))",5:"repeat(5, minmax(0, 1fr))",6:"repeat(6, minmax(0, 1fr))",7:"repeat(7, minmax(0, 1fr))",8:"repeat(8, minmax(0, 1fr))",9:"repeat(9, minmax(0, 1fr))",10:"repeat(10, minmax(0, 1fr))",11:"repeat(11, minmax(0, 1fr))",12:"repeat(12, minmax(0, 1fr))",...It},gridTemplateRows:{none:"none",subgrid:"subgrid",1:"repeat(1, minmax(0, 1fr))",2:"repeat(2, minmax(0, 1fr))",3:"repeat(3, minmax(0, 1fr))",4:"repeat(4, minmax(0, 1fr))",5:"repeat(5, minmax(0, 1fr))",6:"repeat(6, minmax(0, 1fr))",7:"repeat(7, minmax(0, 1fr))",8:"repeat(8, minmax(0, 1fr))",9:"repeat(9, minmax(0, 1fr))",10:"repeat(10, minmax(0, 1fr))",11:"repeat(11, minmax(0, 1fr))",12:"repeat(12, minmax(0, 1fr))",...It},height:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%","1/5":"20%","2/5":"40%","3/5":"60%","4/5":"80%","1/6":"16.666667%","2/6":"33.333333%","3/6":"50%","4/6":"66.666667%","5/6":"83.333333%",full:"100%",screen:"100vh",svh:"100svh",lvh:"100lvh",dvh:"100dvh",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),hueRotate:{0:"0deg",15:"15deg",30:"30deg",60:"60deg",90:"90deg",180:"180deg",...Lt},inset:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%",full:"100%",...e("spacing")}),invert:{0:"0",DEFAULT:"100%",..._t},keyframes:{spin:{to:{transform:"rotate(360deg)"}},ping:{"75%, 100%":{transform:"scale(2)",opacity:"0"}},pulse:{"50%":{opacity:".5"}},bounce:{"0%, 100%":{transform:"translateY(-25%)",animationTimingFunction:"cubic-bezier(0.8,0,1,1)"},"50%":{transform:"none",animationTimingFunction:"cubic-bezier(0,0,0.2,1)"}}},letterSpacing:{tighter:"-0.05em",tight:"-0.025em",normal:"0em",wide:"0.025em",wider:"0.05em",widest:"0.1em"},lineHeight:{none:"1",tight:"1.25",snug:"1.375",normal:"1.5",relaxed:"1.625",loose:"2",3:".75rem",4:"1rem",5:"1.25rem",6:"1.5rem",7:"1.75rem",8:"2rem",9:"2.25rem",10:"2.5rem"},listStyleType:{none:"none",disc:"disc",decimal:"decimal"},listStyleImage:{none:"none"},margin:({theme:e})=>({auto:"auto",...e("spacing")}),lineClamp:{1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",...Dt},maxHeight:({theme:e})=>({none:"none",full:"100%",screen:"100vh",svh:"100svh",lvh:"100lvh",dvh:"100dvh",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),maxWidth:({theme:e})=>({none:"none",xs:"20rem",sm:"24rem",md:"28rem",lg:"32rem",xl:"36rem","2xl":"42rem","3xl":"48rem","4xl":"56rem","5xl":"64rem","6xl":"72rem","7xl":"80rem",full:"100%",min:"min-content",max:"max-content",fit:"fit-content",prose:"65ch",...e("spacing")}),minHeight:({theme:e})=>({full:"100%",screen:"100vh",svh:"100svh",lvh:"100lvh",dvh:"100dvh",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),minWidth:({theme:e})=>({full:"100%",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),objectPosition:{bottom:"bottom",center:"center",left:"left","left-bottom":"left bottom","left-top":"left top",right:"right","right-bottom":"right bottom","right-top":"right top",top:"top"},opacity:{0:"0",5:"0.05",10:"0.1",15:"0.15",20:"0.2",25:"0.25",30:"0.3",35:"0.35",40:"0.4",45:"0.45",50:"0.5",55:"0.55",60:"0.6",65:"0.65",70:"0.7",75:"0.75",80:"0.8",85:"0.85",90:"0.9",95:"0.95",100:"1",..._t},order:{first:"-9999",last:"9999",none:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10",11:"11",12:"12",...Dt},outlineColor:({theme:e})=>e("colors"),outlineOffset:{0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...Mt},outlineWidth:{0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...Mt},padding:({theme:e})=>e("spacing"),placeholderColor:({theme:e})=>e("colors"),placeholderOpacity:({theme:e})=>e("opacity"),ringColor:({theme:e})=>({DEFAULT:"currentcolor",...e("colors")}),ringOffsetColor:({theme:e})=>e("colors"),ringOffsetWidth:{0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...Mt},ringOpacity:({theme:e})=>({DEFAULT:"0.5",...e("opacity")}),ringWidth:{DEFAULT:"3px",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...Mt},rotate:{0:"0deg",1:"1deg",2:"2deg",3:"3deg",6:"6deg",12:"12deg",45:"45deg",90:"90deg",180:"180deg",...Lt},saturate:{0:"0",50:".5",100:"1",150:"1.5",200:"2",..._t},scale:{0:"0",50:".5",75:".75",90:".9",95:".95",100:"1",105:"1.05",110:"1.1",125:"1.25",150:"1.5",..._t},screens:{sm:"40rem",md:"48rem",lg:"64rem",xl:"80rem","2xl":"96rem"},scrollMargin:({theme:e})=>e("spacing"),scrollPadding:({theme:e})=>e("spacing"),sepia:{0:"0",DEFAULT:"100%",..._t},skew:{0:"0deg",1:"1deg",2:"2deg",3:"3deg",6:"6deg",12:"12deg",...Lt},space:({theme:e})=>e("spacing"),spacing:{px:"1px",0:"0px",.5:"0.125rem",1:"0.25rem",1.5:"0.375rem",2:"0.5rem",2.5:"0.625rem",3:"0.75rem",3.5:"0.875rem",4:"1rem",5:"1.25rem",6:"1.5rem",7:"1.75rem",8:"2rem",9:"2.25rem",10:"2.5rem",11:"2.75rem",12:"3rem",14:"3.5rem",16:"4rem",20:"5rem",24:"6rem",28:"7rem",32:"8rem",36:"9rem",40:"10rem",44:"11rem",48:"12rem",52:"13rem",56:"14rem",60:"15rem",64:"16rem",72:"18rem",80:"20rem",96:"24rem"},stroke:({theme:e})=>({none:"none",...e("colors")}),strokeWidth:{0:"0",1:"1",2:"2",...Dt},supports:{},data:{},textColor:({theme:e})=>e("colors"),textDecorationColor:({theme:e})=>e("colors"),textDecorationThickness:{auto:"auto","from-font":"from-font",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...Mt},textIndent:({theme:e})=>e("spacing"),textOpacity:({theme:e})=>e("opacity"),textUnderlineOffset:{auto:"auto",0:"0px",1:"1px",2:"2px",4:"4px",8:"8px",...Mt},transformOrigin:{center:"center",top:"top","top-right":"top right",right:"right","bottom-right":"bottom right",bottom:"bottom","bottom-left":"bottom left",left:"left","top-left":"top left"},transitionDelay:{0:"0s",75:"75ms",100:"100ms",150:"150ms",200:"200ms",300:"300ms",500:"500ms",700:"700ms",1e3:"1000ms",...Bt},transitionDuration:{DEFAULT:"150ms",0:"0s",75:"75ms",100:"100ms",150:"150ms",200:"200ms",300:"300ms",500:"500ms",700:"700ms",1e3:"1000ms",...Bt},transitionProperty:{none:"none",all:"all",DEFAULT:"color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter",colors:"color, background-color, border-color, outline-color, text-decoration-color, fill, stroke",opacity:"opacity",shadow:"box-shadow",transform:"transform"},transitionTimingFunction:{DEFAULT:"cubic-bezier(0.4, 0, 0.2, 1)",linear:"linear",in:"cubic-bezier(0.4, 0, 1, 1)",out:"cubic-bezier(0, 0, 0.2, 1)","in-out":"cubic-bezier(0.4, 0, 0.2, 1)"},translate:({theme:e})=>({"1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%",full:"100%",...e("spacing")}),size:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%","1/5":"20%","2/5":"40%","3/5":"60%","4/5":"80%","1/6":"16.666667%","2/6":"33.333333%","3/6":"50%","4/6":"66.666667%","5/6":"83.333333%","1/12":"8.333333%","2/12":"16.666667%","3/12":"25%","4/12":"33.333333%","5/12":"41.666667%","6/12":"50%","7/12":"58.333333%","8/12":"66.666667%","9/12":"75%","10/12":"83.333333%","11/12":"91.666667%",full:"100%",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),width:({theme:e})=>({auto:"auto","1/2":"50%","1/3":"33.333333%","2/3":"66.666667%","1/4":"25%","2/4":"50%","3/4":"75%","1/5":"20%","2/5":"40%","3/5":"60%","4/5":"80%","1/6":"16.666667%","2/6":"33.333333%","3/6":"50%","4/6":"66.666667%","5/6":"83.333333%","1/12":"8.333333%","2/12":"16.666667%","3/12":"25%","4/12":"33.333333%","5/12":"41.666667%","6/12":"50%","7/12":"58.333333%","8/12":"66.666667%","9/12":"75%","10/12":"83.333333%","11/12":"91.666667%",full:"100%",screen:"100vw",svw:"100svw",lvw:"100lvw",dvw:"100dvw",min:"min-content",max:"max-content",fit:"fit-content",...e("spacing")}),willChange:{auto:"auto",scroll:"scroll-position",contents:"contents",transform:"transform"},zIndex:{auto:"auto",0:"0",10:"10",20:"20",30:"30",40:"40",50:"50",...Dt}};function qt(e){return{theme:{...Pt,colors:({theme:e})=>e("color",{}),extend:{fontSize:({theme:e})=>({...e("text",{})}),boxShadow:({theme:e})=>({...e("shadow",{})}),animation:({theme:e})=>({...e("animate",{})}),aspectRatio:({theme:e})=>({...e("aspect",{})}),borderRadius:({theme:e})=>({...e("radius",{})}),screens:({theme:e})=>({...e("breakpoint",{})}),letterSpacing:({theme:e})=>({...e("tracking",{})}),lineHeight:({theme:e})=>({...e("leading",{})}),transitionDuration:{DEFAULT:e.get(["--default-transition-duration"])??null},transitionTimingFunction:{DEFAULT:e.get(["--default-transition-timing-function"])??null},maxWidth:({theme:e})=>({...e("container",{})})}}}}var Ht={blocklist:[],future:{},prefix:"",important:!1,darkMode:null,theme:{},plugins:[],content:{files:[]}};function Zt(e,t){let r={design:e,configs:[],plugins:[],content:{files:[]},theme:{},extend:{},result:structuredClone(Ht)};for(let e of t)Gt(r,e);for(let e of r.configs)"darkMode"in e&&void 0!==e.darkMode&&(r.result.darkMode=e.darkMode??null),"prefix"in e&&void 0!==e.prefix&&(r.result.prefix=e.prefix??""),"blocklist"in e&&void 0!==e.blocklist&&(r.result.blocklist=e.blocklist??[]),"important"in e&&void 0!==e.important&&(r.result.important=e.important??!1);let n=function(e){let t=new Set,r=kt(e.design,(()=>e.theme),o),n=Object.assign(r,{theme:r,colors:Wt});function o(e){return"function"==typeof e?e(n)??null:e??null}for(let r of e.configs){let n=r.theme??{},o=n.extend??{};for(let e in n)"extend"!==e&&t.add(e);Object.assign(e.theme,n);for(let t in o)e.extend[t]??=[],e.extend[t].push(o[t])}delete e.theme.extend;for(let t in e.extend){let r=[e.theme[t],...e.extend[t]];e.theme[t]=()=>wt({},r.map(o),Yt)}for(let t in e.theme)e.theme[t]=o(e.theme[t]);if(e.theme.screens&&"object"==typeof e.theme.screens)for(let t of Object.keys(e.theme.screens)){let r=e.theme.screens[t];r&&"object"==typeof r&&("raw"in r||"max"in r||"min"in r&&(e.theme.screens[t]=r.min))}return t}(r);return{resolvedConfig:{...r.result,content:r.content,theme:r.theme,plugins:r.plugins},replacedThemeKeys:n}}function Yt(e,t){return Array.isArray(e)&&vt(e[0])?e.concat(t):Array.isArray(t)&&vt(t[0])&&vt(e)?[e,...t]:Array.isArray(t)?t:void 0}function Gt(e,{config:t,base:r,path:n,reference:o}){let a=[];for(let e of t.plugins??[])"__isOptionsFunction"in e?a.push({...e(),reference:o}):"handler"in e?a.push({...e,reference:o}):a.push({handler:e,reference:o});if(Array.isArray(t.presets)&&0===t.presets.length)throw new Error("Error in the config file/plugin/preset. An empty preset (`preset: []`) is not currently supported.");for(let a of t.presets??[])Gt(e,{path:n,base:r,config:a,reference:o});for(let t of a)e.plugins.push(t),t.config&&Gt(e,{path:n,base:r,config:t.config,reference:!!t.reference});let i=t.content??[],l=Array.isArray(i)?i:i.files;for(let t of l)e.content.files.push("object"==typeof t?t:{base:r,pattern:t});e.configs.push(t)}function Jt(e,t){let r=e.theme.container||{};if("object"!=typeof r||null===r)return;let n=function({center:e,padding:t,screens:r},n){let o=[],a=null;if(e&&o.push(y("margin-inline","auto")),("string"==typeof t||"object"==typeof t&&null!==t&&"DEFAULT"in t)&&o.push(y("padding-inline","string"==typeof t?t:t.DEFAULT)),"object"==typeof r&&null!==r){a=new Map;let e=Array.from(n.theme.namespace("--breakpoint").entries());if(e.sort(((e,t)=>re(e[1],t[1],"asc"))),e.length>0){let[t]=e[0];o.push(k("@media",`(width >= --theme(--breakpoint-${t}))`,[y("max-width","none")]))}for(let[e,t]of Object.entries(r)){if("object"==typeof t){if(!("min"in t))continue;t=t.min}a.set(e,k("@media",`(width >= ${t})`,[y("max-width",t)]))}}if("object"==typeof t&&null!==t){let e=Object.entries(t).filter((([e])=>"DEFAULT"!==e)).map((([e,t])=>[e,n.theme.resolveValue(e,["--breakpoint"]),t])).filter(Boolean);e.sort(((e,t)=>re(e[1],t[1],"asc")));for(let[t,,r]of e)if(a&&a.has(t))a.get(t).nodes.push(y("padding-inline",r));else{if(a)continue;o.push(k("@media",`(width >= theme(--breakpoint-${t}))`,[y("padding-inline",r)]))}}if(a)for(let[,e]of a)o.push(e);return o}(r,t);0!==n.length&&t.utilities.static("container",(()=>structuredClone(n)))}function Xt({addVariant:e,config:t}){let r=t("darkMode",null),[n,o=".dark"]=Array.isArray(r)?r:[r];if("variant"===n){let e;if(Array.isArray(o)||"function"==typeof o?e=o:"string"==typeof o&&(e=[o]),Array.isArray(e))for(let t of e)".dark"===t?(n=!1,console.warn('When using `variant` for `darkMode`, you must provide a selector.\nExample: `darkMode: ["variant", ".your-selector &"]`')):t.includes("&")||(n=!1,console.warn('When using `variant` for `darkMode`, your selector must contain `&`.\nExample `darkMode: ["variant", ".your-selector &"]`'));o=e}null===n||("selector"===n?e("dark",`&:where(${o}, ${o} *)`):"media"===n?e("dark","@media (prefers-color-scheme: dark)"):"variant"===n?e("dark",o):"class"===n&&e("dark",`&:is(${o} *)`))}function Qt(e){return(Array.isArray(e)?e:[e]).map((e=>"string"==typeof e?{min:e}:e&&"object"==typeof e?e:null)).map((e=>{if(null===e)return null;if("raw"in e)return e.raw;let t="";return void 0!==e.max&&(t+=`${e.max} >= `),t+="width",void 0!==e.min&&(t+=` >= ${e.min}`),`(${t})`})).filter(Boolean).join(", ")}var er=/^[a-z]+$/;async function tr({designSystem:e,base:t,ast:r,loadModule:n,sources:o}){let a=0,i=[],l=[];A(r,((e,{parent:t,replaceWith:r,context:n})=>{if("at-rule"===e.kind){if("@plugin"===e.name){if(null!==t)throw new Error("`@plugin` cannot be nested.");let o=e.params.slice(1,-1);if(0===o.length)throw new Error("`@plugin` must have a path.");let l={};for(let t of e.nodes??[]){if("declaration"!==t.kind)throw new Error(`Unexpected \`@plugin\` option:\n\n${T([t])}\n\n\`@plugin\` options must be a flat list of declarations.`);if(void 0===t.value)continue;let e=R(t.value,",").map((e=>{if("null"===(e=e.trim()))return null;if("true"===e)return!0;if("false"===e)return!1;if(!Number.isNaN(Number(e)))return Number(e);if('"'===e[0]&&'"'===e[e.length-1]||"'"===e[0]&&"'"===e[e.length-1])return e.slice(1,-1);if("{"===e[0]&&"}"===e[e.length-1])throw new Error(`Unexpected \`@plugin\` option: Value of declaration \`${T([t]).trim()}\` is not supported.\n\nUsing an object as a plugin option is currently only supported in JavaScript configuration files.`);return e}));l[t.property]=1===e.length?e[0]:e}return i.push([{id:o,base:n.base,reference:!!n.reference},Object.keys(l).length>0?l:null]),r([]),void(a|=4)}if("@config"===e.name){if(e.nodes.length>0)throw new Error("`@config` cannot have a body.");if(null!==t)throw new Error("`@config` cannot be nested.");return l.push({id:e.params.slice(1,-1),base:n.base,reference:!!n.reference}),r([]),void(a|=4)}}})),function(e){for(let[t,r]of[["t","top"],["tr","top right"],["r","right"],["br","bottom right"],["b","bottom"],["bl","bottom left"],["l","left"],["tl","top left"]])e.utilities.static(`bg-gradient-to-${t}`,(()=>[y("--tw-gradient-position",`to ${r} in oklab`),y("background-image","linear-gradient(var(--tw-gradient-stops))")]));e.utilities.static("bg-left-top",(()=>[y("background-position","left top")])),e.utilities.static("bg-right-top",(()=>[y("background-position","right top")])),e.utilities.static("bg-left-bottom",(()=>[y("background-position","left bottom")])),e.utilities.static("bg-right-bottom",(()=>[y("background-position","right bottom")])),e.utilities.static("object-left-top",(()=>[y("object-position","left top")])),e.utilities.static("object-right-top",(()=>[y("object-position","right top")])),e.utilities.static("object-left-bottom",(()=>[y("object-position","left bottom")])),e.utilities.static("object-right-bottom",(()=>[y("object-position","right bottom")])),e.utilities.functional("max-w-screen",(t=>{if(!t.value||"arbitrary"===t.value.kind)return;let r=e.theme.resolve(t.value.value,["--breakpoint"]);return r?[y("max-width",r)]:void 0})),e.utilities.static("overflow-ellipsis",(()=>[y("text-overflow","ellipsis")])),e.utilities.static("decoration-slice",(()=>[y("-webkit-box-decoration-break","slice"),y("box-decoration-break","slice")])),e.utilities.static("decoration-clone",(()=>[y("-webkit-box-decoration-break","clone"),y("box-decoration-break","clone")])),e.utilities.functional("flex-shrink",(e=>{if(!e.modifier){if(!e.value)return[y("flex-shrink","1")];if("arbitrary"===e.value.kind)return[y("flex-shrink",e.value.value)];if(ye(e.value.value))return[y("flex-shrink",e.value.value)]}})),e.utilities.functional("flex-grow",(e=>{if(!e.modifier){if(!e.value)return[y("flex-grow","1")];if("arbitrary"===e.value.kind)return[y("flex-grow",e.value.value)];if(ye(e.value.value))return[y("flex-grow",e.value.value)]}}))}(e);let s=e.resolveThemeValue;if(e.resolveThemeValue=function(n,i){return n.startsWith("--")?s(n,i):(a|=rr({designSystem:e,base:t,ast:r,sources:o,configs:[],pluginDetails:[]}),e.resolveThemeValue(n,i))},!i.length&&!l.length)return 0;let[c,u]=await Promise.all([Promise.all(l.map((async({id:e,base:t,reference:r})=>{let o=await n(e,t,"config");return{path:e,base:o.base,config:o.module,reference:r}}))),Promise.all(i.map((async([{id:e,base:t,reference:r},o])=>{let a=await n(e,t,"plugin");return{path:e,base:a.base,plugin:a.module,options:o,reference:r}})))]);return a|=rr({designSystem:e,base:t,ast:r,sources:o,configs:c,pluginDetails:u}),a}function rr({designSystem:e,base:t,ast:r,sources:n,configs:o,pluginDetails:a}){let i=0,l=[...a.map((e=>{if(!e.options)return{config:{plugins:[e.plugin]},base:e.base,reference:e.reference};if("__isOptionsFunction"in e.plugin)return{config:{plugins:[e.plugin(e.options)]},base:e.base,reference:e.reference};throw new Error(`The plugin "${e.path}" does not accept options`)})),...o],{resolvedConfig:s}=Zt(e,[{config:qt(e.theme),base:t,reference:!0},...l,{config:{plugins:[Xt]},base:t,reference:!0}]),{resolvedConfig:c,replacedThemeKeys:u}=Zt(e,l),d=e.resolveThemeValue;e.resolveThemeValue=function(e,t){if("-"===e[0]&&"-"===e[1])return d(e,t);let r=h.theme(e,void 0);return Array.isArray(r)&&2===r.length?r[0]:Array.isArray(r)?r.join(", "):"string"==typeof r?r:void 0};let f,p={designSystem:e,ast:r,resolvedConfig:s,featuresRef:{set current(e){i|=e}}},h=Et({...p,referenceMode:!1});for(let{handler:e,reference:t}of s.plugins)t?(f||=Et({...p,referenceMode:!0}),e(f)):e(h);if(ft(e,c,u),Ft(e,c),function(e,t){let r=e.theme.aria||{},n=e.theme.supports||{},o=e.theme.data||{};if(Object.keys(r).length>0){let e=t.variants.get("aria"),n=e?.applyFn,o=e?.compounds;t.variants.functional("aria",((e,t)=>{let o=t.value;return o&&"named"===o.kind&&o.value in r?n?.(e,{...t,value:{kind:"arbitrary",value:r[o.value]}}):n?.(e,t)}),{compounds:o})}if(Object.keys(n).length>0){let e=t.variants.get("supports"),r=e?.applyFn,o=e?.compounds;t.variants.functional("supports",((e,t)=>{let o=t.value;return o&&"named"===o.kind&&o.value in n?r?.(e,{...t,value:{kind:"arbitrary",value:n[o.value]}}):r?.(e,t)}),{compounds:o})}if(Object.keys(o).length>0){let e=t.variants.get("data"),r=e?.applyFn,n=e?.compounds;t.variants.functional("data",((e,t)=>{let n=t.value;return n&&"named"===n.kind&&n.value in o?r?.(e,{...t,value:{kind:"arbitrary",value:o[n.value]}}):r?.(e,t)}),{compounds:n})}}(c,e),function(e,t){let r=e.theme.screens||{},n=t.variants.get("min")?.order??0,o=[];for(let[e,a]of Object.entries(r)){let r=function(r){t.variants.static(e,(e=>{e.nodes=[k("@media",c,e.nodes)]}),{order:r})},i=t.variants.get(e),l=t.theme.resolveValue(e,["--breakpoint"]);if(i&&l&&!t.theme.hasDefault(`--breakpoint-${e}`))continue;let s=!0;"string"==typeof a&&(s=!1);let c=Qt(a);s?o.push(r):r(n)}if(0!==o.length){for(let[,e]of t.variants.variants)e.order>n&&(e.order+=o.length);t.variants.compareFns=new Map(Array.from(t.variants.compareFns).map((([e,t])=>(e>n&&(e+=o.length),[e,t]))));for(let[e,t]of o.entries())t(n+e+1)}}(c,e),Jt(c,e),!e.theme.prefix&&s.prefix){if(s.prefix.endsWith("-")&&(s.prefix=s.prefix.slice(0,-1),console.warn(`The prefix "${s.prefix}" is invalid. Prefixes must be lowercase ASCII letters (a-z) only and is written as a variant before all utilities. We have fixed up the prefix for you. Remove the trailing \`-\` to silence this warning.`)),!er.test(s.prefix))throw new Error(`The prefix "${s.prefix}" is invalid. Prefixes must be lowercase ASCII letters (a-z) only.`);e.theme.prefix=s.prefix}if(!e.important&&!0===s.important&&(e.important=!0),"string"==typeof s.important){let e=s.important;A(r,((t,{replaceWith:r,parent:n})=>{if("at-rule"===t.kind&&"@tailwind"===t.name&&"utilities"===t.params)return"rule"===n?.kind&&n.selector===e||r(w(e,[t])),2}))}for(let t of s.blocklist)e.invalidCandidates.add(t);for(let e of s.content.files){if("raw"in e)throw new Error(`Error in the config file/plugin/preset. The \`content\` key contains a \`raw\` entry:\n\n${JSON.stringify(e,null,2)}\n\nThis feature is not currently supported.`);let t=!1;"!"==e.pattern[0]&&(t=!0,e.pattern=e.pattern.slice(1)),n.push({...e,negated:t})}return i}function nr({ast:e}){let t=new c((e=>function(e){let t=[0];for(let r=0;r0;){let o=n>>1,a=r+o;t[a]<=e?(r=a+1,n=n-o-1):n=o}return r-=1,{line:r+1,column:e-t[r]}},findOffset:function({line:e,column:r}){e-=1,e=Math.min(Math.max(e,0),t.length-1);let n=t[e],o=t[e+1]??n;return Math.min(Math.max(n+r,0),o)}}}(e.code))),r=new c((e=>({url:e.file,content:e.code,ignore:!1}))),n={file:null,sources:[],mappings:[]};A(e,(e=>{if(!e.src||!e.dst)return;let o=r.get(e.src[0]);if(!o.content)return;let a=t.get(e.src[0]),i=t.get(e.dst[0]),l=o.content.slice(e.src[1],e.src[2]),s=0;for(let t of l.split("\n")){if(""!==t.trim()){let t=a.find(e.src[1]+s),r=i.find(e.dst[1]);n.mappings.push({name:null,originalPosition:{source:o,...t},generatedPosition:r})}s+=t.length,s+=1}let c=a.find(e.src[2]),u=i.find(e.dst[2]);n.mappings.push({name:null,originalPosition:{source:o,...c},generatedPosition:u})}));for(let e of t.keys())n.sources.push(r.get(e));return n.mappings.sort(((e,t)=>e.generatedPosition.line-t.generatedPosition.line||e.generatedPosition.column-t.generatedPosition.column||(e.originalPosition?.line??0)-(t.originalPosition?.line??0)||(e.originalPosition?.column??0)-(t.originalPosition?.column??0))),n}var or=/^(-?\d+)\.\.(-?\d+)(?:\.\.(-?\d+))?$/;function ar(e){let t=e.indexOf("{");if(-1===t)return[e];let r=[],n=e.slice(0,t),o=e.slice(t),a=0,i=o.lastIndexOf("}");for(let e=0;e0&&(a=-a);for(let r=e;o?r<=t:r>=t;r+=a)i.push(r.toString())}return i}(s):R(s,","),l=l.flatMap((e=>ar(e)));let u=ar(c);for(let e of u)for(let t of l)r.push(n+t+e);return r}var ir=/^[a-z]+$/;function lr(){throw new Error("No `loadModule` function provided to `compile`")}function sr(){throw new Error("No `loadStylesheet` function provided to `compile`")}async function cr(e,{base:t="",from:r,loadModule:n=lr,loadStylesheet:i=sr}={}){let l=0;e=[$({base:t},e)],l|=await ut(e,t,i,0,void 0!==r);let c=null,u=new s,d=[],f=[],g=null,v=null,x=[],j=[],C=[],S=[],K=null;A(e,((e,{parent:t,replaceWith:r,context:n})=>{if("at-rule"===e.kind){if("@tailwind"===e.name&&("utilities"===e.params||e.params.startsWith("utilities"))){if(null!==v)return void r([]);if(n.reference)return void r([]);let t=R(e.params," ");for(let e of t)if(e.startsWith("source(")){let t=e.slice(7,-1);if("none"===t){K=t;continue}if('"'===t[0]&&'"'!==t[t.length-1]||"'"===t[0]&&"'"!==t[t.length-1]||"'"!==t[0]&&'"'!==t[0])throw new Error("`source(…)` paths must be quoted.");K={base:n.sourceBase??n.base,pattern:t.slice(1,-1)}}v=e,l|=16}if("@utility"===e.name){if(null!==t)throw new Error("`@utility` cannot be nested.");if(0===e.nodes.length)throw new Error(`\`@utility ${e.params}\` is empty. Utilities should include at least one property.`);let r=function(e){let t=e.params;return Ke.test(t)?r=>{let n={"--value":{usedSpacingInteger:!1,usedSpacingNumber:!1,themeKeys:new Set,literals:new Set},"--modifier":{usedSpacingInteger:!1,usedSpacingNumber:!1,themeKeys:new Set,literals:new Set}};A(e.nodes,(e=>{if("declaration"!==e.kind||!e.value||!e.value.includes("--value(")&&!e.value.includes("--modifier("))return;let t=m(e.value);p(t,(e=>{if("function"!==e.kind)return;if(!("--spacing"!==e.value||n["--modifier"].usedSpacingNumber&&n["--value"].usedSpacingNumber))return p(e.nodes,(e=>{if("function"!==e.kind||"--value"!==e.value&&"--modifier"!==e.value)return;let t=e.value;for(let r of e.nodes)if("word"===r.kind)if("integer"===r.value)n[t].usedSpacingInteger||=!0;else if("number"===r.value&&(n[t].usedSpacingNumber||=!0,n["--modifier"].usedSpacingNumber&&n["--value"].usedSpacingNumber))return 2})),0;if("--value"!==e.value&&"--modifier"!==e.value)return;let t=R(h(e.nodes),",");for(let[e,r]of t.entries())r=r.replace(/\\\*/g,"*"),r=r.replace(/--(.*?)\s--(.*?)/g,"--$1-*--$2"),r=r.replace(/\s+/g,""),r=r.replace(/(-\*){2,}/g,"-*"),"-"===r[0]&&"-"===r[1]&&!r.includes("-*")&&(r+="-*"),t[e]=r;e.nodes=m(t.join(","));for(let t of e.nodes)if("word"!==t.kind||'"'!==t.value[0]&&"'"!==t.value[0]||t.value[0]!==t.value[t.value.length-1]){if("word"===t.kind&&"-"===t.value[0]&&"-"===t.value[1]){let r=t.value.replace(/-\*.*$/g,"");n[e.value].themeKeys.add(r)}else if("word"===t.kind&&("["!==t.value[0]||"]"!==t.value[t.value.length-1])&&!_e.includes(t.value)){console.warn(`Unsupported bare value data type: "${t.value}".\nOnly valid data types are: ${_e.map((e=>`"${e}"`)).join(", ")}.\n`);let r=t.value,n=structuredClone(e),o="¶";p(n.nodes,((e,{replaceWith:t})=>{"word"===e.kind&&e.value===r&&t({kind:"word",value:o})}));let a="^".repeat(h([t]).length),i=h([n]).indexOf(o),l=["```css",h([e])," ".repeat(i)+a,"```"].join("\n");console.warn(l)}}else{let r=t.value.slice(1,-1);n[e.value].literals.add(r)}})),e.value=h(t)})),r.utilities.functional(t.slice(0,-2),(t=>{let n=structuredClone(e),o=t.value,a=t.modifier;if(null===o)return;let i=!1,l=!1,s=!1,c=!1,u=new Map,d=!1;if(A([n],((e,{parent:t,replaceWith:n})=>{if("rule"!==t?.kind&&"at-rule"!==t?.kind||"declaration"!==e.kind||!e.value)return;let f=m(e.value);0===(p(f,((f,{replaceWith:p})=>{if("function"===f.kind){if("--value"===f.value){i=!0;let a=Me(o,f,r);return a?(l=!0,a.ratio?d=!0:u.set(e,t),p(a.nodes),1):(i||=!1,n([]),2)}if("--modifier"===f.value){if(null===a)return n([]),2;s=!0;let e=Me(a,f,r);return e?(c=!0,p(e.nodes),1):(s||=!1,n([]),2)}}}))??0)&&(e.value=h(f))})),i&&!l||s&&!c||d&&c||a&&!d&&!c)return null;if(d)for(let[e,t]of u){let r=t.nodes.indexOf(e);-1!==r&&t.nodes.splice(r,1)}return n.nodes})),r.utilities.suggest(t.slice(0,-2),(()=>{let e=[],t=[];for(let[o,{literals:a,usedSpacingNumber:i,usedSpacingInteger:l,themeKeys:s}]of[[e,n["--value"]],[t,n["--modifier"]]]){for(let e of a)o.push(e);if(i)o.push(...Ee);else if(l)for(let e of Ee)ye(e)&&o.push(e);for(let e of r.theme.keysInNamespaces(s))o.push(e.replace(De,((e,t,r)=>`${t}.${r}`)))}return[{values:e,modifiers:t}]}))}:Se.test(t)?r=>{r.utilities.static(t,(()=>structuredClone(e.nodes)))}:null}(e);if(null===r)throw new Error(`\`@utility ${e.params}\` defines an invalid utility name. Utilities should be alphanumeric and start with a lowercase letter.`);f.push(r)}if("@source"===e.name){if(e.nodes.length>0)throw new Error("`@source` cannot have a body.");if(null!==t)throw new Error("`@source` cannot be nested.");let o=!1,a=!1,i=e.params;if("n"===i[0]&&i.startsWith("not ")&&(o=!0,i=i.slice(4)),"i"===i[0]&&i.startsWith("inline(")&&(a=!0,i=i.slice(7,-1)),'"'===i[0]&&'"'!==i[i.length-1]||"'"===i[0]&&"'"!==i[i.length-1]||"'"!==i[0]&&'"'!==i[0])throw new Error("`@source` paths must be quoted.");let l=i.slice(1,-1);if(a){let e=o?S:C,t=R(l," ");for(let r of t)for(let t of ar(r))e.push(t)}else j.push({base:n.base,pattern:l,negated:o});return void r([])}if("@variant"===e.name&&(null===t?0===e.nodes.length?e.name="@custom-variant":(A(e.nodes,(t=>{if("at-rule"===t.kind&&"@slot"===t.name)return e.name="@custom-variant",2})),"@variant"===e.name&&x.push(e)):x.push(e)),"@custom-variant"===e.name){if(null!==t)throw new Error("`@custom-variant` cannot be nested.");r([]);let[n,o]=R(e.params," ");if(!Ge.test(n))throw new Error(`\`@custom-variant ${n}\` defines an invalid variant name. Variants should only contain alphanumeric, dashes or underscore characters.`);if(e.nodes.length>0&&o)throw new Error(`\`@custom-variant ${n}\` cannot have both a selector and a body.`);if(0===e.nodes.length){if(!o)throw new Error(`\`@custom-variant ${n}\` has no selector or body.`);let e=R(o.slice(1,-1),",");if(0===e.length||e.some((e=>""===e.trim())))throw new Error(`\`@custom-variant ${n} (${e.join(",")})\` selector is invalid.`);let t=[],r=[];for(let n of e)n=n.trim(),"@"===n[0]?t.push(n):r.push(n);return void d.push((e=>{e.variants.static(n,(e=>{let n=[];r.length>0&&n.push(w(r.join(", "),e.nodes));for(let r of t)n.push(b(r,e.nodes));e.nodes=n}),{compounds:Xe([...r,...t])})}))}return void d.push((t=>{t.variants.fromAst(n,e.nodes)}))}if("@media"===e.name){let t=R(e.params," "),o=[];for(let r of t)if(r.startsWith("source(")){let t=r.slice(7,-1);A(e.nodes,((e,{replaceWith:r})=>{if("at-rule"===e.kind&&"@tailwind"===e.name&&"utilities"===e.params)return e.params+=` source(${t})`,r([$({sourceBase:n.base},[e])]),2}))}else if(r.startsWith("theme(")){let t=r.slice(6,-1),n=t.includes("reference");A(e.nodes,(e=>{if("at-rule"!==e.kind){if(n)throw new Error('Files imported with `@import "…" theme(reference)` must only contain `@theme` blocks.\nUse `@reference "…";` instead.');return 0}if("@theme"===e.name)return e.params+=" "+t,1}))}else if(r.startsWith("prefix(")){let t=r.slice(7,-1);A(e.nodes,(e=>{if("at-rule"===e.kind&&"@theme"===e.name)return e.params+=` prefix(${t})`,1}))}else"important"===r?c=!0:"reference"===r?e.nodes=[$({reference:!0},e.nodes)]:o.push(r);o.length>0?e.params=o.join(" "):t.length>0&&r(e.nodes)}if("@theme"===e.name){let[t,o]=function(e){let t=0,r=null;for(let n of R(e," "))"reference"===n?t|=2:"inline"===n?t|=1:"default"===n?t|=4:"static"===n?t|=8:n.startsWith("prefix(")&&n.endsWith(")")&&(r=n.slice(7,-1));return[t,r]}(e.params);if(n.reference&&(t|=2),o){if(!ir.test(o))throw new Error(`The prefix "${o}" is invalid. Prefixes must be lowercase ASCII letters (a-z) only.`);u.prefix=o}return A(e.nodes,(r=>{if("at-rule"===r.kind&&"@keyframes"===r.name)return u.addKeyframes(r),1;if("comment"===r.kind)return;if("declaration"===r.kind&&r.property.startsWith("--"))return void u.add(a(r.property),r.value??"",t,r.src);let n=T([k(e.name,e.params,[r])]).split("\n").map(((e,t,r)=>`${0===t||t>=r.length-2?" ":">"} ${e}`)).join("\n");throw new Error(`\`@theme\` blocks must only contain custom properties or \`@keyframes\`.\n\n${n}`)})),g?r([]):(g=w(":root, :host",[]),g.src=e.src,r([g])),1}}}));let E=tt(u);if(c&&(E.important=c),S.length>0)for(let e of S)E.invalidCandidates.add(e);l|=await tr({designSystem:E,base:t,ast:e,loadModule:n,sources:j});for(let e of d)e(E);for(let e of f)e(E);if(g){let t=[];for(let[e,r]of E.theme.entries()){if(2&r.options)continue;let n=y(o(e),r.value);n.src=r.src,t.push(n)}let r=E.theme.getKeyframes();for(let t of r)e.push($({theme:!0},[z([t])]));g.nodes=[$({theme:!0},t)]}if(v){let e=v;e.kind="context",e.context={}}if(x.length>0){for(let e of x){let t=w("&",e.nodes),r=e.params,n=E.parseVariant(r);if(null===n)throw new Error(`Cannot use \`@variant\` with unknown variant: ${r}`);if(null===ot(t,n,E.variants))throw new Error(`Cannot use \`@variant\` with variant: ${r}`);Object.assign(e,t)}l|=32}return l|=Pe(e,E),l|=st(e,E),A(e,((e,{replaceWith:t})=>{if("at-rule"===e.kind)return"@utility"===e.name&&t([]),1})),{designSystem:E,ast:e,sources:j,root:K,utilitiesNode:v,features:l,inlineCandidates:C}}async function ur(e,r={}){let n=t(e,{from:r.from}),o=await async function(e,t={}){let{designSystem:r,ast:n,sources:o,root:a,utilitiesNode:i,features:l,inlineCandidates:s}=await cr(e,t);function c(e){r.invalidCandidates.add(e)}n.unshift(x("! tailwindcss v4.1.7 | MIT License | https://tailwindcss.com "));let u=new Set,d=null,f=0,p=!1;for(let e of s)r.invalidCandidates.has(e)||(u.add(e),p=!0);return{sources:o,root:a,features:l,build(o){if(0===l)return e;if(!i)return d??=C(n,r,t.polyfills),d;let a=p,s=!1;p=!1;let h=u.size;for(let e of o)if(!r.invalidCandidates.has(e))if("-"===e[0]&&"-"===e[1]){let t=r.theme.markUsedVariable(e);a||=t,s||=t}else u.add(e),a||=u.size!==h;if(!a)return d??=C(n,r,t.polyfills),d;let m=nt(u,r,{onInvalidCandidate:c}).astNodes;return t.from&&A(m,(e=>{e.src??=i.src})),s||f!==m.length?(f=m.length,i.nodes=m,d=C(n,r,t.polyfills),d):(d??=C(n,r,t.polyfills),d)}}}(n,r),a=n,i=e;return{...o,build(e){let t=o.build(e);return t===a||(i=T(t,!!r.from),a=t),i},buildSourceMap:()=>nr({ast:a})}}var dr={index:"@layer theme, base, components, utilities;\n\n@import './theme.css' layer(theme);\n@import './preflight.css' layer(base);\n@import './utilities.css' layer(utilities);\n",preflight:"/*\n 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n 2. Remove default margins and padding\n 3. Reset all borders.\n*/\n\n*,\n::after,\n::before,\n::backdrop,\n::file-selector-button {\n box-sizing: border-box; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 2 */\n border: 0 solid; /* 3 */\n}\n\n/*\n 1. Use a consistent sensible line-height in all browsers.\n 2. Prevent adjustments of font size after orientation changes in iOS.\n 3. Use a more readable tab size.\n 4. Use the user's configured `sans` font-family by default.\n 5. Use the user's configured `sans` font-feature-settings by default.\n 6. Use the user's configured `sans` font-variation-settings by default.\n 7. Disable tap highlights on iOS.\n*/\n\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n tab-size: 4; /* 3 */\n font-family: --theme(\n --default-font-family,\n ui-sans-serif,\n system-ui,\n sans-serif,\n 'Apple Color Emoji',\n 'Segoe UI Emoji',\n 'Segoe UI Symbol',\n 'Noto Color Emoji'\n ); /* 4 */\n font-feature-settings: --theme(--default-font-feature-settings, normal); /* 5 */\n font-variation-settings: --theme(--default-font-variation-settings, normal); /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n\n/*\n 1. Add the correct height in Firefox.\n 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n 3. Reset the default border style to a 1px solid border.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\n Add the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\n Remove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\n Reset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n}\n\n/*\n Add the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n 1. Use the user's configured `mono` font-family by default.\n 2. Use the user's configured `mono` font-feature-settings by default.\n 3. Use the user's configured `mono` font-variation-settings by default.\n 4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: --theme(\n --default-mono-font-family,\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n 'Liberation Mono',\n 'Courier New',\n monospace\n ); /* 1 */\n font-feature-settings: --theme(--default-mono-font-feature-settings, normal); /* 2 */\n font-variation-settings: --theme(--default-mono-font-variation-settings, normal); /* 3 */\n font-size: 1em; /* 4 */\n}\n\n/*\n Add the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\n Prevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n 3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n Use the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\n Add the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\n Add the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\n Make lists unstyled by default.\n*/\n\nol,\nul,\nmenu {\n list-style: none;\n}\n\n/*\n 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\n Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/*\n 1. Inherit font styles in all browsers.\n 2. Remove border radius in all browsers.\n 3. Remove background color in all browsers.\n 4. Ensure consistent opacity for disabled states in all browsers.\n*/\n\nbutton,\ninput,\nselect,\noptgroup,\ntextarea,\n::file-selector-button {\n font: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n border-radius: 0; /* 2 */\n background-color: transparent; /* 3 */\n opacity: 1; /* 4 */\n}\n\n/*\n Restore default font weight.\n*/\n\n:where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n}\n\n/*\n Restore indentation.\n*/\n\n:where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n}\n\n/*\n Restore space after button.\n*/\n\n::file-selector-button {\n margin-inline-end: 4px;\n}\n\n/*\n Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n*/\n\n::placeholder {\n opacity: 1;\n}\n\n/*\n Set the default placeholder color to a semi-transparent version of the current text color in browsers that do not\n crash when using `color-mix(…)` with `currentcolor`. (https://github.com/tailwindlabs/tailwindcss/issues/17194)\n*/\n\n@supports (not (-webkit-appearance: -apple-pay-button)) /* Not Safari */ or\n (contain-intrinsic-size: 1px) /* Safari 17+ */ {\n ::placeholder {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n}\n\n/*\n Prevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n Remove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n 1. Ensure date/time inputs have the same height when empty in iOS Safari.\n 2. Ensure text alignment can be changed on date/time inputs in iOS Safari.\n*/\n\n::-webkit-date-and-time-value {\n min-height: 1lh; /* 1 */\n text-align: inherit; /* 2 */\n}\n\n/*\n Prevent height from changing on date/time inputs in macOS Safari when the input is set to `display: block`.\n*/\n\n::-webkit-datetime-edit {\n display: inline-flex;\n}\n\n/*\n Remove excess padding from pseudo-elements in date/time inputs to ensure consistent height across browsers.\n*/\n\n::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n}\n\n::-webkit-datetime-edit,\n::-webkit-datetime-edit-year-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-minute-field,\n::-webkit-datetime-edit-second-field,\n::-webkit-datetime-edit-millisecond-field,\n::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n}\n\n/*\n Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\n Correct the inability to style the border radius in iOS Safari.\n*/\n\nbutton,\ninput:where([type='button'], [type='reset'], [type='submit']),\n::file-selector-button {\n appearance: button;\n}\n\n/*\n Correct the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n Make elements with the HTML hidden attribute stay hidden by default.\n*/\n\n[hidden]:where(:not([hidden='until-found'])) {\n display: none !important;\n}\n",theme:"@theme default {\n --font-sans:\n ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n 'Noto Color Emoji';\n --font-serif: ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif;\n --font-mono:\n ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',\n monospace;\n\n --color-red-50: oklch(97.1% 0.013 17.38);\n --color-red-100: oklch(93.6% 0.032 17.717);\n --color-red-200: oklch(88.5% 0.062 18.334);\n --color-red-300: oklch(80.8% 0.114 19.571);\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-600: oklch(57.7% 0.245 27.325);\n --color-red-700: oklch(50.5% 0.213 27.518);\n --color-red-800: oklch(44.4% 0.177 26.899);\n --color-red-900: oklch(39.6% 0.141 25.723);\n --color-red-950: oklch(25.8% 0.092 26.042);\n\n --color-orange-50: oklch(98% 0.016 73.684);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-200: oklch(90.1% 0.076 70.697);\n --color-orange-300: oklch(83.7% 0.128 66.29);\n --color-orange-400: oklch(75% 0.183 55.934);\n --color-orange-500: oklch(70.5% 0.213 47.604);\n --color-orange-600: oklch(64.6% 0.222 41.116);\n --color-orange-700: oklch(55.3% 0.195 38.402);\n --color-orange-800: oklch(47% 0.157 37.304);\n --color-orange-900: oklch(40.8% 0.123 38.172);\n --color-orange-950: oklch(26.6% 0.079 36.259);\n\n --color-amber-50: oklch(98.7% 0.022 95.277);\n --color-amber-100: oklch(96.2% 0.059 95.617);\n --color-amber-200: oklch(92.4% 0.12 95.746);\n --color-amber-300: oklch(87.9% 0.169 91.605);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-500: oklch(76.9% 0.188 70.08);\n --color-amber-600: oklch(66.6% 0.179 58.318);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-amber-800: oklch(47.3% 0.137 46.201);\n --color-amber-900: oklch(41.4% 0.112 45.904);\n --color-amber-950: oklch(27.9% 0.077 45.635);\n\n --color-yellow-50: oklch(98.7% 0.026 102.212);\n --color-yellow-100: oklch(97.3% 0.071 103.193);\n --color-yellow-200: oklch(94.5% 0.129 101.54);\n --color-yellow-300: oklch(90.5% 0.182 98.111);\n --color-yellow-400: oklch(85.2% 0.199 91.936);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\n --color-yellow-700: oklch(55.4% 0.135 66.442);\n --color-yellow-800: oklch(47.6% 0.114 61.907);\n --color-yellow-900: oklch(42.1% 0.095 57.708);\n --color-yellow-950: oklch(28.6% 0.066 53.813);\n\n --color-lime-50: oklch(98.6% 0.031 120.757);\n --color-lime-100: oklch(96.7% 0.067 122.328);\n --color-lime-200: oklch(93.8% 0.127 124.321);\n --color-lime-300: oklch(89.7% 0.196 126.665);\n --color-lime-400: oklch(84.1% 0.238 128.85);\n --color-lime-500: oklch(76.8% 0.233 130.85);\n --color-lime-600: oklch(64.8% 0.2 131.684);\n --color-lime-700: oklch(53.2% 0.157 131.589);\n --color-lime-800: oklch(45.3% 0.124 130.933);\n --color-lime-900: oklch(40.5% 0.101 131.063);\n --color-lime-950: oklch(27.4% 0.072 132.109);\n\n --color-green-50: oklch(98.2% 0.018 155.826);\n --color-green-100: oklch(96.2% 0.044 156.743);\n --color-green-200: oklch(92.5% 0.084 155.995);\n --color-green-300: oklch(87.1% 0.15 154.449);\n --color-green-400: oklch(79.2% 0.209 151.711);\n --color-green-500: oklch(72.3% 0.219 149.579);\n --color-green-600: oklch(62.7% 0.194 149.214);\n --color-green-700: oklch(52.7% 0.154 150.069);\n --color-green-800: oklch(44.8% 0.119 151.328);\n --color-green-900: oklch(39.3% 0.095 152.535);\n --color-green-950: oklch(26.6% 0.065 152.934);\n\n --color-emerald-50: oklch(97.9% 0.021 166.113);\n --color-emerald-100: oklch(95% 0.052 163.051);\n --color-emerald-200: oklch(90.5% 0.093 164.15);\n --color-emerald-300: oklch(84.5% 0.143 164.978);\n --color-emerald-400: oklch(76.5% 0.177 163.223);\n --color-emerald-500: oklch(69.6% 0.17 162.48);\n --color-emerald-600: oklch(59.6% 0.145 163.225);\n --color-emerald-700: oklch(50.8% 0.118 165.612);\n --color-emerald-800: oklch(43.2% 0.095 166.913);\n --color-emerald-900: oklch(37.8% 0.077 168.94);\n --color-emerald-950: oklch(26.2% 0.051 172.552);\n\n --color-teal-50: oklch(98.4% 0.014 180.72);\n --color-teal-100: oklch(95.3% 0.051 180.801);\n --color-teal-200: oklch(91% 0.096 180.426);\n --color-teal-300: oklch(85.5% 0.138 181.071);\n --color-teal-400: oklch(77.7% 0.152 181.912);\n --color-teal-500: oklch(70.4% 0.14 182.503);\n --color-teal-600: oklch(60% 0.118 184.704);\n --color-teal-700: oklch(51.1% 0.096 186.391);\n --color-teal-800: oklch(43.7% 0.078 188.216);\n --color-teal-900: oklch(38.6% 0.063 188.416);\n --color-teal-950: oklch(27.7% 0.046 192.524);\n\n --color-cyan-50: oklch(98.4% 0.019 200.873);\n --color-cyan-100: oklch(95.6% 0.045 203.388);\n --color-cyan-200: oklch(91.7% 0.08 205.041);\n --color-cyan-300: oklch(86.5% 0.127 207.078);\n --color-cyan-400: oklch(78.9% 0.154 211.53);\n --color-cyan-500: oklch(71.5% 0.143 215.221);\n --color-cyan-600: oklch(60.9% 0.126 221.723);\n --color-cyan-700: oklch(52% 0.105 223.128);\n --color-cyan-800: oklch(45% 0.085 224.283);\n --color-cyan-900: oklch(39.8% 0.07 227.392);\n --color-cyan-950: oklch(30.2% 0.056 229.695);\n\n --color-sky-50: oklch(97.7% 0.013 236.62);\n --color-sky-100: oklch(95.1% 0.026 236.824);\n --color-sky-200: oklch(90.1% 0.058 230.902);\n --color-sky-300: oklch(82.8% 0.111 230.318);\n --color-sky-400: oklch(74.6% 0.16 232.661);\n --color-sky-500: oklch(68.5% 0.169 237.323);\n --color-sky-600: oklch(58.8% 0.158 241.966);\n --color-sky-700: oklch(50% 0.134 242.749);\n --color-sky-800: oklch(44.3% 0.11 240.79);\n --color-sky-900: oklch(39.1% 0.09 240.876);\n --color-sky-950: oklch(29.3% 0.066 243.157);\n\n --color-blue-50: oklch(97% 0.014 254.604);\n --color-blue-100: oklch(93.2% 0.032 255.585);\n --color-blue-200: oklch(88.2% 0.059 254.128);\n --color-blue-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-600: oklch(54.6% 0.245 262.881);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-blue-800: oklch(42.4% 0.199 265.638);\n --color-blue-900: oklch(37.9% 0.146 265.522);\n --color-blue-950: oklch(28.2% 0.091 267.935);\n\n --color-indigo-50: oklch(96.2% 0.018 272.314);\n --color-indigo-100: oklch(93% 0.034 272.788);\n --color-indigo-200: oklch(87% 0.065 274.039);\n --color-indigo-300: oklch(78.5% 0.115 274.713);\n --color-indigo-400: oklch(67.3% 0.182 276.935);\n --color-indigo-500: oklch(58.5% 0.233 277.117);\n --color-indigo-600: oklch(51.1% 0.262 276.966);\n --color-indigo-700: oklch(45.7% 0.24 277.023);\n --color-indigo-800: oklch(39.8% 0.195 277.366);\n --color-indigo-900: oklch(35.9% 0.144 278.697);\n --color-indigo-950: oklch(25.7% 0.09 281.288);\n\n --color-violet-50: oklch(96.9% 0.016 293.756);\n --color-violet-100: oklch(94.3% 0.029 294.588);\n --color-violet-200: oklch(89.4% 0.057 293.283);\n --color-violet-300: oklch(81.1% 0.111 293.571);\n --color-violet-400: oklch(70.2% 0.183 293.541);\n --color-violet-500: oklch(60.6% 0.25 292.717);\n --color-violet-600: oklch(54.1% 0.281 293.009);\n --color-violet-700: oklch(49.1% 0.27 292.581);\n --color-violet-800: oklch(43.2% 0.232 292.759);\n --color-violet-900: oklch(38% 0.189 293.745);\n --color-violet-950: oklch(28.3% 0.141 291.089);\n\n --color-purple-50: oklch(97.7% 0.014 308.299);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-200: oklch(90.2% 0.063 306.703);\n --color-purple-300: oklch(82.7% 0.119 306.383);\n --color-purple-400: oklch(71.4% 0.203 305.504);\n --color-purple-500: oklch(62.7% 0.265 303.9);\n --color-purple-600: oklch(55.8% 0.288 302.321);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-purple-800: oklch(43.8% 0.218 303.724);\n --color-purple-900: oklch(38.1% 0.176 304.987);\n --color-purple-950: oklch(29.1% 0.149 302.717);\n\n --color-fuchsia-50: oklch(97.7% 0.017 320.058);\n --color-fuchsia-100: oklch(95.2% 0.037 318.852);\n --color-fuchsia-200: oklch(90.3% 0.076 319.62);\n --color-fuchsia-300: oklch(83.3% 0.145 321.434);\n --color-fuchsia-400: oklch(74% 0.238 322.16);\n --color-fuchsia-500: oklch(66.7% 0.295 322.15);\n --color-fuchsia-600: oklch(59.1% 0.293 322.896);\n --color-fuchsia-700: oklch(51.8% 0.253 323.949);\n --color-fuchsia-800: oklch(45.2% 0.211 324.591);\n --color-fuchsia-900: oklch(40.1% 0.17 325.612);\n --color-fuchsia-950: oklch(29.3% 0.136 325.661);\n\n --color-pink-50: oklch(97.1% 0.014 343.198);\n --color-pink-100: oklch(94.8% 0.028 342.258);\n --color-pink-200: oklch(89.9% 0.061 343.231);\n --color-pink-300: oklch(82.3% 0.12 346.018);\n --color-pink-400: oklch(71.8% 0.202 349.761);\n --color-pink-500: oklch(65.6% 0.241 354.308);\n --color-pink-600: oklch(59.2% 0.249 0.584);\n --color-pink-700: oklch(52.5% 0.223 3.958);\n --color-pink-800: oklch(45.9% 0.187 3.815);\n --color-pink-900: oklch(40.8% 0.153 2.432);\n --color-pink-950: oklch(28.4% 0.109 3.907);\n\n --color-rose-50: oklch(96.9% 0.015 12.422);\n --color-rose-100: oklch(94.1% 0.03 12.58);\n --color-rose-200: oklch(89.2% 0.058 10.001);\n --color-rose-300: oklch(81% 0.117 11.638);\n --color-rose-400: oklch(71.2% 0.194 13.428);\n --color-rose-500: oklch(64.5% 0.246 16.439);\n --color-rose-600: oklch(58.6% 0.253 17.585);\n --color-rose-700: oklch(51.4% 0.222 16.935);\n --color-rose-800: oklch(45.5% 0.188 13.697);\n --color-rose-900: oklch(41% 0.159 10.272);\n --color-rose-950: oklch(27.1% 0.105 12.094);\n\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-slate-100: oklch(96.8% 0.007 247.896);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-slate-600: oklch(44.6% 0.043 257.281);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-slate-800: oklch(27.9% 0.041 260.031);\n --color-slate-900: oklch(20.8% 0.042 265.755);\n --color-slate-950: oklch(12.9% 0.042 264.695);\n\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: oklch(96.7% 0.003 264.542);\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-300: oklch(87.2% 0.01 258.338);\n --color-gray-400: oklch(70.7% 0.022 261.325);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-gray-600: oklch(44.6% 0.03 256.802);\n --color-gray-700: oklch(37.3% 0.034 259.733);\n --color-gray-800: oklch(27.8% 0.033 256.848);\n --color-gray-900: oklch(21% 0.034 264.665);\n --color-gray-950: oklch(13% 0.028 261.692);\n\n --color-zinc-50: oklch(98.5% 0 0);\n --color-zinc-100: oklch(96.7% 0.001 286.375);\n --color-zinc-200: oklch(92% 0.004 286.32);\n --color-zinc-300: oklch(87.1% 0.006 286.286);\n --color-zinc-400: oklch(70.5% 0.015 286.067);\n --color-zinc-500: oklch(55.2% 0.016 285.938);\n --color-zinc-600: oklch(44.2% 0.017 285.786);\n --color-zinc-700: oklch(37% 0.013 285.805);\n --color-zinc-800: oklch(27.4% 0.006 286.033);\n --color-zinc-900: oklch(21% 0.006 285.885);\n --color-zinc-950: oklch(14.1% 0.005 285.823);\n\n --color-neutral-50: oklch(98.5% 0 0);\n --color-neutral-100: oklch(97% 0 0);\n --color-neutral-200: oklch(92.2% 0 0);\n --color-neutral-300: oklch(87% 0 0);\n --color-neutral-400: oklch(70.8% 0 0);\n --color-neutral-500: oklch(55.6% 0 0);\n --color-neutral-600: oklch(43.9% 0 0);\n --color-neutral-700: oklch(37.1% 0 0);\n --color-neutral-800: oklch(26.9% 0 0);\n --color-neutral-900: oklch(20.5% 0 0);\n --color-neutral-950: oklch(14.5% 0 0);\n\n --color-stone-50: oklch(98.5% 0.001 106.423);\n --color-stone-100: oklch(97% 0.001 106.424);\n --color-stone-200: oklch(92.3% 0.003 48.717);\n --color-stone-300: oklch(86.9% 0.005 56.366);\n --color-stone-400: oklch(70.9% 0.01 56.259);\n --color-stone-500: oklch(55.3% 0.013 58.071);\n --color-stone-600: oklch(44.4% 0.011 73.639);\n --color-stone-700: oklch(37.4% 0.01 67.558);\n --color-stone-800: oklch(26.8% 0.007 34.298);\n --color-stone-900: oklch(21.6% 0.006 56.043);\n --color-stone-950: oklch(14.7% 0.004 49.25);\n\n --color-black: #000;\n --color-white: #fff;\n\n --spacing: 0.25rem;\n\n --breakpoint-sm: 40rem;\n --breakpoint-md: 48rem;\n --breakpoint-lg: 64rem;\n --breakpoint-xl: 80rem;\n --breakpoint-2xl: 96rem;\n\n --container-3xs: 16rem;\n --container-2xs: 18rem;\n --container-xs: 20rem;\n --container-sm: 24rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-xl: 36rem;\n --container-2xl: 42rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n --container-5xl: 64rem;\n --container-6xl: 72rem;\n --container-7xl: 80rem;\n\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --text-4xl: 2.25rem;\n --text-4xl--line-height: calc(2.5 / 2.25);\n --text-5xl: 3rem;\n --text-5xl--line-height: 1;\n --text-6xl: 3.75rem;\n --text-6xl--line-height: 1;\n --text-7xl: 4.5rem;\n --text-7xl--line-height: 1;\n --text-8xl: 6rem;\n --text-8xl--line-height: 1;\n --text-9xl: 8rem;\n --text-9xl--line-height: 1;\n\n --font-weight-thin: 100;\n --font-weight-extralight: 200;\n --font-weight-light: 300;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-extrabold: 800;\n --font-weight-black: 900;\n\n --tracking-tighter: -0.05em;\n --tracking-tight: -0.025em;\n --tracking-normal: 0em;\n --tracking-wide: 0.025em;\n --tracking-wider: 0.05em;\n --tracking-widest: 0.1em;\n\n --leading-tight: 1.25;\n --leading-snug: 1.375;\n --leading-normal: 1.5;\n --leading-relaxed: 1.625;\n --leading-loose: 2;\n\n --radius-xs: 0.125rem;\n --radius-sm: 0.25rem;\n --radius-md: 0.375rem;\n --radius-lg: 0.5rem;\n --radius-xl: 0.75rem;\n --radius-2xl: 1rem;\n --radius-3xl: 1.5rem;\n --radius-4xl: 2rem;\n\n --shadow-2xs: 0 1px rgb(0 0 0 / 0.05);\n --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / 0.05);\n --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / 0.05);\n --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / 0.05);\n\n --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / 0.05);\n --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15);\n --drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12);\n --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15);\n --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / 0.1);\n --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);\n\n --text-shadow-2xs: 0px 1px 0px rgb(0 0 0 / 0.15);\n --text-shadow-xs: 0px 1px 1px rgb(0 0 0 / 0.2);\n --text-shadow-sm:\n 0px 1px 0px rgb(0 0 0 / 0.075), 0px 1px 1px rgb(0 0 0 / 0.075), 0px 2px 2px rgb(0 0 0 / 0.075);\n --text-shadow-md:\n 0px 1px 1px rgb(0 0 0 / 0.1), 0px 1px 2px rgb(0 0 0 / 0.1), 0px 2px 4px rgb(0 0 0 / 0.1);\n --text-shadow-lg:\n 0px 1px 2px rgb(0 0 0 / 0.1), 0px 3px 2px rgb(0 0 0 / 0.1), 0px 4px 8px rgb(0 0 0 / 0.1);\n\n --ease-in: cubic-bezier(0.4, 0, 1, 1);\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n\n --animate-spin: spin 1s linear infinite;\n --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --animate-bounce: bounce 1s infinite;\n\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n @keyframes ping {\n 75%,\n 100% {\n transform: scale(2);\n opacity: 0;\n }\n }\n\n @keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n }\n\n @keyframes bounce {\n 0%,\n 100% {\n transform: translateY(-25%);\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\n }\n\n 50% {\n transform: none;\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n }\n }\n\n --blur-xs: 4px;\n --blur-sm: 8px;\n --blur-md: 12px;\n --blur-lg: 16px;\n --blur-xl: 24px;\n --blur-2xl: 40px;\n --blur-3xl: 64px;\n\n --perspective-dramatic: 100px;\n --perspective-near: 300px;\n --perspective-normal: 500px;\n --perspective-midrange: 800px;\n --perspective-distant: 1200px;\n\n --aspect-video: 16 / 9;\n\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: --theme(--font-sans, initial);\n --default-font-feature-settings: --theme(--font-sans--font-feature-settings, initial);\n --default-font-variation-settings: --theme(--font-sans--font-variation-settings, initial);\n --default-mono-font-family: --theme(--font-mono, initial);\n --default-mono-font-feature-settings: --theme(--font-mono--font-feature-settings, initial);\n --default-mono-font-variation-settings: --theme(--font-mono--font-variation-settings, initial);\n}\n\n/* Deprecated */\n@theme default inline reference {\n --blur: 8px;\n --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);\n --drop-shadow: 0 1px 2px rgb(0 0 0 / 0.1), 0 1px 1px rgb(0 0 0 / 0.06);\n --radius: 0.25rem;\n --max-width-prose: 65ch;\n}\n",utilities:"@tailwind utilities;\n"};console.warn("The browser build of Tailwind CSS should not be used in production. To use Tailwind CSS in production, use the Tailwind CLI, Vite plugin, or PostCSS plugin: https://tailwindcss.com/docs/installation");var fr,pr="text/tailwindcss",hr=new Set,mr="",gr=document.createElement("style"),vr=Promise.resolve(),wr=1,kr=new class{start(e){performance.mark(`${e} (start)`)}end(e,t){performance.mark(`${e} (end)`),performance.measure(e,{start:`${e} (start)`,end:`${e} (end)`,detail:t})}hit(e,t){performance.mark(e,{detail:t})}error(e){throw performance.mark("(error)",{detail:{error:`${e}`}}),e}};async function br(e,t){try{let r=function(){if("tailwindcss"===e)return{path:"virtual:tailwindcss/index.css",base:t,content:dr.index};if("tailwindcss/preflight"===e||"tailwindcss/preflight.css"===e||"./preflight.css"===e)return{path:"virtual:tailwindcss/preflight.css",base:t,content:dr.preflight};if("tailwindcss/theme"===e||"tailwindcss/theme.css"===e||"./theme.css"===e)return{path:"virtual:tailwindcss/theme.css",base:t,content:dr.theme};if("tailwindcss/utilities"===e||"tailwindcss/utilities.css"===e||"./utilities.css"===e)return{path:"virtual:tailwindcss/utilities.css",base:t,content:dr.utilities};throw new Error(`The browser build does not support @import for "${e}"`)}();return kr.hit("Loaded stylesheet",{id:e,base:t,size:r.content.length}),r}catch(r){throw kr.hit("Failed to load stylesheet",{id:e,base:t,error:r.message??r}),r}}async function yr(){throw new Error("The browser build does not support plugins or config files.")}function xr(e){vr=vr.then((async function(){if(!fr&&"full"!==e)return;let t=wr++;kr.start(`Build #${t} (${e})`),"full"===e&&await async function(){kr.start("Create compiler"),kr.start("Reading Stylesheets");let e=document.querySelectorAll(`style[type="${pr}"]`),t="";for(let r of e)zr(r),t+=r.textContent+"\n";if(t.includes("@import")||(t=`@import "tailwindcss";${t}`),kr.end("Reading Stylesheets",{size:t.length,changed:mr!==t}),mr!==t){mr=t,kr.start("Compile CSS");try{fr=await ur(t,{base:"/",loadStylesheet:br,loadModule:yr})}finally{kr.end("Compile CSS"),kr.end("Create compiler")}hr.clear()}}(),kr.start("Build"),await async function(e){if(!fr)return;let t=new Set;kr.start("Collect classes");for(let e of document.querySelectorAll("[class]"))for(let r of e.classList)hr.has(r)||(hr.add(r),t.add(r));kr.end("Collect classes",{count:t.size}),(0!==t.size||"incremental"!==e)&&(kr.start("Build utilities"),gr.textContent=fr.build(Array.from(t)),kr.end("Build utilities"))}(e),kr.end("Build"),kr.end(`Build #${t} (${e})`)})).catch((e=>kr.error(e)))}var $r=new MutationObserver((()=>xr("full")));function zr(e){$r.observe(e,{attributes:!0,attributeFilter:["type"],characterData:!0,subtree:!0,childList:!0})}new MutationObserver((e=>{let t=0,r=0;for(let n of e){for(let e of n.addedNodes)e.nodeType===Node.ELEMENT_NODE&&"STYLE"===e.tagName&&e.getAttribute("type")===pr&&(zr(e),t++);for(let e of n.addedNodes)1===e.nodeType&&e!==gr&&r++;"attributes"===n.type&&r++}return t>0?xr("full"):r>0?xr("incremental"):void 0})).observe(document.documentElement,{attributes:!0,attributeFilter:["class"],childList:!0,subtree:!0}),xr("full"),document.head.append(gr)})(); -//# sourceMappingURL=/sm/dd74e25c182ace0306edb0d4be9012540ad3ea721ffc032eb41aec0fbcfe474b.map diff --git a/src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs b/src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs index e8277dc..7623c1b 100644 --- a/src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs +++ b/src/Cnblogs.DashScope.Core/Internals/DashScopeDefaults.cs @@ -25,6 +25,6 @@ public static class DashScopeDefaults new() { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, - PropertyNamingPolicy = JsonSnakeCaseLowerNamingPolicy.SnakeCaseLower, + PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower, }; } From be1eb9dd69e547f5a5020e60e816aeb6e3959bc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E6=98=9F=E7=B9=81?= Date: Sun, 15 Jun 2025 00:04:53 +0800 Subject: [PATCH 10/10] test: add socket test snapshots --- .../DashScopeClientWebSocket.cs | 6 +- .../DashScopeClientWebSocketPool.cs | 9 +++ .../DashScopeClientWebSocketWrapper.cs | 2 +- .../DashScopeWebSocketRequest.cs | 2 +- .../DashScopeWebSocketRequestPayload.cs | 4 +- .../Internals/Assembly.cs | 1 + .../SpeechSynthesizerParameters.cs | 5 ++ .../DashScopeClientWebSocketTests.cs | 51 ++++++++++++ .../Assembly.cs | 4 + ...cket-speech-synthesizer.continue-task.json | 11 +++ ...socket-speech-synthesizer.finish-task.json | 9 +++ ...t-speech-synthesizer.result-generated.json | 17 ++++ .../socket-speech-synthesizer.run-task.json | 24 ++++++ ...cket-speech-synthesizer.task-finished.json | 20 +++++ ...ocket-speech-synthesizer.task-started.json | 8 ++ .../Utils/Checkers.cs | 7 ++ .../Utils/FakeClientWebSocket.cs | 78 +++++++++++++++++++ .../Utils/Snapshots.SocketRequests.cs | 40 ++++++++++ .../Utils/SocketMessageSnapshot.cs | 12 +++ .../Utils/Sut.cs | 17 ++++ 20 files changed, 322 insertions(+), 5 deletions(-) create mode 100644 test/Cnblogs.DashScope.Tests.Shared/Assembly.cs create mode 100644 test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.continue-task.json create mode 100644 test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.finish-task.json create mode 100644 test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.result-generated.json create mode 100644 test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.run-task.json create mode 100644 test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.task-finished.json create mode 100644 test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.task-started.json create mode 100644 test/Cnblogs.DashScope.Tests.Shared/Utils/FakeClientWebSocket.cs create mode 100644 test/Cnblogs.DashScope.Tests.Shared/Utils/Snapshots.SocketRequests.cs create mode 100644 test/Cnblogs.DashScope.Tests.Shared/Utils/SocketMessageSnapshot.cs diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs index a97ea9f..e24a375 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocket.cs @@ -107,7 +107,7 @@ public void ResetOutput() public Task SendMessageAsync( DashScopeWebSocketRequest request, CancellationToken cancellationToken = default) - where TInput : class + where TInput : class, new() where TParameter : class { if (State == DashScopeWebSocketState.Closed) @@ -222,6 +222,10 @@ public async Task CloseAsync(CancellationToken cancellationToken = default) { await _socket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", cancellationToken); State = DashScopeWebSocketState.Closed; + if (_receiveTask != null) + { + await _receiveTask; + } } private void Dispose(bool disposing) diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs index 290bc7c..cfa4ed2 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketPool.cs @@ -20,6 +20,15 @@ public DashScopeClientWebSocketPool(DashScopeOptions options) _options = options; } + internal DashScopeClientWebSocketPool(IEnumerable sockets) + { + _options = new DashScopeOptions(); + foreach (var socket in sockets) + { + _available.Add(socket); + } + } + internal void ReturnSocketAsync(DashScopeClientWebSocket socket) { if (socket.State != DashScopeWebSocketState.Ready) diff --git a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs index a5f4b02..23b78fc 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeClientWebSocketWrapper.cs @@ -37,7 +37,7 @@ public sealed record DashScopeClientWebSocketWrapper(DashScopeClientWebSocket So public Task SendMessageAsync( DashScopeWebSocketRequest request, CancellationToken cancellationToken = default) - where TInput : class + where TInput : class, new() where TParameter : class => Socket.SendMessageAsync(request, cancellationToken); diff --git a/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequest.cs b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequest.cs index 41bc527..b1845e0 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequest.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequest.cs @@ -6,7 +6,7 @@ /// Type of the input. /// Type of the parameter. public class DashScopeWebSocketRequest - where TInput : class + where TInput : class, new() where TParameter : class { /// diff --git a/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestPayload.cs b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestPayload.cs index 6d9ab42..e994239 100644 --- a/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestPayload.cs +++ b/src/Cnblogs.DashScope.Core/DashScopeWebSocketRequestPayload.cs @@ -6,7 +6,7 @@ /// Type of the input. /// Type of the parameter. public class DashScopeWebSocketRequestPayload - where TInput : class + where TInput : class, new() // Input's default value must be empty object(not null or omitted). where TParameter : class { /// @@ -37,5 +37,5 @@ public class DashScopeWebSocketRequestPayload /// /// The input of the request. /// - public TInput Input { get; set; } = null!; + public TInput Input { get; set; } = new(); } diff --git a/src/Cnblogs.DashScope.Core/Internals/Assembly.cs b/src/Cnblogs.DashScope.Core/Internals/Assembly.cs index b4c2de8..e628d36 100644 --- a/src/Cnblogs.DashScope.Core/Internals/Assembly.cs +++ b/src/Cnblogs.DashScope.Core/Internals/Assembly.cs @@ -1,4 +1,5 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("Cnblogs.DashScope.Sdk.UnitTests")] +[assembly: InternalsVisibleTo("Cnblogs.DashScope.Tests.Shared")] [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] diff --git a/src/Cnblogs.DashScope.Core/SpeechSynthesizerParameters.cs b/src/Cnblogs.DashScope.Core/SpeechSynthesizerParameters.cs index 50e0de0..8e59c19 100644 --- a/src/Cnblogs.DashScope.Core/SpeechSynthesizerParameters.cs +++ b/src/Cnblogs.DashScope.Core/SpeechSynthesizerParameters.cs @@ -39,4 +39,9 @@ public class SpeechSynthesizerParameters /// Pitch of the voice, range between 0.5~2, defaults to 1.0. /// public float? Pitch { get; set; } + + /// + /// Enable SSML, you can only send text once if enabled. + /// + public bool? EnableSsml { get; set; } } diff --git a/test/Cnblogs.DashScope.Sdk.UnitTests/DashScopeClientWebSocketTests.cs b/test/Cnblogs.DashScope.Sdk.UnitTests/DashScopeClientWebSocketTests.cs index 8b207f6..6398af6 100644 --- a/test/Cnblogs.DashScope.Sdk.UnitTests/DashScopeClientWebSocketTests.cs +++ b/test/Cnblogs.DashScope.Sdk.UnitTests/DashScopeClientWebSocketTests.cs @@ -3,6 +3,7 @@ using System.Reflection; using Cnblogs.DashScope.Core; using Cnblogs.DashScope.Core.Internals; +using Cnblogs.DashScope.Tests.Shared.Utils; using NSubstitute; namespace Cnblogs.DashScope.Sdk.UnitTests; @@ -102,6 +103,56 @@ public async Task ResetOutput_WithInitialOutput_CompleteThenCreateNewOutputAsync Assert.NotSame(oldSignal, client.TaskStarted); } + [Fact] + public async Task SendMessageAsync_SocketClosed_ThrowAsync() + { + // Arrange + var socket = Substitute.For(); + var client = new DashScopeClientWebSocket(socket); + var snapshot = Snapshots.SpeechSynthesizer.RunTask; + await client.CloseAsync(); + + // Act + var act = () => client.SendMessageAsync(snapshot.Message); + + // Assert + await Assert.ThrowsAsync(act); + } + + [Fact] + public async Task SendMessageAsync_Connected_SendAsync() + { + // Arrange + var socket = Substitute.For(); + var client = new DashScopeClientWebSocket(socket); + var snapshot = Snapshots.SpeechSynthesizer.RunTask; + + // Act + await client.ConnectAsync(new Uri(DashScopeDefaults.WebsocketApiBaseAddress)); + await client.SendMessageAsync(snapshot.Message); + + // Assert + await socket.Received().SendAsync( + Arg.Is>(s => Checkers.IsJsonEquivalent(s, snapshot.GetRequestJson())), + WebSocketMessageType.Text, + true, + Arg.Any()); + } + + [Fact] + public async Task ReceiveMessageAsync_ServerClosed_CloseAsync() + { + // Arrange + var (_, dashScopeClientWebSocket, server) = await Sut.GetSocketTestClientAsync(); + + // Act + await server.WriteServerCloseAsync(); + + // Assert + Assert.Equal(DashScopeWebSocketState.Closed, dashScopeClientWebSocket.State); + Assert.Equal(WebSocketCloseStatus.NormalClosure, server.CloseStatus); + } + private static WebHeaderCollection ExtractHeaders(DashScopeClientWebSocket socket) { var obj = InnerSocketInfo.GetValue(socket); diff --git a/test/Cnblogs.DashScope.Tests.Shared/Assembly.cs b/test/Cnblogs.DashScope.Tests.Shared/Assembly.cs new file mode 100644 index 0000000..7c8a352 --- /dev/null +++ b/test/Cnblogs.DashScope.Tests.Shared/Assembly.cs @@ -0,0 +1,4 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Cnblogs.DashScope.Sdk.UnitTests")] +[assembly: InternalsVisibleTo("Cnblogs.DashScope.AI.UnitTests")] diff --git a/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.continue-task.json b/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.continue-task.json new file mode 100644 index 0000000..20ed15f --- /dev/null +++ b/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.continue-task.json @@ -0,0 +1,11 @@ +{ + "header": { + "action": "continue-task", + "task_id": "439e0616-2f5b-44e0-8872-0002a066a49c" + }, + "payload": { + "input": { + "text": "代码改变世界" + } + } +} diff --git a/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.finish-task.json b/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.finish-task.json new file mode 100644 index 0000000..2efb69a --- /dev/null +++ b/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.finish-task.json @@ -0,0 +1,9 @@ +{ + "header": { + "action": "finish-task", + "task_id": "439e0616-2f5b-44e0-8872-0002a066a49c" + }, + "payload": { + "input": {} + } +} diff --git a/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.result-generated.json b/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.result-generated.json new file mode 100644 index 0000000..c3111db --- /dev/null +++ b/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.result-generated.json @@ -0,0 +1,17 @@ +{ + "header": { + "task_id": "439e0616-2f5b-44e0-8872-0002a066a49c", + "event": "result-generated", + "attributes": { + "request_uuid": "c88301b4-3caa-4f15-94e2-246e84d2e648", + "x-ds-batch-queue-length": "0" + } + }, + "payload": { + "output": { + "sentence": { + "words": [] + } + } + } +} diff --git a/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.run-task.json b/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.run-task.json new file mode 100644 index 0000000..482a599 --- /dev/null +++ b/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.run-task.json @@ -0,0 +1,24 @@ +{ + "header": { + "action": "run-task", + "task_id": "439e0616-2f5b-44e0-8872-0002a066a49c", + "streaming": "duplex" + }, + "payload": { + "model": "cosyvoice-v1", + "task_group": "audio", + "task": "tts", + "function": "SpeechSynthesizer", + "input": {}, + "parameters": { + "voice": "longxiaochun", + "volume": 50, + "text_type": "PlainText", + "sample_rate": 0, + "rate": 1.1, + "format": "mp3", + "pitch": 1.2, + "enable_ssml": true + } + } +} diff --git a/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.task-finished.json b/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.task-finished.json new file mode 100644 index 0000000..e48f75a --- /dev/null +++ b/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.task-finished.json @@ -0,0 +1,20 @@ +{ + "header": { + "task_id": "439e0616-2f5b-44e0-8872-0002a066a49c", + "event": "task-finished", + "attributes": { + "request_uuid": "c88301b4-3caa-4f15-94e2-246e84d2e648", + "x-ds-batch-queue-length": "0" + } + }, + "payload": { + "output": { + "sentence": { + "words": [] + } + }, + "usage": { + "characters": 12 + } + } +} diff --git a/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.task-started.json b/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.task-started.json new file mode 100644 index 0000000..ebcddee --- /dev/null +++ b/test/Cnblogs.DashScope.Tests.Shared/RawHttpData/socket-speech-synthesizer.task-started.json @@ -0,0 +1,8 @@ +{ + "header": { + "task_id": "439e0616-2f5b-44e0-8872-0002a066a49c", + "event": "task-started", + "attributes": {} + }, + "payload": {} +} diff --git a/test/Cnblogs.DashScope.Tests.Shared/Utils/Checkers.cs b/test/Cnblogs.DashScope.Tests.Shared/Utils/Checkers.cs index 0e66fbd..df574e7 100644 --- a/test/Cnblogs.DashScope.Tests.Shared/Utils/Checkers.cs +++ b/test/Cnblogs.DashScope.Tests.Shared/Utils/Checkers.cs @@ -4,6 +4,13 @@ namespace Cnblogs.DashScope.Tests.Shared.Utils; public static class Checkers { + public static bool IsJsonEquivalent(ArraySegment socketBuffer, string requestSnapshot) + { + var actual = JsonNode.Parse(socketBuffer); + var expected = JsonNode.Parse(requestSnapshot); + return JsonNode.DeepEquals(actual, expected); + } + public static bool IsJsonEquivalent(HttpContent content, string requestSnapshot) { #pragma warning disable VSTHRD002 diff --git a/test/Cnblogs.DashScope.Tests.Shared/Utils/FakeClientWebSocket.cs b/test/Cnblogs.DashScope.Tests.Shared/Utils/FakeClientWebSocket.cs new file mode 100644 index 0000000..589dbbe --- /dev/null +++ b/test/Cnblogs.DashScope.Tests.Shared/Utils/FakeClientWebSocket.cs @@ -0,0 +1,78 @@ +using System.Net.WebSockets; +using System.Threading.Channels; +using Cnblogs.DashScope.Core.Internals; + +namespace Cnblogs.DashScope.Tests.Shared.Utils; + +public sealed class FakeClientWebSocket : IClientWebSocket +{ + public List> ReceivedMessages { get; } = new(); + + public Channel Server { get; } = + Channel.CreateUnbounded(); + + public async Task WriteServerCloseAsync() + { + var close = new WebSocketReceiveResult(1, WebSocketMessageType.Close, true); + await Server.Writer.WriteAsync(close); + Server.Writer.Complete(); + } + + private void Dispose(bool disposing) + { + // nothing to release. + if (disposing) + { + Server.Writer.Complete(); + } + } + + /// + public void Dispose() + { + Dispose(true); + } + + /// + public ClientWebSocketOptions Options { get; set; } = null!; + + /// + public WebSocketCloseStatus? CloseStatus { get; set; } + + /// + public Task ConnectAsync(Uri uri, CancellationToken cancellation) + { + // do nothing. + return Task.CompletedTask; + } + + /// + public Task SendAsync( + ArraySegment buffer, + WebSocketMessageType messageType, + bool endOfMessage, + CancellationToken cancellationToken) + { + ReceivedMessages.Add(buffer); + return Task.CompletedTask; + } + + /// + public async Task ReceiveAsync( + ArraySegment buffer, + CancellationToken cancellationToken) + { + await Server.Reader.WaitToReadAsync(cancellationToken); + return await Server.Reader.ReadAsync(cancellationToken); + } + + /// + public Task CloseAsync( + WebSocketCloseStatus closeStatus, + string? statusDescription, + CancellationToken cancellationToken) + { + CloseStatus = WebSocketCloseStatus.NormalClosure; + return Task.CompletedTask; + } +} diff --git a/test/Cnblogs.DashScope.Tests.Shared/Utils/Snapshots.SocketRequests.cs b/test/Cnblogs.DashScope.Tests.Shared/Utils/Snapshots.SocketRequests.cs new file mode 100644 index 0000000..eb13289 --- /dev/null +++ b/test/Cnblogs.DashScope.Tests.Shared/Utils/Snapshots.SocketRequests.cs @@ -0,0 +1,40 @@ +using Cnblogs.DashScope.Core; + +namespace Cnblogs.DashScope.Tests.Shared.Utils; + +public partial class Snapshots +{ + public static class SpeechSynthesizer + { + private const string GroupName = "speech-synthesizer"; + + public static readonly + SocketMessageSnapshot> + RunTask = new(GroupName, "run-task", new DashScopeWebSocketRequest() + { + Header = new DashScopeWebSocketRequestHeader() + { + Action = "run-task", + Streaming = "duplex", + TaskId = "439e0616-2f5b-44e0-8872-0002a066a49c" + }, + Payload = new DashScopeWebSocketRequestPayload() + { + Task = "tts", + TaskGroup = "audio", + Function = "SpeechSynthesizer", + Model = "cosyvoice-v1", + Parameters = new SpeechSynthesizerParameters() + { + EnableSsml = true, + Format = "mp3", + Pitch = 1.2f, + Voice = "longxiaochun", + Volume = 50, + SampleRate = 0, + Rate = 1.1f, + } + } + }); + } +} diff --git a/test/Cnblogs.DashScope.Tests.Shared/Utils/SocketMessageSnapshot.cs b/test/Cnblogs.DashScope.Tests.Shared/Utils/SocketMessageSnapshot.cs new file mode 100644 index 0000000..612dc8c --- /dev/null +++ b/test/Cnblogs.DashScope.Tests.Shared/Utils/SocketMessageSnapshot.cs @@ -0,0 +1,12 @@ +namespace Cnblogs.DashScope.Tests.Shared.Utils; + +public record SocketMessageSnapshot(string GroupName, string MessageName) +{ + public string GetRequestJson() + { + return File.ReadAllText(Path.Combine("RawHttpData", $"socket-{GroupName}.{MessageName}.json")); + } +} + +public record SocketMessageSnapshot(string GroupName, string MessageName, TMessage Message) + : SocketMessageSnapshot(GroupName, MessageName); diff --git a/test/Cnblogs.DashScope.Tests.Shared/Utils/Sut.cs b/test/Cnblogs.DashScope.Tests.Shared/Utils/Sut.cs index 560b308..658a046 100644 --- a/test/Cnblogs.DashScope.Tests.Shared/Utils/Sut.cs +++ b/test/Cnblogs.DashScope.Tests.Shared/Utils/Sut.cs @@ -1,4 +1,5 @@ using Cnblogs.DashScope.Core; +using Cnblogs.DashScope.Core.Internals; using NSubstitute; using NSubstitute.Extensions; @@ -25,4 +26,20 @@ public static (DashScopeClientCore Client, MockHttpMessageHandler Handler) GetTe new DashScopeClientWebSocketPool(new DashScopeOptions())); return (client, handler); } + + // IClientWebSocket is internal, use InternalVisibleToAttribute make it visible to Cnblogs.DashScope.Sdk.UnitTests + internal static async + Task<(DashScopeClientCore Client, DashScopeClientWebSocket ClientWebSocket, FakeClientWebSocket Server)> + GetSocketTestClientAsync() + where TOutput : class + { + var socket = new FakeClientWebSocket(); + var dsWebSocket = new DashScopeClientWebSocket(socket); + await dsWebSocket.ConnectAsync( + new Uri(DashScopeDefaults.WebsocketApiBaseAddress), + CancellationToken.None); + var pool = new DashScopeClientWebSocketPool(new List { dsWebSocket }); + var client = new DashScopeClientCore(new HttpClient(), pool); + return (client, dsWebSocket, socket); + } }