diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 41b0cae7..676b35ed 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,10 +14,7 @@ "postStartCommand": ".devcontainer/postStart.sh", "postCreateCommand": ".devcontainer/postCreate.sh", "forwardPorts": [ - 1984, - 1985, - 3000, - 4173 + 1985 ], "customizations": { "vscode": { diff --git a/.devcontainer/postCreate.sh b/.devcontainer/postCreate.sh index 97f6227a..7018c0df 100755 --- a/.devcontainer/postCreate.sh +++ b/.devcontainer/postCreate.sh @@ -1,4 +1,7 @@ #!/bin/bash +echo "Setting up pnpm store..." +mkdir -p /tmp/pnpm && pnpm config set store-dir /tmp/pnpm/ + echo "Building the project..." -gradle npmInstall build \ No newline at end of file +gradle pnpmInstall build \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index c8a9b9bb..9105a31d 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -24,4 +24,4 @@ - [ ] I have added unit and integration tests for my change - [ ] I have manually run all the unit and integration tests in the module I have added/changed, and they are all green -- [ ] I have added/updated the [documentation](https://github.com/dRAGon-Okinawa/dRAGon/tree/main/docs) +- [ ] I have added/updated the [documentation](https://docs.dragon.okinawa) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 47863c15..40598710 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,6 +28,9 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 20 + - uses: pnpm/action-setup@v4 + with: + version: 9.4.0 - uses: gradle/actions/setup-gradle@v3 with: gradle-version: 8.7 @@ -42,15 +45,10 @@ jobs: run: gradle createRelease - name: Set Frontend Version - run: npm version from-git --no-git-tag-version --prefix frontend - - name: Set Docs Version - run: npm version from-git --no-git-tag-version --prefix docs + run: pnpm version from-git --no-git-tag-version --prefix frontend - name: Test dRAGon - run: gradle npmInstall npmLint checkstyleMain checkstyleTest test - - - name: Build Documentation - run: npm install --prefix docs && npm run build --prefix docs + run: gradle pnpmInstall pnpmLint checkstyleMain checkstyleTest test --stacktrace - name: Build dRAGon run: gradle bootJar -Pversion=$(gradle cV -q -Prelease.quiet) @@ -93,13 +91,3 @@ jobs: github.ref == 'refs/heads/main' && github.repository == 'dragon-okinawa/dragon' run: gradle pushRelease - - - name: Deploy Documentation - uses: JamesIves/github-pages-deploy-action@releases/v3 - if: | - github.ref == 'refs/heads/main' && - github.repository == 'dragon-okinawa/dragon' - with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - BRANCH: gh-pages - FOLDER: docs/build diff --git a/.gitignore b/.gitignore index 35c0214e..12584f5e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ -build gradle .gradle bin .vscode .DS_Store -*.class \ No newline at end of file +*.class +.pnpm-store \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 93d63876..31641eca 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM mcr.microsoft.com/openjdk/jdk:17-ubuntu LABEL org.opencontainers.image.source="https://github.com/dRAGon-Okinawa/dRAGon" EXPOSE 1985 -EXPOSE 1984 +EXPOSE 8519 RUN mkdir /data RUN chown app:app /data diff --git a/README.md b/README.md index 37ec91a9..2684b32e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![Build dRAGon Project](https://github.com/dragon-okinawa/dragon/actions/workflows/build.yml/badge.svg?branch=main) +[![Build dRAGon Project](https://github.com/dragon-okinawa/dragon/actions/workflows/build.yml/badge.svg?branch=main)](https://github.com/dRAGon-Okinawa/dRAGon/actions) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=dRAGon-Okinawa_dRAGon&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=dRAGon-Okinawa_dRAGon) [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=dRAGon-Okinawa_dRAGon&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=dRAGon-Okinawa_dRAGon) [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=dRAGon-Okinawa_dRAGon&metric=bugs)](https://sonarcloud.io/summary/new_code?id=dRAGon-Okinawa_dRAGon) diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 00000000..c795b054 --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/backend/build.gradle b/backend/build.gradle index ee5005a1..63c64358 100644 --- a/backend/build.gradle +++ b/backend/build.gradle @@ -128,17 +128,20 @@ tasks.register("bootProdRun") { systemProperty("spring.profiles.active", "prod") } } - finalizedBy("bootRun") +} + +jacoco { + toolVersion = "0.8.12" } tasks.register('copyWebApp', Copy) { - dependsOn(':frontend:jar') + dependsOn(':frontend:pnpmBuild') from "$rootDir/frontend/dist" into "$buildDir/resources/main/static/." } tasks.named('compileJava') { - dependsOn(':frontend:jar') + dependsOn(':frontend:pnpmBuild') } tasks.named('processResources') { diff --git a/backend/gradle.properties b/backend/gradle.properties index 5f233db1..338affca 100644 --- a/backend/gradle.properties +++ b/backend/gradle.properties @@ -1 +1,2 @@ -version=0.0.0 \ No newline at end of file +version=0.0.0 +org.gradle.daemon=false \ No newline at end of file diff --git a/backend/src/main/java/ai/dragon/controller/api/app/HealthOpenApiController.java b/backend/src/main/java/ai/dragon/controller/api/app/HealthAppApiController.java similarity index 87% rename from backend/src/main/java/ai/dragon/controller/api/app/HealthOpenApiController.java rename to backend/src/main/java/ai/dragon/controller/api/app/HealthAppApiController.java index 423fb00c..69b487cd 100644 --- a/backend/src/main/java/ai/dragon/controller/api/app/HealthOpenApiController.java +++ b/backend/src/main/java/ai/dragon/controller/api/app/HealthAppApiController.java @@ -9,10 +9,10 @@ import io.swagger.v3.oas.annotations.tags.Tag; @RestController -@RequestMapping("/api/app/health") +@RequestMapping("/api/app") @Tag(name = "Health", description = "Health Check API Endpoints") -public class HealthOpenApiController { - @GetMapping("/status") +public class HealthAppApiController { + @GetMapping("/health") @ApiResponse(responseCode = "200", description = "dRAGon app is alive.") @Operation(summary = "Check dRAGon app health", description = "Returns a simple message to confirm that the app is alive.") public String health() { diff --git a/backend/src/main/java/ai/dragon/controller/api/app/InfoAppApiController.java b/backend/src/main/java/ai/dragon/controller/api/app/InfoAppApiController.java new file mode 100644 index 00000000..29914fea --- /dev/null +++ b/backend/src/main/java/ai/dragon/controller/api/app/InfoAppApiController.java @@ -0,0 +1,22 @@ +package ai.dragon.controller.api.app; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import ai.dragon.util.VersionUtil; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; + +@RestController +@RequestMapping("/api/app/info") +@Tag(name = "App Information", description = "Information about the dRAGon app.") +public class InfoAppApiController { + @GetMapping("/version") + @ApiResponse(responseCode = "200", description = "dRAGon app version.") + @Operation(summary = "Get dRAGon app version", description = "Returns the version of the dRAGon app.") + public String version() { + return VersionUtil.getVersion(); + } +} diff --git a/backend/src/main/java/ai/dragon/listener/DragonApplicationListener.java b/backend/src/main/java/ai/dragon/listener/DragonApplicationListener.java index e41bb3df..65f13d18 100644 --- a/backend/src/main/java/ai/dragon/listener/DragonApplicationListener.java +++ b/backend/src/main/java/ai/dragon/listener/DragonApplicationListener.java @@ -38,7 +38,7 @@ private void showAppURLs() { System.out.println("================================================"); System.out.println(String.format("APP URL\t\t : %s://%s:%d/", scheme, host, port)); System.out.println(String.format("Swagger UI\t : %s://%s:%d/api/swagger-ui.html", scheme, host, port)); - System.out.println(String.format("JobRunr\t\t : %s://%s:%d/", scheme, host, 1984)); + System.out.println(String.format("JobRunr\t\t : %s://%s:%d/", scheme, host, 8519)); System.out.println("================================================"); } } diff --git a/backend/src/main/resources/application-prod.yaml b/backend/src/main/resources/application-prod.yaml index a55d578a..b11f07a5 100644 --- a/backend/src/main/resources/application-prod.yaml +++ b/backend/src/main/resources/application-prod.yaml @@ -22,7 +22,7 @@ org: enabled: true dashboard: enabled: true - port: 1984 + port: 8519 jobs: default-number-of-retries: 10 # Number of retries for a failing job retry-back-off-time-seed: 3 # Time seed for the exponential back-off policy diff --git a/backend/src/main/resources/application.yaml b/backend/src/main/resources/application.yaml index 5941a338..8a6cad34 100644 --- a/backend/src/main/resources/application.yaml +++ b/backend/src/main/resources/application.yaml @@ -32,7 +32,7 @@ org: enabled: true dashboard: enabled: true - port: 1984 + port: 8519 jobs: default-number-of-retries: 10 # Number of retries for a failing job retry-back-off-time-seed: 3 # Time seed for the exponential back-off policy diff --git a/backend/src/test/java/ai/dragon/controller/api/raag/OpenAiCompatibleV1ApiControllerTest.java b/backend/src/test/java/ai/dragon/controller/api/raag/OpenAiCompatibleV1ApiControllerTest.java index fd5520c9..866d6fd1 100644 --- a/backend/src/test/java/ai/dragon/controller/api/raag/OpenAiCompatibleV1ApiControllerTest.java +++ b/backend/src/test/java/ai/dragon/controller/api/raag/OpenAiCompatibleV1ApiControllerTest.java @@ -58,7 +58,7 @@ static void beforeAll(@Autowired FarmRepository farmRepository, // OpenAI settings for RaaG String apiKeySetting = String.format("apiKey=%s", System.getenv("OPENAI_API_KEY")); - String modelNameSetting = "modelName=gpt-4o"; + String modelNameSetting = "modelName=gpt-3.5-turbo"; // TODO Migrate to gpt-4o-mini when reliable // Farm with no silo FarmEntity farmWithoutSilo = new FarmEntity(); diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 6da97d92..00000000 --- a/docs/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# Dependencies -/node_modules -package-lock.json -pnpm-lock.yaml - -# Production -/build -dist - -# Generated files -.docusaurus -.cache-loader - -# Misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 9ba9f527..00000000 --- a/docs/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Website - -dRAGon documentation is built using [Docusaurus](https://docusaurus.io/), a modern static website generator. - -### Installation - -``` -$ yarn -``` - -### Local Development - -``` -$ yarn start -``` - -This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. - -### Build - -``` -$ yarn build -``` - -This command generates static content into the `build` directory and can be served using any static contents hosting service. - diff --git a/docs/babel.config.js b/docs/babel.config.js deleted file mode 100644 index e00595da..00000000 --- a/docs/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: [require.resolve('@docusaurus/core/lib/babel/preset')], -}; diff --git a/docs/build.gradle b/docs/build.gradle index 6a875c24..910b52c1 100644 --- a/docs/build.gradle +++ b/docs/build.gradle @@ -1,6 +1,5 @@ plugins { id 'com.github.node-gradle.node' version '7.0.2' - id 'org.openapi.generator' version '7.5.0' } ext { @@ -22,38 +21,3 @@ task test(type: NpmTask) { outputs.dir("dist") args = ['run', 'build'] } - -task buildOpenApiMarkdownDocs(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask) { - dependsOn(':backend:generateOpenApiDocs') - generatorName.set("markdown") - inputSpecRootDirectory.set("$backendBuildDir/docs/api") - cleanupOutput.set(true) - outputDir.set("$backendBuildDir/docs/api/markdown") - doFirst { - delete "$backendBuildDir/docs/api/markdown" - } - doLast { - delete "docs/api/specification" - copy { - from("$backendBuildDir/docs/api/markdown") - into("docs/api/specification") - filter { - String line -> line - .replace("[**Map**](../Models/object.md)", "**Map**") - .replace("[**Object**](.md)", "**object**") - .replace("{uuid}", "\\{uuid\\}") - .replace("http://localhost:8080", "http://localhost:1985") - .replace("# Documentation for merged spec", "# Specification") - } - } - delete "docs/api/specification/.openapi-generator" - delete "docs/api/specification/.openapi-generator-ignore" - delete "static/openapi" - copy { - from("$backendBuildDir/docs/api") { - include 'swagger-*.json' - } - into("static/openapi") - } - } -} \ No newline at end of file diff --git a/docs/docs/about-dragon/README.mdx b/docs/docs/about-dragon/README.mdx deleted file mode 100644 index 7def2c26..00000000 --- a/docs/docs/about-dragon/README.mdx +++ /dev/null @@ -1,28 +0,0 @@ -# About dRAGon -:::note - dRAGon (Dynamic Retrieval Augmented Generation for Optimized Nimble) is a versatile Retrieval-Augmented Generation (RAG) engine that enhances the capabilities of Language Model-based applications. - - By enabling comprehensive searches across various document types, dRAGon generates high-quality answers that improve decision-making processes for individuals, organizations, and enterprises. - - Our platform empowers multiple technologies, including JavaScript, Java, Docker, and AI frameworks like LangChain4j, making it a robust tool for diverse use cases. - - As an open-source project, dRAGon encourages community participation, allowing users to fork, extend, and contribute to its development. This collaborative approach ensures continuous improvement and widespread access to cutting-edge information retrieval technology. - - Join us in building a smarter, more connected world through dRAGon. -::: - -## Technical Stack -### Backend -* Java 17 -* Spring Boot 3 / Spring Framework 6 -* LangChain4j -* Nitrite - -### Frontend -* Vue.js 3 -* Vite -* PrimeVue - -### Other -* Docker -* Dev Container \ No newline at end of file diff --git a/docs/docs/about-dragon/_category_.yml b/docs/docs/about-dragon/_category_.yml deleted file mode 100644 index 06bdb300..00000000 --- a/docs/docs/about-dragon/_category_.yml +++ /dev/null @@ -1 +0,0 @@ -label: 'About dRAGon' \ No newline at end of file diff --git a/docs/docs/about-dragon/glossary/_category_.yml b/docs/docs/about-dragon/glossary/_category_.yml deleted file mode 100644 index ec60e629..00000000 --- a/docs/docs/about-dragon/glossary/_category_.yml +++ /dev/null @@ -1 +0,0 @@ -label: 'Glossary' \ No newline at end of file diff --git a/docs/docs/about-dragon/glossary/farm.mdx b/docs/docs/about-dragon/glossary/farm.mdx deleted file mode 100644 index 87191727..00000000 --- a/docs/docs/about-dragon/glossary/farm.mdx +++ /dev/null @@ -1,27 +0,0 @@ ---- -sidebar_position: 2 ---- -import WIPS from '../../../src/components/Admonitions/_wip_section.mdx'; - -# What's a Farm? -In dRAGon land, a Farm is a collection of Silos : -```mermaid -flowchart LR - Request-->Router - subgraph farm1 [Farm] - Router-->Silo1 - Router-->Silo2 - Router-->SiloN - click Silo1 href "/docs/about-dragon/glossary/silo" "What's a Silo?" - click Silo2 href "/docs/about-dragon/glossary/silo" "What's a Silo?" - click SiloN href "/docs/about-dragon/glossary/silo" "What's a Silo?" - end - Silo1-->Response - Silo2-->Response - SiloN-->Response -``` - -:::note -* You can aggregate multiple kind of Silos in a Farm, for example, you can have a Silo for your documents about your products, another Silo for your blog posts (extracted from URLs of a WordPress blog), and another Silo for Frequently Asked Questions (FAQs). -* There is no limit to the number of Silos you can have in a Farm, but you should keep in mind that the more Silos you have, the more time it will take to process the requests. -::: \ No newline at end of file diff --git a/docs/docs/about-dragon/glossary/raag.mdx b/docs/docs/about-dragon/glossary/raag.mdx deleted file mode 100644 index 61061175..00000000 --- a/docs/docs/about-dragon/glossary/raag.mdx +++ /dev/null @@ -1,113 +0,0 @@ ---- -sidebar_position: 3 ---- -import WIPS from '../../../src/components/Admonitions/_wip_section.mdx'; - -# What's RaaG? -Ever wanted to have a chat with a LLM (Large Language Model) like GPT-4o, but with the ability to ask it questions about your data? RaaG is the answer to your needs! - -RaaG is the acronyme for "RAG as a GPT" - -## Why do we need dRAGon RaaG? -You can already use LangChain or LlamaIndex to query your data, so why do you need RaaG? - -As you know, a typical RAG application is composed of two main components with each several sub-tasks : -1. **Indexing**: This involves the offline process of ingesting data from a source and indexing it. - 1. **Load**: The data is loaded using Document Loaders. - 2. **Split**: The loaded data is divided into smaller chunks using Document Splitters. - 3. **Store**: The chunks are stored and indexed for future searching, typically utilizing a VectorStore and an Embeddings model. -2. **Retrieval and Generation**: This is the core RAG chain that operates during runtime, handling user queries. - 1. **Retrieve**: Relevant data chunks are fetched from the storage in response to a user query using a Retriever. - 2. **Generate**: A ChatModel/LLM generates an answer by incorporating the user query and the retrieved data into a prompt. - -Let's say you want to build a RAG pipeline using LangChain: You would need to write code to handle each of these sub-tasks, which can be quite complex and time-consuming. - -## How does dRAGon RaaG simplify the process? -So instead of having an app code like this : -```python -from langchain import hub -from langchain_postgres.vectorstores import PGVector -from langchain_community.document_loaders import WebBaseLoader -from langchain_core.output_parsers import StrOutputParser -from langchain_core.runnables import RunnablePassthrough -from langchain_openai import OpenAIEmbeddings -from langchain_text_splitters import RecursiveCharacterTextSplitter -from langchain_openai import ChatOpenAI - -os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY" - -loader = WebBaseLoader( - web_paths=("https://dragon.okinawa") -) -docs = loader.load() - -text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50) -splits = text_splitter.split_documents(docs) - -connection = "postgresql+psycopg://user:paswword@server:5433/vectors" -collection_name = "my_rag_chunks" -embeddings = OpenAIEmbeddings() - -vectorstore = PGVector( - embeddings=embeddings, - collection_name=collection_name, - connection=connection, - use_jsonb=True, -) - -retriever = vectorstore.as_retriever() -prompt = hub.pull("rlm/rag-prompt") - -def format_docs(docs): - return "\n\n".join(doc.page_content for doc in docs) - -llm = ChatOpenAI(model="gpt-4o") - -rag_chain = ( - {"context": retriever | format_docs, "question": RunnablePassthrough()} - | prompt - | llm - | StrOutputParser() -) - -rag_chain.invoke("What's dRAGon?") -``` - -You will simply use the following code with a dRAGon powered RAG pipeline : -```python -from langchain_openai import OpenAI - -llm = OpenAI( - model_name="your-dragon-raag-farm-name", - openai_api_base="http://your.dragon.host:1985/api/raag/v1", -) - -prompt = "What's dRAGon?" -llm.invoke(prompt) -``` - -dRAGon simplifies the process of building a RAG pipeline by providing a single interface to manage all these components by providing an OpenAI API compliant endpoint to interact with your RAG pipeline. - -## Components involved in dRAGon RaaG -```mermaid -flowchart LR - request[Chat Request] --> endpoint - subgraph raag1 [RaaG] - endpoint[OpenAI Compliant Endpoint] --> Router - subgraph farm1 [Farm] - Router-->Silo1 - Router-->Silo2 - Router-->SiloN - click Silo1 href "/docs/about-dragon/glossary/silo" "What's a Silo?" - click Silo2 href "/docs/about-dragon/glossary/silo" "What's a Silo?" - click SiloN href "/docs/about-dragon/glossary/silo" "What's a Silo?" - end - end - Silo1-->Response - Silo2-->Response - SiloN-->Response -``` - -## Tutorials -* [LangChain : Chat with a Farm](/docs/tutorials/raag-api/raag-api-farm-chat-python-langchain-client) -* [FAQ : SQL Ingestor as a RAG Data Provider](/docs/tutorials/raag-api/raag-faq-sql-ingestor) \ No newline at end of file diff --git a/docs/docs/about-dragon/glossary/silo.mdx b/docs/docs/about-dragon/glossary/silo.mdx deleted file mode 100644 index 53ff0190..00000000 --- a/docs/docs/about-dragon/glossary/silo.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -sidebar_position: 1 ---- -import WIPS from '../../../src/components/Admonitions/_wip_section.mdx'; - -# What's a Silo? -This entity is designed to store and retrieve chunks, the result of embeddings of documents. It is the basic building block of dRAGon. - -A Silo is composed of three main components : -```mermaid -flowchart LR - subgraph silo1 [Silo] - IngestorLoader - EmbeddingModel - VectorStore - end -``` - -## How does it work? -The Ingestor Loader is responsible for loading the documents into the Silo : it can be done by reading files in a directory or by providing URLs. -After the documents are loaded they are split into chunks (eg. paragraphs, sentences, etc.) by the Silo Splitter. -Each chunk is then transformed into a vector by the Embedding Model, which is then stored in the Vector Store for later retrieval. -```mermaid -flowchart TB - IngestorLoader-- Load files over file system, URLs, ... -->DocumentSplitter - DocumentSplitter-- Split documents into chunks -->EmbeddingModel - EmbeddingModel-- Vectorize each chunk for retrieval similarity -->VectorStore -``` \ No newline at end of file diff --git a/docs/docs/api/_category_.yml b/docs/docs/api/_category_.yml deleted file mode 100644 index 30db0755..00000000 --- a/docs/docs/api/_category_.yml +++ /dev/null @@ -1 +0,0 @@ -label: 'API' \ No newline at end of file diff --git a/docs/docs/api/introduction.mdx b/docs/docs/api/introduction.mdx deleted file mode 100644 index 7eb12ef5..00000000 --- a/docs/docs/api/introduction.mdx +++ /dev/null @@ -1,18 +0,0 @@ -import WIPS from '../../src/components/Admonitions/_wip_section.mdx'; - -# Introduction - - -## OpenAPI -### Swagger UI -When dRAGon is launched, the API documentation is available here : [http://localhost:1985/api/swagger-ui/index.html](http://localhost:1985/api/swagger-ui/index.html) - -### Specification -#### Documentation -[API Endpoints](/docs/api/specification) - -#### Spec Files -* [App](/openapi/swagger-app.json) -* [Backend](/openapi/swagger-backend.json) -* [RaaG](/openapi/swagger-raag.json) -* [Rag](/openapi/swagger-rag.json) \ No newline at end of file diff --git a/docs/docs/api/specification/Apis/DatabaseCommandApi.md b/docs/docs/api/specification/Apis/DatabaseCommandApi.md deleted file mode 100644 index dd9ee9bb..00000000 --- a/docs/docs/api/specification/Apis/DatabaseCommandApi.md +++ /dev/null @@ -1,33 +0,0 @@ -# DatabaseCommandApi - -All URIs are relative to *http://localhost:1985* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**exportDatabase**](DatabaseCommandApi.md#exportDatabase) | **POST** /api/backend/command/database/export | Create a database export | - - - -# **exportDatabase** -> exportDatabase() - -Create a database export - - Creates a JSON database dump. - -### Parameters -This endpoint does not need any parameter. - -### Return type - -null (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: Not defined - diff --git a/docs/docs/api/specification/Apis/FarmRepositoryApi.md b/docs/docs/api/specification/Apis/FarmRepositoryApi.md deleted file mode 100644 index 00589421..00000000 --- a/docs/docs/api/specification/Apis/FarmRepositoryApi.md +++ /dev/null @@ -1,143 +0,0 @@ -# FarmRepositoryApi - -All URIs are relative to *http://localhost:1985* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**createFarm**](FarmRepositoryApi.md#createFarm) | **POST** /api/backend/repository/farm/ | Create a new Farm | -| [**deleteFarm**](FarmRepositoryApi.md#deleteFarm) | **DELETE** /api/backend/repository/farm/\{uuid\} | Delete a Farm | -| [**getFarm**](FarmRepositoryApi.md#getFarm) | **GET** /api/backend/repository/farm/\{uuid\} | Retrieve one Farm | -| [**listFarms**](FarmRepositoryApi.md#listFarms) | **GET** /api/backend/repository/farm/ | List all Farms | -| [**updateFarm**](FarmRepositoryApi.md#updateFarm) | **PATCH** /api/backend/repository/farm/\{uuid\} | Update a Farm | - - - -# **createFarm** -> Farm createFarm() - -Create a new Farm - - Creates one Farm entity in the database. - -### Parameters -This endpoint does not need any parameter. - -### Return type - -[**Farm**](../Models/Farm.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: */* - - -# **deleteFarm** -> deleteFarm(uuid) - -Delete a Farm - - Deletes one Farm entity from its UUID stored in the database. - -### Parameters - -|Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **uuid** | **String**| Identifier of the Farm | [default to null] | - -### Return type - -null (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: Not defined - - -# **getFarm** -> Farm getFarm(uuid) - -Retrieve one Farm - - Returns one Farm entity from its UUID stored in the database. - -### Parameters - -|Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **uuid** | **String**| Identifier of the Farm | [default to null] | - -### Return type - -[**Farm**](../Models/Farm.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: */* - - -# **listFarms** -> List listFarms() - -List all Farms - - Returns all Farm entities stored in the database. - -### Parameters -This endpoint does not need any parameter. - -### Return type - -[**List**](../Models/Farm.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: */* - - -# **updateFarm** -> Farm updateFarm(uuid, request\_body) - -Update a Farm - - Updates one Farm entity in the database. - -### Parameters - -|Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **uuid** | **String**| Identifier of the Farm | [default to null] | -| **request\_body** | **Map**| | | - -### Return type - -[**Farm**](../Models/Farm.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: */* - diff --git a/docs/docs/api/specification/Apis/HealthApi.md b/docs/docs/api/specification/Apis/HealthApi.md deleted file mode 100644 index 8dff147f..00000000 --- a/docs/docs/api/specification/Apis/HealthApi.md +++ /dev/null @@ -1,33 +0,0 @@ -# HealthApi - -All URIs are relative to *http://localhost:1985* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**health**](HealthApi.md#health) | **GET** /api/app/health/status | Check dRAGon app health | - - - -# **health** -> String health() - -Check dRAGon app health - - Returns a simple message to confirm that the app is alive. - -### Parameters -This endpoint does not need any parameter. - -### Return type - -**String** - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: */* - diff --git a/docs/docs/api/specification/Apis/RaaGApi.md b/docs/docs/api/specification/Apis/RaaGApi.md deleted file mode 100644 index b8bac1ca..00000000 --- a/docs/docs/api/specification/Apis/RaaGApi.md +++ /dev/null @@ -1,89 +0,0 @@ -# RaaGApi - -All URIs are relative to *http://localhost:1985* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**chatCompletions**](RaaGApi.md#chatCompletions) | **POST** /api/raag/v1/chat/completions | Creates a chat completion | -| [**completions**](RaaGApi.md#completions) | **POST** /api/raag/v1/completions | Creates a completion | -| [**models**](RaaGApi.md#models) | **GET** /api/raag/v1/models | List models | - - - -# **chatCompletions** -> OpenAiChatCompletionResponse chatCompletions(OpenAiChatCompletionRequest) - -Creates a chat completion - - Creates a chat completion for the provided prompt and parameters. - -### Parameters - -|Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **OpenAiChatCompletionRequest** | [**OpenAiChatCompletionRequest**](../Models/OpenAiChatCompletionRequest.md)| | | - -### Return type - -[**OpenAiChatCompletionResponse**](../Models/OpenAiChatCompletionResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: */* - - -# **completions** -> OpenAiCompletionResponse completions(OpenAiCompletionRequest) - -Creates a completion - - Creates a completion for the provided prompt and parameters. - -### Parameters - -|Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **OpenAiCompletionRequest** | [**OpenAiCompletionRequest**](../Models/OpenAiCompletionRequest.md)| | | - -### Return type - -[**OpenAiCompletionResponse**](../Models/OpenAiCompletionResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: */* - - -# **models** -> OpenAiModelsReponse models() - -List models - - Lists available models. - -### Parameters -This endpoint does not need any parameter. - -### Return type - -[**OpenAiModelsReponse**](../Models/OpenAiModelsReponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: */* - diff --git a/docs/docs/api/specification/Apis/SearchApi.md b/docs/docs/api/specification/Apis/SearchApi.md deleted file mode 100644 index 36d127a7..00000000 --- a/docs/docs/api/specification/Apis/SearchApi.md +++ /dev/null @@ -1,38 +0,0 @@ -# SearchApi - -All URIs are relative to *http://localhost:1985* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**searchDocumentsInSilo**](SearchApi.md#searchDocumentsInSilo) | **POST** /api/rag/search/documents/silo/\{uuid\} | Search documents inside a Silo | - - - -# **searchDocumentsInSilo** -> List searchDocumentsInSilo(uuid, body, maxResults) - -Search documents inside a Silo - - Search documents from the Silo. - -### Parameters - -|Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **uuid** | **UUID**| Identifier of the Silo | [default to null] | -| **body** | **String**| | | -| **maxResults** | **Integer**| Max results to return | [optional] [default to 10] | - -### Return type - -[**List**](../Models/EmbeddingMatchResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: */* - diff --git a/docs/docs/api/specification/Apis/SiloCommandApi.md b/docs/docs/api/specification/Apis/SiloCommandApi.md deleted file mode 100644 index 4b56985c..00000000 --- a/docs/docs/api/specification/Apis/SiloCommandApi.md +++ /dev/null @@ -1,36 +0,0 @@ -# SiloCommandApi - -All URIs are relative to *http://localhost:1985* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**rebuildSilo**](SiloCommandApi.md#rebuildSilo) | **POST** /api/backend/command/silo/rebuild/\{uuid\} | Rebuild Silo | - - - -# **rebuildSilo** -> rebuildSilo(uuid) - -Rebuild Silo - - This will recompute the embeddings of the Silo. - -### Parameters - -|Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **uuid** | **UUID**| Identifier of the Silo | [default to null] | - -### Return type - -null (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: Not defined - diff --git a/docs/docs/api/specification/Apis/SiloRepositoryApi.md b/docs/docs/api/specification/Apis/SiloRepositoryApi.md deleted file mode 100644 index 00b4dcb7..00000000 --- a/docs/docs/api/specification/Apis/SiloRepositoryApi.md +++ /dev/null @@ -1,143 +0,0 @@ -# SiloRepositoryApi - -All URIs are relative to *http://localhost:1985* - -| Method | HTTP request | Description | -|------------- | ------------- | -------------| -| [**createSilo**](SiloRepositoryApi.md#createSilo) | **POST** /api/backend/repository/silo/ | Create a new Silo | -| [**deleteSilo**](SiloRepositoryApi.md#deleteSilo) | **DELETE** /api/backend/repository/silo/\{uuid\} | Delete a Silo | -| [**getSilo**](SiloRepositoryApi.md#getSilo) | **GET** /api/backend/repository/silo/\{uuid\} | Retrieve one Silo | -| [**listSilos**](SiloRepositoryApi.md#listSilos) | **GET** /api/backend/repository/silo/ | List all Silos | -| [**updateSilo**](SiloRepositoryApi.md#updateSilo) | **PATCH** /api/backend/repository/silo/\{uuid\} | Update a Silo | - - - -# **createSilo** -> Silo createSilo() - -Create a new Silo - - Creates one Silo entity in the database. - -### Parameters -This endpoint does not need any parameter. - -### Return type - -[**Silo**](../Models/Silo.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: */* - - -# **deleteSilo** -> deleteSilo(uuid) - -Delete a Silo - - Deletes one Silo entity from its UUID stored in the database. - -### Parameters - -|Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **uuid** | **UUID**| Identifier of the Silo | [default to null] | - -### Return type - -null (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: Not defined - - -# **getSilo** -> Silo getSilo(uuid) - -Retrieve one Silo - - Returns one Silo entity from its UUID stored in the database. - -### Parameters - -|Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **uuid** | **String**| Identifier of the Silo | [default to null] | - -### Return type - -[**Silo**](../Models/Silo.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: */* - - -# **listSilos** -> List listSilos() - -List all Silos - - Returns all Silo entities stored in the database. - -### Parameters -This endpoint does not need any parameter. - -### Return type - -[**List**](../Models/Silo.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: Not defined -- **Accept**: */* - - -# **updateSilo** -> Silo updateSilo(uuid, request\_body) - -Update a Silo - - Updates one Silo entity in the database. - -### Parameters - -|Name | Type | Description | Notes | -|------------- | ------------- | ------------- | -------------| -| **uuid** | **String**| Identifier of the Silo | [default to null] | -| **request\_body** | **Map**| | | - -### Return type - -[**Silo**](../Models/Silo.md) - -### Authorization - -No authorization required - -### HTTP request headers - -- **Content-Type**: application/json -- **Accept**: */* - diff --git a/docs/docs/api/specification/Models/EmbeddingMatchResponse.md b/docs/docs/api/specification/Models/EmbeddingMatchResponse.md deleted file mode 100644 index 00644aa7..00000000 --- a/docs/docs/api/specification/Models/EmbeddingMatchResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# EmbeddingMatchResponse -## Properties - -| Name | Type | Description | Notes | -|------------ | ------------- | ------------- | -------------| -| **score** | **Double** | | [optional] [default to null] | -| **text** | **String** | | [optional] [default to null] | -| **metadata** | **Map** | | [optional] [default to null] | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/docs/api/specification/Models/Farm.md b/docs/docs/api/specification/Models/Farm.md deleted file mode 100644 index 857f355b..00000000 --- a/docs/docs/api/specification/Models/Farm.md +++ /dev/null @@ -1,14 +0,0 @@ -# Farm -## Properties - -| Name | Type | Description | Notes | -|------------ | ------------- | ------------- | -------------| -| **uuid** | **UUID** | Identifier of the Farm | [default to null] | -| **name** | **String** | Name of the Farm. Must be unique. | [default to null] | -| **raagIdentifier** | **String** | Identifier for the 'Raag Model' to be used for the RaaG API. Must be unique | [optional] [default to null] | -| **silos** | **List** | List of Silo UUIDs to be linked to the Farm. A Farm is a collection of Silos, which each Silo is a collection of Documents. | [optional] [default to null] | -| **languageModel** | **String** | Language Model to be used for the RaaG API | [optional] [default to null] | -| **languageModelSettings** | **List** | Settings to be linked to the Farm's Language Model in the form of `key = value` pairs. | [optional] [default to null] | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/docs/api/specification/Models/OpenAiChatCompletionChoice.md b/docs/docs/api/specification/Models/OpenAiChatCompletionChoice.md deleted file mode 100644 index b578495a..00000000 --- a/docs/docs/api/specification/Models/OpenAiChatCompletionChoice.md +++ /dev/null @@ -1,12 +0,0 @@ -# OpenAiChatCompletionChoice -## Properties - -| Name | Type | Description | Notes | -|------------ | ------------- | ------------- | -------------| -| **finish\_reason** | **String** | | [optional] [default to null] | -| **index** | **Integer** | | [optional] [default to null] | -| **message** | [**OpenAiCompletionMessage**](OpenAiCompletionMessage.md) | | [optional] [default to null] | -| **delta** | [**OpenAiCompletionMessage**](OpenAiCompletionMessage.md) | | [optional] [default to null] | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/docs/api/specification/Models/OpenAiChatCompletionRequest.md b/docs/docs/api/specification/Models/OpenAiChatCompletionRequest.md deleted file mode 100644 index b8feab80..00000000 --- a/docs/docs/api/specification/Models/OpenAiChatCompletionRequest.md +++ /dev/null @@ -1,14 +0,0 @@ -# OpenAiChatCompletionRequest -## Properties - -| Name | Type | Description | Notes | -|------------ | ------------- | ------------- | -------------| -| **model** | **String** | Name of the Farm 'Raag Model' to be used. | [default to null] | -| **messages** | [**List**](OpenAiCompletionMessage.md) | | [default to null] | -| **max\_tokens** | **Integer** | | [optional] [default to null] | -| **stream** | **Boolean** | | [optional] [default to null] | -| **temperature** | **Double** | | [optional] [default to null] | -| **user** | **String** | | [optional] [default to null] | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/docs/api/specification/Models/OpenAiChatCompletionResponse.md b/docs/docs/api/specification/Models/OpenAiChatCompletionResponse.md deleted file mode 100644 index ae6bbaae..00000000 --- a/docs/docs/api/specification/Models/OpenAiChatCompletionResponse.md +++ /dev/null @@ -1,14 +0,0 @@ -# OpenAiChatCompletionResponse -## Properties - -| Name | Type | Description | Notes | -|------------ | ------------- | ------------- | -------------| -| **id** | **String** | | [optional] [default to null] | -| **object** | **String** | | [optional] [default to null] | -| **created** | **Long** | | [optional] [default to null] | -| **model** | **String** | | [optional] [default to null] | -| **choices** | [**List**](OpenAiChatCompletionChoice.md) | | [optional] [default to null] | -| **usage** | [**OpenAiCompletionUsage**](OpenAiCompletionUsage.md) | | [optional] [default to null] | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/docs/api/specification/Models/OpenAiCompletionChoice.md b/docs/docs/api/specification/Models/OpenAiCompletionChoice.md deleted file mode 100644 index 95cb3bd6..00000000 --- a/docs/docs/api/specification/Models/OpenAiCompletionChoice.md +++ /dev/null @@ -1,11 +0,0 @@ -# OpenAiCompletionChoice -## Properties - -| Name | Type | Description | Notes | -|------------ | ------------- | ------------- | -------------| -| **finish\_reason** | **String** | | [optional] [default to null] | -| **index** | **Integer** | | [optional] [default to null] | -| **text** | **String** | | [optional] [default to null] | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/docs/api/specification/Models/OpenAiCompletionMessage.md b/docs/docs/api/specification/Models/OpenAiCompletionMessage.md deleted file mode 100644 index 3d8f8b79..00000000 --- a/docs/docs/api/specification/Models/OpenAiCompletionMessage.md +++ /dev/null @@ -1,11 +0,0 @@ -# OpenAiCompletionMessage -## Properties - -| Name | Type | Description | Notes | -|------------ | ------------- | ------------- | -------------| -| **role** | **String** | | [default to null] | -| **content** | **object** | | [default to null] | -| **name** | **String** | | [optional] [default to null] | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/docs/api/specification/Models/OpenAiCompletionRequest.md b/docs/docs/api/specification/Models/OpenAiCompletionRequest.md deleted file mode 100644 index 1018755d..00000000 --- a/docs/docs/api/specification/Models/OpenAiCompletionRequest.md +++ /dev/null @@ -1,14 +0,0 @@ -# OpenAiCompletionRequest -## Properties - -| Name | Type | Description | Notes | -|------------ | ------------- | ------------- | -------------| -| **model** | **String** | Name of the Farm 'Raag Model' to be used. | [default to null] | -| **prompt** | **object** | | [default to null] | -| **max\_tokens** | **Integer** | | [optional] [default to null] | -| **stream** | **Boolean** | | [optional] [default to null] | -| **temperature** | **Double** | | [optional] [default to null] | -| **user** | **String** | | [optional] [default to null] | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/docs/api/specification/Models/OpenAiCompletionResponse.md b/docs/docs/api/specification/Models/OpenAiCompletionResponse.md deleted file mode 100644 index a16d4770..00000000 --- a/docs/docs/api/specification/Models/OpenAiCompletionResponse.md +++ /dev/null @@ -1,14 +0,0 @@ -# OpenAiCompletionResponse -## Properties - -| Name | Type | Description | Notes | -|------------ | ------------- | ------------- | -------------| -| **id** | **String** | | [optional] [default to null] | -| **object** | **String** | | [optional] [default to null] | -| **created** | **Long** | | [optional] [default to null] | -| **model** | **String** | | [optional] [default to null] | -| **choices** | [**List**](OpenAiCompletionChoice.md) | | [optional] [default to null] | -| **usage** | [**OpenAiCompletionUsage**](OpenAiCompletionUsage.md) | | [optional] [default to null] | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/docs/api/specification/Models/OpenAiCompletionUsage.md b/docs/docs/api/specification/Models/OpenAiCompletionUsage.md deleted file mode 100644 index 8c535d0e..00000000 --- a/docs/docs/api/specification/Models/OpenAiCompletionUsage.md +++ /dev/null @@ -1,11 +0,0 @@ -# OpenAiCompletionUsage -## Properties - -| Name | Type | Description | Notes | -|------------ | ------------- | ------------- | -------------| -| **completion\_tokens** | **Integer** | | [optional] [default to null] | -| **prompt\_tokens** | **Integer** | | [optional] [default to null] | -| **total\_tokens** | **Integer** | | [optional] [default to null] | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/docs/api/specification/Models/OpenAiModel.md b/docs/docs/api/specification/Models/OpenAiModel.md deleted file mode 100644 index db56e343..00000000 --- a/docs/docs/api/specification/Models/OpenAiModel.md +++ /dev/null @@ -1,12 +0,0 @@ -# OpenAiModel -## Properties - -| Name | Type | Description | Notes | -|------------ | ------------- | ------------- | -------------| -| **id** | **String** | | [optional] [default to null] | -| **created** | **Long** | | [optional] [default to null] | -| **owned\_by** | **String** | | [optional] [default to null] | -| **object** | **String** | | [optional] [default to null] | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/docs/api/specification/Models/OpenAiModelsReponse.md b/docs/docs/api/specification/Models/OpenAiModelsReponse.md deleted file mode 100644 index 7a485273..00000000 --- a/docs/docs/api/specification/Models/OpenAiModelsReponse.md +++ /dev/null @@ -1,10 +0,0 @@ -# OpenAiModelsReponse -## Properties - -| Name | Type | Description | Notes | -|------------ | ------------- | ------------- | -------------| -| **object** | **String** | | [optional] [default to null] | -| **data** | [**List**](OpenAiModel.md) | | [optional] [default to null] | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/docs/api/specification/Models/Silo.md b/docs/docs/api/specification/Models/Silo.md deleted file mode 100644 index cff315a2..00000000 --- a/docs/docs/api/specification/Models/Silo.md +++ /dev/null @@ -1,16 +0,0 @@ -# Silo -## Properties - -| Name | Type | Description | Notes | -|------------ | ------------- | ------------- | -------------| -| **uuid** | **UUID** | Identifier of the Silo | [default to null] | -| **name** | **String** | Name of the Silo. Must be unique. | [default to null] | -| **vectorStore** | **String** | Type to be used for the Vector Store | [default to null] | -| **embeddingModel** | **String** | Type to be used for the Embedding Model | [default to null] | -| **ingestorLoader** | **String** | Type to be used for the Ingestor Loader | [default to null] | -| **vectorStoreSettings** | **List** | Settings to be linked to the Silo's Vector Store in the form of `key = value` pairs. | [optional] [default to null] | -| **embeddingSettings** | **List** | Settings to be linked to the Silo's Embedding in the form of `key = value` pairs. | [optional] [default to null] | -| **ingestorSettings** | **List** | Settings to be linked to the Silo's Ingestor in the form of `key = value` pairs. | [optional] [default to null] | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/docs/api/specification/README.md b/docs/docs/api/specification/README.md deleted file mode 100644 index 6e61de61..00000000 --- a/docs/docs/api/specification/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# Specification - - -## Documentation for API Endpoints - -All URIs are relative to *http://localhost:1985* - -| Class | Method | HTTP request | Description | -|------------ | ------------- | ------------- | -------------| -| *DatabaseCommandApi* | [**exportDatabase**](Apis/DatabaseCommandApi.md#exportdatabase) | **POST** /api/backend/command/database/export | Create a database export | -| *FarmRepositoryApi* | [**createFarm**](Apis/FarmRepositoryApi.md#createfarm) | **POST** /api/backend/repository/farm/ | Create a new Farm | -*FarmRepositoryApi* | [**deleteFarm**](Apis/FarmRepositoryApi.md#deletefarm) | **DELETE** /api/backend/repository/farm/\{uuid\} | Delete a Farm | -*FarmRepositoryApi* | [**getFarm**](Apis/FarmRepositoryApi.md#getfarm) | **GET** /api/backend/repository/farm/\{uuid\} | Retrieve one Farm | -*FarmRepositoryApi* | [**listFarms**](Apis/FarmRepositoryApi.md#listfarms) | **GET** /api/backend/repository/farm/ | List all Farms | -*FarmRepositoryApi* | [**updateFarm**](Apis/FarmRepositoryApi.md#updatefarm) | **PATCH** /api/backend/repository/farm/\{uuid\} | Update a Farm | -| *HealthApi* | [**health**](Apis/HealthApi.md#health) | **GET** /api/app/health/status | Check dRAGon app health | -| *RaaGApi* | [**chatCompletions**](Apis/RaaGApi.md#chatcompletions) | **POST** /api/raag/v1/chat/completions | Creates a chat completion | -*RaaGApi* | [**completions**](Apis/RaaGApi.md#completions) | **POST** /api/raag/v1/completions | Creates a completion | -*RaaGApi* | [**models**](Apis/RaaGApi.md#models) | **GET** /api/raag/v1/models | List models | -| *SearchApi* | [**searchDocumentsInSilo**](Apis/SearchApi.md#searchdocumentsinsilo) | **POST** /api/rag/search/documents/silo/\{uuid\} | Search documents inside a Silo | -| *SiloCommandApi* | [**rebuildSilo**](Apis/SiloCommandApi.md#rebuildsilo) | **POST** /api/backend/command/silo/rebuild/\{uuid\} | Rebuild Silo | -| *SiloRepositoryApi* | [**createSilo**](Apis/SiloRepositoryApi.md#createsilo) | **POST** /api/backend/repository/silo/ | Create a new Silo | -*SiloRepositoryApi* | [**deleteSilo**](Apis/SiloRepositoryApi.md#deletesilo) | **DELETE** /api/backend/repository/silo/\{uuid\} | Delete a Silo | -*SiloRepositoryApi* | [**getSilo**](Apis/SiloRepositoryApi.md#getsilo) | **GET** /api/backend/repository/silo/\{uuid\} | Retrieve one Silo | -*SiloRepositoryApi* | [**listSilos**](Apis/SiloRepositoryApi.md#listsilos) | **GET** /api/backend/repository/silo/ | List all Silos | -*SiloRepositoryApi* | [**updateSilo**](Apis/SiloRepositoryApi.md#updatesilo) | **PATCH** /api/backend/repository/silo/\{uuid\} | Update a Silo | - - - -## Documentation for Models - - - [EmbeddingMatchResponse](./Models/EmbeddingMatchResponse.md) - - [Farm](./Models/Farm.md) - - [OpenAiChatCompletionChoice](./Models/OpenAiChatCompletionChoice.md) - - [OpenAiChatCompletionRequest](./Models/OpenAiChatCompletionRequest.md) - - [OpenAiChatCompletionResponse](./Models/OpenAiChatCompletionResponse.md) - - [OpenAiCompletionChoice](./Models/OpenAiCompletionChoice.md) - - [OpenAiCompletionMessage](./Models/OpenAiCompletionMessage.md) - - [OpenAiCompletionRequest](./Models/OpenAiCompletionRequest.md) - - [OpenAiCompletionResponse](./Models/OpenAiCompletionResponse.md) - - [OpenAiCompletionUsage](./Models/OpenAiCompletionUsage.md) - - [OpenAiModel](./Models/OpenAiModel.md) - - [OpenAiModelsReponse](./Models/OpenAiModelsReponse.md) - - [Silo](./Models/Silo.md) - - - -## Documentation for Authorization - -All endpoints do not require authorization. diff --git a/docs/docs/commands/_category_.yml b/docs/docs/commands/_category_.yml deleted file mode 100644 index d3d081bb..00000000 --- a/docs/docs/commands/_category_.yml +++ /dev/null @@ -1 +0,0 @@ -label: 'Commands' \ No newline at end of file diff --git a/docs/docs/commands/database-export.mdx b/docs/docs/commands/database-export.mdx deleted file mode 100644 index 48f34f67..00000000 --- a/docs/docs/commands/database-export.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -keywords: [database, export, dump, backup, json, nitrite] ---- -import WIPS from '../../src/components/Admonitions/_wip_section.mdx'; - -# Database Export -This command is used to dump the database to a JSON file. It can be used to backup the database or to move the database to another instance. - -## Online Export -To export the database while the backend server is running, use the following API endpoint: -```bash -curl -X 'POST' 'http://localhost:1985/api/backend/command/database/export' -``` - -## Offline Export -:::info - -This command should only be used when the backend server is offline. Running this command while the backend server is running may not work as the database could be locked. To export the database while the backend server is running, use the API endpoint provided above. - -::: - -### Using Gradle -```bash -gradle bootRun --args="--command=database-export --output=/path/to/dump.json" -``` - -### Using Java -```bash -java -jar backend.jar --command=database-export --output=/path/to/dump.json -``` diff --git a/docs/docs/contributing/_category_.yml b/docs/docs/contributing/_category_.yml deleted file mode 100644 index 35ff4266..00000000 --- a/docs/docs/contributing/_category_.yml +++ /dev/null @@ -1 +0,0 @@ -label: 'Contributing' \ No newline at end of file diff --git a/docs/docs/contributing/launch-dragon-dev.mdx b/docs/docs/contributing/launch-dragon-dev.mdx deleted file mode 100644 index d548321c..00000000 --- a/docs/docs/contributing/launch-dragon-dev.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -sidebar_position: 1 ---- -# dRAGon Development Mode -:::warning[Visual Studio Code Dev Containers] - -In order to be as close as possible to the development environment, we **strongly** recommend using Visual Studio Code Dev Containers. You can find the configuration file in the `.devcontainer` folder. - -If it's not possible please make sure you have the following tools installed with the **correct** versions: -* Java 17 -* Gradle 8.7 -* Node.js 20 -* NPM 10 -* "Unix like" System (Linux, MacOS) - -However we do **NOT** accept any issues related to troubles encountered by **NOT** using the Dev Containers. - -::: - -## Clone Repository -```shell -git clone https://github.com/dRAGon-Okinawa/dRAGon -``` - -## Prepare Dependencies -```shell -gradle npmInstall build -``` - -## Launching dRAGon -```shell -gradle bootRun -``` \ No newline at end of file diff --git a/docs/docs/getting-started.mdx b/docs/docs/getting-started.mdx deleted file mode 100644 index ecb43c39..00000000 --- a/docs/docs/getting-started.mdx +++ /dev/null @@ -1,42 +0,0 @@ ---- -sidebar_position: 1 ---- -import WIPS from '../src/components/Admonitions/_wip_section.mdx'; - -# Getting Started - -Let's discover **dRAGon in less than 5 minutes**. - -## dRAGon Startup Guide -:::danger - dRAGon lacks of authentication and authorization mechanisms. It is not recommended to expose it to the internet or unsafe networks. - These mechanisms will be implemented in a near future. -::: - -:::warning - dRAGon is still in active development stage and may contain bugs or incomplete features. - No smooth upgrade path is guaranteed between versions. - Can be broken at any time. -::: - -### 1. Launch -:::note - The best way to run dRAGon is to use Docker. - If you want to run it without Docker, you can use Gradle and follow [dRAGon Development Mode](/docs/contributing/launch-dragon-dev). -::: - -```shell -docker run --rm -p 1985:1985 -v $(pwd)/data:/data -v $(pwd)/documents:/documents --name dRAGon ghcr.io/dragon-okinawa/dragon:latest -``` - -:::info - `/data` and `/documents` are optional volumes to mount. You can mount any directory you want! - * `/data` is used to store the dRAGon databas and settings. If you want to keep your data between reboots, you should mount this volume. - * `/documents` is used here to store the documents to be indexed inside the vector store (eg. by using FileSystem Ingestor). -::: - -### 2. Access -Open your browser and go to [http://localhost:1985](http://localhost:1985). - -### 3. Configure - \ No newline at end of file diff --git a/docs/docs/integrations/_category_.yml b/docs/docs/integrations/_category_.yml deleted file mode 100644 index b11c808e..00000000 --- a/docs/docs/integrations/_category_.yml +++ /dev/null @@ -1 +0,0 @@ -label: 'Integrations' \ No newline at end of file diff --git a/docs/docs/integrations/librechat.mdx b/docs/docs/integrations/librechat.mdx deleted file mode 100644 index e7b4c593..00000000 --- a/docs/docs/integrations/librechat.mdx +++ /dev/null @@ -1,25 +0,0 @@ -import WIPS from '../../src/components/Admonitions/_wip_section.mdx'; - -# LibreChat -## As an AI Endpoint (OpenAI compatible) -```yaml -endpoints: - custom: - - name: "dRAGon" - apiKey: "YOUR_API_KEY" - baseURL: "http://localhost:1985/api/raag/v1" - models: - default: ["your-raag-model-name"] - fetch: true - titleConvo: true - titleModel: "your-raag-model-name" - titleMethod: "completion" - modelDisplayLabel: "dRAGon" - iconURL: "https://dragon.okinawa/img/dragon_okinawa_icon.png" -``` - -## As a LangChain.js Plugin - - -## As an OpenAPI Plugin - \ No newline at end of file diff --git a/docs/docs/integrations/n8n.mdx b/docs/docs/integrations/n8n.mdx deleted file mode 100644 index d28a9b24..00000000 --- a/docs/docs/integrations/n8n.mdx +++ /dev/null @@ -1,4 +0,0 @@ -import WIPS from '../../src/components/Admonitions/_wip_section.mdx'; - -# N8N - \ No newline at end of file diff --git a/docs/docs/roadmap.md b/docs/docs/roadmap.md deleted file mode 100644 index 4c2ef9b8..00000000 --- a/docs/docs/roadmap.md +++ /dev/null @@ -1,23 +0,0 @@ -# Roadmap -- [X] RaaG : RAG as a GPT -- [ ] Multi-Modal Input Sources - - [ ] Vector Ingestors - - [X] Local Files - - [X] Web URLs - - [ ] SQL Database - - [ ] NFS Mount - - [ ] S3 Bucket - - [ ] SMB / CIFS Mount - - [ ] Git - - [ ] Live / Direct Ingestors - - [ ] Web Search - - [ ] API Endpoints - - [ ] SQL Query - - [ ] SQL Query Generator -- [ ] Documents Types - - [X] Text : Plain / PDF / Word - - [X] Presentations : PowerPoint - - [ ] Spreadsheets : Excel / CSV - - [ ] Images : PNG / JPEG / GIF - - [ ] Audio : MP3 / WAV - - [ ] Video : MP4 / AVI \ No newline at end of file diff --git a/docs/docs/tutorials/_category_.yml b/docs/docs/tutorials/_category_.yml deleted file mode 100644 index 1f4b31f5..00000000 --- a/docs/docs/tutorials/_category_.yml +++ /dev/null @@ -1 +0,0 @@ -label: 'Tutorials' \ No newline at end of file diff --git a/docs/docs/tutorials/raag-api/_category_.yml b/docs/docs/tutorials/raag-api/_category_.yml deleted file mode 100644 index 010c7e59..00000000 --- a/docs/docs/tutorials/raag-api/_category_.yml +++ /dev/null @@ -1 +0,0 @@ -label: 'RaaG API' \ No newline at end of file diff --git a/docs/docs/tutorials/raag-api/raag-api-farm-chat-python-langchain-client.mdx b/docs/docs/tutorials/raag-api/raag-api-farm-chat-python-langchain-client.mdx deleted file mode 100644 index 808d7812..00000000 --- a/docs/docs/tutorials/raag-api/raag-api-farm-chat-python-langchain-client.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -keywords: [tutorial,raag,api,silo,farm,chat,langchain,python] ---- -import WIPS from '../../../src/components/Admonitions/_wip_section.mdx'; - -# LangChain : Chat with a Farm - - -## Setup a Silo -Follow the [tutorial](/docs/tutorials/rag-api/rag-api-create-query-silo.mdx) to setup a Silo through API. - -## Setup a Farm - -## Chat with the Farm \ No newline at end of file diff --git a/docs/docs/tutorials/raag-api/raag-faq-sql-ingestor.mdx b/docs/docs/tutorials/raag-api/raag-faq-sql-ingestor.mdx deleted file mode 100644 index 64affa90..00000000 --- a/docs/docs/tutorials/raag-api/raag-faq-sql-ingestor.mdx +++ /dev/null @@ -1,7 +0,0 @@ ---- -keywords: [tutorial,raag,rag,api,silo,farm,chat,faq,langchain,python] ---- -import WIPS from '../../../src/components/Admonitions/_wip_section.mdx'; - -# FAQ : SQL Ingestor as a RAG Data Provider - \ No newline at end of file diff --git a/docs/docs/tutorials/rag-api/_category_.yml b/docs/docs/tutorials/rag-api/_category_.yml deleted file mode 100644 index 2b3b27d3..00000000 --- a/docs/docs/tutorials/rag-api/_category_.yml +++ /dev/null @@ -1 +0,0 @@ -label: 'RAG API' \ No newline at end of file diff --git a/docs/docs/tutorials/rag-api/rag-api-create-query-silo.mdx b/docs/docs/tutorials/rag-api/rag-api-create-query-silo.mdx deleted file mode 100644 index 96e3a826..00000000 --- a/docs/docs/tutorials/rag-api/rag-api-create-query-silo.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -keywords: [tutorial,rag,api,silo,create,query] ---- -import WIPS from '../../../src/components/Admonitions/_wip_section.mdx'; - -# Create and Query a Silo - - -## Create a Silo - -## Index a directory - -## Query a Silo \ No newline at end of file diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts deleted file mode 100644 index 97a8e2c6..00000000 --- a/docs/docusaurus.config.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { themes as prismThemes } from 'prism-react-renderer'; -import type { Config } from '@docusaurus/types'; -import type * as Preset from '@docusaurus/preset-classic'; - -const config: Config = { - title: 'dRAGon', - tagline: 'Dynamic Retrieval Augmented Generation for Optimized Nimble', - favicon: '/favicon.ico', - url: 'https://dragon.okinawa', - baseUrl: '/', - organizationName: 'isontheline', - projectName: 'dRAGon', - deploymentBranch: 'gh-pages', - onBrokenLinks: 'throw', - onBrokenMarkdownLinks: 'throw', - markdown: { - mermaid: true, - }, - themes: ['@docusaurus/theme-mermaid'], - i18n: { - defaultLocale: 'en', - locales: ['en'], - }, - presets: [ - [ - 'classic', - { - docs: { - sidebarPath: './sidebars.ts', - showLastUpdateTime: true, - }, - theme: { - customCss: './src/css/custom.css', - }, - pages: { - showLastUpdateTime: true, - }, - } satisfies Preset.Options, - ], - ], - - themeConfig: { - image: 'img/dragon_okinawa.jpg', - navbar: { - title: 'dRAGon', - logo: { - alt: 'dRAGon', - src: 'img/dragon_okinawa_icon.png', - }, - items: [ - { - type: 'docSidebar', - sidebarId: 'tutorialSidebar', - position: 'left', - label: 'Getting Started', - }, - { - href: 'https://github.com/isontheline/dRAGon', - label: 'GitHub', - position: 'right', - }, - ], - }, - footer: { - style: 'dark', - links: [ - { - title: 'Docs', - items: [ - { - label: 'Getting Started', - to: '/docs/getting-started', - }, - ], - }, - { - title: 'Community', - items: [ - { - label: 'Discussions', - href: 'https://github.com/isontheLine/dRAGon/discussions', - }, - ], - }, - { - title: 'More', - items: [ - { - label: 'GitHub', - href: 'https://github.com/isontheline/dRAGon', - }, - ], - }, - ], - copyright: `© ${new Date().getFullYear()} All dRAGon Contributors`, - }, - prism: { - theme: prismThemes.github, - darkTheme: prismThemes.dracula, - }, - } satisfies Preset.ThemeConfig, - plugins: [ - ['docusaurus-lunr-search', { - excludeRoutes: ['/docs/api/specification/**'], - }] - ] -}; - -export default config; diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index 9f856e41..00000000 --- a/docs/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "dragon-docs", - "version": "0.0.0", - "private": true, - "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start", - "build": "docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "buildnserve": "docusaurus build && docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids", - "typecheck": "tsc" - }, - "dependencies": { - "@docusaurus/core": "3.3.2", - "@docusaurus/preset-classic": "3.3.2", - "@docusaurus/theme-mermaid": "3.3.2", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "docusaurus-lunr-search": "^3.4.0", - "prism-react-renderer": "^2.3.0", - "react": "^18.0.0", - "react-dom": "^18.0.0" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "3.3.2", - "@docusaurus/tsconfig": "3.3.2", - "@docusaurus/types": "3.3.2", - "typescript": "~5.2.2" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 3 chrome version", - "last 3 firefox version", - "last 5 safari version" - ] - }, - "engines": { - "node": ">=18.0" - } -} diff --git a/docs/sidebars.ts b/docs/sidebars.ts deleted file mode 100644 index acc7685a..00000000 --- a/docs/sidebars.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type {SidebarsConfig} from '@docusaurus/plugin-content-docs'; - -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ -const sidebars: SidebarsConfig = { - // By default, Docusaurus generates a sidebar from the docs folder structure - tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], - - // But you can create a sidebar manually - /* - tutorialSidebar: [ - 'intro', - 'hello', - { - type: 'category', - label: 'Tutorial', - items: ['tutorial-basics/create-a-document'], - }, - ], - */ -}; - -export default sidebars; diff --git a/docs/src/components/Admonitions/_wip_section.mdx b/docs/src/components/Admonitions/_wip_section.mdx deleted file mode 100644 index a7311d1a..00000000 --- a/docs/src/components/Admonitions/_wip_section.mdx +++ /dev/null @@ -1,5 +0,0 @@ -import Admonition from '@theme/Admonition'; - - - This section lacks useful information. It is a work in progress and will be updated soon. - \ No newline at end of file diff --git a/docs/src/components/HomepageFeatures/index.tsx b/docs/src/components/HomepageFeatures/index.tsx deleted file mode 100644 index 260d2a93..00000000 --- a/docs/src/components/HomepageFeatures/index.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import clsx from 'clsx'; -import Heading from '@theme/Heading'; -import styles from './styles.module.css'; - -type FeatureItem = { - title: string; - description: JSX.Element; -}; - -const FeatureList: FeatureItem[] = [ - { - title: 'Easy to Use', - description: ( - <> - dRAGon was designed from the ground up to be easily installed and - used to get your RAG pipeline up and running quickly. - - ), - }, - { - title: 'Focus on What Matters', - description: ( - <> - It lets you focus on your RAG pipeline, and we'll do the chores. Go - ahead and import your docs into the pipeline and let dRAGon do the rest. - - ), - }, - { - title: 'Powered by Spring Boot and Vue.js', - description: ( - <> - Built on top of Spring Boot and Vue.js, two of the most popular - open-source frameworks for building strong backends and frontends. - - ), - }, -]; - -function Feature({title, Svg, description}: FeatureItem) { - return ( -
-
- {title} -

{description}

-
-
- ); -} - -export default function HomepageFeatures(): JSX.Element { - return ( -
-
-
- {FeatureList.map((props, idx) => ( - - ))} -
-
-
- ); -} diff --git a/docs/src/components/HomepageFeatures/styles.module.css b/docs/src/components/HomepageFeatures/styles.module.css deleted file mode 100644 index b248eb2e..00000000 --- a/docs/src/components/HomepageFeatures/styles.module.css +++ /dev/null @@ -1,11 +0,0 @@ -.features { - display: flex; - align-items: center; - padding: 2rem 0; - width: 100%; -} - -.featureSvg { - height: 200px; - width: 200px; -} diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css deleted file mode 100644 index 88572088..00000000 --- a/docs/src/css/custom.css +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Any CSS included here will be global. The classic template - * bundles Infima by default. Infima is a CSS framework designed to - * work well for content-centric websites. - */ - -/* You can override the default Infima variables here. */ -:root { - --ifm-color-primary: #8b5cf6; - --ifm-color-primary-dark: #743cf4; - --ifm-color-primary-darker: #692cf3; - --ifm-color-primary-darkest: #4d0ce0; - --ifm-color-primary-light: #a27cf8; - --ifm-color-primary-lighter: #ad8cf9; - --ifm-color-primary-lightest: #cfbcfb; -} - -/* For readability concerns, you should choose a lighter palette in dark mode. */ -[data-theme='dark'] { - --ifm-color-primary: #8b5cf6; - --ifm-color-primary-dark: #743cf4; - --ifm-color-primary-darker: #692cf3; - --ifm-color-primary-darkest: #4d0ce0; - --ifm-color-primary-light: #a27cf8; - --ifm-color-primary-lighter: #ad8cf9; - --ifm-color-primary-lightest: #cfbcfb; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); -} \ No newline at end of file diff --git a/docs/src/pages/index.module.css b/docs/src/pages/index.module.css deleted file mode 100644 index de9a1a53..00000000 --- a/docs/src/pages/index.module.css +++ /dev/null @@ -1,31 +0,0 @@ -/** - * CSS files with the .module.css suffix will be treated as CSS modules - * and scoped locally. - */ - -.heroBanner { - padding: 4rem 0; - text-align: center; - position: relative; - overflow: hidden; - background: url('/img/dragon_okinawa_background.jpg'); - background-size: cover; - background-position-y: 60%; -} - -.heroBanner h1, -.heroBanner p { - text-shadow: 0.5px 0.5px var(--ifm-font-color-base); -} - -@media screen and (max-width: 996px) { - .heroBanner { - padding: 2rem; - } -} - -.buttons { - display: flex; - align-items: center; - justify-content: center; -} \ No newline at end of file diff --git a/docs/src/pages/index.tsx b/docs/src/pages/index.tsx deleted file mode 100644 index 7c9690c6..00000000 --- a/docs/src/pages/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import clsx from 'clsx'; -import Link from '@docusaurus/Link'; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import Layout from '@theme/Layout'; -import HomepageFeatures from '@site/src/components/HomepageFeatures'; -import Heading from '@theme/Heading'; - -import styles from './index.module.css'; - -function HomepageHeader() { - const {siteConfig} = useDocusaurusContext(); - return ( -
-
- - {siteConfig.title} - -

{siteConfig.tagline}

-
- - dRAGon Getting Started - 5min ⏱️ - -
-
-
- ); -} - -export default function Home(): JSX.Element { - const {siteConfig} = useDocusaurusContext(); - return ( - - -
- -
-
- ); -} diff --git a/docs/static/.nojekyll b/docs/static/.nojekyll deleted file mode 100644 index e69de29b..00000000 diff --git a/docs/static/CNAME b/docs/static/CNAME deleted file mode 100644 index 215813bc..00000000 --- a/docs/static/CNAME +++ /dev/null @@ -1 +0,0 @@ -dragon.okinawa \ No newline at end of file diff --git a/docs/static/favicon.ico b/docs/static/favicon.ico deleted file mode 100644 index 65730687..00000000 Binary files a/docs/static/favicon.ico and /dev/null differ diff --git a/docs/static/img/dragon_okinawa.jpg b/docs/static/img/dragon_okinawa.jpg deleted file mode 100644 index 22a9eb96..00000000 Binary files a/docs/static/img/dragon_okinawa.jpg and /dev/null differ diff --git a/docs/static/openapi/swagger-app.json b/docs/static/openapi/swagger-app.json deleted file mode 100644 index 4fff234c..00000000 --- a/docs/static/openapi/swagger-app.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "openapi": "3.0.1", - "info": { - "title": "dRAGon API", - "description": "dRAGon API Reference for Developers", - "license": { - "name": "MIT License", - "url": "https://github.com/dRAGon-Okinawa/dRAGon/blob/main/LICENSE" - }, - "version": "0.0.0" - }, - "externalDocs": { - "description": "dRAGon Documentation", - "url": "https://dragon.okinawa" - }, - "servers": [ - { - "url": "http://localhost:1985", - "description": "Generated server url" - } - ], - "tags": [ - { - "name": "Health", - "description": "Health Check API Endpoints" - } - ], - "paths": { - "/api/app/health/status": { - "get": { - "tags": [ - "Health" - ], - "summary": "Check dRAGon app health", - "description": "Returns a simple message to confirm that the app is alive.", - "operationId": "health", - "responses": { - "200": { - "description": "dRAGon app is alive.", - "content": { - "*/*": { - "schema": { - "type": "string" - } - } - } - } - } - } - } - }, - "components": {} -} \ No newline at end of file diff --git a/docs/static/openapi/swagger-backend.json b/docs/static/openapi/swagger-backend.json deleted file mode 100644 index bd9f1fc0..00000000 --- a/docs/static/openapi/swagger-backend.json +++ /dev/null @@ -1,529 +0,0 @@ -{ - "openapi": "3.0.1", - "info": { - "title": "dRAGon API", - "description": "dRAGon API Reference for Developers", - "license": { - "name": "MIT License", - "url": "https://github.com/dRAGon-Okinawa/dRAGon/blob/main/LICENSE" - }, - "version": "0.0.0" - }, - "externalDocs": { - "description": "dRAGon Documentation", - "url": "https://dragon.okinawa" - }, - "servers": [ - { - "url": "http://localhost:1985", - "description": "Generated server url" - } - ], - "tags": [ - { - "name": "Database Command", - "description": "Database Command API Endpoints" - }, - { - "name": "Farm Repository", - "description": "Farm Repository Management API Endpoints" - }, - { - "name": "Silo Repository", - "description": "Silo Repository Management API Endpoints" - }, - { - "name": "Silo Command", - "description": "Silo Command API Endpoints" - } - ], - "paths": { - "/api/backend/repository/silo/": { - "get": { - "tags": [ - "Silo Repository" - ], - "summary": "List all Silos", - "description": "Returns all Silo entities stored in the database.", - "operationId": "listSilos", - "responses": { - "200": { - "description": "List has been successfully retrieved.", - "content": { - "*/*": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Silo" - } - } - } - } - } - } - }, - "post": { - "tags": [ - "Silo Repository" - ], - "summary": "Create a new Silo", - "description": "Creates one Silo entity in the database.", - "operationId": "createSilo", - "responses": { - "409": { - "description": "Constraint violation." - }, - "200": { - "description": "Silo has been successfully created.", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/Silo" - } - } - } - } - } - } - }, - "/api/backend/repository/farm/": { - "get": { - "tags": [ - "Farm Repository" - ], - "summary": "List all Farms", - "description": "Returns all Farm entities stored in the database.", - "operationId": "listFarms", - "responses": { - "200": { - "description": "List has been successfully retrieved.", - "content": { - "*/*": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Farm" - } - } - } - } - } - } - }, - "post": { - "tags": [ - "Farm Repository" - ], - "summary": "Create a new Farm", - "description": "Creates one Farm entity in the database.", - "operationId": "createFarm", - "responses": { - "409": { - "description": "Constraint violation." - }, - "200": { - "description": "Farm has been successfully created.", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/Farm" - } - } - } - } - } - } - }, - "/api/backend/command/silo/rebuild/{uuid}": { - "post": { - "tags": [ - "Silo Command" - ], - "summary": "Rebuild Silo", - "description": "This will recompute the embeddings of the Silo.", - "operationId": "rebuildSilo", - "parameters": [ - { - "name": "uuid", - "in": "path", - "description": "Identifier of the Silo", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "Silo is being rebuilt." - } - } - } - }, - "/api/backend/command/database/export": { - "post": { - "tags": [ - "Database Command" - ], - "summary": "Create a database export", - "description": "Creates a JSON database dump.", - "operationId": "exportDatabase", - "responses": { - "200": { - "description": "Database dump has been successfully created." - } - } - } - }, - "/api/backend/repository/silo/{uuid}": { - "get": { - "tags": [ - "Silo Repository" - ], - "summary": "Retrieve one Silo", - "description": "Returns one Silo entity from its UUID stored in the database.", - "operationId": "getSilo", - "parameters": [ - { - "name": "uuid", - "in": "path", - "description": "Identifier of the Silo", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "404": { - "description": "Silo not found." - }, - "200": { - "description": "Silo has been successfully retrieved.", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/Silo" - } - } - } - } - } - }, - "delete": { - "tags": [ - "Silo Repository" - ], - "summary": "Delete a Silo", - "description": "Deletes one Silo entity from its UUID stored in the database.", - "operationId": "deleteSilo", - "parameters": [ - { - "name": "uuid", - "in": "path", - "description": "Identifier of the Silo", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "Silo has been successfully deleted." - }, - "404": { - "description": "Silo not found." - } - } - }, - "patch": { - "tags": [ - "Silo Repository" - ], - "summary": "Update a Silo", - "description": "Updates one Silo entity in the database.", - "operationId": "updateSilo", - "parameters": [ - { - "name": "uuid", - "in": "path", - "description": "Identifier of the Silo", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "object" - } - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Silo has been successfully created.", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/Silo" - } - } - } - }, - "404": { - "description": "Silo not found." - } - } - } - }, - "/api/backend/repository/farm/{uuid}": { - "get": { - "tags": [ - "Farm Repository" - ], - "summary": "Retrieve one Farm", - "description": "Returns one Farm entity from its UUID stored in the database.", - "operationId": "getFarm", - "parameters": [ - { - "name": "uuid", - "in": "path", - "description": "Identifier of the Farm", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Farm has been successfully retrieved.", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/Farm" - } - } - } - }, - "404": { - "description": "Farm not found." - } - } - }, - "delete": { - "tags": [ - "Farm Repository" - ], - "summary": "Delete a Farm", - "description": "Deletes one Farm entity from its UUID stored in the database.", - "operationId": "deleteFarm", - "parameters": [ - { - "name": "uuid", - "in": "path", - "description": "Identifier of the Farm", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Farm has been successfully deleted." - }, - "404": { - "description": "Farm not found." - } - } - }, - "patch": { - "tags": [ - "Farm Repository" - ], - "summary": "Update a Farm", - "description": "Updates one Farm entity in the database.", - "operationId": "updateFarm", - "parameters": [ - { - "name": "uuid", - "in": "path", - "description": "Identifier of the Farm", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "object" - } - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Farm has been successfully created.", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/Farm" - } - } - } - }, - "404": { - "description": "Farm not found." - } - } - } - } - }, - "components": { - "schemas": { - "Silo": { - "required": [ - "embeddingModel", - "ingestorLoader", - "name", - "uuid", - "vectorStore" - ], - "type": "object", - "properties": { - "uuid": { - "type": "string", - "description": "Identifier of the Silo", - "format": "uuid" - }, - "name": { - "type": "string", - "description": "Name of the Silo. Must be unique." - }, - "vectorStore": { - "type": "string", - "description": "Type to be used for the Vector Store", - "example": "InMemoryEmbeddingStore", - "enum": [ - "InMemoryEmbeddingStore", - "PersistInMemoryEmbeddingStore", - "PGVectorEmbeddingStore" - ] - }, - "embeddingModel": { - "type": "string", - "description": "Type to be used for the Embedding Model", - "example": "BgeSmallEnV15QuantizedEmbeddingModel", - "enum": [ - "BgeSmallEnV15QuantizedEmbeddingModel", - "OpenAiEmbeddingAda002Model", - "OpenAiEmbedding3SmallModel", - "OpenAiEmbedding3LargeModel" - ] - }, - "ingestorLoader": { - "type": "string", - "description": "Type to be used for the Ingestor Loader", - "example": "FileSystem", - "enum": [ - "None", - "FileSystem" - ] - }, - "vectorStoreSettings": { - "type": "array", - "description": "Settings to be linked to the Silo\u0027s Vector Store in the form of `key \u003d value` pairs.", - "items": { - "type": "string", - "description": "Settings to be linked to the Silo\u0027s Vector Store in the form of `key \u003d value` pairs." - } - }, - "embeddingSettings": { - "type": "array", - "description": "Settings to be linked to the Silo\u0027s Embedding in the form of `key \u003d value` pairs.", - "items": { - "type": "string", - "description": "Settings to be linked to the Silo\u0027s Embedding in the form of `key \u003d value` pairs." - } - }, - "ingestorSettings": { - "type": "array", - "description": "Settings to be linked to the Silo\u0027s Ingestor in the form of `key \u003d value` pairs.", - "items": { - "type": "string", - "description": "Settings to be linked to the Silo\u0027s Ingestor in the form of `key \u003d value` pairs." - } - } - }, - "description": "Silo Entity" - }, - "Farm": { - "required": [ - "name", - "uuid" - ], - "type": "object", - "properties": { - "uuid": { - "type": "string", - "description": "Identifier of the Farm", - "format": "uuid" - }, - "name": { - "type": "string", - "description": "Name of the Farm. Must be unique." - }, - "raagIdentifier": { - "pattern": "^[a-z0-9\\-]+$", - "type": "string", - "description": "Identifier for the \u0027Raag Model\u0027 to be used for the RaaG API. Must be unique" - }, - "silos": { - "type": "array", - "description": "List of Silo UUIDs to be linked to the Farm.\nA Farm is a collection of Silos, which each Silo is a collection of Documents.", - "items": { - "type": "string", - "description": "List of Silo UUIDs to be linked to the Farm.\nA Farm is a collection of Silos, which each Silo is a collection of Documents.", - "format": "uuid" - } - }, - "languageModel": { - "type": "string", - "description": "Language Model to be used for the RaaG API", - "enum": [ - "OpenAiModel" - ] - }, - "languageModelSettings": { - "type": "array", - "description": "Settings to be linked to the Farm\u0027s Language Model in the form of `key \u003d value` pairs.", - "items": { - "type": "string", - "description": "Settings to be linked to the Farm\u0027s Language Model in the form of `key \u003d value` pairs." - } - } - }, - "description": "Farm Entity" - } - } - } -} \ No newline at end of file diff --git a/docs/static/openapi/swagger-raag.json b/docs/static/openapi/swagger-raag.json deleted file mode 100644 index 7cfba25d..00000000 --- a/docs/static/openapi/swagger-raag.json +++ /dev/null @@ -1,337 +0,0 @@ -{ - "openapi": "3.0.1", - "info": { - "title": "dRAGon API", - "description": "dRAGon API Reference for Developers", - "license": { - "name": "MIT License", - "url": "https://github.com/dRAGon-Okinawa/dRAGon/blob/main/LICENSE" - }, - "version": "0.0.0" - }, - "externalDocs": { - "description": "dRAGon Documentation", - "url": "https://dragon.okinawa" - }, - "servers": [ - { - "url": "http://localhost:1985", - "description": "Generated server url" - } - ], - "tags": [ - { - "name": "RaaG", - "description": "RAG as a GPT : Compatible Endpoints following Open AI API Format" - } - ], - "paths": { - "/api/raag/v1/completions": { - "post": { - "tags": [ - "RaaG" - ], - "summary": "Creates a completion", - "description": "Creates a completion for the provided prompt and parameters.", - "operationId": "completions", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OpenAiCompletionRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/OpenAiCompletionResponse" - } - } - } - } - } - } - }, - "/api/raag/v1/chat/completions": { - "post": { - "tags": [ - "RaaG" - ], - "summary": "Creates a chat completion", - "description": "Creates a chat completion for the provided prompt and parameters.", - "operationId": "chatCompletions", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OpenAiChatCompletionRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/OpenAiChatCompletionResponse" - } - } - } - } - } - } - }, - "/api/raag/v1/models": { - "get": { - "tags": [ - "RaaG" - ], - "summary": "List models", - "description": "Lists available models.", - "operationId": "models", - "responses": { - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/OpenAiModelsReponse" - } - } - } - } - } - } - } - }, - "components": { - "schemas": { - "OpenAiCompletionRequest": { - "required": [ - "model", - "prompt" - ], - "type": "object", - "properties": { - "model": { - "type": "string", - "description": "Name of the Farm \u0027Raag Model\u0027 to be used." - }, - "prompt": { - "type": "object" - }, - "max_tokens": { - "type": "integer", - "format": "int32" - }, - "stream": { - "type": "boolean" - }, - "temperature": { - "type": "number", - "format": "double" - }, - "user": { - "type": "string" - } - } - }, - "OpenAiCompletionChoice": { - "type": "object", - "properties": { - "finish_reason": { - "type": "string" - }, - "index": { - "type": "integer", - "format": "int32" - }, - "text": { - "type": "string" - } - } - }, - "OpenAiCompletionResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "object": { - "type": "string" - }, - "created": { - "type": "integer", - "format": "int64" - }, - "model": { - "type": "string" - }, - "choices": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OpenAiCompletionChoice" - } - }, - "usage": { - "$ref": "#/components/schemas/OpenAiCompletionUsage" - } - } - }, - "OpenAiCompletionUsage": { - "type": "object", - "properties": { - "completion_tokens": { - "type": "integer", - "format": "int32" - }, - "prompt_tokens": { - "type": "integer", - "format": "int32" - }, - "total_tokens": { - "type": "integer", - "format": "int32" - } - } - }, - "OpenAiChatCompletionRequest": { - "required": [ - "messages", - "model" - ], - "type": "object", - "properties": { - "model": { - "type": "string", - "description": "Name of the Farm \u0027Raag Model\u0027 to be used." - }, - "messages": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OpenAiCompletionMessage" - } - }, - "max_tokens": { - "type": "integer", - "format": "int32" - }, - "stream": { - "type": "boolean" - }, - "temperature": { - "type": "number", - "format": "double" - }, - "user": { - "type": "string" - } - } - }, - "OpenAiCompletionMessage": { - "required": [ - "content", - "role" - ], - "type": "object", - "properties": { - "role": { - "type": "string" - }, - "content": { - "type": "object" - }, - "name": { - "type": "string" - } - } - }, - "OpenAiChatCompletionChoice": { - "type": "object", - "properties": { - "finish_reason": { - "type": "string" - }, - "index": { - "type": "integer", - "format": "int32" - }, - "message": { - "$ref": "#/components/schemas/OpenAiCompletionMessage" - }, - "delta": { - "$ref": "#/components/schemas/OpenAiCompletionMessage" - } - } - }, - "OpenAiChatCompletionResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "object": { - "type": "string" - }, - "created": { - "type": "integer", - "format": "int64" - }, - "model": { - "type": "string" - }, - "choices": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OpenAiChatCompletionChoice" - } - }, - "usage": { - "$ref": "#/components/schemas/OpenAiCompletionUsage" - } - } - }, - "OpenAiModel": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "created": { - "type": "integer", - "format": "int64" - }, - "owned_by": { - "type": "string" - }, - "object": { - "type": "string" - } - } - }, - "OpenAiModelsReponse": { - "type": "object", - "properties": { - "object": { - "type": "string" - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OpenAiModel" - } - } - } - } - } - } -} \ No newline at end of file diff --git a/docs/static/openapi/swagger-rag.json b/docs/static/openapi/swagger-rag.json deleted file mode 100644 index a6e6ba9f..00000000 --- a/docs/static/openapi/swagger-rag.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "openapi": "3.0.1", - "info": { - "title": "dRAGon API", - "description": "dRAGon API Reference for Developers", - "license": { - "name": "MIT License", - "url": "https://github.com/dRAGon-Okinawa/dRAGon/blob/main/LICENSE" - }, - "version": "0.0.0" - }, - "externalDocs": { - "description": "dRAGon Documentation", - "url": "https://dragon.okinawa" - }, - "servers": [ - { - "url": "http://localhost:1985", - "description": "Generated server url" - } - ], - "tags": [ - { - "name": "Search", - "description": "Search API Endpoints" - } - ], - "paths": { - "/api/rag/search/documents/silo/{uuid}": { - "post": { - "tags": [ - "Search" - ], - "summary": "Search documents inside a Silo", - "description": "Search documents from the Silo.", - "operationId": "searchDocumentsInSilo", - "parameters": [ - { - "name": "uuid", - "in": "path", - "description": "Identifier of the Silo", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "maxResults", - "in": "query", - "description": "Max results to return", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 10 - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Documents have been successfully retrieved.", - "content": { - "*/*": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EmbeddingMatchResponse" - } - } - } - } - } - } - } - } - }, - "components": { - "schemas": { - "EmbeddingMatchResponse": { - "type": "object", - "properties": { - "score": { - "type": "number", - "format": "double" - }, - "text": { - "type": "string" - }, - "metadata": { - "type": "object", - "additionalProperties": { - "type": "object" - } - } - } - } - } - } -} \ No newline at end of file diff --git a/docs/tsconfig.json b/docs/tsconfig.json deleted file mode 100644 index 314eab8a..00000000 --- a/docs/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - // This file is not used in compilation. It is here just for a nice editor experience. - "extends": "@docusaurus/tsconfig", - "compilerOptions": { - "baseUrl": "." - } -} diff --git a/frontend/.editorconfig b/frontend/.editorconfig new file mode 100644 index 00000000..0552777e --- /dev/null +++ b/frontend/.editorconfig @@ -0,0 +1,11 @@ +# Editor configuration, see http://editorconfig.org + +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/frontend/.env b/frontend/.env new file mode 100644 index 00000000..a66a24ff --- /dev/null +++ b/frontend/.env @@ -0,0 +1,54 @@ +# Base url of the frontend service +VITE_BASE_URL=/ + +# Backend service base url (__HOSTNAME__ will be replaced by the actual hostname, __SCHEME__ will be replaced by the actual scheme) +VITE_SERVICE_BASE_URL=__SCHEME__://__HOSTNAME__:1985 + +# App Title +VITE_APP_TITLE=dRAGon + +# App Description +VITE_APP_DESC=Dynamic Retrieval Augmented Generation for Optimized Nimble + +# Prefix of the icon name +VITE_ICON_PREFIX=icon + +# Prefix of the local svg icon component, must include VITE_ICON_PREFIX +# Format {VITE_ICON_PREFIX}-{local icon name} +VITE_ICON_LOCAL_PREFIX=icon-local + +# Auth route mode: static | dynamic +VITE_AUTH_ROUTE_MODE=static + +# Static auth route home +VITE_ROUTE_HOME=home + +# Default menu icon +VITE_MENU_ICON=mdi:menu + +# Whether to enable http proxy when is dev mode +VITE_HTTP_PROXY=N + +# vue-router mode: hash | history | memory +VITE_ROUTER_HISTORY_MODE=history + +# Success code of backend service, when the code is received, the request is successful +VITE_SERVICE_SUCCESS_CODE=0000 + +# Logout codes of backend service, when the code is received, the user will be logged out and redirected to login page +VITE_SERVICE_LOGOUT_CODES=8888,8889 + +# Modal logout codes of backend service, when the code is received, the user will be logged out by displaying a modal +VITE_SERVICE_MODAL_LOGOUT_CODES=7777,7778 + +# Token expired codes of backend service, when the code is received, it will refresh the token and resend the request +VITE_SERVICE_EXPIRED_TOKEN_CODES=9999,9998 + +# When the route mode is static, the defined super role +VITE_STATIC_SUPER_ROLE=R_SUPER + +# Sourcemap +VITE_SOURCE_MAP=N + +# Used to differentiate storage across different domains +VITE_STORAGE_PREFIX=DRAGON_ diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs deleted file mode 100644 index 5fdd816f..00000000 --- a/frontend/.eslintrc.cjs +++ /dev/null @@ -1,20 +0,0 @@ -/* eslint-env node */ -require('@rushstack/eslint-patch/modern-module-resolution'); - -module.exports = { - root: true, - extends: ['plugin:vue/vue3-essential', 'eslint:recommended', '@vue/eslint-config-prettier'], - parserOptions: { - ecmaVersion: 'latest' - }, - rules: { - 'vue/multi-word-component-names': 'off', - 'vue/no-reserved-component-names': 'off', - 'vue/component-tags-order': [ - 'error', - { - order: ['script', 'template', 'style'] - } - ] - } -}; diff --git a/frontend/.gitattributes b/frontend/.gitattributes new file mode 100644 index 00000000..9553ccb8 --- /dev/null +++ b/frontend/.gitattributes @@ -0,0 +1,13 @@ +"*.vue" eol=lf +"*.js" eol=lf +"*.ts" eol=lf +"*.jsx" eol=lf +"*.tsx" eol=lf +"*.mjs" eol=lf +"*.json" eol=lf +"*.html" eol=lf +"*.css" eol=lf +"*.scss" eol=lf +"*.md" eol=lf +"*.yaml" eol=lf +"*.yml" eol=lf diff --git a/frontend/.gitignore b/frontend/.gitignore index 2a0e25c7..09e2fc34 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -9,6 +9,7 @@ lerna-debug.log* node_modules .DS_Store +build dist dist-ssr coverage @@ -33,4 +34,4 @@ package-lock.json pnpm-lock.yaml yarn.lock -.VSCodeCounter \ No newline at end of file +.VSCodeCounter diff --git a/frontend/.npmrc b/frontend/.npmrc new file mode 100644 index 00000000..dfc2d686 --- /dev/null +++ b/frontend/.npmrc @@ -0,0 +1,4 @@ +registry=https://registry.npmmirror.com/ +shamefully-hoist=true +ignore-workspace-root-check=true +link-workspace-packages=true diff --git a/frontend/.prettierrc.json b/frontend/.prettierrc.json deleted file mode 100644 index cbbe805d..00000000 --- a/frontend/.prettierrc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "useTabs": false, - "tabWidth": 4, - "trailingComma": "none", - "semi": true, - "singleQuote": true, - "vueIndentScriptAndStyle": false, - "printWidth": 250, - "bracketSameLine": false -} \ No newline at end of file diff --git a/frontend/LICENSE b/frontend/LICENSE new file mode 100644 index 00000000..e5cfde0a --- /dev/null +++ b/frontend/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 All dRAGon Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/frontend/README.md b/frontend/README.md index 576b9809..b8591568 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,24 +1,2 @@ -# frontend - -## Project setup -``` -npm install -``` - -### Compiles and hot-reloads for development -``` -npm run serve -``` - -### Compiles and minifies for production -``` -npm run build -``` - -### Lints and fixes files -``` -npm run lint -``` - -### Customize configuration -See [Configuration Reference](https://cli.vuejs.org/config/). +# dRAGon +Dynamic Retrieval Augmented Generation for Optimized Nimble \ No newline at end of file diff --git a/frontend/babel.config.json b/frontend/babel.config.json deleted file mode 100644 index 49e45c81..00000000 --- a/frontend/babel.config.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "presets": [ - "@vue/cli-plugin-babel/preset" - ] -} \ No newline at end of file diff --git a/frontend/build.gradle b/frontend/build.gradle index c2ef498b..8ba4386a 100644 --- a/frontend/build.gradle +++ b/frontend/build.gradle @@ -4,30 +4,10 @@ plugins { apply plugin: 'java' -task npmLint(type: NpmTask) { +task pnpmLint(type: PnpmTask) { args = ['run', 'lint'] } -task npmBuild(type: NpmTask) { - inputs.dir("src") - outputs.dir("dist") +task pnpmBuild(type: PnpmTask) { args = ['run', 'build'] } - -task npmClean(type: NpmTask) { - args = ['run', 'clean'] -} - -task npmServe(type: NpmTask) { - args = ['run', 'serve'] -} - -jar { - into '/static', { - from 'dist' - include '**' - } -} - -jar.dependsOn('npmBuild') -clean.dependsOn('npmClean') \ No newline at end of file diff --git a/frontend/builder/config/index.ts b/frontend/builder/config/index.ts new file mode 100644 index 00000000..8a9621a6 --- /dev/null +++ b/frontend/builder/config/index.ts @@ -0,0 +1,2 @@ +export * from './proxy'; +export * from './time'; diff --git a/frontend/builder/config/proxy.ts b/frontend/builder/config/proxy.ts new file mode 100644 index 00000000..70126632 --- /dev/null +++ b/frontend/builder/config/proxy.ts @@ -0,0 +1,32 @@ +import type { ProxyOptions } from 'vite'; +import { createServiceConfig } from '../../src/utils/service'; + +/** + * Set http proxy + * + * @param env - The current env + * @param isDev - Is development environment + */ +export function createViteProxy(env: Env.ImportMeta, isDev: boolean) { + const isEnableHttpProxy = isDev && env.VITE_HTTP_PROXY === 'Y'; + + if (!isEnableHttpProxy) return undefined; + + const { baseURL, proxyPattern } = createServiceConfig(env); + + const proxy: Record = createProxyItem({ baseURL, proxyPattern }); + + return proxy; +} + +function createProxyItem(item: App.Service.ServiceConfigItem) { + const proxy: Record = {}; + + proxy[item.proxyPattern] = { + target: item.baseURL, + changeOrigin: true, + rewrite: path => path.replace(new RegExp(`^${item.proxyPattern}`), '') + }; + + return proxy; +} diff --git a/frontend/builder/config/time.ts b/frontend/builder/config/time.ts new file mode 100644 index 00000000..a11c4f4b --- /dev/null +++ b/frontend/builder/config/time.ts @@ -0,0 +1,12 @@ +import dayjs from 'dayjs'; +import utc from 'dayjs/plugin/utc'; +import timezone from 'dayjs/plugin/timezone'; + +export function getBuildTime() { + dayjs.extend(utc); + dayjs.extend(timezone); + + const buildTime = dayjs.tz(Date.now(), 'UTC').format('YYYY-MM-DDTHH:mm:ssZ'); + + return buildTime; +} diff --git a/frontend/builder/plugins/html.ts b/frontend/builder/plugins/html.ts new file mode 100644 index 00000000..b94d24fe --- /dev/null +++ b/frontend/builder/plugins/html.ts @@ -0,0 +1,13 @@ +import type { Plugin } from 'vite'; + +export function setupHtmlPlugin(buildTime: string) { + const plugin: Plugin = { + name: 'html-plugin', + apply: 'build', + transformIndexHtml(html) { + return html.replace('', `\n `); + } + }; + + return plugin; +} diff --git a/frontend/builder/plugins/index.ts b/frontend/builder/plugins/index.ts new file mode 100644 index 00000000..debec678 --- /dev/null +++ b/frontend/builder/plugins/index.ts @@ -0,0 +1,28 @@ +import type { PluginOption } from 'vite'; +import vue from '@vitejs/plugin-vue'; +import vueJsx from '@vitejs/plugin-vue-jsx'; +import VueDevtools from 'vite-plugin-vue-devtools'; +import progress from 'vite-plugin-progress'; +import { setupElegantRouter } from './router'; +import { setupUnocss } from './unocss'; +import { setupUnplugin } from './unplugin'; +import { setupHtmlPlugin } from './html'; + +export function setupVitePlugins(viteEnv: Env.ImportMeta, buildTime: string) { + const plugins: PluginOption = [ + vue({ + script: { + defineModel: true + } + }), + vueJsx(), + VueDevtools(), + setupElegantRouter(), + setupUnocss(viteEnv), + ...setupUnplugin(viteEnv), + progress(), + setupHtmlPlugin(buildTime) + ]; + + return plugins; +} diff --git a/frontend/builder/plugins/router.ts b/frontend/builder/plugins/router.ts new file mode 100644 index 00000000..b1ffc4b8 --- /dev/null +++ b/frontend/builder/plugins/router.ts @@ -0,0 +1,44 @@ +import type { RouteMeta } from 'vue-router'; +import ElegantVueRouter from '@elegant-router/vue/vite'; +import type { RouteKey } from '@elegant-router/types'; + +export function setupElegantRouter() { + return ElegantVueRouter({ + layouts: { + base: 'src/layouts/base-layout/index.vue', + blank: 'src/layouts/blank-layout/index.vue' + }, + customRoutes: { + names: ['exception_403', 'exception_404', 'exception_500', 'help'] + }, + routePathTransformer(routeName, routePath) { + const key = routeName as RouteKey; + + if (key === 'login') { + const modules: UnionKey.LoginModule[] = ['pwd-login', 'code-login', 'register', 'reset-pwd', 'bind-wechat']; + + const moduleReg = modules.join('|'); + + return `/login/:module(${moduleReg})?`; + } + + return routePath; + }, + onRouteMetaGen(routeName) { + const key = routeName as RouteKey; + + const constantRoutes: RouteKey[] = ['login', '403', '404', '500']; + + const meta: Partial = { + title: key, + i18nKey: `route.${key}` as App.I18n.I18nKey + }; + + if (constantRoutes.includes(key)) { + meta.constant = true; + } + + return meta; + } + }); +} diff --git a/frontend/builder/plugins/unocss.ts b/frontend/builder/plugins/unocss.ts new file mode 100644 index 00000000..06b41d37 --- /dev/null +++ b/frontend/builder/plugins/unocss.ts @@ -0,0 +1,32 @@ +import process from 'node:process'; +import path from 'node:path'; +import unocss from '@unocss/vite'; +import presetIcons from '@unocss/preset-icons'; +import { FileSystemIconLoader } from '@iconify/utils/lib/loader/node-loaders'; + +export function setupUnocss(viteEnv: Env.ImportMeta) { + const { VITE_ICON_PREFIX, VITE_ICON_LOCAL_PREFIX } = viteEnv; + + const localIconPath = path.join(process.cwd(), 'src/assets/svg-icon'); + + /** The name of the local icon collection */ + const collectionName = VITE_ICON_LOCAL_PREFIX.replace(`${VITE_ICON_PREFIX}-`, ''); + + return unocss({ + presets: [ + presetIcons({ + prefix: `${VITE_ICON_PREFIX}-`, + scale: 1, + extraProperties: { + display: 'inline-block' + }, + collections: { + [collectionName]: FileSystemIconLoader(localIconPath, svg => + svg.replace(/^ + svg.replace(/^ - - - - - - - dRAGon - - - - - -
- - - - \ No newline at end of file + + + + + + + + %VITE_APP_TITLE% + + +
+ + + diff --git a/frontend/jsconfig.json b/frontend/jsconfig.json deleted file mode 100644 index 4aafc5f6..00000000 --- a/frontend/jsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "module": "esnext", - "baseUrl": "./", - "moduleResolution": "node", - "paths": { - "@/*": [ - "src/*" - ] - }, - "lib": [ - "esnext", - "dom", - "dom.iterable", - "scripthost" - ] - } -} diff --git a/frontend/mockoon_dRAGon.json b/frontend/mockoon_dRAGon.json new file mode 100644 index 00000000..ba0d4b84 --- /dev/null +++ b/frontend/mockoon_dRAGon.json @@ -0,0 +1,207 @@ +{ + "uuid": "e4a84b25-cf32-4184-9259-bee079384320", + "lastMigration": 32, + "name": "dRAGon", + "endpointPrefix": "", + "latency": 0, + "port": 1985, + "hostname": "", + "folders": [ + { + "uuid": "c98e1298-8e19-4747-9184-0f9311de3443", + "name": "api", + "children": [ + { + "type": "folder", + "uuid": "059be112-aa2e-4e68-872f-c863fc1fd972" + } + ] + }, + { + "uuid": "059be112-aa2e-4e68-872f-c863fc1fd972", + "name": "backend", + "children": [ + { + "type": "folder", + "uuid": "eaf38f31-0ad8-4bd8-92fa-6c6714bbcc69" + } + ] + }, + { + "uuid": "eaf38f31-0ad8-4bd8-92fa-6c6714bbcc69", + "name": "repository", + "children": [ + { + "type": "route", + "uuid": "7cecfea6-ae8b-4eee-bfd9-06ab89e63e0c" + } + ] + }, + { + "uuid": "583c3361-0cfc-46a5-8352-f80705f04797", + "name": "auth", + "children": [ + { + "type": "route", + "uuid": "f99db58b-e0b9-4142-9d81-bcc23f1f640e" + }, + { + "type": "route", + "uuid": "cd0e8e0b-c130-4d4a-87f7-673246e250d2" + } + ] + } + ], + "routes": [ + { + "uuid": "7cecfea6-ae8b-4eee-bfd9-06ab89e63e0c", + "type": "crud", + "documentation": "Silo Repository Management API Endpoints", + "method": "", + "endpoint": "api/backend/repository/silo", + "responses": [ + { + "uuid": "498f2b58-6986-464d-a922-a93fd0175d5b", + "body": "{}", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "DATABUCKET", + "filePath": "", + "databucketID": "3ay2", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "uuid", + "callbacks": [] + } + ], + "responseMode": null + }, + { + "uuid": "f99db58b-e0b9-4142-9d81-bcc23f1f640e", + "type": "http", + "documentation": "Login Endpoint", + "method": "post", + "endpoint": "auth/login", + "responses": [ + { + "uuid": "0f069a2b-d27d-4e3f-b343-fe3ed06e08a4", + "body": "{\n \"data\": {\n \"token\": \"token-is-here\",\n \"refreshToken\": \"refresh-token-is-here\"\n },\n \"code\": \"0000\",\n \"msg\": \"OK\"\n}", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null + }, + { + "uuid": "cd0e8e0b-c130-4d4a-87f7-673246e250d2", + "type": "http", + "documentation": "", + "method": "get", + "endpoint": "auth/getUserInfo", + "responses": [ + { + "uuid": "a2b7f8de-998e-4e33-9302-f0bd0f1c84d4", + "body": "{\n \"data\": {\n \"userId\": \"0\",\n \"userName\": \"dRAGon\",\n \"roles\": [\n \"R_SUPER\"\n ],\n \"buttons\": [\n \"B_CODE1\",\n \"B_CODE2\",\n \"B_CODE3\"\n ]\n },\n \"code\": \"0000\",\n \"msg\": \"OK\"\n}", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null + } + ], + "rootChildren": [ + { + "type": "folder", + "uuid": "c98e1298-8e19-4747-9184-0f9311de3443" + }, + { + "type": "folder", + "uuid": "583c3361-0cfc-46a5-8352-f80705f04797" + } + ], + "proxyMode": false, + "proxyHost": "", + "proxyRemovePrefix": false, + "tlsOptions": { + "enabled": false, + "type": "CERT", + "pfxPath": "", + "certPath": "", + "keyPath": "", + "caPath": "", + "passphrase": "" + }, + "cors": true, + "headers": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "*" + } + ], + "proxyReqHeaders": [ + { + "key": "", + "value": "" + } + ], + "proxyResHeaders": [ + { + "key": "", + "value": "" + } + ], + "data": [ + { + "uuid": "84af632d-89e3-4158-b897-34aaef993b3d", + "id": "3ay2", + "name": "SILO_REPOSITORY", + "documentation": "", + "value": "[\n {\n \"uuid\": \"a994ff93-971e-4651-aa15-9ef747f16f6c\",\n \"name\": \"FileSystem Silo\",\n \"vectorStore\": \"PersistInMemoryEmbeddingStore\",\n \"embeddingModel\": \"BgeSmallEnV15QuantizedEmbeddingModel\",\n \"ingestorLoader\": \"FileSystem\",\n \"vectorStoreSettings\": [\n \"flushSecs=30\"\n ],\n \"embeddingSettings\": [\n \"chunkSize=1000\",\n \"chunkOverlap=100\"\n ],\n \"ingestorSettings\": [\n \"schedule=00 08 * * MON-FRI\",\n \"recursive=true\",\n \"pathMatcher=glob:**.{pdf,doc,docx,ppt,pptx}\",\n \"paths[]=/tmp/folder\"\n ]\n }\n]" + } + ], + "callbacks": [] +} diff --git a/frontend/package.json b/frontend/package.json index a23ca656..1c2afda0 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,55 +1,100 @@ { "name": "dragon", + "type": "module", "version": "0.0.0", - "private": true, + "description": "Dynamic Retrieval Augmented Generation for Optimized Nimble", + "license": "MIT", + "homepage": "https://github.com/dRAGon-Okinawa/dRAGon", + "repository": { + "url": "https://github.com/dRAGon-Okinawa/dRAGon.git" + }, + "bugs": { + "url": "https://github.com/dRAGon-Okinawa/dRAGon/issues" + }, + "keywords": [ + "Vue3 admin ", + "vue-admin-template", + "Vite5", + "TypeScript", + "naive-ui", + "naive-ui-admin", + "ant-design-vue v4", + "UnoCSS" + ], + "engines": { + "node": ">=18.12.0", + "pnpm": ">=8.7.0" + }, "scripts": { - "clean": "rm -rf dist build", - "dev": "vite", - "build": "vite build", - "buildnwatch": "vite build --watch", - "buildnserve": "vite build && vite preview --host", - "serve": "vite preview --host", - "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore" + "build": "vite build --mode prod", + "build:test": "vite build --mode test", + "cleanup": "dRAGon cleanup", + "commit": "dRAGon git-commit", + "dev": "vite --mode test", + "dev:prod": "vite --mode prod", + "gen-route": "dRAGon gen-route", + "lint": "eslint . --fix", + "preview": "vite preview", + "release": "dRAGon release", + "typecheck": "vue-tsc --noEmit --skipLibCheck", + "update-pkg": "dRAGon update-pkg" }, "dependencies": { - "chart.js": "3.3.2", - "primeflex": "^3.3.1", - "primeicons": "^6.0.1", - "primevue": "3.49.1", - "vue": "^3.2.41", - "vue-i18n": "^9.13.1", - "vue-router": "^4.1.5" + "@better-scroll/core": "2.5.1", + "@iconify/vue": "4.1.2", + "@sa/axios": "workspace:*", + "@sa/color": "workspace:*", + "@sa/hooks": "workspace:*", + "@sa/materials": "workspace:*", + "@sa/utils": "workspace:*", + "@vueuse/core": "10.11.0", + "clipboard": "2.0.11", + "dayjs": "1.11.11", + "echarts": "5.5.1", + "lodash-es": "4.17.21", + "naive-ui": "2.38.2", + "nprogress": "0.2.0", + "pinia": "2.1.7", + "tailwind-merge": "2.3.0", + "vue": "3.4.31", + "vue-draggable-plus": "0.5.0", + "vue-i18n": "9.13.1", + "vue-router": "4.4.0" }, "devDependencies": { - "@babel/core": "^7.12.16", - "@babel/eslint-parser": "^7.12.16", - "@rushstack/eslint-patch": "^1.1.4", - "@vitejs/plugin-vue": "^4.1.0", - "@vue/eslint-config-prettier": "^7.0.0", - "eslint": "^8.22.0", - "eslint-plugin-vue": "^9.3.0", - "prettier": "^2.7.1", - "sass": "^1.55.0", - "vite": "^4.2.1" + "@dragon/scripts": "workspace:*", + "@elegant-router/vue": "0.3.7", + "@iconify/json": "2.2.223", + "@sa/uno-preset": "workspace:*", + "@soybeanjs/eslint-config": "1.3.7", + "@types/lodash-es": "4.17.12", + "@types/node": "20.14.10", + "@types/nprogress": "0.2.3", + "@unocss/eslint-config": "0.61.2", + "@unocss/preset-icons": "0.61.2", + "@unocss/preset-uno": "0.61.2", + "@unocss/transformer-directives": "0.61.2", + "@unocss/transformer-variant-group": "0.61.2", + "@unocss/vite": "0.61.2", + "@vitejs/plugin-vue": "5.0.5", + "@vitejs/plugin-vue-jsx": "4.0.0", + "eslint": "9.6.0", + "eslint-plugin-vue": "9.27.0", + "lint-staged": "15.2.7", + "sass": "1.77.6", + "tsx": "4.16.2", + "typescript": "5.5.3", + "unplugin-icons": "0.19.0", + "unplugin-vue-components": "0.27.2", + "vite": "5.3.3", + "vite-plugin-progress": "0.0.7", + "vite-plugin-svg-icons": "2.0.1", + "vite-plugin-vue-devtools": "7.3.5", + "vue-eslint-parser": "9.4.3", + "vue-tsc": "2.0.26" }, - "eslintConfig": { - "root": true, - "env": { - "node": true - }, - "extends": [ - "plugin:vue/vue3-essential", - "eslint:recommended" - ], - "parserOptions": { - "parser": "@babel/eslint-parser" - }, - "rules": {} + "lint-staged": { + "*": "eslint --fix" }, - "browserslist": [ - "> 1%", - "last 2 versions", - "not dead", - "not ie 11" - ] + "website": "https://dragon.okinawa" } diff --git a/frontend/packages/axios/package.json b/frontend/packages/axios/package.json new file mode 100644 index 00000000..c457958e --- /dev/null +++ b/frontend/packages/axios/package.json @@ -0,0 +1,21 @@ +{ + "name": "@sa/axios", + "version": "0.0.0", + "exports": { + ".": "./src/index.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + }, + "dependencies": { + "@sa/utils": "workspace:*", + "axios": "1.7.2", + "axios-retry": "4.4.1", + "qs": "6.12.2" + }, + "devDependencies": { + "@types/qs": "6.9.15" + } +} diff --git a/frontend/packages/axios/src/constant.ts b/frontend/packages/axios/src/constant.ts new file mode 100644 index 00000000..d6c5a338 --- /dev/null +++ b/frontend/packages/axios/src/constant.ts @@ -0,0 +1,5 @@ +/** request id key */ +export const REQUEST_ID_KEY = 'X-Request-Id'; + +/** the backend error code key */ +export const BACKEND_ERROR_CODE = 'BACKEND_ERROR'; diff --git a/frontend/packages/axios/src/index.ts b/frontend/packages/axios/src/index.ts new file mode 100644 index 00000000..08846c24 --- /dev/null +++ b/frontend/packages/axios/src/index.ts @@ -0,0 +1,181 @@ +import axios, { AxiosError } from 'axios'; +import type { AxiosResponse, CancelTokenSource, CreateAxiosDefaults, InternalAxiosRequestConfig } from 'axios'; +import axiosRetry from 'axios-retry'; +import { nanoid } from '@sa/utils'; +import { createAxiosConfig, createDefaultOptions, createRetryOptions } from './options'; +import { BACKEND_ERROR_CODE, REQUEST_ID_KEY } from './constant'; +import type { + CustomAxiosRequestConfig, + FlatRequestInstance, + MappedType, + RequestInstance, + RequestOption, + ResponseType +} from './type'; + +function createCommonRequest( + axiosConfig?: CreateAxiosDefaults, + options?: Partial> +) { + const opts = createDefaultOptions(options); + + const axiosConf = createAxiosConfig(axiosConfig); + const instance = axios.create(axiosConf); + + const cancelTokenSourceMap = new Map(); + + // config axios retry + const retryOptions = createRetryOptions(axiosConf); + axiosRetry(instance, retryOptions); + + instance.interceptors.request.use(conf => { + const config: InternalAxiosRequestConfig = { ...conf }; + + // set request id + const requestId = nanoid(); + config.headers.set(REQUEST_ID_KEY, requestId); + + // config cancel token + const cancelTokenSource = axios.CancelToken.source(); + config.cancelToken = cancelTokenSource.token; + cancelTokenSourceMap.set(requestId, cancelTokenSource); + + // handle config by hook + const handledConfig = opts.onRequest?.(config) || config; + + return handledConfig; + }); + + instance.interceptors.response.use( + async response => { + const responseType: ResponseType = (response.config?.responseType as ResponseType) || 'json'; + + if (responseType !== 'json' || opts.isBackendSuccess(response)) { + return Promise.resolve(response); + } + + const fail = await opts.onBackendFail(response, instance); + if (fail) { + return fail; + } + + const backendError = new AxiosError( + 'the backend request error', + BACKEND_ERROR_CODE, + response.config, + response.request, + response + ); + + await opts.onError(backendError); + + return Promise.reject(backendError); + }, + async (error: AxiosError) => { + await opts.onError(error); + + return Promise.reject(error); + } + ); + + function cancelRequest(requestId: string) { + const cancelTokenSource = cancelTokenSourceMap.get(requestId); + if (cancelTokenSource) { + cancelTokenSource.cancel(); + cancelTokenSourceMap.delete(requestId); + } + } + + function cancelAllRequest() { + cancelTokenSourceMap.forEach(cancelTokenSource => { + cancelTokenSource.cancel(); + }); + cancelTokenSourceMap.clear(); + } + + return { + instance, + opts, + cancelRequest, + cancelAllRequest + }; +} + +/** + * create a request instance + * + * @param axiosConfig axios config + * @param options request options + */ +export function createRequest>( + axiosConfig?: CreateAxiosDefaults, + options?: Partial> +) { + const { instance, opts, cancelRequest, cancelAllRequest } = createCommonRequest(axiosConfig, options); + + const request: RequestInstance = async function request( + config: CustomAxiosRequestConfig + ) { + const response: AxiosResponse = await instance(config); + + const responseType = response.config?.responseType || 'json'; + + if (responseType === 'json') { + return opts.transformBackendResponse(response); + } + + return response.data as MappedType; + } as RequestInstance; + + request.cancelRequest = cancelRequest; + request.cancelAllRequest = cancelAllRequest; + request.state = {} as State; + + return request; +} + +/** + * create a flat request instance + * + * The response data is a flat object: { data: any, error: AxiosError } + * + * @param axiosConfig axios config + * @param options request options + */ +export function createFlatRequest>( + axiosConfig?: CreateAxiosDefaults, + options?: Partial> +) { + const { instance, opts, cancelRequest, cancelAllRequest } = createCommonRequest(axiosConfig, options); + + const flatRequest: FlatRequestInstance = async function flatRequest< + T = any, + R extends ResponseType = 'json' + >(config: CustomAxiosRequestConfig) { + try { + const response: AxiosResponse = await instance(config); + + const responseType = response.config?.responseType || 'json'; + + if (responseType === 'json') { + const data = opts.transformBackendResponse(response); + + return { data, error: null }; + } + + return { data: response.data as MappedType, error: null }; + } catch (error) { + return { data: null, error }; + } + } as FlatRequestInstance; + + flatRequest.cancelRequest = cancelRequest; + flatRequest.cancelAllRequest = cancelAllRequest; + flatRequest.state = {} as State; + + return flatRequest; +} + +export { BACKEND_ERROR_CODE, REQUEST_ID_KEY }; +export type * from './type'; +export type { CreateAxiosDefaults, AxiosError }; diff --git a/frontend/packages/axios/src/options.ts b/frontend/packages/axios/src/options.ts new file mode 100644 index 00000000..ff59fa77 --- /dev/null +++ b/frontend/packages/axios/src/options.ts @@ -0,0 +1,48 @@ +import type { CreateAxiosDefaults } from 'axios'; +import type { IAxiosRetryConfig } from 'axios-retry'; +import { stringify } from 'qs'; +import { isHttpSuccess } from './shared'; +import type { RequestOption } from './type'; + +export function createDefaultOptions(options?: Partial>) { + const opts: RequestOption = { + onRequest: async config => config, + isBackendSuccess: _response => true, + onBackendFail: async () => {}, + transformBackendResponse: async response => response.data, + onError: async () => {} + }; + + Object.assign(opts, options); + + return opts; +} + +export function createRetryOptions(config?: Partial) { + const retryConfig: IAxiosRetryConfig = { + retries: 3 + }; + + Object.assign(retryConfig, config); + + return retryConfig; +} + +export function createAxiosConfig(config?: Partial) { + const TEN_SECONDS = 10 * 1000; + + const axiosConfig: CreateAxiosDefaults = { + timeout: TEN_SECONDS, + headers: { + 'Content-Type': 'application/json' + }, + validateStatus: isHttpSuccess, + paramsSerializer: params => { + return stringify(params); + } + }; + + Object.assign(axiosConfig, config); + + return axiosConfig; +} diff --git a/frontend/packages/axios/src/shared.ts b/frontend/packages/axios/src/shared.ts new file mode 100644 index 00000000..7afd32b1 --- /dev/null +++ b/frontend/packages/axios/src/shared.ts @@ -0,0 +1,28 @@ +import type { AxiosHeaderValue, AxiosResponse, InternalAxiosRequestConfig } from 'axios'; + +export function getContentType(config: InternalAxiosRequestConfig) { + const contentType: AxiosHeaderValue = config.headers?.['Content-Type'] || 'application/json'; + + return contentType; +} + +/** + * check if http status is success + * + * @param status + */ +export function isHttpSuccess(status: number) { + const isSuccessCode = status >= 200 && status < 300; + return isSuccessCode || status === 304; +} + +/** + * is response json + * + * @param response axios response + */ +export function isResponseJson(response: AxiosResponse) { + const { responseType } = response.config; + + return responseType === 'json' || responseType === undefined; +} diff --git a/frontend/packages/axios/src/type.ts b/frontend/packages/axios/src/type.ts new file mode 100644 index 00000000..0ecbacbb --- /dev/null +++ b/frontend/packages/axios/src/type.ts @@ -0,0 +1,101 @@ +import type { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from 'axios'; + +export type ContentType = + | 'text/html' + | 'text/plain' + | 'multipart/form-data' + | 'application/json' + | 'application/x-www-form-urlencoded' + | 'application/octet-stream'; + +export interface RequestOption { + /** + * The hook before request + * + * For example: You can add header token in this hook + * + * @param config Axios config + */ + onRequest: (config: InternalAxiosRequestConfig) => InternalAxiosRequestConfig | Promise; + /** + * The hook to check backend response is success or not + * + * @param response Axios response + */ + isBackendSuccess: (response: AxiosResponse) => boolean; + /** + * The hook after backend request fail + * + * For example: You can handle the expired token in this hook + * + * @param response Axios response + * @param instance Axios instance + */ + onBackendFail: ( + response: AxiosResponse, + instance: AxiosInstance + ) => Promise | Promise; + /** + * transform backend response when the responseType is json + * + * @param response Axios response + */ + transformBackendResponse(response: AxiosResponse): any | Promise; + /** + * The hook to handle error + * + * For example: You can show error message in this hook + * + * @param error + */ + onError: (error: AxiosError) => void | Promise; +} + +interface ResponseMap { + blob: Blob; + text: string; + arrayBuffer: ArrayBuffer; + stream: ReadableStream; + document: Document; +} +export type ResponseType = keyof ResponseMap | 'json'; + +export type MappedType = R extends keyof ResponseMap + ? ResponseMap[R] + : JsonType; + +export type CustomAxiosRequestConfig = Omit & { + responseType?: R; +}; + +export interface RequestInstanceCommon { + cancelRequest: (requestId: string) => void; + cancelAllRequest: () => void; + /** you can set custom state in the request instance */ + state: T; +} + +/** The request instance */ +export interface RequestInstance> extends RequestInstanceCommon { + (config: CustomAxiosRequestConfig): Promise>; +} + +export type FlatResponseSuccessData = { + data: T; + error: null; +}; + +export type FlatResponseFailData = { + data: null; + error: AxiosError; +}; + +export type FlatResponseData = + | FlatResponseSuccessData + | FlatResponseFailData; + +export interface FlatRequestInstance, ResponseData = any> extends RequestInstanceCommon { + ( + config: CustomAxiosRequestConfig + ): Promise, ResponseData>>; +} diff --git a/frontend/packages/axios/tsconfig.json b/frontend/packages/axios/tsconfig.json new file mode 100644 index 00000000..5823ed54 --- /dev/null +++ b/frontend/packages/axios/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/frontend/packages/color/package.json b/frontend/packages/color/package.json new file mode 100644 index 00000000..1639e10c --- /dev/null +++ b/frontend/packages/color/package.json @@ -0,0 +1,16 @@ +{ + "name": "@sa/color", + "version": "0.0.0", + "exports": { + ".": "./src/index.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + }, + "dependencies": { + "@sa/utils": "workspace:*", + "colord": "2.9.3" + } +} diff --git a/frontend/packages/color/src/constant/index.ts b/frontend/packages/color/src/constant/index.ts new file mode 100644 index 00000000..cefbcdb2 --- /dev/null +++ b/frontend/packages/color/src/constant/index.ts @@ -0,0 +1,2 @@ +export * from './name'; +export * from './palette'; diff --git a/frontend/packages/color/src/constant/name.ts b/frontend/packages/color/src/constant/name.ts new file mode 100644 index 00000000..36648c33 --- /dev/null +++ b/frontend/packages/color/src/constant/name.ts @@ -0,0 +1,1579 @@ +export const colorNames: [hex: string, name: string][] = [ + ['#000000', 'Black'], + ['#000080', 'Navy Blue'], + ['#0000c8', 'Dark Blue'], + ['#0000ff', 'Blue'], + ['#000741', 'Stratos'], + ['#001b1c', 'Swamp'], + ['#002387', 'Resolution Blue'], + ['#002900', 'Deep Fir'], + ['#002e20', 'Burnham'], + ['#002fa7', 'International Klein Blue'], + ['#003153', 'Prussian Blue'], + ['#003366', 'Midnight Blue'], + ['#003399', 'Smalt'], + ['#003532', 'Deep Teal'], + ['#003e40', 'Cyprus'], + ['#004620', 'Kaitoke Green'], + ['#0047ab', 'Cobalt'], + ['#004816', 'Crusoe'], + ['#004950', 'Sherpa Blue'], + ['#0056a7', 'Endeavour'], + ['#00581a', 'Camarone'], + ['#0066cc', 'Science Blue'], + ['#0066ff', 'Blue Ribbon'], + ['#00755e', 'Tropical Rain Forest'], + ['#0076a3', 'Allports'], + ['#007ba7', 'Deep Cerulean'], + ['#007ec7', 'Lochmara'], + ['#007fff', 'Azure Radiance'], + ['#008080', 'Teal'], + ['#0095b6', 'Bondi Blue'], + ['#009dc4', 'Pacific Blue'], + ['#00a693', 'Persian Green'], + ['#00a86b', 'Jade'], + ['#00cc99', 'Caribbean Green'], + ['#00cccc', "Robin's Egg Blue"], + ['#00ff00', 'Green'], + ['#00ff7f', 'Spring Green'], + ['#00ffff', 'Cyan Aqua'], + ['#010d1a', 'Blue Charcoal'], + ['#011635', 'Midnight'], + ['#011d13', 'Holly'], + ['#012731', 'Daintree'], + ['#01361c', 'Cardin Green'], + ['#01371a', 'County Green'], + ['#013e62', 'Astronaut Blue'], + ['#013f6a', 'Regal Blue'], + ['#014b43', 'Aqua Deep'], + ['#015e85', 'Orient'], + ['#016162', 'Blue Stone'], + ['#016d39', 'Fun Green'], + ['#01796f', 'Pine Green'], + ['#017987', 'Blue Lagoon'], + ['#01826b', 'Deep Sea'], + ['#01a368', 'Green Haze'], + ['#022d15', 'English Holly'], + ['#02402c', 'Sherwood Green'], + ['#02478e', 'Congress Blue'], + ['#024e46', 'Evening Sea'], + ['#026395', 'Bahama Blue'], + ['#02866f', 'Observatory'], + ['#02a4d3', 'Cerulean'], + ['#03163c', 'Tangaroa'], + ['#032b52', 'Green Vogue'], + ['#036a6e', 'Mosque'], + ['#041004', 'Midnight Moss'], + ['#041322', 'Black Pearl'], + ['#042e4c', 'Blue Whale'], + ['#044022', 'Zuccini'], + ['#044259', 'Teal Blue'], + ['#051040', 'Deep Cove'], + ['#051657', 'Gulf Blue'], + ['#055989', 'Venice Blue'], + ['#056f57', 'Watercourse'], + ['#062a78', 'Catalina Blue'], + ['#063537', 'Tiber'], + ['#069b81', 'Gossamer'], + ['#06a189', 'Niagara'], + ['#073a50', 'Tarawera'], + ['#080110', 'Jaguar'], + ['#081910', 'Black Bean'], + ['#082567', 'Deep Sapphire'], + ['#088370', 'Elf Green'], + ['#08e8de', 'Bright Turquoise'], + ['#092256', 'Downriver'], + ['#09230f', 'Palm Green'], + ['#09255d', 'Madison'], + ['#093624', 'Bottle Green'], + ['#095859', 'Deep Sea Green'], + ['#097f4b', 'Salem'], + ['#0a001c', 'Black Russian'], + ['#0a480d', 'Dark Fern'], + ['#0a6906', 'Japanese Laurel'], + ['#0a6f75', 'Atoll'], + ['#0b0b0b', 'Cod Gray'], + ['#0b0f08', 'Marshland'], + ['#0b1107', 'Gordons Green'], + ['#0b1304', 'Black Forest'], + ['#0b6207', 'San Felix'], + ['#0bda51', 'Malachite'], + ['#0c0b1d', 'Ebony'], + ['#0c0d0f', 'Woodsmoke'], + ['#0c1911', 'Racing Green'], + ['#0c7a79', 'Surfie Green'], + ['#0c8990', 'Blue Chill'], + ['#0d0332', 'Black Rock'], + ['#0d1117', 'Bunker'], + ['#0d1c19', 'Aztec'], + ['#0d2e1c', 'Bush'], + ['#0e0e18', 'Cinder'], + ['#0e2a30', 'Firefly'], + ['#0f2d9e', 'Torea Bay'], + ['#10121d', 'Vulcan'], + ['#101405', 'Green Waterloo'], + ['#105852', 'Eden'], + ['#110c6c', 'Arapawa'], + ['#120a8f', 'Ultramarine'], + ['#123447', 'Elephant'], + ['#126b40', 'Jewel'], + ['#130000', 'Diesel'], + ['#130a06', 'Asphalt'], + ['#13264d', 'Blue Zodiac'], + ['#134f19', 'Parsley'], + ['#140600', 'Nero'], + ['#1450aa', 'Tory Blue'], + ['#151f4c', 'Bunting'], + ['#1560bd', 'Denim'], + ['#15736b', 'Genoa'], + ['#161928', 'Mirage'], + ['#161d10', 'Hunter Green'], + ['#162a40', 'Big Stone'], + ['#163222', 'Celtic'], + ['#16322c', 'Timber Green'], + ['#163531', 'Gable Green'], + ['#171f04', 'Pine Tree'], + ['#175579', 'Chathams Blue'], + ['#182d09', 'Deep Forest Green'], + ['#18587a', 'Blumine'], + ['#19330e', 'Palm Leaf'], + ['#193751', 'Nile Blue'], + ['#1959a8', 'Fun Blue'], + ['#1a1a68', 'Lucky Point'], + ['#1ab385', 'Mountain Meadow'], + ['#1b0245', 'Tolopea'], + ['#1b1035', 'Haiti'], + ['#1b127b', 'Deep Koamaru'], + ['#1b1404', 'Acadia'], + ['#1b2f11', 'Seaweed'], + ['#1b3162', 'Biscay'], + ['#1b659d', 'Matisse'], + ['#1c1208', 'Crowshead'], + ['#1c1e13', 'Rangoon Green'], + ['#1c39bb', 'Persian Blue'], + ['#1c402e', 'Everglade'], + ['#1c7c7d', 'Elm'], + ['#1d6142', 'Green Pea'], + ['#1e0f04', 'Creole'], + ['#1e1609', 'Karaka'], + ['#1e1708', 'El Paso'], + ['#1e385b', 'Cello'], + ['#1e433c', 'Te Papa Green'], + ['#1e90ff', 'Dodger Blue'], + ['#1e9ab0', 'Eastern Blue'], + ['#1f120f', 'Night Rider'], + ['#1fc2c2', 'Java'], + ['#20208d', 'Jacksons Purple'], + ['#202e54', 'Cloud Burst'], + ['#204852', 'Blue Dianne'], + ['#211a0e', 'Eternity'], + ['#220878', 'Deep Blue'], + ['#228b22', 'Forest Green'], + ['#233418', 'Mallard'], + ['#240a40', 'Violet'], + ['#240c02', 'Kilamanjaro'], + ['#242a1d', 'Log Cabin'], + ['#242e16', 'Black Olive'], + ['#24500f', 'Green House'], + ['#251607', 'Graphite'], + ['#251706', 'Cannon Black'], + ['#251f4f', 'Port Gore'], + ['#25272c', 'Shark'], + ['#25311c', 'Green Kelp'], + ['#2596d1', 'Curious Blue'], + ['#260368', 'Paua'], + ['#26056a', 'Paris M'], + ['#261105', 'Wood Bark'], + ['#261414', 'Gondola'], + ['#262335', 'Steel Gray'], + ['#26283b', 'Ebony Clay'], + ['#273a81', 'Bay Of Many'], + ['#27504b', 'Plantation'], + ['#278a5b', 'Eucalyptus'], + ['#281e15', 'Oil'], + ['#283a77', 'Astronaut'], + ['#286acd', 'Mariner'], + ['#290c5e', 'Violent Violet'], + ['#292130', 'Bastille'], + ['#292319', 'Zeus'], + ['#292937', 'Charade'], + ['#297b9a', 'Jelly Bean'], + ['#29ab87', 'Jungle Green'], + ['#2a0359', 'Cherry Pie'], + ['#2a140e', 'Coffee Bean'], + ['#2a2630', 'Baltic Sea'], + ['#2a380b', 'Turtle Green'], + ['#2a52be', 'Cerulean Blue'], + ['#2b0202', 'Sepia Black'], + ['#2b194f', 'Valhalla'], + ['#2b3228', 'Heavy Metal'], + ['#2c0e8c', 'Blue Gem'], + ['#2c1632', 'Revolver'], + ['#2c2133', 'Bleached Cedar'], + ['#2c8c84', 'Lochinvar'], + ['#2d2510', 'Mikado'], + ['#2d383a', 'Outer Space'], + ['#2d569b', 'St Tropaz'], + ['#2e0329', 'Jacaranda'], + ['#2e1905', 'Jacko Bean'], + ['#2e3222', 'Rangitoto'], + ['#2e3f62', 'Rhino'], + ['#2e8b57', 'Sea Green'], + ['#2ebfd4', 'Scooter'], + ['#2f270e', 'Onion'], + ['#2f3cb3', 'Governor Bay'], + ['#2f519e', 'Sapphire'], + ['#2f5a57', 'Spectra'], + ['#2f6168', 'Casal'], + ['#300529', 'Melanzane'], + ['#301f1e', 'Cocoa Brown'], + ['#302a0f', 'Woodrush'], + ['#304b6a', 'San Juan'], + ['#30d5c8', 'Turquoise'], + ['#311c17', 'Eclipse'], + ['#314459', 'Pickled Bluewood'], + ['#315ba1', 'Azure'], + ['#31728d', 'Calypso'], + ['#317d82', 'Paradiso'], + ['#32127a', 'Persian Indigo'], + ['#32293a', 'Blackcurrant'], + ['#323232', 'Mine Shaft'], + ['#325d52', 'Stromboli'], + ['#327c14', 'Bilbao'], + ['#327da0', 'Astral'], + ['#33036b', 'Christalle'], + ['#33292f', 'Thunder'], + ['#33cc99', 'Shamrock'], + ['#341515', 'Tamarind'], + ['#350036', 'Mardi Gras'], + ['#350e42', 'Valentino'], + ['#350e57', 'Jagger'], + ['#353542', 'Tuna'], + ['#354e8c', 'Chambray'], + ['#363050', 'Martinique'], + ['#363534', 'Tuatara'], + ['#363c0d', 'Waiouru'], + ['#36747d', 'Ming'], + ['#368716', 'La Palma'], + ['#370202', 'Chocolate'], + ['#371d09', 'Clinker'], + ['#37290e', 'Brown Tumbleweed'], + ['#373021', 'Birch'], + ['#377475', 'Oracle'], + ['#380474', 'Blue Diamond'], + ['#381a51', 'Grape'], + ['#383533', 'Dune'], + ['#384555', 'Oxford Blue'], + ['#384910', 'Clover'], + ['#394851', 'Limed Spruce'], + ['#396413', 'Dell'], + ['#3a0020', 'Toledo'], + ['#3a2010', 'Sambuca'], + ['#3a2a6a', 'Jacarta'], + ['#3a686c', 'William'], + ['#3a6a47', 'Killarney'], + ['#3ab09e', 'Keppel'], + ['#3b000b', 'Temptress'], + ['#3b0910', 'Aubergine'], + ['#3b1f1f', 'Jon'], + ['#3b2820', 'Treehouse'], + ['#3b7a57', 'Amazon'], + ['#3b91b4', 'Boston Blue'], + ['#3c0878', 'Windsor'], + ['#3c1206', 'Rebel'], + ['#3c1f76', 'Meteorite'], + ['#3c2005', 'Dark Ebony'], + ['#3c3910', 'Camouflage'], + ['#3c4151', 'Bright Gray'], + ['#3c4443', 'Cape Cod'], + ['#3c493a', 'Lunar Green'], + ['#3d0c02', 'Bean '], + ['#3d2b1f', 'Bistre'], + ['#3d7d52', 'Goblin'], + ['#3e0480', 'Kingfisher Daisy'], + ['#3e1c14', 'Cedar'], + ['#3e2b23', 'English Walnut'], + ['#3e2c1c', 'Black Marlin'], + ['#3e3a44', 'Ship Gray'], + ['#3eabbf', 'Pelorous'], + ['#3f2109', 'Bronze'], + ['#3f2500', 'Cola'], + ['#3f3002', 'Madras'], + ['#3f307f', 'Minsk'], + ['#3f4c3a', 'Cabbage Pont'], + ['#3f583b', 'Tom Thumb'], + ['#3f5d53', 'Mineral Green'], + ['#3fc1aa', 'Puerto Rico'], + ['#3fff00', 'Harlequin'], + ['#401801', 'Brown Pod'], + ['#40291d', 'Cork'], + ['#403b38', 'Masala'], + ['#403d19', 'Thatch Green'], + ['#405169', 'Fiord'], + ['#40826d', 'Viridian'], + ['#40a860', 'Chateau Green'], + ['#410056', 'Ripe Plum'], + ['#411f10', 'Paco'], + ['#412010', 'Deep Oak'], + ['#413c37', 'Merlin'], + ['#414257', 'Gun Powder'], + ['#414c7d', 'East Bay'], + ['#4169e1', 'Royal Blue'], + ['#41aa78', 'Ocean Green'], + ['#420303', 'Burnt Maroon'], + ['#423921', 'Lisbon Brown'], + ['#427977', 'Faded Jade'], + ['#431560', 'Scarlet Gum'], + ['#433120', 'Iroko'], + ['#433e37', 'Armadillo'], + ['#434c59', 'River Bed'], + ['#436a0d', 'Green Leaf'], + ['#44012d', 'Barossa'], + ['#441d00', 'Morocco Brown'], + ['#444954', 'Mako'], + ['#454936', 'Kelp'], + ['#456cac', 'San Marino'], + ['#45b1e8', 'Picton Blue'], + ['#460b41', 'Loulou'], + ['#462425', 'Crater Brown'], + ['#465945', 'Gray Asparagus'], + ['#4682b4', 'Steel Blue'], + ['#480404', 'Rustic Red'], + ['#480607', 'Bulgarian Rose'], + ['#480656', 'Clairvoyant'], + ['#481c1c', 'Cocoa Bean'], + ['#483131', 'Woody Brown'], + ['#483c32', 'Taupe'], + ['#49170c', 'Van Cleef'], + ['#492615', 'Brown Derby'], + ['#49371b', 'Metallic Bronze'], + ['#495400', 'Verdun Green'], + ['#496679', 'Blue Bayoux'], + ['#497183', 'Bismark'], + ['#4a2a04', 'Bracken'], + ['#4a3004', 'Deep Bronze'], + ['#4a3c30', 'Mondo'], + ['#4a4244', 'Tundora'], + ['#4a444b', 'Gravel'], + ['#4a4e5a', 'Trout'], + ['#4b0082', 'Pigment Indigo'], + ['#4b5d52', 'Nandor'], + ['#4c3024', 'Saddle'], + ['#4c4f56', 'Abbey'], + ['#4d0135', 'Blackberry'], + ['#4d0a18', 'Cab Sav'], + ['#4d1e01', 'Indian Tan'], + ['#4d282d', 'Cowboy'], + ['#4d282e', 'Livid Brown'], + ['#4d3833', 'Rock'], + ['#4d3d14', 'Punga'], + ['#4d400f', 'Bronzetone'], + ['#4d5328', 'Woodland'], + ['#4e0606', 'Mahogany'], + ['#4e2a5a', 'Bossanova'], + ['#4e3b41', 'Matterhorn'], + ['#4e420c', 'Bronze Olive'], + ['#4e4562', 'Mulled Wine'], + ['#4e6649', 'Axolotl'], + ['#4e7f9e', 'Wedgewood'], + ['#4eabd1', 'Shakespeare'], + ['#4f1c70', 'Honey Flower'], + ['#4f2398', 'Daisy Bush'], + ['#4f69c6', 'Indigo'], + ['#4f7942', 'Fern Green'], + ['#4f9d5d', 'Fruit Salad'], + ['#4fa83d', 'Apple'], + ['#504351', 'Mortar'], + ['#507096', 'Kashmir Blue'], + ['#507672', 'Cutty Sark'], + ['#50c878', 'Emerald'], + ['#514649', 'Emperor'], + ['#516e3d', 'Chalet Green'], + ['#517c66', 'Como'], + ['#51808f', 'Smalt Blue'], + ['#52001f', 'Castro'], + ['#520c17', 'Maroon Oak'], + ['#523c94', 'Gigas'], + ['#533455', 'Voodoo'], + ['#534491', 'Victoria'], + ['#53824b', 'Hippie Green'], + ['#541012', 'Heath'], + ['#544333', 'Judge Gray'], + ['#54534d', 'Fuscous Gray'], + ['#549019', 'Vida Loca'], + ['#55280c', 'Cioccolato'], + ['#555b10', 'Saratoga'], + ['#556d56', 'Finlandia'], + ['#5590d9', 'Havelock Blue'], + ['#56b4be', 'Fountain Blue'], + ['#578363', 'Spring Leaves'], + ['#583401', 'Saddle Brown'], + ['#585562', 'Scarpa Flow'], + ['#587156', 'Cactus'], + ['#589aaf', 'Hippie Blue'], + ['#591d35', 'Wine Berry'], + ['#592804', 'Brown Bramble'], + ['#593737', 'Congo Brown'], + ['#594433', 'Millbrook'], + ['#5a6e9c', 'Waikawa Gray'], + ['#5a87a0', 'Horizon'], + ['#5b3013', 'Jambalaya'], + ['#5c0120', 'Bordeaux'], + ['#5c0536', 'Mulberry Wood'], + ['#5c2e01', 'Carnaby Tan'], + ['#5c5d75', 'Comet'], + ['#5d1e0f', 'Redwood'], + ['#5d4c51', 'Don Juan'], + ['#5d5c58', 'Chicago'], + ['#5d5e37', 'Verdigris'], + ['#5d7747', 'Dingley'], + ['#5da19f', 'Breaker Bay'], + ['#5e483e', 'Kabul'], + ['#5e5d3b', 'Hemlock'], + ['#5f3d26', 'Irish Coffee'], + ['#5f5f6e', 'Mid Gray'], + ['#5f6672', 'Shuttle Gray'], + ['#5fa777', 'Aqua Forest'], + ['#5fb3ac', 'Tradewind'], + ['#604913', 'Horses Neck'], + ['#605b73', 'Smoky'], + ['#606e68', 'Corduroy'], + ['#6093d1', 'Danube'], + ['#612718', 'Espresso'], + ['#614051', 'Eggplant'], + ['#615d30', 'Costa Del Sol'], + ['#61845f', 'Glade Green'], + ['#622f30', 'Buccaneer'], + ['#623f2d', 'Quincy'], + ['#624e9a', 'Butterfly Bush'], + ['#625119', 'West Coast'], + ['#626649', 'Finch'], + ['#639a8f', 'Patina'], + ['#63b76c', 'Fern'], + ['#6456b7', 'Blue Violet'], + ['#646077', 'Dolphin'], + ['#646463', 'Storm Dust'], + ['#646a54', 'Siam'], + ['#646e75', 'Nevada'], + ['#6495ed', 'Cornflower Blue'], + ['#64ccdb', 'Viking'], + ['#65000b', 'Rosewood'], + ['#651a14', 'Cherrywood'], + ['#652dc1', 'Purple Heart'], + ['#657220', 'Fern Frond'], + ['#65745d', 'Willow Grove'], + ['#65869f', 'Hoki'], + ['#660045', 'Pompadour'], + ['#660099', 'Purple'], + ['#66023c', 'Tyrian Purple'], + ['#661010', 'Dark Tan'], + ['#66b58f', 'Silver Tree'], + ['#66ff00', 'Bright Green'], + ['#66ff66', 'Screamin Green'], + ['#67032d', 'Black Rose'], + ['#675fa6', 'Scampi'], + ['#676662', 'Ironside Gray'], + ['#678975', 'Viridian Green'], + ['#67a712', 'Christi'], + ['#683600', 'Nutmeg Wood Finish'], + ['#685558', 'Zambezi'], + ['#685e6e', 'Salt Box'], + ['#692545', 'Tawny Port'], + ['#692d54', 'Finn'], + ['#695f62', 'Scorpion'], + ['#697e9a', 'Lynch'], + ['#6a442e', 'Spice'], + ['#6a5d1b', 'Himalaya'], + ['#6a6051', 'Soya Bean'], + ['#6b2a14', 'Hairy Heath'], + ['#6b3fa0', 'Royal Purple'], + ['#6b4e31', 'Shingle Fawn'], + ['#6b5755', 'Dorado'], + ['#6b8ba2', 'Bermuda Gray'], + ['#6b8e23', 'Olive Drab'], + ['#6c3082', 'Eminence'], + ['#6cdae7', 'Turquoise Blue'], + ['#6d0101', 'Lonestar'], + ['#6d5e54', 'Pine Cone'], + ['#6d6c6c', 'Dove Gray'], + ['#6d9292', 'Juniper'], + ['#6d92a1', 'Gothic'], + ['#6e0902', 'Red Oxide'], + ['#6e1d14', 'Moccaccino'], + ['#6e4826', 'Pickled Bean'], + ['#6e4b26', 'Dallas'], + ['#6e6d57', 'Kokoda'], + ['#6e7783', 'Pale Sky'], + ['#6f440c', 'Cafe Royale'], + ['#6f6a61', 'Flint'], + ['#6f8e63', 'Highland'], + ['#6f9d02', 'Limeade'], + ['#6fd0c5', 'Downy'], + ['#701c1c', 'Persian Plum'], + ['#704214', 'Sepia'], + ['#704a07', 'Antique Bronze'], + ['#704f50', 'Ferra'], + ['#706555', 'Coffee'], + ['#708090', 'Slate Gray'], + ['#711a00', 'Cedar Wood Finish'], + ['#71291d', 'Metallic Copper'], + ['#714693', 'Affair'], + ['#714ab2', 'Studio'], + ['#715d47', 'Tobacco Brown'], + ['#716338', 'Yellow Metal'], + ['#716b56', 'Peat'], + ['#716e10', 'Olivetone'], + ['#717486', 'Storm Gray'], + ['#718080', 'Sirocco'], + ['#71d9e2', 'Aquamarine Blue'], + ['#72010f', 'Venetian Red'], + ['#724a2f', 'Old Copper'], + ['#726d4e', 'Go Ben'], + ['#727b89', 'Raven'], + ['#731e8f', 'Seance'], + ['#734a12', 'Raw Umber'], + ['#736c9f', 'Kimberly'], + ['#736d58', 'Crocodile'], + ['#737829', 'Crete'], + ['#738678', 'Xanadu'], + ['#74640d', 'Spicy Mustard'], + ['#747d63', 'Limed Ash'], + ['#747d83', 'Rolling Stone'], + ['#748881', 'Blue Smoke'], + ['#749378', 'Laurel'], + ['#74c365', 'Mantis'], + ['#755a57', 'Russett'], + ['#7563a8', 'Deluge'], + ['#76395d', 'Cosmic'], + ['#7666c6', 'Blue Marguerite'], + ['#76bd17', 'Lima'], + ['#76d7ea', 'Sky Blue'], + ['#770f05', 'Dark Burgundy'], + ['#771f1f', 'Crown Of Thorns'], + ['#773f1a', 'Walnut'], + ['#776f61', 'Pablo'], + ['#778120', 'Pacifika'], + ['#779e86', 'Oxley'], + ['#77dd77', 'Pastel Green'], + ['#780109', 'Japanese Maple'], + ['#782d19', 'Mocha'], + ['#782f16', 'Peanut'], + ['#78866b', 'Camouflage Green'], + ['#788a25', 'Wasabi'], + ['#788bba', 'Ship Cove'], + ['#78a39c', 'Sea Nymph'], + ['#795d4c', 'Roman Coffee'], + ['#796878', 'Old Lavender'], + ['#796989', 'Rum'], + ['#796a78', 'Fedora'], + ['#796d62', 'Sandstone'], + ['#79deec', 'Spray'], + ['#7a013a', 'Siren'], + ['#7a58c1', 'Fuchsia Blue'], + ['#7a7a7a', 'Boulder'], + ['#7a89b8', 'Wild Blue Yonder'], + ['#7ac488', 'De York'], + ['#7b3801', 'Red Beech'], + ['#7b3f00', 'Cinnamon'], + ['#7b6608', 'Yukon Gold'], + ['#7b7874', 'Tapa'], + ['#7b7c94', 'Waterloo '], + ['#7b8265', 'Flax Smoke'], + ['#7b9f80', 'Amulet'], + ['#7ba05b', 'Asparagus'], + ['#7c1c05', 'Kenyan Copper'], + ['#7c7631', 'Pesto'], + ['#7c778a', 'Topaz'], + ['#7c7b7a', 'Concord'], + ['#7c7b82', 'Jumbo'], + ['#7c881a', 'Trendy Green'], + ['#7ca1a6', 'Gumbo'], + ['#7cb0a1', 'Acapulco'], + ['#7cb7bb', 'Neptune'], + ['#7d2c14', 'Pueblo'], + ['#7da98d', 'Bay Leaf'], + ['#7dc8f7', 'Malibu'], + ['#7dd8c6', 'Bermuda'], + ['#7e3a15', 'Copper Canyon'], + ['#7f1734', 'Claret'], + ['#7f3a02', 'Peru Tan'], + ['#7f626d', 'Falcon'], + ['#7f7589', 'Mobster'], + ['#7f76d3', 'Moody Blue'], + ['#7fff00', 'Chartreuse'], + ['#7fffd4', 'Aquamarine'], + ['#800000', 'Maroon'], + ['#800b47', 'Rose Bud Cherry'], + ['#801818', 'Falu Red'], + ['#80341f', 'Red Robin'], + ['#803790', 'Vivid Violet'], + ['#80461b', 'Russet'], + ['#807e79', 'Friar Gray'], + ['#808000', 'Olive'], + ['#808080', 'Gray'], + ['#80b3ae', 'Gulf Stream'], + ['#80b3c4', 'Glacier'], + ['#80ccea', 'Seagull'], + ['#81422c', 'Nutmeg'], + ['#816e71', 'Spicy Pink'], + ['#817377', 'Empress'], + ['#819885', 'Spanish Green'], + ['#826f65', 'Sand Dune'], + ['#828685', 'Gunsmoke'], + ['#828f72', 'Battleship Gray'], + ['#831923', 'Merlot'], + ['#837050', 'Shadow'], + ['#83aa5d', 'Chelsea Cucumber'], + ['#83d0c6', 'Monte Carlo'], + ['#843179', 'Plum'], + ['#84a0a0', 'Granny Smith'], + ['#8581d9', 'Chetwode Blue'], + ['#858470', 'Bandicoot'], + ['#859faf', 'Bali Hai'], + ['#85c4cc', 'Half Baked'], + ['#860111', 'Red Devil'], + ['#863c3c', 'Lotus'], + ['#86483c', 'Ironstone'], + ['#864d1e', 'Bull Shot'], + ['#86560a', 'Rusty Nail'], + ['#868974', 'Bitter'], + ['#86949f', 'Regent Gray'], + ['#871550', 'Disco'], + ['#87756e', 'Americano'], + ['#877c7b', 'Hurricane'], + ['#878d91', 'Oslo Gray'], + ['#87ab39', 'Sushi'], + ['#885342', 'Spicy Mix'], + ['#886221', 'Kumera'], + ['#888387', 'Suva Gray'], + ['#888d65', 'Avocado'], + ['#893456', 'Camelot'], + ['#893843', 'Solid Pink'], + ['#894367', 'Cannon Pink'], + ['#897d6d', 'Makara'], + ['#8a3324', 'Burnt Umber'], + ['#8a73d6', 'True V'], + ['#8a8360', 'Clay Creek'], + ['#8a8389', 'Monsoon'], + ['#8a8f8a', 'Stack'], + ['#8ab9f1', 'Jordy Blue'], + ['#8b00ff', 'Electric Violet'], + ['#8b0723', 'Monarch'], + ['#8b6b0b', 'Corn Harvest'], + ['#8b8470', 'Olive Haze'], + ['#8b847e', 'Schooner'], + ['#8b8680', 'Natural Gray'], + ['#8b9c90', 'Mantle'], + ['#8b9fee', 'Portage'], + ['#8ba690', 'Envy'], + ['#8ba9a5', 'Cascade'], + ['#8be6d8', 'Riptide'], + ['#8c055e', 'Cardinal Pink'], + ['#8c472f', 'Mule Fawn'], + ['#8c5738', 'Potters Clay'], + ['#8c6495', 'Trendy Pink'], + ['#8d0226', 'Paprika'], + ['#8d3d38', 'Sanguine Brown'], + ['#8d3f3f', 'Tosca'], + ['#8d7662', 'Cement'], + ['#8d8974', 'Granite Green'], + ['#8d90a1', 'Manatee'], + ['#8da8cc', 'Polo Blue'], + ['#8e0000', 'Red Berry'], + ['#8e4d1e', 'Rope'], + ['#8e6f70', 'Opium'], + ['#8e775e', 'Domino'], + ['#8e8190', 'Mamba'], + ['#8eabc1', 'Nepal'], + ['#8f021c', 'Pohutukawa'], + ['#8f3e33', 'El Salva'], + ['#8f4b0e', 'Korma'], + ['#8f8176', 'Squirrel'], + ['#8fd6b4', 'Vista Blue'], + ['#900020', 'Burgundy'], + ['#901e1e', 'Old Brick'], + ['#907874', 'Hemp'], + ['#907b71', 'Almond Frost'], + ['#908d39', 'Sycamore'], + ['#92000a', 'Sangria'], + ['#924321', 'Cumin'], + ['#926f5b', 'Beaver'], + ['#928573', 'Stonewall'], + ['#928590', 'Venus'], + ['#9370db', 'Medium Purple'], + ['#93ccea', 'Cornflower'], + ['#93dfb8', 'Algae Green'], + ['#944747', 'Copper Rust'], + ['#948771', 'Arrowtown'], + ['#950015', 'Scarlett'], + ['#956387', 'Strikemaster'], + ['#959396', 'Mountain Mist'], + ['#960018', 'Carmine'], + ['#964b00', 'Brown'], + ['#967059', 'Leather'], + ['#9678b6', "Purple Mountain's Majesty"], + ['#967bb6', 'Lavender Purple'], + ['#96a8a1', 'Pewter'], + ['#96bbab', 'Summer Green'], + ['#97605d', 'Au Chico'], + ['#9771b5', 'Wisteria'], + ['#97cd2d', 'Atlantis'], + ['#983d61', 'Vin Rouge'], + ['#9874d3', 'Lilac Bush'], + ['#98777b', 'Bazaar'], + ['#98811b', 'Hacienda'], + ['#988d77', 'Pale Oyster'], + ['#98ff98', 'Mint Green'], + ['#990066', 'Fresh Eggplant'], + ['#991199', 'Violet Eggplant'], + ['#991613', 'Tamarillo'], + ['#991b07', 'Totem Pole'], + ['#996666', 'Copper Rose'], + ['#9966cc', 'Amethyst'], + ['#997a8d', 'Mountbatten Pink'], + ['#9999cc', 'Blue Bell'], + ['#9a3820', 'Prairie Sand'], + ['#9a6e61', 'Toast'], + ['#9a9577', 'Gurkha'], + ['#9ab973', 'Olivine'], + ['#9ac2b8', 'Shadow Green'], + ['#9b4703', 'Oregon'], + ['#9b9e8f', 'Lemon Grass'], + ['#9c3336', 'Stiletto'], + ['#9d5616', 'Hawaiian Tan'], + ['#9dacb7', 'Gull Gray'], + ['#9dc209', 'Pistachio'], + ['#9de093', 'Granny Smith Apple'], + ['#9de5ff', 'Anakiwa'], + ['#9e5302', 'Chelsea Gem'], + ['#9e5b40', 'Sepia Skin'], + ['#9ea587', 'Sage'], + ['#9ea91f', 'Citron'], + ['#9eb1cd', 'Rock Blue'], + ['#9edee0', 'Morning Glory'], + ['#9f381d', 'Cognac'], + ['#9f821c', 'Reef Gold'], + ['#9f9f9c', 'Star Dust'], + ['#9fa0b1', 'Santas Gray'], + ['#9fd7d3', 'Sinbad'], + ['#9fdd8c', 'Feijoa'], + ['#a02712', 'Tabasco'], + ['#a1750d', 'Buttered Rum'], + ['#a1adb5', 'Hit Gray'], + ['#a1c50a', 'Citrus'], + ['#a1dad7', 'Aqua Island'], + ['#a1e9de', 'Water Leaf'], + ['#a2006d', 'Flirt'], + ['#a23b6c', 'Rouge'], + ['#a26645', 'Cape Palliser'], + ['#a2aab3', 'Gray Chateau'], + ['#a2aeab', 'Edward'], + ['#a3807b', 'Pharlap'], + ['#a397b4', 'Amethyst Smoke'], + ['#a3e3ed', 'Blizzard Blue'], + ['#a4a49d', 'Delta'], + ['#a4a6d3', 'Wistful'], + ['#a4af6e', 'Green Smoke'], + ['#a50b5e', 'Jazzberry Jam'], + ['#a59b91', 'Zorba'], + ['#a5cb0c', 'Bahia'], + ['#a62f20', 'Roof Terracotta'], + ['#a65529', 'Paarl'], + ['#a68b5b', 'Barley Corn'], + ['#a69279', 'Donkey Brown'], + ['#a6a29a', 'Dawn'], + ['#a72525', 'Mexican Red'], + ['#a7882c', 'Luxor Gold'], + ['#a85307', 'Rich Gold'], + ['#a86515', 'Reno Sand'], + ['#a86b6b', 'Coral Tree'], + ['#a8989b', 'Dusty Gray'], + ['#a899e6', 'Dull Lavender'], + ['#a8a589', 'Tallow'], + ['#a8ae9c', 'Bud'], + ['#a8af8e', 'Locust'], + ['#a8bd9f', 'Norway'], + ['#a8e3bd', 'Chinook'], + ['#a9a491', 'Gray Olive'], + ['#a9acb6', 'Aluminium'], + ['#a9b2c3', 'Cadet Blue'], + ['#a9b497', 'Schist'], + ['#a9bdbf', 'Tower Gray'], + ['#a9bef2', 'Perano'], + ['#a9c6c2', 'Opal'], + ['#aa375a', 'Night Shadz'], + ['#aa4203', 'Fire'], + ['#aa8b5b', 'Muesli'], + ['#aa8d6f', 'Sandal'], + ['#aaa5a9', 'Shady Lady'], + ['#aaa9cd', 'Logan'], + ['#aaabb7', 'Spun Pearl'], + ['#aad6e6', 'Regent St Blue'], + ['#aaf0d1', 'Magic Mint'], + ['#ab0563', 'Lipstick'], + ['#ab3472', 'Royal Heath'], + ['#ab917a', 'Sandrift'], + ['#aba0d9', 'Cold Purple'], + ['#aba196', 'Bronco'], + ['#ac8a56', 'Limed Oak'], + ['#ac91ce', 'East Side'], + ['#ac9e22', 'Lemon Ginger'], + ['#aca494', 'Napa'], + ['#aca586', 'Hillary'], + ['#aca59f', 'Cloudy'], + ['#acacac', 'Silver Chalice'], + ['#acb78e', 'Swamp Green'], + ['#accbb1', 'Spring Rain'], + ['#acdd4d', 'Conifer'], + ['#ace1af', 'Celadon'], + ['#ad781b', 'Mandalay'], + ['#adbed1', 'Casper'], + ['#addfad', 'Moss Green'], + ['#ade6c4', 'Padua'], + ['#adff2f', 'Green Yellow'], + ['#ae4560', 'Hippie Pink'], + ['#ae6020', 'Desert'], + ['#ae809e', 'Bouquet'], + ['#af4035', 'Medium Carmine'], + ['#af4d43', 'Apple Blossom'], + ['#af593e', 'Brown Rust'], + ['#af8751', 'Driftwood'], + ['#af8f2c', 'Alpine'], + ['#af9f1c', 'Lucky'], + ['#afa09e', 'Martini'], + ['#afb1b8', 'Bombay'], + ['#afbdd9', 'Pigeon Post'], + ['#b04c6a', 'Cadillac'], + ['#b05d54', 'Matrix'], + ['#b05e81', 'Tapestry'], + ['#b06608', 'Mai Tai'], + ['#b09a95', 'Del Rio'], + ['#b0e0e6', 'Powder Blue'], + ['#b0e313', 'Inch Worm'], + ['#b10000', 'Bright Red'], + ['#b14a0b', 'Vesuvius'], + ['#b1610b', 'Pumpkin Skin'], + ['#b16d52', 'Santa Fe'], + ['#b19461', 'Teak'], + ['#b1e2c1', 'Fringy Flower'], + ['#b1f4e7', 'Ice Cold'], + ['#b20931', 'Shiraz'], + ['#b2a1ea', 'Biloba Flower'], + ['#b32d29', 'Tall Poppy'], + ['#b35213', 'Fiery Orange'], + ['#b38007', 'Hot Toddy'], + ['#b3af95', 'Taupe Gray'], + ['#b3c110', 'La Rioja'], + ['#b43332', 'Well Read'], + ['#b44668', 'Blush'], + ['#b4cfd3', 'Jungle Mist'], + ['#b57281', 'Turkish Rose'], + ['#b57edc', 'Lavender'], + ['#b5a27f', 'Mongoose'], + ['#b5b35c', 'Olive Green'], + ['#b5d2ce', 'Jet Stream'], + ['#b5ecdf', 'Cruise'], + ['#b6316c', 'Hibiscus'], + ['#b69d98', 'Thatch'], + ['#b6b095', 'Heathered Gray'], + ['#b6baa4', 'Eagle'], + ['#b6d1ea', 'Spindle'], + ['#b6d3bf', 'Gum Leaf'], + ['#b7410e', 'Rust'], + ['#b78e5c', 'Muddy Waters'], + ['#b7a214', 'Sahara'], + ['#b7a458', 'Husk'], + ['#b7b1b1', 'Nobel'], + ['#b7c3d0', 'Heather'], + ['#b7f0be', 'Madang'], + ['#b81104', 'Milano Red'], + ['#b87333', 'Copper'], + ['#b8b56a', 'Gimblet'], + ['#b8c1b1', 'Green Spring'], + ['#b8c25d', 'Celery'], + ['#b8e0f9', 'Sail'], + ['#b94e48', 'Chestnut'], + ['#b95140', 'Crail'], + ['#b98d28', 'Marigold'], + ['#b9c46a', 'Wild Willow'], + ['#b9c8ac', 'Rainee'], + ['#ba0101', 'Guardsman Red'], + ['#ba450c', 'Rock Spray'], + ['#ba6f1e', 'Bourbon'], + ['#ba7f03', 'Pirate Gold'], + ['#bab1a2', 'Nomad'], + ['#bac7c9', 'Submarine'], + ['#baeef9', 'Charlotte'], + ['#bb3385', 'Medium Red Violet'], + ['#bb8983', 'Brandy Rose'], + ['#bbd009', 'Rio Grande'], + ['#bbd7c1', 'Surf'], + ['#bcc9c2', 'Powder Ash'], + ['#bd5e2e', 'Tuscany'], + ['#bd978e', 'Quicksand'], + ['#bdb1a8', 'Silk'], + ['#bdb2a1', 'Malta'], + ['#bdb3c7', 'Chatelle'], + ['#bdbbd7', 'Lavender Gray'], + ['#bdbdc6', 'French Gray'], + ['#bdc8b3', 'Clay Ash'], + ['#bdc9ce', 'Loblolly'], + ['#bdedfd', 'French Pass'], + ['#bea6c3', 'London Hue'], + ['#beb5b7', 'Pink Swan'], + ['#bede0d', 'Fuego'], + ['#bf5500', 'Rose Of Sharon'], + ['#bfb8b0', 'Tide'], + ['#bfbed8', 'Blue Haze'], + ['#bfc1c2', 'Silver Sand'], + ['#bfc921', 'Key Lime Pie'], + ['#bfdbe2', 'Ziggurat'], + ['#bfff00', 'Lime'], + ['#c02b18', 'Thunderbird'], + ['#c04737', 'Mojo'], + ['#c08081', 'Old Rose'], + ['#c0c0c0', 'Silver'], + ['#c0d3b9', 'Pale Leaf'], + ['#c0d8b6', 'Pixie Green'], + ['#c1440e', 'Tia Maria'], + ['#c154c1', 'Fuchsia Pink'], + ['#c1a004', 'Buddha Gold'], + ['#c1b7a4', 'Bison Hide'], + ['#c1bab0', 'Tea'], + ['#c1becd', 'Gray Suit'], + ['#c1d7b0', 'Sprout'], + ['#c1f07c', 'Sulu'], + ['#c26b03', 'Indochine'], + ['#c2955d', 'Twine'], + ['#c2bdb6', 'Cotton Seed'], + ['#c2cac4', 'Pumice'], + ['#c2e8e5', 'Jagged Ice'], + ['#c32148', 'Maroon Flush'], + ['#c3b091', 'Indian Khaki'], + ['#c3bfc1', 'Pale Slate'], + ['#c3c3bd', 'Gray Nickel'], + ['#c3cde6', 'Periwinkle Gray'], + ['#c3d1d1', 'Tiara'], + ['#c3ddf9', 'Tropical Blue'], + ['#c41e3a', 'Cardinal'], + ['#c45655', 'Fuzzy Wuzzy Brown'], + ['#c45719', 'Orange Roughy'], + ['#c4c4bc', 'Mist Gray'], + ['#c4d0b0', 'Coriander'], + ['#c4f4eb', 'Mint Tulip'], + ['#c54b8c', 'Mulberry'], + ['#c59922', 'Nugget'], + ['#c5994b', 'Tussock'], + ['#c5dbca', 'Sea Mist'], + ['#c5e17a', 'Yellow Green'], + ['#c62d42', 'Brick Red'], + ['#c6726b', 'Contessa'], + ['#c69191', 'Oriental Pink'], + ['#c6a84b', 'Roti'], + ['#c6c3b5', 'Ash'], + ['#c6c8bd', 'Kangaroo'], + ['#c6e610', 'Las Palmas'], + ['#c7031e', 'Monza'], + ['#c71585', 'Red Violet'], + ['#c7bca2', 'Coral Reef'], + ['#c7c1ff', 'Melrose'], + ['#c7c4bf', 'Cloud'], + ['#c7c9d5', 'Ghost'], + ['#c7cd90', 'Pine Glade'], + ['#c7dde5', 'Botticelli'], + ['#c88a65', 'Antique Brass'], + ['#c8a2c8', 'Lilac'], + ['#c8a528', 'Hokey Pokey'], + ['#c8aabf', 'Lily'], + ['#c8b568', 'Laser'], + ['#c8e3d7', 'Edgewater'], + ['#c96323', 'Piper'], + ['#c99415', 'Pizza'], + ['#c9a0dc', 'Light Wisteria'], + ['#c9b29b', 'Rodeo Dust'], + ['#c9b35b', 'Sundance'], + ['#c9b93b', 'Earls Green'], + ['#c9c0bb', 'Silver Rust'], + ['#c9d9d2', 'Conch'], + ['#c9ffa2', 'Reef'], + ['#c9ffe5', 'Aero Blue'], + ['#ca3435', 'Flush Mahogany'], + ['#cabb48', 'Turmeric'], + ['#cadcd4', 'Paris White'], + ['#cae00d', 'Bitter Lemon'], + ['#cae6da', 'Skeptic'], + ['#cb8fa9', 'Viola'], + ['#cbcab6', 'Foggy Gray'], + ['#cbd3b0', 'Green Mist'], + ['#cbdbd6', 'Nebula'], + ['#cc3333', 'Persian Red'], + ['#cc5500', 'Burnt Orange'], + ['#cc7722', 'Ochre'], + ['#cc8899', 'Puce'], + ['#cccaa8', 'Thistle Green'], + ['#ccccff', 'Periwinkle'], + ['#ccff00', 'Electric Lime'], + ['#cd5700', 'Tenn'], + ['#cd5c5c', 'Chestnut Rose'], + ['#cd8429', 'Brandy Punch'], + ['#cdf4ff', 'Onahau'], + ['#ceb98f', 'Sorrell Brown'], + ['#cebaba', 'Cold Turkey'], + ['#cec291', 'Yuma'], + ['#cec7a7', 'Chino'], + ['#cfa39d', 'Eunry'], + ['#cfb53b', 'Old Gold'], + ['#cfdccf', 'Tasman'], + ['#cfe5d2', 'Surf Crest'], + ['#cff9f3', 'Humming Bird'], + ['#cffaf4', 'Scandal'], + ['#d05f04', 'Red Stage'], + ['#d06da1', 'Hopbush'], + ['#d07d12', 'Meteor'], + ['#d0bef8', 'Perfume'], + ['#d0c0e5', 'Prelude'], + ['#d0f0c0', 'Tea Green'], + ['#d18f1b', 'Geebung'], + ['#d1bea8', 'Vanilla'], + ['#d1c6b4', 'Soft Amber'], + ['#d1d2ca', 'Celeste'], + ['#d1d2dd', 'Mischka'], + ['#d1e231', 'Pear'], + ['#d2691e', 'Hot Cinnamon'], + ['#d27d46', 'Raw Sienna'], + ['#d29eaa', 'Careys Pink'], + ['#d2b48c', 'Tan'], + ['#d2da97', 'Deco'], + ['#d2f6de', 'Blue Romance'], + ['#d2f8b0', 'Gossip'], + ['#d3cbba', 'Sisal'], + ['#d3cdc5', 'Swirl'], + ['#d47494', 'Charm'], + ['#d4b6af', 'Clam Shell'], + ['#d4bf8d', 'Straw'], + ['#d4c4a8', 'Akaroa'], + ['#d4cd16', 'Bird Flower'], + ['#d4d7d9', 'Iron'], + ['#d4dfe2', 'Geyser'], + ['#d4e2fc', 'Hawkes Blue'], + ['#d54600', 'Grenadier'], + ['#d591a4', 'Can Can'], + ['#d59a6f', 'Whiskey'], + ['#d5d195', 'Winter Hazel'], + ['#d5f6e3', 'Granny Apple'], + ['#d69188', 'My Pink'], + ['#d6c562', 'Tacha'], + ['#d6cef6', 'Moon Raker'], + ['#d6d6d1', 'Quill Gray'], + ['#d6ffdb', 'Snowy Mint'], + ['#d7837f', 'New York Pink'], + ['#d7c498', 'Pavlova'], + ['#d7d0ff', 'Fog'], + ['#d84437', 'Valencia'], + ['#d87c63', 'Japonica'], + ['#d8bfd8', 'Thistle'], + ['#d8c2d5', 'Maverick'], + ['#d8fcfa', 'Foam'], + ['#d94972', 'Cabaret'], + ['#d99376', 'Burning Sand'], + ['#d9b99b', 'Cameo'], + ['#d9d6cf', 'Timberwolf'], + ['#d9dcc1', 'Tana'], + ['#d9e4f5', 'Link Water'], + ['#d9f7ff', 'Mabel'], + ['#da3287', 'Cerise'], + ['#da5b38', 'Flame Pea'], + ['#da6304', 'Bamboo'], + ['#da6a41', 'Red Damask'], + ['#da70d6', 'Orchid'], + ['#da8a67', 'Copperfield'], + ['#daa520', 'Golden Grass'], + ['#daecd6', 'Zanah'], + ['#daf4f0', 'Iceberg'], + ['#dafaff', 'Oyster Bay'], + ['#db5079', 'Cranberry'], + ['#db9690', 'Petite Orchid'], + ['#db995e', 'Di Serria'], + ['#dbdbdb', 'Alto'], + ['#dbfff8', 'Frosted Mint'], + ['#dc143c', 'Crimson'], + ['#dc4333', 'Punch'], + ['#dcb20c', 'Galliano'], + ['#dcb4bc', 'Blossom'], + ['#dcd747', 'Wattle'], + ['#dcd9d2', 'Westar'], + ['#dcddcc', 'Moon Mist'], + ['#dcedb4', 'Caper'], + ['#dcf0ea', 'Swans Down'], + ['#ddd6d5', 'Swiss Coffee'], + ['#ddf9f1', 'White Ice'], + ['#de3163', 'Cerise Red'], + ['#de6360', 'Roman'], + ['#dea681', 'Tumbleweed'], + ['#deba13', 'Gold Tips'], + ['#dec196', 'Brandy'], + ['#decbc6', 'Wafer'], + ['#ded4a4', 'Sapling'], + ['#ded717', 'Barberry'], + ['#dee5c0', 'Beryl Green'], + ['#def5ff', 'Pattens Blue'], + ['#df73ff', 'Heliotrope'], + ['#dfbe6f', 'Apache'], + ['#dfcd6f', 'Chenin'], + ['#dfcfdb', 'Lola'], + ['#dfecda', 'Willow Brook'], + ['#dfff00', 'Chartreuse Yellow'], + ['#e0b0ff', 'Mauve'], + ['#e0b646', 'Anzac'], + ['#e0b974', 'Harvest Gold'], + ['#e0c095', 'Calico'], + ['#e0ffff', 'Baby Blue'], + ['#e16865', 'Sunglo'], + ['#e1bc64', 'Equator'], + ['#e1c0c8', 'Pink Flare'], + ['#e1e6d6', 'Periglacial Blue'], + ['#e1ead4', 'Kidnapper'], + ['#e1f6e8', 'Tara'], + ['#e25465', 'Mandy'], + ['#e2725b', 'Terracotta'], + ['#e28913', 'Golden Bell'], + ['#e292c0', 'Shocking'], + ['#e29418', 'Dixie'], + ['#e29cd2', 'Light Orchid'], + ['#e2d8ed', 'Snuff'], + ['#e2ebed', 'Mystic'], + ['#e2f3ec', 'Apple Green'], + ['#e30b5c', 'Razzmatazz'], + ['#e32636', 'Alizarin Crimson'], + ['#e34234', 'Cinnabar'], + ['#e3bebe', 'Cavern Pink'], + ['#e3f5e1', 'Peppermint'], + ['#e3f988', 'Mindaro'], + ['#e47698', 'Deep Blush'], + ['#e49b0f', 'Gamboge'], + ['#e4c2d5', 'Melanie'], + ['#e4cfde', 'Twilight'], + ['#e4d1c0', 'Bone'], + ['#e4d422', 'Sunflower'], + ['#e4d5b7', 'Grain Brown'], + ['#e4d69b', 'Zombie'], + ['#e4f6e7', 'Frostee'], + ['#e4ffd1', 'Snow Flurry'], + ['#e52b50', 'Amaranth'], + ['#e5841b', 'Zest'], + ['#e5ccc9', 'Dust Storm'], + ['#e5d7bd', 'Stark White'], + ['#e5d8af', 'Hampton'], + ['#e5e0e1', 'Bon Jour'], + ['#e5e5e5', 'Mercury'], + ['#e5f9f6', 'Polar'], + ['#e64e03', 'Trinidad'], + ['#e6be8a', 'Gold Sand'], + ['#e6bea5', 'Cashmere'], + ['#e6d7b9', 'Double Spanish White'], + ['#e6e4d4', 'Satin Linen'], + ['#e6f2ea', 'Harp'], + ['#e6f8f3', 'Off Green'], + ['#e6ffe9', 'Hint Of Green'], + ['#e6ffff', 'Tranquil'], + ['#e77200', 'Mango Tango'], + ['#e7730a', 'Christine'], + ['#e79f8c', 'Tonys Pink'], + ['#e79fc4', 'Kobi'], + ['#e7bcb4', 'Rose Fog'], + ['#e7bf05', 'Corn'], + ['#e7cd8c', 'Putty'], + ['#e7ece6', 'Gray Nurse'], + ['#e7f8ff', 'Lily White'], + ['#e7feff', 'Bubbles'], + ['#e89928', 'Fire Bush'], + ['#e8b9b3', 'Shilo'], + ['#e8e0d5', 'Pearl Bush'], + ['#e8ebe0', 'Green White'], + ['#e8f1d4', 'Chrome White'], + ['#e8f2eb', 'Gin'], + ['#e8f5f2', 'Aqua Squeeze'], + ['#e96e00', 'Clementine'], + ['#e97451', 'Burnt Sienna'], + ['#e97c07', 'Tahiti Gold'], + ['#e9cecd', 'Oyster Pink'], + ['#e9d75a', 'Confetti'], + ['#e9e3e3', 'Ebb'], + ['#e9f8ed', 'Ottoman'], + ['#e9fffd', 'Clear Day'], + ['#ea88a8', 'Carissma'], + ['#eaae69', 'Porsche'], + ['#eab33b', 'Tulip Tree'], + ['#eac674', 'Rob Roy'], + ['#eadab8', 'Raffia'], + ['#eae8d4', 'White Rock'], + ['#eaf6ee', 'Panache'], + ['#eaf6ff', 'Solitude'], + ['#eaf9f5', 'Aqua Spring'], + ['#eafffe', 'Dew'], + ['#eb9373', 'Apricot'], + ['#ebc2af', 'Zinnwaldite'], + ['#eca927', 'Fuel Yellow'], + ['#ecc54e', 'Ronchi'], + ['#ecc7ee', 'French Lilac'], + ['#eccdb9', 'Just Right'], + ['#ece090', 'Wild Rice'], + ['#ecebbd', 'Fall Green'], + ['#ecebce', 'Aths Special'], + ['#ecf245', 'Starship'], + ['#ed0a3f', 'Red Ribbon'], + ['#ed7a1c', 'Tango'], + ['#ed9121', 'Carrot Orange'], + ['#ed989e', 'Sea Pink'], + ['#edb381', 'Tacao'], + ['#edc9af', 'Desert Sand'], + ['#edcdab', 'Pancho'], + ['#eddcb1', 'Chamois'], + ['#edea99', 'Primrose'], + ['#edf5dd', 'Frost'], + ['#edf5f5', 'Aqua Haze'], + ['#edf6ff', 'Zumthor'], + ['#edf9f1', 'Narvik'], + ['#edfc84', 'Honeysuckle'], + ['#ee82ee', 'Lavender Magenta'], + ['#eec1be', 'Beauty Bush'], + ['#eed794', 'Chalky'], + ['#eed9c4', 'Almond'], + ['#eedc82', 'Flax'], + ['#eededa', 'Bizarre'], + ['#eee3ad', 'Double Colonial White'], + ['#eeeee8', 'Cararra'], + ['#eeef78', 'Manz'], + ['#eef0c8', 'Tahuna Sands'], + ['#eef0f3', 'Athens Gray'], + ['#eef3c3', 'Tusk'], + ['#eef4de', 'Loafer'], + ['#eef6f7', 'Catskill White'], + ['#eefdff', 'Twilight Blue'], + ['#eeff9a', 'Jonquil'], + ['#eeffe2', 'Rice Flower'], + ['#ef863f', 'Jaffa'], + ['#efefef', 'Gallery'], + ['#eff2f3', 'Porcelain'], + ['#f091a9', 'Mauvelous'], + ['#f0d52d', 'Golden Dream'], + ['#f0db7d', 'Golden Sand'], + ['#f0dc82', 'Buff'], + ['#f0e2ec', 'Prim'], + ['#f0e68c', 'Khaki'], + ['#f0eefd', 'Selago'], + ['#f0eeff', 'Titan White'], + ['#f0f8ff', 'Alice Blue'], + ['#f0fcea', 'Feta'], + ['#f18200', 'Gold Drop'], + ['#f19bab', 'Wewak'], + ['#f1e788', 'Sahara Sand'], + ['#f1e9d2', 'Parchment'], + ['#f1e9ff', 'Blue Chalk'], + ['#f1eec1', 'Mint Julep'], + ['#f1f1f1', 'Seashell'], + ['#f1f7f2', 'Saltpan'], + ['#f1ffad', 'Tidal'], + ['#f1ffc8', 'Chiffon'], + ['#f2552a', 'Flamingo'], + ['#f28500', 'Tangerine'], + ['#f2c3b2', 'Mandys Pink'], + ['#f2f2f2', 'Concrete'], + ['#f2fafa', 'Black Squeeze'], + ['#f34723', 'Pomegranate'], + ['#f3ad16', 'Buttercup'], + ['#f3d69d', 'New Orleans'], + ['#f3d9df', 'Vanilla Ice'], + ['#f3e7bb', 'Sidecar'], + ['#f3e9e5', 'Dawn Pink'], + ['#f3edcf', 'Wheatfield'], + ['#f3fb62', 'Canary'], + ['#f3fbd4', 'Orinoco'], + ['#f3ffd8', 'Carla'], + ['#f400a1', 'Hollywood Cerise'], + ['#f4a460', 'Sandy brown'], + ['#f4c430', 'Saffron'], + ['#f4d81c', 'Ripe Lemon'], + ['#f4ebd3', 'Janna'], + ['#f4f2ee', 'Pampas'], + ['#f4f4f4', 'Wild Sand'], + ['#f4f8ff', 'Zircon'], + ['#f57584', 'Froly'], + ['#f5c85c', 'Cream Can'], + ['#f5c999', 'Manhattan'], + ['#f5d5a0', 'Maize'], + ['#f5deb3', 'Wheat'], + ['#f5e7a2', 'Sandwisp'], + ['#f5e7e2', 'Pot Pourri'], + ['#f5e9d3', 'Albescent White'], + ['#f5edef', 'Soft Peach'], + ['#f5f3e5', 'Ecru White'], + ['#f5f5dc', 'Beige'], + ['#f5fb3d', 'Golden Fizz'], + ['#f5ffbe', 'Australian Mint'], + ['#f64a8a', 'French Rose'], + ['#f653a6', 'Brilliant Rose'], + ['#f6a4c9', 'Illusion'], + ['#f6f0e6', 'Merino'], + ['#f6f7f7', 'Black Haze'], + ['#f6ffdc', 'Spring Sun'], + ['#f7468a', 'Violet Red'], + ['#f77703', 'Chilean Fire'], + ['#f77fbe', 'Persian Pink'], + ['#f7b668', 'Rajah'], + ['#f7c8da', 'Azalea'], + ['#f7dbe6', 'We Peep'], + ['#f7f2e1', 'Quarter Spanish White'], + ['#f7f5fa', 'Whisper'], + ['#f7faf7', 'Snow Drift'], + ['#f8b853', 'Casablanca'], + ['#f8c3df', 'Chantilly'], + ['#f8d9e9', 'Cherub'], + ['#f8db9d', 'Marzipan'], + ['#f8dd5c', 'Energy Yellow'], + ['#f8e4bf', 'Givry'], + ['#f8f0e8', 'White Linen'], + ['#f8f4ff', 'Magnolia'], + ['#f8f6f1', 'Spring Wood'], + ['#f8f7dc', 'Coconut Cream'], + ['#f8f7fc', 'White Lilac'], + ['#f8f8f7', 'Desert Storm'], + ['#f8f99c', 'Texas'], + ['#f8facd', 'Corn Field'], + ['#f8fdd3', 'Mimosa'], + ['#f95a61', 'Carnation'], + ['#f9bf58', 'Saffron Mango'], + ['#f9e0ed', 'Carousel Pink'], + ['#f9e4bc', 'Dairy Cream'], + ['#f9e663', 'Portica'], + ['#f9eaf3', 'Amour'], + ['#f9f8e4', 'Rum Swizzle'], + ['#f9ff8b', 'Dolly'], + ['#f9fff6', 'Sugar Cane'], + ['#fa7814', 'Ecstasy'], + ['#fa9d5a', 'Tan Hide'], + ['#fad3a2', 'Corvette'], + ['#fadfad', 'Peach Yellow'], + ['#fae600', 'Turbo'], + ['#faeab9', 'Astra'], + ['#faeccc', 'Champagne'], + ['#faf0e6', 'Linen'], + ['#faf3f0', 'Fantasy'], + ['#faf7d6', 'Citrine White'], + ['#fafafa', 'Alabaster'], + ['#fafde4', 'Hint Of Yellow'], + ['#faffa4', 'Milan'], + ['#fb607f', 'Brink Pink'], + ['#fb8989', 'Geraldine'], + ['#fba0e3', 'Lavender Rose'], + ['#fba129', 'Sea Buckthorn'], + ['#fbac13', 'Sun'], + ['#fbaed2', 'Lavender Pink'], + ['#fbb2a3', 'Rose Bud'], + ['#fbbeda', 'Cupid'], + ['#fbcce7', 'Classic Rose'], + ['#fbceb1', 'Apricot Peach'], + ['#fbe7b2', 'Banana Mania'], + ['#fbe870', 'Marigold Yellow'], + ['#fbe96c', 'Festival'], + ['#fbea8c', 'Sweet Corn'], + ['#fbec5d', 'Candy Corn'], + ['#fbf9f9', 'Hint Of Red'], + ['#fbffba', 'Shalimar'], + ['#fc0fc0', 'Shocking Pink'], + ['#fc80a5', 'Tickle Me Pink'], + ['#fc9c1d', 'Tree Poppy'], + ['#fcc01e', 'Lightning Yellow'], + ['#fcd667', 'Goldenrod'], + ['#fcd917', 'Candlelight'], + ['#fcda98', 'Cherokee'], + ['#fcf4d0', 'Double Pearl Lusta'], + ['#fcf4dc', 'Pearl Lusta'], + ['#fcf8f7', 'Vista White'], + ['#fcfbf3', 'Bianca'], + ['#fcfeda', 'Moon Glow'], + ['#fcffe7', 'China Ivory'], + ['#fcfff9', 'Ceramic'], + ['#fd0e35', 'Torch Red'], + ['#fd5b78', 'Wild Watermelon'], + ['#fd7b33', 'Crusta'], + ['#fd7c07', 'Sorbus'], + ['#fd9fa2', 'Sweet Pink'], + ['#fdd5b1', 'Light Apricot'], + ['#fdd7e4', 'Pig Pink'], + ['#fde1dc', 'Cinderella'], + ['#fde295', 'Golden Glow'], + ['#fde910', 'Lemon'], + ['#fdf5e6', 'Old Lace'], + ['#fdf6d3', 'Half Colonial White'], + ['#fdf7ad', 'Drover'], + ['#fdfeb8', 'Pale Prim'], + ['#fdffd5', 'Cumulus'], + ['#fe28a2', 'Persian Rose'], + ['#fe4c40', 'Sunset Orange'], + ['#fe6f5e', 'Bittersweet'], + ['#fe9d04', 'California'], + ['#fea904', 'Yellow Sea'], + ['#febaad', 'Melon'], + ['#fed33c', 'Bright Sun'], + ['#fed85d', 'Dandelion'], + ['#fedb8d', 'Salomie'], + ['#fee5ac', 'Cape Honey'], + ['#feebf3', 'Remy'], + ['#feefce', 'Oasis'], + ['#fef0ec', 'Bridesmaid'], + ['#fef2c7', 'Beeswax'], + ['#fef3d8', 'Bleach White'], + ['#fef4cc', 'Pipi'], + ['#fef4db', 'Half Spanish White'], + ['#fef4f8', 'Wisp Pink'], + ['#fef5f1', 'Provincial Pink'], + ['#fef7de', 'Half Dutch White'], + ['#fef8e2', 'Solitaire'], + ['#fef8ff', 'White Pointer'], + ['#fef9e3', 'Off Yellow'], + ['#fefced', 'Orange White'], + ['#ff0000', 'Red'], + ['#ff007f', 'Rose'], + ['#ff00cc', 'Purple Pizzazz'], + ['#ff00ff', 'Magenta Fuchsia'], + ['#ff2400', 'Scarlet'], + ['#ff3399', 'Wild Strawberry'], + ['#ff33cc', 'Razzle Dazzle Rose'], + ['#ff355e', 'Radical Red'], + ['#ff3f34', 'Red Orange'], + ['#ff4040', 'Coral Red'], + ['#ff4d00', 'Vermilion'], + ['#ff4f00', 'International Orange'], + ['#ff6037', 'Outrageous Orange'], + ['#ff6600', 'Blaze Orange'], + ['#ff66ff', 'Pink Flamingo'], + ['#ff681f', 'Orange'], + ['#ff69b4', 'Hot Pink'], + ['#ff6b53', 'Persimmon'], + ['#ff6fff', 'Blush Pink'], + ['#ff7034', 'Burning Orange'], + ['#ff7518', 'Pumpkin'], + ['#ff7d07', 'Flamenco'], + ['#ff7f00', 'Flush Orange'], + ['#ff7f50', 'Coral'], + ['#ff8c69', 'Salmon'], + ['#ff9000', 'Pizazz'], + ['#ff910f', 'West Side'], + ['#ff91a4', 'Pink Salmon'], + ['#ff9933', 'Neon Carrot'], + ['#ff9966', 'Atomic Tangerine'], + ['#ff9980', 'Vivid Tangerine'], + ['#ff9e2c', 'Sunshade'], + ['#ffa000', 'Orange Peel'], + ['#ffa194', 'Mona Lisa'], + ['#ffa500', 'Web Orange'], + ['#ffa6c9', 'Carnation Pink'], + ['#ffab81', 'Hit Pink'], + ['#ffae42', 'Yellow Orange'], + ['#ffb0ac', 'Cornflower Lilac'], + ['#ffb1b3', 'Sundown'], + ['#ffb31f', 'My Sin'], + ['#ffb555', 'Texas Rose'], + ['#ffb7d5', 'Cotton Candy'], + ['#ffb97b', 'Macaroni And Cheese'], + ['#ffba00', 'Selective Yellow'], + ['#ffbd5f', 'Koromiko'], + ['#ffbf00', 'Amber'], + ['#ffc0a8', 'Wax Flower'], + ['#ffc0cb', 'Pink'], + ['#ffc3c0', 'Your Pink'], + ['#ffc901', 'Supernova'], + ['#ffcba4', 'Flesh'], + ['#ffcc33', 'Sunglow'], + ['#ffcc5c', 'Golden Tainoi'], + ['#ffcc99', 'Peach Orange'], + ['#ffcd8c', 'Chardonnay'], + ['#ffd1dc', 'Pastel Pink'], + ['#ffd2b7', 'Romantic'], + ['#ffd38c', 'Grandis'], + ['#ffd700', 'Gold'], + ['#ffd800', 'School Bus Yellow'], + ['#ffd8d9', 'Cosmos'], + ['#ffdb58', 'Mustard'], + ['#ffdcd6', 'Peach Schnapps'], + ['#ffddaf', 'Caramel'], + ['#ffddcd', 'Tuft Bush'], + ['#ffddcf', 'Watusi'], + ['#ffddf4', 'Pink Lace'], + ['#ffdead', 'Navajo White'], + ['#ffdeb3', 'Frangipani'], + ['#ffe1df', 'Pippin'], + ['#ffe1f2', 'Pale Rose'], + ['#ffe2c5', 'Negroni'], + ['#ffe5a0', 'Cream Brulee'], + ['#ffe5b4', 'Peach'], + ['#ffe6c7', 'Tequila'], + ['#ffe772', 'Kournikova'], + ['#ffeac8', 'Sandy Beach'], + ['#ffead4', 'Karry'], + ['#ffec13', 'Broom'], + ['#ffedbc', 'Colonial White'], + ['#ffeed8', 'Derby'], + ['#ffefa1', 'Vis Vis'], + ['#ffefc1', 'Egg White'], + ['#ffefd5', 'Papaya Whip'], + ['#ffefec', 'Fair Pink'], + ['#fff0db', 'Peach Cream'], + ['#fff0f5', 'Lavender Blush'], + ['#fff14f', 'Gorse'], + ['#fff1b5', 'Buttermilk'], + ['#fff1d8', 'Pink Lady'], + ['#fff1ee', 'Forget Me Not'], + ['#fff1f9', 'Tutu'], + ['#fff39d', 'Picasso'], + ['#fff3f1', 'Chardon'], + ['#fff46e', 'Paris Daisy'], + ['#fff4ce', 'Barley White'], + ['#fff4dd', 'Egg Sour'], + ['#fff4e0', 'Sazerac'], + ['#fff4e8', 'Serenade'], + ['#fff4f3', 'Chablis'], + ['#fff5ee', 'Seashell Peach'], + ['#fff5f3', 'Sauvignon'], + ['#fff6d4', 'Milk Punch'], + ['#fff6df', 'Varden'], + ['#fff6f5', 'Rose White'], + ['#fff8d1', 'Baja White'], + ['#fff9e2', 'Gin Fizz'], + ['#fff9e6', 'Early Dawn'], + ['#fffacd', 'Lemon Chiffon'], + ['#fffaf4', 'Bridal Heath'], + ['#fffbdc', 'Scotch Mist'], + ['#fffbf9', 'Soapstone'], + ['#fffc99', 'Witch Haze'], + ['#fffcea', 'Buttery White'], + ['#fffcee', 'Island Spice'], + ['#fffdd0', 'Cream'], + ['#fffde6', 'Chilean Heath'], + ['#fffde8', 'Travertine'], + ['#fffdf3', 'Orchid White'], + ['#fffdf4', 'Quarter Pearl Lusta'], + ['#fffee1', 'Half And Half'], + ['#fffeec', 'Apricot White'], + ['#fffef0', 'Rice Cake'], + ['#fffef6', 'Black White'], + ['#fffefd', 'Romance'], + ['#ffff00', 'Yellow'], + ['#ffff66', 'Laser Lemon'], + ['#ffff99', 'Pale Canary'], + ['#ffffb4', 'Portafino'], + ['#fffff0', 'Ivory'], + ['#ffffff', 'White'] +]; + +/** + * Map Of hex color values to color names + * + * - key: hex value + * - value: color name + */ +export const colorNameMap = colorNames.reduce>((acc, [hex, name]) => { + acc[hex] = name; + return acc; +}, {}); diff --git a/frontend/packages/color/src/constant/palette.ts b/frontend/packages/color/src/constant/palette.ts new file mode 100644 index 00000000..9f626641 --- /dev/null +++ b/frontend/packages/color/src/constant/palette.ts @@ -0,0 +1,356 @@ +import type { ColorPaletteFamily } from '../types'; + +export const colorPalettes: ColorPaletteFamily[] = [ + { + name: 'Slate', + palettes: [ + { hex: '#f8fafc', number: 50 }, + { hex: '#f1f5f9', number: 100 }, + { hex: '#e2e8f0', number: 200 }, + { hex: '#cbd5e1', number: 300 }, + { hex: '#94a3b8', number: 400 }, + { hex: '#64748b', number: 500 }, + { hex: '#475569', number: 600 }, + { hex: '#334155', number: 700 }, + { hex: '#1e293b', number: 800 }, + { hex: '#0f172a', number: 900 }, + { hex: '#020617', number: 950 } + ] + }, + { + name: 'Gray', + palettes: [ + { hex: '#f9fafb', number: 50 }, + { hex: '#f3f4f6', number: 100 }, + { hex: '#e5e7eb', number: 200 }, + { hex: '#d1d5db', number: 300 }, + { hex: '#9ca3af', number: 400 }, + { hex: '#6b7280', number: 500 }, + { hex: '#4b5563', number: 600 }, + { hex: '#374151', number: 700 }, + { hex: '#1f2937', number: 800 }, + { hex: '#111827', number: 900 }, + { hex: '#030712', number: 950 } + ] + }, + { + name: 'Zinc', + palettes: [ + { hex: '#fafafa', number: 50 }, + { hex: '#f4f4f5', number: 100 }, + { hex: '#e4e4e7', number: 200 }, + { hex: '#d4d4d8', number: 300 }, + { hex: '#a1a1aa', number: 400 }, + { hex: '#71717a', number: 500 }, + { hex: '#52525b', number: 600 }, + { hex: '#3f3f46', number: 700 }, + { hex: '#27272a', number: 800 }, + { hex: '#18181b', number: 900 }, + { hex: '#09090b', number: 950 } + ] + }, + { + name: 'Neutral', + palettes: [ + { hex: '#fafafa', number: 50 }, + { hex: '#f5f5f5', number: 100 }, + { hex: '#e5e5e5', number: 200 }, + { hex: '#d4d4d4', number: 300 }, + { hex: '#a3a3a3', number: 400 }, + { hex: '#737373', number: 500 }, + { hex: '#525252', number: 600 }, + { hex: '#404040', number: 700 }, + { hex: '#262626', number: 800 }, + { hex: '#171717', number: 900 }, + { hex: '#0a0a0a', number: 950 } + ] + }, + { + name: 'Stone', + palettes: [ + { hex: '#fafaf9', number: 50 }, + { hex: '#f5f5f4', number: 100 }, + { hex: '#e7e5e4', number: 200 }, + { hex: '#d6d3d1', number: 300 }, + { hex: '#a8a29e', number: 400 }, + { hex: '#78716c', number: 500 }, + { hex: '#57534e', number: 600 }, + { hex: '#44403c', number: 700 }, + { hex: '#292524', number: 800 }, + { hex: '#1c1917', number: 900 }, + { hex: '#0c0a09', number: 950 } + ] + }, + { + name: 'Red', + palettes: [ + { hex: '#fef2f2', number: 50 }, + { hex: '#fee2e2', number: 100 }, + { hex: '#fecaca', number: 200 }, + { hex: '#fca5a5', number: 300 }, + { hex: '#f87171', number: 400 }, + { hex: '#ef4444', number: 500 }, + { hex: '#dc2626', number: 600 }, + { hex: '#b91c1c', number: 700 }, + { hex: '#991b1b', number: 800 }, + { hex: '#7f1d1d', number: 900 }, + { hex: '#450a0a', number: 950 } + ] + }, + { + name: 'Orange', + palettes: [ + { hex: '#fff7ed', number: 50 }, + { hex: '#ffedd5', number: 100 }, + { hex: '#fed7aa', number: 200 }, + { hex: '#fdba74', number: 300 }, + { hex: '#fb923c', number: 400 }, + { hex: '#f97316', number: 500 }, + { hex: '#ea580c', number: 600 }, + { hex: '#c2410c', number: 700 }, + { hex: '#9a3412', number: 800 }, + { hex: '#7c2d12', number: 900 }, + { hex: '#431407', number: 950 } + ] + }, + { + name: 'Amber', + palettes: [ + { hex: '#fffbeb', number: 50 }, + { hex: '#fef3c7', number: 100 }, + { hex: '#fde68a', number: 200 }, + { hex: '#fcd34d', number: 300 }, + { hex: '#fbbf24', number: 400 }, + { hex: '#f59e0b', number: 500 }, + { hex: '#d97706', number: 600 }, + { hex: '#b45309', number: 700 }, + { hex: '#92400e', number: 800 }, + { hex: '#78350f', number: 900 }, + { hex: '#451a03', number: 950 } + ] + }, + { + name: 'Yellow', + palettes: [ + { hex: '#fefce8', number: 50 }, + { hex: '#fef9c3', number: 100 }, + { hex: '#fef08a', number: 200 }, + { hex: '#fde047', number: 300 }, + { hex: '#facc15', number: 400 }, + { hex: '#eab308', number: 500 }, + { hex: '#ca8a04', number: 600 }, + { hex: '#a16207', number: 700 }, + { hex: '#854d0e', number: 800 }, + { hex: '#713f12', number: 900 }, + { hex: '#422006', number: 950 } + ] + }, + { + name: 'Lime', + palettes: [ + { hex: '#f7fee7', number: 50 }, + { hex: '#ecfccb', number: 100 }, + { hex: '#d9f99d', number: 200 }, + { hex: '#bef264', number: 300 }, + { hex: '#a3e635', number: 400 }, + { hex: '#84cc16', number: 500 }, + { hex: '#65a30d', number: 600 }, + { hex: '#4d7c0f', number: 700 }, + { hex: '#3f6212', number: 800 }, + { hex: '#365314', number: 900 }, + { hex: '#1a2e05', number: 950 } + ] + }, + { + name: 'Green', + palettes: [ + { hex: '#f0fdf4', number: 50 }, + { hex: '#dcfce7', number: 100 }, + { hex: '#bbf7d0', number: 200 }, + { hex: '#86efac', number: 300 }, + { hex: '#4ade80', number: 400 }, + { hex: '#22c55e', number: 500 }, + { hex: '#16a34a', number: 600 }, + { hex: '#15803d', number: 700 }, + { hex: '#166534', number: 800 }, + { hex: '#14532d', number: 900 }, + { hex: '#052e16', number: 950 } + ] + }, + { + name: 'Emerald', + palettes: [ + { hex: '#ecfdf5', number: 50 }, + { hex: '#d1fae5', number: 100 }, + { hex: '#a7f3d0', number: 200 }, + { hex: '#6ee7b7', number: 300 }, + { hex: '#34d399', number: 400 }, + { hex: '#10b981', number: 500 }, + { hex: '#059669', number: 600 }, + { hex: '#047857', number: 700 }, + { hex: '#065f46', number: 800 }, + { hex: '#064e3b', number: 900 }, + { hex: '#022c22', number: 950 } + ] + }, + { + name: 'Teal', + palettes: [ + { hex: '#f0fdfa', number: 50 }, + { hex: '#ccfbf1', number: 100 }, + { hex: '#99f6e4', number: 200 }, + { hex: '#5eead4', number: 300 }, + { hex: '#2dd4bf', number: 400 }, + { hex: '#14b8a6', number: 500 }, + { hex: '#0d9488', number: 600 }, + { hex: '#0f766e', number: 700 }, + { hex: '#115e59', number: 800 }, + { hex: '#134e4a', number: 900 }, + { hex: '#042f2e', number: 950 } + ] + }, + { + name: 'Cyan', + palettes: [ + { hex: '#ecfeff', number: 50 }, + { hex: '#cffafe', number: 100 }, + { hex: '#a5f3fc', number: 200 }, + { hex: '#67e8f9', number: 300 }, + { hex: '#22d3ee', number: 400 }, + { hex: '#06b6d4', number: 500 }, + { hex: '#0891b2', number: 600 }, + { hex: '#0e7490', number: 700 }, + { hex: '#155e75', number: 800 }, + { hex: '#164e63', number: 900 }, + { hex: '#083344', number: 950 } + ] + }, + { + name: 'Sky', + palettes: [ + { hex: '#f0f9ff', number: 50 }, + { hex: '#e0f2fe', number: 100 }, + { hex: '#bae6fd', number: 200 }, + { hex: '#7dd3fc', number: 300 }, + { hex: '#38bdf8', number: 400 }, + { hex: '#0ea5e9', number: 500 }, + { hex: '#0284c7', number: 600 }, + { hex: '#0369a1', number: 700 }, + { hex: '#075985', number: 800 }, + { hex: '#0c4a6e', number: 900 }, + { hex: '#082f49', number: 950 } + ] + }, + { + name: 'Blue', + palettes: [ + { hex: '#eff6ff', number: 50 }, + { hex: '#dbeafe', number: 100 }, + { hex: '#bfdbfe', number: 200 }, + { hex: '#93c5fd', number: 300 }, + { hex: '#60a5fa', number: 400 }, + { hex: '#3b82f6', number: 500 }, + { hex: '#2563eb', number: 600 }, + { hex: '#1d4ed8', number: 700 }, + { hex: '#1e40af', number: 800 }, + { hex: '#1e3a8a', number: 900 }, + { hex: '#172554', number: 950 } + ] + }, + { + name: 'Indigo', + palettes: [ + { hex: '#eef2ff', number: 50 }, + { hex: '#e0e7ff', number: 100 }, + { hex: '#c7d2fe', number: 200 }, + { hex: '#a5b4fc', number: 300 }, + { hex: '#818cf8', number: 400 }, + { hex: '#6366f1', number: 500 }, + { hex: '#4f46e5', number: 600 }, + { hex: '#4338ca', number: 700 }, + { hex: '#3730a3', number: 800 }, + { hex: '#312e81', number: 900 }, + { hex: '#1e1b4b', number: 950 } + ] + }, + { + name: 'Violet', + palettes: [ + { hex: '#f5f3ff', number: 50 }, + { hex: '#ede9fe', number: 100 }, + { hex: '#ddd6fe', number: 200 }, + { hex: '#c4b5fd', number: 300 }, + { hex: '#a78bfa', number: 400 }, + { hex: '#8b5cf6', number: 500 }, + { hex: '#7c3aed', number: 600 }, + { hex: '#6d28d9', number: 700 }, + { hex: '#5b21b6', number: 800 }, + { hex: '#4c1d95', number: 900 }, + { hex: '#2e1065', number: 950 } + ] + }, + { + name: 'Purple', + palettes: [ + { hex: '#faf5ff', number: 50 }, + { hex: '#f3e8ff', number: 100 }, + { hex: '#e9d5ff', number: 200 }, + { hex: '#d8b4fe', number: 300 }, + { hex: '#c084fc', number: 400 }, + { hex: '#a855f7', number: 500 }, + { hex: '#9333ea', number: 600 }, + { hex: '#7e22ce', number: 700 }, + { hex: '#6b21a8', number: 800 }, + { hex: '#581c87', number: 900 }, + { hex: '#3b0764', number: 950 } + ] + }, + { + name: 'Fuchsia', + palettes: [ + { hex: '#fdf4ff', number: 50 }, + { hex: '#fae8ff', number: 100 }, + { hex: '#f5d0fe', number: 200 }, + { hex: '#f0abfc', number: 300 }, + { hex: '#e879f9', number: 400 }, + { hex: '#d946ef', number: 500 }, + { hex: '#c026d3', number: 600 }, + { hex: '#a21caf', number: 700 }, + { hex: '#86198f', number: 800 }, + { hex: '#701a75', number: 900 }, + { hex: '#4a044e', number: 950 } + ] + }, + { + name: 'Pink', + palettes: [ + { hex: '#fdf2f8', number: 50 }, + { hex: '#fce7f3', number: 100 }, + { hex: '#fbcfe8', number: 200 }, + { hex: '#f9a8d4', number: 300 }, + { hex: '#f472b6', number: 400 }, + { hex: '#ec4899', number: 500 }, + { hex: '#db2777', number: 600 }, + { hex: '#be185d', number: 700 }, + { hex: '#9d174d', number: 800 }, + { hex: '#831843', number: 900 }, + { hex: '#500724', number: 950 } + ] + }, + { + name: 'Rose', + palettes: [ + { hex: '#fff1f2', number: 50 }, + { hex: '#ffe4e6', number: 100 }, + { hex: '#fecdd3', number: 200 }, + { hex: '#fda4af', number: 300 }, + { hex: '#fb7185', number: 400 }, + { hex: '#f43f5e', number: 500 }, + { hex: '#e11d48', number: 600 }, + { hex: '#be123c', number: 700 }, + { hex: '#9f1239', number: 800 }, + { hex: '#881337', number: 900 }, + { hex: '#4c0519', number: 950 } + ] + } +]; diff --git a/frontend/packages/color/src/index.ts b/frontend/packages/color/src/index.ts new file mode 100644 index 00000000..42a4d547 --- /dev/null +++ b/frontend/packages/color/src/index.ts @@ -0,0 +1,7 @@ +import { colorPalettes } from './constant'; + +export * from './palette'; +export * from './shared'; +export { colorPalettes }; + +export * from './types'; diff --git a/frontend/packages/color/src/palette/antd.ts b/frontend/packages/color/src/palette/antd.ts new file mode 100644 index 00000000..c3d5b488 --- /dev/null +++ b/frontend/packages/color/src/palette/antd.ts @@ -0,0 +1,176 @@ +import type { AnyColor, HsvColor } from 'colord'; +import { getHex, getHsv, isValidColor, mixColor } from '../shared'; +import type { ColorIndex } from '../types'; + +/** Hue step */ +const hueStep = 2; +/** Saturation step, light color part */ +const saturationStep = 16; +/** Saturation step, dark color part */ +const saturationStep2 = 5; +/** Brightness step, light color part */ +const brightnessStep1 = 5; +/** Brightness step, dark color part */ +const brightnessStep2 = 15; +/** Light color count, main color up */ +const lightColorCount = 5; +/** Dark color count, main color down */ +const darkColorCount = 4; + +/** + * Get AntD palette color by index + * + * @param color - Color + * @param index - The color index of color palette (the main color index is 6) + * @returns Hex color + */ +export function getAntDPaletteColorByIndex(color: AnyColor, index: ColorIndex): string { + if (!isValidColor(color)) { + throw new Error('invalid input color value'); + } + + if (index === 6) { + return getHex(color); + } + + const isLight = index < 6; + const hsv = getHsv(color); + const i = isLight ? lightColorCount + 1 - index : index - lightColorCount - 1; + + const newHsv: HsvColor = { + h: getHue(hsv, i, isLight), + s: getSaturation(hsv, i, isLight), + v: getValue(hsv, i, isLight) + }; + + return getHex(newHsv); +} + +/** Map of dark color index and opacity */ +const darkColorMap = [ + { index: 7, opacity: 0.15 }, + { index: 6, opacity: 0.25 }, + { index: 5, opacity: 0.3 }, + { index: 5, opacity: 0.45 }, + { index: 5, opacity: 0.65 }, + { index: 5, opacity: 0.85 }, + { index: 5, opacity: 0.9 }, + { index: 4, opacity: 0.93 }, + { index: 3, opacity: 0.95 }, + { index: 2, opacity: 0.97 }, + { index: 1, opacity: 0.98 } +]; + +/** + * Get AntD color palette + * + * @param color - Color + * @param darkTheme - Dark theme + * @param darkThemeMixColor - Dark theme mix color (default: #141414) + */ +export function getAntDColorPalette(color: AnyColor, darkTheme = false, darkThemeMixColor = '#141414'): string[] { + const indexes: ColorIndex[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; + + const patterns = indexes.map(index => getAntDPaletteColorByIndex(color, index)); + + if (darkTheme) { + const darkPatterns = darkColorMap.map(({ index, opacity }) => { + const darkColor = mixColor(darkThemeMixColor, patterns[index], opacity); + + return darkColor; + }); + + return darkPatterns.map(item => getHex(item)); + } + + return patterns; +} + +/** + * Get hue + * + * @param hsv - Hsv format color + * @param i - The relative distance from 6 + * @param isLight - Is light color + */ +function getHue(hsv: HsvColor, i: number, isLight: boolean) { + let hue: number; + + const hsvH = Math.round(hsv.h); + + if (hsvH >= 60 && hsvH <= 240) { + hue = isLight ? hsvH - hueStep * i : hsvH + hueStep * i; + } else { + hue = isLight ? hsvH + hueStep * i : hsvH - hueStep * i; + } + + if (hue < 0) { + hue += 360; + } + + if (hue >= 360) { + hue -= 360; + } + + return hue; +} + +/** + * Get saturation + * + * @param hsv - Hsv format color + * @param i - The relative distance from 6 + * @param isLight - Is light color + */ +function getSaturation(hsv: HsvColor, i: number, isLight: boolean) { + if (hsv.h === 0 && hsv.s === 0) { + return hsv.s; + } + + let saturation: number; + + if (isLight) { + saturation = hsv.s - saturationStep * i; + } else if (i === darkColorCount) { + saturation = hsv.s + saturationStep; + } else { + saturation = hsv.s + saturationStep2 * i; + } + + if (saturation > 100) { + saturation = 100; + } + + if (isLight && i === lightColorCount && saturation > 10) { + saturation = 10; + } + + if (saturation < 6) { + saturation = 6; + } + + return saturation; +} + +/** + * Get value of hsv + * + * @param hsv - Hsv format color + * @param i - The relative distance from 6 + * @param isLight - Is light color + */ +function getValue(hsv: HsvColor, i: number, isLight: boolean) { + let value: number; + + if (isLight) { + value = hsv.v + brightnessStep1 * i; + } else { + value = hsv.v - brightnessStep2 * i; + } + + if (value > 100) { + value = 100; + } + + return value; +} diff --git a/frontend/packages/color/src/palette/index.ts b/frontend/packages/color/src/palette/index.ts new file mode 100644 index 00000000..ba3b8535 --- /dev/null +++ b/frontend/packages/color/src/palette/index.ts @@ -0,0 +1,45 @@ +import type { AnyColor } from 'colord'; +import { getHex } from '../shared'; +import type { ColorPaletteNumber } from '../types'; +import { getRecommendedColorPalette } from './recommend'; +import { getAntDColorPalette } from './antd'; + +/** + * get color palette by provided color + * + * @param color + * @param recommended whether to get recommended color palette (the provided color may not be the main color) + */ +export function getColorPalette(color: AnyColor, recommended = false) { + const colorMap = new Map(); + + if (recommended) { + const colorPalette = getRecommendedColorPalette(getHex(color)); + colorPalette.palettes.forEach(palette => { + colorMap.set(palette.number, palette.hex); + }); + } else { + const colors = getAntDColorPalette(color); + + const colorNumbers: ColorPaletteNumber[] = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950]; + + colorNumbers.forEach((number, index) => { + colorMap.set(number, colors[index]); + }); + } + + return colorMap; +} + +/** + * get color palette color by number + * + * @param color the provided color + * @param number the color palette number + * @param recommended whether to get recommended color palette (the provided color may not be the main color) + */ +export function getPaletteColorByNumber(color: AnyColor, number: ColorPaletteNumber, recommended = false) { + const colorMap = getColorPalette(color, recommended); + + return colorMap.get(number as ColorPaletteNumber)!; +} diff --git a/frontend/packages/color/src/palette/recommend.ts b/frontend/packages/color/src/palette/recommend.ts new file mode 100644 index 00000000..904cae25 --- /dev/null +++ b/frontend/packages/color/src/palette/recommend.ts @@ -0,0 +1,152 @@ +import { getColorName, getDeltaE, getHsl, isValidColor, transformHslToHex } from '../shared'; +import { colorPalettes } from '../constant'; +import type { + ColorPalette, + ColorPaletteFamily, + ColorPaletteFamilyWithNearestPalette, + ColorPaletteMatch, + ColorPaletteNumber +} from '../types'; + +/** + * get recommended color palette by provided color + * + * @param color the provided color + */ +export function getRecommendedColorPalette(color: string) { + const colorPaletteFamily = getRecommendedColorPaletteFamily(color); + + const colorMap = new Map(); + + colorPaletteFamily.palettes.forEach(palette => { + colorMap.set(palette.number, palette); + }); + + const mainColor = colorMap.get(500)!; + const matchColor = colorPaletteFamily.palettes.find(palette => palette.hex === color)!; + + const colorPalette: ColorPaletteMatch = { + ...colorPaletteFamily, + colorMap, + main: mainColor, + match: matchColor + }; + + return colorPalette; +} + +/** + * get recommended palette color by provided color + * + * @param color the provided color + * @param number the color palette number + */ +export function getRecommendedPaletteColorByNumber(color: string, number: ColorPaletteNumber) { + const colorPalette = getRecommendedColorPalette(color); + + const { hex } = colorPalette.colorMap.get(number)!; + + return hex; +} + +/** + * get color palette family by provided color and color name + * + * @param color the provided color + */ +export function getRecommendedColorPaletteFamily(color: string) { + if (!isValidColor(color)) { + throw new Error('Invalid color, please check color value!'); + } + + let colorName = getColorName(color); + + colorName = colorName.toLowerCase().replace(/\s/g, '-'); + + const { h: h1, s: s1 } = getHsl(color); + + const { nearestLightnessPalette, palettes } = getNearestColorPaletteFamily(color, colorPalettes); + + const { number, hex } = nearestLightnessPalette; + + const { h: h2, s: s2 } = getHsl(hex); + + const deltaH = h1 - h2; + + const sRatio = s1 / s2; + + const colorPaletteFamily: ColorPaletteFamily = { + name: colorName, + palettes: palettes.map(palette => { + let hexValue = color; + + const isSame = number === palette.number; + + if (!isSame) { + const { h: h3, s: s3, l } = getHsl(palette.hex); + + const newH = deltaH < 0 ? h3 + deltaH : h3 - deltaH; + const newS = s3 * sRatio; + + hexValue = transformHslToHex({ + h: newH, + s: newS, + l + }); + } + + return { + hex: hexValue, + number: palette.number + }; + }) + }; + + return colorPaletteFamily; +} + +/** + * get nearest color palette family + * + * @param color color + * @param families color palette families + */ +function getNearestColorPaletteFamily(color: string, families: ColorPaletteFamily[]) { + const familyWithConfig = families.map(family => { + const palettes = family.palettes.map(palette => { + return { + ...palette, + delta: getDeltaE(color, palette.hex) + }; + }); + + const nearestPalette = palettes.reduce((prev, curr) => (prev.delta < curr.delta ? prev : curr)); + + return { + ...family, + palettes, + nearestPalette + }; + }); + + const nearestPaletteFamily = familyWithConfig.reduce((prev, curr) => + prev.nearestPalette.delta < curr.nearestPalette.delta ? prev : curr + ); + + const { l } = getHsl(color); + + const paletteFamily: ColorPaletteFamilyWithNearestPalette = { + ...nearestPaletteFamily, + nearestLightnessPalette: nearestPaletteFamily.palettes.reduce((prev, curr) => { + const { l: prevLightness } = getHsl(prev.hex); + const { l: currLightness } = getHsl(curr.hex); + + const deltaPrev = Math.abs(prevLightness - l); + const deltaCurr = Math.abs(currLightness - l); + + return deltaPrev < deltaCurr ? prev : curr; + }) + }; + + return paletteFamily; +} diff --git a/frontend/packages/color/src/shared/colord.ts b/frontend/packages/color/src/shared/colord.ts new file mode 100644 index 00000000..4c52330a --- /dev/null +++ b/frontend/packages/color/src/shared/colord.ts @@ -0,0 +1,93 @@ +import { colord, extend } from 'colord'; +import namesPlugin from 'colord/plugins/names'; +import mixPlugin from 'colord/plugins/mix'; +import labPlugin from 'colord/plugins/lab'; +import type { AnyColor, HslColor, RgbColor } from 'colord'; + +extend([namesPlugin, mixPlugin, labPlugin]); + +export function isValidColor(color: AnyColor) { + return colord(color).isValid(); +} + +export function getHex(color: AnyColor) { + return colord(color).toHex(); +} + +export function getRgb(color: AnyColor) { + return colord(color).toRgb(); +} + +export function getHsl(color: AnyColor) { + return colord(color).toHsl(); +} + +export function getHsv(color: AnyColor) { + return colord(color).toHsv(); +} + +export function getDeltaE(color1: AnyColor, color2: AnyColor) { + return colord(color1).delta(color2); +} + +export function transformHslToHex(color: HslColor) { + return colord(color).toHex(); +} + +/** + * Add color alpha + * + * @param color - Color + * @param alpha - Alpha (0 - 1) + */ +export function addColorAlpha(color: AnyColor, alpha: number) { + return colord(color).alpha(alpha).toHex(); +} + +/** + * Mix color + * + * @param firstColor - First color + * @param secondColor - Second color + * @param ratio - The ratio of the second color (0 - 1) + */ +export function mixColor(firstColor: AnyColor, secondColor: AnyColor, ratio: number) { + return colord(firstColor).mix(secondColor, ratio).toHex(); +} + +/** + * Transform color with opacity to similar color without opacity + * + * @param color - Color + * @param alpha - Alpha (0 - 1) + * @param bgColor Background color (usually white or black) + */ +export function transformColorWithOpacity(color: AnyColor, alpha: number, bgColor = '#ffffff') { + const originColor = addColorAlpha(color, alpha); + const { r: oR, g: oG, b: oB } = colord(originColor).toRgb(); + + const { r: bgR, g: bgG, b: bgB } = colord(bgColor).toRgb(); + + function calRgb(or: number, bg: number, al: number) { + return bg + (or - bg) * al; + } + + const resultRgb: RgbColor = { + r: calRgb(oR, bgR, alpha), + g: calRgb(oG, bgG, alpha), + b: calRgb(oB, bgB, alpha) + }; + + return colord(resultRgb).toHex(); +} + +/** + * Is white color + * + * @param color - Color + */ +export function isWhiteColor(color: AnyColor) { + return colord(color).isEqual('#ffffff'); +} + +export { colord }; diff --git a/frontend/packages/color/src/shared/index.ts b/frontend/packages/color/src/shared/index.ts new file mode 100644 index 00000000..ae293ceb --- /dev/null +++ b/frontend/packages/color/src/shared/index.ts @@ -0,0 +1,2 @@ +export * from './colord'; +export * from './name'; diff --git a/frontend/packages/color/src/shared/name.ts b/frontend/packages/color/src/shared/name.ts new file mode 100644 index 00000000..866bd33d --- /dev/null +++ b/frontend/packages/color/src/shared/name.ts @@ -0,0 +1,49 @@ +import { colorNames } from '../constant'; +import { getHex, getHsl, getRgb } from './colord'; + +/** + * Get color name + * + * @param color + */ +export function getColorName(color: string) { + const hex = getHex(color); + const rgb = getRgb(color); + const hsl = getHsl(color); + + let ndf = 0; + let ndf1 = 0; + let ndf2 = 0; + let cl = -1; + let df = -1; + + let name = ''; + + colorNames.some((item, index) => { + const [hexValue, colorName] = item; + + const match = hex === hexValue; + + if (match) { + name = colorName; + } else { + const { r, g, b } = getRgb(hexValue); + const { h, s, l } = getHsl(hexValue); + + ndf1 = (rgb.r - r) ** 2 + (rgb.g - g) ** 2 + (rgb.b - b) ** 2; + ndf2 = (hsl.h - h) ** 2 + (hsl.s - s) ** 2 + (hsl.l - l) ** 2; + + ndf = ndf1 + ndf2 * 2; + if (df < 0 || df > ndf) { + df = ndf; + cl = index; + } + } + + return match; + }); + + name = colorNames[cl][1]; + + return name; +} diff --git a/frontend/packages/color/src/types/index.ts b/frontend/packages/color/src/types/index.ts new file mode 100644 index 00000000..3a63bc86 --- /dev/null +++ b/frontend/packages/color/src/types/index.ts @@ -0,0 +1,58 @@ +/** + * the color palette number + * + * the main color number is 500 + */ +export type ColorPaletteNumber = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950; + +/** the color palette */ +export type ColorPalette = { + /** the color hex value */ + hex: string; + /** + * the color number + * + * - 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950 + */ + number: ColorPaletteNumber; +}; + +/** the color palette family */ +export type ColorPaletteFamily = { + /** the color palette family name */ + name: string; + /** the color palettes */ + palettes: ColorPalette[]; +}; + +/** the color palette with delta */ +export type ColorPaletteWithDelta = ColorPalette & { + delta: number; +}; + +/** the color palette family with nearest palette */ +export type ColorPaletteFamilyWithNearestPalette = ColorPaletteFamily & { + nearestPalette: ColorPaletteWithDelta; + nearestLightnessPalette: ColorPaletteWithDelta; +}; + +/** the color palette match */ +export type ColorPaletteMatch = ColorPaletteFamily & { + /** the color map of the palette */ + colorMap: Map; + /** + * the main color of the palette + * + * which number is 500 + */ + main: ColorPalette; + /** the match color of the palette */ + match: ColorPalette; +}; + +/** + * The color index of color palette + * + * From left to right, the color is from light to dark, 6 is main color + */ +export type ColorIndex = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11; diff --git a/frontend/packages/color/tsconfig.json b/frontend/packages/color/tsconfig.json new file mode 100644 index 00000000..5823ed54 --- /dev/null +++ b/frontend/packages/color/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/frontend/packages/hooks/package.json b/frontend/packages/hooks/package.json new file mode 100644 index 00000000..8c086e29 --- /dev/null +++ b/frontend/packages/hooks/package.json @@ -0,0 +1,15 @@ +{ + "name": "@sa/hooks", + "version": "0.0.0", + "exports": { + ".": "./src/index.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + }, + "dependencies": { + "@sa/axios": "workspace:*" + } +} diff --git a/frontend/packages/hooks/src/index.ts b/frontend/packages/hooks/src/index.ts new file mode 100644 index 00000000..a6a330bd --- /dev/null +++ b/frontend/packages/hooks/src/index.ts @@ -0,0 +1,11 @@ +import useBoolean from './use-boolean'; +import useLoading from './use-loading'; +import useCountDown from './use-count-down'; +import useContext from './use-context'; +import useSvgIconRender from './use-svg-icon-render'; +import useHookTable from './use-table'; + +export { useBoolean, useLoading, useCountDown, useContext, useSvgIconRender, useHookTable }; + +export * from './use-signal'; +export * from './use-table'; diff --git a/frontend/packages/hooks/src/use-boolean.ts b/frontend/packages/hooks/src/use-boolean.ts new file mode 100644 index 00000000..a60d45ad --- /dev/null +++ b/frontend/packages/hooks/src/use-boolean.ts @@ -0,0 +1,31 @@ +import { ref } from 'vue'; + +/** + * Boolean + * + * @param initValue Init value + */ +export default function useBoolean(initValue = false) { + const bool = ref(initValue); + + function setBool(value: boolean) { + bool.value = value; + } + function setTrue() { + setBool(true); + } + function setFalse() { + setBool(false); + } + function toggle() { + setBool(!bool.value); + } + + return { + bool, + setBool, + setTrue, + setFalse, + toggle + }; +} diff --git a/frontend/packages/hooks/src/use-context.ts b/frontend/packages/hooks/src/use-context.ts new file mode 100644 index 00000000..001d8aa6 --- /dev/null +++ b/frontend/packages/hooks/src/use-context.ts @@ -0,0 +1,96 @@ +import { inject, provide } from 'vue'; +import type { InjectionKey } from 'vue'; + +/** + * Use context + * + * @example + * ```ts + * // there are three vue files: A.vue, B.vue, C.vue, and A.vue is the parent component of B.vue and C.vue + * + * // context.ts + * import { ref } from 'vue'; + * import { useContext } from '@sa/hooks'; + * + * export const { setupStore, useStore } = useContext('demo', () => { + * const count = ref(0); + * + * function increment() { + * count.value++; + * } + * + * function decrement() { + * count.value--; + * } + * + * return { + * count, + * increment, + * decrement + * }; + * }) + * ``` // A.vue + * ```vue + * + * + * ``` // B.vue + * ```vue + * + * + * ```; + * + * // C.vue is same as B.vue + * + * @param contextName Context name + * @param fn Context function + */ +export default function useContext any>(contextName: string, fn: T) { + type Context = ReturnType; + + const { useProvide, useInject: useStore } = createContext(contextName); + + function setupStore(...args: Parameters) { + const context: Context = fn(...args); + return useProvide(context); + } + + return { + /** Setup store in the parent component */ + setupStore, + /** Use store in the child component */ + useStore + }; +} + +/** Create context */ +function createContext(contextName: string) { + const injectKey: InjectionKey = Symbol(contextName); + + function useProvide(context: T) { + provide(injectKey, context); + + return context; + } + + function useInject() { + return inject(injectKey) as T; + } + + return { + useProvide, + useInject + }; +} diff --git a/frontend/packages/hooks/src/use-count-down.ts b/frontend/packages/hooks/src/use-count-down.ts new file mode 100644 index 00000000..bfad064b --- /dev/null +++ b/frontend/packages/hooks/src/use-count-down.ts @@ -0,0 +1,49 @@ +import { computed, onScopeDispose, ref } from 'vue'; +import { useRafFn } from '@vueuse/core'; + +/** + * count down + * + * @param seconds - count down seconds + */ +export default function useCountDown(seconds: number) { + const FPS_PER_SECOND = 60; + + const fps = ref(0); + + const count = computed(() => Math.ceil(fps.value / FPS_PER_SECOND)); + + const isCounting = computed(() => fps.value > 0); + + const { pause, resume } = useRafFn( + () => { + if (fps.value > 0) { + fps.value -= 1; + } else { + pause(); + } + }, + { immediate: false } + ); + + function start(updateSeconds: number = seconds) { + fps.value = FPS_PER_SECOND * updateSeconds; + resume(); + } + + function stop() { + fps.value = 0; + pause(); + } + + onScopeDispose(() => { + pause(); + }); + + return { + count, + isCounting, + start, + stop + }; +} diff --git a/frontend/packages/hooks/src/use-loading.ts b/frontend/packages/hooks/src/use-loading.ts new file mode 100644 index 00000000..b8f89ad3 --- /dev/null +++ b/frontend/packages/hooks/src/use-loading.ts @@ -0,0 +1,16 @@ +import useBoolean from './use-boolean'; + +/** + * Loading + * + * @param initValue Init value + */ +export default function useLoading(initValue = false) { + const { bool: loading, setTrue: startLoading, setFalse: endLoading } = useBoolean(initValue); + + return { + loading, + startLoading, + endLoading + }; +} diff --git a/frontend/packages/hooks/src/use-request.ts b/frontend/packages/hooks/src/use-request.ts new file mode 100644 index 00000000..a0a40e63 --- /dev/null +++ b/frontend/packages/hooks/src/use-request.ts @@ -0,0 +1,79 @@ +import { ref } from 'vue'; +import type { Ref } from 'vue'; +import { createFlatRequest } from '@sa/axios'; +import type { + AxiosError, + CreateAxiosDefaults, + CustomAxiosRequestConfig, + MappedType, + RequestOption, + ResponseType +} from '@sa/axios'; +import useLoading from './use-loading'; + +export type HookRequestInstanceResponseSuccessData = { + data: Ref; + error: Ref; +}; + +export type HookRequestInstanceResponseFailData = { + data: Ref; + error: Ref>; +}; + +export type HookRequestInstanceResponseData = { + loading: Ref; +} & (HookRequestInstanceResponseSuccessData | HookRequestInstanceResponseFailData); + +export interface HookRequestInstance { + ( + config: CustomAxiosRequestConfig + ): HookRequestInstanceResponseData, ResponseData>; + cancelRequest: (requestId: string) => void; + cancelAllRequest: () => void; +} + +/** + * create a hook request instance + * + * @param axiosConfig + * @param options + */ +export default function createHookRequest( + axiosConfig?: CreateAxiosDefaults, + options?: Partial> +) { + const request = createFlatRequest(axiosConfig, options); + + const hookRequest: HookRequestInstance = function hookRequest( + config: CustomAxiosRequestConfig + ) { + const { loading, startLoading, endLoading } = useLoading(); + + const data = ref | null>(null) as Ref>; + const error = ref | null>(null) as Ref | null>; + + startLoading(); + + request(config).then(res => { + if (res.data) { + data.value = res.data; + } else { + error.value = res.error; + } + + endLoading(); + }); + + return { + loading, + data, + error + }; + } as HookRequestInstance; + + hookRequest.cancelRequest = request.cancelRequest; + hookRequest.cancelAllRequest = request.cancelAllRequest; + + return hookRequest; +} diff --git a/frontend/packages/hooks/src/use-signal.ts b/frontend/packages/hooks/src/use-signal.ts new file mode 100644 index 00000000..fa9d6265 --- /dev/null +++ b/frontend/packages/hooks/src/use-signal.ts @@ -0,0 +1,144 @@ +import { computed, ref, shallowRef, triggerRef } from 'vue'; +import type { + ComputedGetter, + DebuggerOptions, + Ref, + ShallowRef, + WritableComputedOptions, + WritableComputedRef +} from 'vue'; + +type Updater = (value: T) => T; +type Mutator = (value: T) => void; + +/** + * Signal is a reactive value that can be set, updated or mutated + * + * @example + * ```ts + * const count = useSignal(0); + * + * // `watchEffect` + * watchEffect(() => { + * console.log(count()); + * }); + * + * // watch + * watch(count, value => { + * console.log(value); + * }); + * + * // useComputed + * const double = useComputed(() => count() * 2); + * const writeableDouble = useComputed({ + * get: () => count() * 2, + * set: value => count.set(value / 2) + * }); + * ``` + */ +export interface Signal { + (): Readonly; + /** + * Set the value of the signal + * + * It recommend use `set` for primitive values + * + * @param value + */ + set(value: T): void; + /** + * Update the value of the signal using an updater function + * + * It recommend use `update` for non-primitive values, only the first level of the object will be reactive. + * + * @param updater + */ + update(updater: Updater): void; + /** + * Mutate the value of the signal using a mutator function + * + * this action will call `triggerRef`, so the value will be tracked on `watchEffect`. + * + * It recommend use `mutate` for non-primitive values, all levels of the object will be reactive. + * + * @param mutator + */ + mutate(mutator: Mutator): void; + /** + * Get the reference of the signal + * + * Sometimes it can be useful to make `v-model` work with the signal + * + * ```vue + * ; + * + * + * ``` + */ + getRef(): Readonly>>; +} + +export interface ReadonlySignal { + (): Readonly; +} + +export interface SignalOptions { + /** + * Whether to use `ref` to store the value + * + * @default false use `sharedRef` to store the value + */ + useRef?: boolean; +} + +export function useSignal(initialValue: T, options?: SignalOptions): Signal { + const { useRef } = options || {}; + + const state = useRef ? (ref(initialValue) as Ref) : shallowRef(initialValue); + + return createSignal(state); +} + +export function useComputed(getter: ComputedGetter, debugOptions?: DebuggerOptions): ReadonlySignal; +export function useComputed(options: WritableComputedOptions, debugOptions?: DebuggerOptions): Signal; +export function useComputed( + getterOrOptions: ComputedGetter | WritableComputedOptions, + debugOptions?: DebuggerOptions +) { + const isGetter = typeof getterOrOptions === 'function'; + + const computedValue = computed(getterOrOptions as any, debugOptions); + + if (isGetter) { + return () => computedValue.value as ReadonlySignal; + } + + return createSignal(computedValue); +} + +function createSignal(state: ShallowRef | WritableComputedRef): Signal { + const signal = () => state.value; + + signal.set = (value: T) => { + state.value = value; + }; + + signal.update = (updater: Updater) => { + state.value = updater(state.value); + }; + + signal.mutate = (mutator: Mutator) => { + mutator(state.value); + triggerRef(state); + }; + + signal.getRef = () => state as Readonly>>; + + return signal; +} diff --git a/frontend/packages/hooks/src/use-svg-icon-render.ts b/frontend/packages/hooks/src/use-svg-icon-render.ts new file mode 100644 index 00000000..7ed1fbe2 --- /dev/null +++ b/frontend/packages/hooks/src/use-svg-icon-render.ts @@ -0,0 +1,48 @@ +import { h } from 'vue'; +import type { Component } from 'vue'; + +/** + * Svg icon render hook + * + * @param SvgIcon Svg icon component + */ +export default function useSvgIconRender(SvgIcon: Component) { + interface IconConfig { + /** Local icon name */ + localIcon?: string; + /** Icon color */ + color?: string; + /** Icon size */ + fontSize?: number; + } + + type IconStyle = Partial>; + + /** + * Svg icon VNode + * + * @param config + */ + const SvgIconVNode = (config: IconConfig) => { + const { color, fontSize, localIcon } = config; + + const style: IconStyle = {}; + + if (color) { + style.color = color; + } + if (fontSize) { + style.fontSize = `${fontSize}px`; + } + + if (!localIcon) { + return undefined; + } + + return () => h(SvgIcon, { localIcon, style }); + }; + + return { + SvgIconVNode + }; +} diff --git a/frontend/packages/hooks/src/use-table.ts b/frontend/packages/hooks/src/use-table.ts new file mode 100644 index 00000000..6c2ae07c --- /dev/null +++ b/frontend/packages/hooks/src/use-table.ts @@ -0,0 +1,151 @@ +import { computed, reactive, ref } from 'vue'; +import type { Ref } from 'vue'; +import useBoolean from './use-boolean'; +import useLoading from './use-loading'; + +export type MaybePromise = T | Promise; + +export type ApiFn = (args: any) => Promise; + +export type TableColumnCheck = { + key: string; + title: string; + checked: boolean; +}; + +export type TableDataWithIndex = T & { index: number }; + +export type TransformedData = { + data: TableDataWithIndex[]; + pageNum: number; + pageSize: number; + total: number; +}; + +export type Transformer = (response: Response) => TransformedData; + +export type TableConfig = { + /** api function to get table data */ + apiFn: A; + /** api params */ + apiParams?: Parameters[0]; + /** transform api response to table data */ + transformer: Transformer>>; + /** columns factory */ + columns: () => C[]; + /** + * get column checks + * + * @param columns + */ + getColumnChecks: (columns: C[]) => TableColumnCheck[]; + /** + * get columns + * + * @param columns + */ + getColumns: (columns: C[], checks: TableColumnCheck[]) => C[]; + /** + * callback when response fetched + * + * @param transformed transformed data + */ + onFetched?: (transformed: TransformedData) => MaybePromise; + /** + * whether to get data immediately + * + * @default true + */ + immediate?: boolean; +}; + +export default function useHookTable(config: TableConfig) { + const { loading, startLoading, endLoading } = useLoading(); + const { bool: empty, setBool: setEmpty } = useBoolean(); + + const { apiFn, apiParams, transformer, immediate = true, getColumnChecks, getColumns } = config; + + const searchParams: NonNullable[0]> = reactive({ ...apiParams }); + + const allColumns = ref(config.columns()) as Ref; + + const data: Ref = ref([]); + + const columnChecks: Ref = ref(getColumnChecks(config.columns())); + + const columns = computed(() => getColumns(allColumns.value, columnChecks.value)); + + function reloadColumns() { + allColumns.value = config.columns(); + + const checkMap = new Map(columnChecks.value.map(col => [col.key, col.checked])); + + const defaultChecks = getColumnChecks(allColumns.value); + + columnChecks.value = defaultChecks.map(col => ({ + ...col, + checked: checkMap.get(col.key) ?? col.checked + })); + } + + async function getData() { + startLoading(); + + const formattedParams = formatSearchParams(searchParams); + + const response = await apiFn(formattedParams); + + const transformed = transformer(response as Awaited>); + + data.value = transformed.data; + + setEmpty(transformed.data.length === 0); + + await config.onFetched?.(transformed); + + endLoading(); + } + + function formatSearchParams(params: Record) { + const formattedParams: Record = {}; + + Object.entries(params).forEach(([key, value]) => { + if (value !== null && value !== undefined) { + formattedParams[key] = value; + } + }); + + return formattedParams; + } + + /** + * update search params + * + * @param params + */ + function updateSearchParams(params: Partial[0]>) { + Object.assign(searchParams, params); + } + + /** reset search params */ + function resetSearchParams() { + Object.assign(searchParams, apiParams); + } + + if (immediate) { + getData(); + } + + return { + loading, + empty, + data, + columns, + columnChecks, + reloadColumns, + getData, + searchParams, + updateSearchParams, + resetSearchParams + }; +} diff --git a/frontend/packages/hooks/tsconfig.json b/frontend/packages/hooks/tsconfig.json new file mode 100644 index 00000000..5823ed54 --- /dev/null +++ b/frontend/packages/hooks/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/frontend/packages/materials/package.json b/frontend/packages/materials/package.json new file mode 100644 index 00000000..9f5a4085 --- /dev/null +++ b/frontend/packages/materials/package.json @@ -0,0 +1,19 @@ +{ + "name": "@sa/materials", + "version": "0.0.0", + "exports": { + ".": "./src/index.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + }, + "dependencies": { + "@sa/utils": "workspace:*", + "simplebar-vue": "2.3.5" + }, + "devDependencies": { + "typed-css-modules": "0.9.1" + } +} diff --git a/frontend/packages/materials/src/index.ts b/frontend/packages/materials/src/index.ts new file mode 100644 index 00000000..f6ca01d2 --- /dev/null +++ b/frontend/packages/materials/src/index.ts @@ -0,0 +1,6 @@ +import AdminLayout, { LAYOUT_MAX_Z_INDEX, LAYOUT_SCROLL_EL_ID } from './libs/admin-layout'; +import PageTab from './libs/page-tab'; +import SimpleScrollbar from './libs/simple-scrollbar'; + +export { AdminLayout, LAYOUT_SCROLL_EL_ID, LAYOUT_MAX_Z_INDEX, PageTab, SimpleScrollbar }; +export * from './types'; diff --git a/frontend/packages/materials/src/libs/admin-layout/index.module.css b/frontend/packages/materials/src/libs/admin-layout/index.module.css new file mode 100644 index 00000000..e5c8ac86 --- /dev/null +++ b/frontend/packages/materials/src/libs/admin-layout/index.module.css @@ -0,0 +1,63 @@ +/* @type */ + +.layout-header, +.layout-header-placement { + height: var(--soy-header-height); +} + +.layout-header { + z-index: var(--soy-header-z-index); +} + +.layout-tab { + top: var(--soy-header-height); + height: var(--soy-tab-height); + z-index: var(--soy-tab-z-index); +} + +.layout-tab-placement { + height: var(--soy-tab-height); +} + +.layout-sider { + width: var(--soy-sider-width); + z-index: var(--soy-sider-z-index); +} + +.layout-mobile-sider { + z-index: var(--soy-sider-z-index); +} + +.layout-mobile-sider-mask { + z-index: var(--soy-mobile-sider-z-index); +} + +.layout-sider_collapsed { + width: var(--soy-sider-collapsed-width); + z-index: var(--soy-sider-z-index); +} + +.layout-footer, +.layout-footer-placement { + height: var(--soy-footer-height); +} + +.layout-footer { + z-index: var(--soy-footer-z-index); +} + +.left-gap { + padding-left: var(--soy-sider-width); +} + +.left-gap_collapsed { + padding-left: var(--soy-sider-collapsed-width); +} + +.sider-padding-top { + padding-top: var(--soy-header-height); +} + +.sider-padding-bottom { + padding-bottom: var(--soy-footer-height); +} diff --git a/frontend/packages/materials/src/libs/admin-layout/index.module.css.d.ts b/frontend/packages/materials/src/libs/admin-layout/index.module.css.d.ts new file mode 100644 index 00000000..c326c840 --- /dev/null +++ b/frontend/packages/materials/src/libs/admin-layout/index.module.css.d.ts @@ -0,0 +1,18 @@ +declare const styles: { + readonly 'layout-header': string; + readonly 'layout-header-placement': string; + readonly 'layout-tab': string; + readonly 'layout-tab-placement': string; + readonly 'layout-sider': string; + readonly 'layout-mobile-sider': string; + readonly 'layout-mobile-sider-mask': string; + readonly 'layout-sider_collapsed': string; + readonly 'layout-footer': string; + readonly 'layout-footer-placement': string; + readonly 'left-gap': string; + readonly 'left-gap_collapsed': string; + readonly 'sider-padding-top': string; + readonly 'sider-padding-bottom': string; +}; + +export default styles; diff --git a/frontend/packages/materials/src/libs/admin-layout/index.ts b/frontend/packages/materials/src/libs/admin-layout/index.ts new file mode 100644 index 00000000..06873626 --- /dev/null +++ b/frontend/packages/materials/src/libs/admin-layout/index.ts @@ -0,0 +1,5 @@ +import AdminLayout from './index.vue'; +import { LAYOUT_MAX_Z_INDEX, LAYOUT_SCROLL_EL_ID } from './shared'; + +export default AdminLayout; +export { LAYOUT_SCROLL_EL_ID, LAYOUT_MAX_Z_INDEX }; diff --git a/frontend/packages/materials/src/libs/admin-layout/index.vue b/frontend/packages/materials/src/libs/admin-layout/index.vue new file mode 100644 index 00000000..543f7dc0 --- /dev/null +++ b/frontend/packages/materials/src/libs/admin-layout/index.vue @@ -0,0 +1,237 @@ + + + + + diff --git a/frontend/packages/materials/src/libs/admin-layout/shared.ts b/frontend/packages/materials/src/libs/admin-layout/shared.ts new file mode 100644 index 00000000..940451ea --- /dev/null +++ b/frontend/packages/materials/src/libs/admin-layout/shared.ts @@ -0,0 +1,68 @@ +import type { AdminLayoutProps, LayoutCssVars, LayoutCssVarsProps } from '../../types'; + +/** The id of the scroll element of the layout */ +export const LAYOUT_SCROLL_EL_ID = '__SCROLL_EL_ID__'; + +/** The max z-index of the layout */ +export const LAYOUT_MAX_Z_INDEX = 100; + +/** + * Create layout css vars by css vars props + * + * @param props Css vars props + */ +function createLayoutCssVarsByCssVarsProps(props: LayoutCssVarsProps) { + const cssVars: LayoutCssVars = { + '--soy-header-height': `${props.headerHeight}px`, + '--soy-header-z-index': props.headerZIndex, + '--soy-tab-height': `${props.tabHeight}px`, + '--soy-tab-z-index': props.tabZIndex, + '--soy-sider-width': `${props.siderWidth}px`, + '--soy-sider-collapsed-width': `${props.siderCollapsedWidth}px`, + '--soy-sider-z-index': props.siderZIndex, + '--soy-mobile-sider-z-index': props.mobileSiderZIndex, + '--soy-footer-height': `${props.footerHeight}px`, + '--soy-footer-z-index': props.footerZIndex + }; + + return cssVars; +} + +/** + * Create layout css vars + * + * @param props + */ +export function createLayoutCssVars(props: AdminLayoutProps) { + const { + mode, + isMobile, + maxZIndex = LAYOUT_MAX_Z_INDEX, + headerHeight, + tabHeight, + siderWidth, + siderCollapsedWidth, + footerHeight + } = props; + + const headerZIndex = maxZIndex - 3; + const tabZIndex = maxZIndex - 5; + const siderZIndex = mode === 'vertical' || isMobile ? maxZIndex - 1 : maxZIndex - 4; + const mobileSiderZIndex = isMobile ? maxZIndex - 2 : 0; + const footerZIndex = maxZIndex - 5; + + const cssProps: LayoutCssVarsProps = { + headerHeight, + headerZIndex, + tabHeight, + tabZIndex, + siderWidth, + siderZIndex, + mobileSiderZIndex, + siderCollapsedWidth, + footerHeight, + footerZIndex + }; + + return createLayoutCssVarsByCssVarsProps(cssProps); +} diff --git a/frontend/packages/materials/src/libs/page-tab/button-tab.vue b/frontend/packages/materials/src/libs/page-tab/button-tab.vue new file mode 100644 index 00000000..0826e712 --- /dev/null +++ b/frontend/packages/materials/src/libs/page-tab/button-tab.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/frontend/packages/materials/src/libs/page-tab/chrome-tab-bg.vue b/frontend/packages/materials/src/libs/page-tab/chrome-tab-bg.vue new file mode 100644 index 00000000..151e03a2 --- /dev/null +++ b/frontend/packages/materials/src/libs/page-tab/chrome-tab-bg.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/frontend/packages/materials/src/libs/page-tab/chrome-tab.vue b/frontend/packages/materials/src/libs/page-tab/chrome-tab.vue new file mode 100644 index 00000000..e4509b06 --- /dev/null +++ b/frontend/packages/materials/src/libs/page-tab/chrome-tab.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/frontend/packages/materials/src/libs/page-tab/index.module.css b/frontend/packages/materials/src/libs/page-tab/index.module.css new file mode 100644 index 00000000..abf56a5f --- /dev/null +++ b/frontend/packages/materials/src/libs/page-tab/index.module.css @@ -0,0 +1,97 @@ +/* @type */ + +.button-tab { + border-color: #e5e7eb; +} + +.button-tab_dark { + border-color: #ffffff3d; +} + +.button-tab:hover { + color: var(--soy-primary-color); + border-color: var(--soy-primary-color-opacity3); +} + +.button-tab_active { + color: var(--soy-primary-color); + border-color: var(--soy-primary-color-opacity3); + background-color: var(--soy-primary-color-opacity1); +} + +.button-tab_active_dark { + background-color: var(--soy-primary-color-opacity2); +} + +.button-tab .svg-close:hover { + font-size: 12px; + color: #ffffff; + background-color: var(--soy-primary-color); +} + +.button-tab_dark .svg-close:hover { + color: #000000; +} + +.chrome-tab:hover { + z-index: 9; +} + +.chrome-tab_active { + z-index: 10; + color: var(--soy-primary-color); +} + +.chrome-tab__bg { + color: transparent; +} + +.chrome-tab_active .chrome-tab__bg { + color: var(--soy-primary-color1); +} + +.chrome-tab_active_dark .chrome-tab__bg { + color: var(--soy-primary-color2); +} + +.chrome-tab:hover .chrome-tab__bg { + color: #dee1e6; +} + +.chrome-tab_active:hover .chrome-tab__bg { + color: var(--soy-primary-color1); +} + +.chrome-tab_dark:hover .chrome-tab__bg { + color: #333333; +} + +.chrome-tab_active_dark:hover .chrome-tab__bg { + color: var(--soy-primary-color2); +} + +.chrome-tab .svg-close:hover { + font-size: 12px; + color: #ffffff; + background-color: #9ca3af; +} + +.chrome-tab_active .svg-close:hover { + background-color: var(--soy-primary-color); +} + +.chrome-tab_dark .svg-close:hover { + color: #000000; +} + +.chrome-tab_active .chrome-tab-divider { + opacity: 0; +} + +.chrome-tab:hover .chrome-tab-divider { + opacity: 0; +} + +.chrome-tab_dark .chrome-tab-divider { + background-color: rgba(255, 255, 255, 0.9); +} diff --git a/frontend/packages/materials/src/libs/page-tab/index.module.css.d.ts b/frontend/packages/materials/src/libs/page-tab/index.module.css.d.ts new file mode 100644 index 00000000..ab45c0a9 --- /dev/null +++ b/frontend/packages/materials/src/libs/page-tab/index.module.css.d.ts @@ -0,0 +1,15 @@ +declare const styles: { + readonly 'button-tab': string; + readonly 'button-tab_dark': string; + readonly 'button-tab_active': string; + readonly 'button-tab_active_dark': string; + readonly 'chrome-tab': string; + readonly 'chrome-tab_active': string; + readonly 'chrome-tab__bg': string; + readonly 'chrome-tab_active_dark': string; + readonly 'chrome-tab_dark': string; + readonly 'chrome-tab-divider': string; + readonly 'svg-close': string; +}; + +export default styles; diff --git a/frontend/packages/materials/src/libs/page-tab/index.ts b/frontend/packages/materials/src/libs/page-tab/index.ts new file mode 100644 index 00000000..b402adf8 --- /dev/null +++ b/frontend/packages/materials/src/libs/page-tab/index.ts @@ -0,0 +1,3 @@ +import PageTab from './index.vue'; + +export default PageTab; diff --git a/frontend/packages/materials/src/libs/page-tab/index.vue b/frontend/packages/materials/src/libs/page-tab/index.vue new file mode 100644 index 00000000..dd4c5d13 --- /dev/null +++ b/frontend/packages/materials/src/libs/page-tab/index.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/frontend/packages/materials/src/libs/page-tab/shared.ts b/frontend/packages/materials/src/libs/page-tab/shared.ts new file mode 100644 index 00000000..db71f5d9 --- /dev/null +++ b/frontend/packages/materials/src/libs/page-tab/shared.ts @@ -0,0 +1,31 @@ +import { addColorAlpha, transformColorWithOpacity } from '@sa/color'; +import type { PageTabCssVars, PageTabCssVarsProps } from '../../types'; + +/** The active color of the tab */ +export const ACTIVE_COLOR = '#1890ff'; + +function createCssVars(props: PageTabCssVarsProps) { + const cssVars: PageTabCssVars = { + '--soy-primary-color': props.primaryColor, + '--soy-primary-color1': props.primaryColor1, + '--soy-primary-color2': props.primaryColor2, + '--soy-primary-color-opacity1': props.primaryColorOpacity1, + '--soy-primary-color-opacity2': props.primaryColorOpacity2, + '--soy-primary-color-opacity3': props.primaryColorOpacity3 + }; + + return cssVars; +} + +export function createTabCssVars(primaryColor: string) { + const cssProps: PageTabCssVarsProps = { + primaryColor, + primaryColor1: transformColorWithOpacity(primaryColor, 0.1, '#ffffff'), + primaryColor2: transformColorWithOpacity(primaryColor, 0.3, '#000000'), + primaryColorOpacity1: addColorAlpha(primaryColor, 0.1), + primaryColorOpacity2: addColorAlpha(primaryColor, 0.15), + primaryColorOpacity3: addColorAlpha(primaryColor, 0.3) + }; + + return createCssVars(cssProps); +} diff --git a/frontend/packages/materials/src/libs/page-tab/svg-close.vue b/frontend/packages/materials/src/libs/page-tab/svg-close.vue new file mode 100644 index 00000000..26ba07aa --- /dev/null +++ b/frontend/packages/materials/src/libs/page-tab/svg-close.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/frontend/packages/materials/src/libs/simple-scrollbar/index.ts b/frontend/packages/materials/src/libs/simple-scrollbar/index.ts new file mode 100644 index 00000000..1453a06a --- /dev/null +++ b/frontend/packages/materials/src/libs/simple-scrollbar/index.ts @@ -0,0 +1,3 @@ +import SimpleScrollbar from './index.vue'; + +export default SimpleScrollbar; diff --git a/frontend/packages/materials/src/libs/simple-scrollbar/index.vue b/frontend/packages/materials/src/libs/simple-scrollbar/index.vue new file mode 100644 index 00000000..1e8076b1 --- /dev/null +++ b/frontend/packages/materials/src/libs/simple-scrollbar/index.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/frontend/packages/materials/src/types/index.ts b/frontend/packages/materials/src/types/index.ts new file mode 100644 index 00000000..bbcfb9d6 --- /dev/null +++ b/frontend/packages/materials/src/types/index.ts @@ -0,0 +1,294 @@ +/** Header config */ +interface AdminLayoutHeaderConfig { + /** + * Whether header is visible + * + * @default true + */ + headerVisible?: boolean; + /** + * Header class + * + * @default '' + */ + headerClass?: string; + /** + * Header height + * + * @default 56px + */ + headerHeight?: number; +} + +/** Tab config */ +interface AdminLayoutTabConfig { + /** + * Whether tab is visible + * + * @default true + */ + tabVisible?: boolean; + /** + * Tab class + * + * @default '' + */ + tabClass?: string; + /** + * Tab height + * + * @default 48px + */ + tabHeight?: number; +} + +/** Sider config */ +interface AdminLayoutSiderConfig { + /** + * Whether sider is visible + * + * @default true + */ + siderVisible?: boolean; + /** + * Sider class + * + * @default '' + */ + siderClass?: string; + /** + * Mobile sider class + * + * @default '' + */ + mobileSiderClass?: string; + /** + * Sider collapse status + * + * @default false + */ + siderCollapse?: boolean; + /** + * Sider width when collapse is false + * + * @default '220px' + */ + siderWidth?: number; + /** + * Sider width when collapse is true + * + * @default '64px' + */ + siderCollapsedWidth?: number; +} + +/** Content config */ +export interface AdminLayoutContentConfig { + /** + * Content class + * + * @default '' + */ + contentClass?: string; + /** + * Whether content is full the page + * + * If true, other elements will be hidden by `display: none` + */ + fullContent?: boolean; +} + +/** Footer config */ +export interface AdminLayoutFooterConfig { + /** + * Whether footer is visible + * + * @default true + */ + footerVisible?: boolean; + /** + * Whether footer is fixed + * + * @default true + */ + fixedFooter?: boolean; + /** + * Footer class + * + * @default '' + */ + footerClass?: string; + /** + * Footer height + * + * @default 48px + */ + footerHeight?: number; + /** + * Whether footer is on the right side + * + * When the layout is vertical, the footer is on the right side + */ + rightFooter?: boolean; +} + +/** + * Layout mode + * + * - Horizontal + * - Vertical + */ +export type LayoutMode = 'horizontal' | 'vertical'; + +/** + * The scroll mode when content overflow + * + * - Wrapper: the layout component's wrapper element has a scrollbar + * - Content: the layout component's content element has a scrollbar + * + * @default 'wrapper' + */ +export type LayoutScrollMode = 'wrapper' | 'content'; + +/** Admin layout props */ +export interface AdminLayoutProps + extends AdminLayoutHeaderConfig, + AdminLayoutTabConfig, + AdminLayoutSiderConfig, + AdminLayoutContentConfig, + AdminLayoutFooterConfig { + /** + * Layout mode + * + * - {@link LayoutMode} + */ + mode?: LayoutMode; + /** Is mobile layout */ + isMobile?: boolean; + /** + * Scroll mode + * + * - {@link ScrollMode} + */ + scrollMode?: LayoutScrollMode; + /** + * The id of the scroll element of the layout + * + * It can be used to get the corresponding Dom and scroll it + * + * @example + * use the default id by import + * ```ts + * import { adminLayoutScrollElId } from '@sa/vue-materials'; + * ``` + * + * @default + * ```ts + * const adminLayoutScrollElId = '__ADMIN_LAYOUT_SCROLL_EL_ID__' + * ``` + */ + scrollElId?: string; + /** The class of the scroll element */ + scrollElClass?: string; + /** The class of the scroll wrapper element */ + scrollWrapperClass?: string; + /** + * The common class of the layout + * + * Is can be used to configure the transition animation + * + * @default 'transition-all-300' + */ + commonClass?: string; + /** + * Whether fix the header and tab + * + * @default true + */ + fixedTop?: boolean; + /** + * The max z-index of the layout + * + * The z-index of Header,Tab,Sider and Footer will not exceed this value + */ + maxZIndex?: number; +} + +type Kebab = S extends Uncapitalize ? S : `-${Uncapitalize}`; + +type KebabCase = S extends `${infer Start}${infer End}` + ? `${Uncapitalize}${KebabCase>}` + : S; + +type Prefix = '--soy-'; + +export type LayoutCssVarsProps = Pick< + AdminLayoutProps, + 'headerHeight' | 'tabHeight' | 'siderWidth' | 'siderCollapsedWidth' | 'footerHeight' +> & { + headerZIndex?: number; + tabZIndex?: number; + siderZIndex?: number; + mobileSiderZIndex?: number; + footerZIndex?: number; +}; + +export type LayoutCssVars = { + [K in keyof LayoutCssVarsProps as `${Prefix}${KebabCase}`]: string | number; +}; + +/** + * The mode of the tab + * + * - Button: button style + * - Chrome: chrome style + * + * @default chrome + */ +export type PageTabMode = 'button' | 'chrome'; + +export interface PageTabProps { + /** Whether is dark mode */ + darkMode?: boolean; + /** + * The mode of the tab + * + * - {@link TabMode} + */ + mode?: PageTabMode; + /** + * The common class of the layout + * + * Is can be used to configure the transition animation + * + * @default 'transition-all-300' + */ + commonClass?: string; + /** The class of the button tab */ + buttonClass?: string; + /** The class of the chrome tab */ + chromeClass?: string; + /** Whether the tab is active */ + active?: boolean; + /** The color of the active tab */ + activeColor?: string; + /** + * Whether the tab is closable + * + * Show the close icon when true + */ + closable?: boolean; +} + +export type PageTabCssVarsProps = { + primaryColor: string; + primaryColor1: string; + primaryColor2: string; + primaryColorOpacity1: string; + primaryColorOpacity2: string; + primaryColorOpacity3: string; +}; + +export type PageTabCssVars = { + [K in keyof PageTabCssVarsProps as `${Prefix}${KebabCase}`]: string | number; +}; diff --git a/frontend/packages/materials/tsconfig.json b/frontend/packages/materials/tsconfig.json new file mode 100644 index 00000000..5823ed54 --- /dev/null +++ b/frontend/packages/materials/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/frontend/packages/ofetch/package.json b/frontend/packages/ofetch/package.json new file mode 100644 index 00000000..bf62af24 --- /dev/null +++ b/frontend/packages/ofetch/package.json @@ -0,0 +1,15 @@ +{ + "name": "@sa/fetch", + "version": "0.0.0", + "exports": { + ".": "./src/index.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + }, + "dependencies": { + "ofetch": "1.3.4" + } +} diff --git a/frontend/packages/ofetch/src/index.ts b/frontend/packages/ofetch/src/index.ts new file mode 100644 index 00000000..dce1ed44 --- /dev/null +++ b/frontend/packages/ofetch/src/index.ts @@ -0,0 +1,10 @@ +import { ofetch } from 'ofetch'; +import type { FetchOptions } from 'ofetch'; + +export function createRequest(options: FetchOptions) { + const request = ofetch.create(options); + + return request; +} + +export default createRequest; diff --git a/frontend/packages/ofetch/tsconfig.json b/frontend/packages/ofetch/tsconfig.json new file mode 100644 index 00000000..5823ed54 --- /dev/null +++ b/frontend/packages/ofetch/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/frontend/packages/scripts/bin.ts b/frontend/packages/scripts/bin.ts new file mode 100755 index 00000000..1a1817b3 --- /dev/null +++ b/frontend/packages/scripts/bin.ts @@ -0,0 +1,3 @@ +#!/usr/bin/env tsx + +import './src/index.ts'; diff --git a/frontend/packages/scripts/package.json b/frontend/packages/scripts/package.json new file mode 100644 index 00000000..dbf30b00 --- /dev/null +++ b/frontend/packages/scripts/package.json @@ -0,0 +1,27 @@ +{ + "name": "@dragon/scripts", + "version": "0.0.0", + "bin": { + "dragon-frontend": "./bin.ts" + }, + "exports": { + ".": "./src/index.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + }, + "devDependencies": { + "@soybeanjs/changelog": "0.3.24", + "bumpp": "9.4.1", + "c12": "1.11.1", + "cac": "6.7.14", + "consola": "3.2.3", + "enquirer": "2.4.1", + "execa": "9.3.0", + "kolorist": "1.8.0", + "npm-check-updates": "16.14.20", + "rimraf": "5.0.7" + } +} diff --git a/frontend/packages/scripts/src/commands/cleanup.ts b/frontend/packages/scripts/src/commands/cleanup.ts new file mode 100644 index 00000000..a9d39904 --- /dev/null +++ b/frontend/packages/scripts/src/commands/cleanup.ts @@ -0,0 +1,5 @@ +import { rimraf } from 'rimraf'; + +export async function cleanup(paths: string[]) { + await rimraf(paths, { glob: true }); +} diff --git a/frontend/packages/scripts/src/commands/index.ts b/frontend/packages/scripts/src/commands/index.ts new file mode 100644 index 00000000..0f9a76b4 --- /dev/null +++ b/frontend/packages/scripts/src/commands/index.ts @@ -0,0 +1,3 @@ +export * from './cleanup'; +export * from './update-pkg'; +export * from './router'; diff --git a/frontend/packages/scripts/src/commands/router.ts b/frontend/packages/scripts/src/commands/router.ts new file mode 100644 index 00000000..f4075894 --- /dev/null +++ b/frontend/packages/scripts/src/commands/router.ts @@ -0,0 +1,90 @@ +import process from 'node:process'; +import path from 'node:path'; +import { writeFile } from 'node:fs/promises'; +import { existsSync, mkdirSync } from 'node:fs'; +import { prompt } from 'enquirer'; +import { green, red } from 'kolorist'; + +interface PromptObject { + routeName: string; + addRouteParams: boolean; + routeParams: string; +} + +/** generate route */ +export async function generateRoute() { + const result = await prompt([ + { + name: 'routeName', + type: 'text', + message: 'please enter route name', + initial: 'demo-route_child' + }, + { + name: 'addRouteParams', + type: 'confirm', + message: 'add route params?', + initial: false + } + ]); + + if (result.addRouteParams) { + const answers = await prompt({ + name: 'routeParams', + type: 'text', + message: 'please enter route params', + initial: 'id' + }); + + Object.assign(result, answers); + } + + const PAGE_DIR_NAME_PATTERN = /^[\w-]+[0-9a-zA-Z]+$/; + + if (!PAGE_DIR_NAME_PATTERN.test(result.routeName)) { + throw new Error(`${red('route name is invalid, it only allow letters, numbers, "-" or "_"')}. +For example: +(1) one level route: ${green('demo-route')} +(2) two level route: ${green('demo-route_child')} +(3) multi level route: ${green('demo-route_child_child')} +(4) group route: ${green('_ignore_demo-route')}' +`); + } + + const PARAM_REG = /^\w+$/g; + + if (result.routeParams && !PARAM_REG.test(result.routeParams)) { + throw new Error(red('route params is invalid, it only allow letters, numbers or "_".')); + } + + const cwd = process.cwd(); + + const [dir, ...rest] = result.routeName.split('_') as string[]; + + let routeDir = path.join(cwd, 'src', 'views', dir); + + if (rest.length) { + routeDir = path.join(routeDir, rest.join('_')); + } + + if (!existsSync(routeDir)) { + mkdirSync(routeDir, { recursive: true }); + } else { + throw new Error(red('route already exists')); + } + + const fileName = result.routeParams ? `[${result.routeParams}].vue` : 'index.vue'; + + const vueTemplate = ` + + + + +`; + + const filePath = path.join(routeDir, fileName); + + await writeFile(filePath, vueTemplate); +} diff --git a/frontend/packages/scripts/src/commands/update-pkg.ts b/frontend/packages/scripts/src/commands/update-pkg.ts new file mode 100644 index 00000000..54d1132d --- /dev/null +++ b/frontend/packages/scripts/src/commands/update-pkg.ts @@ -0,0 +1,5 @@ +import { execCommand } from '../shared'; + +export async function updatePkg(args: string[] = ['--deep', '-u']) { + execCommand('npx', ['ncu', ...args], { stdio: 'inherit' }); +} diff --git a/frontend/packages/scripts/src/config/index.ts b/frontend/packages/scripts/src/config/index.ts new file mode 100644 index 00000000..4f84e3d2 --- /dev/null +++ b/frontend/packages/scripts/src/config/index.ts @@ -0,0 +1,55 @@ +import process from 'node:process'; +import { loadConfig } from 'c12'; +import type { CliOption } from '../types'; + +const defaultOptions: CliOption = { + cwd: process.cwd(), + cleanupDirs: [ + '**/dist', + '**/package-lock.json', + '**/yarn.lock', + '**/pnpm-lock.yaml', + '**/node_modules', + '!node_modules/**' + ], + gitCommitTypes: [ + ['feat', 'A new feature'], + ['fix', 'A bug fix'], + ['docs', 'Documentation only changes'], + ['style', 'Changes that do not affect the meaning of the code'], + ['refactor', 'A code change that neither fixes a bug nor adds a feature'], + ['perf', 'A code change that improves performance'], + ['optimize', 'A code change that optimizes code quality'], + ['test', 'Adding missing tests or correcting existing tests'], + ['build', 'Changes that affect the build system or external dependencies'], + ['ci', 'Changes to our CI configuration files and scripts'], + ['chore', "Other changes that don't modify src or test files"], + ['revert', 'Reverts a previous commit'] + ], + gitCommitScopes: [ + ['projects', 'project'], + ['packages', 'packages'], + ['components', 'components'], + ['hooks', 'hook functions'], + ['utils', 'utils functions'], + ['types', 'TS declaration'], + ['styles', 'style'], + ['deps', 'project dependencies'], + ['release', 'release project'], + ['other', 'other changes'] + ], + ncuCommandArgs: ['--deep', '-u'], + changelogOptions: {} +}; + +export async function loadCliOptions(overrides?: Partial, cwd = process.cwd()) { + const { config } = await loadConfig>({ + name: 'soybean', + defaults: defaultOptions, + overrides, + cwd, + packageJson: true + }); + + return config as CliOption; +} diff --git a/frontend/packages/scripts/src/index.ts b/frontend/packages/scripts/src/index.ts new file mode 100755 index 00000000..3b1f62bb --- /dev/null +++ b/frontend/packages/scripts/src/index.ts @@ -0,0 +1,65 @@ +import cac from 'cac'; +import { blue, lightGreen } from 'kolorist'; +import { version } from '../package.json'; +import { cleanup, generateRoute, updatePkg } from './commands'; +import { loadCliOptions } from './config'; + +type Command = 'cleanup' | 'update-pkg' | 'gen-route'; + +type CommandAction = (args?: A) => Promise | void; + +type CommandWithAction = Record }>; + +interface CommandArg { + /** Execute additional command after bumping and before git commit. Defaults to 'pnpm sa changelog' */ + execute?: string; + /** Indicates whether to push the git commit and tag. Defaults to true */ + push?: boolean; + /** Generate changelog by total tags */ + total?: boolean; + /** + * The glob pattern of dirs to cleanup + * + * If not set, it will use the default value + * + * Multiple values use "," to separate them + */ + cleanupDir?: string; +} + +export async function setupCli() { + const cliOptions = await loadCliOptions(); + + const cli = cac(blue('dragon-frontend')); + + cli.version(lightGreen(version)).help(); + + const commands: CommandWithAction = { + cleanup: { + desc: 'delete dirs: node_modules, dist, etc.', + action: async () => { + await cleanup(cliOptions.cleanupDirs); + } + }, + 'update-pkg': { + desc: 'update package.json dependencies versions', + action: async () => { + await updatePkg(cliOptions.ncuCommandArgs); + } + }, + 'gen-route': { + desc: 'generate route', + action: async () => { + await generateRoute(); + } + } + }; + + for (const [command, { desc, action }] of Object.entries(commands)) { + cli.command(command, lightGreen(desc)).action(action); + } + + cli.parse(); +} + +setupCli(); diff --git a/frontend/packages/scripts/src/shared/index.ts b/frontend/packages/scripts/src/shared/index.ts new file mode 100644 index 00000000..9b1763ff --- /dev/null +++ b/frontend/packages/scripts/src/shared/index.ts @@ -0,0 +1,7 @@ +import type { Options } from 'execa'; + +export async function execCommand(cmd: string, args: string[], options?: Options) { + const { execa } = await import('execa'); + const res = await execa(cmd, args, options); + return (res?.stdout as string)?.trim() || ''; +} diff --git a/frontend/packages/scripts/src/types/index.ts b/frontend/packages/scripts/src/types/index.ts new file mode 100644 index 00000000..598760ef --- /dev/null +++ b/frontend/packages/scripts/src/types/index.ts @@ -0,0 +1,33 @@ +import type { ChangelogOption } from '@soybeanjs/changelog'; + +export interface CliOption { + /** The project root directory */ + cwd: string; + /** + * Cleanup dirs + * + * Glob pattern syntax {@link https://github.com/isaacs/minimatch} + * + * @default + * ```json + * ["** /dist", "** /pnpm-lock.yaml", "** /node_modules", "!node_modules/**"] + * ``` + */ + cleanupDirs: string[]; + /** Git commit types */ + gitCommitTypes: [string, string][]; + /** Git commit scopes */ + gitCommitScopes: [string, string][]; + /** + * Npm-check-updates command args + * + * @default ['--deep', '-u'] + */ + ncuCommandArgs: string[]; + /** + * Options of generate changelog + * + * @link https://github.com/soybeanjs/changelog + */ + changelogOptions: Partial; +} diff --git a/frontend/packages/scripts/tsconfig.json b/frontend/packages/scripts/tsconfig.json new file mode 100644 index 00000000..67ab8a43 --- /dev/null +++ b/frontend/packages/scripts/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*", "typings/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/frontend/packages/uno-preset/package.json b/frontend/packages/uno-preset/package.json new file mode 100644 index 00000000..64f70cc6 --- /dev/null +++ b/frontend/packages/uno-preset/package.json @@ -0,0 +1,12 @@ +{ + "name": "@sa/uno-preset", + "version": "0.0.0", + "exports": { + ".": "./src/index.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + } +} diff --git a/frontend/packages/uno-preset/src/index.ts b/frontend/packages/uno-preset/src/index.ts new file mode 100644 index 00000000..6a1ae42e --- /dev/null +++ b/frontend/packages/uno-preset/src/index.ts @@ -0,0 +1,55 @@ +// @unocss-include + +import type { Preset } from '@unocss/core'; +import type { Theme } from '@unocss/preset-uno'; + +export function presetSoybeanAdmin(): Preset { + const preset: Preset = { + name: 'preset-soybean-admin', + shortcuts: [ + { + 'flex-center': 'flex justify-center items-center', + 'flex-x-center': 'flex justify-center', + 'flex-y-center': 'flex items-center', + 'flex-col': 'flex flex-col', + 'flex-col-center': 'flex-center flex-col', + 'flex-col-stretch': 'flex-col items-stretch', + 'i-flex-center': 'inline-flex justify-center items-center', + 'i-flex-x-center': 'inline-flex justify-center', + 'i-flex-y-center': 'inline-flex items-center', + 'i-flex-col': 'flex-col inline-flex', + 'i-flex-col-center': 'flex-col i-flex-center', + 'i-flex-col-stretch': 'i-flex-col items-stretch', + 'flex-1-hidden': 'flex-1 overflow-hidden' + }, + { + 'absolute-lt': 'absolute left-0 top-0', + 'absolute-lb': 'absolute left-0 bottom-0', + 'absolute-rt': 'absolute right-0 top-0', + 'absolute-rb': 'absolute right-0 bottom-0', + 'absolute-tl': 'absolute-lt', + 'absolute-tr': 'absolute-rt', + 'absolute-bl': 'absolute-lb', + 'absolute-br': 'absolute-rb', + 'absolute-center': 'absolute-lt flex-center size-full', + 'fixed-lt': 'fixed left-0 top-0', + 'fixed-lb': 'fixed left-0 bottom-0', + 'fixed-rt': 'fixed right-0 top-0', + 'fixed-rb': 'fixed right-0 bottom-0', + 'fixed-tl': 'fixed-lt', + 'fixed-tr': 'fixed-rt', + 'fixed-bl': 'fixed-lb', + 'fixed-br': 'fixed-rb', + 'fixed-center': 'fixed-lt flex-center size-full' + }, + { + 'nowrap-hidden': 'overflow-hidden whitespace-nowrap', + 'ellipsis-text': 'nowrap-hidden text-ellipsis' + } + ] + }; + + return preset; +} + +export default presetSoybeanAdmin; diff --git a/frontend/packages/uno-preset/tsconfig.json b/frontend/packages/uno-preset/tsconfig.json new file mode 100644 index 00000000..5823ed54 --- /dev/null +++ b/frontend/packages/uno-preset/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/frontend/packages/utils/package.json b/frontend/packages/utils/package.json new file mode 100644 index 00000000..7398cbe3 --- /dev/null +++ b/frontend/packages/utils/package.json @@ -0,0 +1,21 @@ +{ + "name": "@sa/utils", + "version": "0.0.0", + "exports": { + ".": "./src/index.ts" + }, + "typesVersions": { + "*": { + "*": ["./src/*"] + } + }, + "dependencies": { + "colord": "2.9.3", + "crypto-js": "4.2.0", + "localforage": "1.10.0", + "nanoid": "5.0.7" + }, + "devDependencies": { + "@types/crypto-js": "4.2.2" + } +} diff --git a/frontend/packages/utils/src/crypto.ts b/frontend/packages/utils/src/crypto.ts new file mode 100644 index 00000000..dc173c8e --- /dev/null +++ b/frontend/packages/utils/src/crypto.ts @@ -0,0 +1,27 @@ +import CryptoJS from 'crypto-js'; + +export class Crypto { + /** Secret */ + secret: string; + + constructor(secret: string) { + this.secret = secret; + } + + encrypt(data: T): string { + const dataString = JSON.stringify(data); + const encrypted = CryptoJS.AES.encrypt(dataString, this.secret); + return encrypted.toString(); + } + + decrypt(encrypted: string) { + const decrypted = CryptoJS.AES.decrypt(encrypted, this.secret); + const dataString = decrypted.toString(CryptoJS.enc.Utf8); + try { + return JSON.parse(dataString) as T; + } catch { + // avoid parse error + return null; + } + } +} diff --git a/frontend/packages/utils/src/index.ts b/frontend/packages/utils/src/index.ts new file mode 100644 index 00000000..98c5d245 --- /dev/null +++ b/frontend/packages/utils/src/index.ts @@ -0,0 +1,3 @@ +export * from './crypto'; +export * from './storage'; +export * from './nanoid'; diff --git a/frontend/packages/utils/src/nanoid.ts b/frontend/packages/utils/src/nanoid.ts new file mode 100644 index 00000000..5cc1d2e4 --- /dev/null +++ b/frontend/packages/utils/src/nanoid.ts @@ -0,0 +1,3 @@ +import { nanoid } from 'nanoid'; + +export { nanoid }; diff --git a/frontend/packages/utils/src/storage.ts b/frontend/packages/utils/src/storage.ts new file mode 100644 index 00000000..850562ab --- /dev/null +++ b/frontend/packages/utils/src/storage.ts @@ -0,0 +1,76 @@ +import localforage from 'localforage'; + +/** The storage type */ +export type StorageType = 'local' | 'session'; + +export function createStorage(type: StorageType, storagePrefix: string) { + const stg = type === 'session' ? window.sessionStorage : window.localStorage; + + const storage = { + /** + * Set session + * + * @param key Session key + * @param value Session value + */ + set(key: K, value: T[K]) { + const json = JSON.stringify(value); + + stg.setItem(`${storagePrefix}${key as string}`, json); + }, + /** + * Get session + * + * @param key Session key + */ + get(key: K): T[K] | null { + const json = stg.getItem(`${storagePrefix}${key as string}`); + if (json) { + let storageData: T[K] | null = null; + + try { + storageData = JSON.parse(json); + } catch {} + + if (storageData) { + return storageData as T[K]; + } + } + + stg.removeItem(`${storagePrefix}${key as string}`); + + return null; + }, + remove(key: keyof T) { + stg.removeItem(`${storagePrefix}${key as string}`); + }, + clear() { + stg.clear(); + } + }; + return storage; +} + +type LocalForage = Omit & { + getItem(key: K, callback?: (err: any, value: T[K] | null) => void): Promise; + + setItem(key: K, value: T[K], callback?: (err: any, value: T[K]) => void): Promise; + + removeItem(key: keyof T, callback?: (err: any) => void): Promise; +}; + +type LocalforageDriver = 'local' | 'indexedDB' | 'webSQL'; + +export function createLocalforage(driver: LocalforageDriver) { + const driverMap: Record = { + local: localforage.LOCALSTORAGE, + indexedDB: localforage.INDEXEDDB, + webSQL: localforage.WEBSQL + }; + + localforage.config({ + driver: driverMap[driver] + }); + + return localforage as LocalForage; +} diff --git a/frontend/packages/utils/tsconfig.json b/frontend/packages/utils/tsconfig.json new file mode 100644 index 00000000..5823ed54 --- /dev/null +++ b/frontend/packages/utils/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/frontend/pnpm-workspace.yaml b/frontend/pnpm-workspace.yaml new file mode 100644 index 00000000..dee51e92 --- /dev/null +++ b/frontend/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - "packages/*" diff --git a/docs/static/img/dragon_okinawa_icon.png b/frontend/public/img/dragon_okinawa_icon.png similarity index 100% rename from docs/static/img/dragon_okinawa_icon.png rename to frontend/public/img/dragon_okinawa_icon.png diff --git a/frontend/public/themes/aura-dark-purple/fonts/Inter-italic.var.woff2 b/frontend/public/themes/aura-dark-purple/fonts/Inter-italic.var.woff2 deleted file mode 100644 index b826d5af..00000000 Binary files a/frontend/public/themes/aura-dark-purple/fonts/Inter-italic.var.woff2 and /dev/null differ diff --git a/frontend/public/themes/aura-dark-purple/fonts/Inter-roman.var.woff2 b/frontend/public/themes/aura-dark-purple/fonts/Inter-roman.var.woff2 deleted file mode 100644 index 6a256a06..00000000 Binary files a/frontend/public/themes/aura-dark-purple/fonts/Inter-roman.var.woff2 and /dev/null differ diff --git a/frontend/public/themes/aura-dark-purple/theme.css b/frontend/public/themes/aura-dark-purple/theme.css deleted file mode 100644 index 2784f8b8..00000000 --- a/frontend/public/themes/aura-dark-purple/theme.css +++ /dev/null @@ -1,12113 +0,0 @@ -:root { - font-family: "Inter var", sans-serif; - font-feature-settings: "cv02", "cv03", "cv04", "cv11"; - font-variation-settings: normal; - --font-family: "Inter var", sans-serif; - --font-feature-settings: "cv02", "cv03", "cv04", "cv11"; - --text-color: #ffffff; - --text-color-secondary: #a1a1aa; - --primary-color: #a78bfa; - --primary-color-text: #020617; - --surface-0: #18181b; - --surface-50: #27272a; - --surface-100: #3f3f46; - --surface-200: #52525b; - --surface-300: #71717a; - --surface-400: #a1a1aa; - --surface-500: #d4d4d8; - --surface-600: #e4e4e7; - --surface-700: #f4f4f5; - --surface-800: #fafafa; - --surface-900: #ffffff; - --gray-0: #ffffff; - --gray-50: #fafafa; - --gray-100: #f4f4f5; - --gray-200: #e4e4e7; - --gray-300: #d4d4d8; - --gray-400: #a1a1aa; - --gray-500: #71717a; - --gray-600: #52525b; - --gray-700: #3f3f46; - --gray-800: #27272a; - --gray-900: #18181b; - --content-padding: 1.125rem; - --inline-spacing: 0.5rem; - --border-radius: 6px; - --surface-ground: #09090b; - --surface-section: #18181b; - --surface-card: #18181b; - --surface-overlay: #18181b; - --surface-border: #27272a; - --surface-hover: rgba(255, 255, 255, 0.03); - --focus-ring: none; - --maskbg: rgba(0, 0, 0, 0.4); - --highlight-bg: rgba(167, 139, 250, 0.16); - --highlight-text-color: rgba(255, 255, 255, 0.87); - --p-anchor-gutter: 2px; - color-scheme: dark; -} - -:root { - --p-focus-ring-color: var(--primary-color); -} - -@font-face { - font-family: "Inter var"; - font-weight: 100 900; - font-display: swap; - font-style: normal; - font-named-instance: "Regular"; - src: url("./fonts/Inter-roman.var.woff2?v=3.19") format("woff2"); -} -@font-face { - font-family: "Inter var"; - font-weight: 100 900; - font-display: swap; - font-style: italic; - font-named-instance: "Italic"; - src: url("./fonts/Inter-italic.var.woff2?v=3.19") format("woff2"); -} -:root { - --blue-50:#f5f9ff; - --blue-100:#d0e1fd; - --blue-200:#abc9fb; - --blue-300:#85b2f9; - --blue-400:#609af8; - --blue-500:#3b82f6; - --blue-600:#326fd1; - --blue-700:#295bac; - --blue-800:#204887; - --blue-900:#183462; - --green-50:#f4fcf7; - --green-100:#caf1d8; - --green-200:#a0e6ba; - --green-300:#76db9b; - --green-400:#4cd07d; - --green-500:#22c55e; - --green-600:#1da750; - --green-700:#188a42; - --green-800:#136c34; - --green-900:#0e4f26; - --yellow-50:#fefbf3; - --yellow-100:#faedc4; - --yellow-200:#f6de95; - --yellow-300:#f2d066; - --yellow-400:#eec137; - --yellow-500:#eab308; - --yellow-600:#c79807; - --yellow-700:#a47d06; - --yellow-800:#816204; - --yellow-900:#5e4803; - --cyan-50:#f3fbfd; - --cyan-100:#c3edf5; - --cyan-200:#94e0ed; - --cyan-300:#65d2e4; - --cyan-400:#35c4dc; - --cyan-500:#06b6d4; - --cyan-600:#059bb4; - --cyan-700:#047f94; - --cyan-800:#036475; - --cyan-900:#024955; - --pink-50:#fef6fa; - --pink-100:#fad3e7; - --pink-200:#f7b0d3; - --pink-300:#f38ec0; - --pink-400:#f06bac; - --pink-500:#ec4899; - --pink-600:#c93d82; - --pink-700:#a5326b; - --pink-800:#822854; - --pink-900:#5e1d3d; - --indigo-50:#f7f7fe; - --indigo-100:#dadafc; - --indigo-200:#bcbdf9; - --indigo-300:#9ea0f6; - --indigo-400:#8183f4; - --indigo-500:#6366f1; - --indigo-600:#5457cd; - --indigo-700:#4547a9; - --indigo-800:#363885; - --indigo-900:#282960; - --teal-50:#f3fbfb; - --teal-100:#c7eeea; - --teal-200:#9ae0d9; - --teal-300:#6dd3c8; - --teal-400:#41c5b7; - --teal-500:#14b8a6; - --teal-600:#119c8d; - --teal-700:#0e8174; - --teal-800:#0b655b; - --teal-900:#084a42; - --orange-50:#fff8f3; - --orange-100:#feddc7; - --orange-200:#fcc39b; - --orange-300:#fba86f; - --orange-400:#fa8e42; - --orange-500:#f97316; - --orange-600:#d46213; - --orange-700:#ae510f; - --orange-800:#893f0c; - --orange-900:#642e09; - --bluegray-50:#f7f8f9; - --bluegray-100:#dadee3; - --bluegray-200:#bcc3cd; - --bluegray-300:#9fa9b7; - --bluegray-400:#818ea1; - --bluegray-500:#64748b; - --bluegray-600:#556376; - --bluegray-700:#465161; - --bluegray-800:#37404c; - --bluegray-900:#282e38; - --purple-50:#fbf7ff; - --purple-100:#ead6fd; - --purple-200:#dab6fc; - --purple-300:#c996fa; - --purple-400:#b975f9; - --purple-500:#a855f7; - --purple-600:#8f48d2; - --purple-700:#763cad; - --purple-800:#5c2f88; - --purple-900:#432263; - --red-50:#fff5f5; - --red-100:#ffd0ce; - --red-200:#ffaca7; - --red-300:#ff8780; - --red-400:#ff6259; - --red-500:#ff3d32; - --red-600:#d9342b; - --red-700:#b32b23; - --red-800:#8c221c; - --red-900:#661814; - --primary-50:#fbf9ff; - --primary-100:#eae3fe; - --primary-200:#d9cdfd; - --primary-300:#c8b7fc; - --primary-400:#b8a1fb; - --primary-500:#a78bfa; - --primary-600:#8e76d5; - --primary-700:#7561af; - --primary-800:#5c4c8a; - --primary-900:#433864; -} - -.p-editor-container .p-editor-toolbar { - background: #18181b; - border-top-right-radius: 6px; - border-top-left-radius: 6px; -} -.p-editor-container .p-editor-toolbar.ql-snow { - border: 1px solid #3f3f46; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-stroke { - stroke: #a1a1aa; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-fill { - fill: #a1a1aa; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker .ql-picker-label { - border: 0 none; - color: #a1a1aa; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker .ql-picker-label:hover { - color: #ffffff; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker .ql-picker-label:hover .ql-stroke { - stroke: #ffffff; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker .ql-picker-label:hover .ql-fill { - fill: #ffffff; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label { - color: #ffffff; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke { - stroke: #ffffff; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill { - fill: #ffffff; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options { - background: #18181b; - border: 1px solid #3f3f46; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - border-radius: 6px; - padding: 0.25rem 0.25rem; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options .ql-picker-item { - color: #ffffff; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options .ql-picker-item:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded:not(.ql-icon-picker) .ql-picker-item { - padding: 0.5rem 0.75rem; -} -.p-editor-container .p-editor-content { - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; -} -.p-editor-container .p-editor-content.ql-snow { - border: 1px solid #3f3f46; -} -.p-editor-container .p-editor-content .ql-editor { - background: #09090b; - color: #ffffff; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; -} -.p-editor-container .ql-snow.ql-toolbar button:hover, -.p-editor-container .ql-snow.ql-toolbar button:focus { - color: #ffffff; -} -.p-editor-container .ql-snow.ql-toolbar button:hover .ql-stroke, -.p-editor-container .ql-snow.ql-toolbar button:focus .ql-stroke { - stroke: #ffffff; -} -.p-editor-container .ql-snow.ql-toolbar button:hover .ql-fill, -.p-editor-container .ql-snow.ql-toolbar button:focus .ql-fill { - fill: #ffffff; -} -.p-editor-container .ql-snow.ql-toolbar button.ql-active, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-label.ql-active, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-item.ql-selected { - color: #a78bfa; -} -.p-editor-container .ql-snow.ql-toolbar button.ql-active .ql-stroke, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke { - stroke: #a78bfa; -} -.p-editor-container .ql-snow.ql-toolbar button.ql-active .ql-fill, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill { - fill: #a78bfa; -} -.p-editor-container .ql-snow.ql-toolbar button.ql-active .ql-picker-label, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-picker-label, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-picker-label { - color: #a78bfa; -} - -@layer primevue { - .p-component, .p-component * { - box-sizing: border-box; - } - - .p-hidden-space { - visibility: hidden; - } - - .p-reset { - margin: 0; - padding: 0; - border: 0; - outline: 0; - text-decoration: none; - font-size: 100%; - list-style: none; - } - - .p-disabled, .p-disabled * { - cursor: default; - pointer-events: none; - user-select: none; - } - - .p-component-overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - } - - .p-unselectable-text { - user-select: none; - } - - .p-sr-only { - border: 0; - clip: rect(1px, 1px, 1px, 1px); - clip-path: inset(50%); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; - word-wrap: normal; - } - - .p-link { - text-align: left; - background-color: transparent; - margin: 0; - padding: 0; - border: none; - cursor: pointer; - user-select: none; - } - - .p-link:disabled { - cursor: default; - } - - /* Non vue overlay animations */ - .p-connected-overlay { - opacity: 0; - transform: scaleY(0.8); - transition: transform 0.12s cubic-bezier(0, 0, 0.2, 1), opacity 0.12s cubic-bezier(0, 0, 0.2, 1); - } - - .p-connected-overlay-visible { - opacity: 1; - transform: scaleY(1); - } - - .p-connected-overlay-hidden { - opacity: 0; - transform: scaleY(1); - transition: opacity 0.1s linear; - } - - /* Vue based overlay animations */ - .p-connected-overlay-enter-from { - opacity: 0; - transform: scaleY(0.8); - } - - .p-connected-overlay-leave-to { - opacity: 0; - } - - .p-connected-overlay-enter-active { - transition: transform 0.12s cubic-bezier(0, 0, 0.2, 1), opacity 0.12s cubic-bezier(0, 0, 0.2, 1); - } - - .p-connected-overlay-leave-active { - transition: opacity 0.1s linear; - } - - /* Toggleable Content */ - .p-toggleable-content-enter-from, -.p-toggleable-content-leave-to { - max-height: 0; - } - - .p-toggleable-content-enter-to, -.p-toggleable-content-leave-from { - max-height: 1000px; - } - - .p-toggleable-content-leave-active { - overflow: hidden; - transition: max-height 0.45s cubic-bezier(0, 1, 0, 1); - } - - .p-toggleable-content-enter-active { - overflow: hidden; - transition: max-height 1s ease-in-out; - } - - * { - box-sizing: border-box; - } - - .p-component { - font-family: var(--font-family); - font-feature-settings: var(--font-feature-settings, normal); - font-size: 1rem; - font-weight: normal; - } - - .p-component-overlay { - background-color: rgba(0, 0, 0, 0.4); - transition-duration: 0.2s; - } - - .p-disabled, .p-component:disabled { - opacity: 0.6; - } - - .p-error { - color: #fca5a5; - } - - .p-text-secondary { - color: #a1a1aa; - } - - .pi { - font-size: 1rem; - } - - .p-icon { - width: 1rem; - height: 1rem; - } - - .p-link { - font-family: var(--font-family); - font-feature-settings: var(--font-feature-settings, normal); - font-size: 1rem; - border-radius: 6px; - outline-color: transparent; - } - .p-link:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-component-overlay-enter { - animation: p-component-overlay-enter-animation 150ms forwards; - } - - .p-component-overlay-leave { - animation: p-component-overlay-leave-animation 150ms forwards; - } - - @keyframes p-component-overlay-enter-animation { - from { - background-color: transparent; - } - to { - background-color: var(--maskbg); - } - } - @keyframes p-component-overlay-leave-animation { - from { - background-color: var(--maskbg); - } - to { - background-color: transparent; - } - } - - .p-autocomplete { - display: inline-flex; - } - - .p-autocomplete-loader { - position: absolute; - top: 50%; - margin-top: -0.5rem; - } - - .p-autocomplete-dd .p-autocomplete-input { - flex: 1 1 auto; - width: 1%; - } - - .p-autocomplete-dd .p-autocomplete-input, -.p-autocomplete-dd .p-autocomplete-multiple-container { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - .p-autocomplete-dd .p-autocomplete-dropdown { - border-top-left-radius: 0; - border-bottom-left-radius: 0px; - } - - .p-autocomplete .p-autocomplete-panel { - min-width: 100%; - } - - .p-autocomplete-panel { - position: absolute; - overflow: auto; - top: 0; - left: 0; - } - - .p-autocomplete-items { - margin: 0; - padding: 0; - list-style-type: none; - } - - .p-autocomplete-item { - cursor: pointer; - white-space: nowrap; - position: relative; - overflow: hidden; - } - - .p-autocomplete-multiple-container { - margin: 0; - padding: 0; - list-style-type: none; - cursor: text; - overflow: hidden; - display: flex; - align-items: center; - flex-wrap: wrap; - } - - .p-autocomplete-token { - cursor: default; - display: inline-flex; - align-items: center; - flex: 0 0 auto; - } - - .p-autocomplete-token-icon { - cursor: pointer; - } - - .p-autocomplete-input-token { - flex: 1 1 auto; - display: inline-flex; - } - - .p-autocomplete-input-token input { - border: 0 none; - outline: 0 none; - background-color: transparent; - margin: 0; - padding: 0; - box-shadow: none; - border-radius: 0; - width: 100%; - } - - .p-fluid .p-autocomplete { - display: flex; - } - - .p-fluid .p-autocomplete-dd .p-autocomplete-input { - width: 1%; - } - - .p-autocomplete .p-autocomplete-loader { - right: 0.75rem; - } - .p-autocomplete.p-autocomplete-dd .p-autocomplete-loader { - right: 3.25rem; - } - .p-autocomplete:not(.p-disabled):hover .p-autocomplete-multiple-container { - border-color: #52525b; - } - .p-autocomplete:not(.p-disabled).p-focus .p-autocomplete-multiple-container { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #52525b; - } - .p-autocomplete .p-autocomplete-multiple-container { - padding: 0.25rem 0.75rem; - gap: 0.5rem; - outline-color: transparent; - } - .p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-input-token { - padding: 0.25rem 0; - } - .p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-input-token input { - font-family: var(--font-family); - font-feature-settings: var(--font-feature-settings, normal); - font-size: 1rem; - color: #ffffff; - padding: 0; - margin: 0; - } - .p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token { - padding: 0.25rem 0.75rem; - background: #3f3f46; - color: #ffffff; - border-radius: 16px; - } - .p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token .p-autocomplete-token-icon { - margin-left: 0.5rem; - } - .p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token.p-focus { - background: #3f3f46; - color: #ffffff; - } - .p-autocomplete.p-invalid.p-component > .p-inputtext { - border-color: #fca5a5; - } - - .p-autocomplete-panel { - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - border-radius: 6px; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-autocomplete-panel .p-autocomplete-items { - padding: 0.25rem 0.25rem; - } - .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item { - margin: 2px 0; - padding: 0.5rem 0.75rem; - border: 0 none; - color: #ffffff; - background: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item:first-child { - margin-top: 0; - } - .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item:last-child { - margin-bottom: 0; - } - .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item.p-highlight.p-focus { - background: rgba(167, 139, 250, 0.24); - } - .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item:not(.p-highlight):not(.p-disabled).p-focus { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item-group { - margin: 0; - padding: 0.5rem 0.75rem; - color: #71717a; - background: #18181b; - font-weight: 600; - } - - .p-calendar { - display: inline-flex; - max-width: 100%; - } - - .p-calendar .p-inputtext { - flex: 1 1 auto; - width: 1%; - } - - .p-calendar-w-btn .p-inputtext { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - .p-calendar-w-btn .p-datepicker-trigger { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - .p-calendar .p-datepicker-trigger-icon { - cursor: pointer; - } - - /* Fluid */ - .p-fluid .p-calendar { - display: flex; - } - - .p-fluid .p-calendar .p-inputtext { - width: 1%; - } - - /* Datepicker */ - .p-calendar .p-datepicker { - min-width: 100%; - } - - .p-datepicker { - width: auto; - } - - .p-datepicker-inline { - display: inline-block; - overflow-x: auto; - } - - /* Header */ - .p-datepicker-header { - display: flex; - align-items: center; - justify-content: space-between; - } - - .p-datepicker-header .p-datepicker-title { - margin: 0 auto; - } - - .p-datepicker-prev, -.p-datepicker-next { - cursor: pointer; - display: inline-flex; - justify-content: center; - align-items: center; - overflow: hidden; - position: relative; - } - - /* Multiple Month DatePicker */ - .p-datepicker-multiple-month .p-datepicker-group-container { - display: flex; - } - - .p-datepicker-multiple-month .p-datepicker-group-container .p-datepicker-group { - flex: 1 1 auto; - } - - /* DatePicker Table */ - .p-datepicker table { - width: 100%; - border-collapse: collapse; - } - - .p-datepicker td > span { - display: flex; - justify-content: center; - align-items: center; - cursor: pointer; - margin: 0 auto; - overflow: hidden; - position: relative; - } - - /* Month Picker */ - .p-monthpicker-month { - width: 33.3%; - display: inline-flex; - align-items: center; - justify-content: center; - cursor: pointer; - overflow: hidden; - position: relative; - } - - /* Year Picker */ - .p-yearpicker-year { - width: 50%; - display: inline-flex; - align-items: center; - justify-content: center; - cursor: pointer; - overflow: hidden; - position: relative; - } - - /* Button Bar */ - .p-datepicker-buttonbar { - display: flex; - justify-content: space-between; - align-items: center; - } - - /* Time Picker */ - .p-timepicker { - display: flex; - justify-content: center; - align-items: center; - } - - .p-timepicker button { - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - overflow: hidden; - position: relative; - } - - .p-timepicker > div { - display: flex; - align-items: center; - flex-direction: column; - } - - /* Touch UI */ - .p-datepicker-touch-ui, -.p-calendar .p-datepicker-touch-ui { - min-width: 80vw; - } - - .p-calendar.p-invalid.p-component > .p-inputtext { - border-color: #fca5a5; - } - .p-calendar:not(.p-calendar-disabled).p-focus > .p-inputtext { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #52525b; - } - - .p-datepicker { - padding: 0.75rem; - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - border-radius: 6px; - } - .p-datepicker:not(.p-datepicker-inline) { - background: #18181b; - border: 1px solid #3f3f46; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-datepicker:not(.p-datepicker-inline) .p-datepicker-header { - background: transparent; - } - .p-datepicker .p-datepicker-header { - padding: 0 0 0.5rem 0; - color: #ffffff; - background: transparent; - font-weight: 500; - margin: 0 0 0 0; - border-bottom: 1px solid #3f3f46; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-datepicker .p-datepicker-header .p-datepicker-prev, -.p-datepicker .p-datepicker-header .p-datepicker-next { - width: 1.75rem; - height: 1.75rem; - color: #a1a1aa; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-datepicker .p-datepicker-header .p-datepicker-prev:enabled:hover, -.p-datepicker .p-datepicker-header .p-datepicker-next:enabled:hover { - color: #ffffff; - border-color: transparent; - background: rgba(255, 255, 255, 0.03); - } - .p-datepicker .p-datepicker-header .p-datepicker-prev:focus-visible, -.p-datepicker .p-datepicker-header .p-datepicker-next:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-datepicker .p-datepicker-header .p-datepicker-title { - line-height: 1.75rem; - } - .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year, -.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month { - color: #ffffff; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - font-weight: 500; - padding: 0.25rem; - } - .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year:enabled:hover, -.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month:enabled:hover { - color: #a78bfa; - } - .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month { - margin-right: 0.5rem; - } - .p-datepicker table { - font-size: 1rem; - margin: 0.5rem 0 0 0; - } - .p-datepicker table th { - padding: 0.25rem; - } - .p-datepicker table th > span { - width: 2rem; - height: 2rem; - } - .p-datepicker table td { - padding: 0.25rem; - } - .p-datepicker table td > span { - width: 2rem; - height: 2rem; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border: 1px solid transparent; - outline-color: transparent; - } - .p-datepicker table td > span.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-datepicker table td > span:focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-datepicker table td.p-datepicker-today > span { - background: #3f3f46; - color: #ffffff; - border-color: transparent; - } - .p-datepicker table td.p-datepicker-today > span.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-datepicker .p-datepicker-buttonbar { - padding: 0.5rem 0 0 0; - border-top: 1px solid #3f3f46; - } - .p-datepicker .p-datepicker-buttonbar .p-button { - width: auto; - } - .p-datepicker .p-timepicker { - border-top: 1px solid #3f3f46; - padding: 0; - } - .p-datepicker .p-timepicker button { - width: 1.75rem; - height: 1.75rem; - color: #a1a1aa; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-datepicker .p-timepicker button:enabled:hover { - color: #ffffff; - border-color: transparent; - background: rgba(255, 255, 255, 0.03); - } - .p-datepicker .p-timepicker button:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-datepicker .p-timepicker button:last-child { - margin-top: 0.2em; - } - .p-datepicker .p-timepicker span { - font-size: 1rem; - } - .p-datepicker .p-timepicker > div { - padding: 0 0.5rem; - } - .p-datepicker.p-datepicker-timeonly .p-timepicker { - border-top: 0 none; - } - .p-datepicker .p-monthpicker { - margin: 0.5rem 0 0 0; - } - .p-datepicker .p-monthpicker .p-monthpicker-month { - padding: 0.25rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - } - .p-datepicker .p-monthpicker .p-monthpicker-month.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-datepicker .p-yearpicker { - margin: 0.5rem 0 0 0; - } - .p-datepicker .p-yearpicker .p-yearpicker-year { - padding: 0.25rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - } - .p-datepicker .p-yearpicker .p-yearpicker-year.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-datepicker.p-datepicker-multiple-month .p-datepicker-group { - border-left: 1px solid #3f3f46; - padding-right: 0.75rem; - padding-left: 0.75rem; - padding-top: 0; - padding-bottom: 0; - } - .p-datepicker.p-datepicker-multiple-month .p-datepicker-group:first-child { - padding-left: 0; - border-left: 0 none; - } - .p-datepicker.p-datepicker-multiple-month .p-datepicker-group:last-child { - padding-right: 0; - } - .p-datepicker.p-datepicker-mobile table th, -.p-datepicker.p-datepicker-mobile table td { - padding: 0.25rem; - } - .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled) { - outline-color: transparent; - } - .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); - } - .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled) { - outline-color: transparent; - } - .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - } - .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled) { - outline-color: transparent; - } - .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - } - .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-cascadeselect { - display: inline-flex; - cursor: pointer; - user-select: none; - } - - .p-cascadeselect-trigger { - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - } - - .p-cascadeselect-label { - display: block; - white-space: nowrap; - overflow: hidden; - flex: 1 1 auto; - width: 1%; - text-overflow: ellipsis; - cursor: pointer; - } - - .p-cascadeselect-label-empty { - overflow: hidden; - visibility: hidden; - } - - .p-cascadeselect .p-cascadeselect-panel { - min-width: 100%; - } - - .p-cascadeselect-item { - cursor: pointer; - font-weight: normal; - white-space: nowrap; - } - - .p-cascadeselect-item-content { - display: flex; - align-items: center; - overflow: hidden; - position: relative; - } - - .p-cascadeselect-group-icon { - margin-left: auto; - } - - .p-cascadeselect-items { - margin: 0; - padding: 0; - list-style-type: none; - min-width: 100%; - } - - .p-fluid .p-cascadeselect { - display: flex; - } - - .p-fluid .p-cascadeselect .p-cascadeselect-label { - width: 1%; - } - - .p-cascadeselect-sublist { - position: absolute; - min-width: 100%; - z-index: 1; - display: none; - } - - .p-cascadeselect-item-active { - overflow: visible; - } - - .p-cascadeselect-item-active > .p-cascadeselect-sublist { - display: block; - left: 100%; - top: 0; - } - - .p-cascadeselect-enter-from, -.p-cascadeselect-leave-active { - opacity: 0; - } - - .p-cascadeselect-enter-active { - transition: opacity 150ms; - } - - .p-cascadeselect { - background: #09090b; - border: 1px solid #3f3f46; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - outline-color: transparent; - } - .p-cascadeselect:not(.p-disabled):hover { - border-color: #52525b; - } - .p-cascadeselect:not(.p-disabled).p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #52525b; - } - .p-cascadeselect.p-variant-filled { - background-color: #27272a; - } - .p-cascadeselect.p-variant-filled:enabled:hover { - background-color: #27272a; - } - .p-cascadeselect.p-variant-filled:enabled:focus { - background-color: #27272a; - } - .p-cascadeselect .p-cascadeselect-label { - background: transparent; - border: 0 none; - padding: 0.5rem 0.75rem; - } - .p-cascadeselect .p-cascadeselect-label.p-placeholder { - color: #a1a1aa; - } - .p-cascadeselect .p-cascadeselect-label:enabled:focus { - outline: 0 none; - box-shadow: none; - } - .p-cascadeselect .p-cascadeselect-trigger { - background: transparent; - color: #a1a1aa; - width: 2.5rem; - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - } - .p-cascadeselect.p-invalid.p-component { - border-color: #fca5a5; - } - - .p-cascadeselect-panel { - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - border-radius: 6px; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-cascadeselect-panel .p-cascadeselect-items { - padding: 0.25rem 0.25rem; - } - .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item { - margin: 2px 0; - border: 0 none; - color: #ffffff; - background: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item:first-child { - margin-top: 0; - } - .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item:last-child { - margin-bottom: 0; - } - .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item.p-highlight.p-focus { - background: rgba(167, 139, 250, 0.24); - } - .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item:not(.p-highlight):not(.p-disabled).p-focus { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item .p-cascadeselect-item-content { - padding: 0.5rem 0.75rem; - } - .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item .p-cascadeselect-group-icon { - font-size: 0.875rem; - } - - .p-checkbox { - position: relative; - display: inline-flex; - user-select: none; - vertical-align: bottom; - } - - .p-checkbox-input { - cursor: pointer; - } - - .p-checkbox-box { - display: flex; - justify-content: center; - align-items: center; - } - - .p-checkbox { - width: 1.25rem; - height: 1.25rem; - } - .p-checkbox .p-checkbox-input { - appearance: none; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - padding: 0; - margin: 0; - opacity: 0; - z-index: 1; - outline: 0 none; - border: 1px solid #3f3f46; - border-radius: 6px; - } - .p-checkbox .p-checkbox-box { - border: 1px solid #3f3f46; - background: #09090b; - width: 1.25rem; - height: 1.25rem; - color: #ffffff; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-checkbox .p-checkbox-box .p-checkbox-icon { - transition-duration: 0.2s; - color: #020617; - font-size: 0.875rem; - } - .p-checkbox .p-checkbox-box .p-checkbox-icon.p-icon { - width: 0.875rem; - height: 0.875rem; - } - .p-checkbox.p-highlight .p-checkbox-box { - border-color: #a78bfa; - background: #a78bfa; - } - .p-checkbox:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box { - border-color: #52525b; - } - .p-checkbox:not(.p-disabled):has(.p-checkbox-input:hover).p-highlight .p-checkbox-box { - border-color: #c4b5fd; - background: #c4b5fd; - color: #020617; - } - .p-checkbox:not(.p-disabled):has(.p-checkbox-input:focus-visible) .p-checkbox-box { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #52525b; - } - .p-checkbox.p-invalid > .p-checkbox-box { - border-color: #fca5a5; - } - .p-checkbox.p-variant-filled .p-checkbox-box { - background-color: #27272a; - } - .p-checkbox.p-variant-filled.p-highlight .p-checkbox-box { - background: #a78bfa; - } - .p-checkbox.p-variant-filled:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box { - background-color: #27272a; - } - .p-checkbox.p-variant-filled:not(.p-disabled):has(.p-checkbox-input:hover).p-highlight .p-checkbox-box { - background: #c4b5fd; - } - - .p-input-filled .p-checkbox .p-checkbox-box { - background-color: #27272a; - } - .p-input-filled .p-checkbox.p-highlight .p-checkbox-box { - background: #a78bfa; - } - .p-input-filled .p-checkbox:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box { - background-color: #27272a; - } - .p-input-filled .p-checkbox:not(.p-disabled):has(.p-checkbox-input:hover).p-highlight .p-checkbox-box { - background: #c4b5fd; - } - - .p-chips { - display: inline-flex; - } - - .p-chips-multiple-container { - margin: 0; - padding: 0; - list-style-type: none; - cursor: text; - overflow: hidden; - display: flex; - align-items: center; - flex-wrap: wrap; - } - - .p-chips-token { - cursor: default; - display: inline-flex; - align-items: center; - flex: 0 0 auto; - } - - .p-chips-input-token { - flex: 1 1 auto; - display: inline-flex; - } - - .p-chips-token-icon { - cursor: pointer; - } - - .p-chips-input-token input { - border: 0 none; - outline: 0 none; - background-color: transparent; - margin: 0; - padding: 0; - box-shadow: none; - border-radius: 0; - width: 100%; - } - - .p-fluid .p-chips { - display: flex; - } - - .p-chips:not(.p-disabled):hover .p-chips-multiple-container { - border-color: #52525b; - } - .p-chips:not(.p-disabled).p-focus .p-chips-multiple-container { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #52525b; - } - .p-chips .p-chips-multiple-container { - padding: 0.25rem 0.75rem; - outline-color: transparent; - } - .p-chips .p-chips-multiple-container .p-chips-token { - padding: 0.25rem 0.75rem; - margin-right: 0.5rem; - background: #3f3f46; - color: #ffffff; - border-radius: 16px; - } - .p-chips .p-chips-multiple-container .p-chips-token.p-focus { - background: #3f3f46; - color: #ffffff; - } - .p-chips .p-chips-multiple-container .p-chips-token .p-chips-token-icon { - margin-left: 0.5rem; - } - .p-chips .p-chips-multiple-container .p-chips-input-token { - padding: 0.25rem 0; - } - .p-chips .p-chips-multiple-container .p-chips-input-token input { - font-family: var(--font-family); - font-feature-settings: var(--font-feature-settings, normal); - font-size: 1rem; - color: #ffffff; - padding: 0; - margin: 0; - } - .p-chips.p-invalid.p-component > .p-inputtext { - border-color: #fca5a5; - } - - .p-colorpicker-panel .p-colorpicker-color { - background: linear-gradient(to top, #000 0%, rgba(0, 0, 0, 0) 100%), linear-gradient(to right, #fff 0%, rgba(255, 255, 255, 0) 100%); - } - - .p-colorpicker-panel .p-colorpicker-hue { - background: linear-gradient(0deg, red 0, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, red); - } - - .p-colorpicker-preview { - width: 1.5rem; - height: 1.5rem; - } - - .p-colorpicker-panel { - background: #18181b; - border: 1px solid #3f3f46; - } - .p-colorpicker-panel .p-colorpicker-color-handle, -.p-colorpicker-panel .p-colorpicker-hue-handle { - border-color: #ffffff; - } - - .p-colorpicker-overlay-panel { - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - - .p-dropdown { - display: inline-flex; - cursor: pointer; - position: relative; - user-select: none; - } - - .p-dropdown-clear-icon { - position: absolute; - top: 50%; - margin-top: -0.5rem; - } - - .p-dropdown-trigger { - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - } - - .p-dropdown-label { - display: block; - white-space: nowrap; - overflow: hidden; - flex: 1 1 auto; - width: 1%; - text-overflow: ellipsis; - cursor: pointer; - } - - .p-dropdown-label-empty { - overflow: hidden; - opacity: 0; - } - - input.p-dropdown-label { - cursor: default; - } - - .p-dropdown .p-dropdown-panel { - min-width: 100%; - } - - .p-dropdown-panel { - position: absolute; - top: 0; - left: 0; - } - - .p-dropdown-items-wrapper { - overflow: auto; - } - - .p-dropdown-item { - cursor: pointer; - font-weight: normal; - white-space: nowrap; - position: relative; - overflow: hidden; - display: flex; - align-items: center; - } - - .p-dropdown-item-group { - cursor: auto; - } - - .p-dropdown-items { - margin: 0; - padding: 0; - list-style-type: none; - } - - .p-dropdown-filter { - width: 100%; - } - - .p-dropdown-filter-container { - position: relative; - } - - .p-dropdown-filter-icon { - position: absolute; - top: 50%; - margin-top: -0.5rem; - } - - .p-fluid .p-dropdown { - display: flex; - } - - .p-fluid .p-dropdown .p-dropdown-label { - width: 1%; - } - - .p-dropdown { - background: #09090b; - border: 1px solid #3f3f46; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - outline-color: transparent; - } - .p-dropdown:not(.p-disabled):hover { - border-color: #52525b; - } - .p-dropdown:not(.p-disabled).p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #52525b; - } - .p-dropdown.p-variant-filled { - background: #27272a; - } - .p-dropdown.p-variant-filled:not(.p-disabled):hover { - background-color: #27272a; - } - .p-dropdown.p-variant-filled:not(.p-disabled).p-focus { - background-color: #27272a; - } - .p-dropdown.p-variant-filled:not(.p-disabled).p-focus .p-inputtext { - background-color: transparent; - } - .p-dropdown.p-dropdown-clearable .p-dropdown-label { - padding-right: 1.75rem; - } - .p-dropdown .p-dropdown-label { - background: transparent; - border: 0 none; - } - .p-dropdown .p-dropdown-label.p-placeholder { - color: #a1a1aa; - } - .p-dropdown .p-dropdown-label:focus, .p-dropdown .p-dropdown-label:enabled:focus { - outline: 0 none; - box-shadow: none; - } - .p-dropdown .p-dropdown-trigger { - background: transparent; - color: #a1a1aa; - width: 2.5rem; - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - } - .p-dropdown .p-dropdown-clear-icon { - color: #a1a1aa; - right: 2.5rem; - } - .p-dropdown.p-invalid.p-component { - border-color: #fca5a5; - } - - .p-dropdown-panel { - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - border-radius: 6px; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-dropdown-panel .p-dropdown-header { - padding: 0.5rem 0.5rem 0 0.5rem; - border-bottom: 0 none; - color: #ffffff; - background: #18181b; - margin: 0 0 0 0; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-dropdown-panel .p-dropdown-header .p-dropdown-filter { - padding-right: 1.75rem; - margin-right: -1.75rem; - } - .p-dropdown-panel .p-dropdown-header .p-dropdown-filter-icon { - right: 0.75rem; - color: #a1a1aa; - } - .p-dropdown-panel .p-dropdown-items { - padding: 0.25rem 0.25rem; - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-item { - margin: 2px 0; - padding: 0.5rem 0.75rem; - border: 0 none; - color: #ffffff; - background: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-item:first-child { - margin-top: 0; - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-item:last-child { - margin-bottom: 0; - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight.p-focus { - background: rgba(167, 139, 250, 0.24); - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-item:not(.p-highlight):not(.p-disabled).p-focus { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-item .p-dropdown-check-icon { - position: relative; - margin-left: -0.5rem; - margin-right: 0.5rem; - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-item-group { - margin: 0; - padding: 0.5rem 0.75rem; - color: #71717a; - background: #18181b; - font-weight: 600; - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-empty-message { - padding: 0.5rem 0.75rem; - color: #ffffff; - background: transparent; - } - - .p-float-label { - display: block; - position: relative; - } - - .p-float-label label { - position: absolute; - pointer-events: none; - top: 50%; - margin-top: -0.5rem; - transition-property: all; - transition-timing-function: ease; - line-height: 1; - } - - .p-float-label:has(textarea) label { - top: 1rem; - } - - .p-float-label:has(input:focus) label, -.p-float-label:has(input.p-filled) label, -.p-float-label:has(input:-webkit-autofill) label, -.p-float-label:has(textarea:focus) label, -.p-float-label:has(textarea.p-filled) label, -.p-float-label:has(.p-inputwrapper-focus) label, -.p-float-label:has(.p-inputwrapper-filled) label { - top: -0.75rem; - font-size: 12px; - } - - .p-float-label .p-placeholder, -.p-float-label input::placeholder, -.p-float-label .p-inputtext::placeholder { - opacity: 0; - transition-property: all; - transition-timing-function: ease; - } - - .p-float-label .p-focus .p-placeholder, -.p-float-label input:focus::placeholder, -.p-float-label .p-inputtext:focus::placeholder { - opacity: 1; - transition-property: all; - transition-timing-function: ease; - } - - .p-icon-field { - position: relative; - } - - .p-icon-field > .p-input-icon { - position: absolute; - top: 50%; - margin-top: -0.5rem; - } - - .p-inputotp { - display: flex; - align-items: center; - gap: 0.5rem; - } - - .p-inputotp-input { - text-align: center; - width: 2.5rem; - } - - .p-inputgroup { - display: flex; - align-items: stretch; - width: 100%; - } - - .p-inputgroup-addon { - display: flex; - align-items: center; - justify-content: center; - } - - .p-inputgroup .p-float-label { - display: flex; - align-items: stretch; - width: 100%; - } - - .p-inputgroup .p-inputtext, -.p-fluid .p-inputgroup .p-inputtext, -.p-inputgroup .p-inputwrapper, -.p-fluid .p-inputgroup .p-input { - flex: 1 1 auto; - width: 1%; - } - - .p-inputgroup-addon { - background: #18181b; - color: #a1a1aa; - border-top: 1px solid #3f3f46; - border-left: 1px solid #3f3f46; - border-bottom: 1px solid #3f3f46; - padding: 0.5rem 0.75rem; - min-width: 2.5rem; - } - .p-inputgroup-addon:last-child { - border-right: 1px solid #3f3f46; - } - - .p-inputgroup > .p-component, -.p-inputgroup > .p-inputwrapper > .p-inputtext, -.p-inputgroup > .p-float-label > .p-component { - border-radius: 0; - margin: 0; - } - .p-inputgroup > .p-component + .p-inputgroup-addon, -.p-inputgroup > .p-inputwrapper > .p-inputtext + .p-inputgroup-addon, -.p-inputgroup > .p-float-label > .p-component + .p-inputgroup-addon { - border-left: 0 none; - } - .p-inputgroup > .p-component:focus, -.p-inputgroup > .p-inputwrapper > .p-inputtext:focus, -.p-inputgroup > .p-float-label > .p-component:focus { - z-index: 1; - } - .p-inputgroup > .p-component:focus ~ label, -.p-inputgroup > .p-inputwrapper > .p-inputtext:focus ~ label, -.p-inputgroup > .p-float-label > .p-component:focus ~ label { - z-index: 1; - } - - .p-inputgroup-addon:first-child, -.p-inputgroup button:first-child, -.p-inputgroup input:first-child, -.p-inputgroup > .p-inputwrapper:first-child, -.p-inputgroup > .p-inputwrapper:first-child > .p-inputtext { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px; - } - - .p-inputgroup .p-float-label:first-child input { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px; - } - - .p-inputgroup-addon:last-child, -.p-inputgroup button:last-child, -.p-inputgroup input:last-child, -.p-inputgroup > .p-inputwrapper:last-child, -.p-inputgroup > .p-inputwrapper:last-child > .p-inputtext { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - } - - .p-inputgroup .p-float-label:last-child input { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - } - - .p-fluid .p-inputgroup .p-button { - width: auto; - } - .p-fluid .p-inputgroup .p-button.p-button-icon-only { - width: 2.5rem; - } - - .p-fluid .p-icon-field-left, -.p-fluid .p-icon-field-right { - width: 100%; - } - - .p-icon-field-left > .p-input-icon:first-of-type { - left: 0.75rem; - color: #a1a1aa; - } - - .p-icon-field-right > .p-input-icon:last-of-type { - right: 0.75rem; - color: #a1a1aa; - } - - .p-inputnumber { - display: inline-flex; - } - - .p-inputnumber-button { - display: flex; - align-items: center; - justify-content: center; - flex: 0 0 auto; - } - - .p-inputnumber-buttons-stacked .p-button.p-inputnumber-button .p-button-label, -.p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button .p-button-label { - display: none; - } - - .p-inputnumber-buttons-stacked .p-button.p-inputnumber-button-up { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - padding: 0; - } - - .p-inputnumber-buttons-stacked .p-inputnumber-input { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - .p-inputnumber-buttons-stacked .p-button.p-inputnumber-button-down { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-bottom-left-radius: 0; - padding: 0; - } - - .p-inputnumber-buttons-stacked .p-inputnumber-button-group { - display: flex; - flex-direction: column; - } - - .p-inputnumber-buttons-stacked .p-inputnumber-button-group .p-button.p-inputnumber-button { - flex: 1 1 auto; - } - - .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up { - order: 3; - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - .p-inputnumber-buttons-horizontal .p-inputnumber-input { - order: 2; - border-radius: 0; - } - - .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down { - order: 1; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - .p-inputnumber-buttons-vertical { - flex-direction: column; - } - - .p-inputnumber-buttons-vertical .p-button.p-inputnumber-button-up { - order: 1; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - width: 100%; - } - - .p-inputnumber-buttons-vertical .p-inputnumber-input { - order: 2; - border-radius: 0; - text-align: center; - } - - .p-inputnumber-buttons-vertical .p-button.p-inputnumber-button-down { - order: 3; - border-top-left-radius: 0; - border-top-right-radius: 0; - width: 100%; - } - - .p-inputnumber-input { - flex: 1 1 auto; - } - - .p-fluid .p-inputnumber { - width: 100%; - } - - .p-fluid .p-inputnumber .p-inputnumber-input { - width: 1%; - } - - .p-fluid .p-inputnumber-buttons-vertical .p-inputnumber-input { - width: 100%; - } - - .p-inputnumber.p-invalid.p-component > .p-inputtext { - border-color: #fca5a5; - } - .p-inputnumber.p-variant-filled > .p-inputnumber-input { - background-color: #27272a; - } - .p-inputnumber.p-variant-filled > .p-inputnumber-input:enabled:hover { - background-color: #27272a; - } - .p-inputnumber.p-variant-filled > .p-inputnumber-input:enabled:focus { - background-color: #27272a; - } - - .p-inputswitch { - display: inline-block; - } - - .p-inputswitch-input { - cursor: pointer; - } - - .p-inputswitch-slider { - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - border: 1px solid transparent; - } - - .p-inputswitch-slider:before { - position: absolute; - content: ""; - top: 50%; - } - - .p-inputswitch { - width: 2.5rem; - height: 1.5rem; - } - .p-inputswitch .p-inputswitch-input { - appearance: none; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - padding: 0; - margin: 0; - opacity: 0; - z-index: 1; - outline: 0 none; - border-radius: 30px; - } - .p-inputswitch .p-inputswitch-slider { - background: #27272a; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 30px; - outline-color: transparent; - } - .p-inputswitch .p-inputswitch-slider:before { - background: #a1a1aa; - width: 1rem; - height: 1rem; - left: 0.25rem; - margin-top: -0.5rem; - border-radius: 50%; - transition-duration: 0.2s; - } - .p-inputswitch.p-highlight .p-inputswitch-slider { - background: #a78bfa; - } - .p-inputswitch.p-highlight .p-inputswitch-slider:before { - background: #020617; - transform: translateX(1rem); - } - .p-inputswitch:not(.p-disabled):has(.p-inputswitch-input:hover) .p-inputswitch-slider { - background: #27272a; - } - .p-inputswitch:not(.p-disabled):has(.p-inputswitch-input:hover).p-highlight .p-inputswitch-slider { - background: #c4b5fd; - } - .p-inputswitch:not(.p-disabled):has(.p-inputswitch-input:focus-visible) .p-inputswitch-slider { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-inputswitch.p-invalid > .p-inputswitch-slider { - border-color: #fca5a5; - } - - .p-fluid .p-inputtext { - width: 100%; - } - - .p-inputtext { - font-family: var(--font-family); - font-feature-settings: var(--font-feature-settings, normal); - font-size: 1rem; - color: #ffffff; - background: #09090b; - padding: 0.5rem 0.75rem; - border: 1px solid #3f3f46; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - appearance: none; - border-radius: 6px; - outline-color: transparent; - } - .p-inputtext:enabled:hover { - border-color: #52525b; - } - .p-inputtext:enabled:focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #52525b; - } - .p-inputtext.p-invalid.p-component { - border-color: #fca5a5; - } - .p-inputtext.p-variant-filled { - background-color: #27272a; - } - .p-inputtext.p-variant-filled:enabled:hover { - background-color: #27272a; - } - .p-inputtext.p-variant-filled:enabled:focus { - background-color: #27272a; - } - .p-inputtext.p-inputtext-sm { - font-size: 0.875rem; - padding: 0.4375rem 0.65625rem; - } - .p-inputtext.p-inputtext-lg { - font-size: 1.25rem; - padding: 0.625rem 0.9375rem; - } - - .p-float-label > label { - left: 0.75rem; - color: #a1a1aa; - transition-duration: 0.2s; - } - - .p-float-label > .p-invalid + label { - color: #fca5a5; - } - - .p-icon-field-left > .p-inputtext { - padding-left: 2.5rem; - } - - .p-icon-field-left.p-float-label > label { - left: 2.5rem; - } - - .p-icon-field-right > .p-inputtext { - padding-right: 2.5rem; - } - - ::-webkit-input-placeholder { - color: #a1a1aa; - } - - :-moz-placeholder { - color: #a1a1aa; - } - - ::-moz-placeholder { - color: #a1a1aa; - } - - :-ms-input-placeholder { - color: #a1a1aa; - } - - .p-input-filled .p-inputtext { - background-color: #27272a; - } - .p-input-filled .p-inputtext:enabled:hover { - background-color: #27272a; - } - .p-input-filled .p-inputtext:enabled:focus { - background-color: #27272a; - } - - .p-inputtext-sm .p-inputtext { - font-size: 0.875rem; - padding: 0.4375rem 0.65625rem; - } - - .p-inputtext-lg .p-inputtext { - font-size: 1.25rem; - padding: 0.625rem 0.9375rem; - } - - .p-knob-range { - fill: none; - transition: stroke 0.1s ease-in; - } - - .p-knob-value { - animation-name: dash-frame; - animation-fill-mode: forwards; - fill: none; - } - - .p-knob-text { - font-size: 1.3rem; - text-align: center; - } - - @keyframes dash-frame { - 100% { - stroke-dashoffset: 0; - } - } - .p-listbox-list-wrapper { - overflow: auto; - } - - .p-listbox-list { - list-style-type: none; - margin: 0; - padding: 0; - } - - .p-listbox-item { - cursor: pointer; - position: relative; - overflow: hidden; - } - - .p-listbox-item-group { - cursor: auto; - } - - .p-listbox-filter-container { - position: relative; - } - - .p-listbox-filter-icon { - position: absolute; - top: 50%; - margin-top: -0.5rem; - } - - .p-listbox-filter { - width: 100%; - } - - .p-listbox { - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-listbox .p-listbox-header { - padding: 0.5rem 0.5rem 0 0.5rem; - border-bottom: 0 none; - color: #ffffff; - background: #18181b; - margin: 0 0 0 0; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-listbox .p-listbox-header .p-listbox-filter { - padding-right: 1.75rem; - } - .p-listbox .p-listbox-header .p-listbox-filter-icon { - right: 0.75rem; - color: #a1a1aa; - } - .p-listbox .p-listbox-list { - padding: 0.25rem 0.25rem; - outline: 0 none; - } - .p-listbox .p-listbox-list .p-listbox-item { - margin: 2px 0; - padding: 0.5rem 0.75rem; - border: 0 none; - color: #ffffff; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-listbox .p-listbox-list .p-listbox-item:first-child { - margin-top: 0; - } - .p-listbox .p-listbox-list .p-listbox-item:last-child { - margin-bottom: 0; - } - .p-listbox .p-listbox-list .p-listbox-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-listbox .p-listbox-list .p-listbox-item-group { - margin: 0; - padding: 0.5rem 0.75rem; - color: #71717a; - background: #18181b; - font-weight: 600; - } - .p-listbox .p-listbox-list .p-listbox-empty-message { - padding: 0.5rem 0.75rem; - color: #ffffff; - background: transparent; - } - .p-listbox:not(.p-disabled) .p-listbox-item.p-highlight.p-focus { - background: rgba(167, 139, 250, 0.24); - } - .p-listbox:not(.p-disabled) .p-listbox-item:not(.p-highlight):not(.p-disabled).p-focus { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-listbox:not(.p-disabled) .p-listbox-item:not(.p-highlight):not(.p-disabled):hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-listbox:not(.p-disabled) .p-listbox-item:not(.p-highlight):not(.p-disabled):hover.p-focus { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-listbox.p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #52525b; - } - .p-listbox.p-invalid { - border-color: #fca5a5; - } - - .p-multiselect { - display: inline-flex; - cursor: pointer; - user-select: none; - } - - .p-multiselect-trigger { - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - } - - .p-multiselect-label-container { - overflow: hidden; - flex: 1 1 auto; - cursor: pointer; - } - - .p-multiselect-label { - display: block; - white-space: nowrap; - cursor: pointer; - overflow: hidden; - text-overflow: ellipsis; - } - - .p-multiselect-label-empty { - overflow: hidden; - visibility: hidden; - } - - .p-multiselect-token { - cursor: default; - display: inline-flex; - align-items: center; - flex: 0 0 auto; - } - - .p-multiselect-token-icon { - cursor: pointer; - } - - .p-multiselect .p-multiselect-panel { - min-width: 100%; - } - - .p-multiselect-items-wrapper { - overflow: auto; - } - - .p-multiselect-items { - margin: 0; - padding: 0; - list-style-type: none; - } - - .p-multiselect-item { - cursor: pointer; - display: flex; - align-items: center; - font-weight: normal; - white-space: nowrap; - position: relative; - overflow: hidden; - } - - .p-multiselect-item-group { - cursor: auto; - } - - .p-multiselect-header { - display: flex; - align-items: center; - justify-content: space-between; - } - - .p-multiselect-filter-container { - position: relative; - flex: 1 1 auto; - } - - .p-multiselect-filter-icon { - position: absolute; - top: 50%; - margin-top: -0.5rem; - } - - .p-multiselect-filter-container .p-inputtext { - width: 100%; - } - - .p-multiselect-close { - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - overflow: hidden; - position: relative; - margin-left: auto; - } - - .p-fluid .p-multiselect { - display: flex; - } - - .p-multiselect { - background: #09090b; - border: 1px solid #3f3f46; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - outline-color: transparent; - } - .p-multiselect:not(.p-disabled):hover { - border-color: #52525b; - } - .p-multiselect:not(.p-disabled).p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #52525b; - } - .p-multiselect.p-variant-filled { - background: #27272a; - } - .p-multiselect.p-variant-filled:not(.p-disabled):hover { - background-color: #27272a; - } - .p-multiselect.p-variant-filled:not(.p-disabled).p-focus { - background-color: #27272a; - } - .p-multiselect .p-multiselect-label { - padding: 0.5rem 0.75rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-multiselect .p-multiselect-label.p-placeholder { - color: #a1a1aa; - } - .p-multiselect.p-multiselect-chip .p-multiselect-token { - padding: 0.25rem 0.75rem; - margin-right: 0.5rem; - background: #3f3f46; - color: #ffffff; - border-radius: 16px; - } - .p-multiselect.p-multiselect-chip .p-multiselect-token .p-multiselect-token-icon { - margin-left: 0.5rem; - } - .p-multiselect .p-multiselect-trigger { - background: transparent; - color: #a1a1aa; - width: 2.5rem; - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - } - .p-multiselect.p-invalid.p-component { - border-color: #fca5a5; - } - - .p-inputwrapper-filled.p-multiselect.p-multiselect-chip .p-multiselect-label { - padding: 0.25rem 0.75rem; - } - - .p-multiselect-panel { - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - border-radius: 6px; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-multiselect-panel .p-multiselect-header { - padding: 0.5rem 0.5rem 0 0.5rem; - border-bottom: 0 none; - color: #ffffff; - background: #18181b; - margin: 0 0 0 0; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext { - padding-right: 1.75rem; - } - .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-multiselect-filter-icon { - right: 0.75rem; - color: #a1a1aa; - } - .p-multiselect-panel .p-multiselect-header .p-checkbox { - margin-right: 0.5rem; - } - .p-multiselect-panel .p-multiselect-header .p-multiselect-close { - margin-left: 0.5rem; - width: 1.75rem; - height: 1.75rem; - color: #a1a1aa; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-multiselect-panel .p-multiselect-header .p-multiselect-close:enabled:hover { - color: #ffffff; - border-color: transparent; - background: rgba(255, 255, 255, 0.03); - } - .p-multiselect-panel .p-multiselect-header .p-multiselect-close:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-multiselect-panel .p-multiselect-items { - padding: 0.25rem 0.25rem; - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-item { - margin: 2px 0; - padding: 0.5rem 0.75rem; - border: 0 none; - color: #ffffff; - background: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-item:first-child { - margin-top: 0; - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-item:last-child { - margin-bottom: 0; - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-item.p-highlight.p-focus { - background: rgba(167, 139, 250, 0.24); - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-item:not(.p-highlight):not(.p-disabled).p-focus { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-item .p-checkbox { - margin-right: 0.5rem; - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-item-group { - margin: 0; - padding: 0.5rem 0.75rem; - color: #71717a; - background: #18181b; - font-weight: 600; - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-empty-message { - padding: 0.5rem 0.75rem; - color: #ffffff; - background: transparent; - } - - .p-password { - display: inline-flex; - } - - .p-password .p-password-panel { - min-width: 100%; - } - - .p-password-meter { - height: 10px; - } - - .p-password-strength { - height: 100%; - width: 0; - transition: width 1s ease-in-out; - } - - .p-fluid .p-password { - display: flex; - } - - .p-password-input::-ms-reveal, -.p-password-input::-ms-clear { - display: none; - } - - .p-password.p-invalid.p-component > .p-inputtext { - border-color: #fca5a5; - } - - .p-password-panel { - padding: 0 1.125rem 1.125rem 1.125rem; - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - border-radius: 6px; - } - .p-password-panel .p-password-meter { - margin-bottom: 0.5rem; - background: #3f3f46; - } - .p-password-panel .p-password-meter .p-password-strength.weak { - background: #f87171; - } - .p-password-panel .p-password-meter .p-password-strength.medium { - background: #fbbf24; - } - .p-password-panel .p-password-meter .p-password-strength.strong { - background: #4ade80; - } - - .p-radiobutton { - position: relative; - display: inline-flex; - user-select: none; - vertical-align: bottom; - } - - .p-radiobutton-input { - cursor: pointer; - } - - .p-radiobutton-box { - display: flex; - justify-content: center; - align-items: center; - } - - .p-radiobutton-icon { - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - transform: translateZ(0) scale(0.1); - border-radius: 50%; - visibility: hidden; - } - - .p-radiobutton.p-highlight .p-radiobutton-icon { - transform: translateZ(0) scale(1, 1); - visibility: visible; - } - - .p-radiobutton { - width: 1.25rem; - height: 1.25rem; - } - .p-radiobutton .p-radiobutton-input { - appearance: none; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - padding: 0; - margin: 0; - opacity: 0; - z-index: 1; - outline: 0 none; - border: 1px solid #3f3f46; - border-radius: 50%; - } - .p-radiobutton .p-radiobutton-box { - border: 1px solid #3f3f46; - background: #09090b; - width: 1.25rem; - height: 1.25rem; - color: #ffffff; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-radiobutton .p-radiobutton-box .p-radiobutton-icon { - width: 0.75rem; - height: 0.75rem; - transition-duration: 0.2s; - background-color: #a78bfa; - } - .p-radiobutton.p-highlight .p-radiobutton-box { - border-color: #a78bfa; - background: #020617; - } - .p-radiobutton:not(.p-disabled):has(.p-radiobutton-input:hover) .p-radiobutton-box { - border-color: #52525b; - } - .p-radiobutton:not(.p-disabled):has(.p-radiobutton-input:hover).p-highlight .p-radiobutton-box { - border-color: #c4b5fd; - background: #020617; - } - .p-radiobutton:not(.p-disabled):has(.p-radiobutton-input:hover).p-highlight .p-radiobutton-box .p-radiobutton-icon { - background-color: #c4b5fd; - } - .p-radiobutton:not(.p-disabled):has(.p-radiobutton-input:focus-visible) .p-radiobutton-box { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #52525b; - } - .p-radiobutton.p-invalid > .p-radiobutton-box { - border-color: #fca5a5; - } - .p-radiobutton.p-variant-filled .p-radiobutton-box { - background-color: #27272a; - } - .p-radiobutton.p-variant-filled.p-highlight .p-radiobutton-box { - background: #020617; - } - .p-radiobutton.p-variant-filled:not(.p-disabled):has(.p-radiobutton-input:hover) .p-radiobutton-box { - background-color: #27272a; - } - .p-radiobutton.p-variant-filled:not(.p-disabled):has(.p-radiobutton-input:hover).p-highlight .p-radiobutton-box { - background: #020617; - } - - .p-input-filled .p-radiobutton .p-radiobutton-box { - background-color: #27272a; - } - .p-input-filled .p-radiobutton.p-highlight .p-radiobutton-box { - background: #020617; - } - .p-input-filled .p-radiobutton:not(.p-disabled):has(.p-radiobutton-input:hover) .p-radiobutton-box { - background-color: #27272a; - } - .p-input-filled .p-radiobutton:not(.p-disabled):has(.p-radiobutton-input:hover).p-highlight .p-radiobutton-box { - background: #020617; - } - - .p-rating { - position: relative; - display: flex; - align-items: center; - } - - .p-rating-item { - display: inline-flex; - align-items: center; - cursor: pointer; - } - - .p-rating.p-readonly .p-rating-item { - cursor: default; - } - - .p-rating { - gap: 0.5rem; - } - .p-rating .p-rating-item { - outline-color: transparent; - border-radius: 50%; - } - .p-rating .p-rating-item .p-rating-icon { - color: #a1a1aa; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - font-size: 1rem; - } - .p-rating .p-rating-item .p-rating-icon.p-icon { - width: 1rem; - height: 1rem; - } - .p-rating .p-rating-item .p-rating-icon.p-rating-cancel { - color: #f87171; - } - .p-rating .p-rating-item.p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-rating .p-rating-item.p-rating-item-active .p-rating-icon { - color: #a78bfa; - } - .p-rating:not(.p-disabled):not(.p-readonly) .p-rating-item:hover .p-rating-icon { - color: #a78bfa; - } - .p-rating:not(.p-disabled):not(.p-readonly) .p-rating-item:hover .p-rating-icon.p-rating-cancel { - color: #ef4444; - } - - .p-selectbutton .p-button { - background: #09090b; - border: 1px solid #09090b; - color: #a1a1aa; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-selectbutton .p-button .p-button-icon-left, -.p-selectbutton .p-button .p-button-icon-right { - color: #a1a1aa; - } - .p-selectbutton .p-button:not(.p-disabled):not(.p-highlight):hover { - background: #09090b; - border-color: #09090b; - color: #ffffff; - } - .p-selectbutton .p-button:not(.p-disabled):not(.p-highlight):hover .p-button-icon-left, -.p-selectbutton .p-button:not(.p-disabled):not(.p-highlight):hover .p-button-icon-right { - color: #ffffff; - } - .p-selectbutton .p-button.p-highlight { - background: #09090b; - border-color: #09090b; - color: #ffffff; - } - .p-selectbutton .p-button.p-highlight .p-button-icon-left, -.p-selectbutton .p-button.p-highlight .p-button-icon-right { - color: #ffffff; - } - .p-selectbutton .p-button.p-highlight:hover { - background: #09090b; - border-color: #09090b; - color: #ffffff; - } - .p-selectbutton .p-button.p-highlight:hover .p-button-icon-left, -.p-selectbutton .p-button.p-highlight:hover .p-button-icon-right { - color: #ffffff; - } - .p-selectbutton.p-invalid > .p-button { - border-color: #fca5a5; - } - - .p-slider { - position: relative; - } - - .p-slider .p-slider-handle { - cursor: grab; - touch-action: none; - display: block; - } - - .p-slider-range { - display: block; - } - - .p-slider-horizontal .p-slider-range { - top: 0; - left: 0; - height: 100%; - } - - .p-slider-horizontal .p-slider-handle { - top: 50%; - } - - .p-slider-vertical { - height: 100px; - } - - .p-slider-vertical .p-slider-handle { - left: 50%; - } - - .p-slider-vertical .p-slider-range { - bottom: 0; - left: 0; - width: 100%; - } - - .p-slider { - background: #3f3f46; - border: 0 none; - border-radius: 6px; - } - .p-slider.p-slider-horizontal { - height: 3px; - } - .p-slider.p-slider-horizontal .p-slider-handle { - margin-top: -10px; - margin-left: -10px; - } - .p-slider.p-slider-vertical { - width: 3px; - } - .p-slider.p-slider-vertical .p-slider-handle { - margin-left: -10px; - margin-bottom: -10px; - } - .p-slider .p-slider-handle { - height: 20px; - width: 20px; - background: #3f3f46; - border: 0 none; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-slider .p-slider-handle:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-slider .p-slider-range { - background: #a78bfa; - border-radius: 6px; - } - .p-slider:not(.p-disabled) .p-slider-handle:hover { - background: #3f3f46; - border-color: transparent; - } - - .p-inputtextarea-resizable { - overflow: hidden; - resize: none; - } - - .p-fluid .p-inputtextarea { - width: 100%; - } - - .p-treeselect { - display: inline-flex; - cursor: pointer; - user-select: none; - } - - .p-treeselect-trigger { - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - } - - .p-treeselect-label-container { - overflow: hidden; - flex: 1 1 auto; - cursor: pointer; - } - - .p-treeselect-label { - display: block; - white-space: nowrap; - cursor: pointer; - overflow: hidden; - text-overflow: ellipsis; - } - - .p-treeselect-label-empty { - overflow: hidden; - visibility: hidden; - } - - .p-treeselect-token { - cursor: default; - display: inline-flex; - align-items: center; - flex: 0 0 auto; - } - - .p-treeselect .p-treeselect-panel { - min-width: 100%; - } - - .p-treeselect-items-wrapper { - overflow: auto; - } - - .p-fluid .p-treeselect { - display: flex; - } - - .p-treeselect { - background: #09090b; - border: 1px solid #3f3f46; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - outline-color: transparent; - } - .p-treeselect:not(.p-disabled):hover { - border-color: #52525b; - } - .p-treeselect:not(.p-disabled).p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #52525b; - } - .p-treeselect.p-variant-filled { - background: #27272a; - } - .p-treeselect.p-variant-filled:not(.p-disabled):hover { - background-color: #27272a; - } - .p-treeselect.p-variant-filled:not(.p-disabled).p-focus { - background-color: #27272a; - } - .p-treeselect .p-treeselect-label { - padding: 0.5rem 0.75rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-treeselect .p-treeselect-label.p-placeholder { - color: #a1a1aa; - } - .p-treeselect.p-treeselect-chip .p-treeselect-token { - padding: 0.25rem 0.75rem; - margin-right: 0.5rem; - background: #3f3f46; - color: #ffffff; - border-radius: 16px; - } - .p-treeselect .p-treeselect-trigger { - background: transparent; - color: #a1a1aa; - width: 2.5rem; - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - } - .p-treeselect.p-invalid.p-component { - border-color: #fca5a5; - } - - .p-inputwrapper-filled.p-treeselect.p-treeselect-chip .p-treeselect-label { - padding: 0.25rem 0.75rem; - } - - .p-treeselect-panel { - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - border-radius: 6px; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-treeselect-panel .p-treeselect-items-wrapper .p-tree { - border: 0 none; - } - .p-treeselect-panel .p-treeselect-items-wrapper .p-treeselect-empty-message { - padding: 0.5rem 0.75rem; - color: #ffffff; - background: transparent; - } - - .p-input-filled .p-treeselect { - background: #27272a; - } - .p-input-filled .p-treeselect:not(.p-disabled):hover { - background-color: #27272a; - } - .p-input-filled .p-treeselect:not(.p-disabled).p-focus { - background-color: #27272a; - } - - .p-togglebutton { - position: relative; - display: inline-flex; - user-select: none; - vertical-align: bottom; - } - - .p-togglebutton-input { - cursor: pointer; - } - - .p-togglebutton .p-button { - flex: 1 1 auto; - } - - .p-togglebutton .p-togglebutton-input { - appearance: none; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - padding: 0; - margin: 0; - opacity: 0; - z-index: 1; - outline: 0 none; - border: 1px solid #09090b; - border-radius: 6px; - } - .p-togglebutton .p-button { - background: #09090b; - border: 1px solid #09090b; - color: #a1a1aa; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-togglebutton .p-button .p-button-icon-left, -.p-togglebutton .p-button .p-button-icon-right { - color: #a1a1aa; - } - .p-togglebutton.p-highlight .p-button { - background: #09090b; - border-color: #09090b; - color: #ffffff; - } - .p-togglebutton.p-highlight .p-button .p-button-icon-left, -.p-togglebutton.p-highlight .p-button .p-button-icon-right { - color: #ffffff; - } - .p-togglebutton:not(.p-disabled):has(.p-togglebutton-input:hover):not(.p-highlight) .p-button { - background: #09090b; - border-color: #09090b; - color: #ffffff; - } - .p-togglebutton:not(.p-disabled):has(.p-togglebutton-input:hover):not(.p-highlight) .p-button .p-button-icon-left, -.p-togglebutton:not(.p-disabled):has(.p-togglebutton-input:hover):not(.p-highlight) .p-button .p-button-icon-right { - color: #ffffff; - } - .p-togglebutton:not(.p-disabled):has(.p-togglebutton-input:hover).p-highlight .p-button { - background: #09090b; - border-color: #09090b; - color: #ffffff; - } - .p-togglebutton:not(.p-disabled):has(.p-togglebutton-input:hover).p-highlight .p-button .p-button-icon-left, -.p-togglebutton:not(.p-disabled):has(.p-togglebutton-input:hover).p-highlight .p-button .p-button-icon-right { - color: #ffffff; - } - .p-togglebutton:not(.p-disabled):has(.p-togglebutton-input:focus-visible) .p-button { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #52525b; - } - .p-togglebutton.p-invalid > .p-button { - border-color: #fca5a5; - } - - .p-button { - display: inline-flex; - cursor: pointer; - user-select: none; - align-items: center; - vertical-align: bottom; - text-align: center; - overflow: hidden; - position: relative; - } - - .p-button-label { - flex: 1 1 auto; - } - - .p-button-icon-right { - order: 1; - } - - .p-button:disabled { - cursor: default; - } - - .p-button-icon-only { - justify-content: center; - } - - .p-button-icon-only .p-button-label { - visibility: hidden; - width: 0; - flex: 0 0 auto; - } - - .p-button-vertical { - flex-direction: column; - } - - .p-button-icon-bottom { - order: 2; - } - - .p-button-group .p-button { - margin: 0; - } - - .p-button-group .p-button:not(:last-child), .p-button-group .p-button:not(:last-child):hover { - border-right: 0 none; - } - - .p-button-group .p-button:not(:first-of-type):not(:last-of-type) { - border-radius: 0; - } - - .p-button-group .p-button:first-of-type:not(:only-of-type) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - .p-button-group .p-button:last-of-type:not(:only-of-type) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - .p-button-group .p-button:focus { - position: relative; - z-index: 1; - } - - .p-button { - color: #020617; - background: #a78bfa; - border: 1px solid #a78bfa; - padding: 0.5rem 1rem; - font-size: 1rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - outline-color: transparent; - } - .p-button:not(:disabled):hover { - background: #c4b5fd; - color: #020617; - border-color: #c4b5fd; - } - .p-button:not(:disabled):active { - background: #ddd6fe; - color: #020617; - border-color: #ddd6fe; - } - .p-button.p-button-outlined { - background-color: transparent; - color: #a78bfa; - border: 1px solid; - } - .p-button.p-button-outlined:not(:disabled):hover { - background: rgba(167, 139, 250, 0.04); - color: #a78bfa; - border: 1px solid; - } - .p-button.p-button-outlined:not(:disabled):active { - background: rgba(167, 139, 250, 0.16); - color: #a78bfa; - border: 1px solid; - } - .p-button.p-button-outlined.p-button-plain { - color: #a1a1aa; - border-color: #a1a1aa; - } - .p-button.p-button-outlined.p-button-plain:not(:disabled):hover { - background: rgba(255, 255, 255, 0.03); - color: #a1a1aa; - } - .p-button.p-button-outlined.p-button-plain:not(:disabled):active { - background: rgba(255, 255, 255, 0.16); - color: #a1a1aa; - } - .p-button.p-button-text { - background-color: transparent; - color: #a78bfa; - border-color: transparent; - } - .p-button.p-button-text:not(:disabled):hover { - background: rgba(167, 139, 250, 0.04); - color: #a78bfa; - border-color: transparent; - } - .p-button.p-button-text:not(:disabled):active { - background: rgba(167, 139, 250, 0.16); - color: #a78bfa; - border-color: transparent; - } - .p-button.p-button-text.p-button-plain { - color: #a1a1aa; - } - .p-button.p-button-text.p-button-plain:not(:disabled):hover { - background: rgba(255, 255, 255, 0.03); - color: #a1a1aa; - } - .p-button.p-button-text.p-button-plain:not(:disabled):active { - background: rgba(255, 255, 255, 0.16); - color: #a1a1aa; - } - .p-button:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-button .p-button-label { - transition-duration: 0.2s; - } - .p-button .p-button-icon-left { - margin-right: 0.5rem; - } - .p-button .p-button-icon-right { - margin-left: 0.5rem; - } - .p-button .p-button-icon-bottom { - margin-top: 0.5rem; - } - .p-button .p-button-icon-top { - margin-bottom: 0.5rem; - } - .p-button .p-badge { - margin-left: 0.5rem; - min-width: 1rem; - height: 1rem; - line-height: 1rem; - color: #a78bfa; - background-color: #020617; - } - .p-button.p-button-raised { - box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); - } - .p-button.p-button-rounded { - border-radius: 2rem; - } - .p-button.p-button-icon-only { - width: 2.5rem; - padding: 0.5rem 0; - } - .p-button.p-button-icon-only .p-button-icon-left, -.p-button.p-button-icon-only .p-button-icon-right { - margin: 0; - } - .p-button.p-button-icon-only.p-button-rounded { - border-radius: 50%; - height: 2.5rem; - } - .p-button.p-button-sm { - font-size: 0.875rem; - padding: 0.4375rem 0.875rem; - } - .p-button.p-button-sm .p-button-icon { - font-size: 0.875rem; - } - .p-button.p-button-lg { - font-size: 1.25rem; - padding: 0.625rem 1.25rem; - } - .p-button.p-button-lg .p-button-icon { - font-size: 1.25rem; - } - .p-button.p-button-loading-label-only .p-button-label { - margin-left: 0.5rem; - } - .p-button.p-button-loading-label-only .p-button-loading-icon { - margin-right: 0; - } - - .p-fluid .p-button { - width: 100%; - } - .p-fluid .p-button-icon-only { - width: 2.5rem; - } - .p-fluid .p-button-group { - display: flex; - } - .p-fluid .p-button-group .p-button { - flex: 1; - } - - .p-button.p-button-secondary, .p-button-group.p-button-secondary > .p-button, .p-splitbutton.p-button-secondary > .p-button { - color: #d4d4d8; - background: #27272a; - border: 1px solid #27272a; - } - .p-button.p-button-secondary:not(:disabled):hover, .p-button-group.p-button-secondary > .p-button:not(:disabled):hover, .p-splitbutton.p-button-secondary > .p-button:not(:disabled):hover { - background: #3f3f46; - color: #d4d4d8; - border-color: #3f3f46; - } - .p-button.p-button-secondary:not(:disabled):focus, .p-button-group.p-button-secondary > .p-button:not(:disabled):focus, .p-splitbutton.p-button-secondary > .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-button.p-button-secondary:not(:disabled):active, .p-button-group.p-button-secondary > .p-button:not(:disabled):active, .p-splitbutton.p-button-secondary > .p-button:not(:disabled):active { - background: #52525b; - color: #d4d4d8; - border-color: #52525b; - } - .p-button.p-button-secondary.p-button-outlined, .p-button-group.p-button-secondary > .p-button.p-button-outlined, .p-splitbutton.p-button-secondary > .p-button.p-button-outlined { - background-color: transparent; - color: #27272a; - border: 1px solid; - } - .p-button.p-button-secondary.p-button-outlined:not(:disabled):hover, .p-button-group.p-button-secondary > .p-button.p-button-outlined:not(:disabled):hover, .p-splitbutton.p-button-secondary > .p-button.p-button-outlined:not(:disabled):hover { - background: rgba(39, 39, 42, 0.04); - color: #27272a; - border: 1px solid; - } - .p-button.p-button-secondary.p-button-outlined:not(:disabled):active, .p-button-group.p-button-secondary > .p-button.p-button-outlined:not(:disabled):active, .p-splitbutton.p-button-secondary > .p-button.p-button-outlined:not(:disabled):active { - background: rgba(39, 39, 42, 0.16); - color: #27272a; - border: 1px solid; - } - .p-button.p-button-secondary.p-button-text, .p-button-group.p-button-secondary > .p-button.p-button-text, .p-splitbutton.p-button-secondary > .p-button.p-button-text { - background-color: transparent; - color: #27272a; - border-color: transparent; - } - .p-button.p-button-secondary.p-button-text:not(:disabled):hover, .p-button-group.p-button-secondary > .p-button.p-button-text:not(:disabled):hover, .p-splitbutton.p-button-secondary > .p-button.p-button-text:not(:disabled):hover { - background: rgba(39, 39, 42, 0.04); - border-color: transparent; - color: #27272a; - } - .p-button.p-button-secondary.p-button-text:not(:disabled):active, .p-button-group.p-button-secondary > .p-button.p-button-text:not(:disabled):active, .p-splitbutton.p-button-secondary > .p-button.p-button-text:not(:disabled):active { - background: rgba(39, 39, 42, 0.16); - border-color: transparent; - color: #27272a; - } - - .p-button.p-button-info, .p-button-group.p-button-info > .p-button, .p-splitbutton.p-button-info > .p-button { - color: #082f49; - background: #38bdf8; - border: 1px solid #38bdf8; - } - .p-button.p-button-info:not(:disabled):hover, .p-button-group.p-button-info > .p-button:not(:disabled):hover, .p-splitbutton.p-button-info > .p-button:not(:disabled):hover { - background: #7dd3fc; - color: #082f49; - border-color: #7dd3fc; - } - .p-button.p-button-info:not(:disabled):focus, .p-button-group.p-button-info > .p-button:not(:disabled):focus, .p-splitbutton.p-button-info > .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-button.p-button-info:not(:disabled):active, .p-button-group.p-button-info > .p-button:not(:disabled):active, .p-splitbutton.p-button-info > .p-button:not(:disabled):active { - background: #bae6fd; - color: #082f49; - border-color: #bae6fd; - } - .p-button.p-button-info.p-button-outlined, .p-button-group.p-button-info > .p-button.p-button-outlined, .p-splitbutton.p-button-info > .p-button.p-button-outlined { - background-color: transparent; - color: #38bdf8; - border: 1px solid; - } - .p-button.p-button-info.p-button-outlined:not(:disabled):hover, .p-button-group.p-button-info > .p-button.p-button-outlined:not(:disabled):hover, .p-splitbutton.p-button-info > .p-button.p-button-outlined:not(:disabled):hover { - background: rgba(56, 189, 248, 0.04); - color: #38bdf8; - border: 1px solid; - } - .p-button.p-button-info.p-button-outlined:not(:disabled):active, .p-button-group.p-button-info > .p-button.p-button-outlined:not(:disabled):active, .p-splitbutton.p-button-info > .p-button.p-button-outlined:not(:disabled):active { - background: rgba(56, 189, 248, 0.16); - color: #38bdf8; - border: 1px solid; - } - .p-button.p-button-info.p-button-text, .p-button-group.p-button-info > .p-button.p-button-text, .p-splitbutton.p-button-info > .p-button.p-button-text { - background-color: transparent; - color: #38bdf8; - border-color: transparent; - } - .p-button.p-button-info.p-button-text:not(:disabled):hover, .p-button-group.p-button-info > .p-button.p-button-text:not(:disabled):hover, .p-splitbutton.p-button-info > .p-button.p-button-text:not(:disabled):hover { - background: rgba(56, 189, 248, 0.04); - border-color: transparent; - color: #38bdf8; - } - .p-button.p-button-info.p-button-text:not(:disabled):active, .p-button-group.p-button-info > .p-button.p-button-text:not(:disabled):active, .p-splitbutton.p-button-info > .p-button.p-button-text:not(:disabled):active { - background: rgba(56, 189, 248, 0.16); - border-color: transparent; - color: #38bdf8; - } - - .p-button.p-button-success, .p-button-group.p-button-success > .p-button, .p-splitbutton.p-button-success > .p-button { - color: #052e16; - background: #4ade80; - border: 1px solid #4ade80; - } - .p-button.p-button-success:not(:disabled):hover, .p-button-group.p-button-success > .p-button:not(:disabled):hover, .p-splitbutton.p-button-success > .p-button:not(:disabled):hover { - background: #86efac; - color: #052e16; - border-color: #86efac; - } - .p-button.p-button-success:not(:disabled):focus, .p-button-group.p-button-success > .p-button:not(:disabled):focus, .p-splitbutton.p-button-success > .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-button.p-button-success:not(:disabled):active, .p-button-group.p-button-success > .p-button:not(:disabled):active, .p-splitbutton.p-button-success > .p-button:not(:disabled):active { - background: #bbf7d0; - color: #052e16; - border-color: #bbf7d0; - } - .p-button.p-button-success.p-button-outlined, .p-button-group.p-button-success > .p-button.p-button-outlined, .p-splitbutton.p-button-success > .p-button.p-button-outlined { - background-color: transparent; - color: #4ade80; - border: 1px solid; - } - .p-button.p-button-success.p-button-outlined:not(:disabled):hover, .p-button-group.p-button-success > .p-button.p-button-outlined:not(:disabled):hover, .p-splitbutton.p-button-success > .p-button.p-button-outlined:not(:disabled):hover { - background: rgba(74, 222, 128, 0.04); - color: #4ade80; - border: 1px solid; - } - .p-button.p-button-success.p-button-outlined:not(:disabled):active, .p-button-group.p-button-success > .p-button.p-button-outlined:not(:disabled):active, .p-splitbutton.p-button-success > .p-button.p-button-outlined:not(:disabled):active { - background: rgba(74, 222, 128, 0.16); - color: #4ade80; - border: 1px solid; - } - .p-button.p-button-success.p-button-text, .p-button-group.p-button-success > .p-button.p-button-text, .p-splitbutton.p-button-success > .p-button.p-button-text { - background-color: transparent; - color: #4ade80; - border-color: transparent; - } - .p-button.p-button-success.p-button-text:not(:disabled):hover, .p-button-group.p-button-success > .p-button.p-button-text:not(:disabled):hover, .p-splitbutton.p-button-success > .p-button.p-button-text:not(:disabled):hover { - background: rgba(74, 222, 128, 0.04); - border-color: transparent; - color: #4ade80; - } - .p-button.p-button-success.p-button-text:not(:disabled):active, .p-button-group.p-button-success > .p-button.p-button-text:not(:disabled):active, .p-splitbutton.p-button-success > .p-button.p-button-text:not(:disabled):active { - background: rgba(74, 222, 128, 0.16); - border-color: transparent; - color: #4ade80; - } - - .p-button.p-button-warning, .p-button-group.p-button-warning > .p-button, .p-splitbutton.p-button-warning > .p-button { - color: #431407; - background: #fb923c; - border: 1px solid #fb923c; - } - .p-button.p-button-warning:not(:disabled):hover, .p-button-group.p-button-warning > .p-button:not(:disabled):hover, .p-splitbutton.p-button-warning > .p-button:not(:disabled):hover { - background: #fdba74; - color: #431407; - border-color: #fdba74; - } - .p-button.p-button-warning:not(:disabled):focus, .p-button-group.p-button-warning > .p-button:not(:disabled):focus, .p-splitbutton.p-button-warning > .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-button.p-button-warning:not(:disabled):active, .p-button-group.p-button-warning > .p-button:not(:disabled):active, .p-splitbutton.p-button-warning > .p-button:not(:disabled):active { - background: #fed7aa; - color: #431407; - border-color: #fed7aa; - } - .p-button.p-button-warning.p-button-outlined, .p-button-group.p-button-warning > .p-button.p-button-outlined, .p-splitbutton.p-button-warning > .p-button.p-button-outlined { - background-color: transparent; - color: #fb923c; - border: 1px solid; - } - .p-button.p-button-warning.p-button-outlined:not(:disabled):hover, .p-button-group.p-button-warning > .p-button.p-button-outlined:not(:disabled):hover, .p-splitbutton.p-button-warning > .p-button.p-button-outlined:not(:disabled):hover { - background: rgba(251, 146, 60, 0.04); - color: #fb923c; - border: 1px solid; - } - .p-button.p-button-warning.p-button-outlined:not(:disabled):active, .p-button-group.p-button-warning > .p-button.p-button-outlined:not(:disabled):active, .p-splitbutton.p-button-warning > .p-button.p-button-outlined:not(:disabled):active { - background: rgba(251, 146, 60, 0.16); - color: #fb923c; - border: 1px solid; - } - .p-button.p-button-warning.p-button-text, .p-button-group.p-button-warning > .p-button.p-button-text, .p-splitbutton.p-button-warning > .p-button.p-button-text { - background-color: transparent; - color: #fb923c; - border-color: transparent; - } - .p-button.p-button-warning.p-button-text:not(:disabled):hover, .p-button-group.p-button-warning > .p-button.p-button-text:not(:disabled):hover, .p-splitbutton.p-button-warning > .p-button.p-button-text:not(:disabled):hover { - background: rgba(251, 146, 60, 0.04); - border-color: transparent; - color: #fb923c; - } - .p-button.p-button-warning.p-button-text:not(:disabled):active, .p-button-group.p-button-warning > .p-button.p-button-text:not(:disabled):active, .p-splitbutton.p-button-warning > .p-button.p-button-text:not(:disabled):active { - background: rgba(251, 146, 60, 0.16); - border-color: transparent; - color: #fb923c; - } - - .p-button.p-button-help, .p-button-group.p-button-help > .p-button, .p-splitbutton.p-button-help > .p-button { - color: #3b0764; - background: #c084fc; - border: 1px solid #c084fc; - } - .p-button.p-button-help:not(:disabled):hover, .p-button-group.p-button-help > .p-button:not(:disabled):hover, .p-splitbutton.p-button-help > .p-button:not(:disabled):hover { - background: #d8b4fe; - color: #3b0764; - border-color: #d8b4fe; - } - .p-button.p-button-help:not(:disabled):focus, .p-button-group.p-button-help > .p-button:not(:disabled):focus, .p-splitbutton.p-button-help > .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-button.p-button-help:not(:disabled):active, .p-button-group.p-button-help > .p-button:not(:disabled):active, .p-splitbutton.p-button-help > .p-button:not(:disabled):active { - background: #e9d5ff; - color: #3b0764; - border-color: #e9d5ff; - } - .p-button.p-button-help.p-button-outlined, .p-button-group.p-button-help > .p-button.p-button-outlined, .p-splitbutton.p-button-help > .p-button.p-button-outlined { - background-color: transparent; - color: #c084fc; - border: 1px solid; - } - .p-button.p-button-help.p-button-outlined:not(:disabled):hover, .p-button-group.p-button-help > .p-button.p-button-outlined:not(:disabled):hover, .p-splitbutton.p-button-help > .p-button.p-button-outlined:not(:disabled):hover { - background: rgba(192, 132, 252, 0.04); - color: #c084fc; - border: 1px solid; - } - .p-button.p-button-help.p-button-outlined:not(:disabled):active, .p-button-group.p-button-help > .p-button.p-button-outlined:not(:disabled):active, .p-splitbutton.p-button-help > .p-button.p-button-outlined:not(:disabled):active { - background: rgba(192, 132, 252, 0.16); - color: #c084fc; - border: 1px solid; - } - .p-button.p-button-help.p-button-text, .p-button-group.p-button-help > .p-button.p-button-text, .p-splitbutton.p-button-help > .p-button.p-button-text { - background-color: transparent; - color: #c084fc; - border-color: transparent; - } - .p-button.p-button-help.p-button-text:not(:disabled):hover, .p-button-group.p-button-help > .p-button.p-button-text:not(:disabled):hover, .p-splitbutton.p-button-help > .p-button.p-button-text:not(:disabled):hover { - background: rgba(192, 132, 252, 0.04); - border-color: transparent; - color: #c084fc; - } - .p-button.p-button-help.p-button-text:not(:disabled):active, .p-button-group.p-button-help > .p-button.p-button-text:not(:disabled):active, .p-splitbutton.p-button-help > .p-button.p-button-text:not(:disabled):active { - background: rgba(192, 132, 252, 0.16); - border-color: transparent; - color: #c084fc; - } - - .p-button.p-button-danger, .p-button-group.p-button-danger > .p-button, .p-splitbutton.p-button-danger > .p-button { - color: #450a0a; - background: #f87171; - border: 1px solid #f87171; - } - .p-button.p-button-danger:not(:disabled):hover, .p-button-group.p-button-danger > .p-button:not(:disabled):hover, .p-splitbutton.p-button-danger > .p-button:not(:disabled):hover { - background: #fca5a5; - color: #450a0a; - border-color: #fca5a5; - } - .p-button.p-button-danger:not(:disabled):focus, .p-button-group.p-button-danger > .p-button:not(:disabled):focus, .p-splitbutton.p-button-danger > .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-button.p-button-danger:not(:disabled):active, .p-button-group.p-button-danger > .p-button:not(:disabled):active, .p-splitbutton.p-button-danger > .p-button:not(:disabled):active { - background: #fecaca; - color: #450a0a; - border-color: #fecaca; - } - .p-button.p-button-danger.p-button-outlined, .p-button-group.p-button-danger > .p-button.p-button-outlined, .p-splitbutton.p-button-danger > .p-button.p-button-outlined { - background-color: transparent; - color: #f87171; - border: 1px solid; - } - .p-button.p-button-danger.p-button-outlined:not(:disabled):hover, .p-button-group.p-button-danger > .p-button.p-button-outlined:not(:disabled):hover, .p-splitbutton.p-button-danger > .p-button.p-button-outlined:not(:disabled):hover { - background: rgba(248, 113, 113, 0.04); - color: #f87171; - border: 1px solid; - } - .p-button.p-button-danger.p-button-outlined:not(:disabled):active, .p-button-group.p-button-danger > .p-button.p-button-outlined:not(:disabled):active, .p-splitbutton.p-button-danger > .p-button.p-button-outlined:not(:disabled):active { - background: rgba(248, 113, 113, 0.16); - color: #f87171; - border: 1px solid; - } - .p-button.p-button-danger.p-button-text, .p-button-group.p-button-danger > .p-button.p-button-text, .p-splitbutton.p-button-danger > .p-button.p-button-text { - background-color: transparent; - color: #f87171; - border-color: transparent; - } - .p-button.p-button-danger.p-button-text:not(:disabled):hover, .p-button-group.p-button-danger > .p-button.p-button-text:not(:disabled):hover, .p-splitbutton.p-button-danger > .p-button.p-button-text:not(:disabled):hover { - background: rgba(248, 113, 113, 0.04); - border-color: transparent; - color: #f87171; - } - .p-button.p-button-danger.p-button-text:not(:disabled):active, .p-button-group.p-button-danger > .p-button.p-button-text:not(:disabled):active, .p-splitbutton.p-button-danger > .p-button.p-button-text:not(:disabled):active { - background: rgba(248, 113, 113, 0.16); - border-color: transparent; - color: #f87171; - } - - .p-button.p-button-contrast, .p-button-group.p-button-contrast > .p-button, .p-splitbutton.p-button-contrast > .p-button { - color: #09090b; - background: #ffffff; - border: 1px solid #ffffff; - } - .p-button.p-button-contrast:not(:disabled):hover, .p-button-group.p-button-contrast > .p-button:not(:disabled):hover, .p-splitbutton.p-button-contrast > .p-button:not(:disabled):hover { - background: #f4f4f5; - color: #09090b; - border-color: #f4f4f5; - } - .p-button.p-button-contrast:not(:disabled):focus, .p-button-group.p-button-contrast > .p-button:not(:disabled):focus, .p-splitbutton.p-button-contrast > .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-button.p-button-contrast:not(:disabled):active, .p-button-group.p-button-contrast > .p-button:not(:disabled):active, .p-splitbutton.p-button-contrast > .p-button:not(:disabled):active { - background: #e4e4e7; - color: #09090b; - border-color: #e4e4e7; - } - .p-button.p-button-contrast.p-button-outlined, .p-button-group.p-button-contrast > .p-button.p-button-outlined, .p-splitbutton.p-button-contrast > .p-button.p-button-outlined { - background-color: transparent; - color: #ffffff; - border: 1px solid; - } - .p-button.p-button-contrast.p-button-outlined:not(:disabled):hover, .p-button-group.p-button-contrast > .p-button.p-button-outlined:not(:disabled):hover, .p-splitbutton.p-button-contrast > .p-button.p-button-outlined:not(:disabled):hover { - background: rgba(255, 255, 255, 0.04); - color: #ffffff; - border: 1px solid; - } - .p-button.p-button-contrast.p-button-outlined:not(:disabled):active, .p-button-group.p-button-contrast > .p-button.p-button-outlined:not(:disabled):active, .p-splitbutton.p-button-contrast > .p-button.p-button-outlined:not(:disabled):active { - background: rgba(255, 255, 255, 0.16); - color: #ffffff; - border: 1px solid; - } - .p-button.p-button-contrast.p-button-text, .p-button-group.p-button-contrast > .p-button.p-button-text, .p-splitbutton.p-button-contrast > .p-button.p-button-text { - background-color: transparent; - color: #ffffff; - border-color: transparent; - } - .p-button.p-button-contrast.p-button-text:not(:disabled):hover, .p-button-group.p-button-contrast > .p-button.p-button-text:not(:disabled):hover, .p-splitbutton.p-button-contrast > .p-button.p-button-text:not(:disabled):hover { - background: rgba(255, 255, 255, 0.04); - border-color: transparent; - color: #ffffff; - } - .p-button.p-button-contrast.p-button-text:not(:disabled):active, .p-button-group.p-button-contrast > .p-button.p-button-text:not(:disabled):active, .p-splitbutton.p-button-contrast > .p-button.p-button-text:not(:disabled):active { - background: rgba(255, 255, 255, 0.16); - border-color: transparent; - color: #ffffff; - } - - .p-button.p-button-link { - color: #a78bfa; - background: transparent; - border: transparent; - } - .p-button.p-button-link:not(:disabled):hover { - background: transparent; - color: #a78bfa; - border-color: transparent; - } - .p-button.p-button-link:not(:disabled):hover .p-button-label { - text-decoration: underline; - } - .p-button.p-button-link:not(:disabled):focus { - background: transparent; - box-shadow: none; - border-color: transparent; - } - .p-button.p-button-link:not(:disabled):active { - background: transparent; - color: #a78bfa; - border-color: transparent; - } - - .p-speeddial { - position: absolute; - display: flex; - } - - .p-speeddial-button { - z-index: 1; - } - - .p-speeddial-list { - margin: 0; - padding: 0; - list-style: none; - display: flex; - align-items: center; - justify-content: center; - transition: top 0s linear 0.2s; - pointer-events: none; - z-index: 2; - } - - .p-speeddial-item { - transform: scale(0); - opacity: 0; - transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, opacity 0.8s; - will-change: transform; - } - - .p-speeddial-action { - display: flex; - align-items: center; - justify-content: center; - border-radius: 50%; - position: relative; - overflow: hidden; - } - - .p-speeddial-circle .p-speeddial-item, -.p-speeddial-semi-circle .p-speeddial-item, -.p-speeddial-quarter-circle .p-speeddial-item { - position: absolute; - } - - .p-speeddial-rotate { - transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; - will-change: transform; - } - - .p-speeddial-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - opacity: 0; - transition: opacity 250ms cubic-bezier(0.25, 0.8, 0.25, 1); - } - - .p-speeddial-mask-visible { - pointer-events: none; - opacity: 1; - transition: opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1); - } - - .p-speeddial-opened .p-speeddial-list { - pointer-events: auto; - } - - .p-speeddial-opened .p-speeddial-item { - transform: scale(1); - opacity: 1; - } - - .p-speeddial-opened .p-speeddial-rotate { - transform: rotate(45deg); - } - - .p-speeddial-button.p-button.p-button-icon-only { - width: 2.5rem; - height: 2.5rem; - } - .p-speeddial-button.p-button.p-button-icon-only .p-button-icon { - font-size: 1rem; - } - .p-speeddial-button.p-button.p-button-icon-only .p-icon { - width: 1rem; - height: 1rem; - } - - .p-speeddial-list { - outline: 0 none; - } - - .p-speeddial-item.p-focus > .p-speeddial-action { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-speeddial-action { - width: 2.5rem; - height: 2.5rem; - background: #3f3f46; - color: #a1a1aa; - outline-color: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-speeddial-action:hover { - background: #3f3f46; - color: #ffffff; - } - - .p-speeddial-direction-up .p-speeddial-item { - margin: 0.25rem 0; - } - .p-speeddial-direction-up .p-speeddial-item:first-child { - margin-bottom: 0.5rem; - } - - .p-speeddial-direction-down .p-speeddial-item { - margin: 0.25rem 0; - } - .p-speeddial-direction-down .p-speeddial-item:first-child { - margin-top: 0.5rem; - } - - .p-speeddial-direction-left .p-speeddial-item { - margin: 0 0.25rem; - } - .p-speeddial-direction-left .p-speeddial-item:first-child { - margin-right: 0.5rem; - } - - .p-speeddial-direction-right .p-speeddial-item { - margin: 0 0.25rem; - } - .p-speeddial-direction-right .p-speeddial-item:first-child { - margin-left: 0.5rem; - } - - .p-speeddial-circle .p-speeddial-item, -.p-speeddial-semi-circle .p-speeddial-item, -.p-speeddial-quarter-circle .p-speeddial-item { - margin: 0; - } - .p-speeddial-circle .p-speeddial-item:first-child, .p-speeddial-circle .p-speeddial-item:last-child, -.p-speeddial-semi-circle .p-speeddial-item:first-child, -.p-speeddial-semi-circle .p-speeddial-item:last-child, -.p-speeddial-quarter-circle .p-speeddial-item:first-child, -.p-speeddial-quarter-circle .p-speeddial-item:last-child { - margin: 0; - } - - .p-speeddial-mask { - background-color: rgba(0, 0, 0, 0.4); - border-radius: 6px; - } - - .p-splitbutton { - display: inline-flex; - position: relative; - } - - .p-splitbutton .p-splitbutton-defaultbutton, -.p-splitbutton.p-button-rounded > .p-splitbutton-defaultbutton.p-button, -.p-splitbutton.p-button-outlined > .p-splitbutton-defaultbutton.p-button, -.p-splitbutton.p-button-outlined > .p-splitbutton-defaultbutton.p-button-outlined.p-button:hover { - flex: 1 1 auto; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - border-right: 0 none; - } - - .p-splitbutton-menubutton, -.p-splitbutton.p-button-rounded > .p-splitbutton-menubutton.p-button, -.p-splitbutton.p-button-outlined > .p-splitbutton-menubutton.p-button { - display: flex; - align-items: center; - justify-content: center; - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - .p-splitbutton .p-menu { - min-width: 100%; - } - - .p-fluid .p-splitbutton { - display: flex; - } - - .p-splitbutton { - border-radius: 6px; - } - .p-splitbutton.p-button-rounded { - border-radius: 2rem; - } - .p-splitbutton.p-button-rounded > .p-button { - border-radius: 2rem; - } - .p-splitbutton.p-button-raised { - box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); - } - - .p-carousel { - display: flex; - flex-direction: column; - } - - .p-carousel-content { - display: flex; - flex-direction: column; - overflow: auto; - } - - .p-carousel-prev, -.p-carousel-next { - align-self: center; - flex-grow: 0; - flex-shrink: 0; - display: flex; - justify-content: center; - align-items: center; - overflow: hidden; - position: relative; - } - - .p-carousel-container { - display: flex; - flex-direction: row; - } - - .p-carousel-items-content { - overflow: hidden; - width: 100%; - } - - .p-carousel-items-container { - display: flex; - flex-direction: row; - } - - .p-carousel-indicators { - display: flex; - flex-direction: row; - justify-content: center; - flex-wrap: wrap; - } - - .p-carousel-indicator > button { - display: flex; - align-items: center; - justify-content: center; - } - - /* Vertical */ - .p-carousel-vertical .p-carousel-container { - flex-direction: column; - } - - .p-carousel-vertical .p-carousel-items-container { - flex-direction: column; - height: 100%; - } - - /* Keyboard Support */ - .p-items-hidden .p-carousel-item { - visibility: hidden; - } - - .p-items-hidden .p-carousel-item.p-carousel-item-active { - visibility: visible; - } - - .p-carousel .p-carousel-content .p-carousel-prev, -.p-carousel .p-carousel-content .p-carousel-next { - width: 1.75rem; - height: 1.75rem; - color: #a1a1aa; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - margin: 0.5rem; - } - .p-carousel .p-carousel-content .p-carousel-prev:enabled:hover, -.p-carousel .p-carousel-content .p-carousel-next:enabled:hover { - color: #ffffff; - border-color: transparent; - background: rgba(255, 255, 255, 0.03); - } - .p-carousel .p-carousel-content .p-carousel-prev:focus-visible, -.p-carousel .p-carousel-content .p-carousel-next:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-carousel .p-carousel-indicators { - padding: 1rem; - } - .p-carousel .p-carousel-indicators .p-carousel-indicator { - margin-right: 0.5rem; - margin-bottom: 0.5rem; - } - .p-carousel .p-carousel-indicators .p-carousel-indicator button { - background-color: #3f3f46; - width: 2rem; - height: 0.5rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - } - .p-carousel .p-carousel-indicators .p-carousel-indicator button:hover { - background: #3f3f46; - } - .p-carousel .p-carousel-indicators .p-carousel-indicator.p-highlight button { - background: rgba(167, 139, 250, 0.16); - color: rgba(255, 255, 255, 0.87); - } - - .p-datatable { - position: relative; - } - - .p-datatable-table { - border-spacing: 0px; - width: 100%; - } - - .p-datatable .p-sortable-column { - cursor: pointer; - user-select: none; - } - - .p-datatable .p-sortable-column .p-column-title, -.p-datatable .p-sortable-column .p-sortable-column-icon, -.p-datatable .p-sortable-column .p-sortable-column-badge { - vertical-align: middle; - } - - .p-datatable .p-sortable-column .p-sortable-column-badge { - display: inline-flex; - align-items: center; - justify-content: center; - } - - .p-datatable-hoverable-rows .p-selectable-row { - cursor: pointer; - } - - /* Scrollable */ - .p-datatable-scrollable > .p-datatable-wrapper { - position: relative; - } - - .p-datatable-scrollable-table > .p-datatable-thead { - top: 0; - z-index: 1; - } - - .p-datatable-scrollable-table > .p-datatable-frozen-tbody { - position: sticky; - z-index: 1; - } - - .p-datatable-scrollable-table > .p-datatable-tfoot { - bottom: 0; - z-index: 1; - } - - .p-datatable-scrollable .p-frozen-column { - position: sticky; - background: inherit; - } - - .p-datatable-scrollable th.p-frozen-column { - z-index: 1; - } - - .p-datatable-flex-scrollable { - display: flex; - flex-direction: column; - height: 100%; - } - - .p-datatable-flex-scrollable > .p-datatable-wrapper { - display: flex; - flex-direction: column; - flex: 1; - height: 100%; - } - - .p-datatable-scrollable-table > .p-datatable-tbody > .p-rowgroup-header { - position: sticky; - z-index: 1; - } - - /* Resizable */ - .p-datatable-resizable-table > .p-datatable-thead > tr > th, -.p-datatable-resizable-table > .p-datatable-tfoot > tr > td, -.p-datatable-resizable-table > .p-datatable-tbody > tr > td { - overflow: hidden; - white-space: nowrap; - } - - .p-datatable-resizable-table > .p-datatable-thead > tr > th.p-resizable-column:not(.p-frozen-column) { - background-clip: padding-box; - position: relative; - } - - .p-datatable-resizable-table-fit > .p-datatable-thead > tr > th.p-resizable-column:last-child .p-column-resizer { - display: none; - } - - .p-datatable .p-column-resizer { - display: block; - position: absolute; - top: 0; - right: 0; - margin: 0; - width: 0.5rem; - height: 100%; - padding: 0px; - cursor: col-resize; - border: 1px solid transparent; - } - - .p-datatable .p-column-header-content { - display: flex; - align-items: center; - } - - .p-datatable .p-column-resizer-helper { - width: 1px; - position: absolute; - z-index: 10; - display: none; - } - - .p-datatable .p-row-editor-init, -.p-datatable .p-row-editor-save, -.p-datatable .p-row-editor-cancel { - display: inline-flex; - align-items: center; - justify-content: center; - overflow: hidden; - position: relative; - } - - /* Expand */ - .p-datatable .p-row-toggler { - display: inline-flex; - align-items: center; - justify-content: center; - overflow: hidden; - position: relative; - } - - /* Reorder */ - .p-datatable-reorder-indicator-up, -.p-datatable-reorder-indicator-down { - position: absolute; - display: none; - } - - .p-reorderable-column, -.p-datatable-reorderablerow-handle { - cursor: move; - } - - /* Loader */ - .p-datatable .p-datatable-loading-overlay { - position: absolute; - display: flex; - align-items: center; - justify-content: center; - z-index: 2; - } - - /* Filter */ - .p-column-filter-row { - display: flex; - align-items: center; - width: 100%; - } - - .p-column-filter-menu { - display: inline-flex; - margin-left: auto; - } - - .p-column-filter-row .p-column-filter-element { - flex: 1 1 auto; - width: 1%; - } - - .p-column-filter-menu-button, -.p-column-filter-clear-button { - display: inline-flex; - justify-content: center; - align-items: center; - cursor: pointer; - text-decoration: none; - overflow: hidden; - position: relative; - } - - .p-column-filter-row-items { - margin: 0; - padding: 0; - list-style: none; - } - - .p-column-filter-row-item { - cursor: pointer; - } - - .p-column-filter-add-button, -.p-column-filter-remove-button { - justify-content: center; - } - - .p-column-filter-add-button .p-button-label, -.p-column-filter-remove-button .p-button-label { - flex-grow: 0; - } - - .p-column-filter-buttonbar { - display: flex; - align-items: center; - justify-content: space-between; - } - - .p-column-filter-buttonbar .p-button:not(.p-button-icon-only) { - width: auto; - } - - /* Responsive */ - .p-datatable .p-datatable-tbody > tr > td > .p-column-title { - display: none; - } - - /* VirtualScroller */ - .p-datatable-virtualscroller-spacer { - display: flex; - } - - .p-datatable .p-virtualscroller .p-virtualscroller-loading { - transform: none !important; - min-height: 0; - position: sticky; - top: 0; - left: 0; - } - - .p-datatable .p-paginator-top { - border-width: 0 0 1px 0; - border-radius: 0; - } - .p-datatable .p-paginator-bottom { - border-width: 0 0 1px 0; - border-radius: 0; - } - .p-datatable .p-datatable-header { - background: #18181b; - color: #ffffff; - border: 1px solid #27272a; - border-width: 0 0 1px 0; - padding: 0.75rem 1rem; - font-weight: 600; - } - .p-datatable .p-datatable-footer { - background: #18181b; - color: #ffffff; - border: 1px solid #27272a; - border-width: 0 0 1px 0; - padding: 0.75rem 1rem; - font-weight: 600; - } - .p-datatable .p-datatable-thead > tr > th { - text-align: left; - padding: 0.75rem 1rem; - border: 1px solid #27272a; - border-width: 0 0 1px 0; - font-weight: 600; - color: #ffffff; - background: #18181b; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-datatable .p-datatable-tfoot > tr > td { - text-align: left; - padding: 0.75rem 1rem; - border: 1px solid #27272a; - border-width: 0 0 1px 0; - font-weight: 600; - color: #ffffff; - background: #18181b; - } - .p-datatable .p-sortable-column .p-sortable-column-icon { - color: #a1a1aa; - margin-left: 0.5rem; - } - .p-datatable .p-sortable-column .p-sortable-column-badge { - border-radius: 50%; - height: 1rem; - min-width: 1rem; - line-height: 1rem; - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - margin-left: 0.5rem; - } - .p-datatable .p-sortable-column:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - color: #ffffff; - } - .p-datatable .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon { - color: #ffffff; - } - .p-datatable .p-sortable-column.p-highlight { - background: rgba(167, 139, 250, 0.16); - color: rgba(255, 255, 255, 0.87); - } - .p-datatable .p-sortable-column.p-highlight .p-sortable-column-icon { - color: rgba(255, 255, 255, 0.87); - } - .p-datatable .p-sortable-column.p-highlight:hover { - background: rgba(167, 139, 250, 0.16); - color: rgba(255, 255, 255, 0.87); - } - .p-datatable .p-sortable-column.p-highlight:hover .p-sortable-column-icon { - color: rgba(255, 255, 255, 0.87); - } - .p-datatable .p-sortable-column:focus-visible { - box-shadow: 0 none; - outline: 0 none; - } - .p-datatable .p-datatable-tbody > tr { - background: #18181b; - color: #ffffff; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-datatable .p-datatable-tbody > tr > td { - text-align: left; - border: 1px solid #27272a; - border-width: 0 0 1px 0; - padding: 0.75rem 1rem; - } - .p-datatable .p-datatable-tbody > tr > td .p-row-toggler, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-init, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-cancel { - width: 1.75rem; - height: 1.75rem; - color: #a1a1aa; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-datatable .p-datatable-tbody > tr > td .p-row-toggler:enabled:hover, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-init:enabled:hover, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save:enabled:hover, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-cancel:enabled:hover { - color: #ffffff; - border-color: transparent; - background: rgba(255, 255, 255, 0.03); - } - .p-datatable .p-datatable-tbody > tr > td .p-row-toggler:focus-visible, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-init:focus-visible, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save:focus-visible, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-cancel:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-datatable .p-datatable-tbody > tr > td .p-row-editor-save { - margin-right: 0.5rem; - } - .p-datatable .p-datatable-tbody > tr > td > .p-column-title { - font-weight: 600; - } - .p-datatable .p-datatable-tbody > tr:focus-visible { - outline: 0.15rem solid var(--p-focus-ring-color); - outline-offset: -0.15rem; - } - .p-datatable .p-datatable-tbody > tr.p-highlight { - background: rgba(167, 139, 250, 0.16); - color: rgba(255, 255, 255, 0.87); - } - .p-datatable .p-datatable-tbody > tr.p-highlight-contextmenu { - outline: 0.15rem solid var(--p-focus-ring-color); - outline-offset: -0.15rem; - } - .p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-top > td { - box-shadow: inset 0 2px 0 0 rgba(167, 139, 250, 0.16); - } - .p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-bottom > td { - box-shadow: inset 0 -2px 0 0 rgba(167, 139, 250, 0.16); - } - .p-datatable.p-datatable-hoverable-rows .p-datatable-tbody > tr:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - color: #ffffff; - } - .p-datatable .p-column-resizer-helper { - background: #a78bfa; - } - .p-datatable.p-datatable-scrollable > .p-datatable-wrapper > .p-datatable-table > .p-datatable-thead, -.p-datatable.p-datatable-scrollable > .p-datatable-wrapper > .p-datatable-table > .p-datatable-tfoot, .p-datatable.p-datatable-scrollable > .p-datatable-wrapper > .p-virtualscroller > .p-datatable-table > .p-datatable-thead, -.p-datatable.p-datatable-scrollable > .p-datatable-wrapper > .p-virtualscroller > .p-datatable-table > .p-datatable-tfoot { - background-color: #18181b; - } - .p-datatable .p-datatable-loading-icon { - font-size: 2rem; - } - .p-datatable .p-datatable-loading-icon.p-icon { - width: 2rem; - height: 2rem; - } - .p-datatable.p-datatable-gridlines .p-datatable-header { - border-width: 1px 1px 0 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-footer { - border-width: 0 1px 1px 1px; - } - .p-datatable.p-datatable-gridlines .p-paginator-top { - border-width: 0 1px 0 1px; - } - .p-datatable.p-datatable-gridlines .p-paginator-bottom { - border-width: 0 1px 1px 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-thead > tr > th { - border-width: 1px 0 1px 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-thead > tr > th:last-child { - border-width: 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-tbody > tr > td { - border-width: 1px 0 0 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-tbody > tr > td:last-child { - border-width: 1px 1px 0 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-tbody > tr:last-child > td { - border-width: 1px 0 1px 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-tbody > tr:last-child > td:last-child { - border-width: 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-tfoot > tr > td { - border-width: 1px 0 1px 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-tfoot > tr > td:last-child { - border-width: 1px 1px 1px 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-thead + .p-datatable-tfoot > tr > td { - border-width: 0 0 1px 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-thead + .p-datatable-tfoot > tr > td:last-child { - border-width: 0 1px 1px 1px; - } - .p-datatable.p-datatable-gridlines:has(.p-datatable-thead):has(.p-datatable-tbody) .p-datatable-tbody > tr > td { - border-width: 0 0 1px 1px; - } - .p-datatable.p-datatable-gridlines:has(.p-datatable-thead):has(.p-datatable-tbody) .p-datatable-tbody > tr > td:last-child { - border-width: 0 1px 1px 1px; - } - .p-datatable.p-datatable-gridlines:has(.p-datatable-tbody):has(.p-datatable-tfoot) .p-datatable-tbody > tr:last-child > td { - border-width: 0 0 0 1px; - } - .p-datatable.p-datatable-gridlines:has(.p-datatable-tbody):has(.p-datatable-tfoot) .p-datatable-tbody > tr:last-child > td:last-child { - border-width: 0 1px 0 1px; - } - .p-datatable.p-datatable-striped .p-datatable-tbody > tr.p-row-odd { - background: #1f1f22; - } - .p-datatable.p-datatable-striped .p-datatable-tbody > tr.p-row-odd.p-highlight { - background: rgba(167, 139, 250, 0.16); - color: rgba(255, 255, 255, 0.87); - } - .p-datatable.p-datatable-striped .p-datatable-tbody > tr.p-row-odd.p-highlight .p-row-toggler { - color: rgba(255, 255, 255, 0.87); - } - .p-datatable.p-datatable-striped .p-datatable-tbody > tr.p-row-odd.p-highlight .p-row-toggler:hover { - color: rgba(255, 255, 255, 0.87); - } - .p-datatable.p-datatable-sm .p-datatable-header { - padding: 0.375rem 0.5rem; - } - .p-datatable.p-datatable-sm .p-datatable-thead > tr > th { - padding: 0.375rem 0.5rem; - } - .p-datatable.p-datatable-sm .p-datatable-tbody > tr > td { - padding: 0.375rem 0.5rem; - } - .p-datatable.p-datatable-sm .p-datatable-tfoot > tr > td { - padding: 0.375rem 0.5rem; - } - .p-datatable.p-datatable-sm .p-datatable-footer { - padding: 0.375rem 0.5rem; - } - .p-datatable.p-datatable-lg .p-datatable-header { - padding: 0.9375rem 1.25rem; - } - .p-datatable.p-datatable-lg .p-datatable-thead > tr > th { - padding: 0.9375rem 1.25rem; - } - .p-datatable.p-datatable-lg .p-datatable-tbody > tr > td { - padding: 0.9375rem 1.25rem; - } - .p-datatable.p-datatable-lg .p-datatable-tfoot > tr > td { - padding: 0.9375rem 1.25rem; - } - .p-datatable.p-datatable-lg .p-datatable-footer { - padding: 0.9375rem 1.25rem; - } - - .p-dataview .p-paginator-top { - border-width: 0 0 1px 0; - border-radius: 0; - } - .p-dataview .p-paginator-bottom { - border-width: 0 0 1px 0; - border-radius: 0; - } - .p-dataview .p-dataview-header { - background: #18181b; - color: #ffffff; - border: 1px solid #27272a; - border-width: 0 0 1px 0; - padding: 0.75rem 1rem; - font-weight: 600; - } - .p-dataview .p-dataview-content { - background: #18181b; - color: #ffffff; - border: 0 none; - padding: 0; - } - .p-dataview .p-dataview-footer { - background: #18181b; - color: #ffffff; - border: 1px solid #27272a; - border-width: 0 0 1px 0; - padding: 0.75rem 1rem; - font-weight: 600; - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; - } - - .p-column-filter-row .p-column-filter-menu-button, -.p-column-filter-row .p-column-filter-clear-button { - margin-left: 0.5rem; - } - - .p-column-filter-menu-button { - width: 1.75rem; - height: 1.75rem; - color: #a1a1aa; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-column-filter-menu-button:hover { - color: #ffffff; - border-color: transparent; - background: rgba(255, 255, 255, 0.03); - } - .p-column-filter-menu-button.p-column-filter-menu-button-open, .p-column-filter-menu-button.p-column-filter-menu-button-open:hover { - background: rgba(255, 255, 255, 0.03); - color: #ffffff; - } - .p-column-filter-menu-button.p-column-filter-menu-button-active, .p-column-filter-menu-button.p-column-filter-menu-button-active:hover { - background: rgba(167, 139, 250, 0.16); - color: rgba(255, 255, 255, 0.87); - } - .p-column-filter-menu-button:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-column-filter-clear-button { - width: 1.75rem; - height: 1.75rem; - color: #a1a1aa; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-column-filter-clear-button:hover { - color: #ffffff; - border-color: transparent; - background: rgba(255, 255, 255, 0.03); - } - .p-column-filter-clear-button:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-column-filter-overlay { - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - border-radius: 6px; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - min-width: 12.5rem; - } - .p-column-filter-overlay .p-column-filter-row-items { - padding: 0.25rem 0.25rem; - } - .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item { - margin: 2px 0; - padding: 0.5rem 0.75rem; - border: 0 none; - color: #ffffff; - background: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item:first-child { - margin-top: 0; - } - .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item:last-child { - margin-bottom: 0; - } - .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item:not(.p-highlight):not(.p-disabled):hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: 0 none; - } - .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-separator { - border-top: 1px solid #3f3f46; - margin: 2px 0; - } - - .p-column-filter-overlay-menu .p-column-filter-operator { - padding: 0.5rem 0.5rem 0 0.5rem; - border-bottom: 0 none; - color: #ffffff; - background: #18181b; - margin: 0 0 0 0; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-column-filter-overlay-menu .p-column-filter-constraint { - padding: 0 1.125rem 1.125rem 1.125rem; - border-bottom: 1px solid #3f3f46; - } - .p-column-filter-overlay-menu .p-column-filter-constraint .p-column-filter-matchmode-dropdown { - margin-bottom: 0.5rem; - } - .p-column-filter-overlay-menu .p-column-filter-constraint .p-column-filter-remove-button { - margin-top: 0.5rem; - } - .p-column-filter-overlay-menu .p-column-filter-constraint:last-child { - border-bottom: 0 none; - } - .p-column-filter-overlay-menu .p-column-filter-add-rule { - padding: 0 1.125rem 1.125rem 1.125rem; - } - .p-column-filter-overlay-menu .p-column-filter-buttonbar { - padding: 0 1.125rem 1.125rem 1.125rem; - } - - .p-orderlist { - display: flex; - } - - .p-orderlist-controls { - display: flex; - flex-direction: column; - justify-content: center; - } - - .p-orderlist-list-container { - flex: 1 1 auto; - } - - .p-orderlist-list { - list-style-type: none; - margin: 0; - padding: 0; - overflow: auto; - min-height: 12rem; - max-height: 24rem; - } - - .p-orderlist-item { - cursor: pointer; - overflow: hidden; - position: relative; - } - - .p-orderlist.p-state-disabled .p-orderlist-item, -.p-orderlist.p-state-disabled .p-button { - cursor: default; - } - - .p-orderlist.p-state-disabled .p-orderlist-list { - overflow: hidden; - } - - .p-orderlist .p-orderlist-controls { - padding: 0 1.125rem 1.125rem 1.125rem; - } - .p-orderlist .p-orderlist-controls .p-button { - margin-bottom: 0.5rem; - } - .p-orderlist .p-orderlist-list-container { - background: #18181b; - border: 1px solid #3f3f46; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-orderlist .p-orderlist-list-container.p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #52525b; - } - .p-orderlist .p-orderlist-header { - color: #ffffff; - padding: 1.125rem; - font-weight: 600; - } - .p-orderlist .p-orderlist-list { - color: #ffffff; - padding: 0.25rem 0.25rem; - outline: 0 none; - } - .p-orderlist .p-orderlist-list:not(:first-child) { - border-top: 1px solid #3f3f46; - } - .p-orderlist .p-orderlist-list .p-orderlist-item { - padding: 0.5rem 0.75rem; - margin: 2px 0; - border: 0 none; - color: #ffffff; - background: transparent; - transition: transform 0.2s, background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-orderlist .p-orderlist-list .p-orderlist-item:first-child { - margin-top: 0; - } - .p-orderlist .p-orderlist-list .p-orderlist-item:last-child { - margin-bottom: 0; - } - .p-orderlist .p-orderlist-list .p-orderlist-item:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - color: #ffffff; - } - .p-orderlist .p-orderlist-list .p-orderlist-item:not(.p-highlight):hover.p-focus { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-orderlist .p-orderlist-list .p-orderlist-item.p-focus { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-orderlist .p-orderlist-list .p-orderlist-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-orderlist .p-orderlist-list .p-orderlist-item.p-highlight.p-focus { - background: rgba(167, 139, 250, 0.24); - } - .p-orderlist.p-orderlist-striped .p-orderlist-list .p-orderlist-item:nth-child(even) { - background: #1f1f22; - } - .p-orderlist.p-orderlist-striped .p-orderlist-list .p-orderlist-item:nth-child(even):hover { - background: rgba(255, 255, 255, 0.03); - } - - .p-organizationchart-table { - border-spacing: 0; - border-collapse: separate; - margin: 0 auto; - } - - .p-organizationchart-table > tbody > tr > td { - text-align: center; - vertical-align: top; - padding: 0 0.75rem; - } - - .p-organizationchart-node-content { - display: inline-block; - position: relative; - } - - .p-organizationchart-node-content .p-node-toggler { - position: absolute; - bottom: -0.75rem; - margin-left: -0.75rem; - z-index: 2; - left: 50%; - user-select: none; - cursor: pointer; - width: 1.5rem; - height: 1.5rem; - text-decoration: none; - } - - .p-organizationchart-node-content .p-node-toggler .p-node-toggler-icon { - position: relative; - top: 0.25rem; - } - - .p-organizationchart-line-down { - margin: 0 auto; - height: 20px; - width: 1px; - } - - .p-organizationchart-line-right { - border-radius: 0px; - } - - .p-organizationchart-line-left { - border-radius: 0; - } - - .p-organizationchart-selectable-node { - cursor: pointer; - } - - .p-organizationchart .p-organizationchart-node-content.p-organizationchart-selectable-node:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - color: #ffffff; - } - .p-organizationchart .p-organizationchart-node-content.p-highlight { - background: rgba(167, 139, 250, 0.16); - color: rgba(255, 255, 255, 0.87); - } - .p-organizationchart .p-organizationchart-node-content.p-highlight .p-node-toggler i { - color: rgba(74, 17, 245, 0.16); - } - .p-organizationchart .p-organizationchart-line-down { - background: #3f3f46; - } - .p-organizationchart .p-organizationchart-line-left { - border-right: 1px solid #3f3f46; - border-color: #3f3f46; - } - .p-organizationchart .p-organizationchart-line-top { - border-top: 1px solid #3f3f46; - border-color: #3f3f46; - } - .p-organizationchart .p-organizationchart-node-content { - border: 1px solid #3f3f46; - background: #18181b; - color: #ffffff; - padding: 0 1.125rem 1.125rem 1.125rem; - } - .p-organizationchart .p-organizationchart-node-content .p-node-toggler { - background: inherit; - color: inherit; - border-radius: 50%; - outline-color: transparent; - } - .p-organizationchart .p-organizationchart-node-content .p-node-toggler:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-paginator-default { - display: flex; - } - - .p-paginator { - display: flex; - align-items: center; - justify-content: center; - flex-wrap: wrap; - } - - .p-paginator-left-content { - margin-right: auto; - } - - .p-paginator-right-content { - margin-left: auto; - } - - .p-paginator-page, -.p-paginator-next, -.p-paginator-last, -.p-paginator-first, -.p-paginator-prev, -.p-paginator-current { - cursor: pointer; - display: inline-flex; - align-items: center; - justify-content: center; - line-height: 1; - user-select: none; - overflow: hidden; - position: relative; - } - - .p-paginator-element:focus { - z-index: 1; - position: relative; - } - - .p-paginator { - background: #18181b; - color: #ffffff; - border: solid #3f3f46; - border-width: 0; - padding: 0.5rem 1rem; - border-radius: 6px; - } - .p-paginator .p-paginator-first, -.p-paginator .p-paginator-prev, -.p-paginator .p-paginator-next, -.p-paginator .p-paginator-last { - background-color: transparent; - border: 0 none; - color: #a1a1aa; - min-width: 2.5rem; - height: 2.5rem; - margin: 0.143rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 50%; - } - .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):hover, -.p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):hover, -.p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):hover, -.p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - border-color: transparent; - color: #ffffff; - } - .p-paginator .p-paginator-first { - border-top-left-radius: 50%; - border-bottom-left-radius: 50%; - } - .p-paginator .p-paginator-last { - border-top-right-radius: 50%; - border-bottom-right-radius: 50%; - } - .p-paginator .p-dropdown { - margin-left: 0.5rem; - margin-right: 0.5rem; - height: 2.5rem; - } - .p-paginator .p-dropdown .p-dropdown-label { - padding-right: 0; - } - .p-paginator .p-paginator-page-input { - margin-left: 0.5rem; - margin-right: 0.5rem; - } - .p-paginator .p-paginator-page-input .p-inputtext { - max-width: 2.5rem; - } - .p-paginator .p-paginator-current { - background-color: transparent; - border: 0 none; - color: #a1a1aa; - min-width: 2.5rem; - height: 2.5rem; - margin: 0.143rem; - padding: 0 0.5rem; - } - .p-paginator .p-paginator-pages .p-paginator-page { - background-color: transparent; - border: 0 none; - color: #a1a1aa; - min-width: 2.5rem; - height: 2.5rem; - margin: 0.143rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 50%; - } - .p-paginator .p-paginator-pages .p-paginator-page.p-highlight { - background: rgba(167, 139, 250, 0.16); - border-color: rgba(167, 139, 250, 0.16); - color: rgba(255, 255, 255, 0.87); - } - .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - border-color: transparent; - color: #ffffff; - } - - .p-picklist { - display: flex; - } - - .p-picklist-buttons { - display: flex; - flex-direction: column; - justify-content: center; - } - - .p-picklist-list-wrapper { - flex: 1 1 50%; - } - - .p-picklist-list { - list-style-type: none; - margin: 0; - padding: 0; - overflow: auto; - min-height: 12rem; - max-height: 24rem; - } - - .p-picklist-item { - cursor: pointer; - overflow: hidden; - position: relative; - } - - .p-picklist-item.p-picklist-flip-enter-active.p-picklist-flip-enter-to, -.p-picklist-item.p-picklist-flip-leave-active.p-picklist-flip-leave-to { - transition: none; - } - - .p-picklist .p-picklist-buttons { - padding: 0 1.125rem 1.125rem 1.125rem; - } - .p-picklist .p-picklist-buttons .p-button { - margin-bottom: 0.5rem; - } - .p-picklist .p-picklist-list-wrapper { - background: #18181b; - border: 1px solid #3f3f46; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-picklist .p-picklist-list-wrapper.p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #52525b; - } - .p-picklist .p-picklist-header { - color: #ffffff; - padding: 1.125rem; - font-weight: 600; - } - .p-picklist .p-picklist-list { - color: #ffffff; - padding: 0.25rem 0.25rem; - outline: 0 none; - } - .p-picklist .p-picklist-list:not(:first-child) { - border-top: 1px solid #3f3f46; - } - .p-picklist .p-picklist-list .p-picklist-item { - padding: 0.5rem 0.75rem; - margin: 2px 0; - border: 0 none; - color: #ffffff; - background: transparent; - transition: transform 0.2s, background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-picklist .p-picklist-list .p-picklist-item:first-child { - margin-top: 0; - } - .p-picklist .p-picklist-list .p-picklist-item:last-child { - margin-bottom: 0; - } - .p-picklist .p-picklist-list .p-picklist-item:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - color: #ffffff; - } - .p-picklist .p-picklist-list .p-picklist-item:not(.p-highlight):hover.p-focus { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-picklist .p-picklist-list .p-picklist-item.p-focus { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-picklist .p-picklist-list .p-picklist-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-picklist .p-picklist-list .p-picklist-item.p-highlight.p-focus { - background: rgba(167, 139, 250, 0.24); - } - .p-picklist.p-picklist-striped .p-picklist-list .p-picklist-item:nth-child(even) { - background: #1f1f22; - } - .p-picklist.p-picklist-striped .p-picklist-list .p-picklist-item:nth-child(even):hover { - background: rgba(255, 255, 255, 0.03); - } - - .p-timeline { - display: flex; - flex-grow: 1; - flex-direction: column; - } - - .p-timeline-left .p-timeline-event-opposite { - text-align: right; - } - - .p-timeline-left .p-timeline-event-content { - text-align: left; - } - - .p-timeline-right .p-timeline-event { - flex-direction: row-reverse; - } - - .p-timeline-right .p-timeline-event-opposite { - text-align: left; - } - - .p-timeline-right .p-timeline-event-content { - text-align: right; - } - - .p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(even) { - flex-direction: row-reverse; - } - - .p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(odd) .p-timeline-event-opposite { - text-align: right; - } - - .p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(odd) .p-timeline-event-content { - text-align: left; - } - - .p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(even) .p-timeline-event-opposite { - text-align: left; - } - - .p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(even) .p-timeline-event-content { - text-align: right; - } - - .p-timeline-event { - display: flex; - position: relative; - min-height: 70px; - } - - .p-timeline-event:last-child { - min-height: 0; - } - - .p-timeline-event-opposite { - flex: 1; - padding: 0 1rem; - } - - .p-timeline-event-content { - flex: 1; - padding: 0 1rem; - } - - .p-timeline-event-separator { - flex: 0; - display: flex; - align-items: center; - flex-direction: column; - } - - .p-timeline-event-marker { - display: flex; - align-self: baseline; - } - - .p-timeline-event-connector { - flex-grow: 1; - } - - .p-timeline-horizontal { - flex-direction: row; - } - - .p-timeline-horizontal .p-timeline-event { - flex-direction: column; - flex: 1; - } - - .p-timeline-horizontal .p-timeline-event:last-child { - flex: 0; - } - - .p-timeline-horizontal .p-timeline-event-separator { - flex-direction: row; - } - - .p-timeline-horizontal .p-timeline-event-connector { - width: 100%; - } - - .p-timeline-bottom .p-timeline-event { - flex-direction: column-reverse; - } - - .p-timeline-horizontal.p-timeline-alternate .p-timeline-event:nth-child(even) { - flex-direction: column-reverse; - } - - .p-timeline .p-timeline-event-marker { - border: 2px solid #3f3f46; - border-radius: 50%; - width: 1.125rem; - height: 1.125rem; - background-color: #020617; - } - .p-timeline .p-timeline-event-connector { - background-color: #3f3f46; - } - .p-timeline.p-timeline-vertical .p-timeline-event-opposite, -.p-timeline.p-timeline-vertical .p-timeline-event-content { - padding: 0 1rem; - } - .p-timeline.p-timeline-vertical .p-timeline-event-connector { - width: 2px; - } - .p-timeline.p-timeline-horizontal .p-timeline-event-opposite, -.p-timeline.p-timeline-horizontal .p-timeline-event-content { - padding: 1rem 0; - } - .p-timeline.p-timeline-horizontal .p-timeline-event-connector { - height: 2px; - } - - .p-tree-container { - margin: 0; - padding: 0; - list-style-type: none; - overflow: auto; - } - - .p-treenode-children { - margin: 0; - padding: 0; - list-style-type: none; - } - - .p-tree-wrapper { - overflow: auto; - } - - .p-treenode-selectable { - cursor: pointer; - user-select: none; - } - - .p-tree-toggler { - cursor: pointer; - user-select: none; - display: inline-flex; - align-items: center; - justify-content: center; - overflow: hidden; - position: relative; - flex-shrink: 0; - } - - .p-treenode-leaf > .p-treenode-content .p-tree-toggler { - visibility: hidden; - } - - .p-treenode-content { - display: flex; - align-items: center; - } - - .p-tree-filter { - width: 100%; - } - - .p-tree-filter-container { - position: relative; - display: block; - width: 100%; - } - - .p-tree-filter-icon { - position: absolute; - top: 50%; - margin-top: -0.5rem; - } - - .p-tree-loading { - position: relative; - min-height: 4rem; - } - - .p-tree .p-tree-loading-overlay { - position: absolute; - z-index: 1; - display: flex; - align-items: center; - justify-content: center; - } - - .p-tree-flex-scrollable { - display: flex; - flex: 1; - height: 100%; - flex-direction: column; - } - - .p-tree-flex-scrollable .p-tree-wrapper { - flex: 1; - } - - .p-tree { - border: 1px solid #3f3f46; - background: #18181b; - color: #ffffff; - padding: 0 1.125rem 1.125rem 1.125rem; - border-radius: 6px; - } - .p-tree .p-tree-container .p-treenode { - padding: 0 0; - outline: 0 none; - } - .p-tree .p-tree-container .p-treenode:focus > .p-treenode-content { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: 0 none; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content { - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - padding: 0.25rem 0.5rem; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler { - margin-right: 0.5rem; - width: 1.75rem; - height: 1.75rem; - color: #a1a1aa; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler:enabled:hover { - color: #ffffff; - border-color: transparent; - background: rgba(255, 255, 255, 0.03); - } - .p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content .p-treenode-icon { - margin-right: 0.5rem; - color: #a1a1aa; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content .p-checkbox { - margin-right: 0.5rem; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content .p-checkbox.p-indeterminate .p-checkbox-icon { - color: #ffffff; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight { - background: rgba(167, 139, 250, 0.16); - color: rgba(255, 255, 255, 0.87); - } - .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-tree-toggler, -.p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-treenode-icon { - color: rgba(255, 255, 255, 0.87); - } - .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-tree-toggler:hover, -.p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-treenode-icon:hover { - color: rgba(255, 255, 255, 0.87); - } - .p-tree .p-tree-container .p-treenode .p-treenode-content.p-treenode-selectable:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - color: #ffffff; - } - .p-tree .p-tree-filter-container { - margin-bottom: 0.5rem; - } - .p-tree .p-tree-filter-container .p-tree-filter { - width: 100%; - padding-right: 1.75rem; - } - .p-tree .p-tree-filter-container .p-tree-filter-icon { - right: 0.75rem; - color: #a1a1aa; - } - .p-tree .p-treenode-children { - padding: 0 0 0 1rem; - } - .p-tree .p-tree-loading-icon { - font-size: 2rem; - } - .p-tree .p-tree-loading-icon.p-icon { - width: 2rem; - height: 2rem; - } - - .p-treetable { - position: relative; - } - - .p-treetable table { - border-collapse: collapse; - width: 100%; - table-layout: fixed; - } - - .p-treetable .p-sortable-column { - cursor: pointer; - user-select: none; - } - - .p-treetable-responsive-scroll > .p-treetable-wrapper { - overflow-x: auto; - } - - .p-treetable-responsive-scroll > .p-treetable-wrapper > table, -.p-treetable-auto-layout > .p-treetable-wrapper > table { - table-layout: auto; - } - - .p-treetable-hoverable-rows .p-treetable-tbody > tr { - cursor: pointer; - } - - .p-treetable-toggler { - cursor: pointer; - user-select: none; - display: inline-flex; - align-items: center; - justify-content: center; - vertical-align: middle; - overflow: hidden; - position: relative; - } - - .p-treetable-toggler + .p-checkbox { - vertical-align: middle; - } - - .p-treetable-toggler + .p-checkbox + span { - vertical-align: middle; - } - - /* Resizable */ - .p-treetable-resizable > .p-treetable-wrapper { - overflow-x: auto; - } - - .p-treetable-resizable .p-treetable-thead > tr > th, -.p-treetable-resizable .p-treetable-tfoot > tr > td, -.p-treetable-resizable .p-treetable-tbody > tr > td { - overflow: hidden; - } - - .p-treetable-resizable .p-resizable-column:not(.p-frozen-column) { - background-clip: padding-box; - position: relative; - } - - .p-treetable-resizable-fit .p-resizable-column:last-child .p-column-resizer { - display: none; - } - - .p-treetable .p-column-resizer { - display: block; - position: absolute; - top: 0; - right: 0; - margin: 0; - width: 0.5rem; - height: 100%; - padding: 0px; - cursor: col-resize; - border: 1px solid transparent; - } - - .p-treetable .p-column-resizer-helper { - width: 1px; - position: absolute; - z-index: 10; - display: none; - } - - .p-treetable .p-treetable-loading-overlay { - position: absolute; - display: flex; - align-items: center; - justify-content: center; - z-index: 2; - } - - /* Scrollable */ - .p-treetable-scrollable .p-treetable-wrapper { - position: relative; - overflow: auto; - } - - .p-treetable-scrollable .p-treetable-table { - display: block; - } - - .p-treetable-scrollable .p-treetable-thead, -.p-treetable-scrollable .p-treetable-tbody, -.p-treetable-scrollable .p-treetable-tfoot { - display: block; - } - - .p-treetable-scrollable .p-treetable-thead > tr, -.p-treetable-scrollable .p-treetable-tbody > tr, -.p-treetable-scrollable .p-treetable-tfoot > tr { - display: flex; - flex-wrap: nowrap; - width: 100%; - } - - .p-treetable-scrollable .p-treetable-thead > tr > th, -.p-treetable-scrollable .p-treetable-tbody > tr > td, -.p-treetable-scrollable .p-treetable-tfoot > tr > td { - display: flex; - flex: 1 1 0; - align-items: center; - } - - .p-treetable-scrollable .p-treetable-thead { - position: sticky; - top: 0; - z-index: 1; - } - - .p-treetable-scrollable .p-treetable-tfoot { - position: sticky; - bottom: 0; - z-index: 1; - } - - .p-treetable-scrollable .p-frozen-column { - position: sticky; - background: inherit; - } - - .p-treetable-scrollable th.p-frozen-column { - z-index: 1; - } - - .p-treetable-scrollable-both .p-treetable-thead > tr > th, -.p-treetable-scrollable-both .p-treetable-tbody > tr > td, -.p-treetable-scrollable-both .p-treetable-tfoot > tr > td, -.p-treetable-scrollable-horizontal .p-treetable-thead > tr > th .p-treetable-scrollable-horizontal .p-treetable-tbody > tr > td, -.p-treetable-scrollable-horizontal .p-treetable-tfoot > tr > td { - flex: 0 0 auto; - } - - .p-treetable-flex-scrollable { - display: flex; - flex-direction: column; - height: 100%; - } - - .p-treetable-flex-scrollable .p-treetable-wrapper { - display: flex; - flex-direction: column; - flex: 1; - height: 100%; - } - - .p-treetable .p-paginator-top { - border-width: 0 0 1px 0; - border-radius: 0; - } - .p-treetable .p-paginator-bottom { - border-width: 0 0 1px 0; - border-radius: 0; - } - .p-treetable .p-treetable-header { - background: #18181b; - color: #ffffff; - border: 1px solid #27272a; - border-width: 0 0 1px 0; - padding: 0.75rem 1rem; - font-weight: 600; - } - .p-treetable .p-treetable-footer { - background: #18181b; - color: #ffffff; - border: 1px solid #27272a; - border-width: 0 0 1px 0; - padding: 0.75rem 1rem; - font-weight: 600; - } - .p-treetable .p-treetable-thead > tr > th { - text-align: left; - padding: 0.75rem 1rem; - border: 1px solid #27272a; - border-width: 0 0 1px 0; - font-weight: 600; - color: #ffffff; - background: #18181b; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-treetable .p-treetable-tfoot > tr > td { - text-align: left; - padding: 0.75rem 1rem; - border: 1px solid #27272a; - border-width: 0 0 1px 0; - font-weight: 600; - color: #ffffff; - background: #18181b; - } - .p-treetable .p-sortable-column { - outline-color: var(--p-focus-ring-color); - } - .p-treetable .p-sortable-column .p-sortable-column-icon { - color: #a1a1aa; - margin-left: 0.5rem; - } - .p-treetable .p-sortable-column .p-sortable-column-badge { - border-radius: 50%; - height: 1rem; - min-width: 1rem; - line-height: 1rem; - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - margin-left: 0.5rem; - } - .p-treetable .p-sortable-column:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - color: #ffffff; - } - .p-treetable .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon { - color: #ffffff; - } - .p-treetable .p-sortable-column.p-highlight { - background: rgba(167, 139, 250, 0.16); - color: rgba(255, 255, 255, 0.87); - } - .p-treetable .p-sortable-column.p-highlight .p-sortable-column-icon { - color: rgba(255, 255, 255, 0.87); - } - .p-treetable .p-treetable-tbody > tr { - background: #18181b; - color: #ffffff; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-treetable .p-treetable-tbody > tr > td { - text-align: left; - border: 1px solid #27272a; - border-width: 0 0 1px 0; - padding: 0.75rem 1rem; - } - .p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler { - width: 1.75rem; - height: 1.75rem; - color: #a1a1aa; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - margin-right: 0.5rem; - } - .p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:enabled:hover { - color: #ffffff; - border-color: transparent; - background: rgba(255, 255, 255, 0.03); - } - .p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler + .p-checkbox { - margin-right: 0.5rem; - } - .p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler + .p-checkbox.p-indeterminate .p-checkbox-icon { - color: #ffffff; - } - .p-treetable .p-treetable-tbody > tr:focus-visible { - outline: 0.15rem solid var(--p-focus-ring-color); - outline-offset: -0.15rem; - } - .p-treetable .p-treetable-tbody > tr.p-highlight { - background: rgba(167, 139, 250, 0.16); - color: rgba(255, 255, 255, 0.87); - } - .p-treetable .p-treetable-tbody > tr.p-highlight .p-treetable-toggler { - color: rgba(255, 255, 255, 0.87); - } - .p-treetable .p-treetable-tbody > tr.p-highlight .p-treetable-toggler:hover { - color: rgba(255, 255, 255, 0.87); - } - .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody > tr:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - color: #ffffff; - } - .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody > tr:not(.p-highlight):hover .p-treetable-toggler { - color: #ffffff; - } - .p-treetable .p-column-resizer-helper { - background: #a78bfa; - } - .p-treetable .p-treetable-scrollable-header, -.p-treetable .p-treetable-scrollable-footer { - background: #18181b; - } - .p-treetable .p-treetable-loading-icon { - font-size: 2rem; - } - .p-treetable .p-treetable-loading-icon.p-icon { - width: 2rem; - height: 2rem; - } - .p-treetable.p-treetable-gridlines .p-datatable-header { - border-width: 1px 1px 0 1px; - } - .p-treetable.p-treetable-gridlines .p-treetable-footer { - border-width: 0 1px 1px 1px; - } - .p-treetable.p-treetable-gridlines .p-treetable-top { - border-width: 0 1px 0 1px; - } - .p-treetable.p-treetable-gridlines .p-treetable-bottom { - border-width: 0 1px 1px 1px; - } - .p-treetable.p-treetable-gridlines .p-treetable-thead > tr > th { - border-width: 1px; - } - .p-treetable.p-treetable-gridlines .p-treetable-tbody > tr > td { - border-width: 1px; - } - .p-treetable.p-treetable-gridlines .p-treetable-tfoot > tr > td { - border-width: 1px; - } - .p-treetable.p-treetable-sm .p-treetable-header { - padding: 0.65625rem 0.875rem; - } - .p-treetable.p-treetable-sm .p-treetable-thead > tr > th { - padding: 0.375rem 0.5rem; - } - .p-treetable.p-treetable-sm .p-treetable-tbody > tr > td { - padding: 0.375rem 0.5rem; - } - .p-treetable.p-treetable-sm .p-treetable-tfoot > tr > td { - padding: 0.375rem 0.5rem; - } - .p-treetable.p-treetable-sm .p-treetable-footer { - padding: 0.375rem 0.5rem; - } - .p-treetable.p-treetable-lg .p-treetable-header { - padding: 0.9375rem 1.25rem; - } - .p-treetable.p-treetable-lg .p-treetable-thead > tr > th { - padding: 0.9375rem 1.25rem; - } - .p-treetable.p-treetable-lg .p-treetable-tbody > tr > td { - padding: 0.9375rem 1.25rem; - } - .p-treetable.p-treetable-lg .p-treetable-tfoot > tr > td { - padding: 0.9375rem 1.25rem; - } - .p-treetable.p-treetable-lg .p-treetable-footer { - padding: 0.9375rem 1.25rem; - } - - .p-accordion-header-action { - cursor: pointer; - display: flex; - align-items: center; - user-select: none; - position: relative; - text-decoration: none; - } - - .p-accordion-header-action:focus { - z-index: 1; - } - - .p-accordion-header-text { - line-height: 1; - } - - .p-accordion .p-accordion-header .p-accordion-header-link { - padding: 1.125rem 1.125rem 1.125rem 1.125rem; - border: 0 none; - color: #a1a1aa; - background: #18181b; - font-weight: 600; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-accordion .p-accordion-header .p-accordion-header-link .p-accordion-toggle-icon { - margin-right: 0.5rem; - } - .p-accordion .p-accordion-header:not(.p-disabled) .p-accordion-header-link:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -2px; - box-shadow: inset none; - } - .p-accordion .p-accordion-header:not(.p-highlight):not(.p-disabled):hover .p-accordion-header-link { - background: #18181b; - border-color: #18181b; - color: #ffffff; - } - .p-accordion .p-accordion-header:not(.p-disabled).p-highlight .p-accordion-header-link { - background: #18181b; - border-color: #18181b; - color: #ffffff; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - } - .p-accordion .p-accordion-header:not(.p-disabled).p-highlight:hover .p-accordion-header-link { - border-color: #18181b; - background: #18181b; - color: #ffffff; - } - .p-accordion .p-accordion-content { - padding: 0 1.125rem 1.125rem 1.125rem; - border: 0 none; - background: #18181b; - color: #ffffff; - border-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-accordion .p-accordion-tab { - margin-bottom: 0; - } - .p-accordion .p-accordion-tab .p-accordion-header .p-accordion-header-link { - border-radius: 0; - } - .p-accordion .p-accordion-tab .p-accordion-content { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - } - .p-accordion .p-accordion-tab:not(:first-child) .p-accordion-header .p-accordion-header-link { - border-top: 0 none; - } - .p-accordion .p-accordion-tab:not(:first-child) .p-accordion-header:not(.p-highlight):not(.p-disabled):hover .p-accordion-header-link, .p-accordion .p-accordion-tab:not(:first-child) .p-accordion-header:not(.p-disabled).p-highlight:hover .p-accordion-header-link { - border-top: 0 none; - } - .p-accordion .p-accordion-tab:first-child .p-accordion-header .p-accordion-header-link { - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-accordion .p-accordion-tab:last-child .p-accordion-header:not(.p-highlight) .p-accordion-header-link { - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-accordion .p-accordion-tab:last-child .p-accordion-content { - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - - .p-card { - background: #18181b; - color: #ffffff; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); - border-radius: 6px; - } - .p-card .p-card-body { - padding: 1.5rem; - } - .p-card .p-card-title { - font-size: 1.25rem; - font-weight: 600; - margin-bottom: 0.5rem; - } - .p-card .p-card-subtitle { - font-weight: 400; - margin-bottom: 0.5rem; - color: #a1a1aa; - } - .p-card .p-card-content { - padding: 0 0 0 0; - } - .p-card .p-card-footer { - padding: 0 0 0 0; - } - - .p-fieldset-legend > a, -.p-fieldset-legend > span { - display: flex; - align-items: center; - justify-content: center; - } - - .p-fieldset-toggleable .p-fieldset-legend a { - cursor: pointer; - user-select: none; - overflow: hidden; - position: relative; - text-decoration: none; - } - - .p-fieldset-legend-text { - line-height: 1; - } - - .p-fieldset { - border: 1px solid #3f3f46; - background: #18181b; - color: #ffffff; - border-radius: 6px; - } - .p-fieldset .p-fieldset-legend { - padding: 1.125rem; - border: 1px solid #3f3f46; - color: #ffffff; - background: #18181b; - font-weight: 600; - border-radius: 6px; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend { - padding: 0; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a { - padding: 1.125rem; - color: #ffffff; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a .p-fieldset-toggler { - margin-right: 0.5rem; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a:hover { - color: #ffffff; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend:hover { - background: rgba(255, 255, 255, 0.03); - border-color: #3f3f46; - color: #ffffff; - } - .p-fieldset .p-fieldset-content { - padding: 0 1.125rem 1.125rem 1.125rem; - } - - .p-divider-horizontal { - display: flex; - width: 100%; - position: relative; - align-items: center; - } - - .p-divider-horizontal:before { - position: absolute; - display: block; - top: 50%; - left: 0; - width: 100%; - content: ""; - } - - .p-divider-content { - z-index: 1; - } - - .p-divider-vertical { - min-height: 100%; - margin: 0 1rem; - display: flex; - position: relative; - justify-content: center; - } - - .p-divider-vertical:before { - position: absolute; - display: block; - top: 0; - left: 50%; - height: 100%; - content: ""; - } - - .p-divider.p-divider-solid.p-divider-horizontal:before { - border-top-style: solid; - } - .p-divider.p-divider-solid.p-divider-vertical:before { - border-left-style: solid; - } - .p-divider.p-divider-dashed.p-divider-horizontal:before { - border-top-style: dashed; - } - .p-divider.p-divider-dashed.p-divider-vertical:before { - border-left-style: dashed; - } - .p-divider.p-divider-dotted.p-divider-horizontal:before { - border-top-style: dotted; - } - .p-divider.p-divider-dotted.p-divider-vertical:before { - border-left-style: dotted; - } - - .p-divider .p-divider-content { - background-color: #18181b; - } - .p-divider.p-divider-horizontal { - margin: 1rem 0; - padding: 0 1rem; - } - .p-divider.p-divider-horizontal:before { - border-top: 1px solid #3f3f46; - } - .p-divider.p-divider-horizontal .p-divider-content { - padding: 0 0.5rem; - } - .p-divider.p-divider-vertical { - margin: 0 1rem; - padding: 1rem 0; - } - .p-divider.p-divider-vertical:before { - border-left: 1px solid #3f3f46; - } - .p-divider.p-divider-vertical .p-divider-content { - padding: 0.5rem 0; - } - - .p-panel-header { - display: flex; - justify-content: space-between; - align-items: center; - } - - .p-panel-title { - line-height: 1; - } - - .p-panel-header-icon { - display: inline-flex; - justify-content: center; - align-items: center; - cursor: pointer; - text-decoration: none; - overflow: hidden; - position: relative; - } - - .p-panel .p-panel-header { - border: 1px solid #3f3f46; - padding: 1.125rem; - background: #18181b; - color: #ffffff; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-panel .p-panel-header .p-panel-title { - font-weight: 600; - } - .p-panel .p-panel-header .p-panel-header-icon { - width: 1.75rem; - height: 1.75rem; - color: #a1a1aa; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-panel .p-panel-header .p-panel-header-icon:enabled:hover { - color: #ffffff; - border-color: transparent; - background: rgba(255, 255, 255, 0.03); - } - .p-panel .p-panel-header .p-panel-header-icon:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-panel.p-panel-toggleable .p-panel-header { - padding: 0.75rem 1.125rem; - } - .p-panel .p-panel-content { - padding: 0 1.125rem 1.125rem 1.125rem; - border: 1px solid #3f3f46; - background: #18181b; - color: #ffffff; - border-top: 0 none; - } - .p-panel .p-panel-content:last-child { - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-panel .p-panel-footer { - padding: 0 1.125rem 1.125rem 1.125rem; - border: 1px solid #3f3f46; - background: #18181b; - color: #ffffff; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - border-top: 0 none; - } - - .p-scrollpanel-wrapper { - overflow: hidden; - width: 100%; - height: 100%; - position: relative; - z-index: 1; - float: left; - } - - .p-scrollpanel-content { - height: calc(100% + 18px); - width: calc(100% + 18px); - padding: 0 18px 18px 0; - position: relative; - overflow: auto; - box-sizing: border-box; - scrollbar-width: none; - } - - .p-scrollpanel-content::-webkit-scrollbar { - display: none; - } - - .p-scrollpanel-bar { - position: relative; - background: #c1c1c1; - border-radius: 3px; - z-index: 2; - cursor: pointer; - opacity: 0; - transition: opacity 0.25s linear; - } - - .p-scrollpanel-bar-y { - width: 9px; - top: 0; - } - - .p-scrollpanel-bar-x { - height: 9px; - bottom: 0; - } - - .p-scrollpanel-hidden { - visibility: hidden; - } - - .p-scrollpanel:hover .p-scrollpanel-bar, -.p-scrollpanel:active .p-scrollpanel-bar { - opacity: 1; - } - - .p-scrollpanel-grabbed { - user-select: none; - } - - .p-scrollpanel .p-scrollpanel-bar { - background: #3f3f46; - border: 0 none; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-scrollpanel .p-scrollpanel-bar:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-splitter { - display: flex; - flex-wrap: nowrap; - } - - .p-splitter-vertical { - flex-direction: column; - } - - .p-splitter-gutter { - flex-grow: 0; - flex-shrink: 0; - display: flex; - align-items: center; - justify-content: center; - cursor: col-resize; - } - - .p-splitter-horizontal.p-splitter-resizing { - cursor: col-resize; - user-select: none; - } - - .p-splitter-horizontal > .p-splitter-gutter > .p-splitter-gutter-handle { - height: 24px; - width: 100%; - } - - .p-splitter-horizontal > .p-splitter-gutter { - cursor: col-resize; - } - - .p-splitter-vertical.p-splitter-resizing { - cursor: row-resize; - user-select: none; - } - - .p-splitter-vertical > .p-splitter-gutter { - cursor: row-resize; - } - - .p-splitter-vertical > .p-splitter-gutter > .p-splitter-gutter-handle { - width: 24px; - height: 100%; - } - - .p-splitter-panel { - flex-grow: 1; - overflow: hidden; - } - - .p-splitter-panel-nested { - display: flex; - } - - .p-splitter-panel .p-splitter { - flex-grow: 1; - border: 0 none; - } - - .p-splitter { - border: 1px solid #3f3f46; - background: #18181b; - border-radius: 6px; - color: #ffffff; - } - .p-splitter .p-splitter-gutter { - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - background: #3f3f46; - } - .p-splitter .p-splitter-gutter .p-splitter-gutter-handle { - background: #3f3f46; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-splitter .p-splitter-gutter-resizing { - background: #3f3f46; - } - - .p-stepper .p-stepper-nav { - position: relative; - display: flex; - justify-content: space-between; - align-items: center; - margin: 0; - padding: 0; - list-style-type: none; - overflow-x: auto; - } - - .p-stepper-vertical .p-stepper-nav { - flex-direction: column; - } - - .p-stepper-header { - position: relative; - display: flex; - flex: 1 1 auto; - align-items: center; - } - .p-stepper-header:last-of-type { - flex: initial; - } - - .p-stepper-header .p-stepper-action { - border: 0 none; - display: inline-flex; - align-items: center; - text-decoration: none; - cursor: pointer; - } - .p-stepper-header .p-stepper-action:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-stepper.p-stepper-readonly .p-stepper-header { - cursor: auto; - } - - .p-stepper-header.p-highlight .p-stepper-action { - cursor: default; - } - - .p-stepper-title { - display: block; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 100%; - } - - .p-stepper-number { - display: flex; - align-items: center; - justify-content: center; - } - - .p-stepper-separator { - flex: 1 1 0; - } - - .p-stepper .p-stepper-nav { - display: flex; - justify-content: space-between; - margin: 0; - padding: 0; - list-style-type: none; - } - .p-stepper .p-stepper-header { - padding: 0.5rem; - } - .p-stepper .p-stepper-header .p-stepper-action { - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - background: #18181b; - outline-color: transparent; - } - .p-stepper .p-stepper-header .p-stepper-action .p-stepper-number { - color: #a1a1aa; - border: 1px solid #3f3f46; - border-width: 2px; - background: #18181b; - min-width: 2rem; - height: 2rem; - line-height: 2rem; - font-size: 1.143rem; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-stepper .p-stepper-header .p-stepper-action .p-stepper-title { - margin-left: 0.5rem; - color: #ffffff; - font-weight: 500; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-stepper .p-stepper-header .p-stepper-action:not(.p-disabled):focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-stepper .p-stepper-header.p-highlight .p-stepper-number { - background: rgba(167, 139, 250, 0.16); - color: rgba(255, 255, 255, 0.87); - } - .p-stepper .p-stepper-header.p-highlight .p-stepper-title { - color: #ffffff; - } - .p-stepper .p-stepper-header:not(.p-disabled):focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-stepper .p-stepper-header:has(~ .p-highlight) .p-stepper-separator { - background-color: #a78bfa; - } - .p-stepper .p-stepper-panels { - background: #18181b; - padding: 0.875rem 1.125rem 1.125rem 1.125rem; - color: #ffffff; - } - .p-stepper .p-stepper-separator { - background-color: #3f3f46; - width: 100%; - height: 2px; - margin-inline-start: 1rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-stepper.p-stepper-vertical { - display: flex; - flex-direction: column; - } - .p-stepper.p-stepper-vertical .p-stepper-toggleable-content { - display: flex; - flex: 1 1 auto; - background: #18181b; - color: #ffffff; - } - .p-stepper.p-stepper-vertical .p-stepper-panel { - display: flex; - flex-direction: column; - flex: initial; - } - .p-stepper.p-stepper-vertical .p-stepper-panel.p-stepper-panel-active { - flex: 1 1 auto; - } - .p-stepper.p-stepper-vertical .p-stepper-panel .p-stepper-header { - flex: initial; - } - .p-stepper.p-stepper-vertical .p-stepper-panel .p-stepper-content { - width: 100%; - padding-left: 1rem; - } - .p-stepper.p-stepper-vertical .p-stepper-panel .p-stepper-separator { - flex: 0 0 auto; - width: 2px; - height: auto; - margin-inline-start: calc(1.75rem + 2px); - } - .p-stepper.p-stepper-vertical .p-stepper-panel:has(~ .p-stepper-panel-active) .p-stepper-separator { - background-color: #a78bfa; - } - .p-stepper.p-stepper-vertical .p-stepper-panel:last-of-type .p-stepper-content { - padding-left: 3rem; - } - - .p-tabview-nav-container { - position: relative; - } - - .p-tabview-scrollable .p-tabview-nav-container { - overflow: hidden; - } - - .p-tabview-nav-content { - overflow-x: auto; - overflow-y: hidden; - scroll-behavior: smooth; - scrollbar-width: none; - overscroll-behavior: contain auto; - } - - .p-tabview-nav { - display: flex; - margin: 0; - padding: 0; - list-style-type: none; - flex: 1 1 auto; - } - - .p-tabview-header-action { - cursor: pointer; - user-select: none; - display: flex; - align-items: center; - position: relative; - text-decoration: none; - overflow: hidden; - } - - .p-tabview-ink-bar { - display: none; - z-index: 1; - } - - .p-tabview-header-action:focus { - z-index: 1; - } - - .p-tabview-title { - line-height: 1; - white-space: nowrap; - } - - .p-tabview-nav-btn { - position: absolute; - top: 0; - z-index: 2; - height: 100%; - display: flex; - align-items: center; - justify-content: center; - } - - .p-tabview-nav-prev { - left: 0; - } - - .p-tabview-nav-next { - right: 0; - } - - .p-tabview-nav-content::-webkit-scrollbar { - display: none; - } - - .p-tabview .p-tabview-nav { - background: #18181b; - border: 1px solid #3f3f46; - border-width: 0 0 1px 0; - } - .p-tabview .p-tabview-nav li { - margin-right: 0; - } - .p-tabview .p-tabview-nav li .p-tabview-nav-link { - border: solid #3f3f46; - border-width: 0 0 1px 0; - border-color: transparent transparent #3f3f46 transparent; - background: #18181b; - color: #a1a1aa; - padding: 1rem 1.125rem; - font-weight: 600; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - margin: 0 0 -1px 0; - outline-color: transparent; - } - .p-tabview .p-tabview-nav li .p-tabview-nav-link:not(.p-disabled):focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -2px; - box-shadow: inset none; - } - .p-tabview .p-tabview-nav li:not(.p-highlight):not(.p-disabled):hover .p-tabview-nav-link { - background: #18181b; - border-color: #3f3f46; - color: #ffffff; - } - .p-tabview .p-tabview-nav li.p-highlight .p-tabview-nav-link { - background: #18181b; - border-color: #3f3f46; - color: #a78bfa; - } - .p-tabview .p-tabview-nav-btn.p-link { - background: #18181b; - color: #a78bfa; - width: 2.5rem; - box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); - border-radius: 0; - outline-color: transparent; - } - .p-tabview .p-tabview-nav-btn.p-link:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -2px; - box-shadow: inset none; - } - .p-tabview .p-tabview-panels { - background: #18181b; - padding: 0.875rem 1.125rem 1.125rem 1.125rem; - border: 0 none; - color: #ffffff; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - - .p-toolbar { - display: flex; - align-items: center; - justify-content: space-between; - flex-wrap: wrap; - } - - .p-toolbar-group-start, -.p-toolbar-group-center, -.p-toolbar-group-end { - display: flex; - align-items: center; - } - - .p-toolbar-group-left, -.p-toolbar-group-right { - display: flex; - align-items: center; - } - - .p-toolbar { - background: #18181b; - border: 1px solid #3f3f46; - padding: 1.125rem; - border-radius: 6px; - gap: 0.5rem; - } - .p-toolbar .p-toolbar-separator { - margin: 0 0.5rem; - } - - .p-confirm-popup { - position: absolute; - margin-top: 10px; - top: 0; - left: 0; - } - - .p-confirm-popup-flipped { - margin-top: -10px; - margin-bottom: 10px; - } - - /* Animation */ - .p-confirm-popup-enter-from { - opacity: 0; - transform: scaleY(0.8); - } - - .p-confirm-popup-leave-to { - opacity: 0; - } - - .p-confirm-popup-enter-active { - transition: transform 0.12s cubic-bezier(0, 0, 0.2, 1), opacity 0.12s cubic-bezier(0, 0, 0.2, 1); - } - - .p-confirm-popup-leave-active { - transition: opacity 0.1s linear; - } - - .p-confirm-popup:after, -.p-confirm-popup:before { - bottom: 100%; - left: calc(var(--overlayArrowLeft, 0) + 1.25rem); - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; - } - - .p-confirm-popup:after { - border-width: 8px; - margin-left: -8px; - } - - .p-confirm-popup:before { - border-width: 10px; - margin-left: -10px; - } - - .p-confirm-popup-flipped:after, -.p-confirm-popup-flipped:before { - bottom: auto; - top: 100%; - } - - .p-confirm-popup.p-confirm-popup-flipped:after { - border-bottom-color: transparent; - } - - .p-confirm-popup.p-confirm-popup-flipped:before { - border-bottom-color: transparent; - } - - .p-confirm-popup .p-confirm-popup-content { - display: flex; - align-items: center; - } - - .p-confirm-popup { - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - border-radius: 6px; - box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); - } - .p-confirm-popup .p-confirm-popup-content { - padding: 1rem; - } - .p-confirm-popup .p-confirm-popup-footer { - text-align: right; - padding: 0 1rem 1rem 1rem; - } - .p-confirm-popup .p-confirm-popup-footer button { - margin: 0 0.5rem 0 0; - width: auto; - } - .p-confirm-popup .p-confirm-popup-footer button:last-child { - margin: 0; - } - .p-confirm-popup:after { - border-style: solid; - border-color: rgba(24, 24, 27, 0); - border-bottom-color: #18181b; - } - .p-confirm-popup:before { - border-style: solid; - border-color: rgba(63, 63, 70, 0); - border-bottom-color: #3c3c43; - } - .p-confirm-popup.p-confirm-popup-flipped:after { - border-top-color: #18181b; - } - .p-confirm-popup.p-confirm-popup-flipped:before { - border-top-color: #3f3f46; - } - .p-confirm-popup .p-confirm-popup-icon { - font-size: 1.5rem; - } - .p-confirm-popup .p-confirm-popup-icon.p-icon { - width: 1.5rem; - height: 1.5rem; - } - .p-confirm-popup .p-confirm-popup-message { - margin-left: 1rem; - } - - .p-dialog-mask.p-component-overlay { - pointer-events: auto; - } - - .p-dialog { - max-height: 90%; - transform: scale(1); - } - - .p-dialog-content { - overflow-y: auto; - } - - .p-dialog-header { - display: flex; - align-items: center; - justify-content: space-between; - flex-shrink: 0; - } - - .p-dialog-footer { - flex-shrink: 0; - } - - .p-dialog .p-dialog-header-icons { - display: flex; - align-items: center; - } - - .p-dialog .p-dialog-header-icon { - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; - position: relative; - } - - /* Fluid */ - .p-fluid .p-dialog-footer .p-button { - width: auto; - } - - /* Animation */ - /* Center */ - .p-dialog-enter-active { - transition: all 150ms cubic-bezier(0, 0, 0.2, 1); - } - - .p-dialog-leave-active { - transition: all 150ms cubic-bezier(0.4, 0, 0.2, 1); - } - - .p-dialog-enter-from, -.p-dialog-leave-to { - opacity: 0; - transform: scale(0.7); - } - - /* Top, Bottom, Left, Right, Top* and Bottom* */ - .p-dialog-top .p-dialog, -.p-dialog-bottom .p-dialog, -.p-dialog-left .p-dialog, -.p-dialog-right .p-dialog, -.p-dialog-topleft .p-dialog, -.p-dialog-topright .p-dialog, -.p-dialog-bottomleft .p-dialog, -.p-dialog-bottomright .p-dialog { - margin: 0.75rem; - transform: translate3d(0px, 0px, 0px); - } - - .p-dialog-top .p-dialog-enter-active, -.p-dialog-top .p-dialog-leave-active, -.p-dialog-bottom .p-dialog-enter-active, -.p-dialog-bottom .p-dialog-leave-active, -.p-dialog-left .p-dialog-enter-active, -.p-dialog-left .p-dialog-leave-active, -.p-dialog-right .p-dialog-enter-active, -.p-dialog-right .p-dialog-leave-active, -.p-dialog-topleft .p-dialog-enter-active, -.p-dialog-topleft .p-dialog-leave-active, -.p-dialog-topright .p-dialog-enter-active, -.p-dialog-topright .p-dialog-leave-active, -.p-dialog-bottomleft .p-dialog-enter-active, -.p-dialog-bottomleft .p-dialog-leave-active, -.p-dialog-bottomright .p-dialog-enter-active, -.p-dialog-bottomright .p-dialog-leave-active { - transition: all 0.3s ease-out; - } - - .p-dialog-top .p-dialog-enter-from, -.p-dialog-top .p-dialog-leave-to { - transform: translate3d(0px, -100%, 0px); - } - - .p-dialog-bottom .p-dialog-enter-from, -.p-dialog-bottom .p-dialog-leave-to { - transform: translate3d(0px, 100%, 0px); - } - - .p-dialog-left .p-dialog-enter-from, -.p-dialog-left .p-dialog-leave-to, -.p-dialog-topleft .p-dialog-enter-from, -.p-dialog-topleft .p-dialog-leave-to, -.p-dialog-bottomleft .p-dialog-enter-from, -.p-dialog-bottomleft .p-dialog-leave-to { - transform: translate3d(-100%, 0px, 0px); - } - - .p-dialog-right .p-dialog-enter-from, -.p-dialog-right .p-dialog-leave-to, -.p-dialog-topright .p-dialog-enter-from, -.p-dialog-topright .p-dialog-leave-to, -.p-dialog-bottomright .p-dialog-enter-from, -.p-dialog-bottomright .p-dialog-leave-to { - transform: translate3d(100%, 0px, 0px); - } - - /* Maximize */ - .p-dialog-maximized { - width: 100vw !important; - height: 100vh !important; - top: 0px !important; - left: 0px !important; - max-height: 100%; - height: 100%; - } - - .p-dialog-maximized .p-dialog-content { - flex-grow: 1; - } - - .p-confirm-dialog .p-dialog-content { - display: flex; - align-items: center; - } - - .p-dialog { - border-radius: 6px; - box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); - border: 1px solid #3f3f46; - } - .p-dialog .p-dialog-header { - border-bottom: 0 none; - background: #18181b; - color: #ffffff; - padding: 1.5rem; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-dialog .p-dialog-header .p-dialog-title { - font-weight: 600; - font-size: 1.25rem; - } - .p-dialog .p-dialog-header .p-dialog-header-icon { - width: 1.75rem; - height: 1.75rem; - color: #a1a1aa; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - margin-right: 0.5rem; - } - .p-dialog .p-dialog-header .p-dialog-header-icon:enabled:hover { - color: #ffffff; - border-color: transparent; - background: rgba(255, 255, 255, 0.03); - } - .p-dialog .p-dialog-header .p-dialog-header-icon:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-dialog .p-dialog-header .p-dialog-header-icon:last-child { - margin-right: 0; - } - .p-dialog .p-dialog-content { - background: #18181b; - color: #ffffff; - padding: 0 1.5rem 1.5rem 1.5rem; - } - .p-dialog .p-dialog-content:last-of-type { - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-dialog .p-dialog-footer { - border-top: 0 none; - background: #18181b; - color: #ffffff; - padding: 0 1.5rem 1.5rem 1.5rem; - display: flex; - justify-content: flex-end; - gap: 0.5rem; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-dialog.p-confirm-dialog .p-confirm-dialog-icon { - font-size: 2rem; - } - .p-dialog.p-confirm-dialog .p-confirm-dialog-message:not(:first-child) { - margin-left: 1rem; - } - - .p-overlaypanel { - margin-top: 10px; - } - - .p-overlaypanel-flipped { - margin-top: -10px; - margin-bottom: 10px; - } - - .p-overlaypanel-close { - display: flex; - justify-content: center; - align-items: center; - overflow: hidden; - position: relative; - } - - /* Animation */ - .p-overlaypanel-enter-from { - opacity: 0; - transform: scaleY(0.8); - } - - .p-overlaypanel-leave-to { - opacity: 0; - } - - .p-overlaypanel-enter-active { - transition: transform 0.12s cubic-bezier(0, 0, 0.2, 1), opacity 0.12s cubic-bezier(0, 0, 0.2, 1); - } - - .p-overlaypanel-leave-active { - transition: opacity 0.1s linear; - } - - .p-overlaypanel:after, -.p-overlaypanel:before { - bottom: 100%; - left: calc(var(--overlayArrowLeft, 0) + 1.25rem); - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; - } - - .p-overlaypanel:after { - border-width: 8px; - margin-left: -8px; - } - - .p-overlaypanel:before { - border-width: 10px; - margin-left: -10px; - } - - .p-overlaypanel-flipped:after, -.p-overlaypanel-flipped:before { - bottom: auto; - top: 100%; - } - - .p-overlaypanel.p-overlaypanel-flipped:after { - border-bottom-color: transparent; - } - - .p-overlaypanel.p-overlaypanel-flipped:before { - border-bottom-color: transparent; - } - - .p-overlaypanel { - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - border-radius: 6px; - box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); - } - .p-overlaypanel .p-overlaypanel-content { - padding: 0 1.125rem 1.125rem 1.125rem; - } - .p-overlaypanel .p-overlaypanel-close { - background: #a78bfa; - color: #020617; - width: 1.75rem; - height: 1.75rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 50%; - position: absolute; - top: -0.875rem; - right: -0.875rem; - } - .p-overlaypanel .p-overlaypanel-close:enabled:hover { - background: #c4b5fd; - color: #020617; - } - .p-overlaypanel:after { - border-style: solid; - border-color: rgba(24, 24, 27, 0); - border-bottom-color: #18181b; - } - .p-overlaypanel:before { - border-style: solid; - border-color: rgba(63, 63, 70, 0); - border-bottom-color: #3c3c43; - } - .p-overlaypanel.p-overlaypanel-flipped:after { - border-top-color: #18181b; - } - .p-overlaypanel.p-overlaypanel-flipped:before { - border-top-color: #3f3f46; - } - - .p-sidebar-mask { - display: none; - pointer-events: none; - background-color: transparent; - transition-property: background-color; - } - - .p-sidebar-mask.p-component-overlay { - pointer-events: auto; - } - - .p-sidebar-visible { - display: flex; - } - - .p-sidebar { - display: flex; - flex-direction: column; - pointer-events: auto; - transform: translate3d(0px, 0px, 0px); - position: relative; - transition: transform 0.3s; - } - - .p-sidebar-content { - overflow-y: auto; - flex-grow: 1; - } - - .p-sidebar-header { - display: flex; - align-items: center; - justify-content: space-between; - flex-shrink: 0; - } - - .p-sidebar-icon { - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; - position: relative; - } - - .p-sidebar-full .p-sidebar { - transition: none; - transform: none; - width: 100vw !important; - height: 100vh !important; - max-height: 100%; - top: 0px !important; - left: 0px !important; - } - - /* Animation */ - /* Center */ - .p-sidebar-left .p-sidebar-enter-from, -.p-sidebar-left .p-sidebar-leave-to { - transform: translateX(-100%); - } - - .p-sidebar-right .p-sidebar-enter-from, -.p-sidebar-right .p-sidebar-leave-to { - transform: translateX(100%); - } - - .p-sidebar-top .p-sidebar-enter-from, -.p-sidebar-top .p-sidebar-leave-to { - transform: translateY(-100%); - } - - .p-sidebar-bottom .p-sidebar-enter-from, -.p-sidebar-bottom .p-sidebar-leave-to { - transform: translateY(100%); - } - - .p-sidebar-full .p-sidebar-enter-from, -.p-sidebar-full .p-sidebar-leave-to { - opacity: 0; - } - - .p-sidebar-full .p-sidebar-enter-active, -.p-sidebar-full .p-sidebar-leave-active { - transition: opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1); - } - - /* Size */ - .p-sidebar-left .p-sidebar { - width: 20rem; - height: 100%; - } - - .p-sidebar-right .p-sidebar { - width: 20rem; - height: 100%; - } - - .p-sidebar-top .p-sidebar { - height: 10rem; - width: 100%; - } - - .p-sidebar-bottom .p-sidebar { - height: 10rem; - width: 100%; - } - - .p-sidebar-left .p-sidebar-sm, -.p-sidebar-right .p-sidebar-sm { - width: 20rem; - } - - .p-sidebar-left .p-sidebar-md, -.p-sidebar-right .p-sidebar-md { - width: 40rem; - } - - .p-sidebar-left .p-sidebar-lg, -.p-sidebar-right .p-sidebar-lg { - width: 60rem; - } - - .p-sidebar-top .p-sidebar-sm, -.p-sidebar-bottom .p-sidebar-sm { - height: 10rem; - } - - .p-sidebar-top .p-sidebar-md, -.p-sidebar-bottom .p-sidebar-md { - height: 20rem; - } - - .p-sidebar-top .p-sidebar-lg, -.p-sidebar-bottom .p-sidebar-lg { - height: 30rem; - } - - .p-sidebar-left .p-sidebar-content, -.p-sidebar-right .p-sidebar-content, -.p-sidebar-top .p-sidebar-content, -.p-sidebar-bottom .p-sidebar-content { - width: 100%; - height: 100%; - } - - @media screen and (max-width: 64em) { - .p-sidebar-left .p-sidebar-lg, -.p-sidebar-left .p-sidebar-md, -.p-sidebar-right .p-sidebar-lg, -.p-sidebar-right .p-sidebar-md { - width: 20rem; - } - } - .p-sidebar { - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); - } - .p-sidebar .p-sidebar-header { - padding: 1.125rem; - } - .p-sidebar .p-sidebar-header .p-sidebar-header-content { - font-weight: 600; - font-size: 1.25rem; - } - .p-sidebar .p-sidebar-header .p-sidebar-close, -.p-sidebar .p-sidebar-header .p-sidebar-icon { - width: 1.75rem; - height: 1.75rem; - color: #a1a1aa; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-sidebar .p-sidebar-header .p-sidebar-close:enabled:hover, -.p-sidebar .p-sidebar-header .p-sidebar-icon:enabled:hover { - color: #ffffff; - border-color: transparent; - background: rgba(255, 255, 255, 0.03); - } - .p-sidebar .p-sidebar-header .p-sidebar-close:focus-visible, -.p-sidebar .p-sidebar-header .p-sidebar-icon:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-sidebar .p-sidebar-header + .p-sidebar-content { - padding-top: 0; - } - .p-sidebar .p-sidebar-content { - padding: 0 1.125rem 1.125rem 1.125rem; - } - - .p-tooltip { - position: absolute; - display: none; - padding: 0.25em 0.5rem; - max-width: 12.5rem; - } - - .p-tooltip.p-tooltip-right, -.p-tooltip.p-tooltip-left { - padding: 0 0.25rem; - } - - .p-tooltip.p-tooltip-top, -.p-tooltip.p-tooltip-bottom { - padding: 0.25em 0; - } - - .p-tooltip .p-tooltip-text { - white-space: pre-line; - word-break: break-word; - } - - .p-tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - scale: 2; - } - - .p-tooltip-right .p-tooltip-arrow { - margin-top: -0.25rem; - border-width: 0.25em 0.25em 0.25em 0; - } - - .p-tooltip-left .p-tooltip-arrow { - margin-top: -0.25rem; - border-width: 0.25em 0 0.25em 0.25rem; - } - - .p-tooltip.p-tooltip-top { - padding: 0.25em 0; - } - - .p-tooltip-top .p-tooltip-arrow { - margin-left: -0.25rem; - border-width: 0.25em 0.25em 0; - } - - .p-tooltip-bottom .p-tooltip-arrow { - margin-left: -0.25rem; - border-width: 0 0.25em 0.25rem; - } - - .p-tooltip .p-tooltip-text { - background: #3f3f46; - color: #ffffff; - padding: 0.5rem 0.75rem; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - border-radius: 6px; - } - .p-tooltip.p-tooltip-right .p-tooltip-arrow { - border-right-color: #3f3f46; - } - .p-tooltip.p-tooltip-left .p-tooltip-arrow { - border-left-color: #3f3f46; - } - .p-tooltip.p-tooltip-top .p-tooltip-arrow { - border-top-color: #3f3f46; - } - .p-tooltip.p-tooltip-bottom .p-tooltip-arrow { - border-bottom-color: #3f3f46; - } - - .p-fileupload-content { - position: relative; - } - - .p-fileupload-content .p-progressbar { - width: 100%; - position: absolute; - top: 0; - left: 0; - } - - .p-button.p-fileupload-choose { - position: relative; - overflow: hidden; - } - - .p-fileupload-buttonbar { - display: flex; - flex-wrap: wrap; - } - - .p-fileupload > input[type=file], -.p-fileupload-basic input[type=file] { - display: none; - } - - .p-fluid .p-fileupload .p-button { - width: auto; - } - - .p-fileupload-file { - display: flex; - flex-wrap: wrap; - align-items: center; - } - - .p-fileupload-file-thumbnail { - flex-shrink: 0; - } - - .p-fileupload-file-actions { - margin-left: auto; - } - - .p-fileupload .p-fileupload-buttonbar { - background: #18181b; - padding: 1.125rem; - border: 1px solid #3f3f46; - color: #ffffff; - border-bottom: 0 none; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - gap: 0.5rem; - } - .p-fileupload .p-fileupload-buttonbar .p-button.p-fileupload-choose.p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-fileupload .p-fileupload-content { - background: #18181b; - padding: 0 1.125rem 1.125rem 1.125rem; - border: 1px solid #3f3f46; - color: #ffffff; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-fileupload .p-fileupload-content.p-fileupload-highlight { - border: 1px dashed #a78bfa; - background-color: rgba(167, 139, 250, 0.16); - } - .p-fileupload .p-fileupload-file { - padding: 1rem; - border: 1px solid #3f3f46; - border-radius: 6px; - gap: 0.5rem; - margin-bottom: 0.5rem; - } - .p-fileupload .p-fileupload-file:last-child { - margin-bottom: 0; - } - .p-fileupload .p-fileupload-file-name { - margin-bottom: 0.5rem; - } - .p-fileupload .p-fileupload-file-size { - margin-right: 0.5rem; - } - .p-fileupload .p-progressbar { - height: 0.25rem; - } - .p-fileupload .p-fileupload-row > div { - padding: 0.75rem 1rem; - } - .p-fileupload.p-fileupload-advanced .p-message { - margin-top: 0; - } - - .p-fileupload-choose:not(.p-disabled):hover { - background: #c4b5fd; - color: #020617; - border-color: #c4b5fd; - } - .p-fileupload-choose:not(.p-disabled):active { - background: #ddd6fe; - color: #020617; - border-color: #ddd6fe; - } - - .p-breadcrumb { - overflow-x: auto; - } - - .p-breadcrumb .p-breadcrumb-list { - margin: 0; - padding: 0; - list-style-type: none; - display: flex; - align-items: center; - flex-wrap: nowrap; - } - - .p-breadcrumb .p-menuitem-text { - line-height: 1; - } - - .p-breadcrumb .p-menuitem-link { - text-decoration: none; - display: flex; - align-items: center; - } - - .p-breadcrumb .p-menuitem-separator { - display: flex; - align-items: center; - } - - .p-breadcrumb::-webkit-scrollbar { - display: none; - } - - .p-breadcrumb { - background: #18181b; - border: 0 none; - border-radius: 6px; - padding: 1rem; - } - .p-breadcrumb .p-breadcrumb-list li .p-menuitem-link { - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - outline-color: transparent; - } - .p-breadcrumb .p-breadcrumb-list li .p-menuitem-link:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-breadcrumb .p-breadcrumb-list li .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-breadcrumb .p-breadcrumb-list li .p-menuitem-link .p-menuitem-icon { - color: #71717a; - } - .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator { - margin: 0 0.5rem 0 0.5rem; - color: #71717a; - } - .p-breadcrumb .p-breadcrumb-list li:last-child .p-menuitem-text { - color: #ffffff; - } - .p-breadcrumb .p-breadcrumb-list li:last-child .p-menuitem-icon { - color: #71717a; - } - - .p-contextmenu ul { - margin: 0; - padding: 0; - list-style: none; - } - - .p-contextmenu .p-submenu-list { - position: absolute; - min-width: 100%; - z-index: 1; - } - - .p-contextmenu .p-menuitem-link { - cursor: pointer; - display: flex; - align-items: center; - text-decoration: none; - overflow: hidden; - position: relative; - } - - .p-contextmenu .p-menuitem-text { - line-height: 1; - } - - .p-contextmenu .p-menuitem { - position: relative; - } - - .p-contextmenu .p-menuitem-link .p-submenu-icon { - margin-left: auto; - } - - .p-contextmenu-enter-from, -.p-contextmenu-leave-active { - opacity: 0; - } - - .p-contextmenu-enter-active { - transition: opacity 250ms; - } - - .p-contextmenu { - padding: 0.25rem 0.25rem; - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - border-radius: 6px; - min-width: 12.5rem; - } - .p-contextmenu .p-contextmenu-root-list { - outline: 0 none; - } - .p-contextmenu .p-submenu-list { - padding: 0.25rem 0.25rem; - background: #18181b; - border: 1px solid #3f3f46; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - border-radius: 6px; - } - .p-contextmenu .p-menuitem { - margin: 2px 0; - } - .p-contextmenu .p-menuitem:first-child { - margin-top: 0; - } - .p-contextmenu .p-menuitem:last-child { - margin-bottom: 0; - } - .p-contextmenu .p-menuitem > .p-menuitem-content { - color: #ffffff; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-contextmenu .p-menuitem > .p-menuitem-content .p-menuitem-link { - color: #ffffff; - padding: 0.5rem 0.75rem; - user-select: none; - } - .p-contextmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-contextmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { - color: #71717a; - margin-right: 0.5rem; - } - .p-contextmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #71717a; - } - .p-contextmenu .p-menuitem.p-highlight > .p-menuitem-content { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-contextmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); - } - .p-contextmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-contextmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); - } - .p-contextmenu .p-menuitem.p-highlight.p-focus > .p-menuitem-content { - background: rgba(167, 139, 250, 0.24); - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-contextmenu .p-menuitem-separator { - border-top: 1px solid #3f3f46; - margin: 2px 0; - } - .p-contextmenu .p-submenu-icon { - font-size: 0.875rem; - } - .p-contextmenu .p-submenu-icon.p-icon { - width: 0.875rem; - height: 0.875rem; - } - - .p-dock { - position: absolute; - z-index: 1; - display: flex; - justify-content: center; - align-items: center; - pointer-events: none; - } - - .p-dock-list-container { - display: flex; - pointer-events: auto; - } - - .p-dock-list { - margin: 0; - padding: 0; - list-style: none; - display: flex; - align-items: center; - justify-content: center; - } - - .p-dock-item { - transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); - will-change: transform; - } - - .p-dock-link { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - position: relative; - overflow: hidden; - cursor: default; - } - - .p-dock-item-second-prev, -.p-dock-item-second-next { - transform: scale(1.2); - } - - .p-dock-item-prev, -.p-dock-item-next { - transform: scale(1.4); - } - - .p-dock-item-current { - transform: scale(1.6); - z-index: 1; - } - - /* Position */ - /* top */ - .p-dock-top { - left: 0; - top: 0; - width: 100%; - } - - .p-dock-top .p-dock-item { - transform-origin: center top; - } - - /* bottom */ - .p-dock-bottom { - left: 0; - bottom: 0; - width: 100%; - } - - .p-dock-bottom .p-dock-item { - transform-origin: center bottom; - } - - /* right */ - .p-dock-right { - right: 0; - top: 0; - height: 100%; - } - - .p-dock-right .p-dock-item { - transform-origin: center right; - } - - .p-dock-right .p-dock-list { - flex-direction: column; - } - - /* left */ - .p-dock-left { - left: 0; - top: 0; - height: 100%; - } - - .p-dock-left .p-dock-item { - transform-origin: center left; - } - - .p-dock-left .p-dock-list { - flex-direction: column; - } - - .p-dock .p-dock-list-container { - background: rgba(255, 255, 255, 0.1); - border: 1px solid rgba(255, 255, 255, 0.2); - padding: 0.5rem 0.5rem; - border-radius: 0.5rem; - } - .p-dock .p-dock-list-container .p-dock-list { - outline: 0 none; - } - .p-dock .p-dock-item { - padding: 0.5rem; - border-radius: 6px; - } - .p-dock .p-dock-item.p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: 0 none; - } - .p-dock .p-dock-link { - width: 3rem; - height: 3rem; - } - .p-dock.p-dock-top .p-dock-item-second-prev, -.p-dock.p-dock-top .p-dock-item-second-next, .p-dock.p-dock-bottom .p-dock-item-second-prev, -.p-dock.p-dock-bottom .p-dock-item-second-next { - margin: 0 0.9rem; - } - .p-dock.p-dock-top .p-dock-item-prev, -.p-dock.p-dock-top .p-dock-item-next, .p-dock.p-dock-bottom .p-dock-item-prev, -.p-dock.p-dock-bottom .p-dock-item-next { - margin: 0 1.3rem; - } - .p-dock.p-dock-top .p-dock-item-current, .p-dock.p-dock-bottom .p-dock-item-current { - margin: 0 1.5rem; - } - .p-dock.p-dock-left .p-dock-item-second-prev, -.p-dock.p-dock-left .p-dock-item-second-next, .p-dock.p-dock-right .p-dock-item-second-prev, -.p-dock.p-dock-right .p-dock-item-second-next { - margin: 0.9rem 0; - } - .p-dock.p-dock-left .p-dock-item-prev, -.p-dock.p-dock-left .p-dock-item-next, .p-dock.p-dock-right .p-dock-item-prev, -.p-dock.p-dock-right .p-dock-item-next { - margin: 1.3rem 0; - } - .p-dock.p-dock-left .p-dock-item-current, .p-dock.p-dock-right .p-dock-item-current { - margin: 1.5rem 0; - } - .p-dock.p-dock-mobile.p-dock-top .p-dock-list-container, .p-dock.p-dock-mobile.p-dock-bottom .p-dock-list-container { - overflow-x: auto; - width: 100%; - } - .p-dock.p-dock-mobile.p-dock-top .p-dock-list-container .p-dock-list, .p-dock.p-dock-mobile.p-dock-bottom .p-dock-list-container .p-dock-list { - margin: 0 auto; - } - .p-dock.p-dock-mobile.p-dock-left .p-dock-list-container, .p-dock.p-dock-mobile.p-dock-right .p-dock-list-container { - overflow-y: auto; - height: 100%; - } - .p-dock.p-dock-mobile.p-dock-left .p-dock-list-container .p-dock-list, .p-dock.p-dock-mobile.p-dock-right .p-dock-list-container .p-dock-list { - margin: auto 0; - } - .p-dock.p-dock-mobile .p-dock-list .p-dock-item { - transform: none; - margin: 0; - } - - .p-megamenu { - display: flex; - position: relative; - } - - .p-megamenu-root-list { - margin: 0; - padding: 0; - list-style: none; - } - - .p-megamenu .p-menuitem-link { - cursor: pointer; - display: flex; - align-items: center; - text-decoration: none; - overflow: hidden; - position: relative; - } - - .p-megamenu .p-menuitem-text { - line-height: 1; - } - - .p-megamenu-panel { - display: none; - width: auto; - z-index: 1; - left: 0; - min-width: 100%; - } - - .p-megamenu-panel:not(.p-megamenu-mobile) { - position: absolute; - } - - .p-megamenu-root-list > .p-menuitem-active > .p-megamenu-panel { - display: block; - } - - .p-megamenu-submenu { - margin: 0; - padding: 0; - list-style: none; - } - - .p-megamenu-button { - display: none; - cursor: pointer; - align-items: center; - justify-content: center; - text-decoration: none; - } - - /* Horizontal */ - .p-megamenu-horizontal { - align-items: center; - } - - .p-megamenu-horizontal .p-megamenu-root-list { - display: flex; - align-items: center; - flex-wrap: wrap; - } - - .p-megamenu-horizontal .p-megamenu-end { - margin-left: auto; - align-self: center; - } - - /* Vertical */ - .p-megamenu-vertical { - flex-direction: column; - } - - .p-megamenu-vertical:not(.p-megamenu-mobile) { - display: inline-flex; - } - - .p-megamenu-vertical .p-megamenu-root-list { - flex-direction: column; - } - - .p-megamenu-vertical:not(.p-megamenu-mobile) .p-megamenu-root-list > .p-menuitem-active > .p-megamenu-panel { - left: 100%; - top: 0; - } - - .p-megamenu-vertical .p-megamenu-root-list > .p-menuitem > .p-menuitem-content > .p-menuitem-link > .p-submenu-icon { - margin-left: auto; - } - - .p-megamenu-grid { - display: flex; - } - - .p-megamenu-col-2, -.p-megamenu-col-3, -.p-megamenu-col-4, -.p-megamenu-col-6, -.p-megamenu-col-12 { - flex: 0 0 auto; - padding: 0.5rem; - } - - .p-megamenu-col-2 { - width: 16.6667%; - } - - .p-megamenu-col-3 { - width: 25%; - } - - .p-megamenu-col-4 { - width: 33.3333%; - } - - .p-megamenu-col-6 { - width: 50%; - } - - .p-megamenu-col-12 { - width: 100%; - } - - .p-megamenu.p-megamenu-mobile .p-megamenu-button { - display: flex; - } - - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list { - position: absolute; - display: none; - width: 100%; - } - - .p-megamenu.p-megamenu-mobile .p-submenu-list { - width: 100%; - position: static; - box-shadow: none; - border: 0 none; - } - - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list .p-menuitem { - width: 100%; - position: static; - } - - .p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list { - display: flex; - flex-direction: column; - top: 100%; - left: 0; - z-index: 1; - } - - .p-megamenu.p-megamenu-mobile .p-megamenu-grid { - flex-wrap: wrap; - overflow: auto; - max-height: 90%; - } - - .p-megamenu { - padding: 0.5rem 0.5rem; - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - border-radius: 6px; - } - .p-megamenu .p-megamenu-root-list { - outline: 0 none; - } - .p-megamenu .p-menuitem { - margin: 2px 0; - } - .p-megamenu .p-menuitem:first-child { - margin-top: 0; - } - .p-megamenu .p-menuitem:last-child { - margin-bottom: 0; - } - .p-megamenu .p-menuitem > .p-menuitem-content { - color: #ffffff; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-megamenu .p-menuitem > .p-menuitem-content .p-menuitem-link { - color: #ffffff; - padding: 0.5rem 0.75rem; - user-select: none; - } - .p-megamenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-megamenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { - color: #71717a; - margin-right: 0.5rem; - } - .p-megamenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #71717a; - } - .p-megamenu .p-menuitem.p-highlight > .p-menuitem-content { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-megamenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); - } - .p-megamenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-megamenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); - } - .p-megamenu .p-menuitem.p-highlight.p-focus > .p-menuitem-content { - background: rgba(167, 139, 250, 0.24); - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-megamenu .p-megamenu-panel { - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - border-radius: 6px; - } - .p-megamenu .p-submenu-header { - margin: 0; - padding: 0.5rem 0.75rem; - color: #71717a; - background: #18181b; - font-weight: 600; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-megamenu .p-submenu-list { - padding: 0.25rem 0.25rem; - min-width: 12.5rem; - } - .p-megamenu .p-submenu-list .p-menuitem-separator { - border-top: 1px solid #3f3f46; - margin: 2px 0; - } - .p-megamenu.p-megamenu-vertical { - min-width: 12.5rem; - padding: 0.25rem 0.25rem; - } - .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem > .p-menuitem-content { - color: #ffffff; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - } - .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link { - padding: 0.5rem 0.75rem; - user-select: none; - } - .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { - color: #71717a; - margin-right: 0.5rem; - } - .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #71717a; - margin-left: 0.5rem; - } - .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-megamenu.p-megamenu-mobile.p-megamenu-vertical { - width: 100%; - padding: 0.5rem 0.5rem; - } - .p-megamenu.p-megamenu-mobile .p-megamenu-button { - width: 1.75rem; - height: 1.75rem; - color: #71717a; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-megamenu.p-megamenu-mobile .p-megamenu-button:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-megamenu.p-megamenu-mobile .p-megamenu-button:focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list { - padding: 0.25rem 0.25rem; - background: #18181b; - border: 1px solid #3f3f46; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list .p-menuitem-separator { - border-top: 1px solid #3f3f46; - margin: 2px 0; - } - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list .p-submenu-icon { - font-size: 0.875rem; - } - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list .p-menuitem .p-menuitem-content .p-menuitem-link .p-submenu-icon { - margin-left: auto; - transition: transform 0.2s; - } - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list .p-menuitem.p-menuitem-active > .p-menuitem-content > .p-menuitem-link > .p-submenu-icon { - transform: rotate(-180deg); - } - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list .p-submenu-list .p-submenu-icon { - transition: transform 0.2s; - transform: rotate(90deg); - } - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list .p-submenu-list .p-menuitem-active > .p-menuitem-content > .p-menuitem-link > .p-submenu-icon { - transform: rotate(-90deg); - } - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { - padding-left: 1.5rem; - } - - .p-menu ul { - margin: 0; - padding: 0; - list-style: none; - } - - .p-menu .p-menuitem-link { - cursor: pointer; - display: flex; - align-items: center; - text-decoration: none; - overflow: hidden; - position: relative; - } - - .p-menu .p-menuitem-text { - line-height: 1; - } - - .p-menu { - padding: 0.25rem 0.25rem; - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - border-radius: 6px; - min-width: 12.5rem; - } - .p-menu .p-menuitem { - margin: 2px 0; - } - .p-menu .p-menuitem:first-child { - margin-top: 0; - } - .p-menu .p-menuitem:last-child { - margin-bottom: 0; - } - .p-menu .p-menuitem > .p-menuitem-content { - color: #ffffff; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-menu .p-menuitem > .p-menuitem-content .p-menuitem-link { - color: #ffffff; - padding: 0.5rem 0.75rem; - user-select: none; - } - .p-menu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-menu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { - color: #71717a; - margin-right: 0.5rem; - } - .p-menu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #71717a; - } - .p-menu .p-menuitem.p-highlight > .p-menuitem-content { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-menu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); - } - .p-menu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-menu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); - } - .p-menu .p-menuitem.p-highlight.p-focus > .p-menuitem-content { - background: rgba(167, 139, 250, 0.24); - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-menu.p-menu-overlay { - background: #18181b; - border: 1px solid #3f3f46; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-menu .p-submenu-header { - margin: 0; - padding: 0.5rem 0.75rem; - color: #71717a; - background: #18181b; - font-weight: 600; - border-top-right-radius: 0; - border-top-left-radius: 0; - } - .p-menu .p-menuitem-separator { - border-top: 1px solid #3f3f46; - margin: 2px 0; - } - - .p-menubar { - display: flex; - align-items: center; - } - - .p-menubar ul { - margin: 0; - padding: 0; - list-style: none; - } - - .p-menubar .p-menuitem-link { - cursor: pointer; - display: flex; - align-items: center; - text-decoration: none; - overflow: hidden; - position: relative; - } - - .p-menubar .p-menuitem-text { - line-height: 1; - } - - .p-menubar .p-menuitem { - position: relative; - } - - .p-menubar-root-list { - display: flex; - align-items: center; - flex-wrap: wrap; - } - - .p-menubar-root-list > li ul { - display: none; - z-index: 1; - } - - .p-menubar-root-list > .p-menuitem-active > .p-submenu-list { - display: block; - } - - .p-menubar .p-submenu-list { - display: none; - position: absolute; - z-index: 1; - } - - .p-menubar .p-submenu-list > .p-menuitem-active > .p-submenu-list { - display: block; - left: 100%; - top: 0; - } - - .p-menubar .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link .p-submenu-icon { - margin-left: auto; - } - - .p-menubar .p-menubar-end { - margin-left: auto; - align-self: center; - } - - .p-menubar-button { - display: none; - cursor: pointer; - align-items: center; - justify-content: center; - text-decoration: none; - } - - .p-menubar.p-menubar-mobile { - position: relative; - } - - .p-menubar.p-menubar-mobile .p-menubar-button { - display: flex; - } - - .p-menubar.p-menubar-mobile .p-menubar-root-list { - position: absolute; - display: none; - width: 100%; - } - - .p-menubar.p-menubar-mobile .p-submenu-list { - width: 100%; - position: static; - box-shadow: none; - border: 0 none; - } - - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-menuitem { - width: 100%; - position: static; - } - - .p-menubar.p-menubar-mobile-active .p-menubar-root-list { - display: flex; - flex-direction: column; - top: 100%; - left: 0; - z-index: 1; - } - - .p-menubar { - padding: 0.5rem 0.5rem; - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - border-radius: 6px; - } - .p-menubar .p-menubar-root-list { - outline: 0 none; - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-content { - color: #ffffff; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link { - padding: 0.5rem 0.75rem; - user-select: none; - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { - color: #71717a; - margin-right: 0.5rem; - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #71717a; - margin-left: 0.5rem; - } - .p-menubar .p-menubar-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-menubar .p-menubar-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-menubar .p-menubar-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-menubar .p-menubar-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-menubar .p-menuitem { - margin: 2px 0; - } - .p-menubar .p-menuitem:first-child { - margin-top: 0; - } - .p-menubar .p-menuitem:last-child { - margin-bottom: 0; - } - .p-menubar .p-menuitem > .p-menuitem-content { - color: #ffffff; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-menubar .p-menuitem > .p-menuitem-content .p-menuitem-link { - color: #ffffff; - padding: 0.5rem 0.75rem; - user-select: none; - } - .p-menubar .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-menubar .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { - color: #71717a; - margin-right: 0.5rem; - } - .p-menubar .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #71717a; - } - .p-menubar .p-menuitem.p-highlight > .p-menuitem-content { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-menubar .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); - } - .p-menubar .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-menubar .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); - } - .p-menubar .p-menuitem.p-highlight.p-focus > .p-menuitem-content { - background: rgba(167, 139, 250, 0.24); - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-menubar .p-submenu-list { - padding: 0.25rem 0.25rem; - background: #18181b; - border: 1px solid #3f3f46; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - min-width: 12.5rem; - border-radius: 6px; - } - .p-menubar .p-submenu-list .p-menuitem-separator { - border-top: 1px solid #3f3f46; - margin: 2px 0; - } - .p-menubar .p-submenu-list .p-submenu-icon { - font-size: 0.875rem; - } - .p-menubar.p-menubar-mobile .p-menubar-button { - width: 1.75rem; - height: 1.75rem; - color: #71717a; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-menubar.p-menubar-mobile .p-menubar-button:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-menubar.p-menubar-mobile .p-menubar-button:focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-menubar.p-menubar-mobile .p-menubar-root-list { - padding: 0.25rem 0.25rem; - background: #18181b; - border: 1px solid #3f3f46; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-menuitem-separator { - border-top: 1px solid #3f3f46; - margin: 2px 0; - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-submenu-icon { - font-size: 0.875rem; - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-menuitem .p-menuitem-content .p-menuitem-link .p-submenu-icon { - margin-left: auto; - transition: transform 0.2s; - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-menuitem.p-menuitem-active > .p-menuitem-content > .p-menuitem-link > .p-submenu-icon { - transform: rotate(-180deg); - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-submenu-list .p-submenu-icon { - transition: transform 0.2s; - transform: rotate(90deg); - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-submenu-list .p-menuitem-active > .p-menuitem-content > .p-menuitem-link > .p-submenu-icon { - transform: rotate(-90deg); - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { - padding-left: 1.5rem; - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { - padding-left: 2.5rem; - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { - padding-left: 3.5rem; - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { - padding-left: 4.5rem; - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { - padding-left: 5.5rem; - } - - .p-panelmenu .p-panelmenu-header-action { - display: flex; - align-items: center; - user-select: none; - cursor: pointer; - position: relative; - text-decoration: none; - } - - .p-panelmenu .p-panelmenu-header-action:focus { - z-index: 1; - } - - .p-panelmenu .p-submenu-list { - margin: 0; - padding: 0; - list-style: none; - } - - .p-panelmenu .p-menuitem-link { - display: flex; - align-items: center; - user-select: none; - cursor: pointer; - text-decoration: none; - position: relative; - overflow: hidden; - } - - .p-panelmenu .p-menuitem-text { - line-height: 1; - } - - .p-panelmenu .p-panelmenu-header { - outline: 0 none; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content { - border: 0 none; - color: #a1a1aa; - background: #18181b; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action { - color: #a1a1aa; - padding: 1.125rem 1.125rem 1.125rem 1.125rem; - font-weight: 600; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-submenu-icon { - margin-right: 0.5rem; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-icon { - margin-right: 0.5rem; - } - .p-panelmenu .p-panelmenu-header:not(.p-disabled):focus-visible .p-panelmenu-header-content { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -2px; - box-shadow: inset none; - } - .p-panelmenu .p-panelmenu-header:not(.p-highlight):not(.p-disabled):hover .p-panelmenu-header-content { - background: #18181b; - border-color: #18181b; - color: #ffffff; - } - .p-panelmenu .p-panelmenu-header:not(.p-disabled).p-highlight .p-panelmenu-header-content { - background: #18181b; - border-color: #18181b; - color: #ffffff; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - margin-bottom: 0; - } - .p-panelmenu .p-panelmenu-header:not(.p-disabled).p-highlight:hover .p-panelmenu-header-content { - border-color: #18181b; - background: #18181b; - color: #ffffff; - } - .p-panelmenu .p-panelmenu-content { - padding: 0.25rem 0.25rem; - border: 0 none; - background: #18181b; - color: #ffffff; - border-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-panelmenu .p-panelmenu-content .p-panelmenu-root-list { - outline: 0 none; - } - .p-panelmenu .p-panelmenu-content .p-menuitem { - margin: 2px 0; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:first-child { - margin-top: 0; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:last-child { - margin-bottom: 0; - } - .p-panelmenu .p-panelmenu-content .p-menuitem > .p-menuitem-content { - color: #ffffff; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-panelmenu .p-panelmenu-content .p-menuitem > .p-menuitem-content .p-menuitem-link { - color: #ffffff; - padding: 0.5rem 0.75rem; - user-select: none; - } - .p-panelmenu .p-panelmenu-content .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-panelmenu .p-panelmenu-content .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { - color: #71717a; - margin-right: 0.5rem; - } - .p-panelmenu .p-panelmenu-content .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #71717a; - } - .p-panelmenu .p-panelmenu-content .p-menuitem.p-highlight > .p-menuitem-content { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-panelmenu .p-panelmenu-content .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); - } - .p-panelmenu .p-panelmenu-content .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-panelmenu .p-panelmenu-content .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); - } - .p-panelmenu .p-panelmenu-content .p-menuitem.p-highlight.p-focus > .p-menuitem-content { - background: rgba(167, 139, 250, 0.24); - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-content .p-menuitem-link .p-submenu-icon { - margin-right: 0.5rem; - } - .p-panelmenu .p-panelmenu-content .p-menuitem-separator { - border-top: 1px solid #3f3f46; - margin: 2px 0; - } - .p-panelmenu .p-panelmenu-content .p-submenu-list:not(.p-panelmenu-root-list) { - padding: 0 0 0 1rem; - } - .p-panelmenu .p-panelmenu-panel { - margin-bottom: 0; - } - .p-panelmenu .p-panelmenu-panel .p-panelmenu-header .p-panelmenu-header-content { - border-radius: 0; - } - .p-panelmenu .p-panelmenu-panel .p-panelmenu-content { - border-radius: 0; - } - .p-panelmenu .p-panelmenu-panel:not(:first-child) .p-panelmenu-header .p-panelmenu-header-content { - border-top: 0 none; - } - .p-panelmenu .p-panelmenu-panel:not(:first-child) .p-panelmenu-header:not(.p-highlight):not(.p-disabled):hover .p-panelmenu-header-content, .p-panelmenu .p-panelmenu-panel:not(:first-child) .p-panelmenu-header:not(.p-disabled).p-highlight:hover .p-panelmenu-header-content { - border-top: 0 none; - } - .p-panelmenu .p-panelmenu-panel:first-child .p-panelmenu-header .p-panelmenu-header-content { - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-panelmenu .p-panelmenu-panel:last-child .p-panelmenu-header:not(.p-highlight) .p-panelmenu-header-content { - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-panelmenu .p-panelmenu-panel:last-child .p-panelmenu-content { - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - - .p-steps { - position: relative; - } - - .p-steps .p-steps-list { - padding: 0; - margin: 0; - list-style-type: none; - display: flex; - } - - .p-steps-item { - position: relative; - display: flex; - justify-content: center; - flex: 1 1 auto; - overflow: hidden; - } - - .p-steps-item .p-menuitem-link { - display: inline-flex; - flex-direction: column; - align-items: center; - overflow: hidden; - text-decoration: none; - cursor: pointer; - } - - .p-steps.p-steps-readonly .p-steps-item { - cursor: auto; - } - - .p-steps-item.p-steps-current .p-menuitem-link { - cursor: default; - } - - .p-steps-title { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 100%; - } - - .p-steps-number { - display: flex; - align-items: center; - justify-content: center; - } - - .p-steps-title { - display: block; - } - - .p-steps .p-steps-item .p-menuitem-link { - background: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - background: #18181b; - outline-color: transparent; - } - .p-steps .p-steps-item .p-menuitem-link .p-steps-number { - color: #a1a1aa; - border: 1px solid #3f3f46; - background: #18181b; - min-width: 2rem; - height: 2rem; - line-height: 2rem; - font-size: 1.143rem; - z-index: 1; - border-radius: 50%; - } - .p-steps .p-steps-item .p-menuitem-link .p-steps-title { - margin-top: 0.5rem; - color: #ffffff; - } - .p-steps .p-steps-item .p-menuitem-link:not(.p-disabled):focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-steps .p-steps-item.p-highlight .p-steps-number { - background: rgba(167, 139, 250, 0.16); - color: rgba(255, 255, 255, 0.87); - } - .p-steps .p-steps-item.p-highlight .p-steps-title { - font-weight: 500; - color: #ffffff; - } - .p-steps .p-steps-item:before { - content: " "; - border-top: 1px solid #3f3f46; - width: 100%; - top: 50%; - left: 0; - display: block; - position: absolute; - margin-top: -1rem; - } - - .p-tabmenu { - overflow-x: auto; - } - - .p-tabmenu-nav { - display: flex; - margin: 0; - padding: 0; - list-style-type: none; - flex-wrap: nowrap; - } - - .p-tabmenu-nav a { - cursor: pointer; - user-select: none; - display: flex; - align-items: center; - position: relative; - text-decoration: none; - text-decoration: none; - overflow: hidden; - } - - .p-tabmenu-nav a:focus { - z-index: 1; - } - - .p-tabmenu-nav .p-menuitem-text { - line-height: 1; - } - - .p-tabmenu-ink-bar { - display: none; - z-index: 1; - } - - .p-tabmenu::-webkit-scrollbar { - display: none; - } - - .p-tabmenu .p-tabmenu-nav { - background: #18181b; - border: 1px solid #3f3f46; - border-width: 0 0 1px 0; - } - .p-tabmenu .p-tabmenu-nav .p-tabmenuitem { - margin-right: 0; - } - .p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link { - border: solid #3f3f46; - border-width: 0 0 1px 0; - border-color: transparent transparent #3f3f46 transparent; - background: #18181b; - color: #a1a1aa; - padding: 1rem 1.125rem; - font-weight: 600; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - margin: 0 0 -1px 0; - outline-color: transparent; - } - .p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link .p-menuitem-icon { - margin-right: 0.5rem; - } - .p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link:not(.p-disabled):focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -2px; - box-shadow: inset none; - } - .p-tabmenu .p-tabmenu-nav .p-tabmenuitem:not(.p-highlight):not(.p-disabled):hover .p-menuitem-link { - background: #18181b; - border-color: #3f3f46; - color: #ffffff; - } - .p-tabmenu .p-tabmenu-nav .p-tabmenuitem.p-highlight .p-menuitem-link { - background: #18181b; - border-color: #3f3f46; - color: #a78bfa; - } - - .p-tieredmenu ul { - margin: 0; - padding: 0; - list-style: none; - } - - .p-tieredmenu .p-submenu-list { - position: absolute; - min-width: 100%; - z-index: 1; - display: none; - } - - .p-tieredmenu .p-menuitem-link { - cursor: pointer; - display: flex; - align-items: center; - text-decoration: none; - overflow: hidden; - position: relative; - } - - .p-tieredmenu .p-menuitem-text { - line-height: 1; - } - - .p-tieredmenu .p-menuitem { - position: relative; - } - - .p-tieredmenu .p-menuitem-link .p-submenu-icon { - margin-left: auto; - } - - .p-tieredmenu .p-menuitem-active > .p-submenu-list { - display: block; - left: 100%; - top: 0; - } - - .p-tieredmenu-enter-from, -.p-tieredmenu-leave-active { - opacity: 0; - } - - .p-tieredmenu-enter-active { - transition: opacity 250ms; - } - - .p-tieredmenu { - padding: 0.25rem 0.25rem; - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - border-radius: 6px; - min-width: 12.5rem; - } - .p-tieredmenu.p-tieredmenu-overlay { - background: #18181b; - border: 1px solid #3f3f46; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-tieredmenu .p-tieredmenu-root-list { - outline: 0 none; - } - .p-tieredmenu .p-submenu-list { - padding: 0.25rem 0.25rem; - background: #18181b; - border: 1px solid #3f3f46; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - border-radius: 6px; - } - .p-tieredmenu .p-menuitem { - margin: 2px 0; - } - .p-tieredmenu .p-menuitem:first-child { - margin-top: 0; - } - .p-tieredmenu .p-menuitem:last-child { - margin-bottom: 0; - } - .p-tieredmenu .p-menuitem > .p-menuitem-content { - color: #ffffff; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-tieredmenu .p-menuitem > .p-menuitem-content .p-menuitem-link { - color: #ffffff; - padding: 0.5rem 0.75rem; - user-select: none; - } - .p-tieredmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-tieredmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { - color: #71717a; - margin-right: 0.5rem; - } - .p-tieredmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #71717a; - } - .p-tieredmenu .p-menuitem.p-highlight > .p-menuitem-content { - color: rgba(255, 255, 255, 0.87); - background: rgba(167, 139, 250, 0.16); - } - .p-tieredmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); - } - .p-tieredmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-tieredmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); - } - .p-tieredmenu .p-menuitem.p-highlight.p-focus > .p-menuitem-content { - background: rgba(167, 139, 250, 0.24); - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { - color: #ffffff; - background: rgba(255, 255, 255, 0.03); - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #ffffff; - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #ffffff; - } - .p-tieredmenu .p-menuitem-separator { - border-top: 1px solid #3f3f46; - margin: 2px 0; - } - .p-tieredmenu .p-submenu-icon { - font-size: 0.875rem; - } - .p-tieredmenu .p-submenu-icon.p-icon { - width: 0.875rem; - height: 0.875rem; - } - - .p-inline-message { - display: inline-flex; - align-items: center; - justify-content: center; - vertical-align: top; - } - - .p-inline-message-icon { - flex-shrink: 0; - } - - .p-inline-message-icon-only .p-inline-message-text { - visibility: hidden; - width: 0; - } - - .p-fluid .p-inline-message { - display: flex; - } - - .p-inline-message { - padding: 0.5rem 0.75rem; - margin: 0; - border-radius: 6px; - } - .p-inline-message.p-inline-message-info { - background: rgba(59, 130, 246, 0.16); - border: solid rgba(29, 78, 216, 0.36); - border-width: 1px; - color: #3b82f6; - } - .p-inline-message.p-inline-message-info .p-inline-message-icon { - color: #3b82f6; - } - .p-inline-message.p-inline-message-success { - background: rgba(34, 197, 94, 0.16); - border: solid rgba(21, 128, 61, 0.36); - border-width: 1px; - color: #22c55e; - } - .p-inline-message.p-inline-message-success .p-inline-message-icon { - color: #22c55e; - } - .p-inline-message.p-inline-message-warn { - background: rgba(234, 179, 8, 0.16); - border: solid rgba(161, 98, 7, 0.36); - border-width: 1px; - color: #eab308; - } - .p-inline-message.p-inline-message-warn .p-inline-message-icon { - color: #eab308; - } - .p-inline-message.p-inline-message-error { - background: rgba(239, 68, 68, 0.16); - border: solid rgba(185, 28, 28, 0.36); - border-width: 1px; - color: #ef4444; - } - .p-inline-message.p-inline-message-error .p-inline-message-icon { - color: #ef4444; - } - .p-inline-message.p-inline-message-secondary { - background: #27272a; - border: solid #3f3f46; - border-width: 1px; - color: #d4d4d8; - } - .p-inline-message.p-inline-message-secondary .p-inline-message-icon { - color: #d4d4d8; - } - .p-inline-message.p-inline-message-contrast { - background: #ffffff; - border: solid #f4f4f5; - border-width: 1px; - color: #09090b; - } - .p-inline-message.p-inline-message-contrast .p-inline-message-icon { - color: #09090b; - } - .p-inline-message .p-inline-message-icon { - font-size: 1rem; - margin-right: 0.5rem; - } - .p-inline-message .p-inline-message-text { - font-size: 1rem; - } - .p-inline-message.p-inline-message-icon-only .p-inline-message-icon { - margin-right: 0; - } - - .p-message-wrapper { - display: flex; - align-items: center; - } - - .p-message-icon { - flex-shrink: 0; - } - - .p-message-close { - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - } - - .p-message-close.p-link { - margin-left: auto; - overflow: hidden; - position: relative; - } - - .p-message-enter-from { - opacity: 0; - } - - .p-message-enter-active { - transition: opacity 0.3s; - } - - .p-message.p-message-leave-from { - max-height: 1000px; - } - - .p-message.p-message-leave-to { - max-height: 0; - opacity: 0; - margin: 0; - } - - .p-message-leave-active { - overflow: hidden; - transition: max-height 0.3s cubic-bezier(0, 1, 0, 1), opacity 0.3s, margin 0.15s; - } - - .p-message-leave-active .p-message-close { - display: none; - } - - .p-message { - margin: 1rem 0; - border-radius: 6px; - } - .p-message .p-message-wrapper { - padding: 0.5rem 0.75rem; - } - .p-message .p-message-close { - width: 1.75rem; - height: 1.75rem; - border-radius: 50%; - background: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-message .p-message-close:hover { - background: rgba(255, 255, 255, 0.5); - } - .p-message .p-message-close:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-message.p-message-info { - background: rgba(59, 130, 246, 0.16); - border: solid rgba(29, 78, 216, 0.36); - border-width: 1px; - color: #3b82f6; - } - .p-message.p-message-info .p-message-icon { - color: #3b82f6; - } - .p-message.p-message-info .p-message-close { - color: #3b82f6; - } - .p-message.p-message-success { - background: rgba(34, 197, 94, 0.16); - border: solid rgba(21, 128, 61, 0.36); - border-width: 1px; - color: #22c55e; - } - .p-message.p-message-success .p-message-icon { - color: #22c55e; - } - .p-message.p-message-success .p-message-close { - color: #22c55e; - } - .p-message.p-message-warn { - background: rgba(234, 179, 8, 0.16); - border: solid rgba(161, 98, 7, 0.36); - border-width: 1px; - color: #eab308; - } - .p-message.p-message-warn .p-message-icon { - color: #eab308; - } - .p-message.p-message-warn .p-message-close { - color: #eab308; - } - .p-message.p-message-error { - background: rgba(239, 68, 68, 0.16); - border: solid rgba(185, 28, 28, 0.36); - border-width: 1px; - color: #ef4444; - } - .p-message.p-message-error .p-message-icon { - color: #ef4444; - } - .p-message.p-message-error .p-message-close { - color: #ef4444; - } - .p-message.p-message-secondary { - background: #27272a; - border: solid #3f3f46; - border-width: 1px; - color: #d4d4d8; - } - .p-message.p-message-secondary .p-message-icon { - color: #d4d4d8; - } - .p-message.p-message-secondary .p-message-close { - color: #d4d4d8; - } - .p-message.p-message-contrast { - background: #ffffff; - border: solid #f4f4f5; - border-width: 1px; - color: #09090b; - } - .p-message.p-message-contrast .p-message-icon { - color: #09090b; - } - .p-message.p-message-contrast .p-message-close { - color: #09090b; - } - .p-message .p-message-text { - font-size: 1rem; - font-weight: 500; - } - .p-message .p-message-icon { - font-size: 1rem; - margin-right: 0.5rem; - } - .p-message .p-icon:not(.p-message-close-icon) { - width: 1rem; - height: 1rem; - } - - .p-toast { - width: 25rem; - white-space: pre-line; - word-break: break-word; - } - - .p-toast-message-icon { - flex-shrink: 0; - } - - .p-toast-message-content { - display: flex; - align-items: flex-start; - } - - .p-toast-message-text { - flex: 1 1 auto; - } - - .p-toast-top-center { - transform: translateX(-50%); - } - - .p-toast-bottom-center { - transform: translateX(-50%); - } - - .p-toast-center { - min-width: 20vw; - transform: translate(-50%, -50%); - } - - .p-toast-icon-close { - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; - position: relative; - } - - .p-toast-icon-close.p-link { - cursor: pointer; - } - - /* Animations */ - .p-toast-message-enter-from { - opacity: 0; - -webkit-transform: translateY(50%); - -ms-transform: translateY(50%); - transform: translateY(50%); - } - - .p-toast-message-leave-from { - max-height: 1000px; - } - - .p-toast .p-toast-message.p-toast-message-leave-to { - max-height: 0; - opacity: 0; - margin-bottom: 0; - overflow: hidden; - } - - .p-toast-message-enter-active { - -webkit-transition: transform 0.3s, opacity 0.3s; - transition: transform 0.3s, opacity 0.3s; - } - - .p-toast-message-leave-active { - -webkit-transition: max-height 0.45s cubic-bezier(0, 1, 0, 1), opacity 0.3s, margin-bottom 0.3s; - transition: max-height 0.45s cubic-bezier(0, 1, 0, 1), opacity 0.3s, margin-bottom 0.3s; - } - - .p-toast { - opacity: 1; - } - .p-toast .p-toast-message { - margin: 0 0 1rem 0; - box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); - border-radius: 6px; - } - .p-toast .p-toast-message .p-toast-message-content { - padding: 0.75rem; - border-width: 1px; - } - .p-toast .p-toast-message .p-toast-message-content .p-toast-message-text { - margin: 0 0 0 0.5rem; - } - .p-toast .p-toast-message .p-toast-message-content .p-toast-message-icon { - font-size: 1.125rem; - } - .p-toast .p-toast-message .p-toast-message-content .p-toast-message-icon.p-icon { - width: 1.125rem; - height: 1.125rem; - } - .p-toast .p-toast-message .p-toast-message-content .p-toast-summary { - font-weight: 500; - } - .p-toast .p-toast-message .p-toast-message-content .p-toast-detail { - margin: 0.5rem 0 0 0; - } - .p-toast .p-toast-message .p-toast-icon-close { - width: 1.125rem; - height: 1.125rem; - border-radius: 50%; - background: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-toast .p-toast-message .p-toast-icon-close:hover { - background: rgba(255, 255, 255, 0.5); - } - .p-toast .p-toast-message .p-toast-icon-close:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-toast .p-toast-message.p-toast-message-info { - background: rgba(59, 130, 246, 0.16); - border: solid rgba(29, 78, 216, 0.36); - border-width: 1px; - color: #3b82f6; - } - .p-toast .p-toast-message.p-toast-message-info .p-toast-message-icon, -.p-toast .p-toast-message.p-toast-message-info .p-toast-icon-close { - color: #3b82f6; - } - .p-toast .p-toast-message.p-toast-message-success { - background: rgba(34, 197, 94, 0.16); - border: solid rgba(21, 128, 61, 0.36); - border-width: 1px; - color: #22c55e; - } - .p-toast .p-toast-message.p-toast-message-success .p-toast-message-icon, -.p-toast .p-toast-message.p-toast-message-success .p-toast-icon-close { - color: #22c55e; - } - .p-toast .p-toast-message.p-toast-message-warn { - background: rgba(234, 179, 8, 0.16); - border: solid rgba(161, 98, 7, 0.36); - border-width: 1px; - color: #eab308; - } - .p-toast .p-toast-message.p-toast-message-warn .p-toast-message-icon, -.p-toast .p-toast-message.p-toast-message-warn .p-toast-icon-close { - color: #eab308; - } - .p-toast .p-toast-message.p-toast-message-error { - background: rgba(239, 68, 68, 0.16); - border: solid rgba(185, 28, 28, 0.36); - border-width: 1px; - color: #ef4444; - } - .p-toast .p-toast-message.p-toast-message-error .p-toast-message-icon, -.p-toast .p-toast-message.p-toast-message-error .p-toast-icon-close { - color: #ef4444; - } - .p-toast .p-toast-message.p-toast-message-secondary { - background: #27272a; - border: solid #3f3f46; - border-width: 1px; - color: #d4d4d8; - } - .p-toast .p-toast-message.p-toast-message-secondary .p-toast-message-icon, -.p-toast .p-toast-message.p-toast-message-secondary .p-toast-icon-close { - color: #d4d4d8; - } - .p-toast .p-toast-message.p-toast-message-contrast { - background: #ffffff; - border: solid #f4f4f5; - border-width: 1px; - color: #09090b; - } - .p-toast .p-toast-message.p-toast-message-contrast .p-toast-message-icon, -.p-toast .p-toast-message.p-toast-message-contrast .p-toast-icon-close { - color: #09090b; - } - - .p-galleria-content { - display: flex; - flex-direction: column; - } - - .p-galleria-item-wrapper { - display: flex; - flex-direction: column; - position: relative; - } - - .p-galleria-item-container { - position: relative; - display: flex; - height: 100%; - } - - .p-galleria-item-nav { - position: absolute; - top: 50%; - margin-top: -0.5rem; - display: inline-flex; - justify-content: center; - align-items: center; - overflow: hidden; - } - - .p-galleria-item-prev { - left: 0; - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - .p-galleria-item-next { - right: 0; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - .p-galleria-item { - display: flex; - justify-content: center; - align-items: center; - height: 100%; - width: 100%; - } - - .p-galleria-item-nav-onhover .p-galleria-item-nav { - pointer-events: none; - opacity: 0; - transition: opacity 0.2s ease-in-out; - } - - .p-galleria-item-nav-onhover .p-galleria-item-wrapper:hover .p-galleria-item-nav { - pointer-events: all; - opacity: 1; - } - - .p-galleria-item-nav-onhover .p-galleria-item-wrapper:hover .p-galleria-item-nav.p-disabled { - pointer-events: none; - } - - .p-galleria-caption { - position: absolute; - bottom: 0; - left: 0; - width: 100%; - } - - /* Thumbnails */ - .p-galleria-thumbnail-wrapper { - display: flex; - flex-direction: column; - overflow: auto; - flex-shrink: 0; - } - - .p-galleria-thumbnail-prev, -.p-galleria-thumbnail-next { - align-self: center; - flex: 0 0 auto; - display: flex; - justify-content: center; - align-items: center; - overflow: hidden; - position: relative; - } - - .p-galleria-thumbnail-prev span, -.p-galleria-thumbnail-next span { - display: flex; - justify-content: center; - align-items: center; - } - - .p-galleria-thumbnail-container { - display: flex; - flex-direction: row; - } - - .p-galleria-thumbnail-items-container { - overflow: hidden; - width: 100%; - } - - .p-galleria-thumbnail-items { - display: flex; - } - - .p-galleria-thumbnail-item { - overflow: auto; - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - opacity: 0.5; - } - - .p-galleria-thumbnail-item:hover { - opacity: 1; - transition: opacity 0.3s; - } - - .p-galleria-thumbnail-item-current { - opacity: 1; - } - - /* Positions */ - /* Thumbnails */ - .p-galleria-thumbnails-left .p-galleria-content, -.p-galleria-thumbnails-right .p-galleria-content { - flex-direction: row; - } - - .p-galleria-thumbnails-left .p-galleria-item-wrapper, -.p-galleria-thumbnails-right .p-galleria-item-wrapper { - flex-direction: row; - } - - .p-galleria-thumbnails-left .p-galleria-item-wrapper, -.p-galleria-thumbnails-top .p-galleria-item-wrapper { - order: 2; - } - - .p-galleria-thumbnails-left .p-galleria-thumbnail-wrapper, -.p-galleria-thumbnails-top .p-galleria-thumbnail-wrapper { - order: 1; - } - - .p-galleria-thumbnails-left .p-galleria-thumbnail-container, -.p-galleria-thumbnails-right .p-galleria-thumbnail-container { - flex-direction: column; - flex-grow: 1; - } - - .p-galleria-thumbnails-left .p-galleria-thumbnail-items, -.p-galleria-thumbnails-right .p-galleria-thumbnail-items { - flex-direction: column; - height: 100%; - } - - /* Indicators */ - .p-galleria-indicators { - display: flex; - align-items: center; - justify-content: center; - } - - .p-galleria-indicator > button { - display: inline-flex; - align-items: center; - } - - .p-galleria-indicators-left .p-galleria-item-wrapper, -.p-galleria-indicators-right .p-galleria-item-wrapper { - flex-direction: row; - align-items: center; - } - - .p-galleria-indicators-left .p-galleria-item-container, -.p-galleria-indicators-top .p-galleria-item-container { - order: 2; - } - - .p-galleria-indicators-left .p-galleria-indicators, -.p-galleria-indicators-top .p-galleria-indicators { - order: 1; - } - - .p-galleria-indicators-left .p-galleria-indicators, -.p-galleria-indicators-right .p-galleria-indicators { - flex-direction: column; - } - - .p-galleria-indicator-onitem .p-galleria-indicators { - position: absolute; - display: flex; - z-index: 1; - } - - .p-galleria-indicator-onitem.p-galleria-indicators-top .p-galleria-indicators { - top: 0; - left: 0; - width: 100%; - align-items: flex-start; - } - - .p-galleria-indicator-onitem.p-galleria-indicators-right .p-galleria-indicators { - right: 0; - top: 0; - height: 100%; - align-items: flex-end; - } - - .p-galleria-indicator-onitem.p-galleria-indicators-bottom .p-galleria-indicators { - bottom: 0; - left: 0; - width: 100%; - align-items: flex-end; - } - - .p-galleria-indicator-onitem.p-galleria-indicators-left .p-galleria-indicators { - left: 0; - top: 0; - height: 100%; - align-items: flex-start; - } - - /* FullScreen */ - .p-galleria-mask { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; - } - - .p-galleria-close { - position: absolute; - top: 0; - right: 0; - display: flex; - justify-content: center; - align-items: center; - overflow: hidden; - } - - .p-galleria-mask .p-galleria-item-nav { - position: fixed; - top: 50%; - margin-top: -0.5rem; - } - - /* Animation */ - .p-galleria-enter-active { - transition: all 150ms cubic-bezier(0, 0, 0.2, 1); - } - - .p-galleria-leave-active { - transition: all 150ms cubic-bezier(0.4, 0, 0.2, 1); - } - - .p-galleria-enter-from, -.p-galleria-leave-to { - opacity: 0; - transform: scale(0.7); - } - - .p-galleria-enter-active .p-galleria-item-nav { - opacity: 0; - } - - /* Keyboard Support */ - .p-items-hidden .p-galleria-thumbnail-item { - visibility: hidden; - } - - .p-items-hidden .p-galleria-thumbnail-item.p-galleria-thumbnail-item-active { - visibility: visible; - } - - .p-galleria .p-galleria-close { - margin: 0.5rem; - background: transparent; - color: #a1a1aa; - width: 4rem; - height: 4rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 50%; - } - .p-galleria .p-galleria-close .p-galleria-close-icon { - font-size: 2rem; - } - .p-galleria .p-galleria-close .p-icon { - width: 2rem; - height: 2rem; - } - .p-galleria .p-galleria-close:hover { - background: rgba(255, 255, 255, 0.03); - color: #ffffff; - } - .p-galleria .p-galleria-item-nav { - background: transparent; - color: #a1a1aa; - width: 4rem; - height: 4rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - margin: 0 0.5rem; - } - .p-galleria .p-galleria-item-nav .p-galleria-item-prev-icon, -.p-galleria .p-galleria-item-nav .p-galleria-item-next-icon { - font-size: 2rem; - } - .p-galleria .p-galleria-item-nav .p-icon { - width: 2rem; - height: 2rem; - } - .p-galleria .p-galleria-item-nav:not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); - color: #ffffff; - } - .p-galleria .p-galleria-caption { - background: rgba(0, 0, 0, 0.5); - color: #ffffff; - padding: 1rem; - } - .p-galleria .p-galleria-indicators { - padding: 1rem; - } - .p-galleria .p-galleria-indicators .p-galleria-indicator button { - background-color: #3f3f46; - width: 1rem; - height: 1rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 50%; - } - .p-galleria .p-galleria-indicators .p-galleria-indicator button:hover { - background: #3f3f46; - } - .p-galleria .p-galleria-indicators .p-galleria-indicator.p-highlight button { - background: rgba(167, 139, 250, 0.16); - color: rgba(255, 255, 255, 0.87); - } - .p-galleria.p-galleria-indicators-bottom .p-galleria-indicator, .p-galleria.p-galleria-indicators-top .p-galleria-indicator { - margin-right: 0.5rem; - } - .p-galleria.p-galleria-indicators-left .p-galleria-indicator, .p-galleria.p-galleria-indicators-right .p-galleria-indicator { - margin-bottom: 0.5rem; - } - .p-galleria.p-galleria-indicator-onitem .p-galleria-indicators { - background: rgba(0, 0, 0, 0.5); - } - .p-galleria.p-galleria-indicator-onitem .p-galleria-indicators .p-galleria-indicator button { - background: rgba(255, 255, 255, 0.4); - } - .p-galleria.p-galleria-indicator-onitem .p-galleria-indicators .p-galleria-indicator button:hover { - background: rgba(255, 255, 255, 0.6); - } - .p-galleria.p-galleria-indicator-onitem .p-galleria-indicators .p-galleria-indicator.p-highlight button { - background: rgba(167, 139, 250, 0.16); - color: rgba(255, 255, 255, 0.87); - } - .p-galleria .p-galleria-thumbnail-container { - background: rgba(0, 0, 0, 0.9); - padding: 1rem 0.25rem; - } - .p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-prev, -.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-next { - margin: 0.5rem; - background-color: transparent; - color: #a1a1aa; - width: 2rem; - height: 2rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 50%; - } - .p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-prev:hover, -.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-next:hover { - background: rgba(255, 255, 255, 0.03); - color: #ffffff; - } - .p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-item-content { - outline-color: transparent; - } - .p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-item-content:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-galleria-mask { - --maskbg: rgba(0, 0, 0, 0.9); - } - - .p-image-mask { - display: flex; - align-items: center; - justify-content: center; - } - - .p-image-preview-container { - position: relative; - display: inline-block; - line-height: 0; - } - - .p-image-preview-indicator { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; - opacity: 0; - transition: opacity 0.3s; - border: none; - padding: 0; - } - - .p-image-preview-container:hover > .p-image-preview-indicator { - opacity: 1; - cursor: pointer; - } - - .p-image-preview-container > img { - cursor: pointer; - } - - .p-image-toolbar { - position: absolute; - top: 0; - right: 0; - display: flex; - z-index: 1; - } - - .p-image-action.p-link { - display: flex; - justify-content: center; - align-items: center; - } - - .p-image-action.p-disabled { - pointer-events: auto; - } - - .p-image-preview { - transition: transform 0.15s; - max-width: 100vw; - max-height: 100vh; - } - - .p-image-preview-enter-active { - transition: all 150ms cubic-bezier(0, 0, 0.2, 1); - } - - .p-image-preview-leave-active { - transition: all 150ms cubic-bezier(0.4, 0, 0.2, 1); - } - - .p-image-preview-enter-from, -.p-image-preview-leave-to { - opacity: 0; - transform: scale(0.7); - } - - .p-image-mask { - --maskbg: rgba(0, 0, 0, 0.9); - } - - .p-image-preview-indicator { - background-color: transparent; - color: #a1a1aa; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-image-preview-indicator .p-icon { - width: 1.5rem; - height: 1.5rem; - } - - .p-image-preview-container:hover > .p-image-preview-indicator { - background-color: rgba(0, 0, 0, 0.5); - } - - .p-image-toolbar { - padding: 1rem; - } - - .p-image-action.p-link { - color: #a1a1aa; - background-color: transparent; - width: 3rem; - height: 3rem; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - margin-right: 0.5rem; - } - .p-image-action.p-link:last-child { - margin-right: 0; - } - .p-image-action.p-link:hover { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.03); - } - .p-image-action.p-link i { - font-size: 1.5rem; - } - .p-image-action.p-link .p-icon { - width: 1.5rem; - height: 1.5rem; - } - - .p-avatar { - display: inline-flex; - align-items: center; - justify-content: center; - width: 2rem; - height: 2rem; - font-size: 1rem; - } - - .p-avatar.p-avatar-image { - background-color: transparent; - } - - .p-avatar.p-avatar-circle { - border-radius: 50%; - } - - .p-avatar-circle img { - border-radius: 50%; - } - - .p-avatar .p-avatar-icon { - font-size: 1rem; - } - - .p-avatar img { - width: 100%; - height: 100%; - } - - .p-avatar-group .p-avatar + .p-avatar { - margin-left: -1rem; - } - - .p-avatar-group { - display: flex; - align-items: center; - } - - .p-avatar { - background-color: #3f3f46; - border-radius: 6px; - } - .p-avatar.p-avatar-lg { - width: 3rem; - height: 3rem; - font-size: 1.5rem; - } - .p-avatar.p-avatar-lg .p-avatar-icon { - font-size: 1.5rem; - } - .p-avatar.p-avatar-xl { - width: 4rem; - height: 4rem; - font-size: 2rem; - } - .p-avatar.p-avatar-xl .p-avatar-icon { - font-size: 2rem; - } - - .p-avatar-group .p-avatar { - border: 2px solid #18181b; - } - - .p-badge { - display: inline-block; - border-radius: 10px; - text-align: center; - padding: 0 0.5rem; - } - - .p-overlay-badge { - position: relative; - } - - .p-overlay-badge .p-badge { - position: absolute; - top: 0; - right: 0; - transform: translate(50%, -50%); - transform-origin: 100% 0; - margin: 0; - } - - .p-badge.p-badge-dot { - width: 0.5rem; - min-width: 0.5rem; - height: 0.5rem; - border-radius: 50%; - padding: 0; - } - - .p-badge-no-gutter { - padding: 0; - border-radius: 50%; - } - - .p-badge { - background: #a78bfa; - color: #020617; - font-size: 0.75rem; - font-weight: 700; - min-width: 1.5rem; - height: 1.5rem; - line-height: 1.5rem; - } - .p-badge.p-badge-secondary { - background-color: #27272a; - color: #d4d4d8; - } - .p-badge.p-badge-success { - background-color: #4ade80; - color: #052e16; - } - .p-badge.p-badge-info { - background-color: #38bdf8; - color: #082f49; - } - .p-badge.p-badge-warning { - background-color: #fb923c; - color: #431407; - } - .p-badge.p-badge-danger { - background-color: #f87171; - color: #450a0a; - } - .p-badge.p-badge-secondary { - background-color: #27272a; - color: #d4d4d8; - } - .p-badge.p-badge-contrast { - background-color: #ffffff; - color: #09090b; - } - .p-badge.p-badge-lg { - font-size: 1.125rem; - min-width: 2.25rem; - height: 2.25rem; - line-height: 2.25rem; - } - .p-badge.p-badge-xl { - font-size: 1.5rem; - min-width: 3rem; - height: 3rem; - line-height: 3rem; - } - - .p-blockui-container { - position: relative; - } - - .p-blockui.p-component-overlay { - position: absolute; - } - - .p-blockui-document.p-component-overlay { - position: fixed; - } - - .p-blockui { - border-radius: 6px; - } - - .p-chip { - display: inline-flex; - align-items: center; - } - - .p-chip-text { - line-height: 1.5; - } - - .p-chip-icon.pi { - line-height: 1.5; - } - - .p-chip-remove-icon { - line-height: 1.5; - cursor: pointer; - } - - .p-chip img { - border-radius: 50%; - } - - .p-chip { - background-color: #3f3f46; - color: #ffffff; - border-radius: 16px; - padding: 0 0.75rem; - } - .p-chip .p-chip-text { - line-height: 1.5; - margin-top: 0.25rem; - margin-bottom: 0.25rem; - } - .p-chip .p-chip-icon { - margin-right: 0.5rem; - } - .p-chip img { - width: 2rem; - height: 2rem; - margin-left: -0.75rem; - margin-right: 0.5rem; - } - .p-chip .p-chip-remove-icon { - margin-left: 0.5rem; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-chip .p-chip-remove-icon:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-chip .p-chip-remove-icon:focus { - outline: 0 none; - } - - .p-inplace .p-inplace-display { - display: inline; - cursor: pointer; - } - - .p-inplace .p-inplace-content { - display: inline; - } - - .p-fluid .p-inplace.p-inplace-closable .p-inplace-content { - display: flex; - } - - .p-fluid .p-inplace.p-inplace-closable .p-inplace-content > .p-inputtext { - flex: 1 1 auto; - width: 1%; - } - - .p-inplace .p-inplace-display { - padding: 0.5rem 0.75rem; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-inplace .p-inplace-display:not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); - color: #ffffff; - } - .p-inplace .p-inplace-display:focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-metergroup { - display: flex; - } - - .p-metergroup-meters { - display: flex; - } - - .p-metergroup-vertical .p-metergroup-meters { - flex-direction: column; - } - - .p-metergroup-labels { - display: flex; - flex-wrap: wrap; - margin: 0; - padding: 0; - list-style-type: none; - } - - .p-metergroup-vertical .p-metergroup-labels { - align-items: start; - } - - .p-metergroup-labels-vertical { - flex-direction: column; - } - - .p-metergroup-label { - display: inline-flex; - align-items: center; - } - - .p-metergroup-label-marker { - display: inline-flex; - } - - .p-metergroup { - gap: 1rem; - } - .p-metergroup .p-metergroup-meters { - background: #3f3f46; - border-radius: 6px; - } - .p-metergroup .p-metergroup-meter { - border: 0 none; - background: #a78bfa; - } - .p-metergroup .p-metergroup-labels .p-metergroup-label { - gap: 0.5rem; - } - .p-metergroup .p-metergroup-labels .p-metergroup-label-marker { - background: #a78bfa; - width: 0.5rem; - height: 0.5rem; - border-radius: 100%; - } - .p-metergroup .p-metergroup-labels .p-metergroup-label-icon { - width: 1rem; - height: 1rem; - } - .p-metergroup .p-metergroup-labels.p-metergroup-labels-vertical { - gap: 0.5rem; - } - .p-metergroup .p-metergroup-labels.p-metergroup-labels-horizontal { - gap: 1rem; - } - .p-metergroup.p-metergroup-horizontal { - flex-direction: column; - } - .p-metergroup.p-metergroup-horizontal .p-metergroup-meters { - height: 0.5rem; - } - .p-metergroup.p-metergroup-horizontal .p-metergroup-meter:first-of-type { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-metergroup.p-metergroup-horizontal .p-metergroup-meter:last-of-type { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - } - .p-metergroup.p-metergroup-vertical { - flex-direction: row; - } - .p-metergroup.p-metergroup-vertical .p-metergroup-meters { - width: 0.5rem; - height: 100%; - } - .p-metergroup.p-metergroup-vertical .p-metergroup-meter:first-of-type { - border-top-left-radius: 6px; - border-top-right-radius: 6px; - } - .p-metergroup.p-metergroup-vertical .p-metergroup-meter:last-of-type { - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; - } - - .p-progressbar { - position: relative; - overflow: hidden; - } - - .p-progressbar-determinate .p-progressbar-value { - height: 100%; - width: 0%; - position: absolute; - display: none; - border: 0 none; - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; - } - - .p-progressbar-determinate .p-progressbar-label { - display: inline-flex; - } - - .p-progressbar-determinate .p-progressbar-value-animate { - transition: width 1s ease-in-out; - } - - .p-progressbar-indeterminate .p-progressbar-value::before { - content: ""; - position: absolute; - background-color: inherit; - top: 0; - left: 0; - bottom: 0; - will-change: left, right; - -webkit-animation: p-progressbar-indeterminate-anim 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - animation: p-progressbar-indeterminate-anim 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - } - - .p-progressbar-indeterminate .p-progressbar-value::after { - content: ""; - position: absolute; - background-color: inherit; - top: 0; - left: 0; - bottom: 0; - will-change: left, right; - -webkit-animation: p-progressbar-indeterminate-anim-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - animation: p-progressbar-indeterminate-anim-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - -webkit-animation-delay: 1.15s; - animation-delay: 1.15s; - } - - @-webkit-keyframes p-progressbar-indeterminate-anim { - 0% { - left: -35%; - right: 100%; - } - 60% { - left: 100%; - right: -90%; - } - 100% { - left: 100%; - right: -90%; - } - } - @keyframes p-progressbar-indeterminate-anim { - 0% { - left: -35%; - right: 100%; - } - 60% { - left: 100%; - right: -90%; - } - 100% { - left: 100%; - right: -90%; - } - } - @-webkit-keyframes p-progressbar-indeterminate-anim-short { - 0% { - left: -200%; - right: 100%; - } - 60% { - left: 107%; - right: -8%; - } - 100% { - left: 107%; - right: -8%; - } - } - @keyframes p-progressbar-indeterminate-anim-short { - 0% { - left: -200%; - right: 100%; - } - 60% { - left: 107%; - right: -8%; - } - 100% { - left: 107%; - right: -8%; - } - } - .p-progressbar { - border: 0 none; - height: 1.25rem; - background: #3f3f46; - border-radius: 6px; - } - .p-progressbar .p-progressbar-value { - border: 0 none; - margin: 0; - background: #a78bfa; - } - .p-progressbar .p-progressbar-label { - color: #020617; - line-height: 1.25rem; - } - - .p-progress-spinner { - position: relative; - margin: 0 auto; - width: 100px; - height: 100px; - display: inline-block; - } - - .p-progress-spinner::before { - content: ""; - display: block; - padding-top: 100%; - } - - .p-progress-spinner-svg { - height: 100%; - transform-origin: center center; - width: 100%; - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - margin: auto; - } - - .p-progress-spinner-svg { - animation: p-progress-spinner-rotate 2s linear infinite; - } - - .p-progress-spinner-circle { - stroke-dasharray: 89, 200; - stroke-dashoffset: 0; - stroke: #ef4444; - animation: p-progress-spinner-dash 1.5s ease-in-out infinite, p-progress-spinner-color 6s ease-in-out infinite; - stroke-linecap: round; - } - - @keyframes p-progress-spinner-rotate { - 100% { - transform: rotate(360deg); - } - } - @keyframes p-progress-spinner-dash { - 0% { - stroke-dasharray: 1, 200; - stroke-dashoffset: 0; - } - 50% { - stroke-dasharray: 89, 200; - stroke-dashoffset: -35px; - } - 100% { - stroke-dasharray: 89, 200; - stroke-dashoffset: -124px; - } - } - @keyframes p-progress-spinner-color { - 100%, 0% { - stroke: #ef4444; - } - 40% { - stroke: #3b82f6; - } - 66% { - stroke: #22c55e; - } - 80%, 90% { - stroke: #eab308; - } - } - .p-ripple { - overflow: hidden; - position: relative; - } - - .p-ink { - display: block; - position: absolute; - background: rgba(255, 255, 255, 0.5); - border-radius: 100%; - transform: scale(0); - pointer-events: none; - } - - .p-ink-active { - animation: ripple 0.4s linear; - } - - .p-ripple-disabled .p-ink { - display: none; - } - - @keyframes ripple { - 100% { - opacity: 0; - transform: scale(2.5); - } - } - .p-scrolltop { - position: fixed; - bottom: 20px; - right: 20px; - display: flex; - align-items: center; - justify-content: center; - } - - .p-scrolltop-sticky { - position: sticky; - } - - .p-scrolltop-sticky.p-link { - margin-left: auto; - } - - .p-scrolltop-enter-from { - opacity: 0; - } - - .p-scrolltop-enter-active { - transition: opacity 0.15s; - } - - .p-scrolltop.p-scrolltop-leave-to { - opacity: 0; - } - - .p-scrolltop-leave-active { - transition: opacity 0.15s; - } - - .p-scrolltop { - width: 3rem; - height: 3rem; - border-radius: 50%; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-scrolltop.p-link { - background: #3f3f46; - } - .p-scrolltop.p-link:hover { - background: #3f3f46; - } - .p-scrolltop .p-scrolltop-icon { - font-size: 1.5rem; - color: #ffffff; - } - .p-scrolltop .p-scrolltop-icon.p-icon { - width: 1.5rem; - height: 1.5rem; - } - - .p-skeleton { - overflow: hidden; - } - - .p-skeleton::after { - content: ""; - animation: p-skeleton-animation 1.2s infinite; - height: 100%; - left: 0; - position: absolute; - right: 0; - top: 0; - transform: translateX(-100%); - z-index: 1; - } - - .p-skeleton.p-skeleton-circle { - border-radius: 50%; - } - - .p-skeleton-none::after { - animation: none; - } - - @keyframes p-skeleton-animation { - from { - transform: translateX(-100%); - } - to { - transform: translateX(100%); - } - } - .p-skeleton { - background-color: rgba(255, 255, 255, 0.06); - border-radius: 6px; - } - .p-skeleton:after { - background: linear-gradient(90deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0)); - } - - .p-tag { - display: inline-flex; - align-items: center; - justify-content: center; - } - - .p-tag-icon, -.p-tag-value, -.p-tag-icon.pi { - line-height: 1.5; - } - - .p-tag.p-tag-rounded { - border-radius: 10rem; - } - - .p-tag { - background: #a78bfa; - color: #020617; - font-size: 0.75rem; - font-weight: 700; - padding: 0.25rem 0.4rem; - border-radius: 6px; - } - .p-tag.p-tag-success { - background-color: #4ade80; - color: #052e16; - } - .p-tag.p-tag-info { - background-color: #38bdf8; - color: #082f49; - } - .p-tag.p-tag-warning { - background-color: #fb923c; - color: #431407; - } - .p-tag.p-tag-danger { - background-color: #f87171; - color: #450a0a; - } - .p-tag.p-tag-secondary { - background-color: #27272a; - color: #d4d4d8; - } - .p-tag.p-tag-contrast { - background-color: #ffffff; - color: #09090b; - } - .p-tag .p-tag-icon { - font-size: 0.75rem; - } - .p-tag .p-tag-icon:not(:last-child) { - margin-right: 0.25rem; - } - .p-tag .p-tag-icon.p-icon { - width: 0.75rem; - height: 0.75rem; - } - - .p-terminal { - height: 18rem; - overflow: auto; - } - - .p-terminal-prompt-container { - display: flex; - align-items: center; - } - - .p-terminal-input { - flex: 1 1 auto; - border: 0 none; - background-color: transparent; - color: inherit; - padding: 0; - outline: 0 none; - } - - .p-terminal-input::-ms-clear { - display: none; - } - - .p-terminal { - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - padding: 0 1.125rem 1.125rem 1.125rem; - } - .p-terminal .p-terminal-input { - font-family: var(--font-family); - font-feature-settings: var(--font-feature-settings, normal); - font-size: 1rem; - } -} -@layer primevue { - .p-accordion .p-accordion-header .p-accordion-header-link { - border-radius: 6px !important; - flex-direction: row-reverse; - justify-content: space-between; - } - .p-accordion .p-accordion-header .p-accordion-header-link:hover { - border-bottom-color: #18181b; - } - .p-accordion .p-accordion-header .p-accordion-header-link .p-accordion-toggle-icon { - transform: rotate(90deg); - } - .p-accordion .p-accordion-header.p-highlight .p-accordion-toggle-icon { - transform: rotate(-180deg); - } - .p-accordion .p-accordion-tab { - border-bottom: 1px solid #27272a; - } - .p-accordion .p-accordion-tab:last-child { - border-bottom: 0 none; - } - - .p-autocomplete .p-autocomplete-multiple-container { - padding: 0.25rem 0.25rem; - gap: 0.25rem; - } - .p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token { - border-radius: 4px; - margin: 0; - } - .p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token .p-autocomplete-token-icon { - margin-left: 0.375rem; - } - .p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-input-token { - margin-left: 0.5rem; - } - .p-autocomplete .p-autocomplete-multiple-container:has(.p-autocomplete-token) .p-autocomplete-input-token { - margin-left: 0.5rem; - } - .p-autocomplete.p-disabled { - opacity: 1; - } - - .p-button-label { - font-weight: 500; - } - - .p-button.p-button-success:enabled:focus-visible { - outline-color: #4ade80; - } - .p-button.p-button-info:enabled:focus-visible { - outline-color: #38bdf8; - } - .p-button.p-button-warning:enabled:focus-visible { - outline-color: #fb923c; - } - .p-button.p-button-help:enabled:focus-visible { - outline-color: #c084fc; - } - .p-button.p-button-danger:enabled:focus-visible { - outline-color: #f87171; - } - .p-button.p-button-contrast:enabled:focus-visible { - outline-color: #ffffff; - } - .p-button.p-button-outlined { - border-color: rgba(167, 139, 250, 0.44); - } - .p-button.p-button-outlined:not(:disabled):hover, .p-button.p-button-outlined:not(:disabled):active { - border-color: rgba(167, 139, 250, 0.44); - } - .p-button.p-button-outlined.p-button-secondary { - border-color: rgba(82, 82, 91, 0.48); - color: #a1a1aa; - } - .p-button.p-button-outlined.p-button-secondary:not(:disabled):hover { - color: #a1a1aa; - background-color: rgba(255, 255, 255, 0.04); - border-color: rgba(82, 82, 91, 0.48); - } - .p-button.p-button-outlined.p-button-secondary:not(:disabled):active { - color: #a1a1aa; - background-color: rgba(255, 255, 255, 0.16); - border-color: rgba(82, 82, 91, 0.48); - } - .p-button.p-button-outlined.p-button-success { - border-color: rgba(21, 128, 61, 0.44); - } - .p-button.p-button-outlined.p-button-success:not(:disabled):hover, .p-button.p-button-outlined.p-button-success:not(:disabled):active { - border-color: rgba(21, 128, 61, 0.44); - } - .p-button.p-button-outlined.p-button-info { - border-color: rgba(29, 78, 216, 0.44); - } - .p-button.p-button-outlined.p-button-info:not(:disabled):hover, .p-button.p-button-outlined.p-button-info:not(:disabled):active { - border-color: rgba(29, 78, 216, 0.44); - } - .p-button.p-button-outlined.p-button-warning { - border-color: rgba(161, 98, 7, 0.44); - } - .p-button.p-button-outlined.p-button-warning:not(:disabled):hover, .p-button.p-button-outlined.p-button-warning:not(:disabled):active { - border-color: rgba(161, 98, 7, 0.44); - } - .p-button.p-button-outlined.p-button-help { - border-color: rgba(109, 40, 217, 0.44); - } - .p-button.p-button-outlined.p-button-help:not(:disabled):hover, .p-button.p-button-outlined.p-button-help:not(:disabled):active { - border-color: rgba(109, 40, 217, 0.44); - } - .p-button.p-button-outlined.p-button-danger { - border-color: rgba(185, 28, 28, 0.44); - } - .p-button.p-button-outlined.p-button-danger:not(:disabled):hover, .p-button.p-button-outlined.p-button-danger:not(:disabled):active { - border-color: rgba(185, 28, 28, 0.44); - } - .p-button.p-button-outlined.p-button-contrast { - border-color: rgba(255, 255, 255, 0.44); - } - .p-button.p-button-outlined.p-button-contrast:not(:disabled):hover, .p-button.p-button-outlined.p-button-contrast:not(:disabled):active { - border-color: rgba(255, 255, 255, 0.44); - } - .p-button.p-button-secondary.p-button-text { - color: #a1a1aa; - } - .p-button.p-button-secondary.p-button-text:not(:disabled):hover { - background-color: rgba(255, 255, 255, 0.04); - color: #a1a1aa; - } - .p-button.p-button-secondary.p-button-text:not(:disabled):active { - background-color: rgba(255, 255, 255, 0.16); - color: #a1a1aa; - } - - .p-datepicker-buttonbar .p-button { - padding: 0.25rem 0.75rem; - font-size: 0.875rem; - } - - .p-datepicker .p-datepicker-group-container + .p-timepicker { - margin-top: 0.5rem; - padding-top: 0.5rem; - } - .p-datepicker table th { - font-weight: 500; - } - - .p-card { - border-radius: 12px; - display: flex; - flex-direction: column; - } - .p-card .p-card-caption { - display: flex; - flex-direction: column; - gap: 0.5rem; - } - .p-card .p-card-caption .p-card-title, -.p-card .p-card-caption .p-card-subtitle { - margin-bottom: 0; - } - .p-card .p-card-body { - display: flex; - flex-direction: column; - gap: 1rem; - } - - .p-carousel .p-carousel-indicators .p-carousel-indicator.p-highlight button { - background-color: #a78bfa; - } - - .p-cascadeselect { - box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05); - } - .p-cascadeselect .p-cascadeselect-label { - box-shadow: none; - } - .p-cascadeselect.p-disabled { - opacity: 1; - background-color: #3f3f46; - } - .p-cascadeselect.p-disabled .p-cascadeselect-label { - background-color: #3f3f46; - color: #a1a1aa; - } - - div.p-cascadeselect-panel { - border: 0 none; - box-shadow: none; - } - - .p-checkbox .p-checkbox-box { - border-radius: 4px; - box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05); - } - .p-checkbox:not(.p-disabled):has(.p-checkbox-input:focus-visible) .p-checkbox-box { - outline-width: 1px; - outline-offset: 2px; - } - .p-checkbox:not(.p-disabled):has(.p-checkbox-input:focus-visible).p-highlight .p-checkbox-box { - border-color: #a78bfa; - } - .p-checkbox.p-disabled { - opacity: 1; - } - .p-checkbox.p-disabled .p-checkbox-box { - background-color: #3f3f46; - border: 1px solid #3f3f46; - } - .p-checkbox.p-disabled .p-checkbox-box .p-checkbox-icon { - color: #a1a1aa; - } - - .p-chips .p-chips-multiple-container { - padding: 0.25rem 0.25rem; - gap: 0.25rem; - } - .p-chips .p-chips-multiple-container .p-chips-token { - border-radius: 4px; - margin: 0; - } - .p-chips .p-chips-multiple-container .p-chips-token .p-chips-token-icon { - margin-left: 0.375rem; - } - .p-chips .p-chips-multiple-container .p-chips-input-token { - margin-left: 0.5rem; - } - .p-chips .p-chips-multiple-container:has(.p-chips-token) .p-chips-input-token { - margin-left: 0.5rem; - } - .p-chips.p-disabled .p-chips-multiple-container { - opacity: 1; - background-color: #3f3f46; - } - - .p-chip { - border-radius: 16px; - padding: 0.25rem 0.75rem; - } - .p-chip .p-chip-text { - margin-top: 0; - margin-bottom: 0; - } - .p-chip .p-chip-remove-icon { - margin-left: 0.375rem; - } - .p-chip:has(.p-chip-remove-icon) { - padding-right: 0.5rem; - } - .p-chip img { - margin-left: -0.5rem; - } - - .p-colorpicker-preview { - padding: 0; - } - .p-colorpicker-preview:enabled:focus { - outline-offset: 2px; - } - .p-colorpicker-preview.p-inputtext.p-disabled { - opacity: 0.6; - } - - .p-confirm-popup { - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - - .p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-top > td { - box-shadow: inset 0 2px 0 0 #a78bfa; - } - .p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-bottom > td { - box-shadow: inset 0 -2px 0 0 #a78bfa; - } - .p-datatable .p-datatable-tbody > tr:has(+ .p-highlight) > td { - border-bottom-color: rgba(139, 102, 248, 0.16); - } - .p-datatable .p-datatable-tbody > tr.p-highlight > td { - border-bottom-color: rgba(139, 102, 248, 0.16); - } - - .p-dataview-layout-options.p-selectbutton .p-button svg { - position: relative; - } - - .p-dialog { - border-radius: 12px; - background-color: #18181b; - } - .p-dialog.p-dialog-maximized { - border-radius: 0; - } - .p-dialog .p-dialog-header { - border-top-right-radius: 12px; - border-top-left-radius: 12px; - } - .p-dialog .p-dialog-content:last-of-type { - border-bottom-right-radius: 12px; - border-bottom-left-radius: 12px; - } - .p-dialog .p-dialog-footer { - border-bottom-right-radius: 12px; - border-bottom-left-radius: 12px; - } - - .p-dropdown { - box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05); - } - .p-dropdown .p-dropdown-label { - box-shadow: none; - } - .p-dropdown.p-disabled { - opacity: 1; - background-color: #3f3f46; - } - .p-dropdown.p-disabled .p-dropdown-label { - color: #a1a1aa; - } - - .p-dropdown-panel .p-dropdown-items .p-dropdown-item .p-dropdown-check-icon { - margin-left: -0.375rem; - margin-right: 0.375rem; - } - - .p-treetable .p-treetable-tbody > tr:has(+ .p-highlight) > td { - border-bottom-color: rgba(139, 102, 248, 0.16); - } - .p-treetable .p-treetable-tbody > tr.p-highlight > td { - border-bottom-color: rgba(139, 102, 248, 0.16); - } - .p-treetable .p-treetable-tbody > tr.p-highlight > td .p-treetable-toggler:hover { - background-color: rgba(167, 139, 250, 0.16); - color: rgba(255, 255, 255, 0.87); - } - - .p-fieldset { - padding: 0 1.125rem 1.125rem 1.125rem; - margin: 0; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a { - padding: 0.5rem 0.75rem; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a .p-fieldset-legend-text { - padding: 0; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a .p-fieldset-toggler { - color: #a1a1aa; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend:hover { - background-color: rgba(255, 255, 255, 0.03); - } - .p-fieldset .p-fieldset-legend { - border: 0 none; - padding: 0; - margin-bottom: 0.375rem; - } - .p-fieldset .p-fieldset-legend span { - padding: 0.5rem 0.75rem; - } - .p-fieldset .p-fieldset-content { - padding: 0; - } - - .p-column-filter-overlay-menu { - padding: 0.75rem; - display: flex; - flex-direction: column; - gap: 0.5rem; - } - .p-column-filter-overlay-menu .p-column-filter-operator { - padding: 0; - } - .p-column-filter-overlay-menu .p-column-filter-constraints { - display: flex; - flex-direction: column; - gap: 0.5rem; - } - .p-column-filter-overlay-menu .p-column-filter-constraint { - padding: 0 0 0 0; - } - .p-column-filter-overlay-menu .p-column-filter-constraint .p-column-filter-remove-button { - margin-bottom: 0.5rem; - } - .p-column-filter-overlay-menu .p-column-filter-constraint:last-child .p-column-filter-remove-button { - margin-bottom: 0; - } - .p-column-filter-overlay-menu .p-column-filter-add-rule { - padding: 0; - } - .p-column-filter-overlay-menu .p-column-filter-buttonbar { - padding: 0; - } - - .p-fileupload .p-fileupload-content { - border-top: 0 none; - padding-top: 1.125rem; - } - - .p-galleria .p-galleria-indicators .p-galleria-indicator.p-highlight button { - background-color: #a78bfa; - } - - .p-inline-message-text { - font-weight: 500; - } - - .p-inline-message { - backdrop-filter: blur(10px); - } - - .p-inline-message.p-inline-message-info { - box-shadow: 0px 4px 8px 0px rgba(59, 130, 246, 0.04); - } - - .p-inline-message.p-inline-message-success { - box-shadow: 0px 4px 8px 0px rgba(34, 197, 94, 0.04); - } - - .p-inline-message.p-inline-message-warn { - box-shadow: 0px 4px 8px 0px rgba(234, 179, 8, 0.04); - } - - .p-inline-message.p-inline-message-error { - box-shadow: 0px 4px 8px 0px rgba(239, 68, 68, 0.04); - } - - .p-inline-message.p-inline-message-secondary { - box-shadow: 0px 4px 8px 0px rgba(74, 85, 103, 0.04); - } - - .p-inline-message.p-inline-message-contrast { - box-shadow: 0px 4px 8px 0px rgba(2, 6, 23, 0.04); - } - - .p-inputgroup-addon { - padding: 0.5rem; - } - - .p-inputnumber.p-inputnumber-buttons-stacked { - position: relative; - } - .p-inputnumber.p-inputnumber-buttons-stacked .p-inputnumber-input { - border-top-right-radius: 5px; - border-bottom-right-radius: 5px; - } - .p-inputnumber.p-inputnumber-buttons-stacked .p-inputnumber-button-group { - position: absolute; - top: 1px; - right: 1px; - height: calc(100% - 2px); - } - .p-inputnumber.p-inputnumber-buttons-stacked .p-inputnumber-button { - border-top-right-radius: 5px; - border-bottom-right-radius: 5px; - background-color: transparent; - border: 0 none; - color: #a1a1aa; - } - .p-inputnumber.p-inputnumber-buttons-stacked .p-inputnumber-button:hover { - background-color: rgba(255, 255, 255, 0.03); - color: #ffffff; - } - .p-inputnumber.p-inputnumber-buttons-stacked .p-inputnumber-button:active { - background-color: rgba(255, 255, 255, 0.08); - color: #ffffff; - } - .p-inputnumber.p-inputnumber-buttons-horizontal .p-inputnumber-button { - background-color: transparent; - border: 1px solid #3f3f46; - color: #a1a1aa; - } - .p-inputnumber.p-inputnumber-buttons-horizontal .p-inputnumber-button:hover { - background-color: rgba(255, 255, 255, 0.03); - color: #ffffff; - } - .p-inputnumber.p-inputnumber-buttons-horizontal .p-inputnumber-button:active { - background-color: rgba(255, 255, 255, 0.08); - color: #ffffff; - } - .p-inputnumber.p-inputnumber-buttons-horizontal .p-inputnumber-button.p-inputnumber-button-up { - border-left: 0 none; - } - .p-inputnumber.p-inputnumber-buttons-horizontal .p-inputnumber-button.p-inputnumber-button-down { - border-right: 0 none; - } - .p-inputnumber.p-inputnumber-buttons-vertical .p-inputnumber-button { - background-color: transparent; - border: 1px solid #3f3f46; - color: #a1a1aa; - } - .p-inputnumber.p-inputnumber-buttons-vertical .p-inputnumber-button:hover { - background-color: rgba(255, 255, 255, 0.03); - color: #ffffff; - } - .p-inputnumber.p-inputnumber-buttons-vertical .p-inputnumber-button:active { - background-color: rgba(255, 255, 255, 0.08); - color: #ffffff; - } - .p-inputnumber.p-inputnumber-buttons-vertical .p-inputnumber-button.p-inputnumber-button-up { - border-bottom: 0 none; - } - .p-inputnumber.p-inputnumber-buttons-vertical .p-inputnumber-button.p-inputnumber-button-down { - border-top: 0 none; - } - - .p-inputswitch .p-inputswitch-slider { - border: 0 none; - } - .p-inputswitch.p-highlight p-inputswitch-slider:before { - left: 1.25rem; - transform: none; - } - .p-inputswitch.p-invalid > .p-inputswitch-slider { - background: #fca5a5; - } - .p-inputswitch.p-invalid > .p-inputswitch-slider:before { - background: #18181b; - } - - .p-inputtext { - box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05); - } - - .p-inputtext:disabled { - opacity: 1; - background-color: #3f3f46; - color: #a1a1aa; - } - - .p-knob svg { - border-radius: 6px; - outline-color: transparent; - transition: outline-color 0.2s; - } - .p-knob svg:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-listbox { - box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05); - } - .p-listbox.p-disabled { - opacity: 1; - background-color: #3f3f46; - } - .p-listbox.p-disabled .p-listbox-list .p-listbox-item { - color: #a1a1aa; - } - - .p-message { - backdrop-filter: blur(10px); - } - - .p-message.p-message-info { - box-shadow: 0px 4px 8px 0px rgba(59, 130, 246, 0.04); - } - .p-message.p-message-info .p-message-close:focus-visible { - outline-color: #3b82f6; - } - .p-message.p-message-info .p-message-close:hover { - background: rgba(255, 255, 255, 0.05); - } - - .p-message.p-message-success { - box-shadow: 0px 4px 8px 0px rgba(34, 197, 94, 0.04); - } - .p-message.p-message-success .p-message-close:focus-visible { - outline-color: #22c55e; - } - .p-message.p-message-success .p-message-close:hover { - background: rgba(255, 255, 255, 0.05); - } - - .p-message.p-message-warn { - box-shadow: 0px 4px 8px 0px rgba(234, 179, 8, 0.04); - } - .p-message.p-message-warn .p-message-close:focus-visible { - outline-color: #eab308; - } - .p-message.p-message-warn .p-message-close:hover { - background: rgba(255, 255, 255, 0.05); - } - - .p-message.p-message-error { - box-shadow: 0px 4px 8px 0px rgba(239, 68, 68, 0.04); - } - .p-message.p-message-error .p-message-close:focus-visible { - outline-color: #ef4444; - } - .p-message.p-message-error .p-message-close:hover { - background: rgba(255, 255, 255, 0.05); - } - - .p-message.p-message-secondary { - box-shadow: 0px 4px 8px 0px rgba(74, 85, 103, 0.04); - } - .p-message.p-message-secondary .p-message-close:focus-visible { - outline-color: #d4d4d8; - } - .p-message.p-message-secondary .p-message-close:hover { - background: #3f3f46; - } - - .p-message.p-message-contrast { - box-shadow: 0px 4px 8px 0px rgba(2, 6, 23, 0.04); - } - .p-message.p-message-contrast .p-message-close:focus-visible { - outline-color: #09090b; - } - .p-message.p-message-contrast .p-message-close:hover { - background: #f4f4f5; - } - - .p-multiselect-panel .p-multiselect-header { - padding-left: 1rem; - padding-right: 1rem; - } - - .p-multiselect { - box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05); - } - .p-multiselect.p-disabled { - opacity: 1; - background-color: #3f3f46; - } - .p-multiselect.p-disabled .p-multiselect-label { - color: #a1a1aa; - } - .p-multiselect.p-multiselect-chip .p-multiselect-token { - border-radius: 4px; - margin-right: 0.25rem; - } - .p-multiselect.p-multiselect-chip .p-multiselect-token .p-multiselect-token-icon { - margin-left: 0.375rem; - } - - .p-inputwrapper-filled.p-multiselect.p-multiselect-chip .p-multiselect-label { - padding: 0.25rem 0.25rem; - } - - .p-panelmenu .p-panelmenu-header { - border-radius: 4px; - } - .p-panelmenu .p-panelmenu-header:not(.p-disabled):focus-visible .p-panelmenu-header-content { - outline: 0 none; - } - .p-panelmenu .p-panelmenu-header:not(.p-disabled):focus-visible .p-panelmenu-header-content .p-panelmenu-header-action { - background: rgba(255, 255, 255, 0.08); - } - .p-panelmenu .p-panelmenu-header:not(.p-disabled):focus-visible .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-text { - color: #ffffff; - } - .p-panelmenu .p-panelmenu-header:not(.p-disabled):focus-visible .p-panelmenu-header-content .p-panelmenu-header-action .p-submenu-icon { - color: #ffffff; - } - .p-panelmenu .p-panelmenu-header:not(.p-disabled):focus-visible .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-icon { - color: #ffffff; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content { - border-radius: 4px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action { - color: #ffffff; - padding: 0.5rem 0.75rem; - font-weight: 600; - border-radius: 4px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-text { - color: #ffffff; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-submenu-icon { - color: #71717a; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-icon { - color: #71717a; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action:hover { - background: rgba(255, 255, 255, 0.03); - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action:hover .p-menuitem-text { - color: #ffffff; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action:hover .p-submenu-icon { - color: #ffffff; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action:hover .p-menuitem-icon { - color: #ffffff; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-submenu-icon { - margin-right: 0.5rem; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-icon { - margin-right: 0.5rem; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-text { - /*line-height: 1.5;*/ - } - .p-panelmenu .p-panelmenu-content { - border-radius: 6px; - padding: 0 0 0 1rem; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:first-child { - margin-top: 2px; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:last-child { - margin-top: 2px; - } - .p-panelmenu .p-panelmenu-panel { - padding: 0.25rem 0.25rem; - overflow: hidden; - margin-bottom: 0.75rem; - border: 1px solid #3f3f46; - border-radius: 6px; - } - - .p-password-panel { - background-color: #18181b; - border: 1px solid #3f3f46; - padding: 0.75rem; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - border-radius: 6px; - } - .p-password-panel .p-password-meter { - margin-bottom: 0.75rem; - background: #3f3f46; - border-radius: 6px; - } - .p-password-panel .p-password-meter .p-password-strength { - border-radius: 6px; - } - .p-password-panel .p-password-meter .p-password-strength.weak { - background: #f87171; - } - .p-password-panel .p-password-meter .p-password-strength.medium { - background: #fbbf24; - } - .p-password-panel .p-password-meter .p-password-strength.strong { - background: #4ade80; - } - - .p-orderlist-controls .p-button { - transition: opacity 0.2s, outline-color 0.2s, background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; - color: #d4d4d8; - background: #27272a; - border: 1px solid #27272a; - } - .p-orderlist-controls .p-button:not(:disabled):hover { - background: #3f3f46; - color: #d4d4d8; - border-color: #3f3f46; - } - .p-orderlist-controls .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-orderlist-controls .p-button:not(:disabled):active { - background: #52525b; - color: #d4d4d8; - border-color: #52525b; - } - - .p-orderlist .p-orderlist-header { - background: #18181b; - color: #ffffff; - border: 0 none; - border-bottom: 0 none; - padding: 0.75rem 1rem 0.5rem 1rem; - font-weight: 600; - color: #a1a1aa; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-orderlist .p-orderlist-list { - border: 1px solid #3f3f46; - border: 0 none; - background: #18181b; - color: #ffffff; - padding: 0.25rem 0.25rem; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-orderlist .p-orderlist-list .p-orderlist-item { - border-radius: 6px; - } - .p-orderlist .p-orderlist-list:not(:first-child) { - border: 0 none; - } - - .p-organizationchart .p-organizationchart-node-content { - padding: 0.75rem 1rem; - border-radius: 6px; - } - .p-organizationchart .p-organizationchart-node-content .p-node-toggler { - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border: 1px solid #3f3f46; - display: inline-flex; - justify-content: center; - align-items: center; - } - .p-organizationchart .p-organizationchart-node-content .p-node-toggler .p-node-toggler-icon { - position: static; - } - .p-organizationchart .p-organizationchart-node-content:has(.p-node-toggler) { - padding: 0.75rem 1rem 1.25rem 1rem; - } - .p-organizationchart .p-organizationchart-lines :nth-child(1 of .p-organizationchart-line-left) { - border-right: 0 none; - } - .p-organizationchart .p-organizationchart-lines :nth-last-child(1 of .p-organizationchart-line-left) { - border-top-right-radius: 6px; - } - .p-organizationchart .p-organizationchart-lines :nth-child(1 of .p-organizationchart-line-right) { - border-left: 1px solid #3f3f46; - border-top-left-radius: 6px; - } - - .p-overlaypanel { - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-overlaypanel .p-overlaypanel-content { - padding: 0.75rem; - } - .p-overlaypanel .p-overlaypanel-close { - width: 1.75rem; - height: 1.75rem; - color: #a1a1aa; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - position: absolute; - top: 0.25rem; - right: 0.25rem; - } - .p-overlaypanel .p-overlaypanel-close:enabled:hover { - color: #ffffff; - border-color: transparent; - background: rgba(255, 255, 255, 0.03); - } - .p-overlaypanel .p-overlaypanel-close:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-panel { - border: 1px solid #3f3f46; - border-radius: 6px; - background-color: #18181b; - } - .p-panel .p-panel-header, -.p-panel .p-panel-content, -.p-panel .p-panel-footer { - background: transparent; - border: 0 none; - } - .p-panel:has(.p-panel-footer) .p-panel-content { - padding-bottom: 0.875rem; - } - - .p-picklist-buttons .p-button { - transition: opacity 0.2s, outline-color 0.2s, background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; - color: #d4d4d8; - background: #27272a; - border: 1px solid #27272a; - } - .p-picklist-buttons .p-button:not(:disabled):hover { - background: #3f3f46; - color: #d4d4d8; - border-color: #3f3f46; - } - .p-picklist-buttons .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-picklist-buttons .p-button:not(:disabled):active { - background: #52525b; - color: #d4d4d8; - border-color: #52525b; - } - - .p-picklist .p-picklist-header { - background: #18181b; - color: #ffffff; - border: 1px solid #3f3f46; - border: 0 none; - padding: 0.75rem 1rem 0.5rem 1rem; - font-weight: 600; - color: #a1a1aa; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-picklist .p-picklist-list { - border: 1px solid #3f3f46; - border: 0 none; - background: #18181b; - color: #ffffff; - padding: 0.25rem 0.25rem; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-picklist .p-picklist-list .p-picklist-item { - border-radius: 6px; - } - .p-picklist .p-picklist-list:not(:first-child) { - border: 0 none; - } - - .p-progressbar-label { - font-size: 0.75rem; - font-weight: 600; - } - - .p-radiobutton .p-radiobutton-box { - box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05); - } - .p-radiobutton:not(.p-disabled):has(.p-radiobutton-input:focus-visible) .p-radiobutton-box { - outline-width: 1px; - outline-offset: 2px; - } - .p-radiobutton:not(.p-disabled):has(.p-radiobutton-input:focus-visible).p-highlight .p-radiobutton-box { - border-color: #a78bfa; - } - .p-radiobutton.p-disabled { - opacity: 1; - } - .p-radiobutton.p-disabled .p-radiobutton-box { - border: 1px solid #3f3f46; - background-color: #3f3f46; - } - .p-radiobutton.p-disabled .p-radiobutton-box .p-radiobutton-icon { - background-color: #a1a1aa; - } - - .p-rating { - gap: 0.25rem; - } - - .p-selectbutton .p-button .pi, -.p-selectbutton .p-button .p-button-label { - position: relative; - transition: none; - } - .p-selectbutton .p-button::before { - content: ""; - background-color: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - position: absolute; - left: 0.25rem; - top: 0.25rem; - width: calc(100% - 0.5rem); - height: calc(100% - 0.5rem); - border-radius: 4px; - } - .p-selectbutton .p-button.p-highlight::before { - background: #27272a; - border-color: #27272a; - box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.02), 0px 1px 2px 0px rgba(0, 0, 0, 0.04); - } - .p-selectbutton .p-button:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #52525b; - } - .p-selectbutton .p-button.p-disabled { - opacity: 1; - color: #71717a; - } - .p-selectbutton.p-invalid { - box-shadow: 0 0 0 1px #fca5a5; - border-radius: 6px; - } - .p-selectbutton.p-invalid > .p-button { - border: 1px solid #09090b; - } - .p-selectbutton.p-disabled { - opacity: 1; - } - .p-selectbutton.p-disabled .p-button { - color: #71717a; - } - - .p-slider .p-slider-handle { - display: flex !important; - justify-content: center; - align-items: center; - } - .p-slider .p-slider-handle::before { - content: ""; - width: 16px; - height: 16px; - display: block; - background-color: #09090b; - border-radius: 50%; - box-shadow: 0px 0.5px 0px 0px rgba(0, 0, 0, 0.08), 0px 1px 1px 0px rgba(0, 0, 0, 0.14); - } - .p-slider .p-slider-handle:focus-visible { - outline: 0 none; - box-shadow: 0 0 0 2px #09090b, 0 0 0 4px var(--p-focus-ring-color), 0 1px 2px 0 black; - } - - .p-speeddial-item.p-focus > .p-speeddial-action { - outline-color: #d3c5fd; - } - - .p-speeddial-button.p-speeddial-rotate { - transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - - .p-splitter-gutter-handle { - border-radius: 6px; - } - - .p-stepper .p-stepper-header .p-stepper-number { - box-shadow: 0px 0.5px 0px 0px rgba(0, 0, 0, 0.06), 0px 1px 1px 0px rgba(0, 0, 0, 0.12); - } - .p-stepper .p-stepper-header.p-highlight .p-stepper-number { - background: #18181b; - color: #a78bfa; - } - .p-stepper .p-stepper-header.p-highlight .p-stepper-title { - color: #a78bfa; - } - - .p-steps .p-steps-item .p-menuitem-link .p-steps-number { - border-width: 2px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-steps .p-steps-item .p-menuitem-link .p-steps-title { - font-weight: 500; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-steps .p-steps-item .p-steps-number { - position: relative; - font-weight: 500; - } - .p-steps .p-steps-item .p-steps-number::after { - content: " "; - position: absolute; - width: 100%; - height: 100%; - border-radius: 50%; - box-shadow: 0px 0.5px 0px 0px rgba(0, 0, 0, 0.06), 0px 1px 1px 0px rgba(0, 0, 0, 0.12); - } - .p-steps .p-steps-item.p-highlight .p-steps-number { - background: #18181b; - color: #a78bfa; - } - .p-steps .p-steps-item.p-highlight .p-steps-title { - color: #a78bfa; - } - .p-steps .p-steps-item.p-disabled { - opacity: 1; - } - .p-steps .p-steps-item:before { - border-top-width: 2px; - margin-top: calc(-1rem + 1px); - } - .p-steps .p-steps-item:first-child::before { - width: calc(50% + 1rem); - transform: translateX(100%); - } - .p-steps .p-steps-item:last-child::before { - width: 50%; - } - - .p-tabmenu .p-tabmenu-ink-bar { - z-index: 1; - display: block; - position: absolute; - bottom: -1px; - height: 1px; - background-color: #a78bfa; - transition: 250ms cubic-bezier(0.35, 0, 0.25, 1); - } - .p-tabmenu .p-tabmenu-nav { - position: relative; - } - .p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link { - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - - .p-tabview .p-tabview-ink-bar { - z-index: 1; - display: block; - position: absolute; - bottom: 0; - height: 1px; - background-color: #a78bfa; - transition: 500ms cubic-bezier(0.35, 0, 0.25, 1); - } - .p-tabview .p-tabview-nav { - position: relative; - } - .p-tabview .p-tabview-nav li .p-tabview-nav-link { - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-tabview .p-tabview-nav-btn.p-link { - color: #a1a1aa; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); - box-shadow: 0px 0px 10px 50px rgba(24, 24, 27, 0.5); - } - .p-tabview .p-tabview-nav-btn.p-link:hover { - color: #ffffff; - } - - .p-tag { - background: color-mix(in srgb, var(--primary-500), transparent 80%); - color: var(--primary-300); - } - .p-tag.p-tag-success { - background: rgba(34, 197, 94, 0.16); - color: #22c55e; - } - .p-tag.p-tag-info { - background: rgba(59, 130, 246, 0.16); - color: #3b82f6; - } - .p-tag.p-tag-warning { - background: rgba(234, 179, 8, 0.16); - color: #eab308; - } - .p-tag.p-tag-danger { - background: rgba(239, 68, 68, 0.16); - color: #ef4444; - } - - .p-terminal { - background: #09090b; - color: #ffffff; - border: 1px solid #3f3f46; - padding: 0.5rem 0.75rem; - border-radius: 6px; - } - .p-terminal .p-terminal-prompt { - margin-right: 0.25rem; - } - .p-terminal .p-terminal-response { - margin: 2px 0; - } - - .p-timeline .p-timeline-event-marker { - display: inline-flex; - align-items: center; - justify-content: center; - position: relative; - } - .p-timeline .p-timeline-event-marker::before { - content: " "; - border-radius: 50%; - width: 0.375rem; - height: 0.375rem; - background-color: #a78bfa; - } - .p-timeline .p-timeline-event-marker::after { - content: " "; - position: absolute; - width: 100%; - height: 100%; - border-radius: 50%; - box-shadow: 0px 0.5px 0px 0px rgba(0, 0, 0, 0.06), 0px 1px 1px 0px rgba(0, 0, 0, 0.12); - } - - .p-toast .p-toast-message { - backdrop-filter: blur(10px); - } - .p-toast .p-toast-message .p-toast-message-content .p-toast-detail { - font-size: 0.875rem; - } - .p-toast .p-toast-message .p-toast-icon-close { - width: 1.75rem; - height: 1.75rem; - margin-top: -25%; - right: -25%; - position: relative; - } - - .p-toast .p-toast-message.p-toast-message-info { - box-shadow: 0px 4px 8px 0px rgba(59, 130, 246, 0.04); - } - .p-toast .p-toast-message.p-toast-message-info .p-toast-detail { - color: #ffffff; - } - .p-toast .p-toast-message.p-toast-message-info .p-toast-icon-close { - outline-color: #3b82f6; - } - .p-toast .p-toast-message.p-toast-message-info .p-toast-icon-close:hover { - background: rgba(255, 255, 255, 0.075); - } - .p-toast .p-toast-message.p-toast-message-success { - box-shadow: 0px 4px 8px 0px rgba(34, 197, 94, 0.04); - } - .p-toast .p-toast-message.p-toast-message-success .p-toast-detail { - color: #ffffff; - } - .p-toast .p-toast-message.p-toast-message-success .p-toast-icon-close { - outline-color: #22c55e; - } - .p-toast .p-toast-message.p-toast-message-success .p-toast-icon-close:hover { - background: rgba(255, 255, 255, 0.075); - } - .p-toast .p-toast-message.p-toast-message-warn { - box-shadow: 0px 4px 8px 0px rgba(234, 179, 8, 0.04); - } - .p-toast .p-toast-message.p-toast-message-warn .p-toast-detail { - color: #ffffff; - } - .p-toast .p-toast-message.p-toast-message-warn .p-toast-icon-close { - outline-color: #eab308; - } - .p-toast .p-toast-message.p-toast-message-warn .p-toast-icon-close:hover { - background: rgba(255, 255, 255, 0.075); - } - .p-toast .p-toast-message.p-toast-message-error { - box-shadow: 0px 4px 8px 0px rgba(239, 68, 68, 0.04); - } - .p-toast .p-toast-message.p-toast-message-error .p-toast-detail { - color: #ffffff; - } - .p-toast .p-toast-message.p-toast-message-error .p-toast-icon-close { - outline-color: #ef4444; - } - .p-toast .p-toast-message.p-toast-message-error .p-toast-icon-close:hover { - background: rgba(255, 255, 255, 0.05); - } - .p-toast .p-toast-message.p-toast-message-secondary { - box-shadow: 0px 4px 8px 0px rgba(74, 85, 103, 0.04); - } - .p-toast .p-toast-message.p-toast-message-secondary .p-toast-icon-close { - outline-color: #ef4444; - } - .p-toast .p-toast-message.p-toast-message-secondary .p-toast-icon-close:hover { - background: #3f3f46; - } - .p-toast .p-toast-message.p-toast-message-contrast { - box-shadow: 0px 4px 8px 0px rgba(2, 6, 23, 0.04); - } - .p-toast .p-toast-message.p-toast-message-contrast .p-toast-icon-close { - outline-color: #ef4444; - } - .p-toast .p-toast-message.p-toast-message-contrast .p-toast-icon-close:hover { - background: #f4f4f5; - } - - .p-togglebutton .p-button .p-button-label, -.p-togglebutton .p-button .p-button-icon { - position: relative; - transition: none; - } - .p-togglebutton .p-button::before { - content: ""; - background-color: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - position: absolute; - left: 0.25rem; - top: 0.25rem; - width: calc(100% - 0.5rem); - height: calc(100% - 0.5rem); - border-radius: 4px; - } - .p-togglebutton.p-highlight .p-button::before { - background: #27272a; - border-color: #27272a; - box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.02), 0px 1px 2px 0px rgba(0, 0, 0, 0.04); - } - .p-togglebutton.p-disabled { - opacity: 1; - } - .p-togglebutton.p-disabled .p-button { - color: #71717a; - } - .p-togglebutton.p-disabled .p-button .p-button-icon { - color: #71717a; - } - - .p-toolbar { - padding: 0.75rem; - } - - .p-tree { - border: 0 none; - padding: 1rem; - } - .p-tree .p-tree-container .p-treenode { - margin: 2px 0; - } - .p-tree .p-tree-container .p-treenode:focus > .p-treenode-content { - outline-offset: -2px; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-tree-toggler:hover { - background-color: rgba(167, 139, 250, 0.16); - } - .p-tree .p-tree-container > .p-treenode:first-child { - margin-top: 0; - } - .p-tree .p-tree-container > .p-treenode:last-child { - margin-bottom: 0; - } - - .p-treeselect-panel .p-tree { - padding: 0.25rem 0.25rem; - } - - .p-treeselect { - box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05); - } - .p-treeselect.p-disabled { - opacity: 1; - background-color: #3f3f46; - } - .p-treeselect.p-disabled .p-treeselect-label { - color: #a1a1aa; - } -} diff --git a/frontend/public/themes/aura-light-purple/fonts/Inter-italic.var.woff2 b/frontend/public/themes/aura-light-purple/fonts/Inter-italic.var.woff2 deleted file mode 100644 index b826d5af..00000000 Binary files a/frontend/public/themes/aura-light-purple/fonts/Inter-italic.var.woff2 and /dev/null differ diff --git a/frontend/public/themes/aura-light-purple/fonts/Inter-roman.var.woff2 b/frontend/public/themes/aura-light-purple/fonts/Inter-roman.var.woff2 deleted file mode 100644 index 6a256a06..00000000 Binary files a/frontend/public/themes/aura-light-purple/fonts/Inter-roman.var.woff2 and /dev/null differ diff --git a/frontend/public/themes/aura-light-purple/theme.css b/frontend/public/themes/aura-light-purple/theme.css deleted file mode 100644 index eb8c0e61..00000000 --- a/frontend/public/themes/aura-light-purple/theme.css +++ /dev/null @@ -1,12111 +0,0 @@ -:root { - font-family: "Inter var", sans-serif; - font-feature-settings: "cv02", "cv03", "cv04", "cv11"; - font-variation-settings: normal; - --font-family: "Inter var", sans-serif; - --font-feature-settings: "cv02", "cv03", "cv04", "cv11"; - --text-color: #334155; - --text-color-secondary: #64748b; - --primary-color: #8B5CF6; - --primary-color-text: #ffffff; - --surface-0: #ffffff; - --surface-50: #f8fafc; - --surface-100: #f1f5f9; - --surface-200: #e2e8f0; - --surface-300: #cbd5e1; - --surface-400: #94a3b8; - --surface-500: #64748b; - --surface-600: #475569; - --surface-700: #334155; - --surface-800: #1e293b; - --surface-900: #0f172a; - --surface-950: #020617; - --gray-0: #ffffff; - --gray-50: #f8fafc; - --gray-100: #f1f5f9; - --gray-200: #e2e8f0; - --gray-300: #cbd5e1; - --gray-400: #94a3b8; - --gray-500: #64748b; - --gray-600: #475569; - --gray-700: #334155; - --gray-800: #1e293b; - --gray-900: #0f172a; - --gray-950: #020617; - --content-padding: 1.125rem; - --inline-spacing: 0.5rem; - --border-radius: 6px; - --surface-ground: #f8fafc; - --surface-section: #ffffff; - --surface-card: #ffffff; - --surface-overlay: #ffffff; - --surface-border: #e2e8f0; - --surface-hover: #f1f5f9; - --focus-ring: none; - --maskbg: rgba(0, 0, 0, 0.4); - --highlight-bg: #F5F3FF; - --highlight-text-color: #6D28D9; - --p-anchor-gutter: 2px; - color-scheme: light; -} - -:root { - --p-focus-ring-color: var(--primary-color); -} - -@font-face { - font-family: "Inter var"; - font-weight: 100 900; - font-display: swap; - font-style: normal; - font-named-instance: "Regular"; - src: url("./fonts/Inter-roman.var.woff2?v=3.19") format("woff2"); -} -@font-face { - font-family: "Inter var"; - font-weight: 100 900; - font-display: swap; - font-style: italic; - font-named-instance: "Italic"; - src: url("./fonts/Inter-italic.var.woff2?v=3.19") format("woff2"); -} -:root { - --blue-50:#f5f9ff; - --blue-100:#d0e1fd; - --blue-200:#abc9fb; - --blue-300:#85b2f9; - --blue-400:#609af8; - --blue-500:#3b82f6; - --blue-600:#326fd1; - --blue-700:#295bac; - --blue-800:#204887; - --blue-900:#183462; - --green-50:#f4fcf7; - --green-100:#caf1d8; - --green-200:#a0e6ba; - --green-300:#76db9b; - --green-400:#4cd07d; - --green-500:#22c55e; - --green-600:#1da750; - --green-700:#188a42; - --green-800:#136c34; - --green-900:#0e4f26; - --yellow-50:#fefbf3; - --yellow-100:#faedc4; - --yellow-200:#f6de95; - --yellow-300:#f2d066; - --yellow-400:#eec137; - --yellow-500:#eab308; - --yellow-600:#c79807; - --yellow-700:#a47d06; - --yellow-800:#816204; - --yellow-900:#5e4803; - --cyan-50:#f3fbfd; - --cyan-100:#c3edf5; - --cyan-200:#94e0ed; - --cyan-300:#65d2e4; - --cyan-400:#35c4dc; - --cyan-500:#06b6d4; - --cyan-600:#059bb4; - --cyan-700:#047f94; - --cyan-800:#036475; - --cyan-900:#024955; - --pink-50:#fef6fa; - --pink-100:#fad3e7; - --pink-200:#f7b0d3; - --pink-300:#f38ec0; - --pink-400:#f06bac; - --pink-500:#ec4899; - --pink-600:#c93d82; - --pink-700:#a5326b; - --pink-800:#822854; - --pink-900:#5e1d3d; - --indigo-50:#f7f7fe; - --indigo-100:#dadafc; - --indigo-200:#bcbdf9; - --indigo-300:#9ea0f6; - --indigo-400:#8183f4; - --indigo-500:#6366f1; - --indigo-600:#5457cd; - --indigo-700:#4547a9; - --indigo-800:#363885; - --indigo-900:#282960; - --teal-50:#f3fbfb; - --teal-100:#c7eeea; - --teal-200:#9ae0d9; - --teal-300:#6dd3c8; - --teal-400:#41c5b7; - --teal-500:#14b8a6; - --teal-600:#119c8d; - --teal-700:#0e8174; - --teal-800:#0b655b; - --teal-900:#084a42; - --orange-50:#fff8f3; - --orange-100:#feddc7; - --orange-200:#fcc39b; - --orange-300:#fba86f; - --orange-400:#fa8e42; - --orange-500:#f97316; - --orange-600:#d46213; - --orange-700:#ae510f; - --orange-800:#893f0c; - --orange-900:#642e09; - --bluegray-50:#f7f8f9; - --bluegray-100:#dadee3; - --bluegray-200:#bcc3cd; - --bluegray-300:#9fa9b7; - --bluegray-400:#818ea1; - --bluegray-500:#64748b; - --bluegray-600:#556376; - --bluegray-700:#465161; - --bluegray-800:#37404c; - --bluegray-900:#282e38; - --purple-50:#fbf7ff; - --purple-100:#ead6fd; - --purple-200:#dab6fc; - --purple-300:#c996fa; - --purple-400:#b975f9; - --purple-500:#a855f7; - --purple-600:#8f48d2; - --purple-700:#763cad; - --purple-800:#5c2f88; - --purple-900:#432263; - --red-50:#fff5f5; - --red-100:#ffd0ce; - --red-200:#ffaca7; - --red-300:#ff8780; - --red-400:#ff6259; - --red-500:#ff3d32; - --red-600:#d9342b; - --red-700:#b32b23; - --red-800:#8c221c; - --red-900:#661814; - --primary-50:#f9f7ff; - --primary-100:#e3d8fd; - --primary-200:#cdb9fb; - --primary-300:#b79af9; - --primary-400:#a17bf8; - --primary-500:#8b5cf6; - --primary-600:#764ed1; - --primary-700:#6140ac; - --primary-800:#4c3387; - --primary-900:#382562; -} - -.p-editor-container .p-editor-toolbar { - background: #ffffff; - border-top-right-radius: 6px; - border-top-left-radius: 6px; -} -.p-editor-container .p-editor-toolbar.ql-snow { - border: 1px solid #e2e8f0; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-stroke { - stroke: #64748b; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-fill { - fill: #64748b; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker .ql-picker-label { - border: 0 none; - color: #64748b; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker .ql-picker-label:hover { - color: #334155; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker .ql-picker-label:hover .ql-stroke { - stroke: #334155; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker .ql-picker-label:hover .ql-fill { - fill: #334155; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label { - color: #334155; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke { - stroke: #334155; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill { - fill: #334155; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options { - background: #ffffff; - border: 1px solid #e2e8f0; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - border-radius: 6px; - padding: 0.25rem 0.25rem; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options .ql-picker-item { - color: #334155; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options .ql-picker-item:hover { - color: #1e293b; - background: #f1f5f9; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded:not(.ql-icon-picker) .ql-picker-item { - padding: 0.5rem 0.75rem; -} -.p-editor-container .p-editor-content { - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; -} -.p-editor-container .p-editor-content.ql-snow { - border: 1px solid #e2e8f0; -} -.p-editor-container .p-editor-content .ql-editor { - background: #ffffff; - color: #334155; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; -} -.p-editor-container .ql-snow.ql-toolbar button:hover, -.p-editor-container .ql-snow.ql-toolbar button:focus { - color: #334155; -} -.p-editor-container .ql-snow.ql-toolbar button:hover .ql-stroke, -.p-editor-container .ql-snow.ql-toolbar button:focus .ql-stroke { - stroke: #334155; -} -.p-editor-container .ql-snow.ql-toolbar button:hover .ql-fill, -.p-editor-container .ql-snow.ql-toolbar button:focus .ql-fill { - fill: #334155; -} -.p-editor-container .ql-snow.ql-toolbar button.ql-active, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-label.ql-active, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-item.ql-selected { - color: #8B5CF6; -} -.p-editor-container .ql-snow.ql-toolbar button.ql-active .ql-stroke, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke { - stroke: #8B5CF6; -} -.p-editor-container .ql-snow.ql-toolbar button.ql-active .ql-fill, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill { - fill: #8B5CF6; -} -.p-editor-container .ql-snow.ql-toolbar button.ql-active .ql-picker-label, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-picker-label, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-picker-label { - color: #8B5CF6; -} - -@layer primevue { - .p-component, .p-component * { - box-sizing: border-box; - } - - .p-hidden-space { - visibility: hidden; - } - - .p-reset { - margin: 0; - padding: 0; - border: 0; - outline: 0; - text-decoration: none; - font-size: 100%; - list-style: none; - } - - .p-disabled, .p-disabled * { - cursor: default; - pointer-events: none; - user-select: none; - } - - .p-component-overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - } - - .p-unselectable-text { - user-select: none; - } - - .p-sr-only { - border: 0; - clip: rect(1px, 1px, 1px, 1px); - clip-path: inset(50%); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; - word-wrap: normal; - } - - .p-link { - text-align: left; - background-color: transparent; - margin: 0; - padding: 0; - border: none; - cursor: pointer; - user-select: none; - } - - .p-link:disabled { - cursor: default; - } - - /* Non vue overlay animations */ - .p-connected-overlay { - opacity: 0; - transform: scaleY(0.8); - transition: transform 0.12s cubic-bezier(0, 0, 0.2, 1), opacity 0.12s cubic-bezier(0, 0, 0.2, 1); - } - - .p-connected-overlay-visible { - opacity: 1; - transform: scaleY(1); - } - - .p-connected-overlay-hidden { - opacity: 0; - transform: scaleY(1); - transition: opacity 0.1s linear; - } - - /* Vue based overlay animations */ - .p-connected-overlay-enter-from { - opacity: 0; - transform: scaleY(0.8); - } - - .p-connected-overlay-leave-to { - opacity: 0; - } - - .p-connected-overlay-enter-active { - transition: transform 0.12s cubic-bezier(0, 0, 0.2, 1), opacity 0.12s cubic-bezier(0, 0, 0.2, 1); - } - - .p-connected-overlay-leave-active { - transition: opacity 0.1s linear; - } - - /* Toggleable Content */ - .p-toggleable-content-enter-from, -.p-toggleable-content-leave-to { - max-height: 0; - } - - .p-toggleable-content-enter-to, -.p-toggleable-content-leave-from { - max-height: 1000px; - } - - .p-toggleable-content-leave-active { - overflow: hidden; - transition: max-height 0.45s cubic-bezier(0, 1, 0, 1); - } - - .p-toggleable-content-enter-active { - overflow: hidden; - transition: max-height 1s ease-in-out; - } - - * { - box-sizing: border-box; - } - - .p-component { - font-family: var(--font-family); - font-feature-settings: var(--font-feature-settings, normal); - font-size: 1rem; - font-weight: normal; - } - - .p-component-overlay { - background-color: rgba(0, 0, 0, 0.4); - transition-duration: 0.2s; - } - - .p-disabled, .p-component:disabled { - opacity: 0.6; - } - - .p-error { - color: #f87171; - } - - .p-text-secondary { - color: #64748b; - } - - .pi { - font-size: 1rem; - } - - .p-icon { - width: 1rem; - height: 1rem; - } - - .p-link { - font-family: var(--font-family); - font-feature-settings: var(--font-feature-settings, normal); - font-size: 1rem; - border-radius: 6px; - outline-color: transparent; - } - .p-link:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-component-overlay-enter { - animation: p-component-overlay-enter-animation 150ms forwards; - } - - .p-component-overlay-leave { - animation: p-component-overlay-leave-animation 150ms forwards; - } - - @keyframes p-component-overlay-enter-animation { - from { - background-color: transparent; - } - to { - background-color: var(--maskbg); - } - } - @keyframes p-component-overlay-leave-animation { - from { - background-color: var(--maskbg); - } - to { - background-color: transparent; - } - } - - .p-autocomplete { - display: inline-flex; - } - - .p-autocomplete-loader { - position: absolute; - top: 50%; - margin-top: -0.5rem; - } - - .p-autocomplete-dd .p-autocomplete-input { - flex: 1 1 auto; - width: 1%; - } - - .p-autocomplete-dd .p-autocomplete-input, -.p-autocomplete-dd .p-autocomplete-multiple-container { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - .p-autocomplete-dd .p-autocomplete-dropdown { - border-top-left-radius: 0; - border-bottom-left-radius: 0px; - } - - .p-autocomplete .p-autocomplete-panel { - min-width: 100%; - } - - .p-autocomplete-panel { - position: absolute; - overflow: auto; - top: 0; - left: 0; - } - - .p-autocomplete-items { - margin: 0; - padding: 0; - list-style-type: none; - } - - .p-autocomplete-item { - cursor: pointer; - white-space: nowrap; - position: relative; - overflow: hidden; - } - - .p-autocomplete-multiple-container { - margin: 0; - padding: 0; - list-style-type: none; - cursor: text; - overflow: hidden; - display: flex; - align-items: center; - flex-wrap: wrap; - } - - .p-autocomplete-token { - cursor: default; - display: inline-flex; - align-items: center; - flex: 0 0 auto; - } - - .p-autocomplete-token-icon { - cursor: pointer; - } - - .p-autocomplete-input-token { - flex: 1 1 auto; - display: inline-flex; - } - - .p-autocomplete-input-token input { - border: 0 none; - outline: 0 none; - background-color: transparent; - margin: 0; - padding: 0; - box-shadow: none; - border-radius: 0; - width: 100%; - } - - .p-fluid .p-autocomplete { - display: flex; - } - - .p-fluid .p-autocomplete-dd .p-autocomplete-input { - width: 1%; - } - - .p-autocomplete .p-autocomplete-loader { - right: 0.75rem; - } - .p-autocomplete.p-autocomplete-dd .p-autocomplete-loader { - right: 3.25rem; - } - .p-autocomplete:not(.p-disabled):hover .p-autocomplete-multiple-container { - border-color: #94a3b8; - } - .p-autocomplete:not(.p-disabled).p-focus .p-autocomplete-multiple-container { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #94a3b8; - } - .p-autocomplete .p-autocomplete-multiple-container { - padding: 0.25rem 0.75rem; - gap: 0.5rem; - outline-color: transparent; - } - .p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-input-token { - padding: 0.25rem 0; - } - .p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-input-token input { - font-family: var(--font-family); - font-feature-settings: var(--font-feature-settings, normal); - font-size: 1rem; - color: #334155; - padding: 0; - margin: 0; - } - .p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token { - padding: 0.25rem 0.75rem; - background: #f1f5f9; - color: #1e293b; - border-radius: 16px; - } - .p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token .p-autocomplete-token-icon { - margin-left: 0.5rem; - } - .p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token.p-focus { - background: #e2e8f0; - color: #0f172a; - } - .p-autocomplete.p-invalid.p-component > .p-inputtext { - border-color: #f87171; - } - - .p-autocomplete-panel { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-radius: 6px; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-autocomplete-panel .p-autocomplete-items { - padding: 0.25rem 0.25rem; - } - .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item { - margin: 2px 0; - padding: 0.5rem 0.75rem; - border: 0 none; - color: #334155; - background: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item:first-child { - margin-top: 0; - } - .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item:last-child { - margin-bottom: 0; - } - .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item.p-highlight { - color: #6D28D9; - background: #F5F3FF; - } - .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item.p-highlight.p-focus { - background: rgba(139, 92, 246, 0.24); - } - .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item:not(.p-highlight):not(.p-disabled).p-focus { - color: #1e293b; - background: #f1f5f9; - } - .p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item-group { - margin: 0; - padding: 0.5rem 0.75rem; - color: #94a3b8; - background: #ffffff; - font-weight: 600; - } - - .p-calendar { - display: inline-flex; - max-width: 100%; - } - - .p-calendar .p-inputtext { - flex: 1 1 auto; - width: 1%; - } - - .p-calendar-w-btn .p-inputtext { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - .p-calendar-w-btn .p-datepicker-trigger { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - .p-calendar .p-datepicker-trigger-icon { - cursor: pointer; - } - - /* Fluid */ - .p-fluid .p-calendar { - display: flex; - } - - .p-fluid .p-calendar .p-inputtext { - width: 1%; - } - - /* Datepicker */ - .p-calendar .p-datepicker { - min-width: 100%; - } - - .p-datepicker { - width: auto; - } - - .p-datepicker-inline { - display: inline-block; - overflow-x: auto; - } - - /* Header */ - .p-datepicker-header { - display: flex; - align-items: center; - justify-content: space-between; - } - - .p-datepicker-header .p-datepicker-title { - margin: 0 auto; - } - - .p-datepicker-prev, -.p-datepicker-next { - cursor: pointer; - display: inline-flex; - justify-content: center; - align-items: center; - overflow: hidden; - position: relative; - } - - /* Multiple Month DatePicker */ - .p-datepicker-multiple-month .p-datepicker-group-container { - display: flex; - } - - .p-datepicker-multiple-month .p-datepicker-group-container .p-datepicker-group { - flex: 1 1 auto; - } - - /* DatePicker Table */ - .p-datepicker table { - width: 100%; - border-collapse: collapse; - } - - .p-datepicker td > span { - display: flex; - justify-content: center; - align-items: center; - cursor: pointer; - margin: 0 auto; - overflow: hidden; - position: relative; - } - - /* Month Picker */ - .p-monthpicker-month { - width: 33.3%; - display: inline-flex; - align-items: center; - justify-content: center; - cursor: pointer; - overflow: hidden; - position: relative; - } - - /* Year Picker */ - .p-yearpicker-year { - width: 50%; - display: inline-flex; - align-items: center; - justify-content: center; - cursor: pointer; - overflow: hidden; - position: relative; - } - - /* Button Bar */ - .p-datepicker-buttonbar { - display: flex; - justify-content: space-between; - align-items: center; - } - - /* Time Picker */ - .p-timepicker { - display: flex; - justify-content: center; - align-items: center; - } - - .p-timepicker button { - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - overflow: hidden; - position: relative; - } - - .p-timepicker > div { - display: flex; - align-items: center; - flex-direction: column; - } - - /* Touch UI */ - .p-datepicker-touch-ui, -.p-calendar .p-datepicker-touch-ui { - min-width: 80vw; - } - - .p-calendar.p-invalid.p-component > .p-inputtext { - border-color: #f87171; - } - .p-calendar:not(.p-calendar-disabled).p-focus > .p-inputtext { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #94a3b8; - } - - .p-datepicker { - padding: 0.75rem; - background: #ffffff; - color: #334155; - border: 1px solid #cbd5e1; - border-radius: 6px; - } - .p-datepicker:not(.p-datepicker-inline) { - background: #ffffff; - border: 1px solid #e2e8f0; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-datepicker:not(.p-datepicker-inline) .p-datepicker-header { - background: #ffffff; - } - .p-datepicker .p-datepicker-header { - padding: 0 0 0.5rem 0; - color: #334155; - background: #ffffff; - font-weight: 500; - margin: 0 0 0 0; - border-bottom: 1px solid #e2e8f0; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-datepicker .p-datepicker-header .p-datepicker-prev, -.p-datepicker .p-datepicker-header .p-datepicker-next { - width: 1.75rem; - height: 1.75rem; - color: #64748b; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-datepicker .p-datepicker-header .p-datepicker-prev:enabled:hover, -.p-datepicker .p-datepicker-header .p-datepicker-next:enabled:hover { - color: #475569; - border-color: transparent; - background: #f1f5f9; - } - .p-datepicker .p-datepicker-header .p-datepicker-prev:focus-visible, -.p-datepicker .p-datepicker-header .p-datepicker-next:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-datepicker .p-datepicker-header .p-datepicker-title { - line-height: 1.75rem; - } - .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year, -.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month { - color: #334155; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - font-weight: 500; - padding: 0.25rem; - } - .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year:enabled:hover, -.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month:enabled:hover { - color: #8B5CF6; - } - .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month { - margin-right: 0.5rem; - } - .p-datepicker table { - font-size: 1rem; - margin: 0.5rem 0 0 0; - } - .p-datepicker table th { - padding: 0.25rem; - } - .p-datepicker table th > span { - width: 2rem; - height: 2rem; - } - .p-datepicker table td { - padding: 0.25rem; - } - .p-datepicker table td > span { - width: 2rem; - height: 2rem; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border: 1px solid transparent; - outline-color: transparent; - } - .p-datepicker table td > span.p-highlight { - color: #6D28D9; - background: #F5F3FF; - } - .p-datepicker table td > span:focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-datepicker table td.p-datepicker-today > span { - background: #e2e8f0; - color: #0f172a; - border-color: transparent; - } - .p-datepicker table td.p-datepicker-today > span.p-highlight { - color: #6D28D9; - background: #F5F3FF; - } - .p-datepicker .p-datepicker-buttonbar { - padding: 0.5rem 0 0 0; - border-top: 1px solid #e2e8f0; - } - .p-datepicker .p-datepicker-buttonbar .p-button { - width: auto; - } - .p-datepicker .p-timepicker { - border-top: 1px solid #e2e8f0; - padding: 0; - } - .p-datepicker .p-timepicker button { - width: 1.75rem; - height: 1.75rem; - color: #64748b; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-datepicker .p-timepicker button:enabled:hover { - color: #475569; - border-color: transparent; - background: #f1f5f9; - } - .p-datepicker .p-timepicker button:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-datepicker .p-timepicker button:last-child { - margin-top: 0.2em; - } - .p-datepicker .p-timepicker span { - font-size: 1rem; - } - .p-datepicker .p-timepicker > div { - padding: 0 0.5rem; - } - .p-datepicker.p-datepicker-timeonly .p-timepicker { - border-top: 0 none; - } - .p-datepicker .p-monthpicker { - margin: 0.5rem 0 0 0; - } - .p-datepicker .p-monthpicker .p-monthpicker-month { - padding: 0.25rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - } - .p-datepicker .p-monthpicker .p-monthpicker-month.p-highlight { - color: #6D28D9; - background: #F5F3FF; - } - .p-datepicker .p-yearpicker { - margin: 0.5rem 0 0 0; - } - .p-datepicker .p-yearpicker .p-yearpicker-year { - padding: 0.25rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - } - .p-datepicker .p-yearpicker .p-yearpicker-year.p-highlight { - color: #6D28D9; - background: #F5F3FF; - } - .p-datepicker.p-datepicker-multiple-month .p-datepicker-group { - border-left: 1px solid #e2e8f0; - padding-right: 0.75rem; - padding-left: 0.75rem; - padding-top: 0; - padding-bottom: 0; - } - .p-datepicker.p-datepicker-multiple-month .p-datepicker-group:first-child { - padding-left: 0; - border-left: 0 none; - } - .p-datepicker.p-datepicker-multiple-month .p-datepicker-group:last-child { - padding-right: 0; - } - .p-datepicker.p-datepicker-mobile table th, -.p-datepicker.p-datepicker-mobile table td { - padding: 0.25rem; - } - .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled) { - outline-color: transparent; - } - .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):hover { - background: #f1f5f9; - } - .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled) { - outline-color: transparent; - } - .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):not(.p-highlight):hover { - background: #f1f5f9; - } - .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled) { - outline-color: transparent; - } - .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):not(.p-highlight):hover { - background: #f1f5f9; - } - .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-cascadeselect { - display: inline-flex; - cursor: pointer; - user-select: none; - } - - .p-cascadeselect-trigger { - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - } - - .p-cascadeselect-label { - display: block; - white-space: nowrap; - overflow: hidden; - flex: 1 1 auto; - width: 1%; - text-overflow: ellipsis; - cursor: pointer; - } - - .p-cascadeselect-label-empty { - overflow: hidden; - visibility: hidden; - } - - .p-cascadeselect .p-cascadeselect-panel { - min-width: 100%; - } - - .p-cascadeselect-item { - cursor: pointer; - font-weight: normal; - white-space: nowrap; - } - - .p-cascadeselect-item-content { - display: flex; - align-items: center; - overflow: hidden; - position: relative; - } - - .p-cascadeselect-group-icon { - margin-left: auto; - } - - .p-cascadeselect-items { - margin: 0; - padding: 0; - list-style-type: none; - min-width: 100%; - } - - .p-fluid .p-cascadeselect { - display: flex; - } - - .p-fluid .p-cascadeselect .p-cascadeselect-label { - width: 1%; - } - - .p-cascadeselect-sublist { - position: absolute; - min-width: 100%; - z-index: 1; - display: none; - } - - .p-cascadeselect-item-active { - overflow: visible; - } - - .p-cascadeselect-item-active > .p-cascadeselect-sublist { - display: block; - left: 100%; - top: 0; - } - - .p-cascadeselect-enter-from, -.p-cascadeselect-leave-active { - opacity: 0; - } - - .p-cascadeselect-enter-active { - transition: opacity 150ms; - } - - .p-cascadeselect { - background: #ffffff; - border: 1px solid #cbd5e1; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - outline-color: transparent; - } - .p-cascadeselect:not(.p-disabled):hover { - border-color: #94a3b8; - } - .p-cascadeselect:not(.p-disabled).p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #94a3b8; - } - .p-cascadeselect.p-variant-filled { - background-color: #f8fafc; - } - .p-cascadeselect.p-variant-filled:enabled:hover { - background-color: #f8fafc; - } - .p-cascadeselect.p-variant-filled:enabled:focus { - background-color: #ffffff; - } - .p-cascadeselect .p-cascadeselect-label { - background: transparent; - border: 0 none; - padding: 0.5rem 0.75rem; - } - .p-cascadeselect .p-cascadeselect-label.p-placeholder { - color: #64748b; - } - .p-cascadeselect .p-cascadeselect-label:enabled:focus { - outline: 0 none; - box-shadow: none; - } - .p-cascadeselect .p-cascadeselect-trigger { - background: transparent; - color: #94a3b8; - width: 2.5rem; - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - } - .p-cascadeselect.p-invalid.p-component { - border-color: #f87171; - } - - .p-cascadeselect-panel { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-radius: 6px; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-cascadeselect-panel .p-cascadeselect-items { - padding: 0.25rem 0.25rem; - } - .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item { - margin: 2px 0; - border: 0 none; - color: #334155; - background: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item:first-child { - margin-top: 0; - } - .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item:last-child { - margin-bottom: 0; - } - .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item.p-highlight { - color: #6D28D9; - background: #F5F3FF; - } - .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item.p-highlight.p-focus { - background: rgba(139, 92, 246, 0.24); - } - .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item:not(.p-highlight):not(.p-disabled).p-focus { - color: #1e293b; - background: #f1f5f9; - } - .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item .p-cascadeselect-item-content { - padding: 0.5rem 0.75rem; - } - .p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item .p-cascadeselect-group-icon { - font-size: 0.875rem; - } - - .p-checkbox { - position: relative; - display: inline-flex; - user-select: none; - vertical-align: bottom; - } - - .p-checkbox-input { - cursor: pointer; - } - - .p-checkbox-box { - display: flex; - justify-content: center; - align-items: center; - } - - .p-checkbox { - width: 1.25rem; - height: 1.25rem; - } - .p-checkbox .p-checkbox-input { - appearance: none; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - padding: 0; - margin: 0; - opacity: 0; - z-index: 1; - outline: 0 none; - border: 1px solid #cbd5e1; - border-radius: 6px; - } - .p-checkbox .p-checkbox-box { - border: 1px solid #cbd5e1; - background: #ffffff; - width: 1.25rem; - height: 1.25rem; - color: #334155; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-checkbox .p-checkbox-box .p-checkbox-icon { - transition-duration: 0.2s; - color: #ffffff; - font-size: 0.875rem; - } - .p-checkbox .p-checkbox-box .p-checkbox-icon.p-icon { - width: 0.875rem; - height: 0.875rem; - } - .p-checkbox.p-highlight .p-checkbox-box { - border-color: #8B5CF6; - background: #8B5CF6; - } - .p-checkbox:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box { - border-color: #94a3b8; - } - .p-checkbox:not(.p-disabled):has(.p-checkbox-input:hover).p-highlight .p-checkbox-box { - border-color: #7C3AED; - background: #7C3AED; - color: #ffffff; - } - .p-checkbox:not(.p-disabled):has(.p-checkbox-input:focus-visible) .p-checkbox-box { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #94a3b8; - } - .p-checkbox.p-invalid > .p-checkbox-box { - border-color: #f87171; - } - .p-checkbox.p-variant-filled .p-checkbox-box { - background-color: #f8fafc; - } - .p-checkbox.p-variant-filled.p-highlight .p-checkbox-box { - background: #8B5CF6; - } - .p-checkbox.p-variant-filled:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box { - background-color: #f8fafc; - } - .p-checkbox.p-variant-filled:not(.p-disabled):has(.p-checkbox-input:hover).p-highlight .p-checkbox-box { - background: #7C3AED; - } - - .p-input-filled .p-checkbox .p-checkbox-box { - background-color: #f8fafc; - } - .p-input-filled .p-checkbox.p-highlight .p-checkbox-box { - background: #8B5CF6; - } - .p-input-filled .p-checkbox:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box { - background-color: #f8fafc; - } - .p-input-filled .p-checkbox:not(.p-disabled):has(.p-checkbox-input:hover).p-highlight .p-checkbox-box { - background: #7C3AED; - } - - .p-chips { - display: inline-flex; - } - - .p-chips-multiple-container { - margin: 0; - padding: 0; - list-style-type: none; - cursor: text; - overflow: hidden; - display: flex; - align-items: center; - flex-wrap: wrap; - } - - .p-chips-token { - cursor: default; - display: inline-flex; - align-items: center; - flex: 0 0 auto; - } - - .p-chips-input-token { - flex: 1 1 auto; - display: inline-flex; - } - - .p-chips-token-icon { - cursor: pointer; - } - - .p-chips-input-token input { - border: 0 none; - outline: 0 none; - background-color: transparent; - margin: 0; - padding: 0; - box-shadow: none; - border-radius: 0; - width: 100%; - } - - .p-fluid .p-chips { - display: flex; - } - - .p-chips:not(.p-disabled):hover .p-chips-multiple-container { - border-color: #94a3b8; - } - .p-chips:not(.p-disabled).p-focus .p-chips-multiple-container { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #94a3b8; - } - .p-chips .p-chips-multiple-container { - padding: 0.25rem 0.75rem; - outline-color: transparent; - } - .p-chips .p-chips-multiple-container .p-chips-token { - padding: 0.25rem 0.75rem; - margin-right: 0.5rem; - background: #f1f5f9; - color: #1e293b; - border-radius: 16px; - } - .p-chips .p-chips-multiple-container .p-chips-token.p-focus { - background: #e2e8f0; - color: #0f172a; - } - .p-chips .p-chips-multiple-container .p-chips-token .p-chips-token-icon { - margin-left: 0.5rem; - } - .p-chips .p-chips-multiple-container .p-chips-input-token { - padding: 0.25rem 0; - } - .p-chips .p-chips-multiple-container .p-chips-input-token input { - font-family: var(--font-family); - font-feature-settings: var(--font-feature-settings, normal); - font-size: 1rem; - color: #334155; - padding: 0; - margin: 0; - } - .p-chips.p-invalid.p-component > .p-inputtext { - border-color: #f87171; - } - - .p-colorpicker-panel .p-colorpicker-color { - background: linear-gradient(to top, #000 0%, rgba(0, 0, 0, 0) 100%), linear-gradient(to right, #fff 0%, rgba(255, 255, 255, 0) 100%); - } - - .p-colorpicker-panel .p-colorpicker-hue { - background: linear-gradient(0deg, red 0, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, red); - } - - .p-colorpicker-preview { - width: 1.5rem; - height: 1.5rem; - } - - .p-colorpicker-panel { - background: #323232; - border: 1px solid #191919; - } - .p-colorpicker-panel .p-colorpicker-color-handle, -.p-colorpicker-panel .p-colorpicker-hue-handle { - border-color: #ffffff; - } - - .p-colorpicker-overlay-panel { - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - - .p-dropdown { - display: inline-flex; - cursor: pointer; - position: relative; - user-select: none; - } - - .p-dropdown-clear-icon { - position: absolute; - top: 50%; - margin-top: -0.5rem; - } - - .p-dropdown-trigger { - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - } - - .p-dropdown-label { - display: block; - white-space: nowrap; - overflow: hidden; - flex: 1 1 auto; - width: 1%; - text-overflow: ellipsis; - cursor: pointer; - } - - .p-dropdown-label-empty { - overflow: hidden; - opacity: 0; - } - - input.p-dropdown-label { - cursor: default; - } - - .p-dropdown .p-dropdown-panel { - min-width: 100%; - } - - .p-dropdown-panel { - position: absolute; - top: 0; - left: 0; - } - - .p-dropdown-items-wrapper { - overflow: auto; - } - - .p-dropdown-item { - cursor: pointer; - font-weight: normal; - white-space: nowrap; - position: relative; - overflow: hidden; - display: flex; - align-items: center; - } - - .p-dropdown-item-group { - cursor: auto; - } - - .p-dropdown-items { - margin: 0; - padding: 0; - list-style-type: none; - } - - .p-dropdown-filter { - width: 100%; - } - - .p-dropdown-filter-container { - position: relative; - } - - .p-dropdown-filter-icon { - position: absolute; - top: 50%; - margin-top: -0.5rem; - } - - .p-fluid .p-dropdown { - display: flex; - } - - .p-fluid .p-dropdown .p-dropdown-label { - width: 1%; - } - - .p-dropdown { - background: #ffffff; - border: 1px solid #cbd5e1; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - outline-color: transparent; - } - .p-dropdown:not(.p-disabled):hover { - border-color: #94a3b8; - } - .p-dropdown:not(.p-disabled).p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #94a3b8; - } - .p-dropdown.p-variant-filled { - background: #f8fafc; - } - .p-dropdown.p-variant-filled:not(.p-disabled):hover { - background-color: #f8fafc; - } - .p-dropdown.p-variant-filled:not(.p-disabled).p-focus { - background-color: #ffffff; - } - .p-dropdown.p-variant-filled:not(.p-disabled).p-focus .p-inputtext { - background-color: transparent; - } - .p-dropdown.p-dropdown-clearable .p-dropdown-label { - padding-right: 1.75rem; - } - .p-dropdown .p-dropdown-label { - background: transparent; - border: 0 none; - } - .p-dropdown .p-dropdown-label.p-placeholder { - color: #64748b; - } - .p-dropdown .p-dropdown-label:focus, .p-dropdown .p-dropdown-label:enabled:focus { - outline: 0 none; - box-shadow: none; - } - .p-dropdown .p-dropdown-trigger { - background: transparent; - color: #94a3b8; - width: 2.5rem; - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - } - .p-dropdown .p-dropdown-clear-icon { - color: #94a3b8; - right: 2.5rem; - } - .p-dropdown.p-invalid.p-component { - border-color: #f87171; - } - - .p-dropdown-panel { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-radius: 6px; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-dropdown-panel .p-dropdown-header { - padding: 0.5rem 0.5rem 0 0.5rem; - border-bottom: 0 none; - color: #334155; - background: #ffffff; - margin: 0 0 0 0; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-dropdown-panel .p-dropdown-header .p-dropdown-filter { - padding-right: 1.75rem; - margin-right: -1.75rem; - } - .p-dropdown-panel .p-dropdown-header .p-dropdown-filter-icon { - right: 0.75rem; - color: #94a3b8; - } - .p-dropdown-panel .p-dropdown-items { - padding: 0.25rem 0.25rem; - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-item { - margin: 2px 0; - padding: 0.5rem 0.75rem; - border: 0 none; - color: #334155; - background: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-item:first-child { - margin-top: 0; - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-item:last-child { - margin-bottom: 0; - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight { - color: #6D28D9; - background: #F5F3FF; - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight.p-focus { - background: rgba(139, 92, 246, 0.24); - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-item:not(.p-highlight):not(.p-disabled).p-focus { - color: #1e293b; - background: #f1f5f9; - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-item .p-dropdown-check-icon { - position: relative; - margin-left: -0.5rem; - margin-right: 0.5rem; - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-item-group { - margin: 0; - padding: 0.5rem 0.75rem; - color: #94a3b8; - background: #ffffff; - font-weight: 600; - } - .p-dropdown-panel .p-dropdown-items .p-dropdown-empty-message { - padding: 0.5rem 0.75rem; - color: #334155; - background: transparent; - } - - .p-float-label { - display: block; - position: relative; - } - - .p-float-label label { - position: absolute; - pointer-events: none; - top: 50%; - margin-top: -0.5rem; - transition-property: all; - transition-timing-function: ease; - line-height: 1; - } - - .p-float-label:has(textarea) label { - top: 1rem; - } - - .p-float-label:has(input:focus) label, -.p-float-label:has(input.p-filled) label, -.p-float-label:has(input:-webkit-autofill) label, -.p-float-label:has(textarea:focus) label, -.p-float-label:has(textarea.p-filled) label, -.p-float-label:has(.p-inputwrapper-focus) label, -.p-float-label:has(.p-inputwrapper-filled) label { - top: -0.75rem; - font-size: 12px; - } - - .p-float-label .p-placeholder, -.p-float-label input::placeholder, -.p-float-label .p-inputtext::placeholder { - opacity: 0; - transition-property: all; - transition-timing-function: ease; - } - - .p-float-label .p-focus .p-placeholder, -.p-float-label input:focus::placeholder, -.p-float-label .p-inputtext:focus::placeholder { - opacity: 1; - transition-property: all; - transition-timing-function: ease; - } - - .p-icon-field { - position: relative; - } - - .p-icon-field > .p-input-icon { - position: absolute; - top: 50%; - margin-top: -0.5rem; - } - - .p-inputotp { - display: flex; - align-items: center; - gap: 0.5rem; - } - - .p-inputotp-input { - text-align: center; - width: 2.5rem; - } - - .p-inputgroup { - display: flex; - align-items: stretch; - width: 100%; - } - - .p-inputgroup-addon { - display: flex; - align-items: center; - justify-content: center; - } - - .p-inputgroup .p-float-label { - display: flex; - align-items: stretch; - width: 100%; - } - - .p-inputgroup .p-inputtext, -.p-fluid .p-inputgroup .p-inputtext, -.p-inputgroup .p-inputwrapper, -.p-fluid .p-inputgroup .p-input { - flex: 1 1 auto; - width: 1%; - } - - .p-inputgroup-addon { - background: #ffffff; - color: #64748b; - border-top: 1px solid #cbd5e1; - border-left: 1px solid #cbd5e1; - border-bottom: 1px solid #cbd5e1; - padding: 0.5rem 0.75rem; - min-width: 2.5rem; - } - .p-inputgroup-addon:last-child { - border-right: 1px solid #cbd5e1; - } - - .p-inputgroup > .p-component, -.p-inputgroup > .p-inputwrapper > .p-inputtext, -.p-inputgroup > .p-float-label > .p-component { - border-radius: 0; - margin: 0; - } - .p-inputgroup > .p-component + .p-inputgroup-addon, -.p-inputgroup > .p-inputwrapper > .p-inputtext + .p-inputgroup-addon, -.p-inputgroup > .p-float-label > .p-component + .p-inputgroup-addon { - border-left: 0 none; - } - .p-inputgroup > .p-component:focus, -.p-inputgroup > .p-inputwrapper > .p-inputtext:focus, -.p-inputgroup > .p-float-label > .p-component:focus { - z-index: 1; - } - .p-inputgroup > .p-component:focus ~ label, -.p-inputgroup > .p-inputwrapper > .p-inputtext:focus ~ label, -.p-inputgroup > .p-float-label > .p-component:focus ~ label { - z-index: 1; - } - - .p-inputgroup-addon:first-child, -.p-inputgroup button:first-child, -.p-inputgroup input:first-child, -.p-inputgroup > .p-inputwrapper:first-child, -.p-inputgroup > .p-inputwrapper:first-child > .p-inputtext { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px; - } - - .p-inputgroup .p-float-label:first-child input { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px; - } - - .p-inputgroup-addon:last-child, -.p-inputgroup button:last-child, -.p-inputgroup input:last-child, -.p-inputgroup > .p-inputwrapper:last-child, -.p-inputgroup > .p-inputwrapper:last-child > .p-inputtext { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - } - - .p-inputgroup .p-float-label:last-child input { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - } - - .p-fluid .p-inputgroup .p-button { - width: auto; - } - .p-fluid .p-inputgroup .p-button.p-button-icon-only { - width: 2.5rem; - } - - .p-fluid .p-icon-field-left, -.p-fluid .p-icon-field-right { - width: 100%; - } - - .p-icon-field-left > .p-input-icon:first-of-type { - left: 0.75rem; - color: #94a3b8; - } - - .p-icon-field-right > .p-input-icon:last-of-type { - right: 0.75rem; - color: #94a3b8; - } - - .p-inputnumber { - display: inline-flex; - } - - .p-inputnumber-button { - display: flex; - align-items: center; - justify-content: center; - flex: 0 0 auto; - } - - .p-inputnumber-buttons-stacked .p-button.p-inputnumber-button .p-button-label, -.p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button .p-button-label { - display: none; - } - - .p-inputnumber-buttons-stacked .p-button.p-inputnumber-button-up { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - padding: 0; - } - - .p-inputnumber-buttons-stacked .p-inputnumber-input { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - .p-inputnumber-buttons-stacked .p-button.p-inputnumber-button-down { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-bottom-left-radius: 0; - padding: 0; - } - - .p-inputnumber-buttons-stacked .p-inputnumber-button-group { - display: flex; - flex-direction: column; - } - - .p-inputnumber-buttons-stacked .p-inputnumber-button-group .p-button.p-inputnumber-button { - flex: 1 1 auto; - } - - .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up { - order: 3; - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - .p-inputnumber-buttons-horizontal .p-inputnumber-input { - order: 2; - border-radius: 0; - } - - .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down { - order: 1; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - .p-inputnumber-buttons-vertical { - flex-direction: column; - } - - .p-inputnumber-buttons-vertical .p-button.p-inputnumber-button-up { - order: 1; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - width: 100%; - } - - .p-inputnumber-buttons-vertical .p-inputnumber-input { - order: 2; - border-radius: 0; - text-align: center; - } - - .p-inputnumber-buttons-vertical .p-button.p-inputnumber-button-down { - order: 3; - border-top-left-radius: 0; - border-top-right-radius: 0; - width: 100%; - } - - .p-inputnumber-input { - flex: 1 1 auto; - } - - .p-fluid .p-inputnumber { - width: 100%; - } - - .p-fluid .p-inputnumber .p-inputnumber-input { - width: 1%; - } - - .p-fluid .p-inputnumber-buttons-vertical .p-inputnumber-input { - width: 100%; - } - - .p-inputnumber.p-invalid.p-component > .p-inputtext { - border-color: #f87171; - } - .p-inputnumber.p-variant-filled > .p-inputnumber-input { - background-color: #f8fafc; - } - .p-inputnumber.p-variant-filled > .p-inputnumber-input:enabled:hover { - background-color: #f8fafc; - } - .p-inputnumber.p-variant-filled > .p-inputnumber-input:enabled:focus { - background-color: #ffffff; - } - - .p-inputswitch { - display: inline-block; - } - - .p-inputswitch-input { - cursor: pointer; - } - - .p-inputswitch-slider { - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - border: 1px solid transparent; - } - - .p-inputswitch-slider:before { - position: absolute; - content: ""; - top: 50%; - } - - .p-inputswitch { - width: 2.5rem; - height: 1.5rem; - } - .p-inputswitch .p-inputswitch-input { - appearance: none; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - padding: 0; - margin: 0; - opacity: 0; - z-index: 1; - outline: 0 none; - border-radius: 30px; - } - .p-inputswitch .p-inputswitch-slider { - background: #cbd5e1; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 30px; - outline-color: transparent; - } - .p-inputswitch .p-inputswitch-slider:before { - background: #ffffff; - width: 1rem; - height: 1rem; - left: 0.25rem; - margin-top: -0.5rem; - border-radius: 50%; - transition-duration: 0.2s; - } - .p-inputswitch.p-highlight .p-inputswitch-slider { - background: #8B5CF6; - } - .p-inputswitch.p-highlight .p-inputswitch-slider:before { - background: #ffffff; - transform: translateX(1rem); - } - .p-inputswitch:not(.p-disabled):has(.p-inputswitch-input:hover) .p-inputswitch-slider { - background: #94a3b8; - } - .p-inputswitch:not(.p-disabled):has(.p-inputswitch-input:hover).p-highlight .p-inputswitch-slider { - background: #7C3AED; - } - .p-inputswitch:not(.p-disabled):has(.p-inputswitch-input:focus-visible) .p-inputswitch-slider { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-inputswitch.p-invalid > .p-inputswitch-slider { - border-color: #f87171; - } - - .p-fluid .p-inputtext { - width: 100%; - } - - .p-inputtext { - font-family: var(--font-family); - font-feature-settings: var(--font-feature-settings, normal); - font-size: 1rem; - color: #334155; - background: #ffffff; - padding: 0.5rem 0.75rem; - border: 1px solid #cbd5e1; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - appearance: none; - border-radius: 6px; - outline-color: transparent; - } - .p-inputtext:enabled:hover { - border-color: #94a3b8; - } - .p-inputtext:enabled:focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #94a3b8; - } - .p-inputtext.p-invalid.p-component { - border-color: #f87171; - } - .p-inputtext.p-variant-filled { - background-color: #f8fafc; - } - .p-inputtext.p-variant-filled:enabled:hover { - background-color: #f8fafc; - } - .p-inputtext.p-variant-filled:enabled:focus { - background-color: #ffffff; - } - .p-inputtext.p-inputtext-sm { - font-size: 0.875rem; - padding: 0.4375rem 0.65625rem; - } - .p-inputtext.p-inputtext-lg { - font-size: 1.25rem; - padding: 0.625rem 0.9375rem; - } - - .p-float-label > label { - left: 0.75rem; - color: #64748b; - transition-duration: 0.2s; - } - - .p-float-label > .p-invalid + label { - color: #f87171; - } - - .p-icon-field-left > .p-inputtext { - padding-left: 2.5rem; - } - - .p-icon-field-left.p-float-label > label { - left: 2.5rem; - } - - .p-icon-field-right > .p-inputtext { - padding-right: 2.5rem; - } - - ::-webkit-input-placeholder { - color: #64748b; - } - - :-moz-placeholder { - color: #64748b; - } - - ::-moz-placeholder { - color: #64748b; - } - - :-ms-input-placeholder { - color: #64748b; - } - - .p-input-filled .p-inputtext { - background-color: #f8fafc; - } - .p-input-filled .p-inputtext:enabled:hover { - background-color: #f8fafc; - } - .p-input-filled .p-inputtext:enabled:focus { - background-color: #ffffff; - } - - .p-inputtext-sm .p-inputtext { - font-size: 0.875rem; - padding: 0.4375rem 0.65625rem; - } - - .p-inputtext-lg .p-inputtext { - font-size: 1.25rem; - padding: 0.625rem 0.9375rem; - } - - .p-knob-range { - fill: none; - transition: stroke 0.1s ease-in; - } - - .p-knob-value { - animation-name: dash-frame; - animation-fill-mode: forwards; - fill: none; - } - - .p-knob-text { - font-size: 1.3rem; - text-align: center; - } - - @keyframes dash-frame { - 100% { - stroke-dashoffset: 0; - } - } - .p-listbox-list-wrapper { - overflow: auto; - } - - .p-listbox-list { - list-style-type: none; - margin: 0; - padding: 0; - } - - .p-listbox-item { - cursor: pointer; - position: relative; - overflow: hidden; - } - - .p-listbox-item-group { - cursor: auto; - } - - .p-listbox-filter-container { - position: relative; - } - - .p-listbox-filter-icon { - position: absolute; - top: 50%; - margin-top: -0.5rem; - } - - .p-listbox-filter { - width: 100%; - } - - .p-listbox { - background: #ffffff; - color: #334155; - border: 1px solid #cbd5e1; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-listbox .p-listbox-header { - padding: 0.5rem 0.5rem 0 0.5rem; - border-bottom: 0 none; - color: #334155; - background: #ffffff; - margin: 0 0 0 0; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-listbox .p-listbox-header .p-listbox-filter { - padding-right: 1.75rem; - } - .p-listbox .p-listbox-header .p-listbox-filter-icon { - right: 0.75rem; - color: #94a3b8; - } - .p-listbox .p-listbox-list { - padding: 0.25rem 0.25rem; - outline: 0 none; - } - .p-listbox .p-listbox-list .p-listbox-item { - margin: 2px 0; - padding: 0.5rem 0.75rem; - border: 0 none; - color: #334155; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-listbox .p-listbox-list .p-listbox-item:first-child { - margin-top: 0; - } - .p-listbox .p-listbox-list .p-listbox-item:last-child { - margin-bottom: 0; - } - .p-listbox .p-listbox-list .p-listbox-item.p-highlight { - color: #6D28D9; - background: #F5F3FF; - } - .p-listbox .p-listbox-list .p-listbox-item-group { - margin: 0; - padding: 0.5rem 0.75rem; - color: #94a3b8; - background: #ffffff; - font-weight: 600; - } - .p-listbox .p-listbox-list .p-listbox-empty-message { - padding: 0.5rem 0.75rem; - color: #334155; - background: transparent; - } - .p-listbox:not(.p-disabled) .p-listbox-item.p-highlight.p-focus { - background: rgba(139, 92, 246, 0.24); - } - .p-listbox:not(.p-disabled) .p-listbox-item:not(.p-highlight):not(.p-disabled).p-focus { - color: #1e293b; - background: #f1f5f9; - } - .p-listbox:not(.p-disabled) .p-listbox-item:not(.p-highlight):not(.p-disabled):hover { - color: #1e293b; - background: #f1f5f9; - } - .p-listbox:not(.p-disabled) .p-listbox-item:not(.p-highlight):not(.p-disabled):hover.p-focus { - color: #1e293b; - background: #f1f5f9; - } - .p-listbox.p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #94a3b8; - } - .p-listbox.p-invalid { - border-color: #f87171; - } - - .p-multiselect { - display: inline-flex; - cursor: pointer; - user-select: none; - } - - .p-multiselect-trigger { - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - } - - .p-multiselect-label-container { - overflow: hidden; - flex: 1 1 auto; - cursor: pointer; - } - - .p-multiselect-label { - display: block; - white-space: nowrap; - cursor: pointer; - overflow: hidden; - text-overflow: ellipsis; - } - - .p-multiselect-label-empty { - overflow: hidden; - visibility: hidden; - } - - .p-multiselect-token { - cursor: default; - display: inline-flex; - align-items: center; - flex: 0 0 auto; - } - - .p-multiselect-token-icon { - cursor: pointer; - } - - .p-multiselect .p-multiselect-panel { - min-width: 100%; - } - - .p-multiselect-items-wrapper { - overflow: auto; - } - - .p-multiselect-items { - margin: 0; - padding: 0; - list-style-type: none; - } - - .p-multiselect-item { - cursor: pointer; - display: flex; - align-items: center; - font-weight: normal; - white-space: nowrap; - position: relative; - overflow: hidden; - } - - .p-multiselect-item-group { - cursor: auto; - } - - .p-multiselect-header { - display: flex; - align-items: center; - justify-content: space-between; - } - - .p-multiselect-filter-container { - position: relative; - flex: 1 1 auto; - } - - .p-multiselect-filter-icon { - position: absolute; - top: 50%; - margin-top: -0.5rem; - } - - .p-multiselect-filter-container .p-inputtext { - width: 100%; - } - - .p-multiselect-close { - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - overflow: hidden; - position: relative; - margin-left: auto; - } - - .p-fluid .p-multiselect { - display: flex; - } - - .p-multiselect { - background: #ffffff; - border: 1px solid #cbd5e1; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - outline-color: transparent; - } - .p-multiselect:not(.p-disabled):hover { - border-color: #94a3b8; - } - .p-multiselect:not(.p-disabled).p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #94a3b8; - } - .p-multiselect.p-variant-filled { - background: #f8fafc; - } - .p-multiselect.p-variant-filled:not(.p-disabled):hover { - background-color: #f8fafc; - } - .p-multiselect.p-variant-filled:not(.p-disabled).p-focus { - background-color: #ffffff; - } - .p-multiselect .p-multiselect-label { - padding: 0.5rem 0.75rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-multiselect .p-multiselect-label.p-placeholder { - color: #64748b; - } - .p-multiselect.p-multiselect-chip .p-multiselect-token { - padding: 0.25rem 0.75rem; - margin-right: 0.5rem; - background: #f1f5f9; - color: #1e293b; - border-radius: 16px; - } - .p-multiselect.p-multiselect-chip .p-multiselect-token .p-multiselect-token-icon { - margin-left: 0.5rem; - } - .p-multiselect .p-multiselect-trigger { - background: transparent; - color: #94a3b8; - width: 2.5rem; - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - } - .p-multiselect.p-invalid.p-component { - border-color: #f87171; - } - - .p-inputwrapper-filled.p-multiselect.p-multiselect-chip .p-multiselect-label { - padding: 0.25rem 0.75rem; - } - - .p-multiselect-panel { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-radius: 6px; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-multiselect-panel .p-multiselect-header { - padding: 0.5rem 0.5rem 0 0.5rem; - border-bottom: 0 none; - color: #334155; - background: #ffffff; - margin: 0 0 0 0; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext { - padding-right: 1.75rem; - } - .p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-multiselect-filter-icon { - right: 0.75rem; - color: #94a3b8; - } - .p-multiselect-panel .p-multiselect-header .p-checkbox { - margin-right: 0.5rem; - } - .p-multiselect-panel .p-multiselect-header .p-multiselect-close { - margin-left: 0.5rem; - width: 1.75rem; - height: 1.75rem; - color: #64748b; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-multiselect-panel .p-multiselect-header .p-multiselect-close:enabled:hover { - color: #475569; - border-color: transparent; - background: #f1f5f9; - } - .p-multiselect-panel .p-multiselect-header .p-multiselect-close:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-multiselect-panel .p-multiselect-items { - padding: 0.25rem 0.25rem; - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-item { - margin: 2px 0; - padding: 0.5rem 0.75rem; - border: 0 none; - color: #334155; - background: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-item:first-child { - margin-top: 0; - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-item:last-child { - margin-bottom: 0; - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-item.p-highlight { - color: #6D28D9; - background: #F5F3FF; - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-item.p-highlight.p-focus { - background: rgba(139, 92, 246, 0.24); - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-item:not(.p-highlight):not(.p-disabled).p-focus { - color: #1e293b; - background: #f1f5f9; - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-item .p-checkbox { - margin-right: 0.5rem; - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-item-group { - margin: 0; - padding: 0.5rem 0.75rem; - color: #94a3b8; - background: #ffffff; - font-weight: 600; - } - .p-multiselect-panel .p-multiselect-items .p-multiselect-empty-message { - padding: 0.5rem 0.75rem; - color: #334155; - background: transparent; - } - - .p-password { - display: inline-flex; - } - - .p-password .p-password-panel { - min-width: 100%; - } - - .p-password-meter { - height: 10px; - } - - .p-password-strength { - height: 100%; - width: 0; - transition: width 1s ease-in-out; - } - - .p-fluid .p-password { - display: flex; - } - - .p-password-input::-ms-reveal, -.p-password-input::-ms-clear { - display: none; - } - - .p-password.p-invalid.p-component > .p-inputtext { - border-color: #f87171; - } - - .p-password-panel { - padding: 0 1.125rem 1.125rem 1.125rem; - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - border-radius: 6px; - } - .p-password-panel .p-password-meter { - margin-bottom: 0.5rem; - background: #e2e8f0; - } - .p-password-panel .p-password-meter .p-password-strength.weak { - background: #ef4444; - } - .p-password-panel .p-password-meter .p-password-strength.medium { - background: #f59e0b; - } - .p-password-panel .p-password-meter .p-password-strength.strong { - background: #22c55e; - } - - .p-radiobutton { - position: relative; - display: inline-flex; - user-select: none; - vertical-align: bottom; - } - - .p-radiobutton-input { - cursor: pointer; - } - - .p-radiobutton-box { - display: flex; - justify-content: center; - align-items: center; - } - - .p-radiobutton-icon { - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - transform: translateZ(0) scale(0.1); - border-radius: 50%; - visibility: hidden; - } - - .p-radiobutton.p-highlight .p-radiobutton-icon { - transform: translateZ(0) scale(1, 1); - visibility: visible; - } - - .p-radiobutton { - width: 1.25rem; - height: 1.25rem; - } - .p-radiobutton .p-radiobutton-input { - appearance: none; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - padding: 0; - margin: 0; - opacity: 0; - z-index: 1; - outline: 0 none; - border: 1px solid #cbd5e1; - border-radius: 50%; - } - .p-radiobutton .p-radiobutton-box { - border: 1px solid #cbd5e1; - background: #ffffff; - width: 1.25rem; - height: 1.25rem; - color: #334155; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-radiobutton .p-radiobutton-box .p-radiobutton-icon { - width: 0.75rem; - height: 0.75rem; - transition-duration: 0.2s; - background-color: #8B5CF6; - } - .p-radiobutton.p-highlight .p-radiobutton-box { - border-color: #8B5CF6; - background: #ffffff; - } - .p-radiobutton:not(.p-disabled):has(.p-radiobutton-input:hover) .p-radiobutton-box { - border-color: #94a3b8; - } - .p-radiobutton:not(.p-disabled):has(.p-radiobutton-input:hover).p-highlight .p-radiobutton-box { - border-color: #7C3AED; - background: #ffffff; - } - .p-radiobutton:not(.p-disabled):has(.p-radiobutton-input:hover).p-highlight .p-radiobutton-box .p-radiobutton-icon { - background-color: #7C3AED; - } - .p-radiobutton:not(.p-disabled):has(.p-radiobutton-input:focus-visible) .p-radiobutton-box { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #94a3b8; - } - .p-radiobutton.p-invalid > .p-radiobutton-box { - border-color: #f87171; - } - .p-radiobutton.p-variant-filled .p-radiobutton-box { - background-color: #f8fafc; - } - .p-radiobutton.p-variant-filled.p-highlight .p-radiobutton-box { - background: #ffffff; - } - .p-radiobutton.p-variant-filled:not(.p-disabled):has(.p-radiobutton-input:hover) .p-radiobutton-box { - background-color: #f8fafc; - } - .p-radiobutton.p-variant-filled:not(.p-disabled):has(.p-radiobutton-input:hover).p-highlight .p-radiobutton-box { - background: #ffffff; - } - - .p-input-filled .p-radiobutton .p-radiobutton-box { - background-color: #f8fafc; - } - .p-input-filled .p-radiobutton.p-highlight .p-radiobutton-box { - background: #ffffff; - } - .p-input-filled .p-radiobutton:not(.p-disabled):has(.p-radiobutton-input:hover) .p-radiobutton-box { - background-color: #f8fafc; - } - .p-input-filled .p-radiobutton:not(.p-disabled):has(.p-radiobutton-input:hover).p-highlight .p-radiobutton-box { - background: #ffffff; - } - - .p-rating { - position: relative; - display: flex; - align-items: center; - } - - .p-rating-item { - display: inline-flex; - align-items: center; - cursor: pointer; - } - - .p-rating.p-readonly .p-rating-item { - cursor: default; - } - - .p-rating { - gap: 0.5rem; - } - .p-rating .p-rating-item { - outline-color: transparent; - border-radius: 50%; - } - .p-rating .p-rating-item .p-rating-icon { - color: #64748b; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - font-size: 1rem; - } - .p-rating .p-rating-item .p-rating-icon.p-icon { - width: 1rem; - height: 1rem; - } - .p-rating .p-rating-item .p-rating-icon.p-rating-cancel { - color: #f87171; - } - .p-rating .p-rating-item.p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-rating .p-rating-item.p-rating-item-active .p-rating-icon { - color: #8B5CF6; - } - .p-rating:not(.p-disabled):not(.p-readonly) .p-rating-item:hover .p-rating-icon { - color: #8B5CF6; - } - .p-rating:not(.p-disabled):not(.p-readonly) .p-rating-item:hover .p-rating-icon.p-rating-cancel { - color: #ef4444; - } - - .p-selectbutton .p-button { - background: #f1f5f9; - border: 1px solid #f1f5f9; - color: #64748b; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-selectbutton .p-button .p-button-icon-left, -.p-selectbutton .p-button .p-button-icon-right { - color: #64748b; - } - .p-selectbutton .p-button:not(.p-disabled):not(.p-highlight):hover { - background: #f1f5f9; - border-color: #f1f5f9; - color: #334155; - } - .p-selectbutton .p-button:not(.p-disabled):not(.p-highlight):hover .p-button-icon-left, -.p-selectbutton .p-button:not(.p-disabled):not(.p-highlight):hover .p-button-icon-right { - color: #334155; - } - .p-selectbutton .p-button.p-highlight { - background: #f1f5f9; - border-color: #f1f5f9; - color: #0f172a; - } - .p-selectbutton .p-button.p-highlight .p-button-icon-left, -.p-selectbutton .p-button.p-highlight .p-button-icon-right { - color: #0f172a; - } - .p-selectbutton .p-button.p-highlight:hover { - background: #f1f5f9; - border-color: #f1f5f9; - color: #0f172a; - } - .p-selectbutton .p-button.p-highlight:hover .p-button-icon-left, -.p-selectbutton .p-button.p-highlight:hover .p-button-icon-right { - color: #0f172a; - } - .p-selectbutton.p-invalid > .p-button { - border-color: #f87171; - } - - .p-slider { - position: relative; - } - - .p-slider .p-slider-handle { - cursor: grab; - touch-action: none; - display: block; - } - - .p-slider-range { - display: block; - } - - .p-slider-horizontal .p-slider-range { - top: 0; - left: 0; - height: 100%; - } - - .p-slider-horizontal .p-slider-handle { - top: 50%; - } - - .p-slider-vertical { - height: 100px; - } - - .p-slider-vertical .p-slider-handle { - left: 50%; - } - - .p-slider-vertical .p-slider-range { - bottom: 0; - left: 0; - width: 100%; - } - - .p-slider { - background: #e2e8f0; - border: 0 none; - border-radius: 6px; - } - .p-slider.p-slider-horizontal { - height: 3px; - } - .p-slider.p-slider-horizontal .p-slider-handle { - margin-top: -10px; - margin-left: -10px; - } - .p-slider.p-slider-vertical { - width: 3px; - } - .p-slider.p-slider-vertical .p-slider-handle { - margin-left: -10px; - margin-bottom: -10px; - } - .p-slider .p-slider-handle { - height: 20px; - width: 20px; - background: #e2e8f0; - border: 0 none; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-slider .p-slider-handle:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-slider .p-slider-range { - background: #8B5CF6; - border-radius: 6px; - } - .p-slider:not(.p-disabled) .p-slider-handle:hover { - background: #e2e8f0; - border-color: transparent; - } - - .p-inputtextarea-resizable { - overflow: hidden; - resize: none; - } - - .p-fluid .p-inputtextarea { - width: 100%; - } - - .p-treeselect { - display: inline-flex; - cursor: pointer; - user-select: none; - } - - .p-treeselect-trigger { - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - } - - .p-treeselect-label-container { - overflow: hidden; - flex: 1 1 auto; - cursor: pointer; - } - - .p-treeselect-label { - display: block; - white-space: nowrap; - cursor: pointer; - overflow: hidden; - text-overflow: ellipsis; - } - - .p-treeselect-label-empty { - overflow: hidden; - visibility: hidden; - } - - .p-treeselect-token { - cursor: default; - display: inline-flex; - align-items: center; - flex: 0 0 auto; - } - - .p-treeselect .p-treeselect-panel { - min-width: 100%; - } - - .p-treeselect-items-wrapper { - overflow: auto; - } - - .p-fluid .p-treeselect { - display: flex; - } - - .p-treeselect { - background: #ffffff; - border: 1px solid #cbd5e1; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - outline-color: transparent; - } - .p-treeselect:not(.p-disabled):hover { - border-color: #94a3b8; - } - .p-treeselect:not(.p-disabled).p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #94a3b8; - } - .p-treeselect.p-variant-filled { - background: #f8fafc; - } - .p-treeselect.p-variant-filled:not(.p-disabled):hover { - background-color: #f8fafc; - } - .p-treeselect.p-variant-filled:not(.p-disabled).p-focus { - background-color: #ffffff; - } - .p-treeselect .p-treeselect-label { - padding: 0.5rem 0.75rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-treeselect .p-treeselect-label.p-placeholder { - color: #64748b; - } - .p-treeselect.p-treeselect-chip .p-treeselect-token { - padding: 0.25rem 0.75rem; - margin-right: 0.5rem; - background: #f1f5f9; - color: #1e293b; - border-radius: 16px; - } - .p-treeselect .p-treeselect-trigger { - background: transparent; - color: #94a3b8; - width: 2.5rem; - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - } - .p-treeselect.p-invalid.p-component { - border-color: #f87171; - } - - .p-inputwrapper-filled.p-treeselect.p-treeselect-chip .p-treeselect-label { - padding: 0.25rem 0.75rem; - } - - .p-treeselect-panel { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-radius: 6px; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-treeselect-panel .p-treeselect-items-wrapper .p-tree { - border: 0 none; - } - .p-treeselect-panel .p-treeselect-items-wrapper .p-treeselect-empty-message { - padding: 0.5rem 0.75rem; - color: #334155; - background: transparent; - } - - .p-input-filled .p-treeselect { - background: #f8fafc; - } - .p-input-filled .p-treeselect:not(.p-disabled):hover { - background-color: #f8fafc; - } - .p-input-filled .p-treeselect:not(.p-disabled).p-focus { - background-color: #ffffff; - } - - .p-togglebutton { - position: relative; - display: inline-flex; - user-select: none; - vertical-align: bottom; - } - - .p-togglebutton-input { - cursor: pointer; - } - - .p-togglebutton .p-button { - flex: 1 1 auto; - } - - .p-togglebutton .p-togglebutton-input { - appearance: none; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - padding: 0; - margin: 0; - opacity: 0; - z-index: 1; - outline: 0 none; - border: 1px solid #f1f5f9; - border-radius: 6px; - } - .p-togglebutton .p-button { - background: #f1f5f9; - border: 1px solid #f1f5f9; - color: #64748b; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-togglebutton .p-button .p-button-icon-left, -.p-togglebutton .p-button .p-button-icon-right { - color: #64748b; - } - .p-togglebutton.p-highlight .p-button { - background: #f1f5f9; - border-color: #f1f5f9; - color: #0f172a; - } - .p-togglebutton.p-highlight .p-button .p-button-icon-left, -.p-togglebutton.p-highlight .p-button .p-button-icon-right { - color: #0f172a; - } - .p-togglebutton:not(.p-disabled):has(.p-togglebutton-input:hover):not(.p-highlight) .p-button { - background: #f1f5f9; - border-color: #f1f5f9; - color: #334155; - } - .p-togglebutton:not(.p-disabled):has(.p-togglebutton-input:hover):not(.p-highlight) .p-button .p-button-icon-left, -.p-togglebutton:not(.p-disabled):has(.p-togglebutton-input:hover):not(.p-highlight) .p-button .p-button-icon-right { - color: #334155; - } - .p-togglebutton:not(.p-disabled):has(.p-togglebutton-input:hover).p-highlight .p-button { - background: #f1f5f9; - border-color: #f1f5f9; - color: #0f172a; - } - .p-togglebutton:not(.p-disabled):has(.p-togglebutton-input:hover).p-highlight .p-button .p-button-icon-left, -.p-togglebutton:not(.p-disabled):has(.p-togglebutton-input:hover).p-highlight .p-button .p-button-icon-right { - color: #0f172a; - } - .p-togglebutton:not(.p-disabled):has(.p-togglebutton-input:focus-visible) .p-button { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #94a3b8; - } - .p-togglebutton.p-invalid > .p-button { - border-color: #f87171; - } - - .p-button { - display: inline-flex; - cursor: pointer; - user-select: none; - align-items: center; - vertical-align: bottom; - text-align: center; - overflow: hidden; - position: relative; - } - - .p-button-label { - flex: 1 1 auto; - } - - .p-button-icon-right { - order: 1; - } - - .p-button:disabled { - cursor: default; - } - - .p-button-icon-only { - justify-content: center; - } - - .p-button-icon-only .p-button-label { - visibility: hidden; - width: 0; - flex: 0 0 auto; - } - - .p-button-vertical { - flex-direction: column; - } - - .p-button-icon-bottom { - order: 2; - } - - .p-button-group .p-button { - margin: 0; - } - - .p-button-group .p-button:not(:last-child), .p-button-group .p-button:not(:last-child):hover { - border-right: 0 none; - } - - .p-button-group .p-button:not(:first-of-type):not(:last-of-type) { - border-radius: 0; - } - - .p-button-group .p-button:first-of-type:not(:only-of-type) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - .p-button-group .p-button:last-of-type:not(:only-of-type) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - .p-button-group .p-button:focus { - position: relative; - z-index: 1; - } - - .p-button { - color: #ffffff; - background: #8B5CF6; - border: 1px solid #8B5CF6; - padding: 0.5rem 1rem; - font-size: 1rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - outline-color: transparent; - } - .p-button:not(:disabled):hover { - background: #7C3AED; - color: #ffffff; - border-color: #7C3AED; - } - .p-button:not(:disabled):active { - background: #6D28D9; - color: #ffffff; - border-color: #6D28D9; - } - .p-button.p-button-outlined { - background-color: transparent; - color: #8B5CF6; - border: 1px solid; - } - .p-button.p-button-outlined:not(:disabled):hover { - background: rgba(139, 92, 246, 0.04); - color: #8B5CF6; - border: 1px solid; - } - .p-button.p-button-outlined:not(:disabled):active { - background: rgba(139, 92, 246, 0.16); - color: #8B5CF6; - border: 1px solid; - } - .p-button.p-button-outlined.p-button-plain { - color: #334155; - border-color: #334155; - } - .p-button.p-button-outlined.p-button-plain:not(:disabled):hover { - background: #f1f5f9; - color: #334155; - } - .p-button.p-button-outlined.p-button-plain:not(:disabled):active { - background: #e2e8f0; - color: #334155; - } - .p-button.p-button-text { - background-color: transparent; - color: #8B5CF6; - border-color: transparent; - } - .p-button.p-button-text:not(:disabled):hover { - background: rgba(139, 92, 246, 0.04); - color: #8B5CF6; - border-color: transparent; - } - .p-button.p-button-text:not(:disabled):active { - background: rgba(139, 92, 246, 0.16); - color: #8B5CF6; - border-color: transparent; - } - .p-button.p-button-text.p-button-plain { - color: #334155; - } - .p-button.p-button-text.p-button-plain:not(:disabled):hover { - background: #f1f5f9; - color: #334155; - } - .p-button.p-button-text.p-button-plain:not(:disabled):active { - background: #e2e8f0; - color: #334155; - } - .p-button:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-button .p-button-label { - transition-duration: 0.2s; - } - .p-button .p-button-icon-left { - margin-right: 0.5rem; - } - .p-button .p-button-icon-right { - margin-left: 0.5rem; - } - .p-button .p-button-icon-bottom { - margin-top: 0.5rem; - } - .p-button .p-button-icon-top { - margin-bottom: 0.5rem; - } - .p-button .p-badge { - margin-left: 0.5rem; - min-width: 1rem; - height: 1rem; - line-height: 1rem; - color: #8B5CF6; - background-color: #ffffff; - } - .p-button.p-button-raised { - box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); - } - .p-button.p-button-rounded { - border-radius: 2rem; - } - .p-button.p-button-icon-only { - width: 2.5rem; - padding: 0.5rem 0; - } - .p-button.p-button-icon-only .p-button-icon-left, -.p-button.p-button-icon-only .p-button-icon-right { - margin: 0; - } - .p-button.p-button-icon-only.p-button-rounded { - border-radius: 50%; - height: 2.5rem; - } - .p-button.p-button-sm { - font-size: 0.875rem; - padding: 0.4375rem 0.875rem; - } - .p-button.p-button-sm .p-button-icon { - font-size: 0.875rem; - } - .p-button.p-button-lg { - font-size: 1.25rem; - padding: 0.625rem 1.25rem; - } - .p-button.p-button-lg .p-button-icon { - font-size: 1.25rem; - } - .p-button.p-button-loading-label-only .p-button-label { - margin-left: 0.5rem; - } - .p-button.p-button-loading-label-only .p-button-loading-icon { - margin-right: 0; - } - - .p-fluid .p-button { - width: 100%; - } - .p-fluid .p-button-icon-only { - width: 2.5rem; - } - .p-fluid .p-button-group { - display: flex; - } - .p-fluid .p-button-group .p-button { - flex: 1; - } - - .p-button.p-button-secondary, .p-button-group.p-button-secondary > .p-button, .p-splitbutton.p-button-secondary > .p-button { - color: #475569; - background: #f1f5f9; - border: 1px solid #f1f5f9; - } - .p-button.p-button-secondary:not(:disabled):hover, .p-button-group.p-button-secondary > .p-button:not(:disabled):hover, .p-splitbutton.p-button-secondary > .p-button:not(:disabled):hover { - background: #e2e8f0; - color: #334155; - border-color: #e2e8f0; - } - .p-button.p-button-secondary:not(:disabled):focus, .p-button-group.p-button-secondary > .p-button:not(:disabled):focus, .p-splitbutton.p-button-secondary > .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-button.p-button-secondary:not(:disabled):active, .p-button-group.p-button-secondary > .p-button:not(:disabled):active, .p-splitbutton.p-button-secondary > .p-button:not(:disabled):active { - background: #cbd5e1; - color: #1e293b; - border-color: #cbd5e1; - } - .p-button.p-button-secondary.p-button-outlined, .p-button-group.p-button-secondary > .p-button.p-button-outlined, .p-splitbutton.p-button-secondary > .p-button.p-button-outlined { - background-color: transparent; - color: #f1f5f9; - border: 1px solid; - } - .p-button.p-button-secondary.p-button-outlined:not(:disabled):hover, .p-button-group.p-button-secondary > .p-button.p-button-outlined:not(:disabled):hover, .p-splitbutton.p-button-secondary > .p-button.p-button-outlined:not(:disabled):hover { - background: rgba(241, 245, 249, 0.04); - color: #f1f5f9; - border: 1px solid; - } - .p-button.p-button-secondary.p-button-outlined:not(:disabled):active, .p-button-group.p-button-secondary > .p-button.p-button-outlined:not(:disabled):active, .p-splitbutton.p-button-secondary > .p-button.p-button-outlined:not(:disabled):active { - background: rgba(241, 245, 249, 0.16); - color: #f1f5f9; - border: 1px solid; - } - .p-button.p-button-secondary.p-button-text, .p-button-group.p-button-secondary > .p-button.p-button-text, .p-splitbutton.p-button-secondary > .p-button.p-button-text { - background-color: transparent; - color: #f1f5f9; - border-color: transparent; - } - .p-button.p-button-secondary.p-button-text:not(:disabled):hover, .p-button-group.p-button-secondary > .p-button.p-button-text:not(:disabled):hover, .p-splitbutton.p-button-secondary > .p-button.p-button-text:not(:disabled):hover { - background: rgba(241, 245, 249, 0.04); - border-color: transparent; - color: #f1f5f9; - } - .p-button.p-button-secondary.p-button-text:not(:disabled):active, .p-button-group.p-button-secondary > .p-button.p-button-text:not(:disabled):active, .p-splitbutton.p-button-secondary > .p-button.p-button-text:not(:disabled):active { - background: rgba(241, 245, 249, 0.16); - border-color: transparent; - color: #f1f5f9; - } - - .p-button.p-button-info, .p-button-group.p-button-info > .p-button, .p-splitbutton.p-button-info > .p-button { - color: #ffffff; - background: #0ea5e9; - border: 1px solid #0ea5e9; - } - .p-button.p-button-info:not(:disabled):hover, .p-button-group.p-button-info > .p-button:not(:disabled):hover, .p-splitbutton.p-button-info > .p-button:not(:disabled):hover { - background: #0284c7; - color: #ffffff; - border-color: #0284c7; - } - .p-button.p-button-info:not(:disabled):focus, .p-button-group.p-button-info > .p-button:not(:disabled):focus, .p-splitbutton.p-button-info > .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-button.p-button-info:not(:disabled):active, .p-button-group.p-button-info > .p-button:not(:disabled):active, .p-splitbutton.p-button-info > .p-button:not(:disabled):active { - background: #0369a1; - color: #ffffff; - border-color: #0369a1; - } - .p-button.p-button-info.p-button-outlined, .p-button-group.p-button-info > .p-button.p-button-outlined, .p-splitbutton.p-button-info > .p-button.p-button-outlined { - background-color: transparent; - color: #0ea5e9; - border: 1px solid; - } - .p-button.p-button-info.p-button-outlined:not(:disabled):hover, .p-button-group.p-button-info > .p-button.p-button-outlined:not(:disabled):hover, .p-splitbutton.p-button-info > .p-button.p-button-outlined:not(:disabled):hover { - background: rgba(14, 165, 233, 0.04); - color: #0ea5e9; - border: 1px solid; - } - .p-button.p-button-info.p-button-outlined:not(:disabled):active, .p-button-group.p-button-info > .p-button.p-button-outlined:not(:disabled):active, .p-splitbutton.p-button-info > .p-button.p-button-outlined:not(:disabled):active { - background: rgba(14, 165, 233, 0.16); - color: #0ea5e9; - border: 1px solid; - } - .p-button.p-button-info.p-button-text, .p-button-group.p-button-info > .p-button.p-button-text, .p-splitbutton.p-button-info > .p-button.p-button-text { - background-color: transparent; - color: #0ea5e9; - border-color: transparent; - } - .p-button.p-button-info.p-button-text:not(:disabled):hover, .p-button-group.p-button-info > .p-button.p-button-text:not(:disabled):hover, .p-splitbutton.p-button-info > .p-button.p-button-text:not(:disabled):hover { - background: rgba(14, 165, 233, 0.04); - border-color: transparent; - color: #0ea5e9; - } - .p-button.p-button-info.p-button-text:not(:disabled):active, .p-button-group.p-button-info > .p-button.p-button-text:not(:disabled):active, .p-splitbutton.p-button-info > .p-button.p-button-text:not(:disabled):active { - background: rgba(14, 165, 233, 0.16); - border-color: transparent; - color: #0ea5e9; - } - - .p-button.p-button-success, .p-button-group.p-button-success > .p-button, .p-splitbutton.p-button-success > .p-button { - color: #ffffff; - background: #22c55e; - border: 1px solid #22c55e; - } - .p-button.p-button-success:not(:disabled):hover, .p-button-group.p-button-success > .p-button:not(:disabled):hover, .p-splitbutton.p-button-success > .p-button:not(:disabled):hover { - background: #16a34a; - color: #ffffff; - border-color: #16a34a; - } - .p-button.p-button-success:not(:disabled):focus, .p-button-group.p-button-success > .p-button:not(:disabled):focus, .p-splitbutton.p-button-success > .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-button.p-button-success:not(:disabled):active, .p-button-group.p-button-success > .p-button:not(:disabled):active, .p-splitbutton.p-button-success > .p-button:not(:disabled):active { - background: #15803d; - color: #ffffff; - border-color: #15803d; - } - .p-button.p-button-success.p-button-outlined, .p-button-group.p-button-success > .p-button.p-button-outlined, .p-splitbutton.p-button-success > .p-button.p-button-outlined { - background-color: transparent; - color: #22c55e; - border: 1px solid; - } - .p-button.p-button-success.p-button-outlined:not(:disabled):hover, .p-button-group.p-button-success > .p-button.p-button-outlined:not(:disabled):hover, .p-splitbutton.p-button-success > .p-button.p-button-outlined:not(:disabled):hover { - background: rgba(34, 197, 94, 0.04); - color: #22c55e; - border: 1px solid; - } - .p-button.p-button-success.p-button-outlined:not(:disabled):active, .p-button-group.p-button-success > .p-button.p-button-outlined:not(:disabled):active, .p-splitbutton.p-button-success > .p-button.p-button-outlined:not(:disabled):active { - background: rgba(34, 197, 94, 0.16); - color: #22c55e; - border: 1px solid; - } - .p-button.p-button-success.p-button-text, .p-button-group.p-button-success > .p-button.p-button-text, .p-splitbutton.p-button-success > .p-button.p-button-text { - background-color: transparent; - color: #22c55e; - border-color: transparent; - } - .p-button.p-button-success.p-button-text:not(:disabled):hover, .p-button-group.p-button-success > .p-button.p-button-text:not(:disabled):hover, .p-splitbutton.p-button-success > .p-button.p-button-text:not(:disabled):hover { - background: rgba(34, 197, 94, 0.04); - border-color: transparent; - color: #22c55e; - } - .p-button.p-button-success.p-button-text:not(:disabled):active, .p-button-group.p-button-success > .p-button.p-button-text:not(:disabled):active, .p-splitbutton.p-button-success > .p-button.p-button-text:not(:disabled):active { - background: rgba(34, 197, 94, 0.16); - border-color: transparent; - color: #22c55e; - } - - .p-button.p-button-warning, .p-button-group.p-button-warning > .p-button, .p-splitbutton.p-button-warning > .p-button { - color: #ffffff; - background: #f97316; - border: 1px solid #f97316; - } - .p-button.p-button-warning:not(:disabled):hover, .p-button-group.p-button-warning > .p-button:not(:disabled):hover, .p-splitbutton.p-button-warning > .p-button:not(:disabled):hover { - background: #ea580c; - color: #ffffff; - border-color: #ea580c; - } - .p-button.p-button-warning:not(:disabled):focus, .p-button-group.p-button-warning > .p-button:not(:disabled):focus, .p-splitbutton.p-button-warning > .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-button.p-button-warning:not(:disabled):active, .p-button-group.p-button-warning > .p-button:not(:disabled):active, .p-splitbutton.p-button-warning > .p-button:not(:disabled):active { - background: #c2410c; - color: #ffffff; - border-color: #c2410c; - } - .p-button.p-button-warning.p-button-outlined, .p-button-group.p-button-warning > .p-button.p-button-outlined, .p-splitbutton.p-button-warning > .p-button.p-button-outlined { - background-color: transparent; - color: #f97316; - border: 1px solid; - } - .p-button.p-button-warning.p-button-outlined:not(:disabled):hover, .p-button-group.p-button-warning > .p-button.p-button-outlined:not(:disabled):hover, .p-splitbutton.p-button-warning > .p-button.p-button-outlined:not(:disabled):hover { - background: rgba(249, 115, 22, 0.04); - color: #f97316; - border: 1px solid; - } - .p-button.p-button-warning.p-button-outlined:not(:disabled):active, .p-button-group.p-button-warning > .p-button.p-button-outlined:not(:disabled):active, .p-splitbutton.p-button-warning > .p-button.p-button-outlined:not(:disabled):active { - background: rgba(249, 115, 22, 0.16); - color: #f97316; - border: 1px solid; - } - .p-button.p-button-warning.p-button-text, .p-button-group.p-button-warning > .p-button.p-button-text, .p-splitbutton.p-button-warning > .p-button.p-button-text { - background-color: transparent; - color: #f97316; - border-color: transparent; - } - .p-button.p-button-warning.p-button-text:not(:disabled):hover, .p-button-group.p-button-warning > .p-button.p-button-text:not(:disabled):hover, .p-splitbutton.p-button-warning > .p-button.p-button-text:not(:disabled):hover { - background: rgba(249, 115, 22, 0.04); - border-color: transparent; - color: #f97316; - } - .p-button.p-button-warning.p-button-text:not(:disabled):active, .p-button-group.p-button-warning > .p-button.p-button-text:not(:disabled):active, .p-splitbutton.p-button-warning > .p-button.p-button-text:not(:disabled):active { - background: rgba(249, 115, 22, 0.16); - border-color: transparent; - color: #f97316; - } - - .p-button.p-button-help, .p-button-group.p-button-help > .p-button, .p-splitbutton.p-button-help > .p-button { - color: #ffffff; - background: #a855f7; - border: 1px solid #a855f7; - } - .p-button.p-button-help:not(:disabled):hover, .p-button-group.p-button-help > .p-button:not(:disabled):hover, .p-splitbutton.p-button-help > .p-button:not(:disabled):hover { - background: #9333ea; - color: #ffffff; - border-color: #9333ea; - } - .p-button.p-button-help:not(:disabled):focus, .p-button-group.p-button-help > .p-button:not(:disabled):focus, .p-splitbutton.p-button-help > .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-button.p-button-help:not(:disabled):active, .p-button-group.p-button-help > .p-button:not(:disabled):active, .p-splitbutton.p-button-help > .p-button:not(:disabled):active { - background: #7e22ce; - color: #ffffff; - border-color: #7e22ce; - } - .p-button.p-button-help.p-button-outlined, .p-button-group.p-button-help > .p-button.p-button-outlined, .p-splitbutton.p-button-help > .p-button.p-button-outlined { - background-color: transparent; - color: #a855f7; - border: 1px solid; - } - .p-button.p-button-help.p-button-outlined:not(:disabled):hover, .p-button-group.p-button-help > .p-button.p-button-outlined:not(:disabled):hover, .p-splitbutton.p-button-help > .p-button.p-button-outlined:not(:disabled):hover { - background: rgba(168, 85, 247, 0.04); - color: #a855f7; - border: 1px solid; - } - .p-button.p-button-help.p-button-outlined:not(:disabled):active, .p-button-group.p-button-help > .p-button.p-button-outlined:not(:disabled):active, .p-splitbutton.p-button-help > .p-button.p-button-outlined:not(:disabled):active { - background: rgba(168, 85, 247, 0.16); - color: #a855f7; - border: 1px solid; - } - .p-button.p-button-help.p-button-text, .p-button-group.p-button-help > .p-button.p-button-text, .p-splitbutton.p-button-help > .p-button.p-button-text { - background-color: transparent; - color: #a855f7; - border-color: transparent; - } - .p-button.p-button-help.p-button-text:not(:disabled):hover, .p-button-group.p-button-help > .p-button.p-button-text:not(:disabled):hover, .p-splitbutton.p-button-help > .p-button.p-button-text:not(:disabled):hover { - background: rgba(168, 85, 247, 0.04); - border-color: transparent; - color: #a855f7; - } - .p-button.p-button-help.p-button-text:not(:disabled):active, .p-button-group.p-button-help > .p-button.p-button-text:not(:disabled):active, .p-splitbutton.p-button-help > .p-button.p-button-text:not(:disabled):active { - background: rgba(168, 85, 247, 0.16); - border-color: transparent; - color: #a855f7; - } - - .p-button.p-button-danger, .p-button-group.p-button-danger > .p-button, .p-splitbutton.p-button-danger > .p-button { - color: #ffffff; - background: #ef4444; - border: 1px solid #ef4444; - } - .p-button.p-button-danger:not(:disabled):hover, .p-button-group.p-button-danger > .p-button:not(:disabled):hover, .p-splitbutton.p-button-danger > .p-button:not(:disabled):hover { - background: #dc2626; - color: #ffffff; - border-color: #dc2626; - } - .p-button.p-button-danger:not(:disabled):focus, .p-button-group.p-button-danger > .p-button:not(:disabled):focus, .p-splitbutton.p-button-danger > .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-button.p-button-danger:not(:disabled):active, .p-button-group.p-button-danger > .p-button:not(:disabled):active, .p-splitbutton.p-button-danger > .p-button:not(:disabled):active { - background: #b91c1c; - color: #ffffff; - border-color: #b91c1c; - } - .p-button.p-button-danger.p-button-outlined, .p-button-group.p-button-danger > .p-button.p-button-outlined, .p-splitbutton.p-button-danger > .p-button.p-button-outlined { - background-color: transparent; - color: #ef4444; - border: 1px solid; - } - .p-button.p-button-danger.p-button-outlined:not(:disabled):hover, .p-button-group.p-button-danger > .p-button.p-button-outlined:not(:disabled):hover, .p-splitbutton.p-button-danger > .p-button.p-button-outlined:not(:disabled):hover { - background: rgba(239, 68, 68, 0.04); - color: #ef4444; - border: 1px solid; - } - .p-button.p-button-danger.p-button-outlined:not(:disabled):active, .p-button-group.p-button-danger > .p-button.p-button-outlined:not(:disabled):active, .p-splitbutton.p-button-danger > .p-button.p-button-outlined:not(:disabled):active { - background: rgba(239, 68, 68, 0.16); - color: #ef4444; - border: 1px solid; - } - .p-button.p-button-danger.p-button-text, .p-button-group.p-button-danger > .p-button.p-button-text, .p-splitbutton.p-button-danger > .p-button.p-button-text { - background-color: transparent; - color: #ef4444; - border-color: transparent; - } - .p-button.p-button-danger.p-button-text:not(:disabled):hover, .p-button-group.p-button-danger > .p-button.p-button-text:not(:disabled):hover, .p-splitbutton.p-button-danger > .p-button.p-button-text:not(:disabled):hover { - background: rgba(239, 68, 68, 0.04); - border-color: transparent; - color: #ef4444; - } - .p-button.p-button-danger.p-button-text:not(:disabled):active, .p-button-group.p-button-danger > .p-button.p-button-text:not(:disabled):active, .p-splitbutton.p-button-danger > .p-button.p-button-text:not(:disabled):active { - background: rgba(239, 68, 68, 0.16); - border-color: transparent; - color: #ef4444; - } - - .p-button.p-button-contrast, .p-button-group.p-button-contrast > .p-button, .p-splitbutton.p-button-contrast > .p-button { - color: #ffffff; - background: #020617; - border: 1px solid #020617; - } - .p-button.p-button-contrast:not(:disabled):hover, .p-button-group.p-button-contrast > .p-button:not(:disabled):hover, .p-splitbutton.p-button-contrast > .p-button:not(:disabled):hover { - background: #1e293b; - color: #ffffff; - border-color: #1e293b; - } - .p-button.p-button-contrast:not(:disabled):focus, .p-button-group.p-button-contrast > .p-button:not(:disabled):focus, .p-splitbutton.p-button-contrast > .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-button.p-button-contrast:not(:disabled):active, .p-button-group.p-button-contrast > .p-button:not(:disabled):active, .p-splitbutton.p-button-contrast > .p-button:not(:disabled):active { - background: #334155; - color: #ffffff; - border-color: #334155; - } - .p-button.p-button-contrast.p-button-outlined, .p-button-group.p-button-contrast > .p-button.p-button-outlined, .p-splitbutton.p-button-contrast > .p-button.p-button-outlined { - background-color: transparent; - color: #020617; - border: 1px solid; - } - .p-button.p-button-contrast.p-button-outlined:not(:disabled):hover, .p-button-group.p-button-contrast > .p-button.p-button-outlined:not(:disabled):hover, .p-splitbutton.p-button-contrast > .p-button.p-button-outlined:not(:disabled):hover { - background: rgba(2, 6, 23, 0.04); - color: #020617; - border: 1px solid; - } - .p-button.p-button-contrast.p-button-outlined:not(:disabled):active, .p-button-group.p-button-contrast > .p-button.p-button-outlined:not(:disabled):active, .p-splitbutton.p-button-contrast > .p-button.p-button-outlined:not(:disabled):active { - background: rgba(2, 6, 23, 0.16); - color: #020617; - border: 1px solid; - } - .p-button.p-button-contrast.p-button-text, .p-button-group.p-button-contrast > .p-button.p-button-text, .p-splitbutton.p-button-contrast > .p-button.p-button-text { - background-color: transparent; - color: #020617; - border-color: transparent; - } - .p-button.p-button-contrast.p-button-text:not(:disabled):hover, .p-button-group.p-button-contrast > .p-button.p-button-text:not(:disabled):hover, .p-splitbutton.p-button-contrast > .p-button.p-button-text:not(:disabled):hover { - background: rgba(2, 6, 23, 0.04); - border-color: transparent; - color: #020617; - } - .p-button.p-button-contrast.p-button-text:not(:disabled):active, .p-button-group.p-button-contrast > .p-button.p-button-text:not(:disabled):active, .p-splitbutton.p-button-contrast > .p-button.p-button-text:not(:disabled):active { - background: rgba(2, 6, 23, 0.16); - border-color: transparent; - color: #020617; - } - - .p-button.p-button-link { - color: #7C3AED; - background: transparent; - border: transparent; - } - .p-button.p-button-link:not(:disabled):hover { - background: transparent; - color: #7C3AED; - border-color: transparent; - } - .p-button.p-button-link:not(:disabled):hover .p-button-label { - text-decoration: underline; - } - .p-button.p-button-link:not(:disabled):focus { - background: transparent; - box-shadow: none; - border-color: transparent; - } - .p-button.p-button-link:not(:disabled):active { - background: transparent; - color: #7C3AED; - border-color: transparent; - } - - .p-speeddial { - position: absolute; - display: flex; - } - - .p-speeddial-button { - z-index: 1; - } - - .p-speeddial-list { - margin: 0; - padding: 0; - list-style: none; - display: flex; - align-items: center; - justify-content: center; - transition: top 0s linear 0.2s; - pointer-events: none; - z-index: 2; - } - - .p-speeddial-item { - transform: scale(0); - opacity: 0; - transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, opacity 0.8s; - will-change: transform; - } - - .p-speeddial-action { - display: flex; - align-items: center; - justify-content: center; - border-radius: 50%; - position: relative; - overflow: hidden; - } - - .p-speeddial-circle .p-speeddial-item, -.p-speeddial-semi-circle .p-speeddial-item, -.p-speeddial-quarter-circle .p-speeddial-item { - position: absolute; - } - - .p-speeddial-rotate { - transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; - will-change: transform; - } - - .p-speeddial-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - opacity: 0; - transition: opacity 250ms cubic-bezier(0.25, 0.8, 0.25, 1); - } - - .p-speeddial-mask-visible { - pointer-events: none; - opacity: 1; - transition: opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1); - } - - .p-speeddial-opened .p-speeddial-list { - pointer-events: auto; - } - - .p-speeddial-opened .p-speeddial-item { - transform: scale(1); - opacity: 1; - } - - .p-speeddial-opened .p-speeddial-rotate { - transform: rotate(45deg); - } - - .p-speeddial-button.p-button.p-button-icon-only { - width: 2.5rem; - height: 2.5rem; - } - .p-speeddial-button.p-button.p-button-icon-only .p-button-icon { - font-size: 1rem; - } - .p-speeddial-button.p-button.p-button-icon-only .p-icon { - width: 1rem; - height: 1rem; - } - - .p-speeddial-list { - outline: 0 none; - } - - .p-speeddial-item.p-focus > .p-speeddial-action { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-speeddial-action { - width: 2.5rem; - height: 2.5rem; - background: #f1f5f9; - color: #475569; - outline-color: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-speeddial-action:hover { - background: #e2e8f0; - color: #334155; - } - - .p-speeddial-direction-up .p-speeddial-item { - margin: 0.25rem 0; - } - .p-speeddial-direction-up .p-speeddial-item:first-child { - margin-bottom: 0.5rem; - } - - .p-speeddial-direction-down .p-speeddial-item { - margin: 0.25rem 0; - } - .p-speeddial-direction-down .p-speeddial-item:first-child { - margin-top: 0.5rem; - } - - .p-speeddial-direction-left .p-speeddial-item { - margin: 0 0.25rem; - } - .p-speeddial-direction-left .p-speeddial-item:first-child { - margin-right: 0.5rem; - } - - .p-speeddial-direction-right .p-speeddial-item { - margin: 0 0.25rem; - } - .p-speeddial-direction-right .p-speeddial-item:first-child { - margin-left: 0.5rem; - } - - .p-speeddial-circle .p-speeddial-item, -.p-speeddial-semi-circle .p-speeddial-item, -.p-speeddial-quarter-circle .p-speeddial-item { - margin: 0; - } - .p-speeddial-circle .p-speeddial-item:first-child, .p-speeddial-circle .p-speeddial-item:last-child, -.p-speeddial-semi-circle .p-speeddial-item:first-child, -.p-speeddial-semi-circle .p-speeddial-item:last-child, -.p-speeddial-quarter-circle .p-speeddial-item:first-child, -.p-speeddial-quarter-circle .p-speeddial-item:last-child { - margin: 0; - } - - .p-speeddial-mask { - background-color: rgba(0, 0, 0, 0.4); - border-radius: 6px; - } - - .p-splitbutton { - display: inline-flex; - position: relative; - } - - .p-splitbutton .p-splitbutton-defaultbutton, -.p-splitbutton.p-button-rounded > .p-splitbutton-defaultbutton.p-button, -.p-splitbutton.p-button-outlined > .p-splitbutton-defaultbutton.p-button, -.p-splitbutton.p-button-outlined > .p-splitbutton-defaultbutton.p-button-outlined.p-button:hover { - flex: 1 1 auto; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - border-right: 0 none; - } - - .p-splitbutton-menubutton, -.p-splitbutton.p-button-rounded > .p-splitbutton-menubutton.p-button, -.p-splitbutton.p-button-outlined > .p-splitbutton-menubutton.p-button { - display: flex; - align-items: center; - justify-content: center; - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - .p-splitbutton .p-menu { - min-width: 100%; - } - - .p-fluid .p-splitbutton { - display: flex; - } - - .p-splitbutton { - border-radius: 6px; - } - .p-splitbutton.p-button-rounded { - border-radius: 2rem; - } - .p-splitbutton.p-button-rounded > .p-button { - border-radius: 2rem; - } - .p-splitbutton.p-button-raised { - box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); - } - - .p-carousel { - display: flex; - flex-direction: column; - } - - .p-carousel-content { - display: flex; - flex-direction: column; - overflow: auto; - } - - .p-carousel-prev, -.p-carousel-next { - align-self: center; - flex-grow: 0; - flex-shrink: 0; - display: flex; - justify-content: center; - align-items: center; - overflow: hidden; - position: relative; - } - - .p-carousel-container { - display: flex; - flex-direction: row; - } - - .p-carousel-items-content { - overflow: hidden; - width: 100%; - } - - .p-carousel-items-container { - display: flex; - flex-direction: row; - } - - .p-carousel-indicators { - display: flex; - flex-direction: row; - justify-content: center; - flex-wrap: wrap; - } - - .p-carousel-indicator > button { - display: flex; - align-items: center; - justify-content: center; - } - - /* Vertical */ - .p-carousel-vertical .p-carousel-container { - flex-direction: column; - } - - .p-carousel-vertical .p-carousel-items-container { - flex-direction: column; - height: 100%; - } - - /* Keyboard Support */ - .p-items-hidden .p-carousel-item { - visibility: hidden; - } - - .p-items-hidden .p-carousel-item.p-carousel-item-active { - visibility: visible; - } - - .p-carousel .p-carousel-content .p-carousel-prev, -.p-carousel .p-carousel-content .p-carousel-next { - width: 1.75rem; - height: 1.75rem; - color: #64748b; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - margin: 0.5rem; - } - .p-carousel .p-carousel-content .p-carousel-prev:enabled:hover, -.p-carousel .p-carousel-content .p-carousel-next:enabled:hover { - color: #475569; - border-color: transparent; - background: #f1f5f9; - } - .p-carousel .p-carousel-content .p-carousel-prev:focus-visible, -.p-carousel .p-carousel-content .p-carousel-next:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-carousel .p-carousel-indicators { - padding: 1rem; - } - .p-carousel .p-carousel-indicators .p-carousel-indicator { - margin-right: 0.5rem; - margin-bottom: 0.5rem; - } - .p-carousel .p-carousel-indicators .p-carousel-indicator button { - background-color: #e2e8f0; - width: 2rem; - height: 0.5rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - } - .p-carousel .p-carousel-indicators .p-carousel-indicator button:hover { - background: #cbd5e1; - } - .p-carousel .p-carousel-indicators .p-carousel-indicator.p-highlight button { - background: #F5F3FF; - color: #6D28D9; - } - - .p-datatable { - position: relative; - } - - .p-datatable-table { - border-spacing: 0px; - width: 100%; - } - - .p-datatable .p-sortable-column { - cursor: pointer; - user-select: none; - } - - .p-datatable .p-sortable-column .p-column-title, -.p-datatable .p-sortable-column .p-sortable-column-icon, -.p-datatable .p-sortable-column .p-sortable-column-badge { - vertical-align: middle; - } - - .p-datatable .p-sortable-column .p-sortable-column-badge { - display: inline-flex; - align-items: center; - justify-content: center; - } - - .p-datatable-hoverable-rows .p-selectable-row { - cursor: pointer; - } - - /* Scrollable */ - .p-datatable-scrollable > .p-datatable-wrapper { - position: relative; - } - - .p-datatable-scrollable-table > .p-datatable-thead { - top: 0; - z-index: 1; - } - - .p-datatable-scrollable-table > .p-datatable-frozen-tbody { - position: sticky; - z-index: 1; - } - - .p-datatable-scrollable-table > .p-datatable-tfoot { - bottom: 0; - z-index: 1; - } - - .p-datatable-scrollable .p-frozen-column { - position: sticky; - background: inherit; - } - - .p-datatable-scrollable th.p-frozen-column { - z-index: 1; - } - - .p-datatable-flex-scrollable { - display: flex; - flex-direction: column; - height: 100%; - } - - .p-datatable-flex-scrollable > .p-datatable-wrapper { - display: flex; - flex-direction: column; - flex: 1; - height: 100%; - } - - .p-datatable-scrollable-table > .p-datatable-tbody > .p-rowgroup-header { - position: sticky; - z-index: 1; - } - - /* Resizable */ - .p-datatable-resizable-table > .p-datatable-thead > tr > th, -.p-datatable-resizable-table > .p-datatable-tfoot > tr > td, -.p-datatable-resizable-table > .p-datatable-tbody > tr > td { - overflow: hidden; - white-space: nowrap; - } - - .p-datatable-resizable-table > .p-datatable-thead > tr > th.p-resizable-column:not(.p-frozen-column) { - background-clip: padding-box; - position: relative; - } - - .p-datatable-resizable-table-fit > .p-datatable-thead > tr > th.p-resizable-column:last-child .p-column-resizer { - display: none; - } - - .p-datatable .p-column-resizer { - display: block; - position: absolute; - top: 0; - right: 0; - margin: 0; - width: 0.5rem; - height: 100%; - padding: 0px; - cursor: col-resize; - border: 1px solid transparent; - } - - .p-datatable .p-column-header-content { - display: flex; - align-items: center; - } - - .p-datatable .p-column-resizer-helper { - width: 1px; - position: absolute; - z-index: 10; - display: none; - } - - .p-datatable .p-row-editor-init, -.p-datatable .p-row-editor-save, -.p-datatable .p-row-editor-cancel { - display: inline-flex; - align-items: center; - justify-content: center; - overflow: hidden; - position: relative; - } - - /* Expand */ - .p-datatable .p-row-toggler { - display: inline-flex; - align-items: center; - justify-content: center; - overflow: hidden; - position: relative; - } - - /* Reorder */ - .p-datatable-reorder-indicator-up, -.p-datatable-reorder-indicator-down { - position: absolute; - display: none; - } - - .p-reorderable-column, -.p-datatable-reorderablerow-handle { - cursor: move; - } - - /* Loader */ - .p-datatable .p-datatable-loading-overlay { - position: absolute; - display: flex; - align-items: center; - justify-content: center; - z-index: 2; - } - - /* Filter */ - .p-column-filter-row { - display: flex; - align-items: center; - width: 100%; - } - - .p-column-filter-menu { - display: inline-flex; - margin-left: auto; - } - - .p-column-filter-row .p-column-filter-element { - flex: 1 1 auto; - width: 1%; - } - - .p-column-filter-menu-button, -.p-column-filter-clear-button { - display: inline-flex; - justify-content: center; - align-items: center; - cursor: pointer; - text-decoration: none; - overflow: hidden; - position: relative; - } - - .p-column-filter-row-items { - margin: 0; - padding: 0; - list-style: none; - } - - .p-column-filter-row-item { - cursor: pointer; - } - - .p-column-filter-add-button, -.p-column-filter-remove-button { - justify-content: center; - } - - .p-column-filter-add-button .p-button-label, -.p-column-filter-remove-button .p-button-label { - flex-grow: 0; - } - - .p-column-filter-buttonbar { - display: flex; - align-items: center; - justify-content: space-between; - } - - .p-column-filter-buttonbar .p-button:not(.p-button-icon-only) { - width: auto; - } - - /* Responsive */ - .p-datatable .p-datatable-tbody > tr > td > .p-column-title { - display: none; - } - - /* VirtualScroller */ - .p-datatable-virtualscroller-spacer { - display: flex; - } - - .p-datatable .p-virtualscroller .p-virtualscroller-loading { - transform: none !important; - min-height: 0; - position: sticky; - top: 0; - left: 0; - } - - .p-datatable .p-paginator-top { - border-width: 0 0 1px 0; - border-radius: 0; - } - .p-datatable .p-paginator-bottom { - border-width: 0 0 1px 0; - border-radius: 0; - } - .p-datatable .p-datatable-header { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-width: 0 0 1px 0; - padding: 0.75rem 1rem; - font-weight: 600; - } - .p-datatable .p-datatable-footer { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-width: 0 0 1px 0; - padding: 0.75rem 1rem; - font-weight: 600; - } - .p-datatable .p-datatable-thead > tr > th { - text-align: left; - padding: 0.75rem 1rem; - border: 1px solid #e2e8f0; - border-width: 0 0 1px 0; - font-weight: 600; - color: #334155; - background: #ffffff; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-datatable .p-datatable-tfoot > tr > td { - text-align: left; - padding: 0.75rem 1rem; - border: 1px solid #e2e8f0; - border-width: 0 0 1px 0; - font-weight: 600; - color: #334155; - background: #ffffff; - } - .p-datatable .p-sortable-column .p-sortable-column-icon { - color: #64748b; - margin-left: 0.5rem; - } - .p-datatable .p-sortable-column .p-sortable-column-badge { - border-radius: 50%; - height: 1rem; - min-width: 1rem; - line-height: 1rem; - color: #6D28D9; - background: #F5F3FF; - margin-left: 0.5rem; - } - .p-datatable .p-sortable-column:not(.p-highlight):hover { - background: #f1f5f9; - color: #1e293b; - } - .p-datatable .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon { - color: #475569; - } - .p-datatable .p-sortable-column.p-highlight { - background: #F5F3FF; - color: #6D28D9; - } - .p-datatable .p-sortable-column.p-highlight .p-sortable-column-icon { - color: #6D28D9; - } - .p-datatable .p-sortable-column.p-highlight:hover { - background: #F5F3FF; - color: #6D28D9; - } - .p-datatable .p-sortable-column.p-highlight:hover .p-sortable-column-icon { - color: #6D28D9; - } - .p-datatable .p-sortable-column:focus-visible { - box-shadow: 0 none; - outline: 0 none; - } - .p-datatable .p-datatable-tbody > tr { - background: #ffffff; - color: #334155; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-datatable .p-datatable-tbody > tr > td { - text-align: left; - border: 1px solid #e2e8f0; - border-width: 0 0 1px 0; - padding: 0.75rem 1rem; - } - .p-datatable .p-datatable-tbody > tr > td .p-row-toggler, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-init, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-cancel { - width: 1.75rem; - height: 1.75rem; - color: #64748b; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-datatable .p-datatable-tbody > tr > td .p-row-toggler:enabled:hover, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-init:enabled:hover, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save:enabled:hover, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-cancel:enabled:hover { - color: #475569; - border-color: transparent; - background: #f1f5f9; - } - .p-datatable .p-datatable-tbody > tr > td .p-row-toggler:focus-visible, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-init:focus-visible, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save:focus-visible, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-cancel:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-datatable .p-datatable-tbody > tr > td .p-row-editor-save { - margin-right: 0.5rem; - } - .p-datatable .p-datatable-tbody > tr > td > .p-column-title { - font-weight: 600; - } - .p-datatable .p-datatable-tbody > tr:focus-visible { - outline: 0.15rem solid var(--p-focus-ring-color); - outline-offset: -0.15rem; - } - .p-datatable .p-datatable-tbody > tr.p-highlight { - background: #F5F3FF; - color: #6D28D9; - } - .p-datatable .p-datatable-tbody > tr.p-highlight-contextmenu { - outline: 0.15rem solid var(--p-focus-ring-color); - outline-offset: -0.15rem; - } - .p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-top > td { - box-shadow: inset 0 2px 0 0 #F5F3FF; - } - .p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-bottom > td { - box-shadow: inset 0 -2px 0 0 #F5F3FF; - } - .p-datatable.p-datatable-hoverable-rows .p-datatable-tbody > tr:not(.p-highlight):hover { - background: #f1f5f9; - color: #1e293b; - } - .p-datatable .p-column-resizer-helper { - background: #8B5CF6; - } - .p-datatable.p-datatable-scrollable > .p-datatable-wrapper > .p-datatable-table > .p-datatable-thead, -.p-datatable.p-datatable-scrollable > .p-datatable-wrapper > .p-datatable-table > .p-datatable-tfoot, .p-datatable.p-datatable-scrollable > .p-datatable-wrapper > .p-virtualscroller > .p-datatable-table > .p-datatable-thead, -.p-datatable.p-datatable-scrollable > .p-datatable-wrapper > .p-virtualscroller > .p-datatable-table > .p-datatable-tfoot { - background-color: #ffffff; - } - .p-datatable .p-datatable-loading-icon { - font-size: 2rem; - } - .p-datatable .p-datatable-loading-icon.p-icon { - width: 2rem; - height: 2rem; - } - .p-datatable.p-datatable-gridlines .p-datatable-header { - border-width: 1px 1px 0 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-footer { - border-width: 0 1px 1px 1px; - } - .p-datatable.p-datatable-gridlines .p-paginator-top { - border-width: 0 1px 0 1px; - } - .p-datatable.p-datatable-gridlines .p-paginator-bottom { - border-width: 0 1px 1px 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-thead > tr > th { - border-width: 1px 0 1px 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-thead > tr > th:last-child { - border-width: 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-tbody > tr > td { - border-width: 1px 0 0 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-tbody > tr > td:last-child { - border-width: 1px 1px 0 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-tbody > tr:last-child > td { - border-width: 1px 0 1px 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-tbody > tr:last-child > td:last-child { - border-width: 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-tfoot > tr > td { - border-width: 1px 0 1px 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-tfoot > tr > td:last-child { - border-width: 1px 1px 1px 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-thead + .p-datatable-tfoot > tr > td { - border-width: 0 0 1px 1px; - } - .p-datatable.p-datatable-gridlines .p-datatable-thead + .p-datatable-tfoot > tr > td:last-child { - border-width: 0 1px 1px 1px; - } - .p-datatable.p-datatable-gridlines:has(.p-datatable-thead):has(.p-datatable-tbody) .p-datatable-tbody > tr > td { - border-width: 0 0 1px 1px; - } - .p-datatable.p-datatable-gridlines:has(.p-datatable-thead):has(.p-datatable-tbody) .p-datatable-tbody > tr > td:last-child { - border-width: 0 1px 1px 1px; - } - .p-datatable.p-datatable-gridlines:has(.p-datatable-tbody):has(.p-datatable-tfoot) .p-datatable-tbody > tr:last-child > td { - border-width: 0 0 0 1px; - } - .p-datatable.p-datatable-gridlines:has(.p-datatable-tbody):has(.p-datatable-tfoot) .p-datatable-tbody > tr:last-child > td:last-child { - border-width: 0 1px 0 1px; - } - .p-datatable.p-datatable-striped .p-datatable-tbody > tr.p-row-odd { - background: #f8fafc; - } - .p-datatable.p-datatable-striped .p-datatable-tbody > tr.p-row-odd.p-highlight { - background: #F5F3FF; - color: #6D28D9; - } - .p-datatable.p-datatable-striped .p-datatable-tbody > tr.p-row-odd.p-highlight .p-row-toggler { - color: #6D28D9; - } - .p-datatable.p-datatable-striped .p-datatable-tbody > tr.p-row-odd.p-highlight .p-row-toggler:hover { - color: #6D28D9; - } - .p-datatable.p-datatable-sm .p-datatable-header { - padding: 0.375rem 0.5rem; - } - .p-datatable.p-datatable-sm .p-datatable-thead > tr > th { - padding: 0.375rem 0.5rem; - } - .p-datatable.p-datatable-sm .p-datatable-tbody > tr > td { - padding: 0.375rem 0.5rem; - } - .p-datatable.p-datatable-sm .p-datatable-tfoot > tr > td { - padding: 0.375rem 0.5rem; - } - .p-datatable.p-datatable-sm .p-datatable-footer { - padding: 0.375rem 0.5rem; - } - .p-datatable.p-datatable-lg .p-datatable-header { - padding: 0.9375rem 1.25rem; - } - .p-datatable.p-datatable-lg .p-datatable-thead > tr > th { - padding: 0.9375rem 1.25rem; - } - .p-datatable.p-datatable-lg .p-datatable-tbody > tr > td { - padding: 0.9375rem 1.25rem; - } - .p-datatable.p-datatable-lg .p-datatable-tfoot > tr > td { - padding: 0.9375rem 1.25rem; - } - .p-datatable.p-datatable-lg .p-datatable-footer { - padding: 0.9375rem 1.25rem; - } - - .p-dataview .p-paginator-top { - border-width: 0 0 1px 0; - border-radius: 0; - } - .p-dataview .p-paginator-bottom { - border-width: 0 0 1px 0; - border-radius: 0; - } - .p-dataview .p-dataview-header { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-width: 0 0 1px 0; - padding: 0.75rem 1rem; - font-weight: 600; - } - .p-dataview .p-dataview-content { - background: #ffffff; - color: #334155; - border: 0 none; - padding: 0; - } - .p-dataview .p-dataview-footer { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-width: 0 0 1px 0; - padding: 0.75rem 1rem; - font-weight: 600; - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; - } - - .p-column-filter-row .p-column-filter-menu-button, -.p-column-filter-row .p-column-filter-clear-button { - margin-left: 0.5rem; - } - - .p-column-filter-menu-button { - width: 1.75rem; - height: 1.75rem; - color: #64748b; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-column-filter-menu-button:hover { - color: #475569; - border-color: transparent; - background: #f1f5f9; - } - .p-column-filter-menu-button.p-column-filter-menu-button-open, .p-column-filter-menu-button.p-column-filter-menu-button-open:hover { - background: #f1f5f9; - color: #475569; - } - .p-column-filter-menu-button.p-column-filter-menu-button-active, .p-column-filter-menu-button.p-column-filter-menu-button-active:hover { - background: #F5F3FF; - color: #6D28D9; - } - .p-column-filter-menu-button:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-column-filter-clear-button { - width: 1.75rem; - height: 1.75rem; - color: #64748b; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-column-filter-clear-button:hover { - color: #475569; - border-color: transparent; - background: #f1f5f9; - } - .p-column-filter-clear-button:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-column-filter-overlay { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-radius: 6px; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - min-width: 12.5rem; - } - .p-column-filter-overlay .p-column-filter-row-items { - padding: 0.25rem 0.25rem; - } - .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item { - margin: 2px 0; - padding: 0.5rem 0.75rem; - border: 0 none; - color: #334155; - background: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item:first-child { - margin-top: 0; - } - .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item:last-child { - margin-bottom: 0; - } - .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item.p-highlight { - color: #6D28D9; - background: #F5F3FF; - } - .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item:not(.p-highlight):not(.p-disabled):hover { - color: #1e293b; - background: #f1f5f9; - } - .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: 0 none; - } - .p-column-filter-overlay .p-column-filter-row-items .p-column-filter-separator { - border-top: 1px solid #e2e8f0; - margin: 2px 0; - } - - .p-column-filter-overlay-menu .p-column-filter-operator { - padding: 0.5rem 0.5rem 0 0.5rem; - border-bottom: 0 none; - color: #334155; - background: #ffffff; - margin: 0 0 0 0; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-column-filter-overlay-menu .p-column-filter-constraint { - padding: 0 1.125rem 1.125rem 1.125rem; - border-bottom: 1px solid #e2e8f0; - } - .p-column-filter-overlay-menu .p-column-filter-constraint .p-column-filter-matchmode-dropdown { - margin-bottom: 0.5rem; - } - .p-column-filter-overlay-menu .p-column-filter-constraint .p-column-filter-remove-button { - margin-top: 0.5rem; - } - .p-column-filter-overlay-menu .p-column-filter-constraint:last-child { - border-bottom: 0 none; - } - .p-column-filter-overlay-menu .p-column-filter-add-rule { - padding: 0 1.125rem 1.125rem 1.125rem; - } - .p-column-filter-overlay-menu .p-column-filter-buttonbar { - padding: 0 1.125rem 1.125rem 1.125rem; - } - - .p-orderlist { - display: flex; - } - - .p-orderlist-controls { - display: flex; - flex-direction: column; - justify-content: center; - } - - .p-orderlist-list-container { - flex: 1 1 auto; - } - - .p-orderlist-list { - list-style-type: none; - margin: 0; - padding: 0; - overflow: auto; - min-height: 12rem; - max-height: 24rem; - } - - .p-orderlist-item { - cursor: pointer; - overflow: hidden; - position: relative; - } - - .p-orderlist.p-state-disabled .p-orderlist-item, -.p-orderlist.p-state-disabled .p-button { - cursor: default; - } - - .p-orderlist.p-state-disabled .p-orderlist-list { - overflow: hidden; - } - - .p-orderlist .p-orderlist-controls { - padding: 0 1.125rem 1.125rem 1.125rem; - } - .p-orderlist .p-orderlist-controls .p-button { - margin-bottom: 0.5rem; - } - .p-orderlist .p-orderlist-list-container { - background: #ffffff; - border: 1px solid #e2e8f0; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-orderlist .p-orderlist-list-container.p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #94a3b8; - } - .p-orderlist .p-orderlist-header { - color: #334155; - padding: 1.125rem; - font-weight: 600; - } - .p-orderlist .p-orderlist-list { - color: #334155; - padding: 0.25rem 0.25rem; - outline: 0 none; - } - .p-orderlist .p-orderlist-list:not(:first-child) { - border-top: 1px solid #e2e8f0; - } - .p-orderlist .p-orderlist-list .p-orderlist-item { - padding: 0.5rem 0.75rem; - margin: 2px 0; - border: 0 none; - color: #334155; - background: transparent; - transition: transform 0.2s, background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-orderlist .p-orderlist-list .p-orderlist-item:first-child { - margin-top: 0; - } - .p-orderlist .p-orderlist-list .p-orderlist-item:last-child { - margin-bottom: 0; - } - .p-orderlist .p-orderlist-list .p-orderlist-item:not(.p-highlight):hover { - background: #f1f5f9; - color: #1e293b; - } - .p-orderlist .p-orderlist-list .p-orderlist-item:not(.p-highlight):hover.p-focus { - color: #1e293b; - background: #f1f5f9; - } - .p-orderlist .p-orderlist-list .p-orderlist-item.p-focus { - color: #1e293b; - background: #f1f5f9; - } - .p-orderlist .p-orderlist-list .p-orderlist-item.p-highlight { - color: #6D28D9; - background: #F5F3FF; - } - .p-orderlist .p-orderlist-list .p-orderlist-item.p-highlight.p-focus { - background: rgba(139, 92, 246, 0.24); - } - .p-orderlist.p-orderlist-striped .p-orderlist-list .p-orderlist-item:nth-child(even) { - background: #f8fafc; - } - .p-orderlist.p-orderlist-striped .p-orderlist-list .p-orderlist-item:nth-child(even):hover { - background: #f1f5f9; - } - - .p-organizationchart-table { - border-spacing: 0; - border-collapse: separate; - margin: 0 auto; - } - - .p-organizationchart-table > tbody > tr > td { - text-align: center; - vertical-align: top; - padding: 0 0.75rem; - } - - .p-organizationchart-node-content { - display: inline-block; - position: relative; - } - - .p-organizationchart-node-content .p-node-toggler { - position: absolute; - bottom: -0.75rem; - margin-left: -0.75rem; - z-index: 2; - left: 50%; - user-select: none; - cursor: pointer; - width: 1.5rem; - height: 1.5rem; - text-decoration: none; - } - - .p-organizationchart-node-content .p-node-toggler .p-node-toggler-icon { - position: relative; - top: 0.25rem; - } - - .p-organizationchart-line-down { - margin: 0 auto; - height: 20px; - width: 1px; - } - - .p-organizationchart-line-right { - border-radius: 0px; - } - - .p-organizationchart-line-left { - border-radius: 0; - } - - .p-organizationchart-selectable-node { - cursor: pointer; - } - - .p-organizationchart .p-organizationchart-node-content.p-organizationchart-selectable-node:not(.p-highlight):hover { - background: #f1f5f9; - color: #1e293b; - } - .p-organizationchart .p-organizationchart-node-content.p-highlight { - background: #F5F3FF; - color: #6D28D9; - } - .p-organizationchart .p-organizationchart-node-content.p-highlight .p-node-toggler i { - color: #8b74ff; - } - .p-organizationchart .p-organizationchart-line-down { - background: #e2e8f0; - } - .p-organizationchart .p-organizationchart-line-left { - border-right: 1px solid #e2e8f0; - border-color: #e2e8f0; - } - .p-organizationchart .p-organizationchart-line-top { - border-top: 1px solid #e2e8f0; - border-color: #e2e8f0; - } - .p-organizationchart .p-organizationchart-node-content { - border: 1px solid #e2e8f0; - background: #ffffff; - color: #334155; - padding: 0 1.125rem 1.125rem 1.125rem; - } - .p-organizationchart .p-organizationchart-node-content .p-node-toggler { - background: inherit; - color: inherit; - border-radius: 50%; - outline-color: transparent; - } - .p-organizationchart .p-organizationchart-node-content .p-node-toggler:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-paginator-default { - display: flex; - } - - .p-paginator { - display: flex; - align-items: center; - justify-content: center; - flex-wrap: wrap; - } - - .p-paginator-left-content { - margin-right: auto; - } - - .p-paginator-right-content { - margin-left: auto; - } - - .p-paginator-page, -.p-paginator-next, -.p-paginator-last, -.p-paginator-first, -.p-paginator-prev, -.p-paginator-current { - cursor: pointer; - display: inline-flex; - align-items: center; - justify-content: center; - line-height: 1; - user-select: none; - overflow: hidden; - position: relative; - } - - .p-paginator-element:focus { - z-index: 1; - position: relative; - } - - .p-paginator { - background: #ffffff; - color: #334155; - border: solid #e2e8f0; - border-width: 0; - padding: 0.5rem 1rem; - border-radius: 6px; - } - .p-paginator .p-paginator-first, -.p-paginator .p-paginator-prev, -.p-paginator .p-paginator-next, -.p-paginator .p-paginator-last { - background-color: transparent; - border: 0 none; - color: #64748b; - min-width: 2.5rem; - height: 2.5rem; - margin: 0.143rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 50%; - } - .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):hover, -.p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):hover, -.p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):hover, -.p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):hover { - background: #f1f5f9; - border-color: transparent; - color: #475569; - } - .p-paginator .p-paginator-first { - border-top-left-radius: 50%; - border-bottom-left-radius: 50%; - } - .p-paginator .p-paginator-last { - border-top-right-radius: 50%; - border-bottom-right-radius: 50%; - } - .p-paginator .p-dropdown { - margin-left: 0.5rem; - margin-right: 0.5rem; - height: 2.5rem; - } - .p-paginator .p-dropdown .p-dropdown-label { - padding-right: 0; - } - .p-paginator .p-paginator-page-input { - margin-left: 0.5rem; - margin-right: 0.5rem; - } - .p-paginator .p-paginator-page-input .p-inputtext { - max-width: 2.5rem; - } - .p-paginator .p-paginator-current { - background-color: transparent; - border: 0 none; - color: #64748b; - min-width: 2.5rem; - height: 2.5rem; - margin: 0.143rem; - padding: 0 0.5rem; - } - .p-paginator .p-paginator-pages .p-paginator-page { - background-color: transparent; - border: 0 none; - color: #64748b; - min-width: 2.5rem; - height: 2.5rem; - margin: 0.143rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 50%; - } - .p-paginator .p-paginator-pages .p-paginator-page.p-highlight { - background: #F5F3FF; - border-color: #F5F3FF; - color: #6D28D9; - } - .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover { - background: #f1f5f9; - border-color: transparent; - color: #475569; - } - - .p-picklist { - display: flex; - } - - .p-picklist-buttons { - display: flex; - flex-direction: column; - justify-content: center; - } - - .p-picklist-list-wrapper { - flex: 1 1 50%; - } - - .p-picklist-list { - list-style-type: none; - margin: 0; - padding: 0; - overflow: auto; - min-height: 12rem; - max-height: 24rem; - } - - .p-picklist-item { - cursor: pointer; - overflow: hidden; - position: relative; - } - - .p-picklist-item.p-picklist-flip-enter-active.p-picklist-flip-enter-to, -.p-picklist-item.p-picklist-flip-leave-active.p-picklist-flip-leave-to { - transition: none; - } - - .p-picklist .p-picklist-buttons { - padding: 0 1.125rem 1.125rem 1.125rem; - } - .p-picklist .p-picklist-buttons .p-button { - margin-bottom: 0.5rem; - } - .p-picklist .p-picklist-list-wrapper { - background: #ffffff; - border: 1px solid #e2e8f0; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-picklist .p-picklist-list-wrapper.p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #94a3b8; - } - .p-picklist .p-picklist-header { - color: #334155; - padding: 1.125rem; - font-weight: 600; - } - .p-picklist .p-picklist-list { - color: #334155; - padding: 0.25rem 0.25rem; - outline: 0 none; - } - .p-picklist .p-picklist-list:not(:first-child) { - border-top: 1px solid #e2e8f0; - } - .p-picklist .p-picklist-list .p-picklist-item { - padding: 0.5rem 0.75rem; - margin: 2px 0; - border: 0 none; - color: #334155; - background: transparent; - transition: transform 0.2s, background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-picklist .p-picklist-list .p-picklist-item:first-child { - margin-top: 0; - } - .p-picklist .p-picklist-list .p-picklist-item:last-child { - margin-bottom: 0; - } - .p-picklist .p-picklist-list .p-picklist-item:not(.p-highlight):hover { - background: #f1f5f9; - color: #1e293b; - } - .p-picklist .p-picklist-list .p-picklist-item:not(.p-highlight):hover.p-focus { - color: #1e293b; - background: #f1f5f9; - } - .p-picklist .p-picklist-list .p-picklist-item.p-focus { - color: #1e293b; - background: #f1f5f9; - } - .p-picklist .p-picklist-list .p-picklist-item.p-highlight { - color: #6D28D9; - background: #F5F3FF; - } - .p-picklist .p-picklist-list .p-picklist-item.p-highlight.p-focus { - background: rgba(139, 92, 246, 0.24); - } - .p-picklist.p-picklist-striped .p-picklist-list .p-picklist-item:nth-child(even) { - background: #f8fafc; - } - .p-picklist.p-picklist-striped .p-picklist-list .p-picklist-item:nth-child(even):hover { - background: #f1f5f9; - } - - .p-timeline { - display: flex; - flex-grow: 1; - flex-direction: column; - } - - .p-timeline-left .p-timeline-event-opposite { - text-align: right; - } - - .p-timeline-left .p-timeline-event-content { - text-align: left; - } - - .p-timeline-right .p-timeline-event { - flex-direction: row-reverse; - } - - .p-timeline-right .p-timeline-event-opposite { - text-align: left; - } - - .p-timeline-right .p-timeline-event-content { - text-align: right; - } - - .p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(even) { - flex-direction: row-reverse; - } - - .p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(odd) .p-timeline-event-opposite { - text-align: right; - } - - .p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(odd) .p-timeline-event-content { - text-align: left; - } - - .p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(even) .p-timeline-event-opposite { - text-align: left; - } - - .p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(even) .p-timeline-event-content { - text-align: right; - } - - .p-timeline-event { - display: flex; - position: relative; - min-height: 70px; - } - - .p-timeline-event:last-child { - min-height: 0; - } - - .p-timeline-event-opposite { - flex: 1; - padding: 0 1rem; - } - - .p-timeline-event-content { - flex: 1; - padding: 0 1rem; - } - - .p-timeline-event-separator { - flex: 0; - display: flex; - align-items: center; - flex-direction: column; - } - - .p-timeline-event-marker { - display: flex; - align-self: baseline; - } - - .p-timeline-event-connector { - flex-grow: 1; - } - - .p-timeline-horizontal { - flex-direction: row; - } - - .p-timeline-horizontal .p-timeline-event { - flex-direction: column; - flex: 1; - } - - .p-timeline-horizontal .p-timeline-event:last-child { - flex: 0; - } - - .p-timeline-horizontal .p-timeline-event-separator { - flex-direction: row; - } - - .p-timeline-horizontal .p-timeline-event-connector { - width: 100%; - } - - .p-timeline-bottom .p-timeline-event { - flex-direction: column-reverse; - } - - .p-timeline-horizontal.p-timeline-alternate .p-timeline-event:nth-child(even) { - flex-direction: column-reverse; - } - - .p-timeline .p-timeline-event-marker { - border: 2px solid #e2e8f0; - border-radius: 50%; - width: 1.125rem; - height: 1.125rem; - background-color: #ffffff; - } - .p-timeline .p-timeline-event-connector { - background-color: #e2e8f0; - } - .p-timeline.p-timeline-vertical .p-timeline-event-opposite, -.p-timeline.p-timeline-vertical .p-timeline-event-content { - padding: 0 1rem; - } - .p-timeline.p-timeline-vertical .p-timeline-event-connector { - width: 2px; - } - .p-timeline.p-timeline-horizontal .p-timeline-event-opposite, -.p-timeline.p-timeline-horizontal .p-timeline-event-content { - padding: 1rem 0; - } - .p-timeline.p-timeline-horizontal .p-timeline-event-connector { - height: 2px; - } - - .p-tree-container { - margin: 0; - padding: 0; - list-style-type: none; - overflow: auto; - } - - .p-treenode-children { - margin: 0; - padding: 0; - list-style-type: none; - } - - .p-tree-wrapper { - overflow: auto; - } - - .p-treenode-selectable { - cursor: pointer; - user-select: none; - } - - .p-tree-toggler { - cursor: pointer; - user-select: none; - display: inline-flex; - align-items: center; - justify-content: center; - overflow: hidden; - position: relative; - flex-shrink: 0; - } - - .p-treenode-leaf > .p-treenode-content .p-tree-toggler { - visibility: hidden; - } - - .p-treenode-content { - display: flex; - align-items: center; - } - - .p-tree-filter { - width: 100%; - } - - .p-tree-filter-container { - position: relative; - display: block; - width: 100%; - } - - .p-tree-filter-icon { - position: absolute; - top: 50%; - margin-top: -0.5rem; - } - - .p-tree-loading { - position: relative; - min-height: 4rem; - } - - .p-tree .p-tree-loading-overlay { - position: absolute; - z-index: 1; - display: flex; - align-items: center; - justify-content: center; - } - - .p-tree-flex-scrollable { - display: flex; - flex: 1; - height: 100%; - flex-direction: column; - } - - .p-tree-flex-scrollable .p-tree-wrapper { - flex: 1; - } - - .p-tree { - border: 1px solid #e2e8f0; - background: #ffffff; - color: #334155; - padding: 0 1.125rem 1.125rem 1.125rem; - border-radius: 6px; - } - .p-tree .p-tree-container .p-treenode { - padding: 0 0; - outline: 0 none; - } - .p-tree .p-tree-container .p-treenode:focus > .p-treenode-content { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: 0 none; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content { - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - padding: 0.25rem 0.5rem; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler { - margin-right: 0.5rem; - width: 1.75rem; - height: 1.75rem; - color: #64748b; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler:enabled:hover { - color: #475569; - border-color: transparent; - background: #f1f5f9; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content .p-treenode-icon { - margin-right: 0.5rem; - color: #475569; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content .p-checkbox { - margin-right: 0.5rem; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content .p-checkbox.p-indeterminate .p-checkbox-icon { - color: #334155; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight { - background: #F5F3FF; - color: #6D28D9; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-tree-toggler, -.p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-treenode-icon { - color: #6D28D9; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-tree-toggler:hover, -.p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-treenode-icon:hover { - color: #6D28D9; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content.p-treenode-selectable:not(.p-highlight):hover { - background: #f1f5f9; - color: #1e293b; - } - .p-tree .p-tree-filter-container { - margin-bottom: 0.5rem; - } - .p-tree .p-tree-filter-container .p-tree-filter { - width: 100%; - padding-right: 1.75rem; - } - .p-tree .p-tree-filter-container .p-tree-filter-icon { - right: 0.75rem; - color: #94a3b8; - } - .p-tree .p-treenode-children { - padding: 0 0 0 1rem; - } - .p-tree .p-tree-loading-icon { - font-size: 2rem; - } - .p-tree .p-tree-loading-icon.p-icon { - width: 2rem; - height: 2rem; - } - - .p-treetable { - position: relative; - } - - .p-treetable table { - border-collapse: collapse; - width: 100%; - table-layout: fixed; - } - - .p-treetable .p-sortable-column { - cursor: pointer; - user-select: none; - } - - .p-treetable-responsive-scroll > .p-treetable-wrapper { - overflow-x: auto; - } - - .p-treetable-responsive-scroll > .p-treetable-wrapper > table, -.p-treetable-auto-layout > .p-treetable-wrapper > table { - table-layout: auto; - } - - .p-treetable-hoverable-rows .p-treetable-tbody > tr { - cursor: pointer; - } - - .p-treetable-toggler { - cursor: pointer; - user-select: none; - display: inline-flex; - align-items: center; - justify-content: center; - vertical-align: middle; - overflow: hidden; - position: relative; - } - - .p-treetable-toggler + .p-checkbox { - vertical-align: middle; - } - - .p-treetable-toggler + .p-checkbox + span { - vertical-align: middle; - } - - /* Resizable */ - .p-treetable-resizable > .p-treetable-wrapper { - overflow-x: auto; - } - - .p-treetable-resizable .p-treetable-thead > tr > th, -.p-treetable-resizable .p-treetable-tfoot > tr > td, -.p-treetable-resizable .p-treetable-tbody > tr > td { - overflow: hidden; - } - - .p-treetable-resizable .p-resizable-column:not(.p-frozen-column) { - background-clip: padding-box; - position: relative; - } - - .p-treetable-resizable-fit .p-resizable-column:last-child .p-column-resizer { - display: none; - } - - .p-treetable .p-column-resizer { - display: block; - position: absolute; - top: 0; - right: 0; - margin: 0; - width: 0.5rem; - height: 100%; - padding: 0px; - cursor: col-resize; - border: 1px solid transparent; - } - - .p-treetable .p-column-resizer-helper { - width: 1px; - position: absolute; - z-index: 10; - display: none; - } - - .p-treetable .p-treetable-loading-overlay { - position: absolute; - display: flex; - align-items: center; - justify-content: center; - z-index: 2; - } - - /* Scrollable */ - .p-treetable-scrollable .p-treetable-wrapper { - position: relative; - overflow: auto; - } - - .p-treetable-scrollable .p-treetable-table { - display: block; - } - - .p-treetable-scrollable .p-treetable-thead, -.p-treetable-scrollable .p-treetable-tbody, -.p-treetable-scrollable .p-treetable-tfoot { - display: block; - } - - .p-treetable-scrollable .p-treetable-thead > tr, -.p-treetable-scrollable .p-treetable-tbody > tr, -.p-treetable-scrollable .p-treetable-tfoot > tr { - display: flex; - flex-wrap: nowrap; - width: 100%; - } - - .p-treetable-scrollable .p-treetable-thead > tr > th, -.p-treetable-scrollable .p-treetable-tbody > tr > td, -.p-treetable-scrollable .p-treetable-tfoot > tr > td { - display: flex; - flex: 1 1 0; - align-items: center; - } - - .p-treetable-scrollable .p-treetable-thead { - position: sticky; - top: 0; - z-index: 1; - } - - .p-treetable-scrollable .p-treetable-tfoot { - position: sticky; - bottom: 0; - z-index: 1; - } - - .p-treetable-scrollable .p-frozen-column { - position: sticky; - background: inherit; - } - - .p-treetable-scrollable th.p-frozen-column { - z-index: 1; - } - - .p-treetable-scrollable-both .p-treetable-thead > tr > th, -.p-treetable-scrollable-both .p-treetable-tbody > tr > td, -.p-treetable-scrollable-both .p-treetable-tfoot > tr > td, -.p-treetable-scrollable-horizontal .p-treetable-thead > tr > th .p-treetable-scrollable-horizontal .p-treetable-tbody > tr > td, -.p-treetable-scrollable-horizontal .p-treetable-tfoot > tr > td { - flex: 0 0 auto; - } - - .p-treetable-flex-scrollable { - display: flex; - flex-direction: column; - height: 100%; - } - - .p-treetable-flex-scrollable .p-treetable-wrapper { - display: flex; - flex-direction: column; - flex: 1; - height: 100%; - } - - .p-treetable .p-paginator-top { - border-width: 0 0 1px 0; - border-radius: 0; - } - .p-treetable .p-paginator-bottom { - border-width: 0 0 1px 0; - border-radius: 0; - } - .p-treetable .p-treetable-header { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-width: 0 0 1px 0; - padding: 0.75rem 1rem; - font-weight: 600; - } - .p-treetable .p-treetable-footer { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-width: 0 0 1px 0; - padding: 0.75rem 1rem; - font-weight: 600; - } - .p-treetable .p-treetable-thead > tr > th { - text-align: left; - padding: 0.75rem 1rem; - border: 1px solid #e2e8f0; - border-width: 0 0 1px 0; - font-weight: 600; - color: #334155; - background: #ffffff; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-treetable .p-treetable-tfoot > tr > td { - text-align: left; - padding: 0.75rem 1rem; - border: 1px solid #e2e8f0; - border-width: 0 0 1px 0; - font-weight: 600; - color: #334155; - background: #ffffff; - } - .p-treetable .p-sortable-column { - outline-color: var(--p-focus-ring-color); - } - .p-treetable .p-sortable-column .p-sortable-column-icon { - color: #64748b; - margin-left: 0.5rem; - } - .p-treetable .p-sortable-column .p-sortable-column-badge { - border-radius: 50%; - height: 1rem; - min-width: 1rem; - line-height: 1rem; - color: #6D28D9; - background: #F5F3FF; - margin-left: 0.5rem; - } - .p-treetable .p-sortable-column:not(.p-highlight):hover { - background: #f1f5f9; - color: #1e293b; - } - .p-treetable .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon { - color: #475569; - } - .p-treetable .p-sortable-column.p-highlight { - background: #F5F3FF; - color: #6D28D9; - } - .p-treetable .p-sortable-column.p-highlight .p-sortable-column-icon { - color: #6D28D9; - } - .p-treetable .p-treetable-tbody > tr { - background: #ffffff; - color: #334155; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-treetable .p-treetable-tbody > tr > td { - text-align: left; - border: 1px solid #e2e8f0; - border-width: 0 0 1px 0; - padding: 0.75rem 1rem; - } - .p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler { - width: 1.75rem; - height: 1.75rem; - color: #64748b; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - margin-right: 0.5rem; - } - .p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:enabled:hover { - color: #475569; - border-color: transparent; - background: #f1f5f9; - } - .p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler + .p-checkbox { - margin-right: 0.5rem; - } - .p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler + .p-checkbox.p-indeterminate .p-checkbox-icon { - color: #334155; - } - .p-treetable .p-treetable-tbody > tr:focus-visible { - outline: 0.15rem solid var(--p-focus-ring-color); - outline-offset: -0.15rem; - } - .p-treetable .p-treetable-tbody > tr.p-highlight { - background: #F5F3FF; - color: #6D28D9; - } - .p-treetable .p-treetable-tbody > tr.p-highlight .p-treetable-toggler { - color: #6D28D9; - } - .p-treetable .p-treetable-tbody > tr.p-highlight .p-treetable-toggler:hover { - color: #6D28D9; - } - .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody > tr:not(.p-highlight):hover { - background: #f1f5f9; - color: #1e293b; - } - .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody > tr:not(.p-highlight):hover .p-treetable-toggler { - color: #1e293b; - } - .p-treetable .p-column-resizer-helper { - background: #8B5CF6; - } - .p-treetable .p-treetable-scrollable-header, -.p-treetable .p-treetable-scrollable-footer { - background: #ffffff; - } - .p-treetable .p-treetable-loading-icon { - font-size: 2rem; - } - .p-treetable .p-treetable-loading-icon.p-icon { - width: 2rem; - height: 2rem; - } - .p-treetable.p-treetable-gridlines .p-datatable-header { - border-width: 1px 1px 0 1px; - } - .p-treetable.p-treetable-gridlines .p-treetable-footer { - border-width: 0 1px 1px 1px; - } - .p-treetable.p-treetable-gridlines .p-treetable-top { - border-width: 0 1px 0 1px; - } - .p-treetable.p-treetable-gridlines .p-treetable-bottom { - border-width: 0 1px 1px 1px; - } - .p-treetable.p-treetable-gridlines .p-treetable-thead > tr > th { - border-width: 1px; - } - .p-treetable.p-treetable-gridlines .p-treetable-tbody > tr > td { - border-width: 1px; - } - .p-treetable.p-treetable-gridlines .p-treetable-tfoot > tr > td { - border-width: 1px; - } - .p-treetable.p-treetable-sm .p-treetable-header { - padding: 0.65625rem 0.875rem; - } - .p-treetable.p-treetable-sm .p-treetable-thead > tr > th { - padding: 0.375rem 0.5rem; - } - .p-treetable.p-treetable-sm .p-treetable-tbody > tr > td { - padding: 0.375rem 0.5rem; - } - .p-treetable.p-treetable-sm .p-treetable-tfoot > tr > td { - padding: 0.375rem 0.5rem; - } - .p-treetable.p-treetable-sm .p-treetable-footer { - padding: 0.375rem 0.5rem; - } - .p-treetable.p-treetable-lg .p-treetable-header { - padding: 0.9375rem 1.25rem; - } - .p-treetable.p-treetable-lg .p-treetable-thead > tr > th { - padding: 0.9375rem 1.25rem; - } - .p-treetable.p-treetable-lg .p-treetable-tbody > tr > td { - padding: 0.9375rem 1.25rem; - } - .p-treetable.p-treetable-lg .p-treetable-tfoot > tr > td { - padding: 0.9375rem 1.25rem; - } - .p-treetable.p-treetable-lg .p-treetable-footer { - padding: 0.9375rem 1.25rem; - } - - .p-accordion-header-action { - cursor: pointer; - display: flex; - align-items: center; - user-select: none; - position: relative; - text-decoration: none; - } - - .p-accordion-header-action:focus { - z-index: 1; - } - - .p-accordion-header-text { - line-height: 1; - } - - .p-accordion .p-accordion-header .p-accordion-header-link { - padding: 1.125rem 1.125rem 1.125rem 1.125rem; - border: 0 none; - color: #64748b; - background: #ffffff; - font-weight: 600; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-accordion .p-accordion-header .p-accordion-header-link .p-accordion-toggle-icon { - margin-right: 0.5rem; - } - .p-accordion .p-accordion-header:not(.p-disabled) .p-accordion-header-link:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -2px; - box-shadow: inset none; - } - .p-accordion .p-accordion-header:not(.p-highlight):not(.p-disabled):hover .p-accordion-header-link { - background: #ffffff; - border-color: #e2e8f0; - color: #334155; - } - .p-accordion .p-accordion-header:not(.p-disabled).p-highlight .p-accordion-header-link { - background: #ffffff; - border-color: #e2e8f0; - color: #334155; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - } - .p-accordion .p-accordion-header:not(.p-disabled).p-highlight:hover .p-accordion-header-link { - border-color: #e2e8f0; - background: #ffffff; - color: #334155; - } - .p-accordion .p-accordion-content { - padding: 0 1.125rem 1.125rem 1.125rem; - border: 0 none; - background: #ffffff; - color: #334155; - border-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-accordion .p-accordion-tab { - margin-bottom: 0; - } - .p-accordion .p-accordion-tab .p-accordion-header .p-accordion-header-link { - border-radius: 0; - } - .p-accordion .p-accordion-tab .p-accordion-content { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - } - .p-accordion .p-accordion-tab:not(:first-child) .p-accordion-header .p-accordion-header-link { - border-top: 0 none; - } - .p-accordion .p-accordion-tab:not(:first-child) .p-accordion-header:not(.p-highlight):not(.p-disabled):hover .p-accordion-header-link, .p-accordion .p-accordion-tab:not(:first-child) .p-accordion-header:not(.p-disabled).p-highlight:hover .p-accordion-header-link { - border-top: 0 none; - } - .p-accordion .p-accordion-tab:first-child .p-accordion-header .p-accordion-header-link { - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-accordion .p-accordion-tab:last-child .p-accordion-header:not(.p-highlight) .p-accordion-header-link { - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-accordion .p-accordion-tab:last-child .p-accordion-content { - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - - .p-card { - background: #ffffff; - color: #334155; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); - border-radius: 6px; - } - .p-card .p-card-body { - padding: 1.5rem; - } - .p-card .p-card-title { - font-size: 1.25rem; - font-weight: 600; - margin-bottom: 0.5rem; - } - .p-card .p-card-subtitle { - font-weight: 400; - margin-bottom: 0.5rem; - color: #64748b; - } - .p-card .p-card-content { - padding: 0 0 0 0; - } - .p-card .p-card-footer { - padding: 0 0 0 0; - } - - .p-fieldset-legend > a, -.p-fieldset-legend > span { - display: flex; - align-items: center; - justify-content: center; - } - - .p-fieldset-toggleable .p-fieldset-legend a { - cursor: pointer; - user-select: none; - overflow: hidden; - position: relative; - text-decoration: none; - } - - .p-fieldset-legend-text { - line-height: 1; - } - - .p-fieldset { - border: 1px solid #e2e8f0; - background: #ffffff; - color: #334155; - border-radius: 6px; - } - .p-fieldset .p-fieldset-legend { - padding: 1.125rem; - border: 1px solid #e2e8f0; - color: #334155; - background: #ffffff; - font-weight: 600; - border-radius: 6px; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend { - padding: 0; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a { - padding: 1.125rem; - color: #334155; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a .p-fieldset-toggler { - margin-right: 0.5rem; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a:hover { - color: #1e293b; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend:hover { - background: #ffffff; - border-color: #ffffff; - color: #1e293b; - } - .p-fieldset .p-fieldset-content { - padding: 0 1.125rem 1.125rem 1.125rem; - } - - .p-divider-horizontal { - display: flex; - width: 100%; - position: relative; - align-items: center; - } - - .p-divider-horizontal:before { - position: absolute; - display: block; - top: 50%; - left: 0; - width: 100%; - content: ""; - } - - .p-divider-content { - z-index: 1; - } - - .p-divider-vertical { - min-height: 100%; - margin: 0 1rem; - display: flex; - position: relative; - justify-content: center; - } - - .p-divider-vertical:before { - position: absolute; - display: block; - top: 0; - left: 50%; - height: 100%; - content: ""; - } - - .p-divider.p-divider-solid.p-divider-horizontal:before { - border-top-style: solid; - } - .p-divider.p-divider-solid.p-divider-vertical:before { - border-left-style: solid; - } - .p-divider.p-divider-dashed.p-divider-horizontal:before { - border-top-style: dashed; - } - .p-divider.p-divider-dashed.p-divider-vertical:before { - border-left-style: dashed; - } - .p-divider.p-divider-dotted.p-divider-horizontal:before { - border-top-style: dotted; - } - .p-divider.p-divider-dotted.p-divider-vertical:before { - border-left-style: dotted; - } - - .p-divider .p-divider-content { - background-color: #ffffff; - } - .p-divider.p-divider-horizontal { - margin: 1rem 0; - padding: 0 1rem; - } - .p-divider.p-divider-horizontal:before { - border-top: 1px solid #e2e8f0; - } - .p-divider.p-divider-horizontal .p-divider-content { - padding: 0 0.5rem; - } - .p-divider.p-divider-vertical { - margin: 0 1rem; - padding: 1rem 0; - } - .p-divider.p-divider-vertical:before { - border-left: 1px solid #e2e8f0; - } - .p-divider.p-divider-vertical .p-divider-content { - padding: 0.5rem 0; - } - - .p-panel-header { - display: flex; - justify-content: space-between; - align-items: center; - } - - .p-panel-title { - line-height: 1; - } - - .p-panel-header-icon { - display: inline-flex; - justify-content: center; - align-items: center; - cursor: pointer; - text-decoration: none; - overflow: hidden; - position: relative; - } - - .p-panel .p-panel-header { - border: 1px solid #e2e8f0; - padding: 1.125rem; - background: #ffffff; - color: #334155; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-panel .p-panel-header .p-panel-title { - font-weight: 600; - } - .p-panel .p-panel-header .p-panel-header-icon { - width: 1.75rem; - height: 1.75rem; - color: #64748b; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-panel .p-panel-header .p-panel-header-icon:enabled:hover { - color: #475569; - border-color: transparent; - background: #f1f5f9; - } - .p-panel .p-panel-header .p-panel-header-icon:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-panel.p-panel-toggleable .p-panel-header { - padding: 0.75rem 1.125rem; - } - .p-panel .p-panel-content { - padding: 0 1.125rem 1.125rem 1.125rem; - border: 1px solid #e2e8f0; - background: #ffffff; - color: #334155; - border-top: 0 none; - } - .p-panel .p-panel-content:last-child { - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-panel .p-panel-footer { - padding: 0 1.125rem 1.125rem 1.125rem; - border: 1px solid #e2e8f0; - background: #ffffff; - color: #334155; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - border-top: 0 none; - } - - .p-scrollpanel-wrapper { - overflow: hidden; - width: 100%; - height: 100%; - position: relative; - z-index: 1; - float: left; - } - - .p-scrollpanel-content { - height: calc(100% + 18px); - width: calc(100% + 18px); - padding: 0 18px 18px 0; - position: relative; - overflow: auto; - box-sizing: border-box; - scrollbar-width: none; - } - - .p-scrollpanel-content::-webkit-scrollbar { - display: none; - } - - .p-scrollpanel-bar { - position: relative; - background: #c1c1c1; - border-radius: 3px; - z-index: 2; - cursor: pointer; - opacity: 0; - transition: opacity 0.25s linear; - } - - .p-scrollpanel-bar-y { - width: 9px; - top: 0; - } - - .p-scrollpanel-bar-x { - height: 9px; - bottom: 0; - } - - .p-scrollpanel-hidden { - visibility: hidden; - } - - .p-scrollpanel:hover .p-scrollpanel-bar, -.p-scrollpanel:active .p-scrollpanel-bar { - opacity: 1; - } - - .p-scrollpanel-grabbed { - user-select: none; - } - - .p-scrollpanel .p-scrollpanel-bar { - background: #f1f5f9; - border: 0 none; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-scrollpanel .p-scrollpanel-bar:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-splitter { - display: flex; - flex-wrap: nowrap; - } - - .p-splitter-vertical { - flex-direction: column; - } - - .p-splitter-gutter { - flex-grow: 0; - flex-shrink: 0; - display: flex; - align-items: center; - justify-content: center; - cursor: col-resize; - } - - .p-splitter-horizontal.p-splitter-resizing { - cursor: col-resize; - user-select: none; - } - - .p-splitter-horizontal > .p-splitter-gutter > .p-splitter-gutter-handle { - height: 24px; - width: 100%; - } - - .p-splitter-horizontal > .p-splitter-gutter { - cursor: col-resize; - } - - .p-splitter-vertical.p-splitter-resizing { - cursor: row-resize; - user-select: none; - } - - .p-splitter-vertical > .p-splitter-gutter { - cursor: row-resize; - } - - .p-splitter-vertical > .p-splitter-gutter > .p-splitter-gutter-handle { - width: 24px; - height: 100%; - } - - .p-splitter-panel { - flex-grow: 1; - overflow: hidden; - } - - .p-splitter-panel-nested { - display: flex; - } - - .p-splitter-panel .p-splitter { - flex-grow: 1; - border: 0 none; - } - - .p-splitter { - border: 1px solid #e2e8f0; - background: #ffffff; - border-radius: 6px; - color: #334155; - } - .p-splitter .p-splitter-gutter { - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - background: #e2e8f0; - } - .p-splitter .p-splitter-gutter .p-splitter-gutter-handle { - background: #e2e8f0; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-splitter .p-splitter-gutter-resizing { - background: #e2e8f0; - } - - .p-stepper .p-stepper-nav { - position: relative; - display: flex; - justify-content: space-between; - align-items: center; - margin: 0; - padding: 0; - list-style-type: none; - overflow-x: auto; - } - - .p-stepper-vertical .p-stepper-nav { - flex-direction: column; - } - - .p-stepper-header { - position: relative; - display: flex; - flex: 1 1 auto; - align-items: center; - } - .p-stepper-header:last-of-type { - flex: initial; - } - - .p-stepper-header .p-stepper-action { - border: 0 none; - display: inline-flex; - align-items: center; - text-decoration: none; - cursor: pointer; - } - .p-stepper-header .p-stepper-action:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-stepper.p-stepper-readonly .p-stepper-header { - cursor: auto; - } - - .p-stepper-header.p-highlight .p-stepper-action { - cursor: default; - } - - .p-stepper-title { - display: block; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 100%; - } - - .p-stepper-number { - display: flex; - align-items: center; - justify-content: center; - } - - .p-stepper-separator { - flex: 1 1 0; - } - - .p-stepper .p-stepper-nav { - display: flex; - justify-content: space-between; - margin: 0; - padding: 0; - list-style-type: none; - } - .p-stepper .p-stepper-header { - padding: 0.5rem; - } - .p-stepper .p-stepper-header .p-stepper-action { - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - background: #ffffff; - outline-color: transparent; - } - .p-stepper .p-stepper-header .p-stepper-action .p-stepper-number { - color: #64748b; - border: 1px solid #e2e8f0; - border-width: 2px; - background: #ffffff; - min-width: 2rem; - height: 2rem; - line-height: 2rem; - font-size: 1.143rem; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-stepper .p-stepper-header .p-stepper-action .p-stepper-title { - margin-left: 0.5rem; - color: #334155; - font-weight: 500; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-stepper .p-stepper-header .p-stepper-action:not(.p-disabled):focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-stepper .p-stepper-header.p-highlight .p-stepper-number { - background: #F5F3FF; - color: #6D28D9; - } - .p-stepper .p-stepper-header.p-highlight .p-stepper-title { - color: #334155; - } - .p-stepper .p-stepper-header:not(.p-disabled):focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-stepper .p-stepper-header:has(~ .p-highlight) .p-stepper-separator { - background-color: #8B5CF6; - } - .p-stepper .p-stepper-panels { - background: #ffffff; - padding: 0.875rem 1.125rem 1.125rem 1.125rem; - color: #334155; - } - .p-stepper .p-stepper-separator { - background-color: #e2e8f0; - width: 100%; - height: 2px; - margin-inline-start: 1rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-stepper.p-stepper-vertical { - display: flex; - flex-direction: column; - } - .p-stepper.p-stepper-vertical .p-stepper-toggleable-content { - display: flex; - flex: 1 1 auto; - background: #ffffff; - color: #334155; - } - .p-stepper.p-stepper-vertical .p-stepper-panel { - display: flex; - flex-direction: column; - flex: initial; - } - .p-stepper.p-stepper-vertical .p-stepper-panel.p-stepper-panel-active { - flex: 1 1 auto; - } - .p-stepper.p-stepper-vertical .p-stepper-panel .p-stepper-header { - flex: initial; - } - .p-stepper.p-stepper-vertical .p-stepper-panel .p-stepper-content { - width: 100%; - padding-left: 1rem; - } - .p-stepper.p-stepper-vertical .p-stepper-panel .p-stepper-separator { - flex: 0 0 auto; - width: 2px; - height: auto; - margin-inline-start: calc(1.75rem + 2px); - } - .p-stepper.p-stepper-vertical .p-stepper-panel:has(~ .p-stepper-panel-active) .p-stepper-separator { - background-color: #8B5CF6; - } - .p-stepper.p-stepper-vertical .p-stepper-panel:last-of-type .p-stepper-content { - padding-left: 3rem; - } - - .p-tabview-nav-container { - position: relative; - } - - .p-tabview-scrollable .p-tabview-nav-container { - overflow: hidden; - } - - .p-tabview-nav-content { - overflow-x: auto; - overflow-y: hidden; - scroll-behavior: smooth; - scrollbar-width: none; - overscroll-behavior: contain auto; - } - - .p-tabview-nav { - display: flex; - margin: 0; - padding: 0; - list-style-type: none; - flex: 1 1 auto; - } - - .p-tabview-header-action { - cursor: pointer; - user-select: none; - display: flex; - align-items: center; - position: relative; - text-decoration: none; - overflow: hidden; - } - - .p-tabview-ink-bar { - display: none; - z-index: 1; - } - - .p-tabview-header-action:focus { - z-index: 1; - } - - .p-tabview-title { - line-height: 1; - white-space: nowrap; - } - - .p-tabview-nav-btn { - position: absolute; - top: 0; - z-index: 2; - height: 100%; - display: flex; - align-items: center; - justify-content: center; - } - - .p-tabview-nav-prev { - left: 0; - } - - .p-tabview-nav-next { - right: 0; - } - - .p-tabview-nav-content::-webkit-scrollbar { - display: none; - } - - .p-tabview .p-tabview-nav { - background: #ffffff; - border: 1px solid #e2e8f0; - border-width: 0 0 1px 0; - } - .p-tabview .p-tabview-nav li { - margin-right: 0; - } - .p-tabview .p-tabview-nav li .p-tabview-nav-link { - border: solid #e2e8f0; - border-width: 0 0 1px 0; - border-color: transparent transparent #e2e8f0 transparent; - background: #ffffff; - color: #64748b; - padding: 1rem 1.125rem; - font-weight: 600; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - margin: 0 0 -1px 0; - outline-color: transparent; - } - .p-tabview .p-tabview-nav li .p-tabview-nav-link:not(.p-disabled):focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -2px; - box-shadow: inset none; - } - .p-tabview .p-tabview-nav li:not(.p-highlight):not(.p-disabled):hover .p-tabview-nav-link { - background: #ffffff; - border-color: #e2e8f0; - color: #334155; - } - .p-tabview .p-tabview-nav li.p-highlight .p-tabview-nav-link { - background: #ffffff; - border-color: #e2e8f0; - color: #8B5CF6; - } - .p-tabview .p-tabview-nav-btn.p-link { - background: #ffffff; - color: #8B5CF6; - width: 2.5rem; - box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); - border-radius: 0; - outline-color: transparent; - } - .p-tabview .p-tabview-nav-btn.p-link:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -2px; - box-shadow: inset none; - } - .p-tabview .p-tabview-panels { - background: #ffffff; - padding: 0.875rem 1.125rem 1.125rem 1.125rem; - border: 0 none; - color: #334155; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - - .p-toolbar { - display: flex; - align-items: center; - justify-content: space-between; - flex-wrap: wrap; - } - - .p-toolbar-group-start, -.p-toolbar-group-center, -.p-toolbar-group-end { - display: flex; - align-items: center; - } - - .p-toolbar-group-left, -.p-toolbar-group-right { - display: flex; - align-items: center; - } - - .p-toolbar { - background: #ffffff; - border: 1px solid #e2e8f0; - padding: 1.125rem; - border-radius: 6px; - gap: 0.5rem; - } - .p-toolbar .p-toolbar-separator { - margin: 0 0.5rem; - } - - .p-confirm-popup { - position: absolute; - margin-top: 10px; - top: 0; - left: 0; - } - - .p-confirm-popup-flipped { - margin-top: -10px; - margin-bottom: 10px; - } - - /* Animation */ - .p-confirm-popup-enter-from { - opacity: 0; - transform: scaleY(0.8); - } - - .p-confirm-popup-leave-to { - opacity: 0; - } - - .p-confirm-popup-enter-active { - transition: transform 0.12s cubic-bezier(0, 0, 0.2, 1), opacity 0.12s cubic-bezier(0, 0, 0.2, 1); - } - - .p-confirm-popup-leave-active { - transition: opacity 0.1s linear; - } - - .p-confirm-popup:after, -.p-confirm-popup:before { - bottom: 100%; - left: calc(var(--overlayArrowLeft, 0) + 1.25rem); - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; - } - - .p-confirm-popup:after { - border-width: 8px; - margin-left: -8px; - } - - .p-confirm-popup:before { - border-width: 10px; - margin-left: -10px; - } - - .p-confirm-popup-flipped:after, -.p-confirm-popup-flipped:before { - bottom: auto; - top: 100%; - } - - .p-confirm-popup.p-confirm-popup-flipped:after { - border-bottom-color: transparent; - } - - .p-confirm-popup.p-confirm-popup-flipped:before { - border-bottom-color: transparent; - } - - .p-confirm-popup .p-confirm-popup-content { - display: flex; - align-items: center; - } - - .p-confirm-popup { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-radius: 6px; - box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); - } - .p-confirm-popup .p-confirm-popup-content { - padding: 1rem; - } - .p-confirm-popup .p-confirm-popup-footer { - text-align: right; - padding: 0 1rem 1rem 1rem; - } - .p-confirm-popup .p-confirm-popup-footer button { - margin: 0 0.5rem 0 0; - width: auto; - } - .p-confirm-popup .p-confirm-popup-footer button:last-child { - margin: 0; - } - .p-confirm-popup:after { - border-style: solid; - border-color: rgba(255, 255, 255, 0); - border-bottom-color: #ffffff; - } - .p-confirm-popup:before { - border-style: solid; - border-color: rgba(226, 232, 240, 0); - border-bottom-color: #d3dce8; - } - .p-confirm-popup.p-confirm-popup-flipped:after { - border-top-color: #ffffff; - } - .p-confirm-popup.p-confirm-popup-flipped:before { - border-top-color: #e2e8f0; - } - .p-confirm-popup .p-confirm-popup-icon { - font-size: 1.5rem; - } - .p-confirm-popup .p-confirm-popup-icon.p-icon { - width: 1.5rem; - height: 1.5rem; - } - .p-confirm-popup .p-confirm-popup-message { - margin-left: 1rem; - } - - .p-dialog-mask.p-component-overlay { - pointer-events: auto; - } - - .p-dialog { - max-height: 90%; - transform: scale(1); - } - - .p-dialog-content { - overflow-y: auto; - } - - .p-dialog-header { - display: flex; - align-items: center; - justify-content: space-between; - flex-shrink: 0; - } - - .p-dialog-footer { - flex-shrink: 0; - } - - .p-dialog .p-dialog-header-icons { - display: flex; - align-items: center; - } - - .p-dialog .p-dialog-header-icon { - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; - position: relative; - } - - /* Fluid */ - .p-fluid .p-dialog-footer .p-button { - width: auto; - } - - /* Animation */ - /* Center */ - .p-dialog-enter-active { - transition: all 150ms cubic-bezier(0, 0, 0.2, 1); - } - - .p-dialog-leave-active { - transition: all 150ms cubic-bezier(0.4, 0, 0.2, 1); - } - - .p-dialog-enter-from, -.p-dialog-leave-to { - opacity: 0; - transform: scale(0.7); - } - - /* Top, Bottom, Left, Right, Top* and Bottom* */ - .p-dialog-top .p-dialog, -.p-dialog-bottom .p-dialog, -.p-dialog-left .p-dialog, -.p-dialog-right .p-dialog, -.p-dialog-topleft .p-dialog, -.p-dialog-topright .p-dialog, -.p-dialog-bottomleft .p-dialog, -.p-dialog-bottomright .p-dialog { - margin: 0.75rem; - transform: translate3d(0px, 0px, 0px); - } - - .p-dialog-top .p-dialog-enter-active, -.p-dialog-top .p-dialog-leave-active, -.p-dialog-bottom .p-dialog-enter-active, -.p-dialog-bottom .p-dialog-leave-active, -.p-dialog-left .p-dialog-enter-active, -.p-dialog-left .p-dialog-leave-active, -.p-dialog-right .p-dialog-enter-active, -.p-dialog-right .p-dialog-leave-active, -.p-dialog-topleft .p-dialog-enter-active, -.p-dialog-topleft .p-dialog-leave-active, -.p-dialog-topright .p-dialog-enter-active, -.p-dialog-topright .p-dialog-leave-active, -.p-dialog-bottomleft .p-dialog-enter-active, -.p-dialog-bottomleft .p-dialog-leave-active, -.p-dialog-bottomright .p-dialog-enter-active, -.p-dialog-bottomright .p-dialog-leave-active { - transition: all 0.3s ease-out; - } - - .p-dialog-top .p-dialog-enter-from, -.p-dialog-top .p-dialog-leave-to { - transform: translate3d(0px, -100%, 0px); - } - - .p-dialog-bottom .p-dialog-enter-from, -.p-dialog-bottom .p-dialog-leave-to { - transform: translate3d(0px, 100%, 0px); - } - - .p-dialog-left .p-dialog-enter-from, -.p-dialog-left .p-dialog-leave-to, -.p-dialog-topleft .p-dialog-enter-from, -.p-dialog-topleft .p-dialog-leave-to, -.p-dialog-bottomleft .p-dialog-enter-from, -.p-dialog-bottomleft .p-dialog-leave-to { - transform: translate3d(-100%, 0px, 0px); - } - - .p-dialog-right .p-dialog-enter-from, -.p-dialog-right .p-dialog-leave-to, -.p-dialog-topright .p-dialog-enter-from, -.p-dialog-topright .p-dialog-leave-to, -.p-dialog-bottomright .p-dialog-enter-from, -.p-dialog-bottomright .p-dialog-leave-to { - transform: translate3d(100%, 0px, 0px); - } - - /* Maximize */ - .p-dialog-maximized { - width: 100vw !important; - height: 100vh !important; - top: 0px !important; - left: 0px !important; - max-height: 100%; - height: 100%; - } - - .p-dialog-maximized .p-dialog-content { - flex-grow: 1; - } - - .p-confirm-dialog .p-dialog-content { - display: flex; - align-items: center; - } - - .p-dialog { - border-radius: 6px; - box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); - border: 1px solid #e2e8f0; - } - .p-dialog .p-dialog-header { - border-bottom: 0 none; - background: #ffffff; - color: #334155; - padding: 1.5rem; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-dialog .p-dialog-header .p-dialog-title { - font-weight: 600; - font-size: 1.25rem; - } - .p-dialog .p-dialog-header .p-dialog-header-icon { - width: 1.75rem; - height: 1.75rem; - color: #64748b; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - margin-right: 0.5rem; - } - .p-dialog .p-dialog-header .p-dialog-header-icon:enabled:hover { - color: #475569; - border-color: transparent; - background: #f1f5f9; - } - .p-dialog .p-dialog-header .p-dialog-header-icon:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-dialog .p-dialog-header .p-dialog-header-icon:last-child { - margin-right: 0; - } - .p-dialog .p-dialog-content { - background: #ffffff; - color: #334155; - padding: 0 1.5rem 1.5rem 1.5rem; - } - .p-dialog .p-dialog-content:last-of-type { - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-dialog .p-dialog-footer { - border-top: 0 none; - background: #ffffff; - color: #334155; - padding: 0 1.5rem 1.5rem 1.5rem; - display: flex; - justify-content: flex-end; - gap: 0.5rem; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-dialog.p-confirm-dialog .p-confirm-dialog-icon { - font-size: 2rem; - } - .p-dialog.p-confirm-dialog .p-confirm-dialog-message:not(:first-child) { - margin-left: 1rem; - } - - .p-overlaypanel { - margin-top: 10px; - } - - .p-overlaypanel-flipped { - margin-top: -10px; - margin-bottom: 10px; - } - - .p-overlaypanel-close { - display: flex; - justify-content: center; - align-items: center; - overflow: hidden; - position: relative; - } - - /* Animation */ - .p-overlaypanel-enter-from { - opacity: 0; - transform: scaleY(0.8); - } - - .p-overlaypanel-leave-to { - opacity: 0; - } - - .p-overlaypanel-enter-active { - transition: transform 0.12s cubic-bezier(0, 0, 0.2, 1), opacity 0.12s cubic-bezier(0, 0, 0.2, 1); - } - - .p-overlaypanel-leave-active { - transition: opacity 0.1s linear; - } - - .p-overlaypanel:after, -.p-overlaypanel:before { - bottom: 100%; - left: calc(var(--overlayArrowLeft, 0) + 1.25rem); - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; - } - - .p-overlaypanel:after { - border-width: 8px; - margin-left: -8px; - } - - .p-overlaypanel:before { - border-width: 10px; - margin-left: -10px; - } - - .p-overlaypanel-flipped:after, -.p-overlaypanel-flipped:before { - bottom: auto; - top: 100%; - } - - .p-overlaypanel.p-overlaypanel-flipped:after { - border-bottom-color: transparent; - } - - .p-overlaypanel.p-overlaypanel-flipped:before { - border-bottom-color: transparent; - } - - .p-overlaypanel { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-radius: 6px; - box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); - } - .p-overlaypanel .p-overlaypanel-content { - padding: 0 1.125rem 1.125rem 1.125rem; - } - .p-overlaypanel .p-overlaypanel-close { - background: #8B5CF6; - color: #ffffff; - width: 1.75rem; - height: 1.75rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 50%; - position: absolute; - top: -0.875rem; - right: -0.875rem; - } - .p-overlaypanel .p-overlaypanel-close:enabled:hover { - background: #7C3AED; - color: #ffffff; - } - .p-overlaypanel:after { - border-style: solid; - border-color: rgba(255, 255, 255, 0); - border-bottom-color: #ffffff; - } - .p-overlaypanel:before { - border-style: solid; - border-color: rgba(226, 232, 240, 0); - border-bottom-color: #d3dce8; - } - .p-overlaypanel.p-overlaypanel-flipped:after { - border-top-color: #ffffff; - } - .p-overlaypanel.p-overlaypanel-flipped:before { - border-top-color: #e2e8f0; - } - - .p-sidebar-mask { - display: none; - pointer-events: none; - background-color: transparent; - transition-property: background-color; - } - - .p-sidebar-mask.p-component-overlay { - pointer-events: auto; - } - - .p-sidebar-visible { - display: flex; - } - - .p-sidebar { - display: flex; - flex-direction: column; - pointer-events: auto; - transform: translate3d(0px, 0px, 0px); - position: relative; - transition: transform 0.3s; - } - - .p-sidebar-content { - overflow-y: auto; - flex-grow: 1; - } - - .p-sidebar-header { - display: flex; - align-items: center; - justify-content: space-between; - flex-shrink: 0; - } - - .p-sidebar-icon { - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; - position: relative; - } - - .p-sidebar-full .p-sidebar { - transition: none; - transform: none; - width: 100vw !important; - height: 100vh !important; - max-height: 100%; - top: 0px !important; - left: 0px !important; - } - - /* Animation */ - /* Center */ - .p-sidebar-left .p-sidebar-enter-from, -.p-sidebar-left .p-sidebar-leave-to { - transform: translateX(-100%); - } - - .p-sidebar-right .p-sidebar-enter-from, -.p-sidebar-right .p-sidebar-leave-to { - transform: translateX(100%); - } - - .p-sidebar-top .p-sidebar-enter-from, -.p-sidebar-top .p-sidebar-leave-to { - transform: translateY(-100%); - } - - .p-sidebar-bottom .p-sidebar-enter-from, -.p-sidebar-bottom .p-sidebar-leave-to { - transform: translateY(100%); - } - - .p-sidebar-full .p-sidebar-enter-from, -.p-sidebar-full .p-sidebar-leave-to { - opacity: 0; - } - - .p-sidebar-full .p-sidebar-enter-active, -.p-sidebar-full .p-sidebar-leave-active { - transition: opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1); - } - - /* Size */ - .p-sidebar-left .p-sidebar { - width: 20rem; - height: 100%; - } - - .p-sidebar-right .p-sidebar { - width: 20rem; - height: 100%; - } - - .p-sidebar-top .p-sidebar { - height: 10rem; - width: 100%; - } - - .p-sidebar-bottom .p-sidebar { - height: 10rem; - width: 100%; - } - - .p-sidebar-left .p-sidebar-sm, -.p-sidebar-right .p-sidebar-sm { - width: 20rem; - } - - .p-sidebar-left .p-sidebar-md, -.p-sidebar-right .p-sidebar-md { - width: 40rem; - } - - .p-sidebar-left .p-sidebar-lg, -.p-sidebar-right .p-sidebar-lg { - width: 60rem; - } - - .p-sidebar-top .p-sidebar-sm, -.p-sidebar-bottom .p-sidebar-sm { - height: 10rem; - } - - .p-sidebar-top .p-sidebar-md, -.p-sidebar-bottom .p-sidebar-md { - height: 20rem; - } - - .p-sidebar-top .p-sidebar-lg, -.p-sidebar-bottom .p-sidebar-lg { - height: 30rem; - } - - .p-sidebar-left .p-sidebar-content, -.p-sidebar-right .p-sidebar-content, -.p-sidebar-top .p-sidebar-content, -.p-sidebar-bottom .p-sidebar-content { - width: 100%; - height: 100%; - } - - @media screen and (max-width: 64em) { - .p-sidebar-left .p-sidebar-lg, -.p-sidebar-left .p-sidebar-md, -.p-sidebar-right .p-sidebar-lg, -.p-sidebar-right .p-sidebar-md { - width: 20rem; - } - } - .p-sidebar { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); - } - .p-sidebar .p-sidebar-header { - padding: 1.125rem; - } - .p-sidebar .p-sidebar-header .p-sidebar-header-content { - font-weight: 600; - font-size: 1.25rem; - } - .p-sidebar .p-sidebar-header .p-sidebar-close, -.p-sidebar .p-sidebar-header .p-sidebar-icon { - width: 1.75rem; - height: 1.75rem; - color: #64748b; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-sidebar .p-sidebar-header .p-sidebar-close:enabled:hover, -.p-sidebar .p-sidebar-header .p-sidebar-icon:enabled:hover { - color: #475569; - border-color: transparent; - background: #f1f5f9; - } - .p-sidebar .p-sidebar-header .p-sidebar-close:focus-visible, -.p-sidebar .p-sidebar-header .p-sidebar-icon:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-sidebar .p-sidebar-header + .p-sidebar-content { - padding-top: 0; - } - .p-sidebar .p-sidebar-content { - padding: 0 1.125rem 1.125rem 1.125rem; - } - - .p-tooltip { - position: absolute; - display: none; - padding: 0.25em 0.5rem; - max-width: 12.5rem; - } - - .p-tooltip.p-tooltip-right, -.p-tooltip.p-tooltip-left { - padding: 0 0.25rem; - } - - .p-tooltip.p-tooltip-top, -.p-tooltip.p-tooltip-bottom { - padding: 0.25em 0; - } - - .p-tooltip .p-tooltip-text { - white-space: pre-line; - word-break: break-word; - } - - .p-tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - scale: 2; - } - - .p-tooltip-right .p-tooltip-arrow { - margin-top: -0.25rem; - border-width: 0.25em 0.25em 0.25em 0; - } - - .p-tooltip-left .p-tooltip-arrow { - margin-top: -0.25rem; - border-width: 0.25em 0 0.25em 0.25rem; - } - - .p-tooltip.p-tooltip-top { - padding: 0.25em 0; - } - - .p-tooltip-top .p-tooltip-arrow { - margin-left: -0.25rem; - border-width: 0.25em 0.25em 0; - } - - .p-tooltip-bottom .p-tooltip-arrow { - margin-left: -0.25rem; - border-width: 0 0.25em 0.25rem; - } - - .p-tooltip .p-tooltip-text { - background: #334155; - color: #ffffff; - padding: 0.5rem 0.75rem; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - border-radius: 6px; - } - .p-tooltip.p-tooltip-right .p-tooltip-arrow { - border-right-color: #334155; - } - .p-tooltip.p-tooltip-left .p-tooltip-arrow { - border-left-color: #334155; - } - .p-tooltip.p-tooltip-top .p-tooltip-arrow { - border-top-color: #334155; - } - .p-tooltip.p-tooltip-bottom .p-tooltip-arrow { - border-bottom-color: #334155; - } - - .p-fileupload-content { - position: relative; - } - - .p-fileupload-content .p-progressbar { - width: 100%; - position: absolute; - top: 0; - left: 0; - } - - .p-button.p-fileupload-choose { - position: relative; - overflow: hidden; - } - - .p-fileupload-buttonbar { - display: flex; - flex-wrap: wrap; - } - - .p-fileupload > input[type=file], -.p-fileupload-basic input[type=file] { - display: none; - } - - .p-fluid .p-fileupload .p-button { - width: auto; - } - - .p-fileupload-file { - display: flex; - flex-wrap: wrap; - align-items: center; - } - - .p-fileupload-file-thumbnail { - flex-shrink: 0; - } - - .p-fileupload-file-actions { - margin-left: auto; - } - - .p-fileupload .p-fileupload-buttonbar { - background: #ffffff; - padding: 1.125rem; - border: 1px solid #e2e8f0; - color: #334155; - border-bottom: 0 none; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - gap: 0.5rem; - } - .p-fileupload .p-fileupload-buttonbar .p-button.p-fileupload-choose.p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-fileupload .p-fileupload-content { - background: #ffffff; - padding: 0 1.125rem 1.125rem 1.125rem; - border: 1px solid #e2e8f0; - color: #334155; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-fileupload .p-fileupload-content.p-fileupload-highlight { - border: 1px dashed #8B5CF6; - background-color: #F5F3FF; - } - .p-fileupload .p-fileupload-file { - padding: 1rem; - border: 1px solid #e2e8f0; - border-radius: 6px; - gap: 0.5rem; - margin-bottom: 0.5rem; - } - .p-fileupload .p-fileupload-file:last-child { - margin-bottom: 0; - } - .p-fileupload .p-fileupload-file-name { - margin-bottom: 0.5rem; - } - .p-fileupload .p-fileupload-file-size { - margin-right: 0.5rem; - } - .p-fileupload .p-progressbar { - height: 0.25rem; - } - .p-fileupload .p-fileupload-row > div { - padding: 0.75rem 1rem; - } - .p-fileupload.p-fileupload-advanced .p-message { - margin-top: 0; - } - - .p-fileupload-choose:not(.p-disabled):hover { - background: #7C3AED; - color: #ffffff; - border-color: #7C3AED; - } - .p-fileupload-choose:not(.p-disabled):active { - background: #6D28D9; - color: #ffffff; - border-color: #6D28D9; - } - - .p-breadcrumb { - overflow-x: auto; - } - - .p-breadcrumb .p-breadcrumb-list { - margin: 0; - padding: 0; - list-style-type: none; - display: flex; - align-items: center; - flex-wrap: nowrap; - } - - .p-breadcrumb .p-menuitem-text { - line-height: 1; - } - - .p-breadcrumb .p-menuitem-link { - text-decoration: none; - display: flex; - align-items: center; - } - - .p-breadcrumb .p-menuitem-separator { - display: flex; - align-items: center; - } - - .p-breadcrumb::-webkit-scrollbar { - display: none; - } - - .p-breadcrumb { - background: #ffffff; - border: 0 none; - border-radius: 6px; - padding: 1rem; - } - .p-breadcrumb .p-breadcrumb-list li .p-menuitem-link { - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - outline-color: transparent; - } - .p-breadcrumb .p-breadcrumb-list li .p-menuitem-link:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-breadcrumb .p-breadcrumb-list li .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-breadcrumb .p-breadcrumb-list li .p-menuitem-link .p-menuitem-icon { - color: #94a3b8; - } - .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator { - margin: 0 0.5rem 0 0.5rem; - color: #94a3b8; - } - .p-breadcrumb .p-breadcrumb-list li:last-child .p-menuitem-text { - color: #334155; - } - .p-breadcrumb .p-breadcrumb-list li:last-child .p-menuitem-icon { - color: #94a3b8; - } - - .p-contextmenu ul { - margin: 0; - padding: 0; - list-style: none; - } - - .p-contextmenu .p-submenu-list { - position: absolute; - min-width: 100%; - z-index: 1; - } - - .p-contextmenu .p-menuitem-link { - cursor: pointer; - display: flex; - align-items: center; - text-decoration: none; - overflow: hidden; - position: relative; - } - - .p-contextmenu .p-menuitem-text { - line-height: 1; - } - - .p-contextmenu .p-menuitem { - position: relative; - } - - .p-contextmenu .p-menuitem-link .p-submenu-icon { - margin-left: auto; - } - - .p-contextmenu-enter-from, -.p-contextmenu-leave-active { - opacity: 0; - } - - .p-contextmenu-enter-active { - transition: opacity 250ms; - } - - .p-contextmenu { - padding: 0.25rem 0.25rem; - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - border-radius: 6px; - min-width: 12.5rem; - } - .p-contextmenu .p-contextmenu-root-list { - outline: 0 none; - } - .p-contextmenu .p-submenu-list { - padding: 0.25rem 0.25rem; - background: #ffffff; - border: 1px solid #e2e8f0; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - border-radius: 6px; - } - .p-contextmenu .p-menuitem { - margin: 2px 0; - } - .p-contextmenu .p-menuitem:first-child { - margin-top: 0; - } - .p-contextmenu .p-menuitem:last-child { - margin-bottom: 0; - } - .p-contextmenu .p-menuitem > .p-menuitem-content { - color: #334155; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-contextmenu .p-menuitem > .p-menuitem-content .p-menuitem-link { - color: #334155; - padding: 0.5rem 0.75rem; - user-select: none; - } - .p-contextmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-contextmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { - color: #94a3b8; - margin-right: 0.5rem; - } - .p-contextmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #94a3b8; - } - .p-contextmenu .p-menuitem.p-highlight > .p-menuitem-content { - color: #6D28D9; - background: #F5F3FF; - } - .p-contextmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #6D28D9; - } - .p-contextmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-contextmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #6D28D9; - } - .p-contextmenu .p-menuitem.p-highlight.p-focus > .p-menuitem-content { - background: rgba(139, 92, 246, 0.24); - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { - color: #334155; - background: #f1f5f9; - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover { - color: #334155; - background: #f1f5f9; - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { - color: #334155; - background: #f1f5f9; - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-contextmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-contextmenu .p-menuitem-separator { - border-top: 1px solid #e2e8f0; - margin: 2px 0; - } - .p-contextmenu .p-submenu-icon { - font-size: 0.875rem; - } - .p-contextmenu .p-submenu-icon.p-icon { - width: 0.875rem; - height: 0.875rem; - } - - .p-dock { - position: absolute; - z-index: 1; - display: flex; - justify-content: center; - align-items: center; - pointer-events: none; - } - - .p-dock-list-container { - display: flex; - pointer-events: auto; - } - - .p-dock-list { - margin: 0; - padding: 0; - list-style: none; - display: flex; - align-items: center; - justify-content: center; - } - - .p-dock-item { - transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); - will-change: transform; - } - - .p-dock-link { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - position: relative; - overflow: hidden; - cursor: default; - } - - .p-dock-item-second-prev, -.p-dock-item-second-next { - transform: scale(1.2); - } - - .p-dock-item-prev, -.p-dock-item-next { - transform: scale(1.4); - } - - .p-dock-item-current { - transform: scale(1.6); - z-index: 1; - } - - /* Position */ - /* top */ - .p-dock-top { - left: 0; - top: 0; - width: 100%; - } - - .p-dock-top .p-dock-item { - transform-origin: center top; - } - - /* bottom */ - .p-dock-bottom { - left: 0; - bottom: 0; - width: 100%; - } - - .p-dock-bottom .p-dock-item { - transform-origin: center bottom; - } - - /* right */ - .p-dock-right { - right: 0; - top: 0; - height: 100%; - } - - .p-dock-right .p-dock-item { - transform-origin: center right; - } - - .p-dock-right .p-dock-list { - flex-direction: column; - } - - /* left */ - .p-dock-left { - left: 0; - top: 0; - height: 100%; - } - - .p-dock-left .p-dock-item { - transform-origin: center left; - } - - .p-dock-left .p-dock-list { - flex-direction: column; - } - - .p-dock .p-dock-list-container { - background: rgba(255, 255, 255, 0.1); - border: 1px solid rgba(255, 255, 255, 0.2); - padding: 0.5rem 0.5rem; - border-radius: 0.5rem; - } - .p-dock .p-dock-list-container .p-dock-list { - outline: 0 none; - } - .p-dock .p-dock-item { - padding: 0.5rem; - border-radius: 6px; - } - .p-dock .p-dock-item.p-focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: 0 none; - } - .p-dock .p-dock-link { - width: 3rem; - height: 3rem; - } - .p-dock.p-dock-top .p-dock-item-second-prev, -.p-dock.p-dock-top .p-dock-item-second-next, .p-dock.p-dock-bottom .p-dock-item-second-prev, -.p-dock.p-dock-bottom .p-dock-item-second-next { - margin: 0 0.9rem; - } - .p-dock.p-dock-top .p-dock-item-prev, -.p-dock.p-dock-top .p-dock-item-next, .p-dock.p-dock-bottom .p-dock-item-prev, -.p-dock.p-dock-bottom .p-dock-item-next { - margin: 0 1.3rem; - } - .p-dock.p-dock-top .p-dock-item-current, .p-dock.p-dock-bottom .p-dock-item-current { - margin: 0 1.5rem; - } - .p-dock.p-dock-left .p-dock-item-second-prev, -.p-dock.p-dock-left .p-dock-item-second-next, .p-dock.p-dock-right .p-dock-item-second-prev, -.p-dock.p-dock-right .p-dock-item-second-next { - margin: 0.9rem 0; - } - .p-dock.p-dock-left .p-dock-item-prev, -.p-dock.p-dock-left .p-dock-item-next, .p-dock.p-dock-right .p-dock-item-prev, -.p-dock.p-dock-right .p-dock-item-next { - margin: 1.3rem 0; - } - .p-dock.p-dock-left .p-dock-item-current, .p-dock.p-dock-right .p-dock-item-current { - margin: 1.5rem 0; - } - .p-dock.p-dock-mobile.p-dock-top .p-dock-list-container, .p-dock.p-dock-mobile.p-dock-bottom .p-dock-list-container { - overflow-x: auto; - width: 100%; - } - .p-dock.p-dock-mobile.p-dock-top .p-dock-list-container .p-dock-list, .p-dock.p-dock-mobile.p-dock-bottom .p-dock-list-container .p-dock-list { - margin: 0 auto; - } - .p-dock.p-dock-mobile.p-dock-left .p-dock-list-container, .p-dock.p-dock-mobile.p-dock-right .p-dock-list-container { - overflow-y: auto; - height: 100%; - } - .p-dock.p-dock-mobile.p-dock-left .p-dock-list-container .p-dock-list, .p-dock.p-dock-mobile.p-dock-right .p-dock-list-container .p-dock-list { - margin: auto 0; - } - .p-dock.p-dock-mobile .p-dock-list .p-dock-item { - transform: none; - margin: 0; - } - - .p-megamenu { - display: flex; - position: relative; - } - - .p-megamenu-root-list { - margin: 0; - padding: 0; - list-style: none; - } - - .p-megamenu .p-menuitem-link { - cursor: pointer; - display: flex; - align-items: center; - text-decoration: none; - overflow: hidden; - position: relative; - } - - .p-megamenu .p-menuitem-text { - line-height: 1; - } - - .p-megamenu-panel { - display: none; - width: auto; - z-index: 1; - left: 0; - min-width: 100%; - } - - .p-megamenu-panel:not(.p-megamenu-mobile) { - position: absolute; - } - - .p-megamenu-root-list > .p-menuitem-active > .p-megamenu-panel { - display: block; - } - - .p-megamenu-submenu { - margin: 0; - padding: 0; - list-style: none; - } - - .p-megamenu-button { - display: none; - cursor: pointer; - align-items: center; - justify-content: center; - text-decoration: none; - } - - /* Horizontal */ - .p-megamenu-horizontal { - align-items: center; - } - - .p-megamenu-horizontal .p-megamenu-root-list { - display: flex; - align-items: center; - flex-wrap: wrap; - } - - .p-megamenu-horizontal .p-megamenu-end { - margin-left: auto; - align-self: center; - } - - /* Vertical */ - .p-megamenu-vertical { - flex-direction: column; - } - - .p-megamenu-vertical:not(.p-megamenu-mobile) { - display: inline-flex; - } - - .p-megamenu-vertical .p-megamenu-root-list { - flex-direction: column; - } - - .p-megamenu-vertical:not(.p-megamenu-mobile) .p-megamenu-root-list > .p-menuitem-active > .p-megamenu-panel { - left: 100%; - top: 0; - } - - .p-megamenu-vertical .p-megamenu-root-list > .p-menuitem > .p-menuitem-content > .p-menuitem-link > .p-submenu-icon { - margin-left: auto; - } - - .p-megamenu-grid { - display: flex; - } - - .p-megamenu-col-2, -.p-megamenu-col-3, -.p-megamenu-col-4, -.p-megamenu-col-6, -.p-megamenu-col-12 { - flex: 0 0 auto; - padding: 0.5rem; - } - - .p-megamenu-col-2 { - width: 16.6667%; - } - - .p-megamenu-col-3 { - width: 25%; - } - - .p-megamenu-col-4 { - width: 33.3333%; - } - - .p-megamenu-col-6 { - width: 50%; - } - - .p-megamenu-col-12 { - width: 100%; - } - - .p-megamenu.p-megamenu-mobile .p-megamenu-button { - display: flex; - } - - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list { - position: absolute; - display: none; - width: 100%; - } - - .p-megamenu.p-megamenu-mobile .p-submenu-list { - width: 100%; - position: static; - box-shadow: none; - border: 0 none; - } - - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list .p-menuitem { - width: 100%; - position: static; - } - - .p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list { - display: flex; - flex-direction: column; - top: 100%; - left: 0; - z-index: 1; - } - - .p-megamenu.p-megamenu-mobile .p-megamenu-grid { - flex-wrap: wrap; - overflow: auto; - max-height: 90%; - } - - .p-megamenu { - padding: 0.5rem 0.5rem; - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-radius: 6px; - } - .p-megamenu .p-megamenu-root-list { - outline: 0 none; - } - .p-megamenu .p-menuitem { - margin: 2px 0; - } - .p-megamenu .p-menuitem:first-child { - margin-top: 0; - } - .p-megamenu .p-menuitem:last-child { - margin-bottom: 0; - } - .p-megamenu .p-menuitem > .p-menuitem-content { - color: #334155; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-megamenu .p-menuitem > .p-menuitem-content .p-menuitem-link { - color: #334155; - padding: 0.5rem 0.75rem; - user-select: none; - } - .p-megamenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-megamenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { - color: #94a3b8; - margin-right: 0.5rem; - } - .p-megamenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #94a3b8; - } - .p-megamenu .p-menuitem.p-highlight > .p-menuitem-content { - color: #6D28D9; - background: #F5F3FF; - } - .p-megamenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #6D28D9; - } - .p-megamenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-megamenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #6D28D9; - } - .p-megamenu .p-menuitem.p-highlight.p-focus > .p-menuitem-content { - background: rgba(139, 92, 246, 0.24); - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { - color: #334155; - background: #f1f5f9; - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover { - color: #334155; - background: #f1f5f9; - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { - color: #334155; - background: #f1f5f9; - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-megamenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-megamenu .p-megamenu-panel { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - border-radius: 6px; - } - .p-megamenu .p-submenu-header { - margin: 0; - padding: 0.5rem 0.75rem; - color: #94a3b8; - background: #ffffff; - font-weight: 600; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-megamenu .p-submenu-list { - padding: 0.25rem 0.25rem; - min-width: 12.5rem; - } - .p-megamenu .p-submenu-list .p-menuitem-separator { - border-top: 1px solid #e2e8f0; - margin: 2px 0; - } - .p-megamenu.p-megamenu-vertical { - min-width: 12.5rem; - padding: 0.25rem 0.25rem; - } - .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem > .p-menuitem-content { - color: #334155; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - } - .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link { - padding: 0.5rem 0.75rem; - user-select: none; - } - .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { - color: #94a3b8; - margin-right: 0.5rem; - } - .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #94a3b8; - margin-left: 0.5rem; - } - .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { - color: #334155; - background: #f1f5f9; - } - .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-megamenu.p-megamenu-horizontal .p-megamenu-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-megamenu.p-megamenu-mobile.p-megamenu-vertical { - width: 100%; - padding: 0.5rem 0.5rem; - } - .p-megamenu.p-megamenu-mobile .p-megamenu-button { - width: 1.75rem; - height: 1.75rem; - color: #94a3b8; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-megamenu.p-megamenu-mobile .p-megamenu-button:hover { - color: #334155; - background: #f1f5f9; - } - .p-megamenu.p-megamenu-mobile .p-megamenu-button:focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list { - padding: 0.25rem 0.25rem; - background: #ffffff; - border: 1px solid #e2e8f0; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list .p-menuitem-separator { - border-top: 1px solid #e2e8f0; - margin: 2px 0; - } - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list .p-submenu-icon { - font-size: 0.875rem; - } - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list .p-menuitem .p-menuitem-content .p-menuitem-link .p-submenu-icon { - margin-left: auto; - transition: transform 0.2s; - } - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list .p-menuitem.p-menuitem-active > .p-menuitem-content > .p-menuitem-link > .p-submenu-icon { - transform: rotate(-180deg); - } - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list .p-submenu-list .p-submenu-icon { - transition: transform 0.2s; - transform: rotate(90deg); - } - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list .p-submenu-list .p-menuitem-active > .p-menuitem-content > .p-menuitem-link > .p-submenu-icon { - transform: rotate(-90deg); - } - .p-megamenu.p-megamenu-mobile .p-megamenu-root-list .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { - padding-left: 1.5rem; - } - - .p-menu ul { - margin: 0; - padding: 0; - list-style: none; - } - - .p-menu .p-menuitem-link { - cursor: pointer; - display: flex; - align-items: center; - text-decoration: none; - overflow: hidden; - position: relative; - } - - .p-menu .p-menuitem-text { - line-height: 1; - } - - .p-menu { - padding: 0.25rem 0.25rem; - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-radius: 6px; - min-width: 12.5rem; - } - .p-menu .p-menuitem { - margin: 2px 0; - } - .p-menu .p-menuitem:first-child { - margin-top: 0; - } - .p-menu .p-menuitem:last-child { - margin-bottom: 0; - } - .p-menu .p-menuitem > .p-menuitem-content { - color: #334155; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-menu .p-menuitem > .p-menuitem-content .p-menuitem-link { - color: #334155; - padding: 0.5rem 0.75rem; - user-select: none; - } - .p-menu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-menu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { - color: #94a3b8; - margin-right: 0.5rem; - } - .p-menu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #94a3b8; - } - .p-menu .p-menuitem.p-highlight > .p-menuitem-content { - color: #6D28D9; - background: #F5F3FF; - } - .p-menu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #6D28D9; - } - .p-menu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-menu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #6D28D9; - } - .p-menu .p-menuitem.p-highlight.p-focus > .p-menuitem-content { - background: rgba(139, 92, 246, 0.24); - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { - color: #334155; - background: #f1f5f9; - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover { - color: #334155; - background: #f1f5f9; - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { - color: #334155; - background: #f1f5f9; - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-menu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-menu.p-menu-overlay { - background: #ffffff; - border: 1px solid #e2e8f0; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-menu .p-submenu-header { - margin: 0; - padding: 0.5rem 0.75rem; - color: #94a3b8; - background: #ffffff; - font-weight: 600; - border-top-right-radius: 0; - border-top-left-radius: 0; - } - .p-menu .p-menuitem-separator { - border-top: 1px solid #e2e8f0; - margin: 2px 0; - } - - .p-menubar { - display: flex; - align-items: center; - } - - .p-menubar ul { - margin: 0; - padding: 0; - list-style: none; - } - - .p-menubar .p-menuitem-link { - cursor: pointer; - display: flex; - align-items: center; - text-decoration: none; - overflow: hidden; - position: relative; - } - - .p-menubar .p-menuitem-text { - line-height: 1; - } - - .p-menubar .p-menuitem { - position: relative; - } - - .p-menubar-root-list { - display: flex; - align-items: center; - flex-wrap: wrap; - } - - .p-menubar-root-list > li ul { - display: none; - z-index: 1; - } - - .p-menubar-root-list > .p-menuitem-active > .p-submenu-list { - display: block; - } - - .p-menubar .p-submenu-list { - display: none; - position: absolute; - z-index: 1; - } - - .p-menubar .p-submenu-list > .p-menuitem-active > .p-submenu-list { - display: block; - left: 100%; - top: 0; - } - - .p-menubar .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link .p-submenu-icon { - margin-left: auto; - } - - .p-menubar .p-menubar-end { - margin-left: auto; - align-self: center; - } - - .p-menubar-button { - display: none; - cursor: pointer; - align-items: center; - justify-content: center; - text-decoration: none; - } - - .p-menubar.p-menubar-mobile { - position: relative; - } - - .p-menubar.p-menubar-mobile .p-menubar-button { - display: flex; - } - - .p-menubar.p-menubar-mobile .p-menubar-root-list { - position: absolute; - display: none; - width: 100%; - } - - .p-menubar.p-menubar-mobile .p-submenu-list { - width: 100%; - position: static; - box-shadow: none; - border: 0 none; - } - - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-menuitem { - width: 100%; - position: static; - } - - .p-menubar.p-menubar-mobile-active .p-menubar-root-list { - display: flex; - flex-direction: column; - top: 100%; - left: 0; - z-index: 1; - } - - .p-menubar { - padding: 0.5rem 0.5rem; - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-radius: 6px; - } - .p-menubar .p-menubar-root-list { - outline: 0 none; - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-content { - color: #334155; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link { - padding: 0.5rem 0.75rem; - user-select: none; - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { - color: #94a3b8; - margin-right: 0.5rem; - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #94a3b8; - margin-left: 0.5rem; - } - .p-menubar .p-menubar-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { - color: #334155; - background: #f1f5f9; - } - .p-menubar .p-menubar-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-menubar .p-menubar-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-menubar .p-menubar-root-list > .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-menubar .p-menuitem { - margin: 2px 0; - } - .p-menubar .p-menuitem:first-child { - margin-top: 0; - } - .p-menubar .p-menuitem:last-child { - margin-bottom: 0; - } - .p-menubar .p-menuitem > .p-menuitem-content { - color: #334155; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-menubar .p-menuitem > .p-menuitem-content .p-menuitem-link { - color: #334155; - padding: 0.5rem 0.75rem; - user-select: none; - } - .p-menubar .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-menubar .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { - color: #94a3b8; - margin-right: 0.5rem; - } - .p-menubar .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #94a3b8; - } - .p-menubar .p-menuitem.p-highlight > .p-menuitem-content { - color: #6D28D9; - background: #F5F3FF; - } - .p-menubar .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #6D28D9; - } - .p-menubar .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-menubar .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #6D28D9; - } - .p-menubar .p-menuitem.p-highlight.p-focus > .p-menuitem-content { - background: rgba(139, 92, 246, 0.24); - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { - color: #334155; - background: #f1f5f9; - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover { - color: #334155; - background: #f1f5f9; - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { - color: #334155; - background: #f1f5f9; - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-menubar .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-menubar .p-submenu-list { - padding: 0.25rem 0.25rem; - background: #ffffff; - border: 1px solid #e2e8f0; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - min-width: 12.5rem; - border-radius: 6px; - } - .p-menubar .p-submenu-list .p-menuitem-separator { - border-top: 1px solid #e2e8f0; - margin: 2px 0; - } - .p-menubar .p-submenu-list .p-submenu-icon { - font-size: 0.875rem; - } - .p-menubar.p-menubar-mobile .p-menubar-button { - width: 1.75rem; - height: 1.75rem; - color: #94a3b8; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-menubar.p-menubar-mobile .p-menubar-button:hover { - color: #334155; - background: #f1f5f9; - } - .p-menubar.p-menubar-mobile .p-menubar-button:focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-menubar.p-menubar-mobile .p-menubar-root-list { - padding: 0.25rem 0.25rem; - background: #ffffff; - border: 1px solid #e2e8f0; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-menuitem-separator { - border-top: 1px solid #e2e8f0; - margin: 2px 0; - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-submenu-icon { - font-size: 0.875rem; - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-menuitem .p-menuitem-content .p-menuitem-link .p-submenu-icon { - margin-left: auto; - transition: transform 0.2s; - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-menuitem.p-menuitem-active > .p-menuitem-content > .p-menuitem-link > .p-submenu-icon { - transform: rotate(-180deg); - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-submenu-list .p-submenu-icon { - transition: transform 0.2s; - transform: rotate(90deg); - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-submenu-list .p-menuitem-active > .p-menuitem-content > .p-menuitem-link > .p-submenu-icon { - transform: rotate(-90deg); - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { - padding-left: 1.5rem; - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { - padding-left: 2.5rem; - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { - padding-left: 3.5rem; - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { - padding-left: 4.5rem; - } - .p-menubar.p-menubar-mobile .p-menubar-root-list .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-submenu-list .p-menuitem .p-menuitem-content .p-menuitem-link { - padding-left: 5.5rem; - } - - .p-panelmenu .p-panelmenu-header-action { - display: flex; - align-items: center; - user-select: none; - cursor: pointer; - position: relative; - text-decoration: none; - } - - .p-panelmenu .p-panelmenu-header-action:focus { - z-index: 1; - } - - .p-panelmenu .p-submenu-list { - margin: 0; - padding: 0; - list-style: none; - } - - .p-panelmenu .p-menuitem-link { - display: flex; - align-items: center; - user-select: none; - cursor: pointer; - text-decoration: none; - position: relative; - overflow: hidden; - } - - .p-panelmenu .p-menuitem-text { - line-height: 1; - } - - .p-panelmenu .p-panelmenu-header { - outline: 0 none; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content { - border: 0 none; - color: #64748b; - background: #ffffff; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action { - color: #64748b; - padding: 1.125rem 1.125rem 1.125rem 1.125rem; - font-weight: 600; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-submenu-icon { - margin-right: 0.5rem; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-icon { - margin-right: 0.5rem; - } - .p-panelmenu .p-panelmenu-header:not(.p-disabled):focus-visible .p-panelmenu-header-content { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -2px; - box-shadow: inset none; - } - .p-panelmenu .p-panelmenu-header:not(.p-highlight):not(.p-disabled):hover .p-panelmenu-header-content { - background: #ffffff; - border-color: #e2e8f0; - color: #334155; - } - .p-panelmenu .p-panelmenu-header:not(.p-disabled).p-highlight .p-panelmenu-header-content { - background: #ffffff; - border-color: #e2e8f0; - color: #334155; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - margin-bottom: 0; - } - .p-panelmenu .p-panelmenu-header:not(.p-disabled).p-highlight:hover .p-panelmenu-header-content { - border-color: #e2e8f0; - background: #ffffff; - color: #334155; - } - .p-panelmenu .p-panelmenu-content { - padding: 0.25rem 0.25rem; - border: 0 none; - background: #ffffff; - color: #334155; - border-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-panelmenu .p-panelmenu-content .p-panelmenu-root-list { - outline: 0 none; - } - .p-panelmenu .p-panelmenu-content .p-menuitem { - margin: 2px 0; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:first-child { - margin-top: 0; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:last-child { - margin-bottom: 0; - } - .p-panelmenu .p-panelmenu-content .p-menuitem > .p-menuitem-content { - color: #334155; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-panelmenu .p-panelmenu-content .p-menuitem > .p-menuitem-content .p-menuitem-link { - color: #334155; - padding: 0.5rem 0.75rem; - user-select: none; - } - .p-panelmenu .p-panelmenu-content .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-panelmenu .p-panelmenu-content .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { - color: #94a3b8; - margin-right: 0.5rem; - } - .p-panelmenu .p-panelmenu-content .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #94a3b8; - } - .p-panelmenu .p-panelmenu-content .p-menuitem.p-highlight > .p-menuitem-content { - color: #6D28D9; - background: #F5F3FF; - } - .p-panelmenu .p-panelmenu-content .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #6D28D9; - } - .p-panelmenu .p-panelmenu-content .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-panelmenu .p-panelmenu-content .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #6D28D9; - } - .p-panelmenu .p-panelmenu-content .p-menuitem.p-highlight.p-focus > .p-menuitem-content { - background: rgba(139, 92, 246, 0.24); - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { - color: #334155; - background: #f1f5f9; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover { - color: #334155; - background: #f1f5f9; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { - color: #334155; - background: #f1f5f9; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-panelmenu .p-panelmenu-content .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-content .p-menuitem-link .p-submenu-icon { - margin-right: 0.5rem; - } - .p-panelmenu .p-panelmenu-content .p-menuitem-separator { - border-top: 1px solid #e2e8f0; - margin: 2px 0; - } - .p-panelmenu .p-panelmenu-content .p-submenu-list:not(.p-panelmenu-root-list) { - padding: 0 0 0 1rem; - } - .p-panelmenu .p-panelmenu-panel { - margin-bottom: 0; - } - .p-panelmenu .p-panelmenu-panel .p-panelmenu-header .p-panelmenu-header-content { - border-radius: 0; - } - .p-panelmenu .p-panelmenu-panel .p-panelmenu-content { - border-radius: 0; - } - .p-panelmenu .p-panelmenu-panel:not(:first-child) .p-panelmenu-header .p-panelmenu-header-content { - border-top: 0 none; - } - .p-panelmenu .p-panelmenu-panel:not(:first-child) .p-panelmenu-header:not(.p-highlight):not(.p-disabled):hover .p-panelmenu-header-content, .p-panelmenu .p-panelmenu-panel:not(:first-child) .p-panelmenu-header:not(.p-disabled).p-highlight:hover .p-panelmenu-header-content { - border-top: 0 none; - } - .p-panelmenu .p-panelmenu-panel:first-child .p-panelmenu-header .p-panelmenu-header-content { - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-panelmenu .p-panelmenu-panel:last-child .p-panelmenu-header:not(.p-highlight) .p-panelmenu-header-content { - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-panelmenu .p-panelmenu-panel:last-child .p-panelmenu-content { - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - - .p-steps { - position: relative; - } - - .p-steps .p-steps-list { - padding: 0; - margin: 0; - list-style-type: none; - display: flex; - } - - .p-steps-item { - position: relative; - display: flex; - justify-content: center; - flex: 1 1 auto; - overflow: hidden; - } - - .p-steps-item .p-menuitem-link { - display: inline-flex; - flex-direction: column; - align-items: center; - overflow: hidden; - text-decoration: none; - cursor: pointer; - } - - .p-steps.p-steps-readonly .p-steps-item { - cursor: auto; - } - - .p-steps-item.p-steps-current .p-menuitem-link { - cursor: default; - } - - .p-steps-title { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 100%; - } - - .p-steps-number { - display: flex; - align-items: center; - justify-content: center; - } - - .p-steps-title { - display: block; - } - - .p-steps .p-steps-item .p-menuitem-link { - background: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - background: #ffffff; - outline-color: transparent; - } - .p-steps .p-steps-item .p-menuitem-link .p-steps-number { - color: #64748b; - border: 1px solid #e2e8f0; - background: #ffffff; - min-width: 2rem; - height: 2rem; - line-height: 2rem; - font-size: 1.143rem; - z-index: 1; - border-radius: 50%; - } - .p-steps .p-steps-item .p-menuitem-link .p-steps-title { - margin-top: 0.5rem; - color: #334155; - } - .p-steps .p-steps-item .p-menuitem-link:not(.p-disabled):focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-steps .p-steps-item.p-highlight .p-steps-number { - background: #F5F3FF; - color: #6D28D9; - } - .p-steps .p-steps-item.p-highlight .p-steps-title { - font-weight: 500; - color: #334155; - } - .p-steps .p-steps-item:before { - content: " "; - border-top: 1px solid #e2e8f0; - width: 100%; - top: 50%; - left: 0; - display: block; - position: absolute; - margin-top: -1rem; - } - - .p-tabmenu { - overflow-x: auto; - } - - .p-tabmenu-nav { - display: flex; - margin: 0; - padding: 0; - list-style-type: none; - flex-wrap: nowrap; - } - - .p-tabmenu-nav a { - cursor: pointer; - user-select: none; - display: flex; - align-items: center; - position: relative; - text-decoration: none; - text-decoration: none; - overflow: hidden; - } - - .p-tabmenu-nav a:focus { - z-index: 1; - } - - .p-tabmenu-nav .p-menuitem-text { - line-height: 1; - } - - .p-tabmenu-ink-bar { - display: none; - z-index: 1; - } - - .p-tabmenu::-webkit-scrollbar { - display: none; - } - - .p-tabmenu .p-tabmenu-nav { - background: #ffffff; - border: 1px solid #e2e8f0; - border-width: 0 0 1px 0; - } - .p-tabmenu .p-tabmenu-nav .p-tabmenuitem { - margin-right: 0; - } - .p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link { - border: solid #e2e8f0; - border-width: 0 0 1px 0; - border-color: transparent transparent #e2e8f0 transparent; - background: #ffffff; - color: #64748b; - padding: 1rem 1.125rem; - font-weight: 600; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - margin: 0 0 -1px 0; - outline-color: transparent; - } - .p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link .p-menuitem-icon { - margin-right: 0.5rem; - } - .p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link:not(.p-disabled):focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -2px; - box-shadow: inset none; - } - .p-tabmenu .p-tabmenu-nav .p-tabmenuitem:not(.p-highlight):not(.p-disabled):hover .p-menuitem-link { - background: #ffffff; - border-color: #e2e8f0; - color: #334155; - } - .p-tabmenu .p-tabmenu-nav .p-tabmenuitem.p-highlight .p-menuitem-link { - background: #ffffff; - border-color: #e2e8f0; - color: #8B5CF6; - } - - .p-tieredmenu ul { - margin: 0; - padding: 0; - list-style: none; - } - - .p-tieredmenu .p-submenu-list { - position: absolute; - min-width: 100%; - z-index: 1; - display: none; - } - - .p-tieredmenu .p-menuitem-link { - cursor: pointer; - display: flex; - align-items: center; - text-decoration: none; - overflow: hidden; - position: relative; - } - - .p-tieredmenu .p-menuitem-text { - line-height: 1; - } - - .p-tieredmenu .p-menuitem { - position: relative; - } - - .p-tieredmenu .p-menuitem-link .p-submenu-icon { - margin-left: auto; - } - - .p-tieredmenu .p-menuitem-active > .p-submenu-list { - display: block; - left: 100%; - top: 0; - } - - .p-tieredmenu-enter-from, -.p-tieredmenu-leave-active { - opacity: 0; - } - - .p-tieredmenu-enter-active { - transition: opacity 250ms; - } - - .p-tieredmenu { - padding: 0.25rem 0.25rem; - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - border-radius: 6px; - min-width: 12.5rem; - } - .p-tieredmenu.p-tieredmenu-overlay { - background: #ffffff; - border: 1px solid #e2e8f0; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-tieredmenu .p-tieredmenu-root-list { - outline: 0 none; - } - .p-tieredmenu .p-submenu-list { - padding: 0.25rem 0.25rem; - background: #ffffff; - border: 1px solid #e2e8f0; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - border-radius: 6px; - } - .p-tieredmenu .p-menuitem { - margin: 2px 0; - } - .p-tieredmenu .p-menuitem:first-child { - margin-top: 0; - } - .p-tieredmenu .p-menuitem:last-child { - margin-bottom: 0; - } - .p-tieredmenu .p-menuitem > .p-menuitem-content { - color: #334155; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 4px; - } - .p-tieredmenu .p-menuitem > .p-menuitem-content .p-menuitem-link { - color: #334155; - padding: 0.5rem 0.75rem; - user-select: none; - } - .p-tieredmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-tieredmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-menuitem-icon { - color: #94a3b8; - margin-right: 0.5rem; - } - .p-tieredmenu .p-menuitem > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #94a3b8; - } - .p-tieredmenu .p-menuitem.p-highlight > .p-menuitem-content { - color: #6D28D9; - background: #F5F3FF; - } - .p-tieredmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #6D28D9; - } - .p-tieredmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-tieredmenu .p-menuitem.p-highlight > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #6D28D9; - } - .p-tieredmenu .p-menuitem.p-highlight.p-focus > .p-menuitem-content { - background: rgba(139, 92, 246, 0.24); - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content { - color: #334155; - background: #f1f5f9; - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-menuitem-icon, .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover { - color: #334155; - background: #f1f5f9; - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled).p-focus > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover { - color: #334155; - background: #f1f5f9; - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-text { - color: #334155; - } - .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-menuitem-icon, .p-tieredmenu .p-menuitem:not(.p-highlight):not(.p-disabled) > .p-menuitem-content:hover .p-menuitem-link .p-submenu-icon { - color: #334155; - } - .p-tieredmenu .p-menuitem-separator { - border-top: 1px solid #e2e8f0; - margin: 2px 0; - } - .p-tieredmenu .p-submenu-icon { - font-size: 0.875rem; - } - .p-tieredmenu .p-submenu-icon.p-icon { - width: 0.875rem; - height: 0.875rem; - } - - .p-inline-message { - display: inline-flex; - align-items: center; - justify-content: center; - vertical-align: top; - } - - .p-inline-message-icon { - flex-shrink: 0; - } - - .p-inline-message-icon-only .p-inline-message-text { - visibility: hidden; - width: 0; - } - - .p-fluid .p-inline-message { - display: flex; - } - - .p-inline-message { - padding: 0.5rem 0.75rem; - margin: 0; - border-radius: 6px; - } - .p-inline-message.p-inline-message-info { - background: rgba(239, 246, 255, 0.95); - border: solid #bfdbfe; - border-width: 1px; - color: #2563eb; - } - .p-inline-message.p-inline-message-info .p-inline-message-icon { - color: #2563eb; - } - .p-inline-message.p-inline-message-success { - background: rgba(240, 253, 244, 0.95); - border: solid #bbf7d0; - border-width: 1px; - color: #16a34a; - } - .p-inline-message.p-inline-message-success .p-inline-message-icon { - color: #16a34a; - } - .p-inline-message.p-inline-message-warn { - background: rgba(254, 252, 232, 0.95); - border: solid #fde68a; - border-width: 1px; - color: #ca8a04; - } - .p-inline-message.p-inline-message-warn .p-inline-message-icon { - color: #ca8a04; - } - .p-inline-message.p-inline-message-error { - background: rgba(254, 242, 242, 0.95); - border: solid #fecaca; - border-width: 1px; - color: #dc2626; - } - .p-inline-message.p-inline-message-error .p-inline-message-icon { - color: #dc2626; - } - .p-inline-message.p-inline-message-secondary { - background: #f1f5f9; - border: solid #e2e8f0; - border-width: 1px; - color: #475569; - } - .p-inline-message.p-inline-message-secondary .p-inline-message-icon { - color: #475569; - } - .p-inline-message.p-inline-message-contrast { - background: #020617; - border: solid #64748b; - border-width: 1px; - color: #f8fafc; - } - .p-inline-message.p-inline-message-contrast .p-inline-message-icon { - color: #f8fafc; - } - .p-inline-message .p-inline-message-icon { - font-size: 1rem; - margin-right: 0.5rem; - } - .p-inline-message .p-inline-message-text { - font-size: 1rem; - } - .p-inline-message.p-inline-message-icon-only .p-inline-message-icon { - margin-right: 0; - } - - .p-message-wrapper { - display: flex; - align-items: center; - } - - .p-message-icon { - flex-shrink: 0; - } - - .p-message-close { - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - } - - .p-message-close.p-link { - margin-left: auto; - overflow: hidden; - position: relative; - } - - .p-message-enter-from { - opacity: 0; - } - - .p-message-enter-active { - transition: opacity 0.3s; - } - - .p-message.p-message-leave-from { - max-height: 1000px; - } - - .p-message.p-message-leave-to { - max-height: 0; - opacity: 0; - margin: 0; - } - - .p-message-leave-active { - overflow: hidden; - transition: max-height 0.3s cubic-bezier(0, 1, 0, 1), opacity 0.3s, margin 0.15s; - } - - .p-message-leave-active .p-message-close { - display: none; - } - - .p-message { - margin: 1rem 0; - border-radius: 6px; - } - .p-message .p-message-wrapper { - padding: 0.5rem 0.75rem; - } - .p-message .p-message-close { - width: 1.75rem; - height: 1.75rem; - border-radius: 50%; - background: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-message .p-message-close:hover { - background: rgba(255, 255, 255, 0.5); - } - .p-message .p-message-close:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-message.p-message-info { - background: rgba(239, 246, 255, 0.95); - border: solid #bfdbfe; - border-width: 1px; - color: #2563eb; - } - .p-message.p-message-info .p-message-icon { - color: #2563eb; - } - .p-message.p-message-info .p-message-close { - color: #2563eb; - } - .p-message.p-message-success { - background: rgba(240, 253, 244, 0.95); - border: solid #bbf7d0; - border-width: 1px; - color: #16a34a; - } - .p-message.p-message-success .p-message-icon { - color: #16a34a; - } - .p-message.p-message-success .p-message-close { - color: #16a34a; - } - .p-message.p-message-warn { - background: rgba(254, 252, 232, 0.95); - border: solid #fde68a; - border-width: 1px; - color: #ca8a04; - } - .p-message.p-message-warn .p-message-icon { - color: #ca8a04; - } - .p-message.p-message-warn .p-message-close { - color: #ca8a04; - } - .p-message.p-message-error { - background: rgba(254, 242, 242, 0.95); - border: solid #fecaca; - border-width: 1px; - color: #dc2626; - } - .p-message.p-message-error .p-message-icon { - color: #dc2626; - } - .p-message.p-message-error .p-message-close { - color: #dc2626; - } - .p-message.p-message-secondary { - background: #f1f5f9; - border: solid #e2e8f0; - border-width: 1px; - color: #475569; - } - .p-message.p-message-secondary .p-message-icon { - color: #475569; - } - .p-message.p-message-secondary .p-message-close { - color: #475569; - } - .p-message.p-message-contrast { - background: #020617; - border: solid #64748b; - border-width: 1px; - color: #f8fafc; - } - .p-message.p-message-contrast .p-message-icon { - color: #f8fafc; - } - .p-message.p-message-contrast .p-message-close { - color: #f8fafc; - } - .p-message .p-message-text { - font-size: 1rem; - font-weight: 500; - } - .p-message .p-message-icon { - font-size: 1rem; - margin-right: 0.5rem; - } - .p-message .p-icon:not(.p-message-close-icon) { - width: 1rem; - height: 1rem; - } - - .p-toast { - width: 25rem; - white-space: pre-line; - word-break: break-word; - } - - .p-toast-message-icon { - flex-shrink: 0; - } - - .p-toast-message-content { - display: flex; - align-items: flex-start; - } - - .p-toast-message-text { - flex: 1 1 auto; - } - - .p-toast-top-center { - transform: translateX(-50%); - } - - .p-toast-bottom-center { - transform: translateX(-50%); - } - - .p-toast-center { - min-width: 20vw; - transform: translate(-50%, -50%); - } - - .p-toast-icon-close { - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; - position: relative; - } - - .p-toast-icon-close.p-link { - cursor: pointer; - } - - /* Animations */ - .p-toast-message-enter-from { - opacity: 0; - -webkit-transform: translateY(50%); - -ms-transform: translateY(50%); - transform: translateY(50%); - } - - .p-toast-message-leave-from { - max-height: 1000px; - } - - .p-toast .p-toast-message.p-toast-message-leave-to { - max-height: 0; - opacity: 0; - margin-bottom: 0; - overflow: hidden; - } - - .p-toast-message-enter-active { - -webkit-transition: transform 0.3s, opacity 0.3s; - transition: transform 0.3s, opacity 0.3s; - } - - .p-toast-message-leave-active { - -webkit-transition: max-height 0.45s cubic-bezier(0, 1, 0, 1), opacity 0.3s, margin-bottom 0.3s; - transition: max-height 0.45s cubic-bezier(0, 1, 0, 1), opacity 0.3s, margin-bottom 0.3s; - } - - .p-toast { - opacity: 1; - } - .p-toast .p-toast-message { - margin: 0 0 1rem 0; - box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); - border-radius: 6px; - } - .p-toast .p-toast-message .p-toast-message-content { - padding: 0.75rem; - border-width: 1px; - } - .p-toast .p-toast-message .p-toast-message-content .p-toast-message-text { - margin: 0 0 0 0.5rem; - } - .p-toast .p-toast-message .p-toast-message-content .p-toast-message-icon { - font-size: 1.125rem; - } - .p-toast .p-toast-message .p-toast-message-content .p-toast-message-icon.p-icon { - width: 1.125rem; - height: 1.125rem; - } - .p-toast .p-toast-message .p-toast-message-content .p-toast-summary { - font-weight: 500; - } - .p-toast .p-toast-message .p-toast-message-content .p-toast-detail { - margin: 0.5rem 0 0 0; - } - .p-toast .p-toast-message .p-toast-icon-close { - width: 1.125rem; - height: 1.125rem; - border-radius: 50%; - background: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-toast .p-toast-message .p-toast-icon-close:hover { - background: rgba(255, 255, 255, 0.5); - } - .p-toast .p-toast-message .p-toast-icon-close:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-toast .p-toast-message.p-toast-message-info { - background: rgba(239, 246, 255, 0.95); - border: solid #bfdbfe; - border-width: 1px; - color: #2563eb; - } - .p-toast .p-toast-message.p-toast-message-info .p-toast-message-icon, -.p-toast .p-toast-message.p-toast-message-info .p-toast-icon-close { - color: #2563eb; - } - .p-toast .p-toast-message.p-toast-message-success { - background: rgba(240, 253, 244, 0.95); - border: solid #bbf7d0; - border-width: 1px; - color: #16a34a; - } - .p-toast .p-toast-message.p-toast-message-success .p-toast-message-icon, -.p-toast .p-toast-message.p-toast-message-success .p-toast-icon-close { - color: #16a34a; - } - .p-toast .p-toast-message.p-toast-message-warn { - background: rgba(254, 252, 232, 0.95); - border: solid #fde68a; - border-width: 1px; - color: #ca8a04; - } - .p-toast .p-toast-message.p-toast-message-warn .p-toast-message-icon, -.p-toast .p-toast-message.p-toast-message-warn .p-toast-icon-close { - color: #ca8a04; - } - .p-toast .p-toast-message.p-toast-message-error { - background: rgba(254, 242, 242, 0.95); - border: solid #fecaca; - border-width: 1px; - color: #dc2626; - } - .p-toast .p-toast-message.p-toast-message-error .p-toast-message-icon, -.p-toast .p-toast-message.p-toast-message-error .p-toast-icon-close { - color: #dc2626; - } - .p-toast .p-toast-message.p-toast-message-secondary { - background: #f1f5f9; - border: solid #e2e8f0; - border-width: 1px; - color: #475569; - } - .p-toast .p-toast-message.p-toast-message-secondary .p-toast-message-icon, -.p-toast .p-toast-message.p-toast-message-secondary .p-toast-icon-close { - color: #475569; - } - .p-toast .p-toast-message.p-toast-message-contrast { - background: #020617; - border: solid #64748b; - border-width: 1px; - color: #f8fafc; - } - .p-toast .p-toast-message.p-toast-message-contrast .p-toast-message-icon, -.p-toast .p-toast-message.p-toast-message-contrast .p-toast-icon-close { - color: #f8fafc; - } - - .p-galleria-content { - display: flex; - flex-direction: column; - } - - .p-galleria-item-wrapper { - display: flex; - flex-direction: column; - position: relative; - } - - .p-galleria-item-container { - position: relative; - display: flex; - height: 100%; - } - - .p-galleria-item-nav { - position: absolute; - top: 50%; - margin-top: -0.5rem; - display: inline-flex; - justify-content: center; - align-items: center; - overflow: hidden; - } - - .p-galleria-item-prev { - left: 0; - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - .p-galleria-item-next { - right: 0; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - .p-galleria-item { - display: flex; - justify-content: center; - align-items: center; - height: 100%; - width: 100%; - } - - .p-galleria-item-nav-onhover .p-galleria-item-nav { - pointer-events: none; - opacity: 0; - transition: opacity 0.2s ease-in-out; - } - - .p-galleria-item-nav-onhover .p-galleria-item-wrapper:hover .p-galleria-item-nav { - pointer-events: all; - opacity: 1; - } - - .p-galleria-item-nav-onhover .p-galleria-item-wrapper:hover .p-galleria-item-nav.p-disabled { - pointer-events: none; - } - - .p-galleria-caption { - position: absolute; - bottom: 0; - left: 0; - width: 100%; - } - - /* Thumbnails */ - .p-galleria-thumbnail-wrapper { - display: flex; - flex-direction: column; - overflow: auto; - flex-shrink: 0; - } - - .p-galleria-thumbnail-prev, -.p-galleria-thumbnail-next { - align-self: center; - flex: 0 0 auto; - display: flex; - justify-content: center; - align-items: center; - overflow: hidden; - position: relative; - } - - .p-galleria-thumbnail-prev span, -.p-galleria-thumbnail-next span { - display: flex; - justify-content: center; - align-items: center; - } - - .p-galleria-thumbnail-container { - display: flex; - flex-direction: row; - } - - .p-galleria-thumbnail-items-container { - overflow: hidden; - width: 100%; - } - - .p-galleria-thumbnail-items { - display: flex; - } - - .p-galleria-thumbnail-item { - overflow: auto; - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - opacity: 0.5; - } - - .p-galleria-thumbnail-item:hover { - opacity: 1; - transition: opacity 0.3s; - } - - .p-galleria-thumbnail-item-current { - opacity: 1; - } - - /* Positions */ - /* Thumbnails */ - .p-galleria-thumbnails-left .p-galleria-content, -.p-galleria-thumbnails-right .p-galleria-content { - flex-direction: row; - } - - .p-galleria-thumbnails-left .p-galleria-item-wrapper, -.p-galleria-thumbnails-right .p-galleria-item-wrapper { - flex-direction: row; - } - - .p-galleria-thumbnails-left .p-galleria-item-wrapper, -.p-galleria-thumbnails-top .p-galleria-item-wrapper { - order: 2; - } - - .p-galleria-thumbnails-left .p-galleria-thumbnail-wrapper, -.p-galleria-thumbnails-top .p-galleria-thumbnail-wrapper { - order: 1; - } - - .p-galleria-thumbnails-left .p-galleria-thumbnail-container, -.p-galleria-thumbnails-right .p-galleria-thumbnail-container { - flex-direction: column; - flex-grow: 1; - } - - .p-galleria-thumbnails-left .p-galleria-thumbnail-items, -.p-galleria-thumbnails-right .p-galleria-thumbnail-items { - flex-direction: column; - height: 100%; - } - - /* Indicators */ - .p-galleria-indicators { - display: flex; - align-items: center; - justify-content: center; - } - - .p-galleria-indicator > button { - display: inline-flex; - align-items: center; - } - - .p-galleria-indicators-left .p-galleria-item-wrapper, -.p-galleria-indicators-right .p-galleria-item-wrapper { - flex-direction: row; - align-items: center; - } - - .p-galleria-indicators-left .p-galleria-item-container, -.p-galleria-indicators-top .p-galleria-item-container { - order: 2; - } - - .p-galleria-indicators-left .p-galleria-indicators, -.p-galleria-indicators-top .p-galleria-indicators { - order: 1; - } - - .p-galleria-indicators-left .p-galleria-indicators, -.p-galleria-indicators-right .p-galleria-indicators { - flex-direction: column; - } - - .p-galleria-indicator-onitem .p-galleria-indicators { - position: absolute; - display: flex; - z-index: 1; - } - - .p-galleria-indicator-onitem.p-galleria-indicators-top .p-galleria-indicators { - top: 0; - left: 0; - width: 100%; - align-items: flex-start; - } - - .p-galleria-indicator-onitem.p-galleria-indicators-right .p-galleria-indicators { - right: 0; - top: 0; - height: 100%; - align-items: flex-end; - } - - .p-galleria-indicator-onitem.p-galleria-indicators-bottom .p-galleria-indicators { - bottom: 0; - left: 0; - width: 100%; - align-items: flex-end; - } - - .p-galleria-indicator-onitem.p-galleria-indicators-left .p-galleria-indicators { - left: 0; - top: 0; - height: 100%; - align-items: flex-start; - } - - /* FullScreen */ - .p-galleria-mask { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; - } - - .p-galleria-close { - position: absolute; - top: 0; - right: 0; - display: flex; - justify-content: center; - align-items: center; - overflow: hidden; - } - - .p-galleria-mask .p-galleria-item-nav { - position: fixed; - top: 50%; - margin-top: -0.5rem; - } - - /* Animation */ - .p-galleria-enter-active { - transition: all 150ms cubic-bezier(0, 0, 0.2, 1); - } - - .p-galleria-leave-active { - transition: all 150ms cubic-bezier(0.4, 0, 0.2, 1); - } - - .p-galleria-enter-from, -.p-galleria-leave-to { - opacity: 0; - transform: scale(0.7); - } - - .p-galleria-enter-active .p-galleria-item-nav { - opacity: 0; - } - - /* Keyboard Support */ - .p-items-hidden .p-galleria-thumbnail-item { - visibility: hidden; - } - - .p-items-hidden .p-galleria-thumbnail-item.p-galleria-thumbnail-item-active { - visibility: visible; - } - - .p-galleria .p-galleria-close { - margin: 0.5rem; - background: transparent; - color: #f1f5f9; - width: 4rem; - height: 4rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 50%; - } - .p-galleria .p-galleria-close .p-galleria-close-icon { - font-size: 2rem; - } - .p-galleria .p-galleria-close .p-icon { - width: 2rem; - height: 2rem; - } - .p-galleria .p-galleria-close:hover { - background: rgba(255, 255, 255, 0.1); - color: #f1f5f9; - } - .p-galleria .p-galleria-item-nav { - background: transparent; - color: #f1f5f9; - width: 4rem; - height: 4rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 6px; - margin: 0 0.5rem; - } - .p-galleria .p-galleria-item-nav .p-galleria-item-prev-icon, -.p-galleria .p-galleria-item-nav .p-galleria-item-next-icon { - font-size: 2rem; - } - .p-galleria .p-galleria-item-nav .p-icon { - width: 2rem; - height: 2rem; - } - .p-galleria .p-galleria-item-nav:not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.1); - color: #f1f5f9; - } - .p-galleria .p-galleria-caption { - background: rgba(0, 0, 0, 0.5); - color: #f1f5f9; - padding: 1rem; - } - .p-galleria .p-galleria-indicators { - padding: 1rem; - } - .p-galleria .p-galleria-indicators .p-galleria-indicator button { - background-color: #e2e8f0; - width: 1rem; - height: 1rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 50%; - } - .p-galleria .p-galleria-indicators .p-galleria-indicator button:hover { - background: #cbd5e1; - } - .p-galleria .p-galleria-indicators .p-galleria-indicator.p-highlight button { - background: #F5F3FF; - color: #6D28D9; - } - .p-galleria.p-galleria-indicators-bottom .p-galleria-indicator, .p-galleria.p-galleria-indicators-top .p-galleria-indicator { - margin-right: 0.5rem; - } - .p-galleria.p-galleria-indicators-left .p-galleria-indicator, .p-galleria.p-galleria-indicators-right .p-galleria-indicator { - margin-bottom: 0.5rem; - } - .p-galleria.p-galleria-indicator-onitem .p-galleria-indicators { - background: rgba(0, 0, 0, 0.5); - } - .p-galleria.p-galleria-indicator-onitem .p-galleria-indicators .p-galleria-indicator button { - background: rgba(255, 255, 255, 0.4); - } - .p-galleria.p-galleria-indicator-onitem .p-galleria-indicators .p-galleria-indicator button:hover { - background: rgba(255, 255, 255, 0.6); - } - .p-galleria.p-galleria-indicator-onitem .p-galleria-indicators .p-galleria-indicator.p-highlight button { - background: #F5F3FF; - color: #6D28D9; - } - .p-galleria .p-galleria-thumbnail-container { - background: rgba(0, 0, 0, 0.9); - padding: 1rem 0.25rem; - } - .p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-prev, -.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-next { - margin: 0.5rem; - background-color: transparent; - color: #f1f5f9; - width: 2rem; - height: 2rem; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border-radius: 50%; - } - .p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-prev:hover, -.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-next:hover { - background: rgba(255, 255, 255, 0.1); - color: #f1f5f9; - } - .p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-item-content { - outline-color: transparent; - } - .p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-item-content:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-galleria-mask { - --maskbg: rgba(0, 0, 0, 0.9); - } - - .p-image-mask { - display: flex; - align-items: center; - justify-content: center; - } - - .p-image-preview-container { - position: relative; - display: inline-block; - line-height: 0; - } - - .p-image-preview-indicator { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; - opacity: 0; - transition: opacity 0.3s; - border: none; - padding: 0; - } - - .p-image-preview-container:hover > .p-image-preview-indicator { - opacity: 1; - cursor: pointer; - } - - .p-image-preview-container > img { - cursor: pointer; - } - - .p-image-toolbar { - position: absolute; - top: 0; - right: 0; - display: flex; - z-index: 1; - } - - .p-image-action.p-link { - display: flex; - justify-content: center; - align-items: center; - } - - .p-image-action.p-disabled { - pointer-events: auto; - } - - .p-image-preview { - transition: transform 0.15s; - max-width: 100vw; - max-height: 100vh; - } - - .p-image-preview-enter-active { - transition: all 150ms cubic-bezier(0, 0, 0.2, 1); - } - - .p-image-preview-leave-active { - transition: all 150ms cubic-bezier(0.4, 0, 0.2, 1); - } - - .p-image-preview-enter-from, -.p-image-preview-leave-to { - opacity: 0; - transform: scale(0.7); - } - - .p-image-mask { - --maskbg: rgba(0, 0, 0, 0.9); - } - - .p-image-preview-indicator { - background-color: transparent; - color: #f8fafc; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-image-preview-indicator .p-icon { - width: 1.5rem; - height: 1.5rem; - } - - .p-image-preview-container:hover > .p-image-preview-indicator { - background-color: rgba(0, 0, 0, 0.5); - } - - .p-image-toolbar { - padding: 1rem; - } - - .p-image-action.p-link { - color: #f8fafc; - background-color: transparent; - width: 3rem; - height: 3rem; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - margin-right: 0.5rem; - } - .p-image-action.p-link:last-child { - margin-right: 0; - } - .p-image-action.p-link:hover { - color: #ffffff; - background-color: rgba(255, 255, 255, 0.1); - } - .p-image-action.p-link i { - font-size: 1.5rem; - } - .p-image-action.p-link .p-icon { - width: 1.5rem; - height: 1.5rem; - } - - .p-avatar { - display: inline-flex; - align-items: center; - justify-content: center; - width: 2rem; - height: 2rem; - font-size: 1rem; - } - - .p-avatar.p-avatar-image { - background-color: transparent; - } - - .p-avatar.p-avatar-circle { - border-radius: 50%; - } - - .p-avatar-circle img { - border-radius: 50%; - } - - .p-avatar .p-avatar-icon { - font-size: 1rem; - } - - .p-avatar img { - width: 100%; - height: 100%; - } - - .p-avatar-group .p-avatar + .p-avatar { - margin-left: -1rem; - } - - .p-avatar-group { - display: flex; - align-items: center; - } - - .p-avatar { - background-color: #e2e8f0; - border-radius: 6px; - } - .p-avatar.p-avatar-lg { - width: 3rem; - height: 3rem; - font-size: 1.5rem; - } - .p-avatar.p-avatar-lg .p-avatar-icon { - font-size: 1.5rem; - } - .p-avatar.p-avatar-xl { - width: 4rem; - height: 4rem; - font-size: 2rem; - } - .p-avatar.p-avatar-xl .p-avatar-icon { - font-size: 2rem; - } - - .p-avatar-group .p-avatar { - border: 2px solid #ffffff; - } - - .p-badge { - display: inline-block; - border-radius: 10px; - text-align: center; - padding: 0 0.5rem; - } - - .p-overlay-badge { - position: relative; - } - - .p-overlay-badge .p-badge { - position: absolute; - top: 0; - right: 0; - transform: translate(50%, -50%); - transform-origin: 100% 0; - margin: 0; - } - - .p-badge.p-badge-dot { - width: 0.5rem; - min-width: 0.5rem; - height: 0.5rem; - border-radius: 50%; - padding: 0; - } - - .p-badge-no-gutter { - padding: 0; - border-radius: 50%; - } - - .p-badge { - background: #8B5CF6; - color: #ffffff; - font-size: 0.75rem; - font-weight: 700; - min-width: 1.5rem; - height: 1.5rem; - line-height: 1.5rem; - } - .p-badge.p-badge-secondary { - background-color: #f1f5f9; - color: #475569; - } - .p-badge.p-badge-success { - background-color: #22c55e; - color: #ffffff; - } - .p-badge.p-badge-info { - background-color: #0ea5e9; - color: #ffffff; - } - .p-badge.p-badge-warning { - background-color: #f97316; - color: #ffffff; - } - .p-badge.p-badge-danger { - background-color: #ef4444; - color: #ffffff; - } - .p-badge.p-badge-secondary { - background-color: #f1f5f9; - color: #475569; - } - .p-badge.p-badge-contrast { - background-color: #020617; - color: #ffffff; - } - .p-badge.p-badge-lg { - font-size: 1.125rem; - min-width: 2.25rem; - height: 2.25rem; - line-height: 2.25rem; - } - .p-badge.p-badge-xl { - font-size: 1.5rem; - min-width: 3rem; - height: 3rem; - line-height: 3rem; - } - - .p-blockui-container { - position: relative; - } - - .p-blockui.p-component-overlay { - position: absolute; - } - - .p-blockui-document.p-component-overlay { - position: fixed; - } - - .p-blockui { - border-radius: 6px; - } - - .p-chip { - display: inline-flex; - align-items: center; - } - - .p-chip-text { - line-height: 1.5; - } - - .p-chip-icon.pi { - line-height: 1.5; - } - - .p-chip-remove-icon { - line-height: 1.5; - cursor: pointer; - } - - .p-chip img { - border-radius: 50%; - } - - .p-chip { - background-color: #f1f5f9; - color: #1e293b; - border-radius: 16px; - padding: 0 0.75rem; - } - .p-chip .p-chip-text { - line-height: 1.5; - margin-top: 0.25rem; - margin-bottom: 0.25rem; - } - .p-chip .p-chip-icon { - margin-right: 0.5rem; - } - .p-chip img { - width: 2rem; - height: 2rem; - margin-left: -0.75rem; - margin-right: 0.5rem; - } - .p-chip .p-chip-remove-icon { - margin-left: 0.5rem; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-chip .p-chip-remove-icon:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - .p-chip .p-chip-remove-icon:focus { - outline: 0 none; - } - - .p-inplace .p-inplace-display { - display: inline; - cursor: pointer; - } - - .p-inplace .p-inplace-content { - display: inline; - } - - .p-fluid .p-inplace.p-inplace-closable .p-inplace-content { - display: flex; - } - - .p-fluid .p-inplace.p-inplace-closable .p-inplace-content > .p-inputtext { - flex: 1 1 auto; - width: 1%; - } - - .p-inplace .p-inplace-display { - padding: 0.5rem 0.75rem; - border-radius: 6px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - } - .p-inplace .p-inplace-display:not(.p-disabled):hover { - background: #f1f5f9; - color: #1e293b; - } - .p-inplace .p-inplace-display:focus { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-metergroup { - display: flex; - } - - .p-metergroup-meters { - display: flex; - } - - .p-metergroup-vertical .p-metergroup-meters { - flex-direction: column; - } - - .p-metergroup-labels { - display: flex; - flex-wrap: wrap; - margin: 0; - padding: 0; - list-style-type: none; - } - - .p-metergroup-vertical .p-metergroup-labels { - align-items: start; - } - - .p-metergroup-labels-vertical { - flex-direction: column; - } - - .p-metergroup-label { - display: inline-flex; - align-items: center; - } - - .p-metergroup-label-marker { - display: inline-flex; - } - - .p-metergroup { - gap: 1rem; - } - .p-metergroup .p-metergroup-meters { - background: #e2e8f0; - border-radius: 6px; - } - .p-metergroup .p-metergroup-meter { - border: 0 none; - background: #8B5CF6; - } - .p-metergroup .p-metergroup-labels .p-metergroup-label { - gap: 0.5rem; - } - .p-metergroup .p-metergroup-labels .p-metergroup-label-marker { - background: #8B5CF6; - width: 0.5rem; - height: 0.5rem; - border-radius: 100%; - } - .p-metergroup .p-metergroup-labels .p-metergroup-label-icon { - width: 1rem; - height: 1rem; - } - .p-metergroup .p-metergroup-labels.p-metergroup-labels-vertical { - gap: 0.5rem; - } - .p-metergroup .p-metergroup-labels.p-metergroup-labels-horizontal { - gap: 1rem; - } - .p-metergroup.p-metergroup-horizontal { - flex-direction: column; - } - .p-metergroup.p-metergroup-horizontal .p-metergroup-meters { - height: 0.5rem; - } - .p-metergroup.p-metergroup-horizontal .p-metergroup-meter:first-of-type { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-metergroup.p-metergroup-horizontal .p-metergroup-meter:last-of-type { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - } - .p-metergroup.p-metergroup-vertical { - flex-direction: row; - } - .p-metergroup.p-metergroup-vertical .p-metergroup-meters { - width: 0.5rem; - height: 100%; - } - .p-metergroup.p-metergroup-vertical .p-metergroup-meter:first-of-type { - border-top-left-radius: 6px; - border-top-right-radius: 6px; - } - .p-metergroup.p-metergroup-vertical .p-metergroup-meter:last-of-type { - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; - } - - .p-progressbar { - position: relative; - overflow: hidden; - } - - .p-progressbar-determinate .p-progressbar-value { - height: 100%; - width: 0%; - position: absolute; - display: none; - border: 0 none; - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; - } - - .p-progressbar-determinate .p-progressbar-label { - display: inline-flex; - } - - .p-progressbar-determinate .p-progressbar-value-animate { - transition: width 1s ease-in-out; - } - - .p-progressbar-indeterminate .p-progressbar-value::before { - content: ""; - position: absolute; - background-color: inherit; - top: 0; - left: 0; - bottom: 0; - will-change: left, right; - -webkit-animation: p-progressbar-indeterminate-anim 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - animation: p-progressbar-indeterminate-anim 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; - } - - .p-progressbar-indeterminate .p-progressbar-value::after { - content: ""; - position: absolute; - background-color: inherit; - top: 0; - left: 0; - bottom: 0; - will-change: left, right; - -webkit-animation: p-progressbar-indeterminate-anim-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - animation: p-progressbar-indeterminate-anim-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; - -webkit-animation-delay: 1.15s; - animation-delay: 1.15s; - } - - @-webkit-keyframes p-progressbar-indeterminate-anim { - 0% { - left: -35%; - right: 100%; - } - 60% { - left: 100%; - right: -90%; - } - 100% { - left: 100%; - right: -90%; - } - } - @keyframes p-progressbar-indeterminate-anim { - 0% { - left: -35%; - right: 100%; - } - 60% { - left: 100%; - right: -90%; - } - 100% { - left: 100%; - right: -90%; - } - } - @-webkit-keyframes p-progressbar-indeterminate-anim-short { - 0% { - left: -200%; - right: 100%; - } - 60% { - left: 107%; - right: -8%; - } - 100% { - left: 107%; - right: -8%; - } - } - @keyframes p-progressbar-indeterminate-anim-short { - 0% { - left: -200%; - right: 100%; - } - 60% { - left: 107%; - right: -8%; - } - 100% { - left: 107%; - right: -8%; - } - } - .p-progressbar { - border: 0 none; - height: 1.25rem; - background: #e2e8f0; - border-radius: 6px; - } - .p-progressbar .p-progressbar-value { - border: 0 none; - margin: 0; - background: #8B5CF6; - } - .p-progressbar .p-progressbar-label { - color: #ffffff; - line-height: 1.25rem; - } - - .p-progress-spinner { - position: relative; - margin: 0 auto; - width: 100px; - height: 100px; - display: inline-block; - } - - .p-progress-spinner::before { - content: ""; - display: block; - padding-top: 100%; - } - - .p-progress-spinner-svg { - height: 100%; - transform-origin: center center; - width: 100%; - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - margin: auto; - } - - .p-progress-spinner-svg { - animation: p-progress-spinner-rotate 2s linear infinite; - } - - .p-progress-spinner-circle { - stroke-dasharray: 89, 200; - stroke-dashoffset: 0; - stroke: #dc2626; - animation: p-progress-spinner-dash 1.5s ease-in-out infinite, p-progress-spinner-color 6s ease-in-out infinite; - stroke-linecap: round; - } - - @keyframes p-progress-spinner-rotate { - 100% { - transform: rotate(360deg); - } - } - @keyframes p-progress-spinner-dash { - 0% { - stroke-dasharray: 1, 200; - stroke-dashoffset: 0; - } - 50% { - stroke-dasharray: 89, 200; - stroke-dashoffset: -35px; - } - 100% { - stroke-dasharray: 89, 200; - stroke-dashoffset: -124px; - } - } - @keyframes p-progress-spinner-color { - 100%, 0% { - stroke: #dc2626; - } - 40% { - stroke: #2563eb; - } - 66% { - stroke: #16a34a; - } - 80%, 90% { - stroke: #ca8a04; - } - } - .p-ripple { - overflow: hidden; - position: relative; - } - - .p-ink { - display: block; - position: absolute; - background: rgba(255, 255, 255, 0.5); - border-radius: 100%; - transform: scale(0); - pointer-events: none; - } - - .p-ink-active { - animation: ripple 0.4s linear; - } - - .p-ripple-disabled .p-ink { - display: none; - } - - @keyframes ripple { - 100% { - opacity: 0; - transform: scale(2.5); - } - } - .p-scrolltop { - position: fixed; - bottom: 20px; - right: 20px; - display: flex; - align-items: center; - justify-content: center; - } - - .p-scrolltop-sticky { - position: sticky; - } - - .p-scrolltop-sticky.p-link { - margin-left: auto; - } - - .p-scrolltop-enter-from { - opacity: 0; - } - - .p-scrolltop-enter-active { - transition: opacity 0.15s; - } - - .p-scrolltop.p-scrolltop-leave-to { - opacity: 0; - } - - .p-scrolltop-leave-active { - transition: opacity 0.15s; - } - - .p-scrolltop { - width: 3rem; - height: 3rem; - border-radius: 50%; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-scrolltop.p-link { - background: rgba(0, 0, 0, 0.7); - } - .p-scrolltop.p-link:hover { - background: rgba(0, 0, 0, 0.8); - } - .p-scrolltop .p-scrolltop-icon { - font-size: 1.5rem; - color: #f8fafc; - } - .p-scrolltop .p-scrolltop-icon.p-icon { - width: 1.5rem; - height: 1.5rem; - } - - .p-skeleton { - overflow: hidden; - } - - .p-skeleton::after { - content: ""; - animation: p-skeleton-animation 1.2s infinite; - height: 100%; - left: 0; - position: absolute; - right: 0; - top: 0; - transform: translateX(-100%); - z-index: 1; - } - - .p-skeleton.p-skeleton-circle { - border-radius: 50%; - } - - .p-skeleton-none::after { - animation: none; - } - - @keyframes p-skeleton-animation { - from { - transform: translateX(-100%); - } - to { - transform: translateX(100%); - } - } - .p-skeleton { - background-color: #e2e8f0; - border-radius: 6px; - } - .p-skeleton:after { - background: linear-gradient(90deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0)); - } - - .p-tag { - display: inline-flex; - align-items: center; - justify-content: center; - } - - .p-tag-icon, -.p-tag-value, -.p-tag-icon.pi { - line-height: 1.5; - } - - .p-tag.p-tag-rounded { - border-radius: 10rem; - } - - .p-tag { - background: #8B5CF6; - color: #ffffff; - font-size: 0.75rem; - font-weight: 700; - padding: 0.25rem 0.4rem; - border-radius: 6px; - } - .p-tag.p-tag-success { - background-color: #22c55e; - color: #ffffff; - } - .p-tag.p-tag-info { - background-color: #0ea5e9; - color: #ffffff; - } - .p-tag.p-tag-warning { - background-color: #f97316; - color: #ffffff; - } - .p-tag.p-tag-danger { - background-color: #ef4444; - color: #ffffff; - } - .p-tag.p-tag-secondary { - background-color: #f1f5f9; - color: #475569; - } - .p-tag.p-tag-contrast { - background-color: #020617; - color: #ffffff; - } - .p-tag .p-tag-icon { - font-size: 0.75rem; - } - .p-tag .p-tag-icon:not(:last-child) { - margin-right: 0.25rem; - } - .p-tag .p-tag-icon.p-icon { - width: 0.75rem; - height: 0.75rem; - } - - .p-terminal { - height: 18rem; - overflow: auto; - } - - .p-terminal-prompt-container { - display: flex; - align-items: center; - } - - .p-terminal-input { - flex: 1 1 auto; - border: 0 none; - background-color: transparent; - color: inherit; - padding: 0; - outline: 0 none; - } - - .p-terminal-input::-ms-clear { - display: none; - } - - .p-terminal { - background: #ffffff; - color: #334155; - border: 1px solid #e2e8f0; - padding: 0 1.125rem 1.125rem 1.125rem; - } - .p-terminal .p-terminal-input { - font-family: var(--font-family); - font-feature-settings: var(--font-feature-settings, normal); - font-size: 1rem; - } -} -@layer primevue { - .p-accordion .p-accordion-header .p-accordion-header-link { - border-radius: 6px !important; - flex-direction: row-reverse; - justify-content: space-between; - } - .p-accordion .p-accordion-header .p-accordion-header-link:hover { - border-bottom-color: #e2e8f0; - } - .p-accordion .p-accordion-header .p-accordion-header-link .p-accordion-toggle-icon { - transform: rotate(90deg); - } - .p-accordion .p-accordion-header.p-highlight .p-accordion-toggle-icon { - transform: rotate(-180deg); - } - .p-accordion .p-accordion-tab { - border-bottom: 1px solid #e2e8f0; - } - .p-accordion .p-accordion-tab:last-child { - border-bottom: 0 none; - } - - .p-autocomplete .p-autocomplete-multiple-container { - padding: 0.25rem 0.25rem; - gap: 0.25rem; - } - .p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token { - border-radius: 4px; - margin: 0; - } - .p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token .p-autocomplete-token-icon { - margin-left: 0.375rem; - } - .p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-input-token { - margin-left: 0.5rem; - } - .p-autocomplete .p-autocomplete-multiple-container:has(.p-autocomplete-token) .p-autocomplete-input-token { - margin-left: 0.5rem; - } - .p-autocomplete.p-disabled { - opacity: 1; - } - - .p-button-label { - font-weight: 500; - } - - .p-button.p-button-success:enabled:focus-visible { - outline-color: #22c55e; - } - .p-button.p-button-info:enabled:focus-visible { - outline-color: #0ea5e9; - } - .p-button.p-button-warning:enabled:focus-visible { - outline-color: #f97316; - } - .p-button.p-button-help:enabled:focus-visible { - outline-color: #a855f7; - } - .p-button.p-button-danger:enabled:focus-visible { - outline-color: #ef4444; - } - .p-button.p-button-contrast:enabled:focus-visible { - outline-color: #020617; - } - .p-button.p-button-outlined { - border-color: var(--primary-200); - } - .p-button.p-button-outlined:not(:disabled):hover, .p-button.p-button-outlined:not(:disabled):active { - border-color: var(--primary-200); - } - .p-button.p-button-outlined.p-button-secondary { - border-color: var(--surface-200); - color: #64748b; - } - .p-button.p-button-outlined.p-button-secondary:not(:disabled):hover { - color: #64748b; - background-color: #f1f5f9; - border-color: var(--surface-200); - } - .p-button.p-button-outlined.p-button-secondary:not(:disabled):active { - color: #64748b; - background-color: #e2e8f0; - border-color: var(--surface-200); - } - .p-button.p-button-outlined.p-button-success { - border-color: #bbf7d0; - } - .p-button.p-button-outlined.p-button-success:not(:disabled):hover, .p-button.p-button-outlined.p-button-success:not(:disabled):active { - border-color: #bbf7d0; - } - .p-button.p-button-outlined.p-button-info { - border-color: #bae6fd; - } - .p-button.p-button-outlined.p-button-info:not(:disabled):hover, .p-button.p-button-outlined.p-button-info:not(:disabled):active { - border-color: #bae6fd; - } - .p-button.p-button-outlined.p-button-warning { - border-color: #fed7aa; - } - .p-button.p-button-outlined.p-button-warning:not(:disabled):hover, .p-button.p-button-outlined.p-button-warning:not(:disabled):active { - border-color: #fed7aa; - } - .p-button.p-button-outlined.p-button-help { - border-color: #e9d5ff; - } - .p-button.p-button-outlined.p-button-help:not(:disabled):hover, .p-button.p-button-outlined.p-button-help:not(:disabled):active { - border-color: #e9d5ff; - } - .p-button.p-button-outlined.p-button-danger { - border-color: #fecaca; - } - .p-button.p-button-outlined.p-button-danger:not(:disabled):hover, .p-button.p-button-outlined.p-button-danger:not(:disabled):active { - border-color: #fecaca; - } - .p-button.p-button-outlined.p-button-contrast { - border-color: #334155; - } - .p-button.p-button-outlined.p-button-contrast:not(:disabled):hover, .p-button.p-button-outlined.p-button-contrast:not(:disabled):active { - border-color: #334155; - } - .p-button.p-button-secondary.p-button-text { - color: #64748b; - } - .p-button.p-button-secondary.p-button-text:not(:disabled):hover { - background: #f1f5f9; - color: #64748b; - } - .p-button.p-button-secondary.p-button-text:not(:disabled):active { - background: #e2e8f0; - color: #64748b; - } - - .p-datepicker-buttonbar .p-button { - padding: 0.25rem 0.75rem; - font-size: 0.875rem; - } - - .p-datepicker .p-datepicker-group-container + .p-timepicker { - margin-top: 0.5rem; - padding-top: 0.5rem; - } - .p-datepicker table th { - font-weight: 500; - } - - .p-card { - border-radius: 12px; - display: flex; - flex-direction: column; - } - .p-card .p-card-caption { - display: flex; - flex-direction: column; - gap: 0.5rem; - } - .p-card .p-card-caption .p-card-title, -.p-card .p-card-caption .p-card-subtitle { - margin-bottom: 0; - } - .p-card .p-card-body { - display: flex; - flex-direction: column; - gap: 1rem; - } - - .p-carousel .p-carousel-indicators .p-carousel-indicator.p-highlight button { - background-color: #8B5CF6; - } - - .p-cascadeselect { - box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05); - } - .p-cascadeselect .p-cascadeselect-label { - box-shadow: none; - } - .p-cascadeselect.p-disabled { - opacity: 1; - background-color: #e2e8f0; - } - .p-cascadeselect.p-disabled .p-cascadeselect-label { - color: #64748b; - } - - div.p-cascadeselect-panel { - border: 0 none; - box-shadow: none; - } - - .p-checkbox .p-checkbox-box { - border-radius: 4px; - box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05); - } - .p-checkbox:not(.p-disabled):has(.p-checkbox-input:focus-visible) .p-checkbox-box { - outline-width: 1px; - outline-offset: 2px; - } - .p-checkbox:not(.p-disabled):has(.p-checkbox-input:focus-visible).p-highlight .p-checkbox-box { - border-color: #8B5CF6; - } - .p-checkbox.p-disabled { - opacity: 1; - } - .p-checkbox.p-disabled .p-checkbox-box { - background-color: #e2e8f0; - border: 1px solid #cbd5e1; - } - .p-checkbox.p-disabled .p-checkbox-box .p-checkbox-icon { - color: #64748b; - } - - .p-chips .p-chips-multiple-container { - padding: 0.25rem 0.25rem; - gap: 0.25rem; - } - .p-chips .p-chips-multiple-container .p-chips-token { - border-radius: 4px; - margin: 0; - } - .p-chips .p-chips-multiple-container .p-chips-token .p-chips-token-icon { - margin-left: 0.375rem; - } - .p-chips .p-chips-multiple-container .p-chips-input-token { - margin-left: 0.5rem; - } - .p-chips .p-chips-multiple-container:has(.p-chips-token) .p-chips-input-token { - margin-left: 0.5rem; - } - .p-chips.p-disabled .p-chips-multiple-container { - opacity: 1; - background-color: #e2e8f0; - } - - .p-chip { - border-radius: 16px; - padding: 0.25rem 0.75rem; - } - .p-chip .p-chip-text { - margin-top: 0; - margin-bottom: 0; - } - .p-chip .p-chip-remove-icon { - margin-left: 0.375rem; - } - .p-chip:has(.p-chip-remove-icon) { - padding-right: 0.5rem; - } - .p-chip img { - margin-left: -0.5rem; - } - - .p-colorpicker-preview { - padding: 0; - } - .p-colorpicker-preview:enabled:focus { - outline-offset: 2px; - } - .p-colorpicker-preview.p-inputtext.p-disabled { - opacity: 0.6; - } - - .p-confirm-popup { - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - - .p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-top > td { - box-shadow: inset 0 2px 0 0 #8B5CF6; - } - .p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-bottom > td { - box-shadow: inset 0 -2px 0 0 #8B5CF6; - } - .p-datatable .p-datatable-tbody > tr:has(+ .p-highlight) > td { - border-bottom-color: #ccc1ff; - } - .p-datatable .p-datatable-tbody > tr.p-highlight > td { - border-bottom-color: #ccc1ff; - } - - .p-dataview-layout-options.p-selectbutton .p-button svg { - position: relative; - } - - .p-dialog { - border-radius: 12px; - background-color: #ffffff; - } - .p-dialog.p-dialog-maximized { - border-radius: 0; - } - .p-dialog .p-dialog-header { - border-top-right-radius: 12px; - border-top-left-radius: 12px; - } - .p-dialog .p-dialog-content:last-of-type { - border-bottom-right-radius: 12px; - border-bottom-left-radius: 12px; - } - .p-dialog .p-dialog-footer { - border-bottom-right-radius: 12px; - border-bottom-left-radius: 12px; - } - - .p-dropdown { - box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05); - } - .p-dropdown .p-dropdown-label { - box-shadow: none; - } - .p-dropdown.p-disabled { - opacity: 1; - background-color: #e2e8f0; - } - .p-dropdown.p-disabled .p-dropdown-label { - color: #64748b; - } - - .p-dropdown-panel .p-dropdown-items .p-dropdown-item .p-dropdown-check-icon { - margin-left: -0.375rem; - margin-right: 0.375rem; - } - - .p-treetable .p-treetable-tbody > tr:has(+ .p-highlight) > td { - border-bottom-color: #ccc1ff; - } - .p-treetable .p-treetable-tbody > tr.p-highlight > td { - border-bottom-color: #ccc1ff; - } - .p-treetable .p-treetable-tbody > tr.p-highlight > td .p-treetable-toggler:hover { - background-color: #F5F3FF; - color: #6D28D9; - } - - .p-fieldset { - padding: 0 1.125rem 1.125rem 1.125rem; - margin: 0; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a { - padding: 0.5rem 0.75rem; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a .p-fieldset-legend-text { - padding: 0; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a .p-fieldset-toggler { - color: #64748b; - } - .p-fieldset.p-fieldset-toggleable .p-fieldset-legend:hover { - background-color: #f1f5f9; - } - .p-fieldset .p-fieldset-legend { - border: 0 none; - padding: 0; - margin-bottom: 0.375rem; - } - .p-fieldset .p-fieldset-legend span { - padding: 0.5rem 0.75rem; - } - .p-fieldset .p-fieldset-content { - padding: 0; - } - - .p-column-filter-overlay-menu { - padding: 0.75rem; - display: flex; - flex-direction: column; - gap: 0.5rem; - } - .p-column-filter-overlay-menu .p-column-filter-operator { - padding: 0; - } - .p-column-filter-overlay-menu .p-column-filter-constraints { - display: flex; - flex-direction: column; - gap: 0.5rem; - } - .p-column-filter-overlay-menu .p-column-filter-constraint { - padding: 0 0 0 0; - } - .p-column-filter-overlay-menu .p-column-filter-constraint .p-column-filter-remove-button { - margin-bottom: 0.5rem; - } - .p-column-filter-overlay-menu .p-column-filter-constraint:last-child .p-column-filter-remove-button { - margin-bottom: 0; - } - .p-column-filter-overlay-menu .p-column-filter-add-rule { - padding: 0; - } - .p-column-filter-overlay-menu .p-column-filter-buttonbar { - padding: 0; - } - - .p-fileupload .p-fileupload-content { - border-top: 0 none; - padding-top: 1.125rem; - } - - .p-galleria .p-galleria-indicators .p-galleria-indicator.p-highlight button { - background-color: #8B5CF6; - } - - .p-inline-message-text { - font-weight: 500; - } - - .p-inline-message { - backdrop-filter: blur(1.5px); - } - - .p-inline-message.p-inline-message-info { - box-shadow: 0px 4px 8px 0px rgba(59, 130, 246, 0.04); - } - - .p-inline-message.p-inline-message-success { - box-shadow: 0px 4px 8px 0px rgba(34, 197, 94, 0.04); - } - - .p-inline-message.p-inline-message-warn { - box-shadow: 0px 4px 8px 0px rgba(234, 179, 8, 0.04); - } - - .p-inline-message.p-inline-message-error { - box-shadow: 0px 4px 8px 0px rgba(239, 68, 68, 0.04); - } - - .p-inline-message.p-inline-message-secondary { - box-shadow: 0px 4px 8px 0px rgba(74, 85, 103, 0.04); - } - - .p-inline-message.p-inline-message-contrast { - box-shadow: 0px 4px 8px 0px rgba(2, 6, 23, 0.04); - } - - .p-inputgroup-addon { - padding: 0.5rem; - } - - .p-inputnumber.p-inputnumber-buttons-stacked { - position: relative; - } - .p-inputnumber.p-inputnumber-buttons-stacked .p-inputnumber-input { - border-top-right-radius: 5px; - border-bottom-right-radius: 5px; - } - .p-inputnumber.p-inputnumber-buttons-stacked .p-inputnumber-button-group { - position: absolute; - top: 1px; - right: 1px; - height: calc(100% - 2px); - } - .p-inputnumber.p-inputnumber-buttons-stacked .p-inputnumber-button { - border-top-right-radius: 5px; - border-bottom-right-radius: 5px; - background-color: transparent; - border: 0 none; - color: #64748b; - } - .p-inputnumber.p-inputnumber-buttons-stacked .p-inputnumber-button:hover { - background-color: #f1f5f9; - color: #475569; - } - .p-inputnumber.p-inputnumber-buttons-stacked .p-inputnumber-button:active { - background-color: #e2e8f0; - color: #334155; - } - .p-inputnumber.p-inputnumber-buttons-horizontal .p-inputnumber-button { - background-color: transparent; - border: 1px solid #cbd5e1; - color: #64748b; - } - .p-inputnumber.p-inputnumber-buttons-horizontal .p-inputnumber-button:hover { - background-color: #f1f5f9; - color: #475569; - } - .p-inputnumber.p-inputnumber-buttons-horizontal .p-inputnumber-button:active { - background-color: #e2e8f0; - color: #334155; - } - .p-inputnumber.p-inputnumber-buttons-horizontal .p-inputnumber-button.p-inputnumber-button-up { - border-left: 0 none; - } - .p-inputnumber.p-inputnumber-buttons-horizontal .p-inputnumber-button.p-inputnumber-button-down { - border-right: 0 none; - } - .p-inputnumber.p-inputnumber-buttons-vertical .p-inputnumber-button { - background-color: transparent; - border: 1px solid #cbd5e1; - color: #64748b; - } - .p-inputnumber.p-inputnumber-buttons-vertical .p-inputnumber-button:hover { - background-color: #f1f5f9; - color: #475569; - } - .p-inputnumber.p-inputnumber-buttons-vertical .p-inputnumber-button:active { - background-color: #e2e8f0; - color: #334155; - } - .p-inputnumber.p-inputnumber-buttons-vertical .p-inputnumber-button.p-inputnumber-button-up { - border-bottom: 0 none; - } - .p-inputnumber.p-inputnumber-buttons-vertical .p-inputnumber-button.p-inputnumber-button-down { - border-top: 0 none; - } - - .p-inputswitch .p-inputswitch-slider { - border: 0 none; - } - .p-inputswitch.p-highlight p-inputswitch-slider:before { - left: 1.25rem; - transform: none; - } - .p-inputswitch.p-invalid > .p-inputswitch-slider { - background: #f87171; - } - .p-inputswitch.p-invalid > .p-inputswitch-slider:before { - background: #ffffff; - } - - .p-inputtext { - box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05); - } - - .p-inputtext:disabled { - opacity: 1; - background-color: #e2e8f0; - color: #64748b; - } - - .p-knob svg { - border-radius: 6px; - outline-color: transparent; - transition: outline-color 0.2s; - } - .p-knob svg:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-listbox { - box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05); - } - .p-listbox.p-disabled { - opacity: 1; - background-color: #e2e8f0; - } - .p-listbox.p-disabled .p-listbox-list .p-listbox-item { - color: #64748b; - } - - .p-message { - backdrop-filter: blur(1.5px); - } - - .p-message.p-message-info { - box-shadow: 0px 4px 8px 0px rgba(59, 130, 246, 0.04); - } - .p-message.p-message-info .p-message-close:focus-visible { - outline-color: #2563eb; - } - .p-message.p-message-info .p-message-close:hover { - background: #dbeafe; - } - - .p-message.p-message-success { - box-shadow: 0px 4px 8px 0px rgba(34, 197, 94, 0.04); - } - .p-message.p-message-success .p-message-close:focus-visible { - outline-color: #16a34a; - } - .p-message.p-message-success .p-message-close:hover { - background: #dcfce7; - } - - .p-message.p-message-warn { - box-shadow: 0px 4px 8px 0px rgba(234, 179, 8, 0.04); - } - .p-message.p-message-warn .p-message-close:focus-visible { - outline-color: #ca8a04; - } - .p-message.p-message-warn .p-message-close:hover { - background: #fef9c3; - } - - .p-message.p-message-error { - box-shadow: 0px 4px 8px 0px rgba(239, 68, 68, 0.04); - } - .p-message.p-message-error .p-message-close:focus-visible { - outline-color: #dc2626; - } - .p-message.p-message-error .p-message-close:hover { - background: #fee2e2; - } - - .p-message.p-message-secondary { - box-shadow: 0px 4px 8px 0px rgba(74, 85, 103, 0.04); - } - .p-message.p-message-secondary .p-message-close:focus-visible { - outline-color: #475569; - } - .p-message.p-message-secondary .p-message-close:hover { - background: #e2e8f0; - } - - .p-message.p-message-contrast { - box-shadow: 0px 4px 8px 0px rgba(2, 6, 23, 0.04); - } - .p-message.p-message-contrast .p-message-close:focus-visible { - outline-color: #f8fafc; - } - .p-message.p-message-contrast .p-message-close:hover { - background: #1e293b; - } - - .p-multiselect-panel .p-multiselect-header { - padding-left: 1rem; - padding-right: 1rem; - } - - .p-multiselect { - box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05); - } - .p-multiselect.p-disabled { - opacity: 1; - background-color: #e2e8f0; - } - .p-multiselect.p-disabled .p-multiselect-label { - color: #64748b; - } - .p-multiselect.p-multiselect-chip .p-multiselect-token { - border-radius: 4px; - margin-right: 0.25rem; - } - .p-multiselect.p-multiselect-chip .p-multiselect-token .p-multiselect-token-icon { - margin-left: 0.375rem; - } - - .p-inputwrapper-filled.p-multiselect.p-multiselect-chip .p-multiselect-label { - padding: 0.25rem 0.25rem; - } - - .p-panelmenu .p-panelmenu-header { - border-radius: 4px; - } - .p-panelmenu .p-panelmenu-header:not(.p-disabled):focus-visible .p-panelmenu-header-content { - outline: 0 none; - } - .p-panelmenu .p-panelmenu-header:not(.p-disabled):focus-visible .p-panelmenu-header-content .p-panelmenu-header-action { - background: #e2e8f0; - } - .p-panelmenu .p-panelmenu-header:not(.p-disabled):focus-visible .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-text { - color: #334155; - } - .p-panelmenu .p-panelmenu-header:not(.p-disabled):focus-visible .p-panelmenu-header-content .p-panelmenu-header-action .p-submenu-icon { - color: #334155; - } - .p-panelmenu .p-panelmenu-header:not(.p-disabled):focus-visible .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-icon { - color: #334155; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content { - border-radius: 4px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action { - color: #334155; - padding: 0.5rem 0.75rem; - font-weight: 600; - border-radius: 4px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-text { - color: #334155; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-submenu-icon { - color: #94a3b8; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-icon { - color: #94a3b8; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action:hover { - background: #f1f5f9; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action:hover .p-menuitem-text { - color: #334155; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action:hover .p-submenu-icon { - color: #334155; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action:hover .p-menuitem-icon { - color: #334155; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-submenu-icon { - margin-right: 0.5rem; - } - .p-panelmenu .p-panelmenu-header .p-panelmenu-header-content .p-panelmenu-header-action .p-menuitem-icon { - margin-right: 0.5rem; - } - .p-panelmenu .p-panelmenu-content { - border-radius: 6px; - padding: 0 0 0 1rem; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:first-child { - margin-top: 2px; - } - .p-panelmenu .p-panelmenu-content .p-menuitem:last-child { - margin-top: 2px; - } - .p-panelmenu .p-panelmenu-panel { - padding: 0.25rem 0.25rem; - overflow: hidden; - margin-bottom: 0.75rem; - border: 1px solid #e2e8f0; - border-radius: 6px; - } - - .p-password-panel { - background-color: #ffffff; - border: 1px solid #e2e8f0; - padding: 0.75rem; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - border-radius: 6px; - } - .p-password-panel .p-password-meter { - margin-bottom: 0.75rem; - background: #e2e8f0; - border-radius: 6px; - } - .p-password-panel .p-password-meter .p-password-strength { - border-radius: 6px; - } - .p-password-panel .p-password-meter .p-password-strength.weak { - background: #ef4444; - } - .p-password-panel .p-password-meter .p-password-strength.medium { - background: #f59e0b; - } - .p-password-panel .p-password-meter .p-password-strength.strong { - background: #22c55e; - } - - .p-orderlist-controls .p-button { - transition: opacity 0.2s, outline-color 0.2s, background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; - color: #475569; - background: #f1f5f9; - border: 1px solid #f1f5f9; - } - .p-orderlist-controls .p-button:not(:disabled):hover { - background: #e2e8f0; - color: #334155; - border-color: #e2e8f0; - } - .p-orderlist-controls .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-orderlist-controls .p-button:not(:disabled):active { - background: #cbd5e1; - color: #1e293b; - border-color: #cbd5e1; - } - - .p-orderlist .p-orderlist-header { - background: #ffffff; - color: #334155; - border: 0 none; - border-bottom: 0 none; - padding: 0.75rem 1rem 0.5rem 1rem; - font-weight: 600; - color: #64748b; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-orderlist .p-orderlist-list { - border: 1px solid #cbd5e1; - border: 0 none; - background: #ffffff; - color: #334155; - padding: 0.25rem 0.25rem; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-orderlist .p-orderlist-list .p-orderlist-item { - border-radius: 6px; - } - .p-orderlist .p-orderlist-list:not(:first-child) { - border: 0 none; - } - - .p-organizationchart .p-organizationchart-node-content { - padding: 0.75rem 1rem; - border-radius: 6px; - } - .p-organizationchart .p-organizationchart-node-content .p-node-toggler { - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - border: 1px solid #e2e8f0; - display: inline-flex; - justify-content: center; - align-items: center; - } - .p-organizationchart .p-organizationchart-node-content .p-node-toggler .p-node-toggler-icon { - position: static; - } - .p-organizationchart .p-organizationchart-node-content:has(.p-node-toggler) { - padding: 0.75rem 1rem 1.25rem 1rem; - } - .p-organizationchart .p-organizationchart-lines :nth-child(1 of .p-organizationchart-line-left) { - border-right: 0 none; - } - .p-organizationchart .p-organizationchart-lines :nth-last-child(1 of .p-organizationchart-line-left) { - border-top-right-radius: 6px; - } - .p-organizationchart .p-organizationchart-lines :nth-child(1 of .p-organizationchart-line-right) { - border-left: 1px solid #e2e8f0; - border-top-left-radius: 6px; - } - - .p-overlaypanel { - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); - } - .p-overlaypanel .p-overlaypanel-content { - padding: 0.75rem; - } - .p-overlaypanel .p-overlaypanel-close { - width: 1.75rem; - height: 1.75rem; - color: #64748b; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - outline-color: transparent; - position: absolute; - top: 0.25rem; - right: 0.25rem; - } - .p-overlaypanel .p-overlaypanel-close:enabled:hover { - color: #475569; - border-color: transparent; - background: #f1f5f9; - } - .p-overlaypanel .p-overlaypanel-close:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: 2px; - box-shadow: none; - } - - .p-panel { - border: 1px solid #e2e8f0; - border-radius: 6px; - background-color: #ffffff; - } - .p-panel .p-panel-header, -.p-panel .p-panel-content, -.p-panel .p-panel-footer { - background: transparent; - border: 0 none; - } - .p-panel:has(.p-panel-footer) .p-panel-content { - padding-bottom: 0.875rem; - } - - .p-picklist-buttons .p-button { - transition: opacity 0.2s, outline-color 0.2s, background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s; - color: #475569; - background: #f1f5f9; - border: 1px solid #f1f5f9; - } - .p-picklist-buttons .p-button:not(:disabled):hover { - background: #e2e8f0; - color: #334155; - border-color: #e2e8f0; - } - .p-picklist-buttons .p-button:not(:disabled):focus { - box-shadow: none; - } - .p-picklist-buttons .p-button:not(:disabled):active { - background: #cbd5e1; - color: #1e293b; - border-color: #cbd5e1; - } - - .p-picklist .p-picklist-header { - background: #ffffff; - color: #334155; - border: 1px solid #cbd5e1; - border: 0 none; - padding: 0.75rem 1rem 0.5rem 1rem; - font-weight: 600; - color: #64748b; - border-top-right-radius: 6px; - border-top-left-radius: 6px; - } - .p-picklist .p-picklist-list { - border: 1px solid #cbd5e1; - border: 0 none; - background: #ffffff; - color: #334155; - padding: 0.25rem 0.25rem; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - } - .p-picklist .p-picklist-list .p-picklist-item { - border-radius: 6px; - } - .p-picklist .p-picklist-list:not(:first-child) { - border: 0 none; - } - - .p-progressbar-label { - font-size: 0.75rem; - font-weight: 600; - } - - .p-radiobutton .p-radiobutton-box { - box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05); - } - .p-radiobutton:not(.p-disabled):has(.p-radiobutton-input:focus-visible) .p-radiobutton-box { - outline-width: 1px; - outline-offset: 2px; - } - .p-radiobutton:not(.p-disabled):has(.p-radiobutton-input:focus-visible).p-highlight .p-radiobutton-box { - border-color: #8B5CF6; - } - .p-radiobutton.p-disabled { - opacity: 1; - } - .p-radiobutton.p-disabled .p-radiobutton-box { - border: 1px solid #cbd5e1; - background-color: #e2e8f0; - } - .p-radiobutton.p-disabled .p-radiobutton-box .p-radiobutton-icon { - background-color: #64748b; - } - - .p-rating { - gap: 0.25rem; - } - - .p-selectbutton .p-button .pi, -.p-selectbutton .p-button .p-button-label { - position: relative; - transition: none; - } - .p-selectbutton .p-button::before { - content: ""; - background-color: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - position: absolute; - left: 0.25rem; - top: 0.25rem; - width: calc(100% - 0.5rem); - height: calc(100% - 0.5rem); - border-radius: 4px; - } - .p-selectbutton .p-button.p-highlight::before { - background: #ffffff; - border-color: #ffffff; - box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.02), 0px 1px 2px 0px rgba(0, 0, 0, 0.04); - } - .p-selectbutton .p-button:focus-visible { - outline: 1px solid var(--p-focus-ring-color); - outline-offset: -1px; - box-shadow: none; - border-color: #94a3b8; - } - .p-selectbutton .p-button.p-disabled { - opacity: 1; - color: #94a3b8; - } - .p-selectbutton.p-invalid { - box-shadow: 0 0 0 1px #f87171; - border-radius: 6px; - } - .p-selectbutton.p-invalid > .p-button { - border: 1px solid #f1f5f9; - } - .p-selectbutton.p-disabled { - opacity: 1; - } - .p-selectbutton.p-disabled .p-button { - color: #94a3b8; - } - - .p-slider .p-slider-handle { - display: flex !important; - justify-content: center; - align-items: center; - } - .p-slider .p-slider-handle::before { - content: ""; - width: 16px; - height: 16px; - display: block; - background-color: #ffffff; - border-radius: 50%; - box-shadow: 0px 0.5px 0px 0px rgba(0, 0, 0, 0.08), 0px 1px 1px 0px rgba(0, 0, 0, 0.14); - } - .p-slider .p-slider-handle:focus-visible { - outline: 0 none; - box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px var(--p-focus-ring-color), 0 1px 2px 0 black; - } - - .p-speeddial-item.p-focus > .p-speeddial-action { - outline-color: #c5aefb; - } - - .p-speeddial-button.p-speeddial-rotate { - transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - - .p-splitter-gutter-handle { - border-radius: 6px; - } - - .p-stepper .p-stepper-header .p-stepper-number { - box-shadow: 0px 0.5px 0px 0px rgba(0, 0, 0, 0.06), 0px 1px 1px 0px rgba(0, 0, 0, 0.12); - } - .p-stepper .p-stepper-header.p-highlight .p-stepper-number { - background: #ffffff; - color: #8B5CF6; - } - .p-stepper .p-stepper-header.p-highlight .p-stepper-title { - color: #8B5CF6; - } - - .p-steps .p-steps-item .p-menuitem-link .p-steps-number { - border-width: 2px; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-steps .p-steps-item .p-menuitem-link .p-steps-title { - font-weight: 500; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-steps .p-steps-item .p-steps-number { - position: relative; - font-weight: 500; - } - .p-steps .p-steps-item .p-steps-number::after { - content: " "; - position: absolute; - width: 100%; - height: 100%; - border-radius: 50%; - box-shadow: 0px 0.5px 0px 0px rgba(0, 0, 0, 0.06), 0px 1px 1px 0px rgba(0, 0, 0, 0.12); - } - .p-steps .p-steps-item.p-highlight .p-steps-number { - background: #ffffff; - color: #8B5CF6; - } - .p-steps .p-steps-item.p-highlight .p-steps-title { - color: #8B5CF6; - } - .p-steps .p-steps-item.p-disabled { - opacity: 1; - } - .p-steps .p-steps-item:before { - border-top-width: 2px; - margin-top: calc(-1rem + 1px); - } - .p-steps .p-steps-item:first-child::before { - width: calc(50% + 1rem); - transform: translateX(100%); - } - .p-steps .p-steps-item:last-child::before { - width: 50%; - } - - .p-tabmenu .p-tabmenu-ink-bar { - z-index: 1; - display: block; - position: absolute; - bottom: -1px; - height: 1px; - background-color: #8B5CF6; - transition: 250ms cubic-bezier(0.35, 0, 0.25, 1); - } - .p-tabmenu .p-tabmenu-nav { - position: relative; - } - .p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link { - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - - .p-tabview .p-tabview-ink-bar { - z-index: 1; - display: block; - position: absolute; - bottom: 0; - height: 1px; - background-color: #8B5CF6; - transition: 250ms cubic-bezier(0.35, 0, 0.25, 1); - } - .p-tabview .p-tabview-nav { - position: relative; - } - .p-tabview .p-tabview-nav li .p-tabview-nav-link { - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - } - .p-tabview .p-tabview-nav-btn.p-link { - color: #64748b; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); - box-shadow: 0px 0px 10px 50px rgba(255, 255, 255, 0.6); - } - .p-tabview .p-tabview-nav-btn.p-link:hover { - color: #475569; - } - - .p-tag { - background: var(--primary-100); - color: var(--primary-700); - } - .p-tag.p-tag-success { - background: var(--green-100); - color: var(--green-700); - } - .p-tag.p-tag-info { - background: var(--blue-100); - color: var(--blue-700); - } - .p-tag.p-tag-warning { - background: var(--orange-100); - color: var(--orange-700); - } - .p-tag.p-tag-danger { - background: var(--red-100); - color: var(--red-700); - } - - .p-terminal { - background: #ffffff; - color: #334155; - border: 1px solid #cbd5e1; - padding: 0.5rem 0.75rem; - border-radius: 6px; - } - .p-terminal .p-terminal-prompt { - margin-right: 0.25rem; - } - .p-terminal .p-terminal-response { - margin: 2px 0; - } - - .p-timeline .p-timeline-event-marker { - display: inline-flex; - align-items: center; - justify-content: center; - position: relative; - } - .p-timeline .p-timeline-event-marker::before { - content: " "; - border-radius: 50%; - width: 0.375rem; - height: 0.375rem; - background-color: #8B5CF6; - } - .p-timeline .p-timeline-event-marker::after { - content: " "; - position: absolute; - width: 100%; - height: 100%; - border-radius: 50%; - box-shadow: 0px 0.5px 0px 0px rgba(0, 0, 0, 0.06), 0px 1px 1px 0px rgba(0, 0, 0, 0.12); - } - - .p-toast .p-toast-message { - backdrop-filter: blur(1.5px); - } - .p-toast .p-toast-message .p-toast-message-content .p-toast-detail { - font-size: 0.875rem; - } - .p-toast .p-toast-message .p-toast-icon-close { - width: 1.75rem; - height: 1.75rem; - margin-top: -25%; - right: -25%; - position: relative; - } - - .p-toast .p-toast-message.p-toast-message-info { - box-shadow: 0px 4px 8px 0px rgba(59, 130, 246, 0.04); - } - .p-toast .p-toast-message.p-toast-message-info .p-toast-detail { - color: #334155; - } - .p-toast .p-toast-message.p-toast-message-info .p-toast-icon-close { - outline-color: #2563eb; - } - .p-toast .p-toast-message.p-toast-message-info .p-toast-icon-close:hover { - background: #dbeafe; - } - .p-toast .p-toast-message.p-toast-message-success { - box-shadow: 0px 4px 8px 0px rgba(34, 197, 94, 0.04); - } - .p-toast .p-toast-message.p-toast-message-success .p-toast-detail { - color: #334155; - } - .p-toast .p-toast-message.p-toast-message-success .p-toast-icon-close { - outline-color: #16a34a; - } - .p-toast .p-toast-message.p-toast-message-success .p-toast-icon-close:hover { - background: #dcfce7; - } - .p-toast .p-toast-message.p-toast-message-warn { - box-shadow: 0px 4px 8px 0px rgba(234, 179, 8, 0.04); - } - .p-toast .p-toast-message.p-toast-message-warn .p-toast-detail { - color: #334155; - } - .p-toast .p-toast-message.p-toast-message-warn .p-toast-icon-close { - outline-color: #ca8a04; - } - .p-toast .p-toast-message.p-toast-message-warn .p-toast-icon-close:hover { - background: #fef9c3; - } - .p-toast .p-toast-message.p-toast-message-error { - box-shadow: 0px 4px 8px 0px rgba(239, 68, 68, 0.04); - } - .p-toast .p-toast-message.p-toast-message-error .p-toast-detail { - color: #334155; - } - .p-toast .p-toast-message.p-toast-message-error .p-toast-icon-close { - outline-color: #dc2626; - } - .p-toast .p-toast-message.p-toast-message-error .p-toast-icon-close:hover { - background: #fee2e2; - } - .p-toast .p-toast-message.p-toast-message-secondary { - box-shadow: 0px 4px 8px 0px rgba(74, 85, 103, 0.04); - } - .p-toast .p-toast-message.p-toast-message-secondary .p-toast-icon-close { - outline-color: #dc2626; - } - .p-toast .p-toast-message.p-toast-message-secondary .p-toast-icon-close:hover { - background: #e2e8f0; - } - .p-toast .p-toast-message.p-toast-message-contrast { - box-shadow: 0px 4px 8px 0px rgba(2, 6, 23, 0.04); - } - .p-toast .p-toast-message.p-toast-message-contrast .p-toast-icon-close { - outline-color: #dc2626; - } - .p-toast .p-toast-message.p-toast-message-contrast .p-toast-icon-close:hover { - background: #1e293b; - } - - .p-togglebutton .p-button .p-button-label, -.p-togglebutton .p-button .p-button-icon { - position: relative; - transition: none; - } - .p-togglebutton .p-button::before { - content: ""; - background-color: transparent; - transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s, outline-color 0.2s; - position: absolute; - left: 0.25rem; - top: 0.25rem; - width: calc(100% - 0.5rem); - height: calc(100% - 0.5rem); - border-radius: 4px; - } - .p-togglebutton.p-highlight .p-button::before { - background: #ffffff; - border-color: #ffffff; - box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.02), 0px 1px 2px 0px rgba(0, 0, 0, 0.04); - } - .p-togglebutton.p-disabled { - opacity: 1; - } - .p-togglebutton.p-disabled .p-button { - color: #94a3b8; - } - .p-togglebutton.p-disabled .p-button .p-button-icon { - color: #94a3b8; - } - - .p-toolbar { - padding: 0.75rem; - } - - .p-tree { - border: 0 none; - padding: 1rem; - } - .p-tree .p-tree-container .p-treenode { - margin: 2px 0; - } - .p-tree .p-tree-container .p-treenode:focus > .p-treenode-content { - outline-offset: -2px; - } - .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-tree-toggler:hover { - background-color: #F5F3FF; - } - .p-tree .p-tree-container > .p-treenode:first-child { - margin-top: 0; - } - .p-tree .p-tree-container > .p-treenode:last-child { - margin-bottom: 0; - } - - .p-treeselect-panel .p-tree { - padding: 0.25rem 0.25rem; - } - - .p-treeselect { - box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05); - } - .p-treeselect.p-disabled { - opacity: 1; - background-color: #e2e8f0; - } - .p-treeselect.p-disabled .p-treeselect-label { - color: #64748b; - } -} diff --git a/frontend/public/themes/custom.css b/frontend/public/themes/custom.css deleted file mode 100644 index 6e230fd5..00000000 --- a/frontend/public/themes/custom.css +++ /dev/null @@ -1,8 +0,0 @@ -.inputswitch-theme .p-inputswitch-slider:before { - font-family: 'primeicons'; - content: '\e9c8'; -} - -.inputswitch-theme.p-highlight .p-inputswitch-slider:before { - content: '\e9c7'; -} \ No newline at end of file diff --git a/frontend/src/App.vue b/frontend/src/App.vue index f2f1b9fa..22353307 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,7 +1,40 @@ - + diff --git a/frontend/src/assets/demo/code.scss b/frontend/src/assets/demo/code.scss deleted file mode 100644 index c690345b..00000000 --- a/frontend/src/assets/demo/code.scss +++ /dev/null @@ -1,15 +0,0 @@ -pre.app-code { - background-color: var(--surface-ground); - margin: 0 0 1rem 0; - padding: 0; - border-radius: var(--border-radius); - overflow: auto; - - code { - color: var(--surface-900); - padding: 1rem; - line-height: 1.5; - display: block; - font-family: monaco, Consolas, monospace; - } -} \ No newline at end of file diff --git a/frontend/src/assets/demo/demo.scss b/frontend/src/assets/demo/demo.scss deleted file mode 100644 index 8d461954..00000000 --- a/frontend/src/assets/demo/demo.scss +++ /dev/null @@ -1 +0,0 @@ -@import './code.scss'; diff --git a/docs/static/img/dragon_okinawa_background.jpg b/frontend/src/assets/imgs/dragon_okinawa_background.jpg similarity index 100% rename from docs/static/img/dragon_okinawa_background.jpg rename to frontend/src/assets/imgs/dragon_okinawa_background.jpg diff --git a/frontend/public/images/dragon_okinawa_icon.png b/frontend/src/assets/imgs/dragon_okinawa_icon.png similarity index 100% rename from frontend/public/images/dragon_okinawa_icon.png rename to frontend/src/assets/imgs/dragon_okinawa_icon.png diff --git a/frontend/src/assets/layout/_content.scss b/frontend/src/assets/layout/_content.scss deleted file mode 100644 index 2c40e1da..00000000 --- a/frontend/src/assets/layout/_content.scss +++ /dev/null @@ -1,12 +0,0 @@ -.layout-main-container { - display: flex; - flex-direction: column; - min-height: 100vh; - justify-content: space-between; - padding: 7rem 2rem 2rem 4rem; - transition: margin-left $transitionDuration; -} - -.layout-main { - flex: 1 1 auto; -} diff --git a/frontend/src/assets/layout/_footer.scss b/frontend/src/assets/layout/_footer.scss deleted file mode 100644 index 367d3128..00000000 --- a/frontend/src/assets/layout/_footer.scss +++ /dev/null @@ -1,8 +0,0 @@ -.layout-footer { - transition: margin-left $transitionDuration; - display: flex; - align-items: center; - justify-content: center; - padding-top: 1rem; - border-top: 1px solid var(--surface-border); -} diff --git a/frontend/src/assets/layout/_main.scss b/frontend/src/assets/layout/_main.scss deleted file mode 100644 index dd9ac504..00000000 --- a/frontend/src/assets/layout/_main.scss +++ /dev/null @@ -1,27 +0,0 @@ -* { - box-sizing: border-box; -} - -html { - height: 100%; - font-size: $scale; -} - -body { - font-family: var(--font-family); - color: var(--text-color); - background-color: var(--surface-ground); - margin: 0; - padding: 0; - min-height: 100%; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -a { - text-decoration: none; -} - -.layout-wrapper { - min-height: 100vh; -} diff --git a/frontend/src/assets/layout/_menu.scss b/frontend/src/assets/layout/_menu.scss deleted file mode 100644 index 3a9aa0ed..00000000 --- a/frontend/src/assets/layout/_menu.scss +++ /dev/null @@ -1,155 +0,0 @@ -.layout-sidebar { - position: fixed; - width: 300px; - height: calc(100vh - 9rem); - z-index: 999; - overflow-y: auto; - user-select: none; - top: 7rem; - left: 2rem; - transition: transform $transitionDuration, left $transitionDuration; - background-color: var(--surface-overlay); - border-radius: $borderRadius; - padding: 0.5rem 1.5rem; - box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.02), 0px 0px 2px rgba(0, 0, 0, 0.05), 0px 1px 4px rgba(0, 0, 0, 0.08); -} - -.layout-menu { - margin: 0; - padding: 0; - list-style-type: none; - - .layout-root-menuitem { - > .layout-menuitem-root-text { - font-size: 0.857rem; - text-transform: uppercase; - font-weight: 700; - color: var(--surface-900); - margin: 0.75rem 0; - } - - > a { - display: none; - } - } - - a { - user-select: none; - - &.active-menuitem { - > .layout-submenu-toggler { - transform: rotate(-180deg); - } - } - } - - li.active-menuitem { - > a { - .layout-submenu-toggler { - transform: rotate(-180deg); - } - } - } - - ul { - margin: 0; - padding: 0; - list-style-type: none; - - a { - display: flex; - align-items: center; - position: relative; - outline: 0 none; - color: var(--text-color); - cursor: pointer; - padding: 0.75rem 1rem; - border-radius: $borderRadius; - transition: background-color $transitionDuration, box-shadow $transitionDuration; - - .layout-menuitem-icon { - margin-right: 0.5rem; - } - - .layout-submenu-toggler { - font-size: 75%; - margin-left: auto; - transition: transform $transitionDuration; - } - - &.active-route { - font-weight: 700; - color: var(--primary-color); - } - - &:hover { - background-color: var(--surface-hover); - } - - &:focus { - @include focused-inset(); - } - } - - ul { - overflow: hidden; - border-radius: $borderRadius; - - li { - a { - margin-left: 1rem; - } - - li { - a { - margin-left: 2rem; - } - - li { - a { - margin-left: 2.5rem; - } - - li { - a { - margin-left: 3rem; - } - - li { - a { - margin-left: 3.5rem; - } - - li { - a { - margin-left: 4rem; - } - } - } - } - } - } - } - } - } -} - -.layout-submenu-enter-from, -.layout-submenu-leave-to { - max-height: 0; -} - -.layout-submenu-enter-to, -.layout-submenu-leave-from { - max-height: 1000px; -} - -.layout-submenu-leave-active { - overflow: hidden; - transition: max-height 0.45s cubic-bezier(0, 1, 0, 1); -} - -.layout-submenu-enter-active { - overflow: hidden; - transition: max-height 1s ease-in-out; -} diff --git a/frontend/src/assets/layout/_mixins.scss b/frontend/src/assets/layout/_mixins.scss deleted file mode 100644 index ec26860a..00000000 --- a/frontend/src/assets/layout/_mixins.scss +++ /dev/null @@ -1,13 +0,0 @@ -@mixin focused() { - outline: 0 none; - outline-offset: 0; - transition: box-shadow .2s; - box-shadow: var(--focus-ring); -} - -@mixin focused-inset() { - outline: 0 none; - outline-offset: 0; - transition: box-shadow .2s; - box-shadow: inset var(--focus-ring); -} diff --git a/frontend/src/assets/layout/_preloading.scss b/frontend/src/assets/layout/_preloading.scss deleted file mode 100644 index a8141044..00000000 --- a/frontend/src/assets/layout/_preloading.scss +++ /dev/null @@ -1,47 +0,0 @@ -.preloader { - position: fixed; - z-index: 999999; - background: #edf1f5; - width: 100%; - height: 100%; -} -.preloader-content { - border: 0 solid transparent; - border-radius: 50%; - width: 150px; - height: 150px; - position: absolute; - top: calc(50vh - 75px); - left: calc(50vw - 75px); -} - -.preloader-content:before, .preloader-content:after{ - content: ''; - border: 1em solid var(--primary-color); - border-radius: 50%; - width: inherit; - height: inherit; - position: absolute; - top: 0; - left: 0; - animation: loader 2s linear infinite; - opacity: 0; -} - -.preloader-content:before{ - animation-delay: 0.5s; -} - -@keyframes loader{ - 0%{ - transform: scale(0); - opacity: 0; - } - 50%{ - opacity: 1; - } - 100%{ - transform: scale(1); - opacity: 0; - } -} diff --git a/frontend/src/assets/layout/_responsive.scss b/frontend/src/assets/layout/_responsive.scss deleted file mode 100644 index 4678f3db..00000000 --- a/frontend/src/assets/layout/_responsive.scss +++ /dev/null @@ -1,100 +0,0 @@ -@media screen and (min-width: 1960px) { - .layout-main, .landing-wrapper { - width: 1504px; - margin-left: auto !important; - margin-right: auto !important; - } - -} - -@media (min-width: 992px) { - .layout-wrapper { - &.layout-overlay { - .layout-main-container { - margin-left: 0; - padding-left: 2rem; - } - - .layout-sidebar { - transform: translateX(-100%); - left: 0; - top: 0; - height: 100vh; - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - &.layout-overlay-active { - .layout-sidebar { - transform: translateX(0); - } - } - } - - &.layout-static { - .layout-main-container { - margin-left: 300px; - } - - &.layout-static-inactive { - .layout-sidebar { - transform: translateX(-100%); - left: 0; - } - - .layout-main-container { - margin-left: 0; - padding-left: 2rem; - } - } - } - - .layout-mask { - display: none; - } - } -} - -@media (max-width: 991px) { - .blocked-scroll { - overflow: hidden; - } - - .layout-wrapper { - .layout-main-container { - margin-left: 0; - padding-left: 2rem; - } - - .layout-sidebar { - transform: translateX(-100%); - left: 0; - top: 0; - height: 100vh; - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - .layout-mask { - display: none; - position: fixed; - top: 0; - left: 0; - z-index: 998; - width: 100%; - height: 100%; - background-color: var(--maskbg); - } - - &.layout-mobile-active { - .layout-sidebar { - transform: translateX(0); - } - - .layout-mask { - display: block; - animation: fadein $transitionDuration; - } - } - } -} diff --git a/frontend/src/assets/layout/_topbar.scss b/frontend/src/assets/layout/_topbar.scss deleted file mode 100644 index 890c2f63..00000000 --- a/frontend/src/assets/layout/_topbar.scss +++ /dev/null @@ -1,149 +0,0 @@ -.layout-topbar { - position: fixed; - height: 5rem; - z-index: 997; - left: 0; - top: 0; - width: 100%; - padding: 0 2rem; - background-color: var(--surface-card); - transition: left $transitionDuration; - display: flex; - align-items: center; - box-shadow: 0px 3px 5px rgba(0,0,0,.02), 0px 0px 2px rgba(0,0,0,.05), 0px 1px 4px rgba(0,0,0,.08); - - .layout-topbar-logo { - display: flex; - align-items: center; - color: var(--surface-900); - font-size: 1.5rem; - font-weight: 500; - width: 300px; - border-radius: 12px; - - img { - height: 2.5rem; - margin-right: .5rem; - } - - &:focus { - @include focused(); - } - } - - .layout-topbar-button { - display: inline-flex; - justify-content: center; - align-items: center; - position: relative; - color: var(--text-color-secondary); - border-radius: 50%; - width: 3rem; - height: 3rem; - cursor: pointer; - transition: background-color $transitionDuration; - - &:hover { - color: var(--text-color); - background-color: var(--surface-hover); - } - - &:focus { - @include focused(); - } - - i { - font-size: 1.5rem; - } - - span { - font-size: 1rem; - display: none; - } - } - - .layout-menu-button { - margin-right: 1.5rem; - } - - .layout-topbar-menu-button { - display: none; - - i { - font-size: 1.25rem; - } - } - - .layout-topbar-menu { - margin: 0 0 0 auto; - padding: 0; - list-style: none; - display: flex; - - .layout-topbar-button { - margin-left: 1rem; - } - } -} - -@media (max-width: 991px) { - .layout-topbar { - justify-content: space-between; - - .layout-topbar-logo { - width: auto; - order: 2; - } - - .layout-menu-button { - margin-right: 0; - order: 1; - } - - .layout-topbar-menu-button { - display: inline-flex; - margin-left: 0; - order: 3; - } - - .layout-topbar-menu { - margin-left: 0; - position: absolute; - flex-direction: column; - background-color: var(--surface-overlay); - box-shadow: 0px 3px 5px rgba(0,0,0,.02), 0px 0px 2px rgba(0,0,0,.05), 0px 1px 4px rgba(0,0,0,.08); - border-radius: 12px; - padding: 1rem; - right: 2rem; - top: 5rem; - min-width: 15rem; - display: none; - -webkit-animation: scalein 0.15s linear; - animation: scalein 0.15s linear; - - &.layout-topbar-menu-mobile-active { - display: block - } - - .layout-topbar-button { - margin-left: 0; - display: flex; - width: 100%; - height: auto; - justify-content: flex-start; - border-radius: 12px; - padding: 1rem; - - i { - font-size: 1rem; - margin-right: .5rem; - } - - span { - font-weight: medium; - display: block; - } - } - } - } -} diff --git a/frontend/src/assets/layout/_typography.scss b/frontend/src/assets/layout/_typography.scss deleted file mode 100644 index b9a0c8ff..00000000 --- a/frontend/src/assets/layout/_typography.scss +++ /dev/null @@ -1,63 +0,0 @@ -h1, h2, h3, h4, h5, h6 { - margin: 1.5rem 0 1rem 0; - font-family: inherit; - font-weight: 500; - line-height: 1.2; - color: var(--surface-900); - - &:first-child { - margin-top: 0; - } -} - -h1 { - font-size: 2.5rem; -} - -h2 { - font-size: 2rem; -} - -h3 { - font-size: 1.75rem; -} - -h4 { - font-size: 1.5rem; -} - -h5 { - font-size: 1.25rem; -} - -h6 { - font-size: 1rem; -} - -mark { - background: #FFF8E1; - padding: .25rem .4rem; - border-radius: $borderRadius; - font-family: monospace; -} - -blockquote { - margin: 1rem 0; - padding: 0 2rem; - border-left: 4px solid #90A4AE; -} - -hr { - border-top: solid var(--surface-border); - border-width: 1px 0 0 0; - margin: 1rem 0; -} - -p { - margin: 0 0 1rem 0; - line-height: 1.5; - - &:last-child { - margin-bottom: 0; - } -} diff --git a/frontend/src/assets/layout/_utils.scss b/frontend/src/assets/layout/_utils.scss deleted file mode 100644 index 3a6fb0dc..00000000 --- a/frontend/src/assets/layout/_utils.scss +++ /dev/null @@ -1,27 +0,0 @@ -/* Utils */ -.clearfix:after { - content: " "; - display: block; - clear: both; -} - -.card { - background: var(--surface-card); - border: 1px solid var(--surface-border); - padding: 2rem; - margin-bottom: 2rem; - box-shadow: var(--card-shadow); - border-radius: $borderRadius; - - &:last-child { - margin-bottom: 0; - } -} - -.p-toast { - &.p-toast-top-right, - &.p-toast-top-left, - &.p-toast-top-center { - top: 100px; - } -} \ No newline at end of file diff --git a/frontend/src/assets/layout/_variables.scss b/frontend/src/assets/layout/_variables.scss deleted file mode 100644 index 8e9b025d..00000000 --- a/frontend/src/assets/layout/_variables.scss +++ /dev/null @@ -1,4 +0,0 @@ -/* General */ -$scale:14px; /* main font size */ -$borderRadius:12px; /* border radius of layout element e.g. card, sidebar */ -$transitionDuration:.2s; /* transition duration of layout elements e.g. sidebar, overlay menus */ diff --git a/frontend/src/assets/layout/layout.scss b/frontend/src/assets/layout/layout.scss deleted file mode 100644 index 431601d9..00000000 --- a/frontend/src/assets/layout/layout.scss +++ /dev/null @@ -1,11 +0,0 @@ -@import './_variables'; -@import "./_mixins"; -@import "./_preloading"; -@import "./_main"; -@import "./_topbar"; -@import "./_menu"; -@import "./_content"; -@import "./_footer"; -@import "./_responsive"; -@import "./_utils"; -@import "./_typography"; \ No newline at end of file diff --git a/frontend/src/assets/styles.scss b/frontend/src/assets/styles.scss deleted file mode 100644 index 86e3f177..00000000 --- a/frontend/src/assets/styles.scss +++ /dev/null @@ -1,11 +0,0 @@ -/* You can add global styles to this file, and also import other style files */ - -$gutter: 1rem; //for primeflex grid system -@import '@/assets/layout/layout.scss'; - -/* PrimeVue */ -@import 'primeflex/primeflex.scss'; -@import 'primeicons/primeicons.css'; - -/* Demos */ -@import '@/assets/demo/demo.scss'; diff --git a/frontend/src/assets/svg-icon/activity.svg b/frontend/src/assets/svg-icon/activity.svg new file mode 100644 index 00000000..abe892fc --- /dev/null +++ b/frontend/src/assets/svg-icon/activity.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/assets/svg-icon/ant-design--close-outlined.svg b/frontend/src/assets/svg-icon/ant-design--close-outlined.svg new file mode 100644 index 00000000..a7a695c4 --- /dev/null +++ b/frontend/src/assets/svg-icon/ant-design--close-outlined.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/ant-design--column-width-outlined.svg b/frontend/src/assets/svg-icon/ant-design--column-width-outlined.svg new file mode 100644 index 00000000..033a4cf2 --- /dev/null +++ b/frontend/src/assets/svg-icon/ant-design--column-width-outlined.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/ant-design--line-outlined.svg b/frontend/src/assets/svg-icon/ant-design--line-outlined.svg new file mode 100644 index 00000000..d98b1cd5 --- /dev/null +++ b/frontend/src/assets/svg-icon/ant-design--line-outlined.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/at-sign.svg b/frontend/src/assets/svg-icon/at-sign.svg new file mode 100644 index 00000000..625214dd --- /dev/null +++ b/frontend/src/assets/svg-icon/at-sign.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/assets/svg-icon/avatar.svg b/frontend/src/assets/svg-icon/avatar.svg new file mode 100644 index 00000000..66fe6f2e --- /dev/null +++ b/frontend/src/assets/svg-icon/avatar.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/assets/svg-icon/banner.svg b/frontend/src/assets/svg-icon/banner.svg new file mode 100644 index 00000000..192b6378 --- /dev/null +++ b/frontend/src/assets/svg-icon/banner.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/assets/svg-icon/cast.svg b/frontend/src/assets/svg-icon/cast.svg new file mode 100644 index 00000000..4f008d3a --- /dev/null +++ b/frontend/src/assets/svg-icon/cast.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/assets/svg-icon/chrome.svg b/frontend/src/assets/svg-icon/chrome.svg new file mode 100644 index 00000000..63141738 --- /dev/null +++ b/frontend/src/assets/svg-icon/chrome.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/assets/svg-icon/copy.svg b/frontend/src/assets/svg-icon/copy.svg new file mode 100644 index 00000000..ab256018 --- /dev/null +++ b/frontend/src/assets/svg-icon/copy.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/assets/svg-icon/custom-icon.svg b/frontend/src/assets/svg-icon/custom-icon.svg new file mode 100644 index 00000000..b33a43f5 --- /dev/null +++ b/frontend/src/assets/svg-icon/custom-icon.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/assets/svg-icon/empty-data.svg b/frontend/src/assets/svg-icon/empty-data.svg new file mode 100644 index 00000000..293486c5 --- /dev/null +++ b/frontend/src/assets/svg-icon/empty-data.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/assets/svg-icon/expectation.svg b/frontend/src/assets/svg-icon/expectation.svg new file mode 100644 index 00000000..1d87d5e5 --- /dev/null +++ b/frontend/src/assets/svg-icon/expectation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/fluent--book-information-24-regular.svg b/frontend/src/assets/svg-icon/fluent--book-information-24-regular.svg new file mode 100644 index 00000000..f607e26b --- /dev/null +++ b/frontend/src/assets/svg-icon/fluent--book-information-24-regular.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/heart.svg b/frontend/src/assets/svg-icon/heart.svg new file mode 100644 index 00000000..56e59b40 --- /dev/null +++ b/frontend/src/assets/svg-icon/heart.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/assets/svg-icon/heroicons--language.svg b/frontend/src/assets/svg-icon/heroicons--language.svg new file mode 100644 index 00000000..28a98422 --- /dev/null +++ b/frontend/src/assets/svg-icon/heroicons--language.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/icon-park-outline--all-application.svg b/frontend/src/assets/svg-icon/icon-park-outline--all-application.svg new file mode 100644 index 00000000..4b975ecf --- /dev/null +++ b/frontend/src/assets/svg-icon/icon-park-outline--all-application.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/line-md--menu-fold-left.svg b/frontend/src/assets/svg-icon/line-md--menu-fold-left.svg new file mode 100644 index 00000000..a7be6b37 --- /dev/null +++ b/frontend/src/assets/svg-icon/line-md--menu-fold-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/line-md--menu-fold-right.svg b/frontend/src/assets/svg-icon/line-md--menu-fold-right.svg new file mode 100644 index 00000000..30b30176 --- /dev/null +++ b/frontend/src/assets/svg-icon/line-md--menu-fold-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/majesticons--question-circle-line.svg b/frontend/src/assets/svg-icon/majesticons--question-circle-line.svg new file mode 100644 index 00000000..65be598a --- /dev/null +++ b/frontend/src/assets/svg-icon/majesticons--question-circle-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/material-symbols--filter-list-off.svg b/frontend/src/assets/svg-icon/material-symbols--filter-list-off.svg new file mode 100644 index 00000000..fb2edbfc --- /dev/null +++ b/frontend/src/assets/svg-icon/material-symbols--filter-list-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/material-symbols--hdr-auto.svg b/frontend/src/assets/svg-icon/material-symbols--hdr-auto.svg new file mode 100644 index 00000000..81a556c5 --- /dev/null +++ b/frontend/src/assets/svg-icon/material-symbols--hdr-auto.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/material-symbols--hide-image-outline-rounded.svg b/frontend/src/assets/svg-icon/material-symbols--hide-image-outline-rounded.svg new file mode 100644 index 00000000..460f88ca --- /dev/null +++ b/frontend/src/assets/svg-icon/material-symbols--hide-image-outline-rounded.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/material-symbols--nightlight-rounded.svg b/frontend/src/assets/svg-icon/material-symbols--nightlight-rounded.svg new file mode 100644 index 00000000..c3698b75 --- /dev/null +++ b/frontend/src/assets/svg-icon/material-symbols--nightlight-rounded.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/material-symbols--sunny.svg b/frontend/src/assets/svg-icon/material-symbols--sunny.svg new file mode 100644 index 00000000..0590c0df --- /dev/null +++ b/frontend/src/assets/svg-icon/material-symbols--sunny.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/mdi--format-horizontal-align-left.svg b/frontend/src/assets/svg-icon/mdi--format-horizontal-align-left.svg new file mode 100644 index 00000000..11959c99 --- /dev/null +++ b/frontend/src/assets/svg-icon/mdi--format-horizontal-align-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/mdi--format-horizontal-align-right.svg b/frontend/src/assets/svg-icon/mdi--format-horizontal-align-right.svg new file mode 100644 index 00000000..30ea731e --- /dev/null +++ b/frontend/src/assets/svg-icon/mdi--format-horizontal-align-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/mdi--land-fields.svg b/frontend/src/assets/svg-icon/mdi--land-fields.svg new file mode 100644 index 00000000..46f9a8c9 --- /dev/null +++ b/frontend/src/assets/svg-icon/mdi--land-fields.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/mdi--library-outline.svg b/frontend/src/assets/svg-icon/mdi--library-outline.svg new file mode 100644 index 00000000..20e0284e --- /dev/null +++ b/frontend/src/assets/svg-icon/mdi--library-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/mdi--logout.svg b/frontend/src/assets/svg-icon/mdi--logout.svg new file mode 100644 index 00000000..c0091731 --- /dev/null +++ b/frontend/src/assets/svg-icon/mdi--logout.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/mdi--monitor-dashboard.svg b/frontend/src/assets/svg-icon/mdi--monitor-dashboard.svg new file mode 100644 index 00000000..b1f247fe --- /dev/null +++ b/frontend/src/assets/svg-icon/mdi--monitor-dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/mdi--moon-and-stars.svg b/frontend/src/assets/svg-icon/mdi--moon-and-stars.svg new file mode 100644 index 00000000..65e377a9 --- /dev/null +++ b/frontend/src/assets/svg-icon/mdi--moon-and-stars.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/mdi--silo-outline.svg b/frontend/src/assets/svg-icon/mdi--silo-outline.svg new file mode 100644 index 00000000..3d45fa20 --- /dev/null +++ b/frontend/src/assets/svg-icon/mdi--silo-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/mdi--theme-light-dark.svg b/frontend/src/assets/svg-icon/mdi--theme-light-dark.svg new file mode 100644 index 00000000..79264473 --- /dev/null +++ b/frontend/src/assets/svg-icon/mdi--theme-light-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/mdi--user-circle-outline.svg b/frontend/src/assets/svg-icon/mdi--user-circle-outline.svg new file mode 100644 index 00000000..7e1ae595 --- /dev/null +++ b/frontend/src/assets/svg-icon/mdi--user-circle-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/mdi--white-balance-sunny.svg b/frontend/src/assets/svg-icon/mdi--white-balance-sunny.svg new file mode 100644 index 00000000..4a614814 --- /dev/null +++ b/frontend/src/assets/svg-icon/mdi--white-balance-sunny.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/network-error.svg b/frontend/src/assets/svg-icon/network-error.svg new file mode 100644 index 00000000..52f97ab9 --- /dev/null +++ b/frontend/src/assets/svg-icon/network-error.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/assets/svg-icon/no-icon.svg b/frontend/src/assets/svg-icon/no-icon.svg new file mode 100644 index 00000000..f6dcdd08 --- /dev/null +++ b/frontend/src/assets/svg-icon/no-icon.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/assets/svg-icon/no-permission.svg b/frontend/src/assets/svg-icon/no-permission.svg new file mode 100644 index 00000000..4c408cac --- /dev/null +++ b/frontend/src/assets/svg-icon/no-permission.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/assets/svg-icon/not-found.svg b/frontend/src/assets/svg-icon/not-found.svg new file mode 100644 index 00000000..a5136567 --- /dev/null +++ b/frontend/src/assets/svg-icon/not-found.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/assets/svg-icon/ph--caret-double-left-bold.svg b/frontend/src/assets/svg-icon/ph--caret-double-left-bold.svg new file mode 100644 index 00000000..503aa14d --- /dev/null +++ b/frontend/src/assets/svg-icon/ph--caret-double-left-bold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/ph--caret-double-right-bold.svg b/frontend/src/assets/svg-icon/ph--caret-double-right-bold.svg new file mode 100644 index 00000000..aa55132b --- /dev/null +++ b/frontend/src/assets/svg-icon/ph--caret-double-right-bold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/ph--sign-out.svg b/frontend/src/assets/svg-icon/ph--sign-out.svg new file mode 100644 index 00000000..114add6d --- /dev/null +++ b/frontend/src/assets/svg-icon/ph--sign-out.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/ph--user-circle.svg b/frontend/src/assets/svg-icon/ph--user-circle.svg new file mode 100644 index 00000000..5a579a39 --- /dev/null +++ b/frontend/src/assets/svg-icon/ph--user-circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/service-error.svg b/frontend/src/assets/svg-icon/service-error.svg new file mode 100644 index 00000000..0120f1e3 --- /dev/null +++ b/frontend/src/assets/svg-icon/service-error.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/assets/svg-icon/tabler--color-swatch.svg b/frontend/src/assets/svg-icon/tabler--color-swatch.svg new file mode 100644 index 00000000..21e61a22 --- /dev/null +++ b/frontend/src/assets/svg-icon/tabler--color-swatch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/svg-icon/wind.svg b/frontend/src/assets/svg-icon/wind.svg new file mode 100644 index 00000000..7c905906 --- /dev/null +++ b/frontend/src/assets/svg-icon/wind.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/components/ThemeSwitch.vue b/frontend/src/components/ThemeSwitch.vue deleted file mode 100644 index f987afc2..00000000 --- a/frontend/src/components/ThemeSwitch.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - diff --git a/frontend/src/components/advanced/table-column-setting.vue b/frontend/src/components/advanced/table-column-setting.vue new file mode 100644 index 00000000..d1e6dca4 --- /dev/null +++ b/frontend/src/components/advanced/table-column-setting.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/frontend/src/components/advanced/table-header-operation.vue b/frontend/src/components/advanced/table-header-operation.vue new file mode 100644 index 00000000..7ca287fd --- /dev/null +++ b/frontend/src/components/advanced/table-header-operation.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/frontend/src/components/common/app-provider.vue b/frontend/src/components/common/app-provider.vue new file mode 100644 index 00000000..36a361a8 --- /dev/null +++ b/frontend/src/components/common/app-provider.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/frontend/src/components/common/dark-mode-container.vue b/frontend/src/components/common/dark-mode-container.vue new file mode 100644 index 00000000..70f452ff --- /dev/null +++ b/frontend/src/components/common/dark-mode-container.vue @@ -0,0 +1,17 @@ + + + + + diff --git a/frontend/src/components/common/exception-base.vue b/frontend/src/components/common/exception-base.vue new file mode 100644 index 00000000..4b1dfc27 --- /dev/null +++ b/frontend/src/components/common/exception-base.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/frontend/src/components/common/full-screen.vue b/frontend/src/components/common/full-screen.vue new file mode 100644 index 00000000..41c1c562 --- /dev/null +++ b/frontend/src/components/common/full-screen.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/frontend/src/components/common/lang-switch.vue b/frontend/src/components/common/lang-switch.vue new file mode 100644 index 00000000..ef011aaa --- /dev/null +++ b/frontend/src/components/common/lang-switch.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/frontend/src/components/common/menu-toggler.vue b/frontend/src/components/common/menu-toggler.vue new file mode 100644 index 00000000..ad441354 --- /dev/null +++ b/frontend/src/components/common/menu-toggler.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/frontend/src/components/common/pin-toggler.vue b/frontend/src/components/common/pin-toggler.vue new file mode 100644 index 00000000..86cd08b3 --- /dev/null +++ b/frontend/src/components/common/pin-toggler.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/frontend/src/components/common/reload-button.vue b/frontend/src/components/common/reload-button.vue new file mode 100644 index 00000000..2881d03c --- /dev/null +++ b/frontend/src/components/common/reload-button.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/frontend/src/components/common/system-logo.vue b/frontend/src/components/common/system-logo.vue new file mode 100644 index 00000000..6a2eb12b --- /dev/null +++ b/frontend/src/components/common/system-logo.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/frontend/src/components/common/theme-schema-switch.vue b/frontend/src/components/common/theme-schema-switch.vue new file mode 100644 index 00000000..f505cbeb --- /dev/null +++ b/frontend/src/components/common/theme-schema-switch.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/frontend/src/components/custom/better-scroll.vue b/frontend/src/components/custom/better-scroll.vue new file mode 100644 index 00000000..7d2559c1 --- /dev/null +++ b/frontend/src/components/custom/better-scroll.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/frontend/src/components/custom/button-icon.vue b/frontend/src/components/custom/button-icon.vue new file mode 100644 index 00000000..9f8c9596 --- /dev/null +++ b/frontend/src/components/custom/button-icon.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/frontend/src/components/custom/count-to.vue b/frontend/src/components/custom/count-to.vue new file mode 100644 index 00000000..910b4cc2 --- /dev/null +++ b/frontend/src/components/custom/count-to.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/frontend/src/components/custom/look-forward.vue b/frontend/src/components/custom/look-forward.vue new file mode 100644 index 00000000..d0494f9e --- /dev/null +++ b/frontend/src/components/custom/look-forward.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/frontend/src/components/custom/mountains-bg.vue b/frontend/src/components/custom/mountains-bg.vue new file mode 100644 index 00000000..88ebd663 --- /dev/null +++ b/frontend/src/components/custom/mountains-bg.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/frontend/src/components/custom/soybean-avatar.vue b/frontend/src/components/custom/soybean-avatar.vue new file mode 100644 index 00000000..98c55bfb --- /dev/null +++ b/frontend/src/components/custom/soybean-avatar.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/frontend/src/components/custom/svg-icon.vue b/frontend/src/components/custom/svg-icon.vue new file mode 100644 index 00000000..0d200c71 --- /dev/null +++ b/frontend/src/components/custom/svg-icon.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/frontend/src/constants/app.ts b/frontend/src/constants/app.ts new file mode 100644 index 00000000..ca4f9276 --- /dev/null +++ b/frontend/src/constants/app.ts @@ -0,0 +1,52 @@ +import { transformRecordToOption } from '@/utils/common'; + +export const themeSchemaRecord: Record = { + light: 'theme.themeSchema.light', + dark: 'theme.themeSchema.dark', + auto: 'theme.themeSchema.auto' +}; + +export const themeSchemaOptions = transformRecordToOption(themeSchemaRecord); + +export const loginModuleRecord: Record = { + 'pwd-login': 'page.login.pwdLogin.title', + 'code-login': 'page.login.codeLogin.title', + register: 'page.login.register.title', + 'reset-pwd': 'page.login.resetPwd.title', + 'bind-wechat': 'page.login.bindWeChat.title' +}; + +export const themeLayoutModeRecord: Record = { + vertical: 'theme.layoutMode.vertical', + 'vertical-mix': 'theme.layoutMode.vertical-mix', + horizontal: 'theme.layoutMode.horizontal', + 'horizontal-mix': 'theme.layoutMode.horizontal-mix' +}; + +export const themeLayoutModeOptions = transformRecordToOption(themeLayoutModeRecord); + +export const themeScrollModeRecord: Record = { + wrapper: 'theme.scrollMode.wrapper', + content: 'theme.scrollMode.content' +}; + +export const themeScrollModeOptions = transformRecordToOption(themeScrollModeRecord); + +export const themeTabModeRecord: Record = { + chrome: 'theme.tab.mode.chrome', + button: 'theme.tab.mode.button' +}; + +export const themeTabModeOptions = transformRecordToOption(themeTabModeRecord); + +export const themePageAnimationModeRecord: Record = { + 'fade-slide': 'theme.page.mode.fade-slide', + fade: 'theme.page.mode.fade', + 'fade-bottom': 'theme.page.mode.fade-bottom', + 'fade-scale': 'theme.page.mode.fade-scale', + 'zoom-fade': 'theme.page.mode.zoom-fade', + 'zoom-out': 'theme.page.mode.zoom-out', + none: 'theme.page.mode.none' +}; + +export const themePageAnimationModeOptions = transformRecordToOption(themePageAnimationModeRecord); diff --git a/frontend/src/constants/business.ts b/frontend/src/constants/business.ts new file mode 100644 index 00000000..69d3a005 --- /dev/null +++ b/frontend/src/constants/business.ts @@ -0,0 +1,28 @@ +import { transformRecordToOption } from '@/utils/common'; + +export const enableStatusRecord: Record = { + '1': 'page.manage.common.status.enable', + '2': 'page.manage.common.status.disable' +}; + +export const enableStatusOptions = transformRecordToOption(enableStatusRecord); + +export const userGenderRecord: Record = { + '1': 'page.manage.user.gender.male', + '2': 'page.manage.user.gender.female' +}; + +export const userGenderOptions = transformRecordToOption(userGenderRecord); + +export const menuTypeRecord: Record = { + '1': 'page.manage.menu.type.directory', + '2': 'page.manage.menu.type.menu' +}; + +export const menuTypeOptions = transformRecordToOption(menuTypeRecord); + +export const menuIconTypeRecord: Record = { + '2': 'page.manage.menu.iconType.local' +}; + +export const menuIconTypeOptions = transformRecordToOption(menuIconTypeRecord); diff --git a/frontend/src/constants/common.ts b/frontend/src/constants/common.ts new file mode 100644 index 00000000..2d5e05e3 --- /dev/null +++ b/frontend/src/constants/common.ts @@ -0,0 +1,8 @@ +import { transformRecordToOption } from '@/utils/common'; + +export const yesOrNoRecord: Record = { + Y: 'common.yesOrNo.yes', + N: 'common.yesOrNo.no' +}; + +export const yesOrNoOptions = transformRecordToOption(yesOrNoRecord); diff --git a/frontend/src/constants/reg.ts b/frontend/src/constants/reg.ts new file mode 100644 index 00000000..47cedca8 --- /dev/null +++ b/frontend/src/constants/reg.ts @@ -0,0 +1,25 @@ +export const REG_USER_NAME = /^[\u4E00-\u9FA5a-zA-Z0-9_-]{4,16}$/; + +/** Phone reg */ +export const REG_PHONE = + /^[1](([3][0-9])|([4][01456789])|([5][012356789])|([6][2567])|([7][0-8])|([8][0-9])|([9][012356789]))[0-9]{8}$/; + +/** + * Password reg + * + * 12 characters or more + */ +export const REG_PWD = /^.{12,}$/; + +/** Email reg */ +export const REG_EMAIL = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; + +/** Six digit code reg */ +export const REG_CODE_SIX = /^\d{6}$/; + +/** Four digit code reg */ +export const REG_CODE_FOUR = /^\d{4}$/; + +/** Url reg */ +export const REG_URL = + /(((^https?:(?:\/\/)?)(?:[-;:&=+$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=+$,\w]+@)[A-Za-z0-9.-]+)((?:\/[+~%/.\w-_]*)?\??(?:[-+=&;%@.\w_]*)#?(?:[\w]*))?)$/; diff --git a/frontend/src/enum/index.ts b/frontend/src/enum/index.ts new file mode 100644 index 00000000..2739b3a4 --- /dev/null +++ b/frontend/src/enum/index.ts @@ -0,0 +1,7 @@ +export enum SetupStoreId { + App = 'app-store', + Theme = 'theme-store', + Auth = 'auth-store', + Route = 'route-store', + Tab = 'tab-store' +} diff --git a/frontend/src/hooks/business/auth.ts b/frontend/src/hooks/business/auth.ts new file mode 100644 index 00000000..f8fc7496 --- /dev/null +++ b/frontend/src/hooks/business/auth.ts @@ -0,0 +1,21 @@ +import { useAuthStore } from '@/store/modules/auth'; + +export function useAuth() { + const authStore = useAuthStore(); + + function hasAuth(codes: string | string[]) { + if (!authStore.isLogin) { + return false; + } + + if (typeof codes === 'string') { + return authStore.userInfo.buttons.includes(codes); + } + + return codes.some(code => authStore.userInfo.buttons.includes(code)); + } + + return { + hasAuth + }; +} diff --git a/frontend/src/hooks/business/captcha.ts b/frontend/src/hooks/business/captcha.ts new file mode 100644 index 00000000..c2303d31 --- /dev/null +++ b/frontend/src/hooks/business/captcha.ts @@ -0,0 +1,71 @@ +import { computed } from 'vue'; +import { useCountDown, useLoading } from '@sa/hooks'; +import { $t } from '@/locales'; +import { REG_PHONE } from '@/constants/reg'; + +export function useCaptcha() { + const { loading, startLoading, endLoading } = useLoading(); + const { count, start, stop, isCounting } = useCountDown(10); + + const label = computed(() => { + let text = $t('page.login.codeLogin.getCode'); + + const countingLabel = $t('page.login.codeLogin.reGetCode', { time: count.value }); + + if (loading.value) { + text = ''; + } + + if (isCounting.value) { + text = countingLabel; + } + + return text; + }); + + function isPhoneValid(phone: string) { + if (phone.trim() === '') { + window.$message?.error?.($t('form.phone.required')); + + return false; + } + + if (!REG_PHONE.test(phone)) { + window.$message?.error?.($t('form.phone.invalid')); + + return false; + } + + return true; + } + + async function getCaptcha(phone: string) { + const valid = isPhoneValid(phone); + + if (!valid || loading.value) { + return; + } + + startLoading(); + + // request + await new Promise(resolve => { + setTimeout(resolve, 500); + }); + + window.$message?.success?.($t('page.login.codeLogin.sendCodeSuccess')); + + start(); + + endLoading(); + } + + return { + label, + start, + stop, + isCounting, + loading, + getCaptcha + }; +} diff --git a/frontend/src/hooks/common/echarts.ts b/frontend/src/hooks/common/echarts.ts new file mode 100644 index 00000000..db27312a --- /dev/null +++ b/frontend/src/hooks/common/echarts.ts @@ -0,0 +1,235 @@ +import { computed, effectScope, nextTick, onScopeDispose, ref, watch } from 'vue'; +import * as echarts from 'echarts/core'; +import { BarChart, GaugeChart, LineChart, PictorialBarChart, PieChart, RadarChart, ScatterChart } from 'echarts/charts'; +import type { + BarSeriesOption, + GaugeSeriesOption, + LineSeriesOption, + PictorialBarSeriesOption, + PieSeriesOption, + RadarSeriesOption, + ScatterSeriesOption +} from 'echarts/charts'; +import { + DatasetComponent, + GridComponent, + LegendComponent, + TitleComponent, + ToolboxComponent, + TooltipComponent, + TransformComponent +} from 'echarts/components'; +import type { + DatasetComponentOption, + GridComponentOption, + LegendComponentOption, + TitleComponentOption, + ToolboxComponentOption, + TooltipComponentOption +} from 'echarts/components'; +import { LabelLayout, UniversalTransition } from 'echarts/features'; +import { CanvasRenderer } from 'echarts/renderers'; +import { useElementSize } from '@vueuse/core'; +import { useThemeStore } from '@/store/modules/theme'; + +export type ECOption = echarts.ComposeOption< + | BarSeriesOption + | LineSeriesOption + | PieSeriesOption + | ScatterSeriesOption + | PictorialBarSeriesOption + | RadarSeriesOption + | GaugeSeriesOption + | TitleComponentOption + | LegendComponentOption + | TooltipComponentOption + | GridComponentOption + | ToolboxComponentOption + | DatasetComponentOption +>; + +echarts.use([ + TitleComponent, + LegendComponent, + TooltipComponent, + GridComponent, + DatasetComponent, + TransformComponent, + ToolboxComponent, + BarChart, + LineChart, + PieChart, + ScatterChart, + PictorialBarChart, + RadarChart, + GaugeChart, + LabelLayout, + UniversalTransition, + CanvasRenderer +]); + +interface ChartHooks { + onRender?: (chart: echarts.ECharts) => void | Promise; + onUpdated?: (chart: echarts.ECharts) => void | Promise; + onDestroy?: (chart: echarts.ECharts) => void | Promise; +} + +/** + * use echarts + * + * @param optionsFactory echarts options factory function + * @param darkMode dark mode + */ +export function useEcharts(optionsFactory: () => T, hooks: ChartHooks = {}) { + const scope = effectScope(); + + const themeStore = useThemeStore(); + const darkMode = computed(() => themeStore.darkMode); + + const domRef = ref(null); + const initialSize = { width: 0, height: 0 }; + const { width, height } = useElementSize(domRef, initialSize); + + let chart: echarts.ECharts | null = null; + const chartOptions: T = optionsFactory(); + + const { + onRender = instance => { + const textColor = darkMode.value ? 'rgb(224, 224, 224)' : 'rgb(31, 31, 31)'; + const maskColor = darkMode.value ? 'rgba(0, 0, 0, 0.4)' : 'rgba(255, 255, 255, 0.8)'; + + instance.showLoading({ + color: themeStore.themeColor, + textColor, + fontSize: 14, + maskColor + }); + }, + onUpdated = instance => { + instance.hideLoading(); + }, + onDestroy + } = hooks; + + /** + * whether can render chart + * + * when domRef is ready and initialSize is valid + */ + function canRender() { + return domRef.value && initialSize.width > 0 && initialSize.height > 0; + } + + /** is chart rendered */ + function isRendered() { + return Boolean(domRef.value && chart); + } + + /** + * update chart options + * + * @param callback callback function + */ + async function updateOptions(callback: (opts: T, optsFactory: () => T) => ECOption = () => chartOptions) { + if (!isRendered()) return; + + const updatedOpts = callback(chartOptions, optionsFactory); + + Object.assign(chartOptions, updatedOpts); + + if (isRendered()) { + chart?.clear(); + } + + chart?.setOption({ ...updatedOpts, backgroundColor: 'transparent' }); + + await onUpdated?.(chart!); + } + + function setOptions(options: T) { + chart?.setOption(options); + } + + /** render chart */ + async function render() { + if (!isRendered()) { + const chartTheme = darkMode.value ? 'dark' : 'light'; + + await nextTick(); + + chart = echarts.init(domRef.value, chartTheme); + + chart.setOption({ ...chartOptions, backgroundColor: 'transparent' }); + + await onRender?.(chart); + } + } + + /** resize chart */ + function resize() { + chart?.resize(); + } + + /** destroy chart */ + async function destroy() { + if (!chart) return; + + await onDestroy?.(chart); + chart?.dispose(); + chart = null; + } + + /** change chart theme */ + async function changeTheme() { + await destroy(); + await render(); + await onUpdated?.(chart!); + } + + /** + * render chart by size + * + * @param w width + * @param h height + */ + async function renderChartBySize(w: number, h: number) { + initialSize.width = w; + initialSize.height = h; + + // size is abnormal, destroy chart + if (!canRender()) { + await destroy(); + + return; + } + + // resize chart + if (isRendered()) { + resize(); + } + + // render chart + await render(); + } + + scope.run(() => { + watch([width, height], ([newWidth, newHeight]) => { + renderChartBySize(newWidth, newHeight); + }); + + watch(darkMode, () => { + changeTheme(); + }); + }); + + onScopeDispose(() => { + destroy(); + scope.stop(); + }); + + return { + domRef, + updateOptions, + setOptions + }; +} diff --git a/frontend/src/hooks/common/form.ts b/frontend/src/hooks/common/form.ts new file mode 100644 index 00000000..e4a2733d --- /dev/null +++ b/frontend/src/hooks/common/form.ts @@ -0,0 +1,97 @@ +import { ref, toValue } from 'vue'; +import type { ComputedRef, Ref } from 'vue'; +import type { FormInst } from 'naive-ui'; +import { REG_CODE_SIX, REG_EMAIL, REG_PHONE, REG_PWD, REG_USER_NAME } from '@/constants/reg'; +import { $t } from '@/locales'; + +export function useFormRules() { + const patternRules = { + userName: { + pattern: REG_USER_NAME, + message: $t('form.userName.invalid'), + trigger: 'change' + }, + phone: { + pattern: REG_PHONE, + message: $t('form.phone.invalid'), + trigger: 'change' + }, + pwd: { + pattern: REG_PWD, + message: $t('form.pwd.invalid'), + trigger: 'change' + }, + code: { + pattern: REG_CODE_SIX, + message: $t('form.code.invalid'), + trigger: 'change' + }, + email: { + pattern: REG_EMAIL, + message: $t('form.email.invalid'), + trigger: 'change' + } + } satisfies Record; + + const formRules = { + userName: [createRequiredRule($t('form.userName.required')), patternRules.userName], + phone: [createRequiredRule($t('form.phone.required')), patternRules.phone], + pwd: [createRequiredRule($t('form.pwd.required')), patternRules.pwd], + code: [createRequiredRule($t('form.code.required')), patternRules.code], + email: [createRequiredRule($t('form.email.required')), patternRules.email] + } satisfies Record; + + /** the default required rule */ + const defaultRequiredRule = createRequiredRule($t('form.required')); + + function createRequiredRule(message: string): App.Global.FormRule { + return { + required: true, + message + }; + } + + /** create a rule for confirming the password */ + function createConfirmPwdRule(pwd: string | Ref | ComputedRef) { + const confirmPwdRule: App.Global.FormRule[] = [ + { required: true, message: $t('form.confirmPwd.required') }, + { + asyncValidator: (rule, value) => { + if (value.trim() !== '' && value !== toValue(pwd)) { + return Promise.reject(rule.message); + } + return Promise.resolve(); + }, + message: $t('form.confirmPwd.invalid'), + trigger: 'input' + } + ]; + return confirmPwdRule; + } + + return { + patternRules, + formRules, + defaultRequiredRule, + createRequiredRule, + createConfirmPwdRule + }; +} + +export function useNaiveForm() { + const formRef = ref(null); + + async function validate() { + await formRef.value?.validate(); + } + + async function restoreValidation() { + formRef.value?.restoreValidation(); + } + + return { + formRef, + validate, + restoreValidation + }; +} diff --git a/frontend/src/hooks/common/icon.ts b/frontend/src/hooks/common/icon.ts new file mode 100644 index 00000000..8998f603 --- /dev/null +++ b/frontend/src/hooks/common/icon.ts @@ -0,0 +1,10 @@ +import { useSvgIconRender } from '@sa/hooks'; +import SvgIcon from '@/components/custom/svg-icon.vue'; + +export function useSvgIcon() { + const { SvgIconVNode } = useSvgIconRender(SvgIcon); + + return { + SvgIconVNode + }; +} diff --git a/frontend/src/hooks/common/router.ts b/frontend/src/hooks/common/router.ts new file mode 100644 index 00000000..89374b7f --- /dev/null +++ b/frontend/src/hooks/common/router.ts @@ -0,0 +1,102 @@ +import { useRouter } from 'vue-router'; +import type { RouteLocationRaw } from 'vue-router'; +import type { RouteKey } from '@elegant-router/types'; +import { router as globalRouter } from '@/router'; + +/** + * Router push + * + * Jump to the specified route, it can replace function router.push + * + * @param inSetup Whether is in vue script setup + */ +export function useRouterPush(inSetup = true) { + const router = inSetup ? useRouter() : globalRouter; + const route = globalRouter.currentRoute; + + const routerPush = router.push; + + const routerBack = router.back; + + interface RouterPushOptions { + query?: Record; + params?: Record; + } + + async function routerPushByKey(key: RouteKey, options?: RouterPushOptions) { + const { query, params } = options || {}; + + const routeLocation: RouteLocationRaw = { + name: key + }; + + if (query) { + routeLocation.query = query; + } + + if (params) { + routeLocation.params = params; + } + + return routerPush(routeLocation); + } + + async function toHome() { + return routerPushByKey('root'); + } + + /** + * Navigate to login page + * + * @param loginModule The login module + * @param redirectUrl The redirect url, if not specified, it will be the current route fullPath + */ + async function toLogin(loginModule?: UnionKey.LoginModule, redirectUrl?: string) { + const module = loginModule || 'pwd-login'; + + const options: RouterPushOptions = { + params: { + module + } + }; + + const redirect = redirectUrl || route.value.fullPath; + + options.query = { + redirect + }; + + return routerPushByKey('login', options); + } + + /** + * Toggle login module + * + * @param module + */ + async function toggleLoginModule(module: UnionKey.LoginModule) { + const query = route.value.query as Record; + + return routerPushByKey('login', { query, params: { module } }); + } + + /** Redirect from login */ + async function redirectFromLogin() { + const redirect = route.value.query?.redirect as string; + + if (redirect) { + routerPush(redirect); + } else { + toHome(); + } + } + + return { + routerPush, + routerBack, + routerPushByKey, + toLogin, + toggleLoginModule, + redirectFromLogin + }; +} diff --git a/frontend/src/hooks/common/table.ts b/frontend/src/hooks/common/table.ts new file mode 100644 index 00000000..3a6d6a52 --- /dev/null +++ b/frontend/src/hooks/common/table.ts @@ -0,0 +1,268 @@ +import { computed, effectScope, onScopeDispose, reactive, ref, watch } from 'vue'; +import type { Ref } from 'vue'; +import type { PaginationProps } from 'naive-ui'; +import { cloneDeep } from 'lodash-es'; +import { useBoolean, useHookTable } from '@sa/hooks'; +import { useAppStore } from '@/store/modules/app'; +import { $t } from '@/locales'; + +type TableData = NaiveUI.TableData; +type GetTableData = NaiveUI.GetTableData; +type TableColumn = NaiveUI.TableColumn; + +export function useTable(config: NaiveUI.NaiveTableConfig) { + const scope = effectScope(); + const appStore = useAppStore(); + + const isMobile = computed(() => appStore.isMobile); + + const { apiFn, apiParams, immediate, showTotal } = config; + + const SELECTION_KEY = '__selection__'; + + const EXPAND_KEY = '__expand__'; + + const { + loading, + empty, + data, + columns, + columnChecks, + reloadColumns, + getData, + searchParams, + updateSearchParams, + resetSearchParams + } = useHookTable, TableColumn>>>({ + apiFn, + apiParams, + columns: config.columns, + transformer: res => { + const { records = [], current = 1, size = 10, total = 0 } = res.data || {}; + + const recordsWithIndex = records.map((item, index) => { + return { + ...item, + index: (current - 1) * size + index + 1 + }; + }); + + return { + data: recordsWithIndex, + pageNum: current, + pageSize: size, + total + }; + }, + getColumnChecks: cols => { + const checks: NaiveUI.TableColumnCheck[] = []; + + cols.forEach(column => { + if (isTableColumnHasKey(column)) { + checks.push({ + key: column.key as string, + title: column.title as string, + checked: true + }); + } else if (column.type === 'selection') { + checks.push({ + key: SELECTION_KEY, + title: $t('common.check'), + checked: true + }); + } else if (column.type === 'expand') { + checks.push({ + key: EXPAND_KEY, + title: $t('common.expandColumn'), + checked: true + }); + } + }); + + return checks; + }, + getColumns: (cols, checks) => { + const columnMap = new Map>>(); + + cols.forEach(column => { + if (isTableColumnHasKey(column)) { + columnMap.set(column.key as string, column); + } else if (column.type === 'selection') { + columnMap.set(SELECTION_KEY, column); + } else if (column.type === 'expand') { + columnMap.set(EXPAND_KEY, column); + } + }); + + const filteredColumns = checks + .filter(item => item.checked) + .map(check => columnMap.get(check.key) as TableColumn>); + + return filteredColumns; + }, + onFetched: async transformed => { + const { pageNum, pageSize, total } = transformed; + + updatePagination({ + page: pageNum, + pageSize, + itemCount: total + }); + }, + immediate + }); + + const pagination: PaginationProps = reactive({ + page: 1, + pageSize: 10, + showSizePicker: true, + pageSizes: [10, 15, 20, 25, 30], + onUpdatePage: async (page: number) => { + pagination.page = page; + + updateSearchParams({ + current: page, + size: pagination.pageSize! + }); + + getData(); + }, + onUpdatePageSize: async (pageSize: number) => { + pagination.pageSize = pageSize; + pagination.page = 1; + + updateSearchParams({ + current: pagination.page, + size: pageSize + }); + + getData(); + }, + ...(showTotal + ? { + prefix: page => $t('datatable.itemCount', { total: page.itemCount }) + } + : {}) + }); + + // this is for mobile, if the system does not support mobile, you can use `pagination` directly + const mobilePagination = computed(() => { + const p: PaginationProps = { + ...pagination, + pageSlot: isMobile.value ? 3 : 9, + prefix: !isMobile.value && showTotal ? pagination.prefix : undefined + }; + + return p; + }); + + function updatePagination(update: Partial) { + Object.assign(pagination, update); + } + + /** + * get data by page number + * + * @param pageNum the page number. default is 1 + */ + async function getDataByPage(pageNum: number = 1) { + updatePagination({ + page: pageNum + }); + + updateSearchParams({ + current: pageNum, + size: pagination.pageSize! + }); + + await getData(); + } + + scope.run(() => { + watch( + () => appStore.locale, + () => { + reloadColumns(); + } + ); + }); + + onScopeDispose(() => { + scope.stop(); + }); + + return { + loading, + empty, + data, + columns, + columnChecks, + reloadColumns, + pagination, + mobilePagination, + updatePagination, + getData, + getDataByPage, + searchParams, + updateSearchParams, + resetSearchParams + }; +} + +export function useTableOperate(data: Ref, getData: () => Promise) { + const { bool: drawerVisible, setTrue: openDrawer, setFalse: closeDrawer } = useBoolean(); + + const operateType = ref('add'); + + function handleAdd() { + operateType.value = 'add'; + openDrawer(); + } + + /** the editing row data */ + const editingData: Ref = ref(null); + + function handleEdit(id: T['id']) { + operateType.value = 'edit'; + const findItem = data.value.find(item => item.id === id) || null; + editingData.value = cloneDeep(findItem); + + openDrawer(); + } + + /** the checked row keys of table */ + const checkedRowKeys = ref([]); + + /** the hook after the batch delete operation is completed */ + async function onBatchDeleted() { + window.$message?.success($t('common.deleteSuccess')); + + checkedRowKeys.value = []; + + await getData(); + } + + /** the hook after the delete operation is completed */ + async function onDeleted() { + window.$message?.success($t('common.deleteSuccess')); + + await getData(); + } + + return { + drawerVisible, + openDrawer, + closeDrawer, + operateType, + handleAdd, + editingData, + handleEdit, + checkedRowKeys, + onBatchDeleted, + onDeleted + }; +} + +function isTableColumnHasKey(column: TableColumn): column is NaiveUI.TableColumnWithKey { + return Boolean((column as NaiveUI.TableColumnWithKey).key); +} diff --git a/frontend/src/layout/AppFooter.vue b/frontend/src/layout/AppFooter.vue deleted file mode 100644 index 46d92d6d..00000000 --- a/frontend/src/layout/AppFooter.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - - diff --git a/frontend/src/layout/AppLayout.vue b/frontend/src/layout/AppLayout.vue deleted file mode 100644 index dd7f3cdb..00000000 --- a/frontend/src/layout/AppLayout.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - - - diff --git a/frontend/src/layout/AppMenu.vue b/frontend/src/layout/AppMenu.vue deleted file mode 100644 index 9721316a..00000000 --- a/frontend/src/layout/AppMenu.vue +++ /dev/null @@ -1,23 +0,0 @@ - - - - - diff --git a/frontend/src/layout/AppMenuItem.vue b/frontend/src/layout/AppMenuItem.vue deleted file mode 100644 index ea0ed6ca..00000000 --- a/frontend/src/layout/AppMenuItem.vue +++ /dev/null @@ -1,93 +0,0 @@ - - - - - diff --git a/frontend/src/layout/AppSidebar.vue b/frontend/src/layout/AppSidebar.vue deleted file mode 100644 index e67654f6..00000000 --- a/frontend/src/layout/AppSidebar.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/frontend/src/layout/AppTopbar.vue b/frontend/src/layout/AppTopbar.vue deleted file mode 100644 index 1f1094c8..00000000 --- a/frontend/src/layout/AppTopbar.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - - - diff --git a/frontend/src/layout/composables/layout.js b/frontend/src/layout/composables/layout.js deleted file mode 100644 index e6c68a3a..00000000 --- a/frontend/src/layout/composables/layout.js +++ /dev/null @@ -1,48 +0,0 @@ -import { toRefs, reactive, computed } from 'vue'; - -const layoutConfig = reactive({ - ripple: true, - darkTheme: false, - inputStyle: 'outlined', - menuMode: 'static', - theme: 'aura-light-purple', - scale: 14, - activeMenuItem: null -}); - -const layoutState = reactive({ - staticMenuDesktopInactive: false, - overlayMenuActive: false, - profileSidebarVisible: false, - configSidebarVisible: false, - staticMenuMobileActive: false, - menuHoverActive: false -}); - -export function useLayout() { - const setScale = (scale) => { - layoutConfig.scale = scale; - }; - - const setActiveMenuItem = (item) => { - layoutConfig.activeMenuItem = item.value || item; - }; - - const onMenuToggle = () => { - if (layoutConfig.menuMode === 'overlay') { - layoutState.overlayMenuActive = !layoutState.overlayMenuActive; - } - - if (window.innerWidth > 991) { - layoutState.staticMenuDesktopInactive = !layoutState.staticMenuDesktopInactive; - } else { - layoutState.staticMenuMobileActive = !layoutState.staticMenuMobileActive; - } - }; - - const isSidebarActive = computed(() => layoutState.overlayMenuActive || layoutState.staticMenuMobileActive); - - const isDarkTheme = computed(() => layoutConfig.darkTheme); - - return { layoutConfig: toRefs(layoutConfig), layoutState: toRefs(layoutState), setScale, onMenuToggle, isSidebarActive, isDarkTheme, setActiveMenuItem }; -} diff --git a/frontend/src/layouts/base-layout/index.vue b/frontend/src/layouts/base-layout/index.vue new file mode 100644 index 00000000..746aa68b --- /dev/null +++ b/frontend/src/layouts/base-layout/index.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/frontend/src/layouts/blank-layout/index.vue b/frontend/src/layouts/blank-layout/index.vue new file mode 100644 index 00000000..2e393f01 --- /dev/null +++ b/frontend/src/layouts/blank-layout/index.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/frontend/src/layouts/context/index.ts b/frontend/src/layouts/context/index.ts new file mode 100644 index 00000000..631f675b --- /dev/null +++ b/frontend/src/layouts/context/index.ts @@ -0,0 +1,47 @@ +import { computed, ref, watch } from 'vue'; +import { useRoute } from 'vue-router'; +import { useContext } from '@sa/hooks'; +import { useRouteStore } from '@/store/modules/route'; + +export const { setupStore: setupMixMenuContext, useStore: useMixMenuContext } = useContext('mix-menu', useMixMenu); + +function useMixMenu() { + const route = useRoute(); + const routeStore = useRouteStore(); + + const activeFirstLevelMenuKey = ref(''); + + function setActiveFirstLevelMenuKey(key: string) { + activeFirstLevelMenuKey.value = key; + } + + function getActiveFirstLevelMenuKey() { + const { hideInMenu, activeMenu } = route.meta; + const name = route.name as string; + + const routeName = (hideInMenu ? activeMenu : name) || name; + + const [firstLevelRouteName] = routeName.split('_'); + + setActiveFirstLevelMenuKey(firstLevelRouteName); + } + + const menus = computed( + () => routeStore.menus.find(menu => menu.key === activeFirstLevelMenuKey.value)?.children || [] + ); + + watch( + () => route.name, + () => { + getActiveFirstLevelMenuKey(); + }, + { immediate: true } + ); + + return { + activeFirstLevelMenuKey, + setActiveFirstLevelMenuKey, + getActiveFirstLevelMenuKey, + menus + }; +} diff --git a/frontend/src/layouts/modules/global-breadcrumb/index.vue b/frontend/src/layouts/modules/global-breadcrumb/index.vue new file mode 100644 index 00000000..0a17907c --- /dev/null +++ b/frontend/src/layouts/modules/global-breadcrumb/index.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-content/index.vue b/frontend/src/layouts/modules/global-content/index.vue new file mode 100644 index 00000000..2e7a05b2 --- /dev/null +++ b/frontend/src/layouts/modules/global-content/index.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-footer/index.vue b/frontend/src/layouts/modules/global-footer/index.vue new file mode 100644 index 00000000..545c8cff --- /dev/null +++ b/frontend/src/layouts/modules/global-footer/index.vue @@ -0,0 +1,15 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-header/components/help-button.vue b/frontend/src/layouts/modules/global-header/components/help-button.vue new file mode 100644 index 00000000..844825cf --- /dev/null +++ b/frontend/src/layouts/modules/global-header/components/help-button.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-header/components/theme-button.vue b/frontend/src/layouts/modules/global-header/components/theme-button.vue new file mode 100644 index 00000000..5502b004 --- /dev/null +++ b/frontend/src/layouts/modules/global-header/components/theme-button.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-header/components/user-avatar.vue b/frontend/src/layouts/modules/global-header/components/user-avatar.vue new file mode 100644 index 00000000..7ba1ee68 --- /dev/null +++ b/frontend/src/layouts/modules/global-header/components/user-avatar.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-header/index.vue b/frontend/src/layouts/modules/global-header/index.vue new file mode 100644 index 00000000..e12604de --- /dev/null +++ b/frontend/src/layouts/modules/global-header/index.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-logo/index.vue b/frontend/src/layouts/modules/global-logo/index.vue new file mode 100644 index 00000000..cb52f2b8 --- /dev/null +++ b/frontend/src/layouts/modules/global-logo/index.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-menu/base-menu.vue b/frontend/src/layouts/modules/global-menu/base-menu.vue new file mode 100644 index 00000000..e3d17c40 --- /dev/null +++ b/frontend/src/layouts/modules/global-menu/base-menu.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-menu/first-level-menu.vue b/frontend/src/layouts/modules/global-menu/first-level-menu.vue new file mode 100644 index 00000000..6665db43 --- /dev/null +++ b/frontend/src/layouts/modules/global-menu/first-level-menu.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-menu/horizontal-mix-menu.vue b/frontend/src/layouts/modules/global-menu/horizontal-mix-menu.vue new file mode 100644 index 00000000..1a57b2df --- /dev/null +++ b/frontend/src/layouts/modules/global-menu/horizontal-mix-menu.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-menu/vertical-mix-menu.vue b/frontend/src/layouts/modules/global-menu/vertical-mix-menu.vue new file mode 100644 index 00000000..0c0a9582 --- /dev/null +++ b/frontend/src/layouts/modules/global-menu/vertical-mix-menu.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-search/components/search-footer.vue b/frontend/src/layouts/modules/global-search/components/search-footer.vue new file mode 100644 index 00000000..0fa6c8f8 --- /dev/null +++ b/frontend/src/layouts/modules/global-search/components/search-footer.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-search/components/search-modal.vue b/frontend/src/layouts/modules/global-search/components/search-modal.vue new file mode 100644 index 00000000..39f18a84 --- /dev/null +++ b/frontend/src/layouts/modules/global-search/components/search-modal.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-search/components/search-result.vue b/frontend/src/layouts/modules/global-search/components/search-result.vue new file mode 100644 index 00000000..bb13952e --- /dev/null +++ b/frontend/src/layouts/modules/global-search/components/search-result.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-search/index.vue b/frontend/src/layouts/modules/global-search/index.vue new file mode 100644 index 00000000..95c2a7b1 --- /dev/null +++ b/frontend/src/layouts/modules/global-search/index.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-sider/index.vue b/frontend/src/layouts/modules/global-sider/index.vue new file mode 100644 index 00000000..d843a767 --- /dev/null +++ b/frontend/src/layouts/modules/global-sider/index.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-tab/context-menu.vue b/frontend/src/layouts/modules/global-tab/context-menu.vue new file mode 100644 index 00000000..9653df53 --- /dev/null +++ b/frontend/src/layouts/modules/global-tab/context-menu.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/frontend/src/layouts/modules/global-tab/index.vue b/frontend/src/layouts/modules/global-tab/index.vue new file mode 100644 index 00000000..cecd7cb6 --- /dev/null +++ b/frontend/src/layouts/modules/global-tab/index.vue @@ -0,0 +1,213 @@ + + + + + diff --git a/frontend/src/layouts/modules/theme-drawer/components/layout-mode-card.vue b/frontend/src/layouts/modules/theme-drawer/components/layout-mode-card.vue new file mode 100644 index 00000000..ae396048 --- /dev/null +++ b/frontend/src/layouts/modules/theme-drawer/components/layout-mode-card.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/frontend/src/layouts/modules/theme-drawer/components/setting-item.vue b/frontend/src/layouts/modules/theme-drawer/components/setting-item.vue new file mode 100644 index 00000000..fd2111e9 --- /dev/null +++ b/frontend/src/layouts/modules/theme-drawer/components/setting-item.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/frontend/src/layouts/modules/theme-drawer/index.vue b/frontend/src/layouts/modules/theme-drawer/index.vue new file mode 100644 index 00000000..aa937d5a --- /dev/null +++ b/frontend/src/layouts/modules/theme-drawer/index.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/frontend/src/layouts/modules/theme-drawer/modules/config-operation.vue b/frontend/src/layouts/modules/theme-drawer/modules/config-operation.vue new file mode 100644 index 00000000..04408f2a --- /dev/null +++ b/frontend/src/layouts/modules/theme-drawer/modules/config-operation.vue @@ -0,0 +1,58 @@ + + +