From 47089d86161ff910fa23a8db65a6238c07a6929f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Hern=C3=A1ndez?= Date: Mon, 9 Dec 2024 10:38:55 +0100 Subject: [PATCH 01/15] v1.194.0-rc1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f155f39e3d..8ae264a0e5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uwazi", - "version": "1.193.0-rc6", + "version": "1.194.0-rc1", "description": "Uwazi is a free, open-source solution for organising, analysing and publishing your documents.", "keywords": [ "react" From 4b9eff2b069aa7f7c93d26be29a49a0040feaaa9 Mon Sep 17 00:00:00 2001 From: Daneryl Date: Tue, 10 Dec 2024 09:35:47 +0100 Subject: [PATCH 02/15] Merge back from production and Bump rc version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8ae264a0e5..41992d93a7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uwazi", - "version": "1.194.0-rc1", + "version": "1.194.0-rc2", "description": "Uwazi is a free, open-source solution for organising, analysing and publishing your documents.", "keywords": [ "react" From cb7b01275ad7295a6434f80c6d3579d17ba19861 Mon Sep 17 00:00:00 2001 From: Daneryl Date: Wed, 11 Dec 2024 13:20:31 +0100 Subject: [PATCH 03/15] Merge back from production and Bump rc version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 41992d93a7..a2ee431869 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uwazi", - "version": "1.194.0-rc2", + "version": "1.194.0-rc3", "description": "Uwazi is a free, open-source solution for organising, analysing and publishing your documents.", "keywords": [ "react" From a3e78ff29fd8f5da69b3bb43da5725538c4a49ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20P=C3=B3lit?= Date: Wed, 11 Dec 2024 13:32:11 -0500 Subject: [PATCH 04/15] Added match settings for manual procedures (#7539) * Added match settings for manual procedures * Bump version --- app/api/suggestions/specs/fixtures.ts | 22 ++++++++++++++++++- app/api/suggestions/specs/suggestions.spec.ts | 8 ++++--- app/api/suggestions/suggestions.ts | 6 +++-- package.json | 2 +- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/app/api/suggestions/specs/fixtures.ts b/app/api/suggestions/specs/fixtures.ts index 79dc3fc101..8c4c7a8329 100644 --- a/app/api/suggestions/specs/fixtures.ts +++ b/app/api/suggestions/specs/fixtures.ts @@ -117,6 +117,16 @@ const fixtures: DBFixture = { date: 5, page: 2, status: 'ready', + state: { + labeled: true, + obsolete: false, + match: true, + withValue: false, + withSuggestion: false, + processing: false, + error: false, + hasContext: false, + }, error: '', }, { @@ -130,6 +140,16 @@ const fixtures: DBFixture = { date: 5, page: 2, status: 'ready', + state: { + labeled: true, + obsolete: false, + match: false, + withValue: false, + withSuggestion: false, + processing: false, + error: false, + hasContext: false, + }, error: '', }, { @@ -1323,9 +1343,9 @@ const stateFilterFixtures: DBFixture = { factory.ixSuggestion({ extractorId: factory.id('unused_extractor'), state: { - labeled: true, match: true, obsolete: true, + labeled: true, error: true, }, }), diff --git a/app/api/suggestions/specs/suggestions.spec.ts b/app/api/suggestions/specs/suggestions.spec.ts index 09ac72ccce..b88b8954e4 100644 --- a/app/api/suggestions/specs/suggestions.spec.ts +++ b/app/api/suggestions/specs/suggestions.spec.ts @@ -1541,7 +1541,7 @@ describe('suggestions', () => { const query = { entityId: 'shared1' }; await Suggestions.setObsolete(query); const obsoletes = await db.mongodb?.collection('ixsuggestions').find(query).toArray(); - expect(obsoletes?.every(s => s.state.obsolete)).toBe(true); + expect(obsoletes?.every(s => s.state.obsolete && s.state.match === null)).toBe(true); expect(obsoletes?.length).toBe(4); }); }); @@ -1555,7 +1555,7 @@ describe('suggestions', () => { const query = { entityId: 'shared1' }; await Suggestions.markSuggestionsWithoutSegmentation(query); const notSegmented = await db.mongodb?.collection('ixsuggestions').find(query).toArray(); - expect(notSegmented?.every(s => s.state.error)).toBe(true); + expect(notSegmented?.every(s => s.state.error && s.state.match === null)).toBe(true); }); it('should not mark suggestions when segmentations are correct', async () => { @@ -1572,7 +1572,7 @@ describe('suggestions', () => { expect(segmented?.length).toBe(1); expect(segmented?.every(s => s.state?.error)).toBe(false); expect(notSegmented?.length).toBe(1); - expect(notSegmented?.every(s => s.state.error)).toBe(true); + expect(notSegmented?.every(s => s.state.error && s.state.match === null)).toBe(true); }); }); @@ -1612,6 +1612,7 @@ describe('suggestions', () => { ...newErroringSuggestion, state: { error: true, + match: null, }, }); expect(await findOneSuggestion({ entityId: newProcessingSuggestion.entityId })).toMatchObject( @@ -1619,6 +1620,7 @@ describe('suggestions', () => { ...newProcessingSuggestion, state: { processing: true, + match: null, }, } ); diff --git a/app/api/suggestions/suggestions.ts b/app/api/suggestions/suggestions.ts index 3f57f55fd7..087ffac480 100644 --- a/app/api/suggestions/suggestions.ts +++ b/app/api/suggestions/suggestions.ts @@ -277,7 +277,9 @@ const Suggestions = { updateStates, setObsolete: async (query: any) => - IXSuggestionsModel.updateMany(query, { $set: { 'state.obsolete': true } }), + IXSuggestionsModel.updateMany(query, { + $set: { 'state.obsolete': true, 'state.match': null }, + }), markSuggestionsWithoutSegmentation: async (query: any) => { const segmentedFilesIds = await getSegmentedFilesIds(); @@ -286,7 +288,7 @@ const Suggestions = { ...query, fileId: { $nin: segmentedFilesIds }, }, - { $set: { 'state.error': true } } + { $set: { 'state.error': true, 'state.match': null } } ); }, diff --git a/package.json b/package.json index a2ee431869..552303ed9c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uwazi", - "version": "1.194.0-rc3", + "version": "1.194.0-rc4", "description": "Uwazi is a free, open-source solution for organising, analysing and publishing your documents.", "keywords": [ "react" From 99d8eb2c62ea4cad58af45eb285b1e9a5f4e05a0 Mon Sep 17 00:00:00 2001 From: Daneryl Date: Thu, 12 Dec 2024 10:08:29 +0100 Subject: [PATCH 05/15] Merge back from production and Bump rc version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 552303ed9c..8e4d12b580 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uwazi", - "version": "1.194.0-rc4", + "version": "1.194.0-rc5", "description": "Uwazi is a free, open-source solution for organising, analysing and publishing your documents.", "keywords": [ "react" From 879e8fa4d7784196ff3a279ca187a82e584cc8e5 Mon Sep 17 00:00:00 2001 From: Joao Date: Thu, 12 Dec 2024 08:23:30 -0400 Subject: [PATCH 06/15] Merge back from production and Bump rc version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8e4d12b580..4b64e967b7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uwazi", - "version": "1.194.0-rc5", + "version": "1.194.0-rc6", "description": "Uwazi is a free, open-source solution for organising, analysing and publishing your documents.", "keywords": [ "react" From c7fb6c286e9fe0f63235a1188ee437f4dfb1f9f4 Mon Sep 17 00:00:00 2001 From: A happy cat Date: Fri, 13 Dec 2024 12:23:56 +0100 Subject: [PATCH 07/15] I18NLinks will now scroll to elements that match the hash in the url --- app/react/I18N/components/I18NLink.tsx | 34 ++++-- .../I18N/components/specs/I18NLink.spec.js | 112 +++++++++++------- 2 files changed, 93 insertions(+), 53 deletions(-) diff --git a/app/react/I18N/components/I18NLink.tsx b/app/react/I18N/components/I18NLink.tsx index c79cc80085..96a6d70dfd 100644 --- a/app/react/I18N/components/I18NLink.tsx +++ b/app/react/I18N/components/I18NLink.tsx @@ -1,6 +1,6 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { connect } from 'react-redux'; -import { useNavigate, NavLink } from 'react-router-dom'; +import { useNavigate, NavLink, useLocation } from 'react-router-dom'; import { omit } from 'lodash'; const defaultProps = { @@ -33,17 +33,34 @@ const I18NLink = (props: I18NLinkProps) => { } = props; const navigate = useNavigate(); + const location = useLocation(); + + const scrollToHashWithRetry = (hash: string, retries = 10, delay = 100) => { + if (retries <= 0) return; + setTimeout(() => { + const element = document.getElementById(hash.substring(1)); + if (element) { + element.scrollIntoView({ behavior: 'smooth' }); + } else { + scrollToHashWithRetry(hash, retries - 1, delay); + } + }, delay); + }; + + const _navigate = () => { + navigate(to, { replace }); + scrollToHashWithRetry(location.hash); + }; const onClickHandler = (e: { preventDefault: () => void }) => { e.preventDefault(); - if (disabled) return; if (onClick && confirmTitle) { props.mainContext.confirm({ accept: () => { onClick(e); - navigate(to, { replace }); + _navigate(); }, title: confirmTitle, message: confirmMessage, @@ -53,13 +70,16 @@ const I18NLink = (props: I18NLinkProps) => { if (onClick) { onClick(e); - navigate(to, { replace }); + _navigate(); return; } - - navigate(to, { replace }); + _navigate(); }; + useEffect(() => { + scrollToHashWithRetry(location.hash); + }, [location]); + const newProps = omit(props, [ 'dispatch', 'onClick', diff --git a/app/react/I18N/components/specs/I18NLink.spec.js b/app/react/I18N/components/specs/I18NLink.spec.js index 0ba501aab8..7f27c27261 100644 --- a/app/react/I18N/components/specs/I18NLink.spec.js +++ b/app/react/I18N/components/specs/I18NLink.spec.js @@ -1,71 +1,91 @@ +/** + * @jest-environment jsdom + */ +/* eslint-disable max-statements */ import React from 'react'; -import { shallow } from 'enzyme'; -import { NavLink } from 'react-router-dom'; - -import { I18NLink, mapStateToProps } from '../I18NLink'; - -jest.mock('react-router-dom', () => ({ - ...jest.requireActual('react-router-dom'), - useNavigate: () => () => {}, -})); +import { render, screen, fireEvent } from '@testing-library/react'; +import { I18NLink } from '../I18NLink'; +import { MemoryRouter, Route, Routes } from 'react-router-dom'; describe('I18NLink', () => { - let component; let props; - const clickAction = () => {}; - const mouseOverAction = () => {}; - const event = jasmine.createSpyObj(['preventDefault']); + const clickAction = jest.fn(); beforeEach(() => { + jest.clearAllMocks(); props = { locale: 'es', - to: '/templates', - activeClass: 'is-active', + to: '/page/1#section1', onClick: clickAction, - onMouseOver: mouseOverAction, - dispatch: () => {}, + dispatch: jest.fn(), }; }); - const render = () => { - component = shallow(); + const renderComponent = (initialEntries = ['/']) => { + render( + + + Section 1} /> + + Section 1 +

Something to forget

+

Something to remember

+ + } + /> + + + ); }; describe('render', () => { - it('should pass other props, except for dispatch', () => { - spyOn(props, 'onClick'); - render(); - const link = component.find(NavLink); - expect(link.props().onMouseOver).toBe(mouseOverAction); - expect(link.props().dispatch).toBeUndefined(); - component.simulate('click', event); - expect(props.onClick).toHaveBeenCalledWith(event); - expect(link.props().to).toBe(props.to); + it('should trigger onClick', () => { + renderComponent(); + const link = screen.getByText('Section 1'); + fireEvent.click(link); + expect(clickAction).toHaveBeenCalled(); + expect(link).toHaveAttribute('href', props.to); }); - }); - describe('when its disabled', () => { - it('should do nothing when clicked', () => { - I18NLink.navigate = jasmine.createSpy('navigate'); - spyOn(props, 'onClick'); - props.disabled = true; - render(); - component.simulate('click', event); - expect(props.onClick).not.toHaveBeenCalled(); - expect(event.preventDefault).toHaveBeenCalled(); - expect(I18NLink.navigate).not.toHaveBeenCalled(); + it('should navigate when clicked', () => { + renderComponent(); + const link = screen.getByRole('link'); + fireEvent.click(link); + expect(screen.getByText('Something to remember')).toBeInTheDocument(); + }); + + it('should scroll to the hash element', () => { + renderComponent(['/page/1']); + const link = screen.getByRole('link'); + const section = screen.getByText('Something to remember'); + section.scrollIntoView = jest.fn(); + + jest.useFakeTimers(); + fireEvent.click(link); + jest.runAllTimers(); + + expect(section.scrollIntoView).toHaveBeenCalled(); }); }); - describe('mapStateToProps', () => { - it('should append the locale to the "to" url', () => { - expect(mapStateToProps({ locale: 'es' }, props).to).toBe('/es/templates'); + describe('when its disabled', () => { + it('should not trigger onClick', () => { + props.disabled = true; + renderComponent(); + const link = screen.getByText('Section 1'); + fireEvent.click(link); + expect(clickAction).not.toHaveBeenCalled(); }); - describe('when there is no locale', () => { - it('should pass the "to" url unchanged', () => { - expect(mapStateToProps({}, props).to).toBe('/templates'); - }); + it('should not navigate when clicked', () => { + props.disabled = true; + renderComponent(); + const link = screen.getByRole('link'); + fireEvent.click(link); + expect(screen.queryByText('Something to remember')).not.toBeInTheDocument(); }); }); }); From d5e2dcb6542e2c6279b2f1d6ff0f55d8d5f8d98e Mon Sep 17 00:00:00 2001 From: A happy cat Date: Fri, 13 Dec 2024 12:54:13 +0100 Subject: [PATCH 08/15] version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b09fd06ee0..eb5f3f81d1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uwazi", - "version": "1.193.5", + "version": "1.193.6", "description": "Uwazi is a free, open-source solution for organising, analysing and publishing your documents.", "keywords": [ "react" From 3bea4278042519938bd4f8e281fc3e8a2df3b557 Mon Sep 17 00:00:00 2001 From: A happy cat Date: Fri, 13 Dec 2024 12:55:41 +0100 Subject: [PATCH 09/15] returning if no hash --- app/react/I18N/components/I18NLink.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/app/react/I18N/components/I18NLink.tsx b/app/react/I18N/components/I18NLink.tsx index 96a6d70dfd..338747c73c 100644 --- a/app/react/I18N/components/I18NLink.tsx +++ b/app/react/I18N/components/I18NLink.tsx @@ -36,6 +36,7 @@ const I18NLink = (props: I18NLinkProps) => { const location = useLocation(); const scrollToHashWithRetry = (hash: string, retries = 10, delay = 100) => { + if (!hash) return; if (retries <= 0) return; setTimeout(() => { const element = document.getElementById(hash.substring(1)); From ca18545d66ee488ba2d8da3b61d2b1dedc7b64d4 Mon Sep 17 00:00:00 2001 From: Alberto Casado Torres Date: Fri, 13 Dec 2024 13:06:01 +0100 Subject: [PATCH 10/15] Ignore global css (#7543) * removed global.css * ignoring global.css * updated component testing to generate global css prior tests * added yarn install to the flow --- .github/workflows/ci_cypress_component.yml | 4 + .gitignore | 1 + app/react/App/styles/globals.css | 4431 -------------------- 3 files changed, 5 insertions(+), 4431 deletions(-) delete mode 100644 app/react/App/styles/globals.css diff --git a/.github/workflows/ci_cypress_component.yml b/.github/workflows/ci_cypress_component.yml index b8982d5e6a..a50dca1f15 100644 --- a/.github/workflows/ci_cypress_component.yml +++ b/.github/workflows/ci_cypress_component.yml @@ -22,6 +22,10 @@ jobs: uses: actions/setup-node@v4 with: node-version-file: '.nvmrc' + - name: install dependencies + run: yarn install + - name: generate global css + run: yarn tailwind - name: Cypress run uses: cypress-io/github-action@v5 with: diff --git a/.gitignore b/.gitignore index 0d100e0675..c6f4723266 100644 --- a/.gitignore +++ b/.gitignore @@ -57,3 +57,4 @@ cypress/videos/* *.diff.png *.actual.png .trunk/* +app/react/App/styles/globals.css diff --git a/app/react/App/styles/globals.css b/app/react/App/styles/globals.css deleted file mode 100644 index f1d3c6f4d5..0000000000 --- a/app/react/App/styles/globals.css +++ /dev/null @@ -1,4431 +0,0 @@ -/* -! tailwindcss v3.4.10 | MIT License | https://tailwindcss.com -*/ - -/* -1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) -2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) -*/ - -*, -::before, -::after { - box-sizing: border-box; - /* 1 */ - border-width: 0; - /* 2 */ - border-style: solid; - /* 2 */ - border-color: #E5E7EB; - /* 2 */ -} - -::before, -::after { - --tw-content: ''; -} - -/* -1. Use a consistent sensible line-height in all browsers. -2. Prevent adjustments of font size after orientation changes in iOS. -3. Use a more readable tab size. -4. Use the user's configured `sans` font-family by default. -5. Use the user's configured `sans` font-feature-settings by default. -6. Use the user's configured `sans` font-variation-settings by default. -7. Disable tap highlights on iOS -*/ - -html, -:host { - line-height: 1.5; - /* 1 */ - -webkit-text-size-adjust: 100%; - /* 2 */ - -moz-tab-size: 4; - /* 3 */ - -o-tab-size: 4; - tab-size: 4; - /* 3 */ - font-family: Inter, ui-sans-serif, system-ui, -apple-system, system-ui, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji; - /* 4 */ - font-feature-settings: normal; - /* 5 */ - font-variation-settings: normal; - /* 6 */ - -webkit-tap-highlight-color: transparent; - /* 7 */ -} - -/* -1. Remove the margin in all browsers. -2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. -*/ - -body { - margin: 0; - /* 1 */ - line-height: inherit; - /* 2 */ -} - -/* -1. Add the correct height in Firefox. -2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) -3. Ensure horizontal rules are visible by default. -*/ - -hr { - height: 0; - /* 1 */ - color: inherit; - /* 2 */ - border-top-width: 1px; - /* 3 */ -} - -/* -Add the correct text decoration in Chrome, Edge, and Safari. -*/ - -abbr:where([title]) { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; -} - -/* -Remove the default font size and weight for headings. -*/ - -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: inherit; - font-weight: inherit; -} - -/* -Reset links to optimize for opt-in styling instead of opt-out. -*/ - -a { - color: inherit; - text-decoration: inherit; -} - -/* -Add the correct font weight in Edge and Safari. -*/ - -b, -strong { - font-weight: bolder; -} - -/* -1. Use the user's configured `mono` font-family by default. -2. Use the user's configured `mono` font-feature-settings by default. -3. Use the user's configured `mono` font-variation-settings by default. -4. Correct the odd `em` font sizing in all browsers. -*/ - -code, -kbd, -samp, -pre { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; - /* 1 */ - font-feature-settings: normal; - /* 2 */ - font-variation-settings: normal; - /* 3 */ - font-size: 1em; - /* 4 */ -} - -/* -Add the correct font size in all browsers. -*/ - -small { - font-size: 80%; -} - -/* -Prevent `sub` and `sup` elements from affecting the line height in all browsers. -*/ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* -1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) -2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) -3. Remove gaps between table borders by default. -*/ - -table { - text-indent: 0; - /* 1 */ - border-color: inherit; - /* 2 */ - border-collapse: collapse; - /* 3 */ -} - -/* -1. Change the font styles in all browsers. -2. Remove the margin in Firefox and Safari. -3. Remove default padding in all browsers. -*/ - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; - /* 1 */ - font-feature-settings: inherit; - /* 1 */ - font-variation-settings: inherit; - /* 1 */ - font-size: 100%; - /* 1 */ - font-weight: inherit; - /* 1 */ - line-height: inherit; - /* 1 */ - letter-spacing: inherit; - /* 1 */ - color: inherit; - /* 1 */ - margin: 0; - /* 2 */ - padding: 0; - /* 3 */ -} - -/* -Remove the inheritance of text transform in Edge and Firefox. -*/ - -button, -select { - text-transform: none; -} - -/* -1. Correct the inability to style clickable types in iOS and Safari. -2. Remove default button styles. -*/ - -button, -input:where([type='button']), -input:where([type='reset']), -input:where([type='submit']) { - -webkit-appearance: button; - /* 1 */ - background-color: transparent; - /* 2 */ - background-image: none; - /* 2 */ -} - -/* -Use the modern Firefox focus style for all focusable elements. -*/ - -:-moz-focusring { - outline: auto; -} - -/* -Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) -*/ - -:-moz-ui-invalid { - box-shadow: none; -} - -/* -Add the correct vertical alignment in Chrome and Firefox. -*/ - -progress { - vertical-align: baseline; -} - -/* -Correct the cursor style of increment and decrement buttons in Safari. -*/ - -::-webkit-inner-spin-button, -::-webkit-outer-spin-button { - height: auto; -} - -/* -1. Correct the odd appearance in Chrome and Safari. -2. Correct the outline style in Safari. -*/ - -[type='search'] { - -webkit-appearance: textfield; - /* 1 */ - outline-offset: -2px; - /* 2 */ -} - -/* -Remove the inner padding in Chrome and Safari on macOS. -*/ - -::-webkit-search-decoration { - -webkit-appearance: none; -} - -/* -1. Correct the inability to style clickable types in iOS and Safari. -2. Change font properties to `inherit` in Safari. -*/ - -::-webkit-file-upload-button { - -webkit-appearance: button; - /* 1 */ - font: inherit; - /* 2 */ -} - -/* -Add the correct display in Chrome and Safari. -*/ - -summary { - display: list-item; -} - -/* -Removes the default spacing and border for appropriate elements. -*/ - -blockquote, -dl, -dd, -h1, -h2, -h3, -h4, -h5, -h6, -hr, -figure, -p, -pre { - margin: 0; -} - -fieldset { - margin: 0; - padding: 0; -} - -legend { - padding: 0; -} - -ol, -ul, -menu { - list-style: none; - margin: 0; - padding: 0; -} - -/* -Reset default styling for dialogs. -*/ - -dialog { - padding: 0; -} - -/* -Prevent resizing textareas horizontally by default. -*/ - -textarea { - resize: vertical; -} - -/* -1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) -2. Set the default placeholder color to the user's configured gray 400 color. -*/ - -input::-moz-placeholder, textarea::-moz-placeholder { - opacity: 1; - /* 1 */ - color: #9CA3AF; - /* 2 */ -} - -input::placeholder, -textarea::placeholder { - opacity: 1; - /* 1 */ - color: #9CA3AF; - /* 2 */ -} - -/* -Set the default cursor for buttons. -*/ - -button, -[role="button"] { - cursor: pointer; -} - -/* -Make sure disabled buttons don't get the pointer cursor. -*/ - -:disabled { - cursor: default; -} - -/* -1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) -2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) - This can trigger a poorly considered lint error in some tools but is included by design. -*/ - -img, -svg, -video, -canvas, -audio, -iframe, -embed, -object { - display: block; - /* 1 */ - vertical-align: middle; - /* 2 */ -} - -/* -Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) -*/ - -img, -video { - max-width: 100%; - height: auto; -} - -/* Make elements with the HTML hidden attribute stay hidden by default */ - -[hidden] { - display: none; -} - -.tooltip-arrow,.tooltip-arrow:before { - position: absolute; - width: 8px; - height: 8px; - background: inherit; -} - -.tooltip-arrow { - visibility: hidden; -} - -.tooltip-arrow:before { - content: ""; - visibility: visible; - transform: rotate(45deg); -} - -[data-tooltip-style^='light'] + .tooltip > .tooltip-arrow:before { - border-style: solid; - border-color: #e5e7eb; -} - -[data-tooltip-style^='light'] + .tooltip[data-popper-placement^='top'] > .tooltip-arrow:before { - border-bottom-width: 1px; - border-right-width: 1px; -} - -[data-tooltip-style^='light'] + .tooltip[data-popper-placement^='right'] > .tooltip-arrow:before { - border-bottom-width: 1px; - border-left-width: 1px; -} - -[data-tooltip-style^='light'] + .tooltip[data-popper-placement^='bottom'] > .tooltip-arrow:before { - border-top-width: 1px; - border-left-width: 1px; -} - -[data-tooltip-style^='light'] + .tooltip[data-popper-placement^='left'] > .tooltip-arrow:before { - border-top-width: 1px; - border-right-width: 1px; -} - -.tooltip[data-popper-placement^='top'] > .tooltip-arrow { - bottom: -4px; -} - -.tooltip[data-popper-placement^='bottom'] > .tooltip-arrow { - top: -4px; -} - -.tooltip[data-popper-placement^='left'] > .tooltip-arrow { - right: -4px; -} - -.tooltip[data-popper-placement^='right'] > .tooltip-arrow { - left: -4px; -} - -.tooltip.invisible > .tooltip-arrow:before { - visibility: hidden; -} - -[data-popper-arrow],[data-popper-arrow]:before { - position: absolute; - width: 8px; - height: 8px; - background: inherit; -} - -[data-popper-arrow] { - visibility: hidden; -} - -[data-popper-arrow]:before { - content: ""; - visibility: visible; - transform: rotate(45deg); -} - -[data-popper-arrow]:after { - content: ""; - visibility: visible; - transform: rotate(45deg); - position: absolute; - width: 9px; - height: 9px; - background: inherit; -} - -[role="tooltip"] > [data-popper-arrow]:before { - border-style: solid; - border-color: #e5e7eb; -} - -.dark [role="tooltip"] > [data-popper-arrow]:before { - border-style: solid; - border-color: #4b5563; -} - -[role="tooltip"] > [data-popper-arrow]:after { - border-style: solid; - border-color: #e5e7eb; -} - -.dark [role="tooltip"] > [data-popper-arrow]:after { - border-style: solid; - border-color: #4b5563; -} - -[data-popover][role="tooltip"][data-popper-placement^='top'] > [data-popper-arrow]:before { - border-bottom-width: 1px; - border-right-width: 1px; -} - -[data-popover][role="tooltip"][data-popper-placement^='top'] > [data-popper-arrow]:after { - border-bottom-width: 1px; - border-right-width: 1px; -} - -[data-popover][role="tooltip"][data-popper-placement^='right'] > [data-popper-arrow]:before { - border-bottom-width: 1px; - border-left-width: 1px; -} - -[data-popover][role="tooltip"][data-popper-placement^='right'] > [data-popper-arrow]:after { - border-bottom-width: 1px; - border-left-width: 1px; -} - -[data-popover][role="tooltip"][data-popper-placement^='bottom'] > [data-popper-arrow]:before { - border-top-width: 1px; - border-left-width: 1px; -} - -[data-popover][role="tooltip"][data-popper-placement^='bottom'] > [data-popper-arrow]:after { - border-top-width: 1px; - border-left-width: 1px; -} - -[data-popover][role="tooltip"][data-popper-placement^='left'] > [data-popper-arrow]:before { - border-top-width: 1px; - border-right-width: 1px; -} - -[data-popover][role="tooltip"][data-popper-placement^='left'] > [data-popper-arrow]:after { - border-top-width: 1px; - border-right-width: 1px; -} - -[data-popover][role="tooltip"][data-popper-placement^='top'] > [data-popper-arrow] { - bottom: -5px; -} - -[data-popover][role="tooltip"][data-popper-placement^='bottom'] > [data-popper-arrow] { - top: -5px; -} - -[data-popover][role="tooltip"][data-popper-placement^='left'] > [data-popper-arrow] { - right: -5px; -} - -[data-popover][role="tooltip"][data-popper-placement^='right'] > [data-popper-arrow] { - left: -5px; -} - -[role="tooltip"].invisible > [data-popper-arrow]:before { - visibility: hidden; -} - -[role="tooltip"].invisible > [data-popper-arrow]:after { - visibility: hidden; -} - -[type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background-color: #fff; - border-color: #6B7280; - border-width: 1px; - border-radius: 0px; - padding-top: 0.5rem; - padding-right: 0.75rem; - padding-bottom: 0.5rem; - padding-left: 0.75rem; - font-size: 1rem; - line-height: 1.5rem; - --tw-shadow: 0 0 #0000; -} - -[type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus { - outline: 2px solid transparent; - outline-offset: 2px; - --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: #4f46e5; - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - border-color: #4f46e5; -} - -input::-moz-placeholder, textarea::-moz-placeholder { - color: #6B7280; - opacity: 1; -} - -input::placeholder,textarea::placeholder { - color: #6B7280; - opacity: 1; -} - -::-webkit-datetime-edit-fields-wrapper { - padding: 0; -} - -::-webkit-date-and-time-value { - min-height: 1.5em; -} - -select:not([size]) { - background-image: url("data:image/svg+xml,%3csvg aria-hidden='true' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 10 6'%3e %3cpath stroke='%236B7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m1 1 4 4 4-4'/%3e %3c/svg%3e"); - background-position: right 0.75rem center; - background-repeat: no-repeat; - background-size: 0.75em 0.75em; - padding-right: 2.5rem; - -webkit-print-color-adjust: exact; - print-color-adjust: exact; -} - -:is([dir=rtl]) select:not([size]) { - background-position: left 0.75rem center; - padding-right: 0.75rem; - padding-left: 0; -} - -[multiple] { - background-image: initial; - background-position: initial; - background-repeat: unset; - background-size: initial; - padding-right: 0.75rem; - -webkit-print-color-adjust: unset; - print-color-adjust: unset; -} - -[type='checkbox'],[type='radio'] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - padding: 0; - -webkit-print-color-adjust: exact; - print-color-adjust: exact; - display: inline-block; - vertical-align: middle; - background-origin: border-box; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - flex-shrink: 0; - height: 1rem; - width: 1rem; - color: #4f46e5; - background-color: #fff; - border-color: #6B7280; - border-width: 1px; - --tw-shadow: 0 0 #0000; -} - -[type='checkbox'] { - border-radius: 0px; -} - -[type='radio'] { - border-radius: 100%; -} - -[type='checkbox']:focus,[type='radio']:focus { - outline: 2px solid transparent; - outline-offset: 2px; - --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); - --tw-ring-offset-width: 2px; - --tw-ring-offset-color: #fff; - --tw-ring-color: #4f46e5; - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); -} - -[type='checkbox']:checked,[type='radio']:checked,.dark [type='checkbox']:checked,.dark [type='radio']:checked { - border-color: transparent; - background-color: currentColor; - background-size: 0.55em 0.55em; - background-position: center; - background-repeat: no-repeat; -} - -[type='checkbox']:checked { - background-image: url("data:image/svg+xml,%3csvg aria-hidden='true' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 12'%3e %3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M1 5.917 5.724 10.5 15 1.5'/%3e %3c/svg%3e"); - background-repeat: no-repeat; - background-size: 0.55em 0.55em; - -webkit-print-color-adjust: exact; - print-color-adjust: exact; -} - -[type='radio']:checked { - background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e"); - background-size: 1em 1em; -} - -.dark [type='radio']:checked { - background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e"); - background-size: 1em 1em; -} - -[type='checkbox']:indeterminate { - background-image: url("data:image/svg+xml,%3csvg aria-hidden='true' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 12'%3e %3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M0.5 6h14'/%3e %3c/svg%3e"); - background-color: currentColor; - border-color: transparent; - background-position: center; - background-repeat: no-repeat; - background-size: 0.55em 0.55em; - -webkit-print-color-adjust: exact; - print-color-adjust: exact; -} - -[type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus { - border-color: transparent; - background-color: currentColor; -} - -[type='file'] { - background: unset; - border-color: inherit; - border-width: 0; - border-radius: 0; - padding: 0; - font-size: unset; - line-height: inherit; -} - -[type='file']:focus { - outline: 1px auto inherit; -} - -input[type=file]::file-selector-button { - color: white; - background: #1F2937; - border: 0; - font-weight: 500; - font-size: 0.875rem; - cursor: pointer; - padding-top: 0.625rem; - padding-bottom: 0.625rem; - padding-left: 2rem; - padding-right: 1rem; - margin-inline-start: -1rem; - margin-inline-end: 1rem; -} - -input[type=file]::file-selector-button:hover { - background: #374151; -} - -:is([dir=rtl]) input[type=file]::file-selector-button { - padding-right: 2rem; - padding-left: 1rem; -} - -.dark input[type=file]::file-selector-button { - color: white; - background: #4B5563; -} - -.dark input[type=file]::file-selector-button:hover { - background: #6B7280; -} - -input[type="range"]::-webkit-slider-thumb { - height: 1.25rem; - width: 1.25rem; - background: #4f46e5; - border-radius: 9999px; - border: 0; - appearance: none; - -moz-appearance: none; - -webkit-appearance: none; - cursor: pointer; -} - -input[type="range"]:disabled::-webkit-slider-thumb { - background: #9CA3AF; -} - -.dark input[type="range"]:disabled::-webkit-slider-thumb { - background: #6B7280; -} - -input[type="range"]:focus::-webkit-slider-thumb { - outline: 2px solid transparent; - outline-offset: 2px; - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); - --tw-ring-opacity: 1px; - --tw-ring-color: rgb(164 202 254 / var(--tw-ring-opacity)); -} - -input[type="range"]::-moz-range-thumb { - height: 1.25rem; - width: 1.25rem; - background: #4f46e5; - border-radius: 9999px; - border: 0; - appearance: none; - -moz-appearance: none; - -webkit-appearance: none; - cursor: pointer; -} - -input[type="range"]:disabled::-moz-range-thumb { - background: #9CA3AF; -} - -.dark input[type="range"]:disabled::-moz-range-thumb { - background: #6B7280; -} - -input[type="range"]::-moz-range-progress { - background: #6366f1; -} - -input[type="range"]::-ms-fill-lower { - background: #6366f1; -} - -.tw-content * { - font-family: 'Inter', sans-serif !important; -} - -*, ::before, ::after { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-gradient-from-position: ; - --tw-gradient-via-position: ; - --tw-gradient-to-position: ; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(99 102 241 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; - --tw-contain-size: ; - --tw-contain-layout: ; - --tw-contain-paint: ; - --tw-contain-style: ; -} - -::backdrop { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-gradient-from-position: ; - --tw-gradient-via-position: ; - --tw-gradient-to-position: ; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(99 102 241 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; - --tw-contain-size: ; - --tw-contain-layout: ; - --tw-contain-paint: ; - --tw-contain-style: ; -} - -.container { - width: 100%; -} - -@media (min-width: 640px) { - .container { - max-width: 640px; - } -} - -@media (min-width: 768px) { - .container { - max-width: 768px; - } -} - -@media (min-width: 1024px) { - .container { - max-width: 1024px; - } -} - -@media (min-width: 1280px) { - .container { - max-width: 1280px; - } -} - -@media (min-width: 1536px) { - .container { - max-width: 1536px; - } -} - -.format { - color: var(--tw-format-body); - max-width: 65ch; -} - -.format :where([class~="lead"]):not(:where([class~="not-format"] *)) { - color: var(--tw-format-lead); - font-size: 1.25em; - line-height: 1.6; - margin-top: 1.2em; - margin-bottom: 1.2em; -} - -.format :where(a):not(:where([class~="not-format"] *)) { - color: var(--tw-format-links); - text-decoration: underline; - font-weight: 500; -} - -.format :where(a):not(:where([class~="not-format"] *)):hover { - text-decoration: none; -} - -.format :where(strong):not(:where([class~="not-format"] *)) { - color: var(--tw-format-bold); - font-weight: 700; -} - -.format :where(a strong):not(:where([class~="not-format"] *)) { - color: inherit; -} - -.format :where(blockquote strong):not(:where([class~="not-format"] *)) { - color: inherit; -} - -.format :where(thead th strong):not(:where([class~="not-format"] *)) { - color: inherit; -} - -.format :where(ol):not(:where([class~="not-format"] *)) { - list-style-type: decimal; - margin-top: 1.25em; - margin-bottom: 1.25em; - padding-left: 1.625em; -} - -.format :where(ol[type="A"]):not(:where([class~="not-format"] *)) { - list-style-type: upper-alpha; -} - -.format :where(ol[type="a"]):not(:where([class~="not-format"] *)) { - list-style-type: lower-alpha; -} - -.format :where(ol[type="A" s]):not(:where([class~="not-format"] *)) { - list-style-type: upper-alpha; -} - -.format :where(ol[type="a" s]):not(:where([class~="not-format"] *)) { - list-style-type: lower-alpha; -} - -.format :where(ol[type="I"]):not(:where([class~="not-format"] *)) { - list-style-type: upper-roman; -} - -.format :where(ol[type="i"]):not(:where([class~="not-format"] *)) { - list-style-type: lower-roman; -} - -.format :where(ol[type="I" s]):not(:where([class~="not-format"] *)) { - list-style-type: upper-roman; -} - -.format :where(ol[type="i" s]):not(:where([class~="not-format"] *)) { - list-style-type: lower-roman; -} - -.format :where(ol[type="1"]):not(:where([class~="not-format"] *)) { - list-style-type: decimal; -} - -.format :where(ul):not(:where([class~="not-format"] *)) { - list-style-type: disc; - margin-top: 1.25em; - margin-bottom: 1.25em; - padding-left: 1.625em; -} - -.format :where(ol > li):not(:where([class~="not-format"] *))::marker { - font-weight: 400; - color: var(--tw-format-counters); -} - -.format :where(ul > li):not(:where([class~="not-format"] *))::marker { - color: var(--tw-format-bullets); -} - -.format :where(hr):not(:where([class~="not-format"] *)) { - border-color: var(--tw-format-hr); - border-top-width: 1px; - margin-top: 3em; - margin-bottom: 3em; -} - -.format :where(blockquote):not(:where([class~="not-format"] *)) { - font-size: 1.1111111em; - font-weight: 700; - font-style: italic; - color: var(--tw-format-quotes); - quotes: "\201C""\201D""\2018""\2019"; - margin-bottom: 1.6em; -} - -.format :where(blockquote):not(:where([class~="not-format"] *))::before { - content: ""; - background-image: url("data:image/svg+xml,%0A%3Csvg width='32' height='24' viewBox='0 0 32 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.6893 24V14.1453C18.6893 6.54 23.664 1.38533 30.6667 -7.15256e-07L31.9933 2.868C28.7507 4.09066 26.6667 7.71867 26.6667 10.6667H32V24H18.6893ZM-9.53674e-07 24V14.1453C-9.53674e-07 6.54 4.99733 1.384 12 -7.15256e-07L13.328 2.868C10.084 4.09066 8 7.71867 8 10.6667L13.3107 10.6667V24H-9.53674e-07Z' fill='%239CA3AF'/%3E%3C/svg%3E%0A"); - background-repeat: no-repeat; - color: var(--tw-format-quotes); - width: 1.7777778em; - height: 1.3333333em; - display: block; - margin-top: 1.6em; -} - -.format :where(blockquote p:first-of-type):not(:where([class~="not-format"] *))::before { - content: open-quote; -} - -.format :where(blockquote p:last-of-type):not(:where([class~="not-format"] *))::after { - content: close-quote; -} - -.format :where(h1):not(:where([class~="not-format"] *)) { - color: var(--tw-format-headings); - font-weight: 800; - font-size: 2.25em; - margin-top: 0; - margin-bottom: 0.8888889em; - line-height: 1.1111111; -} - -.format :where(h1 strong):not(:where([class~="not-format"] *)) { - font-weight: 900; - color: inherit; -} - -.format :where(h2):not(:where([class~="not-format"] *)) { - color: var(--tw-format-headings); - font-weight: 700; - font-size: 1.5em; - margin-top: 0; - margin-bottom: 1em; - line-height: 1.3333333; -} - -.format :where(h2 strong):not(:where([class~="not-format"] *)) { - font-weight: 800; - color: inherit; -} - -.format :where(h3):not(:where([class~="not-format"] *)) { - color: var(--tw-format-headings); - font-weight: 700; - font-size: 1.25em; - margin-top: 0; - margin-bottom: 0.6em; - line-height: 1.6; -} - -.format :where(h3 strong):not(:where([class~="not-format"] *)) { - font-weight: 800; - color: inherit; -} - -.format :where(h4):not(:where([class~="not-format"] *)) { - color: var(--tw-format-headings); - font-weight: 600; - margin-top: 0; - margin-bottom: 0.5em; - line-height: 1.5; -} - -.format :where(h4 strong):not(:where([class~="not-format"] *)) { - font-weight: 700; - color: inherit; -} - -.format :where(img):not(:where([class~="not-format"] *)) { - margin-top: 2em; - margin-bottom: 2em; -} - -.format :where(figure > *):not(:where([class~="not-format"] *)) { - margin-top: 0; - margin-bottom: 0; -} - -.format :where(figcaption):not(:where([class~="not-format"] *)) { - color: var(--tw-format-captions); - font-size: 0.875em; - line-height: 1.4285714; - margin-top: 0.8571429em; -} - -.format :where(code):not(:where([class~="not-format"] *)) { - color: var(--tw-format-code); - font-weight: 600; - background-color: var(--tw-format-code-bg); - padding-top: 0.3333333em; - padding-bottom: 0.3333333em; - padding-left: 0.5555556em; - padding-right: 0.5555556em; - border-radius: 0.2222222em; - font-size: 0.875em; -} - -.format :where(a code):not(:where([class~="not-format"] *)) { - color: inherit; -} - -.format :where(h1 code):not(:where([class~="not-format"] *)) { - color: inherit; -} - -.format :where(h2 code):not(:where([class~="not-format"] *)) { - color: inherit; - font-size: 0.875em; -} - -.format :where(h3 code):not(:where([class~="not-format"] *)) { - color: inherit; - font-size: 0.9em; -} - -.format :where(h4 code):not(:where([class~="not-format"] *)) { - color: inherit; -} - -.format :where(blockquote code):not(:where([class~="not-format"] *)) { - color: inherit; -} - -.format :where(thead th code):not(:where([class~="not-format"] *)) { - color: inherit; -} - -.format :where(pre):not(:where([class~="not-format"] *)) { - color: var(--tw-format-pre-code); - background-color: var(--tw-format-pre-bg); - overflow-x: auto; - font-weight: 400; - font-size: 0.875em; - line-height: 1.7142857; - margin-top: 1.7142857em; - margin-bottom: 1.7142857em; - border-radius: 0.375rem; - padding-top: 0.8571429em; - padding-right: 1.1428571em; - padding-bottom: 0.8571429em; - padding-left: 1.1428571em; -} - -.format :where(pre code):not(:where([class~="not-format"] *)) { - background-color: transparent; - border-width: 0; - border-radius: 0; - padding: 0; - font-weight: inherit; - color: inherit; - font-size: inherit; - font-family: inherit; - line-height: inherit; -} - -.format :where(pre code):not(:where([class~="not-format"] *))::before { - content: none; -} - -.format :where(pre code):not(:where([class~="not-format"] *))::after { - content: none; -} - -.format :where(table):not(:where([class~="not-format"] *)) { - width: 100%; - table-layout: auto; - text-align: left; - margin-top: 2em; - margin-bottom: 2em; - font-size: 0.875em; - line-height: 1.7142857; -} - -.format :where(thead):not(:where([class~="not-format"] *)) { - background-color: var(--tw-format-th-bg); - border-radius: 0.2777778em; -} - -.format :where(thead th):not(:where([class~="not-format"] *)) { - color: var(--tw-format-headings); - font-weight: 600; - vertical-align: bottom; - padding: 0.5555556em; - padding-right: 0.5714286em; - padding-bottom: 0.5714286em; - padding-left: 0.5714286em; -} - -.format :where(tbody tr):not(:where([class~="not-format"] *)) { - border-bottom-width: 1px; - border-bottom-color: var(--tw-format-td-borders); -} - -.format :where(tbody tr:last-child):not(:where([class~="not-format"] *)) { - border-bottom-width: 0; -} - -.format :where(tbody td):not(:where([class~="not-format"] *)) { - vertical-align: baseline; -} - -.format :where(tfoot):not(:where([class~="not-format"] *)) { - border-top-width: 1px; - border-top-color: var(--tw-format-th-borders); -} - -.format :where(tfoot td):not(:where([class~="not-format"] *)) { - vertical-align: top; -} - -.format { - --tw-format-body: #6b7280; - --tw-format-headings: #111827; - --tw-format-lead: #6b7280; - --tw-format-links: #4b5563; - --tw-format-bold: #111827; - --tw-format-counters: #6b7280; - --tw-format-bullets: #6b7280; - --tw-format-hr: #e5e7eb; - --tw-format-quotes: #111827; - --tw-format-quote-borders: #e5e7eb; - --tw-format-captions: #6b7280; - --tw-format-code: #111827; - --tw-format-code-bg: #f3f4f6; - --tw-format-pre-code: #4b5563; - --tw-format-pre-bg: #f3f4f6; - --tw-format-th-borders: #e5e7eb; - --tw-format-th-bg: #f9fafb; - --tw-format-td-borders: #e5e7eb; - --tw-format-invert-body: #9ca3af; - --tw-format-invert-headings: #fff; - --tw-format-invert-lead: #9ca3af; - --tw-format-invert-links: #fff; - --tw-format-invert-bold: #fff; - --tw-format-invert-counters: #9ca3af; - --tw-format-invert-bullets: #4b5563; - --tw-format-invert-hr: #374151; - --tw-format-invert-quotes: #f3f4f6; - --tw-format-invert-quote-borders: #374151; - --tw-format-invert-captions: #9ca3af; - --tw-format-invert-code: #fff; - --tw-format-invert-code-bg: #1f2937; - --tw-format-invert-pre-code: #d1d5db; - --tw-format-invert-pre-bg: #374151; - --tw-format-invert-th-borders: #4b5563; - --tw-format-invert-td-borders: #374151; - --tw-format-invert-th-bg: #374151; - font-size: 1rem; - line-height: 1.75; -} - -.format :where(p):not(:where([class~="not-format"] *)) { - margin-top: 1.25em; - margin-bottom: 1.25em; -} - -.format :where(blockquote > p:first-child):not(:where([class~="not-format"] *)) { - margin-top: 0; -} - -.format :where(video):not(:where([class~="not-format"] *)) { - margin-top: 2em; - margin-bottom: 2em; -} - -.format :where(figure):not(:where([class~="not-format"] *)) { - margin-top: 2em; - margin-bottom: 2em; -} - -.format :where(li):not(:where([class~="not-format"] *)) { - margin-top: 0.5em; - margin-bottom: 0.5em; -} - -.format :where(ol > li):not(:where([class~="not-format"] *)) { - padding-left: 0.375em; -} - -.format :where(ul > li):not(:where([class~="not-format"] *)) { - padding-left: 0.375em; -} - -.format :where(.format > ul > li p):not(:where([class~="not-format"] *)) { - margin-top: 0.75em; - margin-bottom: 0.75em; -} - -.format :where(.format > ul > li > *:first-child):not(:where([class~="not-format"] *)) { - margin-top: 1.25em; -} - -.format :where(.format > ul > li > *:last-child):not(:where([class~="not-format"] *)) { - margin-bottom: 1.25em; -} - -.format :where(.format > ol > li > *:first-child):not(:where([class~="not-format"] *)) { - margin-top: 1.25em; -} - -.format :where(.format > ol > li > *:last-child):not(:where([class~="not-format"] *)) { - margin-bottom: 1.25em; -} - -.format :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-format"] *)) { - margin-top: 0.75em; - margin-bottom: 0.75em; -} - -.format :where(hr + *):not(:where([class~="not-format"] *)) { - margin-top: 0; -} - -.format :where(h2 + *):not(:where([class~="not-format"] *)) { - margin-top: 0; -} - -.format :where(h3 + *):not(:where([class~="not-format"] *)) { - margin-top: 0; -} - -.format :where(h4 + *):not(:where([class~="not-format"] *)) { - margin-top: 0; -} - -.format :where(thead th:last-child):not(:where([class~="not-format"] *)) { - padding-right: 0; -} - -.format :where(tbody td, tfoot td):not(:where([class~="not-format"] *)) { - padding-top: 0.5714286em; - padding-right: 0.5714286em; - padding-bottom: 0.5714286em; - padding-left: 0.5714286em; -} - -.format :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-format"] *)) { - padding-right: 0; -} - -.format :where(.format > :first-child):not(:where([class~="not-format"] *)) { - margin-top: 0; -} - -.format :where(.format > :last-child):not(:where([class~="not-format"] *)) { - margin-bottom: 0; -} - -.format-sm :where(.format > ul > li p):not(:where([class~="not-format"] *)) { - margin-top: 0.5em; - margin-bottom: 0.5em; -} - -.format-sm :where(.format > ul > li > *:first-child):not(:where([class~="not-format"] *)) { - margin-top: 1em; -} - -.format-sm :where(.format > ul > li > *:last-child):not(:where([class~="not-format"] *)) { - margin-bottom: 1em; -} - -.format-sm :where(.format > ol > li > *:first-child):not(:where([class~="not-format"] *)) { - margin-top: 1em; -} - -.format-sm :where(.format > ol > li > *:last-child):not(:where([class~="not-format"] *)) { - margin-bottom: 1em; -} - -.format-sm :where(.format > :first-child):not(:where([class~="not-format"] *)) { - margin-top: 0; -} - -.format-sm :where(.format > :last-child):not(:where([class~="not-format"] *)) { - margin-bottom: 0; -} - -.format-base :where(.format > ul > li p):not(:where([class~="not-format"] *)) { - margin-top: 0.75em; - margin-bottom: 0.75em; -} - -.format-base :where(.format > ul > li > *:first-child):not(:where([class~="not-format"] *)) { - margin-top: 1.25em; -} - -.format-base :where(.format > ul > li > *:last-child):not(:where([class~="not-format"] *)) { - margin-bottom: 1.25em; -} - -.format-base :where(.format > ol > li > *:first-child):not(:where([class~="not-format"] *)) { - margin-top: 1.25em; -} - -.format-base :where(.format > ol > li > *:last-child):not(:where([class~="not-format"] *)) { - margin-bottom: 1.25em; -} - -.format-base :where(.format > :first-child):not(:where([class~="not-format"] *)) { - margin-top: 0; -} - -.format-base :where(.format > :last-child):not(:where([class~="not-format"] *)) { - margin-bottom: 0; -} - -.format-lg :where(.format > ul > li p):not(:where([class~="not-format"] *)) { - margin-top: 0.8888889em; - margin-bottom: 0.8888889em; -} - -.format-lg :where(.format > ul > li > *:first-child):not(:where([class~="not-format"] *)) { - margin-top: 1.3333333em; -} - -.format-lg :where(.format > ul > li > *:last-child):not(:where([class~="not-format"] *)) { - margin-bottom: 1.3333333em; -} - -.format-lg :where(.format > ol > li > *:first-child):not(:where([class~="not-format"] *)) { - margin-top: 1.3333333em; -} - -.format-lg :where(.format > ol > li > *:last-child):not(:where([class~="not-format"] *)) { - margin-bottom: 1.3333333em; -} - -.format-lg :where(.format > :first-child):not(:where([class~="not-format"] *)) { - margin-top: 0; -} - -.format-lg :where(.format > :last-child):not(:where([class~="not-format"] *)) { - margin-bottom: 0; -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; -} - -.pointer-events-none { - pointer-events: none; -} - -.visible { - visibility: visible; -} - -.invisible { - visibility: hidden; -} - -.collapse { - visibility: collapse; -} - -.static { - position: static; -} - -.fixed { - position: fixed; -} - -.absolute { - position: absolute; -} - -.\!relative { - position: relative !important; -} - -.relative { - position: relative; -} - -.sticky { - position: sticky; -} - -.inset-0 { - inset: 0px; -} - -.inset-y-0 { - top: 0px; - bottom: 0px; -} - -.-top-11 { - top: -2.75rem; -} - -.-top-4 { - top: -1rem; -} - -.bottom-0 { - bottom: 0px; -} - -.bottom-1 { - bottom: 0.25rem; -} - -.bottom-\[6px\] { - bottom: 6px; -} - -.left-0 { - left: 0px; -} - -.left-2 { - left: 0.5rem; -} - -.right-0 { - right: 0px; -} - -.start-0 { - inset-inline-start: 0px; -} - -.-top-3 { - top: -0.75rem; -} - -.top-0 { - top: 0px; -} - -.top-px { - top: 1px; -} - -.z-10 { - z-index: 10; -} - -.z-40 { - z-index: 40; -} - -.z-50 { - z-index: 50; -} - -.col-span-2 { - grid-column: span 2 / span 2; -} - -.float-right { - float: right; -} - -.m-0 { - margin: 0px; -} - -.m-1 { - margin: 0.25rem; -} - -.m-2 { - margin: 0.5rem; -} - -.m-auto { - margin: auto; -} - -.mx-1 { - margin-left: 0.25rem; - margin-right: 0.25rem; -} - -.mx-2 { - margin-left: 0.5rem; - margin-right: 0.5rem; -} - -.mx-auto { - margin-left: auto; - margin-right: auto; -} - -.my-2 { - margin-top: 0.5rem; - margin-bottom: 0.5rem; -} - -.my-4 { - margin-top: 1rem; - margin-bottom: 1rem; -} - -.-ml-0\.5 { - margin-left: -0.125rem; -} - -.mb-1 { - margin-bottom: 0.25rem; -} - -.mb-2 { - margin-bottom: 0.5rem; -} - -.mb-3 { - margin-bottom: 0.75rem; -} - -.mb-4 { - margin-bottom: 1rem; -} - -.mb-5 { - margin-bottom: 1.25rem; -} - -.mb-8 { - margin-bottom: 2rem; -} - -.ml-0 { - margin-left: 0px; -} - -.ml-2 { - margin-left: 0.5rem; -} - -.ml-3 { - margin-left: 0.75rem; -} - -.ml-auto { - margin-left: auto; -} - -.mr-0 { - margin-right: 0px; -} - -.mr-2 { - margin-right: 0.5rem; -} - -.mr-4 { - margin-right: 1rem; -} - -.mt-2 { - margin-top: 0.5rem; -} - -.mt-4 { - margin-top: 1rem; -} - -.mt-5 { - margin-top: 1.25rem; -} - -.mt-6 { - margin-top: 1.5rem; -} - -.line-clamp-2 { - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; -} - -.block { - display: block; -} - -.inline-block { - display: inline-block; -} - -.inline { - display: inline; -} - -.flex { - display: flex; -} - -.inline-flex { - display: inline-flex; -} - -.table { - display: table; -} - -.grid { - display: grid; -} - -.contents { - display: contents; -} - -.\!hidden { - display: none !important; -} - -.hidden { - display: none; -} - -.size-\[20px\] { - width: 20px; - height: 20px; -} - -.size-\[28px\] { - width: 28px; - height: 28px; -} - -.h-10 { - height: 2.5rem; -} - -.h-12 { - height: 3rem; -} - -.h-14 { - height: 3.5rem; -} - -.h-2 { - height: 0.5rem; -} - -.h-3 { - height: 0.75rem; -} - -.h-3\/4 { - height: 75%; -} - -.h-4 { - height: 1rem; -} - -.h-5 { - height: 1.25rem; -} - -.h-6 { - height: 1.5rem; -} - -.h-7 { - height: 1.75rem; -} - -.h-9 { - height: 2.25rem; -} - -.h-96 { - height: 24rem; -} - -.h-\[35px\] { - height: 35px; -} - -.h-\[37px\] { - height: 37px; -} - -.h-\[40\%\] { - height: 40%; -} - -.h-\[532px\] { - height: 532px; -} - -.h-fit { - height: -moz-fit-content; - height: fit-content; -} - -.h-full { - height: 100%; -} - -.max-h-16 { - max-height: 4rem; -} - -.max-h-40 { - max-height: 10rem; -} - -.max-h-48 { - max-height: 12rem; -} - -.max-h-56 { - max-height: 14rem; -} - -.max-h-64 { - max-height: 16rem; -} - -.max-h-96 { - max-height: 24rem; -} - -.max-h-\[40\%\] { - max-height: 40%; -} - -.max-h-full { - max-height: 100%; -} - -.max-h-screen { - max-height: 100vh; -} - -.max-h-svh { - max-height: 100svh; -} - -.min-h-\[300px\] { - min-height: 300px; -} - -.min-h-\[327px\] { - min-height: 327px; -} - -.min-h-fit { - min-height: -moz-fit-content; - min-height: fit-content; -} - -.\!w-full { - width: 100% !important; -} - -.w-0 { - width: 0px; -} - -.w-1 { - width: 0.25rem; -} - -.w-1\/12 { - width: 8.333333%; -} - -.w-1\/2 { - width: 50%; -} - -.w-1\/3 { - width: 33.333333%; -} - -.w-1\/4 { - width: 25%; -} - -.w-1\/5 { - width: 20%; -} - -.w-1\/6 { - width: 16.666667%; -} - -.w-10 { - width: 2.5rem; -} - -.w-11 { - width: 2.75rem; -} - -.w-11\/12 { - width: 91.666667%; -} - -.w-14 { - width: 3.5rem; -} - -.w-2 { - width: 0.5rem; -} - -.w-2\/12 { - width: 16.666667%; -} - -.w-2\/3 { - width: 66.666667%; -} - -.w-2\/4 { - width: 50%; -} - -.w-2\/5 { - width: 40%; -} - -.w-2\/6 { - width: 33.333333%; -} - -.w-20 { - width: 5rem; -} - -.w-24 { - width: 6rem; -} - -.w-3 { - width: 0.75rem; -} - -.w-3\/4 { - width: 75%; -} - -.w-4 { - width: 1rem; -} - -.w-4\/5 { - width: 80%; -} - -.w-4\/6 { - width: 66.666667%; -} - -.w-5 { - width: 1.25rem; -} - -.w-6 { - width: 1.5rem; -} - -.w-6\/12 { - width: 50%; -} - -.w-64 { - width: 16rem; -} - -.w-7 { - width: 1.75rem; -} - -.w-72 { - width: 18rem; -} - -.w-8 { - width: 2rem; -} - -.w-80 { - width: 20rem; -} - -.w-9\/12 { - width: 75%; -} - -.w-\[105px\] { - width: 105px; -} - -.w-\[17px\] { - width: 17px; -} - -.w-\[37px\] { - width: 37px; -} - -.w-auto { - width: auto; -} - -.w-fit { - width: -moz-fit-content; - width: fit-content; -} - -.w-full { - width: 100%; -} - -.w-max { - width: -moz-max-content; - width: max-content; -} - -.w-\[120px\] { - width: 120px; -} - -.w-5\/6 { - width: 83.333333%; -} - -.min-w-20 { - min-width: 5rem; -} - -.min-w-56 { - min-width: 14rem; -} - -.min-w-\[20px\] { - min-width: 20px; -} - -.min-w-\[24rem\] { - min-width: 24rem; -} - -.min-w-\[28rem\] { - min-width: 28rem; -} - -.min-w-\[32rem\] { - min-width: 32rem; -} - -.min-w-\[36rem\] { - min-width: 36rem; -} - -.min-w-\[40rem\] { - min-width: 40rem; -} - -.max-w-20 { - max-width: 5rem; -} - -.max-w-2xl { - max-width: 42rem; -} - -.max-w-32 { - max-width: 8rem; -} - -.max-w-3xl { - max-width: 48rem; -} - -.max-w-\[100vw\] { - max-width: 100vw; -} - -.max-w-\[120px\] { - max-width: 120px; -} - -.max-w-\[188px\] { - max-width: 188px; -} - -.max-w-lg { - max-width: 32rem; -} - -.max-w-md { - max-width: 28rem; -} - -.max-w-screen-sm { - max-width: 640px; -} - -.max-w-screen-xl { - max-width: 1280px; -} - -.max-w-sm { - max-width: 24rem; -} - -.max-w-xl { - max-width: 36rem; -} - -.max-w-xs { - max-width: 20rem; -} - -.flex-1 { - flex: 1 1 0%; -} - -.flex-none { - flex: none; -} - -.flex-shrink { - flex-shrink: 1; -} - -.flex-grow { - flex-grow: 1; -} - -.grow { - flex-grow: 1; -} - -.border-collapse { - border-collapse: collapse; -} - -.-translate-x-\[-300px\] { - --tw-translate-x: 300px; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.-translate-x-\[-500px\] { - --tw-translate-x: 500px; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.-translate-x-\[300px\] { - --tw-translate-x: -300px; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.-translate-x-\[500px\] { - --tw-translate-x: -500px; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.translate-x-0 { - --tw-translate-x: 0px; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.rotate-45 { - --tw-rotate: 45deg; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.transform { - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.cursor-default { - cursor: default; -} - -.cursor-not-allowed { - cursor: not-allowed; -} - -.cursor-pointer { - cursor: pointer; -} - -.select-none { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} - -.resize { - resize: both; -} - -.list-inside { - list-style-position: inside; -} - -.list-decimal { - list-style-type: decimal; -} - -.list-disc { - list-style-type: disc; -} - -.grid-cols-1 { - grid-template-columns: repeat(1, minmax(0, 1fr)); -} - -.grid-cols-4 { - grid-template-columns: repeat(4, minmax(0, 1fr)); -} - -.grid-cols-7 { - grid-template-columns: repeat(7, minmax(0, 1fr)); -} - -.flex-row { - flex-direction: row; -} - -.flex-col { - flex-direction: column; -} - -.flex-wrap { - flex-wrap: wrap; -} - -.flex-nowrap { - flex-wrap: nowrap; -} - -.content-center { - align-content: center; -} - -.content-start { - align-content: flex-start; -} - -.items-start { - align-items: flex-start; -} - -.items-center { - align-items: center; -} - -.justify-end { - justify-content: flex-end; -} - -.justify-center { - justify-content: center; -} - -.justify-between { - justify-content: space-between; -} - -.gap-1 { - gap: 0.25rem; -} - -.gap-2 { - gap: 0.5rem; -} - -.gap-4 { - gap: 1rem; -} - -.gap-6 { - gap: 1.5rem; -} - -.gap-8 { - gap: 2rem; -} - -.space-x-0\.5 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(0.125rem * var(--tw-space-x-reverse)); - margin-left: calc(0.125rem * calc(1 - var(--tw-space-x-reverse))); -} - -.space-x-1 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(0.25rem * var(--tw-space-x-reverse)); - margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse))); -} - -.space-x-2 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(0.5rem * var(--tw-space-x-reverse)); - margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); -} - -.space-x-4 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(1rem * var(--tw-space-x-reverse)); - margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); -} - -.space-y-3 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); -} - -.overflow-auto { - overflow: auto; -} - -.overflow-hidden { - overflow: hidden; -} - -.overflow-y-auto { - overflow-y: auto; -} - -.overflow-x-hidden { - overflow-x: hidden; -} - -.overflow-y-scroll { - overflow-y: scroll; -} - -.truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.overflow-ellipsis { - text-overflow: ellipsis; -} - -.text-ellipsis { - text-overflow: ellipsis; -} - -.whitespace-nowrap { - white-space: nowrap; -} - -.text-wrap { - text-wrap: wrap; -} - -.text-nowrap { - text-wrap: nowrap; -} - -.rounded { - border-radius: 0.25rem; -} - -.rounded-\[4px\] { - border-radius: 4px; -} - -.rounded-\[6px\] { - border-radius: 6px; -} - -.rounded-full { - border-radius: 9999px; -} - -.rounded-lg { - border-radius: 0.5rem; -} - -.rounded-md { - border-radius: 0.375rem; -} - -.rounded-none { - border-radius: 0px; -} - -.rounded-sm { - border-radius: 0.125rem; -} - -.rounded-xl { - border-radius: 0.75rem; -} - -.rounded-b { - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.rounded-e-lg { - border-start-end-radius: 0.5rem; - border-end-end-radius: 0.5rem; -} - -.rounded-l-\[4px\] { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} - -.rounded-l-lg { - border-top-left-radius: 0.5rem; - border-bottom-left-radius: 0.5rem; -} - -.rounded-r-\[4px\] { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} - -.rounded-r-lg { - border-top-right-radius: 0.5rem; - border-bottom-right-radius: 0.5rem; -} - -.rounded-s-lg { - border-start-start-radius: 0.5rem; - border-end-start-radius: 0.5rem; -} - -.rounded-s-md { - border-start-start-radius: 0.375rem; - border-end-start-radius: 0.375rem; -} - -.rounded-t { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.rounded-t-lg { - border-top-left-radius: 0.5rem; - border-top-right-radius: 0.5rem; -} - -.border { - border-width: 1px; -} - -.border-0 { - border-width: 0px; -} - -.border-2 { - border-width: 2px; -} - -.border-y { - border-top-width: 1px; - border-bottom-width: 1px; -} - -.border-y-0 { - border-top-width: 0px; - border-bottom-width: 0px; -} - -.border-b { - border-bottom-width: 1px; -} - -.border-b-0 { - border-bottom-width: 0px; -} - -.border-b-2 { - border-bottom-width: 2px; -} - -.border-l-0 { - border-left-width: 0px; -} - -.border-l-2 { - border-left-width: 2px; -} - -.border-r { - border-right-width: 1px; -} - -.border-r-0 { - border-right-width: 0px; -} - -.border-r-2 { - border-right-width: 2px; -} - -.border-t { - border-top-width: 1px; -} - -.border-solid { - border-style: solid; -} - -.border-dashed { - border-style: dashed; -} - -.border-none { - border-style: none; -} - -.\!border-primary-700 { - --tw-border-opacity: 1 !important; - border-color: rgb(67 56 202 / var(--tw-border-opacity)) !important; -} - -.border-black { - --tw-border-opacity: 1; - border-color: rgb(0 0 0 / var(--tw-border-opacity)); -} - -.border-blue-300 { - --tw-border-opacity: 1; - border-color: rgb(165 180 252 / var(--tw-border-opacity)); -} - -.border-blue-700 { - --tw-border-opacity: 1; - border-color: rgb(67 56 202 / var(--tw-border-opacity)); -} - -.border-error-300 { - --tw-border-opacity: 1; - border-color: rgb(249 168 212 / var(--tw-border-opacity)); -} - -.border-error-600 { - --tw-border-opacity: 1; - border-color: rgb(219 39 119 / var(--tw-border-opacity)); -} - -.border-error-700 { - --tw-border-opacity: 1; - border-color: rgb(190 24 93 / var(--tw-border-opacity)); -} - -.border-error-800 { - --tw-border-opacity: 1; - border-color: rgb(157 23 77 / var(--tw-border-opacity)); -} - -.border-gray-100 { - --tw-border-opacity: 1; - border-color: rgb(243 244 246 / var(--tw-border-opacity)); -} - -.border-gray-200 { - --tw-border-opacity: 1; - border-color: rgb(229 231 235 / var(--tw-border-opacity)); -} - -.border-gray-300 { - --tw-border-opacity: 1; - border-color: rgb(209 213 219 / var(--tw-border-opacity)); -} - -.border-gray-400 { - --tw-border-opacity: 1; - border-color: rgb(156 163 175 / var(--tw-border-opacity)); -} - -.border-gray-50 { - --tw-border-opacity: 1; - border-color: rgb(249 250 251 / var(--tw-border-opacity)); -} - -.border-green-200 { - --tw-border-opacity: 1; - border-color: rgb(188 240 218 / var(--tw-border-opacity)); -} - -.border-indigo-100 { - --tw-border-opacity: 1; - border-color: rgb(229 237 255 / var(--tw-border-opacity)); -} - -.border-indigo-300 { - --tw-border-opacity: 1; - border-color: rgb(180 198 252 / var(--tw-border-opacity)); -} - -.border-primary-300 { - --tw-border-opacity: 1; - border-color: rgb(165 180 252 / var(--tw-border-opacity)); -} - -.border-primary-700 { - --tw-border-opacity: 1; - border-color: rgb(67 56 202 / var(--tw-border-opacity)); -} - -.border-primary-800 { - --tw-border-opacity: 1; - border-color: rgb(55 48 163 / var(--tw-border-opacity)); -} - -.border-success-300 { - --tw-border-opacity: 1; - border-color: rgb(134 239 172 / var(--tw-border-opacity)); -} - -.border-success-700 { - --tw-border-opacity: 1; - border-color: rgb(21 128 61 / var(--tw-border-opacity)); -} - -.border-success-800 { - --tw-border-opacity: 1; - border-color: rgb(22 101 52 / var(--tw-border-opacity)); -} - -.border-transparent { - border-color: transparent; -} - -.border-warning-300 { - --tw-border-opacity: 1; - border-color: rgb(253 224 71 / var(--tw-border-opacity)); -} - -.border-t-gray-200 { - --tw-border-opacity: 1; - border-top-color: rgb(229 231 235 / var(--tw-border-opacity)); -} - -.\!bg-primary-600 { - --tw-bg-opacity: 1 !important; - background-color: rgb(79 70 229 / var(--tw-bg-opacity)) !important; -} - -.\!bg-primary-700 { - --tw-bg-opacity: 1 !important; - background-color: rgb(67 56 202 / var(--tw-bg-opacity)) !important; -} - -.\!bg-transparent { - background-color: transparent !important; -} - -.bg-blue-100 { - --tw-bg-opacity: 1; - background-color: rgb(224 231 255 / var(--tw-bg-opacity)); -} - -.bg-blue-50 { - --tw-bg-opacity: 1; - background-color: rgb(238 242 255 / var(--tw-bg-opacity)); -} - -.bg-blue-700 { - --tw-bg-opacity: 1; - background-color: rgb(67 56 202 / var(--tw-bg-opacity)); -} - -.bg-error-100 { - --tw-bg-opacity: 1; - background-color: rgb(252 231 243 / var(--tw-bg-opacity)); -} - -.bg-error-50 { - --tw-bg-opacity: 1; - background-color: rgb(253 242 248 / var(--tw-bg-opacity)); -} - -.bg-error-600 { - --tw-bg-opacity: 1; - background-color: rgb(219 39 119 / var(--tw-bg-opacity)); -} - -.bg-error-700 { - --tw-bg-opacity: 1; - background-color: rgb(190 24 93 / var(--tw-bg-opacity)); -} - -.bg-gray-100 { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity)); -} - -.bg-gray-200 { - --tw-bg-opacity: 1; - background-color: rgb(229 231 235 / var(--tw-bg-opacity)); -} - -.bg-gray-50 { - --tw-bg-opacity: 1; - background-color: rgb(249 250 251 / var(--tw-bg-opacity)); -} - -.bg-gray-900 { - --tw-bg-opacity: 1; - background-color: rgb(17 24 39 / var(--tw-bg-opacity)); -} - -.bg-green-100 { - --tw-bg-opacity: 1; - background-color: rgb(222 247 236 / var(--tw-bg-opacity)); -} - -.bg-green-400 { - --tw-bg-opacity: 1; - background-color: rgb(49 196 141 / var(--tw-bg-opacity)); -} - -.bg-indigo-100 { - --tw-bg-opacity: 1; - background-color: rgb(229 237 255 / var(--tw-bg-opacity)); -} - -.bg-indigo-200 { - --tw-bg-opacity: 1; - background-color: rgb(205 219 254 / var(--tw-bg-opacity)); -} - -.bg-indigo-300 { - --tw-bg-opacity: 1; - background-color: rgb(180 198 252 / var(--tw-bg-opacity)); -} - -.bg-indigo-50 { - --tw-bg-opacity: 1; - background-color: rgb(240 245 255 / var(--tw-bg-opacity)); -} - -.bg-indigo-700 { - --tw-bg-opacity: 1; - background-color: rgb(81 69 205 / var(--tw-bg-opacity)); -} - -.bg-orange-300 { - --tw-bg-opacity: 1; - background-color: rgb(253 186 140 / var(--tw-bg-opacity)); -} - -.bg-orange-50 { - --tw-bg-opacity: 1; - background-color: rgb(255 248 241 / var(--tw-bg-opacity)); -} - -.bg-orange-500 { - --tw-bg-opacity: 1; - background-color: rgb(255 90 31 / var(--tw-bg-opacity)); -} - -.bg-primary-100 { - --tw-bg-opacity: 1; - background-color: rgb(224 231 255 / var(--tw-bg-opacity)); -} - -.bg-primary-50 { - --tw-bg-opacity: 1; - background-color: rgb(238 242 255 / var(--tw-bg-opacity)); -} - -.bg-primary-700 { - --tw-bg-opacity: 1; - background-color: rgb(67 56 202 / var(--tw-bg-opacity)); -} - -.bg-primary-900 { - --tw-bg-opacity: 1; - background-color: rgb(49 46 129 / var(--tw-bg-opacity)); -} - -.bg-red-100 { - --tw-bg-opacity: 1; - background-color: rgb(253 232 232 / var(--tw-bg-opacity)); -} - -.bg-success-100 { - --tw-bg-opacity: 1; - background-color: rgb(220 252 231 / var(--tw-bg-opacity)); -} - -.bg-success-300 { - --tw-bg-opacity: 1; - background-color: rgb(134 239 172 / var(--tw-bg-opacity)); -} - -.bg-success-50 { - --tw-bg-opacity: 1; - background-color: rgb(240 253 244 / var(--tw-bg-opacity)); -} - -.bg-success-700 { - --tw-bg-opacity: 1; - background-color: rgb(21 128 61 / var(--tw-bg-opacity)); -} - -.bg-transparent { - background-color: transparent; -} - -.bg-warning-100 { - --tw-bg-opacity: 1; - background-color: rgb(254 249 195 / var(--tw-bg-opacity)); -} - -.bg-white { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); -} - -.bg-yellow-100 { - --tw-bg-opacity: 1; - background-color: rgb(253 246 178 / var(--tw-bg-opacity)); -} - -.bg-opacity-50 { - --tw-bg-opacity: 0.5; -} - -.stroke-gray-300 { - stroke: #D1D5DB; -} - -.stroke-1 { - stroke-width: 1; -} - -.stroke-2 { - stroke-width: 2; -} - -.object-scale-down { - -o-object-fit: scale-down; - object-fit: scale-down; -} - -.p-0 { - padding: 0px; -} - -.p-1 { - padding: 0.25rem; -} - -.p-1\.5 { - padding: 0.375rem; -} - -.p-2 { - padding: 0.5rem; -} - -.p-2\.5 { - padding: 0.625rem; -} - -.p-3 { - padding: 0.75rem; -} - -.p-4 { - padding: 1rem; -} - -.p-5 { - padding: 1.25rem; -} - -.p-6 { - padding: 1.5rem; -} - -.px-1 { - padding-left: 0.25rem; - padding-right: 0.25rem; -} - -.px-1\.5 { - padding-left: 0.375rem; - padding-right: 0.375rem; -} - -.px-2 { - padding-left: 0.5rem; - padding-right: 0.5rem; -} - -.px-2\.5 { - padding-left: 0.625rem; - padding-right: 0.625rem; -} - -.px-3 { - padding-left: 0.75rem; - padding-right: 0.75rem; -} - -.px-4 { - padding-left: 1rem; - padding-right: 1rem; -} - -.px-5 { - padding-left: 1.25rem; - padding-right: 1.25rem; -} - -.px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; -} - -.px-\[10px\] { - padding-left: 10px; - padding-right: 10px; -} - -.px-\[2px\] { - padding-left: 2px; - padding-right: 2px; -} - -.py-0 { - padding-top: 0px; - padding-bottom: 0px; -} - -.py-0\.5 { - padding-top: 0.125rem; - padding-bottom: 0.125rem; -} - -.py-1 { - padding-top: 0.25rem; - padding-bottom: 0.25rem; -} - -.py-1\.5 { - padding-top: 0.375rem; - padding-bottom: 0.375rem; -} - -.py-2 { - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} - -.py-2\.5 { - padding-top: 0.625rem; - padding-bottom: 0.625rem; -} - -.py-3 { - padding-top: 0.75rem; - padding-bottom: 0.75rem; -} - -.py-4 { - padding-top: 1rem; - padding-bottom: 1rem; -} - -.py-8 { - padding-top: 2rem; - padding-bottom: 2rem; -} - -.py-\[2px\] { - padding-top: 2px; - padding-bottom: 2px; -} - -.pb-14 { - padding-bottom: 3.5rem; -} - -.pb-2 { - padding-bottom: 0.5rem; -} - -.pb-3 { - padding-bottom: 0.75rem; -} - -.pb-4 { - padding-bottom: 1rem; -} - -.pl-1 { - padding-left: 0.25rem; -} - -.pl-4 { - padding-left: 1rem; -} - -.pr-10 { - padding-right: 2.5rem; -} - -.pr-3 { - padding-right: 0.75rem; -} - -.ps-3 { - padding-inline-start: 0.75rem; -} - -.pt-0 { - padding-top: 0px; -} - -.pt-2 { - padding-top: 0.5rem; -} - -.pt-3 { - padding-top: 0.75rem; -} - -.pt-4 { - padding-top: 1rem; -} - -.pt-5 { - padding-top: 1.25rem; -} - -.text-left { - text-align: left; -} - -.text-center { - text-align: center; -} - -.text-justify { - text-align: justify; -} - -.text-end { - text-align: end; -} - -.align-top { - vertical-align: top; -} - -.align-middle { - vertical-align: middle; -} - -.font-mono { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; -} - -.font-sans { - font-family: Inter, ui-sans-serif, system-ui, -apple-system, system-ui, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji; -} - -.text-3xl { - font-size: 1.875rem; - line-height: 2.25rem; -} - -.text-5xl { - font-size: 3rem; - line-height: 1; -} - -.text-7xl { - font-size: 4.5rem; - line-height: 1; -} - -.text-9xl { - font-size: 8rem; - line-height: 1; -} - -.text-base { - font-size: 1rem; - line-height: 1.5rem; -} - -.text-lg { - font-size: 1.125rem; - line-height: 1.75rem; -} - -.text-sm { - font-size: 0.875rem; - line-height: 1.25rem; -} - -.text-xl { - font-size: 1.25rem; - line-height: 1.75rem; -} - -.text-xs { - font-size: 0.75rem; - line-height: 1rem; -} - -.font-black { - font-weight: 900; -} - -.font-bold { - font-weight: 700; -} - -.font-extrabold { - font-weight: 800; -} - -.font-light { - font-weight: 300; -} - -.font-medium { - font-weight: 500; -} - -.font-normal { - font-weight: 400; -} - -.font-semibold { - font-weight: 600; -} - -.uppercase { - text-transform: uppercase; -} - -.lowercase { - text-transform: lowercase; -} - -.italic { - font-style: italic; -} - -.leading-3 { - line-height: .75rem; -} - -.leading-4 { - line-height: 1rem; -} - -.leading-6 { - line-height: 1.5rem; -} - -.leading-9 { - line-height: 2.25rem; -} - -.leading-snug { - line-height: 1.375; -} - -.tracking-tight { - letter-spacing: -0.025em; -} - -.\!text-gray-300 { - --tw-text-opacity: 1 !important; - color: rgb(209 213 219 / var(--tw-text-opacity)) !important; -} - -.text-blue-600 { - --tw-text-opacity: 1; - color: rgb(79 70 229 / var(--tw-text-opacity)); -} - -.text-blue-800 { - --tw-text-opacity: 1; - color: rgb(55 48 163 / var(--tw-text-opacity)); -} - -.text-error-500 { - --tw-text-opacity: 1; - color: rgb(236 72 153 / var(--tw-text-opacity)); -} - -.text-error-600 { - --tw-text-opacity: 1; - color: rgb(219 39 119 / var(--tw-text-opacity)); -} - -.text-error-700 { - --tw-text-opacity: 1; - color: rgb(190 24 93 / var(--tw-text-opacity)); -} - -.text-error-800 { - --tw-text-opacity: 1; - color: rgb(157 23 77 / var(--tw-text-opacity)); -} - -.text-error-900 { - --tw-text-opacity: 1; - color: rgb(131 24 67 / var(--tw-text-opacity)); -} - -.text-gray-100 { - --tw-text-opacity: 1; - color: rgb(243 244 246 / var(--tw-text-opacity)); -} - -.text-gray-200 { - --tw-text-opacity: 1; - color: rgb(229 231 235 / var(--tw-text-opacity)); -} - -.text-gray-300 { - --tw-text-opacity: 1; - color: rgb(209 213 219 / var(--tw-text-opacity)); -} - -.text-gray-400 { - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); -} - -.text-gray-500 { - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); -} - -.text-gray-600 { - --tw-text-opacity: 1; - color: rgb(75 85 99 / var(--tw-text-opacity)); -} - -.text-gray-700 { - --tw-text-opacity: 1; - color: rgb(55 65 81 / var(--tw-text-opacity)); -} - -.text-gray-800 { - --tw-text-opacity: 1; - color: rgb(31 41 55 / var(--tw-text-opacity)); -} - -.text-gray-900 { - --tw-text-opacity: 1; - color: rgb(17 24 39 / var(--tw-text-opacity)); -} - -.text-green-400 { - --tw-text-opacity: 1; - color: rgb(49 196 141 / var(--tw-text-opacity)); -} - -.text-green-500 { - --tw-text-opacity: 1; - color: rgb(14 159 110 / var(--tw-text-opacity)); -} - -.text-green-600 { - --tw-text-opacity: 1; - color: rgb(5 122 85 / var(--tw-text-opacity)); -} - -.text-green-800 { - --tw-text-opacity: 1; - color: rgb(3 84 63 / var(--tw-text-opacity)); -} - -.text-indigo-700 { - --tw-text-opacity: 1; - color: rgb(81 69 205 / var(--tw-text-opacity)); -} - -.text-indigo-800 { - --tw-text-opacity: 1; - color: rgb(66 56 157 / var(--tw-text-opacity)); -} - -.text-orange-400 { - --tw-text-opacity: 1; - color: rgb(255 138 76 / var(--tw-text-opacity)); -} - -.text-orange-500 { - --tw-text-opacity: 1; - color: rgb(255 90 31 / var(--tw-text-opacity)); -} - -.text-orange-600 { - --tw-text-opacity: 1; - color: rgb(208 56 1 / var(--tw-text-opacity)); -} - -.text-orange-800 { - --tw-text-opacity: 1; - color: rgb(138 44 13 / var(--tw-text-opacity)); -} - -.text-pink-600 { - --tw-text-opacity: 1; - color: rgb(214 31 105 / var(--tw-text-opacity)); -} - -.text-pink-800 { - --tw-text-opacity: 1; - color: rgb(153 21 75 / var(--tw-text-opacity)); -} - -.text-primary-300 { - --tw-text-opacity: 1; - color: rgb(165 180 252 / var(--tw-text-opacity)); -} - -.text-primary-700 { - --tw-text-opacity: 1; - color: rgb(67 56 202 / var(--tw-text-opacity)); -} - -.text-primary-800 { - --tw-text-opacity: 1; - color: rgb(55 48 163 / var(--tw-text-opacity)); -} - -.text-primary-900 { - --tw-text-opacity: 1; - color: rgb(49 46 129 / var(--tw-text-opacity)); -} - -.text-red-700 { - --tw-text-opacity: 1; - color: rgb(200 30 30 / var(--tw-text-opacity)); -} - -.text-red-800 { - --tw-text-opacity: 1; - color: rgb(155 28 28 / var(--tw-text-opacity)); -} - -.text-success-600 { - --tw-text-opacity: 1; - color: rgb(22 163 74 / var(--tw-text-opacity)); -} - -.text-success-700 { - --tw-text-opacity: 1; - color: rgb(21 128 61 / var(--tw-text-opacity)); -} - -.text-success-800 { - --tw-text-opacity: 1; - color: rgb(22 101 52 / var(--tw-text-opacity)); -} - -.text-warning-700 { - --tw-text-opacity: 1; - color: rgb(161 98 7 / var(--tw-text-opacity)); -} - -.text-white { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.text-yellow-800 { - --tw-text-opacity: 1; - color: rgb(114 59 19 / var(--tw-text-opacity)); -} - -.underline { - text-decoration-line: underline; -} - -.placeholder-error-700::-moz-placeholder { - --tw-placeholder-opacity: 1; - color: rgb(190 24 93 / var(--tw-placeholder-opacity)); -} - -.placeholder-error-700::placeholder { - --tw-placeholder-opacity: 1; - color: rgb(190 24 93 / var(--tw-placeholder-opacity)); -} - -.opacity-0 { - opacity: 0; -} - -.opacity-50 { - opacity: 0.5; -} - -.opacity-70 { - opacity: 0.7; -} - -.shadow { - --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-\[inset_0_-4px_\#3949AB\] { - --tw-shadow: inset 0 -4px #3949AB; - --tw-shadow-colored: inset 0 -4px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-\[inset_5px_0px_0px_-1px_\#3949AB\] { - --tw-shadow: inset 5px 0px 0px -1px #3949AB; - --tw-shadow-colored: inset 5px 0px 0px -1px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-lg { - --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-md { - --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-sm { - --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); - --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.outline { - outline-style: solid; -} - -.ring-0 { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); -} - -.blur { - --tw-blur: blur(8px); - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); -} - -.drop-shadow-none { - --tw-drop-shadow: drop-shadow(0 0 #0000); - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); -} - -.\!filter { - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow) !important; -} - -.filter { - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); -} - -.transition { - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.transition-colors { - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.transition-opacity { - transition-property: opacity; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.duration-200 { - transition-duration: 200ms; -} - -.ease-in { - transition-timing-function: cubic-bezier(0.4, 0, 1, 1); -} - -.before\:content-\[\'\(\'\]::before { - --tw-content: '('; - content: var(--tw-content); -} - -.after\:absolute::after { - content: var(--tw-content); - position: absolute; -} - -.after\:left-\[2px\]::after { - content: var(--tw-content); - left: 2px; -} - -.after\:top-\[2px\]::after { - content: var(--tw-content); - top: 2px; -} - -.after\:h-5::after { - content: var(--tw-content); - height: 1.25rem; -} - -.after\:w-5::after { - content: var(--tw-content); - width: 1.25rem; -} - -.after\:rounded-full::after { - content: var(--tw-content); - border-radius: 9999px; -} - -.after\:border::after { - content: var(--tw-content); - border-width: 1px; -} - -.after\:border-gray-300::after { - content: var(--tw-content); - --tw-border-opacity: 1; - border-color: rgb(209 213 219 / var(--tw-border-opacity)); -} - -.after\:bg-white::after { - content: var(--tw-content); - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); -} - -.after\:transition-all::after { - content: var(--tw-content); - transition-property: all; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} - -.after\:content-\[\'\'\]::after { - --tw-content: ''; - content: var(--tw-content); -} - -.after\:content-\[\'\)\'\]::after { - --tw-content: ')'; - content: var(--tw-content); -} - -.visited\:text-primary-700:visited { - color: rgb(67 56 202 ); -} - -.hover\:cursor-default:hover { - cursor: default; -} - -.hover\:cursor-not-allowed:hover { - cursor: not-allowed; -} - -.hover\:cursor-pointer:hover { - cursor: pointer; -} - -.hover\:border-error-700:hover { - --tw-border-opacity: 1; - border-color: rgb(190 24 93 / var(--tw-border-opacity)); -} - -.hover\:border-error-800:hover { - --tw-border-opacity: 1; - border-color: rgb(157 23 77 / var(--tw-border-opacity)); -} - -.hover\:border-indigo-200:hover { - --tw-border-opacity: 1; - border-color: rgb(205 219 254 / var(--tw-border-opacity)); -} - -.hover\:border-primary-300:hover { - --tw-border-opacity: 1; - border-color: rgb(165 180 252 / var(--tw-border-opacity)); -} - -.hover\:border-primary-800:hover { - --tw-border-opacity: 1; - border-color: rgb(55 48 163 / var(--tw-border-opacity)); -} - -.hover\:border-success-700:hover { - --tw-border-opacity: 1; - border-color: rgb(21 128 61 / var(--tw-border-opacity)); -} - -.hover\:\!bg-primary-800:hover { - --tw-bg-opacity: 1 !important; - background-color: rgb(55 48 163 / var(--tw-bg-opacity)) !important; -} - -.hover\:bg-blue-800:hover { - --tw-bg-opacity: 1; - background-color: rgb(55 48 163 / var(--tw-bg-opacity)); -} - -.hover\:bg-error-700:hover { - --tw-bg-opacity: 1; - background-color: rgb(190 24 93 / var(--tw-bg-opacity)); -} - -.hover\:bg-error-800:hover { - --tw-bg-opacity: 1; - background-color: rgb(157 23 77 / var(--tw-bg-opacity)); -} - -.hover\:bg-error-900:hover { - --tw-bg-opacity: 1; - background-color: rgb(131 24 67 / var(--tw-bg-opacity)); -} - -.hover\:bg-gray-100:hover { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity)); -} - -.hover\:bg-gray-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(229 231 235 / var(--tw-bg-opacity)); -} - -.hover\:bg-gray-50:hover { - --tw-bg-opacity: 1; - background-color: rgb(249 250 251 / var(--tw-bg-opacity)); -} - -.hover\:bg-indigo-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(205 219 254 / var(--tw-bg-opacity)); -} - -.hover\:bg-primary-50:hover { - --tw-bg-opacity: 1; - background-color: rgb(238 242 255 / var(--tw-bg-opacity)); -} - -.hover\:bg-primary-800:hover { - --tw-bg-opacity: 1; - background-color: rgb(55 48 163 / var(--tw-bg-opacity)); -} - -.hover\:bg-primary-900:hover { - --tw-bg-opacity: 1; - background-color: rgb(49 46 129 / var(--tw-bg-opacity)); -} - -.hover\:bg-success-700:hover { - --tw-bg-opacity: 1; - background-color: rgb(21 128 61 / var(--tw-bg-opacity)); -} - -.hover\:bg-success-800:hover { - --tw-bg-opacity: 1; - background-color: rgb(22 101 52 / var(--tw-bg-opacity)); -} - -.hover\:bg-success-900:hover { - --tw-bg-opacity: 1; - background-color: rgb(20 83 45 / var(--tw-bg-opacity)); -} - -.hover\:font-bold:hover { - font-weight: 700; -} - -.hover\:text-gray-700:hover { - --tw-text-opacity: 1; - color: rgb(55 65 81 / var(--tw-text-opacity)); -} - -.hover\:text-gray-900:hover { - --tw-text-opacity: 1; - color: rgb(17 24 39 / var(--tw-text-opacity)); -} - -.hover\:text-primary-700:hover { - --tw-text-opacity: 1; - color: rgb(67 56 202 / var(--tw-text-opacity)); -} - -.hover\:text-primary-800:hover { - --tw-text-opacity: 1; - color: rgb(55 48 163 / var(--tw-text-opacity)); -} - -.hover\:text-primary-900:hover { - --tw-text-opacity: 1; - color: rgb(49 46 129 / var(--tw-text-opacity)); -} - -.hover\:text-white:hover { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.hover\:underline:hover { - text-decoration-line: underline; -} - -.focus\:border-blue-500:focus { - --tw-border-opacity: 1; - border-color: rgb(99 102 241 / var(--tw-border-opacity)); -} - -.focus\:border-error-500:focus { - --tw-border-opacity: 1; - border-color: rgb(236 72 153 / var(--tw-border-opacity)); -} - -.focus\:outline-none:focus { - outline: 2px solid transparent; - outline-offset: 2px; -} - -.focus\:ring-2:focus { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); -} - -.focus\:ring-4:focus { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); -} - -.focus\:\!ring-primary-300:focus { - --tw-ring-opacity: 1 !important; - --tw-ring-color: rgb(165 180 252 / var(--tw-ring-opacity)) !important; -} - -.focus\:ring-blue-300:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(165 180 252 / var(--tw-ring-opacity)); -} - -.focus\:ring-blue-500:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity)); -} - -.focus\:ring-error-200:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(251 207 232 / var(--tw-ring-opacity)); -} - -.focus\:ring-error-500:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(236 72 153 / var(--tw-ring-opacity)); -} - -.focus\:ring-gray-200:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity)); -} - -.focus\:ring-gray-300:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity)); -} - -.focus\:ring-indigo-200:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(205 219 254 / var(--tw-ring-opacity)); -} - -.focus\:ring-primary-200:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(199 210 254 / var(--tw-ring-opacity)); -} - -.focus\:ring-primary-500:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity)); -} - -.focus\:ring-success-200:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(187 247 208 / var(--tw-ring-opacity)); -} - -.focus-visible\:outline-none:focus-visible { - outline: 2px solid transparent; - outline-offset: 2px; -} - -.enabled\:hover\:border-error-700:hover:enabled { - --tw-border-opacity: 1; - border-color: rgb(190 24 93 / var(--tw-border-opacity)); -} - -.enabled\:hover\:border-primary-800:hover:enabled { - --tw-border-opacity: 1; - border-color: rgb(55 48 163 / var(--tw-border-opacity)); -} - -.enabled\:hover\:border-success-800:hover:enabled { - --tw-border-opacity: 1; - border-color: rgb(22 101 52 / var(--tw-border-opacity)); -} - -.enabled\:hover\:bg-error-700:hover:enabled { - --tw-bg-opacity: 1; - background-color: rgb(190 24 93 / var(--tw-bg-opacity)); -} - -.enabled\:hover\:bg-primary-50:hover:enabled { - --tw-bg-opacity: 1; - background-color: rgb(238 242 255 / var(--tw-bg-opacity)); -} - -.enabled\:hover\:bg-primary-800:hover:enabled { - --tw-bg-opacity: 1; - background-color: rgb(55 48 163 / var(--tw-bg-opacity)); -} - -.enabled\:hover\:bg-success-700:hover:enabled { - --tw-bg-opacity: 1; - background-color: rgb(21 128 61 / var(--tw-bg-opacity)); -} - -.enabled\:hover\:text-error-600:hover:enabled { - --tw-text-opacity: 1; - color: rgb(219 39 119 / var(--tw-text-opacity)); -} - -.enabled\:hover\:text-error-700:hover:enabled { - --tw-text-opacity: 1; - color: rgb(190 24 93 / var(--tw-text-opacity)); -} - -.enabled\:hover\:text-primary-700:hover:enabled { - --tw-text-opacity: 1; - color: rgb(67 56 202 / var(--tw-text-opacity)); -} - -.enabled\:hover\:text-success-700:hover:enabled { - --tw-text-opacity: 1; - color: rgb(21 128 61 / var(--tw-text-opacity)); -} - -.enabled\:hover\:text-white:hover:enabled { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.disabled\:cursor-not-allowed:disabled { - cursor: not-allowed; -} - -.disabled\:border-error-400:disabled { - --tw-border-opacity: 1; - border-color: rgb(244 114 182 / var(--tw-border-opacity)); -} - -.disabled\:border-green-200:disabled { - --tw-border-opacity: 1; - border-color: rgb(188 240 218 / var(--tw-border-opacity)); -} - -.disabled\:border-indigo-200:disabled { - --tw-border-opacity: 1; - border-color: rgb(205 219 254 / var(--tw-border-opacity)); -} - -.disabled\:border-primary-300:disabled { - --tw-border-opacity: 1; - border-color: rgb(165 180 252 / var(--tw-border-opacity)); -} - -.disabled\:border-success-300:disabled { - --tw-border-opacity: 1; - border-color: rgb(134 239 172 / var(--tw-border-opacity)); -} - -.disabled\:bg-error-400:disabled { - --tw-bg-opacity: 1; - background-color: rgb(244 114 182 / var(--tw-bg-opacity)); -} - -.disabled\:bg-gray-50:disabled { - --tw-bg-opacity: 1; - background-color: rgb(249 250 251 / var(--tw-bg-opacity)); -} - -.disabled\:bg-green-50:disabled { - --tw-bg-opacity: 1; - background-color: rgb(243 250 247 / var(--tw-bg-opacity)); -} - -.disabled\:bg-indigo-50:disabled { - --tw-bg-opacity: 1; - background-color: rgb(240 245 255 / var(--tw-bg-opacity)); -} - -.disabled\:bg-primary-300:disabled { - --tw-bg-opacity: 1; - background-color: rgb(165 180 252 / var(--tw-bg-opacity)); -} - -.disabled\:bg-success-300:disabled { - --tw-bg-opacity: 1; - background-color: rgb(134 239 172 / var(--tw-bg-opacity)); -} - -.disabled\:text-error-400:disabled { - --tw-text-opacity: 1; - color: rgb(244 114 182 / var(--tw-text-opacity)); -} - -.disabled\:text-gray-300:disabled { - --tw-text-opacity: 1; - color: rgb(209 213 219 / var(--tw-text-opacity)); -} - -.disabled\:text-gray-500:disabled { - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); -} - -.disabled\:text-green-200:disabled { - --tw-text-opacity: 1; - color: rgb(188 240 218 / var(--tw-text-opacity)); -} - -.disabled\:text-indigo-200:disabled { - --tw-text-opacity: 1; - color: rgb(205 219 254 / var(--tw-text-opacity)); -} - -.disabled\:text-primary-300:disabled { - --tw-text-opacity: 1; - color: rgb(165 180 252 / var(--tw-text-opacity)); -} - -.disabled\:text-success-300:disabled { - --tw-text-opacity: 1; - color: rgb(134 239 172 / var(--tw-text-opacity)); -} - -.disabled\:opacity-50:disabled { - opacity: 0.5; -} - -.peer:checked ~ .peer-checked\:bg-primary-300 { - --tw-bg-opacity: 1; - background-color: rgb(165 180 252 / var(--tw-bg-opacity)); -} - -.peer:checked ~ .peer-checked\:bg-primary-600 { - --tw-bg-opacity: 1; - background-color: rgb(79 70 229 / var(--tw-bg-opacity)); -} - -.peer:checked ~ .peer-checked\:after\:translate-x-full::after { - content: var(--tw-content); - --tw-translate-x: 100%; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.peer:checked ~ .peer-checked\:after\:border-white::after { - content: var(--tw-content); - --tw-border-opacity: 1; - border-color: rgb(255 255 255 / var(--tw-border-opacity)); -} - -.has-\[span\:not\(\.active\)\]\:hidden:has(span:not(.active)) { - display: none; -} - -.dark\:border-gray-600:is(.dark *) { - --tw-border-opacity: 1; - border-color: rgb(75 85 99 / var(--tw-border-opacity)); -} - -.dark\:\!bg-primary-600:is(.dark *) { - --tw-bg-opacity: 1 !important; - background-color: rgb(79 70 229 / var(--tw-bg-opacity)) !important; -} - -.dark\:\!bg-primary-700:is(.dark *) { - --tw-bg-opacity: 1 !important; - background-color: rgb(67 56 202 / var(--tw-bg-opacity)) !important; -} - -.dark\:bg-blue-600:is(.dark *) { - --tw-bg-opacity: 1; - background-color: rgb(79 70 229 / var(--tw-bg-opacity)); -} - -.dark\:bg-gray-600:is(.dark *) { - --tw-bg-opacity: 1; - background-color: rgb(75 85 99 / var(--tw-bg-opacity)); -} - -.dark\:bg-gray-700:is(.dark *) { - --tw-bg-opacity: 1; - background-color: rgb(55 65 81 / var(--tw-bg-opacity)); -} - -.dark\:bg-gray-800:is(.dark *) { - --tw-bg-opacity: 1; - background-color: rgb(31 41 55 / var(--tw-bg-opacity)); -} - -.dark\:text-error-400:is(.dark *) { - --tw-text-opacity: 1; - color: rgb(244 114 182 / var(--tw-text-opacity)); -} - -.dark\:text-gray-400:is(.dark *) { - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); -} - -.dark\:text-gray-500:is(.dark *) { - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); -} - -.dark\:text-white:is(.dark *) { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.dark\:placeholder-gray-400:is(.dark *)::-moz-placeholder { - --tw-placeholder-opacity: 1; - color: rgb(156 163 175 / var(--tw-placeholder-opacity)); -} - -.dark\:placeholder-gray-400:is(.dark *)::placeholder { - --tw-placeholder-opacity: 1; - color: rgb(156 163 175 / var(--tw-placeholder-opacity)); -} - -.dark\:hover\:\!bg-primary-700:hover:is(.dark *) { - --tw-bg-opacity: 1 !important; - background-color: rgb(67 56 202 / var(--tw-bg-opacity)) !important; -} - -.dark\:hover\:bg-blue-700:hover:is(.dark *) { - --tw-bg-opacity: 1; - background-color: rgb(67 56 202 / var(--tw-bg-opacity)); -} - -.dark\:hover\:bg-gray-600:hover:is(.dark *) { - --tw-bg-opacity: 1; - background-color: rgb(75 85 99 / var(--tw-bg-opacity)); -} - -.dark\:hover\:text-white:hover:is(.dark *) { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} - -.dark\:focus\:border-blue-500:focus:is(.dark *) { - --tw-border-opacity: 1; - border-color: rgb(99 102 241 / var(--tw-border-opacity)); -} - -.dark\:focus\:ring-blue-500:focus:is(.dark *) { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity)); -} - -@media (min-width: 640px) { - .sm\:col-span-1 { - grid-column: span 1 / span 1; - } - - .sm\:col-span-2 { - grid-column: span 2 / span 2; - } - - .sm\:col-span-3 { - grid-column: span 3 / span 3; - } - - .sm\:grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - - .sm\:grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - - .sm\:gap-6 { - gap: 1.5rem; - } - - .sm\:text-right { - text-align: right; - } - - .sm\:text-sm { - font-size: 0.875rem; - line-height: 1.25rem; - } -} - -@media (min-width: 768px) { - .md\:m-auto { - margin: auto; - } - - .md\:max-h-\[70vh\] { - max-height: 70vh; - } - - .md\:w-1\/2 { - width: 50%; - } - - .md\:w-2\/5 { - width: 40%; - } - - .md\:w-\[300px\] { - width: 300px; - } - - .md\:w-\[500px\] { - width: 500px; - } - - .md\:w-\[768px\] { - width: 768px; - } - - .md\:min-w-72 { - min-width: 18rem; - } - - .md\:flex-grow { - flex-grow: 1; - } - - .md\:-translate-x-\[-768px\] { - --tw-translate-x: 768px; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); - } - - .md\:-translate-x-\[768px\] { - --tw-translate-x: -768px; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); - } - - .md\:grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - - .md\:flex-row { - flex-direction: row; - } - - .md\:flex-wrap { - flex-wrap: wrap; - } - - .md\:justify-start { - justify-content: flex-start; - } - - .md\:justify-between { - justify-content: space-between; - } - - .md\:gap-0 { - gap: 0px; - } - - .md\:gap-4 { - gap: 1rem; - } - - .md\:text-4xl { - font-size: 2.25rem; - line-height: 2.5rem; - } -} - -@media (min-width: 1024px) { - .lg\:hidden { - display: none; - } - - .lg\:w-1\/2 { - width: 50%; - } - - .lg\:-translate-x-1\/2 { - --tw-translate-x: -50%; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); - } - - .lg\:-translate-x-\[-50\%\] { - --tw-translate-x: 50%; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); - } - - .lg\:px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; - } - - .lg\:py-16 { - padding-top: 4rem; - padding-bottom: 4rem; - } - - .lg\:pb-0 { - padding-bottom: 0px; - } - - .lg\:text-9xl { - font-size: 8rem; - line-height: 1; - } -} - -.rtl\:rotate-180:where([dir="rtl"], [dir="rtl"] *) { - --tw-rotate: 180deg; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} - -.rtl\:space-x-reverse:where([dir="rtl"], [dir="rtl"] *) > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 1; -} - -.\[\&\>div\>\*\:nth-child\(odd\)\]\:border-0>div>*:nth-child(odd) { - border-width: 0px; -} - -.\[\&\>div\>\*\:nth-child\(odd\)\]\:bg-transparent>div>*:nth-child(odd) { - background-color: transparent; -} - -.\[\&\>div\>\*\:nth-child\(odd\)\]\:pl-8>div>*:nth-child(odd) { - padding-left: 2rem; -} From cd1d4a5c99dddab0635cde5e62624d34390f0cbc Mon Sep 17 00:00:00 2001 From: Daneryl Date: Fri, 13 Dec 2024 13:06:07 +0100 Subject: [PATCH 11/15] Bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b09fd06ee0..eb5f3f81d1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uwazi", - "version": "1.193.5", + "version": "1.193.6", "description": "Uwazi is a free, open-source solution for organising, analysing and publishing your documents.", "keywords": [ "react" From 22ffd120809e912da69311a8eab00038f86429f0 Mon Sep 17 00:00:00 2001 From: Daneryl Date: Fri, 13 Dec 2024 13:06:12 +0100 Subject: [PATCH 12/15] Merge back from production and Bump rc version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4b64e967b7..4660b1c6f1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uwazi", - "version": "1.194.0-rc6", + "version": "1.194.0-rc7", "description": "Uwazi is a free, open-source solution for organising, analysing and publishing your documents.", "keywords": [ "react" From f559e2f382403c4cca23e51c127f2356c8c04e17 Mon Sep 17 00:00:00 2001 From: A happy cat Date: Fri, 13 Dec 2024 13:24:10 +0100 Subject: [PATCH 13/15] bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index eb5f3f81d1..df19e5b4a9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uwazi", - "version": "1.193.6", + "version": "1.193.7", "description": "Uwazi is a free, open-source solution for organising, analysing and publishing your documents.", "keywords": [ "react" From a917a9c95592c7a30d9597c0c6b962abbaf3f502 Mon Sep 17 00:00:00 2001 From: Alberto Casado Torres Date: Fri, 13 Dec 2024 13:53:24 +0100 Subject: [PATCH 14/15] I18NLinks will now scroll to elements that match the hash in the url (#7546) * I18NLinks will now scroll to elements that match the hash in the url * version bump * returning if no hash * bump --------- Co-authored-by: Joan Gallego Girona --- app/react/I18N/components/I18NLink.tsx | 35 ++++-- .../I18N/components/specs/I18NLink.spec.js | 112 +++++++++++------- package.json | 2 +- 3 files changed, 95 insertions(+), 54 deletions(-) diff --git a/app/react/I18N/components/I18NLink.tsx b/app/react/I18N/components/I18NLink.tsx index c79cc80085..338747c73c 100644 --- a/app/react/I18N/components/I18NLink.tsx +++ b/app/react/I18N/components/I18NLink.tsx @@ -1,6 +1,6 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { connect } from 'react-redux'; -import { useNavigate, NavLink } from 'react-router-dom'; +import { useNavigate, NavLink, useLocation } from 'react-router-dom'; import { omit } from 'lodash'; const defaultProps = { @@ -33,17 +33,35 @@ const I18NLink = (props: I18NLinkProps) => { } = props; const navigate = useNavigate(); + const location = useLocation(); + + const scrollToHashWithRetry = (hash: string, retries = 10, delay = 100) => { + if (!hash) return; + if (retries <= 0) return; + setTimeout(() => { + const element = document.getElementById(hash.substring(1)); + if (element) { + element.scrollIntoView({ behavior: 'smooth' }); + } else { + scrollToHashWithRetry(hash, retries - 1, delay); + } + }, delay); + }; + + const _navigate = () => { + navigate(to, { replace }); + scrollToHashWithRetry(location.hash); + }; const onClickHandler = (e: { preventDefault: () => void }) => { e.preventDefault(); - if (disabled) return; if (onClick && confirmTitle) { props.mainContext.confirm({ accept: () => { onClick(e); - navigate(to, { replace }); + _navigate(); }, title: confirmTitle, message: confirmMessage, @@ -53,13 +71,16 @@ const I18NLink = (props: I18NLinkProps) => { if (onClick) { onClick(e); - navigate(to, { replace }); + _navigate(); return; } - - navigate(to, { replace }); + _navigate(); }; + useEffect(() => { + scrollToHashWithRetry(location.hash); + }, [location]); + const newProps = omit(props, [ 'dispatch', 'onClick', diff --git a/app/react/I18N/components/specs/I18NLink.spec.js b/app/react/I18N/components/specs/I18NLink.spec.js index 0ba501aab8..7f27c27261 100644 --- a/app/react/I18N/components/specs/I18NLink.spec.js +++ b/app/react/I18N/components/specs/I18NLink.spec.js @@ -1,71 +1,91 @@ +/** + * @jest-environment jsdom + */ +/* eslint-disable max-statements */ import React from 'react'; -import { shallow } from 'enzyme'; -import { NavLink } from 'react-router-dom'; - -import { I18NLink, mapStateToProps } from '../I18NLink'; - -jest.mock('react-router-dom', () => ({ - ...jest.requireActual('react-router-dom'), - useNavigate: () => () => {}, -})); +import { render, screen, fireEvent } from '@testing-library/react'; +import { I18NLink } from '../I18NLink'; +import { MemoryRouter, Route, Routes } from 'react-router-dom'; describe('I18NLink', () => { - let component; let props; - const clickAction = () => {}; - const mouseOverAction = () => {}; - const event = jasmine.createSpyObj(['preventDefault']); + const clickAction = jest.fn(); beforeEach(() => { + jest.clearAllMocks(); props = { locale: 'es', - to: '/templates', - activeClass: 'is-active', + to: '/page/1#section1', onClick: clickAction, - onMouseOver: mouseOverAction, - dispatch: () => {}, + dispatch: jest.fn(), }; }); - const render = () => { - component = shallow(); + const renderComponent = (initialEntries = ['/']) => { + render( + + + Section 1} /> + + Section 1 +

Something to forget

+

Something to remember

+ + } + /> + + + ); }; describe('render', () => { - it('should pass other props, except for dispatch', () => { - spyOn(props, 'onClick'); - render(); - const link = component.find(NavLink); - expect(link.props().onMouseOver).toBe(mouseOverAction); - expect(link.props().dispatch).toBeUndefined(); - component.simulate('click', event); - expect(props.onClick).toHaveBeenCalledWith(event); - expect(link.props().to).toBe(props.to); + it('should trigger onClick', () => { + renderComponent(); + const link = screen.getByText('Section 1'); + fireEvent.click(link); + expect(clickAction).toHaveBeenCalled(); + expect(link).toHaveAttribute('href', props.to); }); - }); - describe('when its disabled', () => { - it('should do nothing when clicked', () => { - I18NLink.navigate = jasmine.createSpy('navigate'); - spyOn(props, 'onClick'); - props.disabled = true; - render(); - component.simulate('click', event); - expect(props.onClick).not.toHaveBeenCalled(); - expect(event.preventDefault).toHaveBeenCalled(); - expect(I18NLink.navigate).not.toHaveBeenCalled(); + it('should navigate when clicked', () => { + renderComponent(); + const link = screen.getByRole('link'); + fireEvent.click(link); + expect(screen.getByText('Something to remember')).toBeInTheDocument(); + }); + + it('should scroll to the hash element', () => { + renderComponent(['/page/1']); + const link = screen.getByRole('link'); + const section = screen.getByText('Something to remember'); + section.scrollIntoView = jest.fn(); + + jest.useFakeTimers(); + fireEvent.click(link); + jest.runAllTimers(); + + expect(section.scrollIntoView).toHaveBeenCalled(); }); }); - describe('mapStateToProps', () => { - it('should append the locale to the "to" url', () => { - expect(mapStateToProps({ locale: 'es' }, props).to).toBe('/es/templates'); + describe('when its disabled', () => { + it('should not trigger onClick', () => { + props.disabled = true; + renderComponent(); + const link = screen.getByText('Section 1'); + fireEvent.click(link); + expect(clickAction).not.toHaveBeenCalled(); }); - describe('when there is no locale', () => { - it('should pass the "to" url unchanged', () => { - expect(mapStateToProps({}, props).to).toBe('/templates'); - }); + it('should not navigate when clicked', () => { + props.disabled = true; + renderComponent(); + const link = screen.getByRole('link'); + fireEvent.click(link); + expect(screen.queryByText('Something to remember')).not.toBeInTheDocument(); }); }); }); diff --git a/package.json b/package.json index eb5f3f81d1..df19e5b4a9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uwazi", - "version": "1.193.6", + "version": "1.193.7", "description": "Uwazi is a free, open-source solution for organising, analysing and publishing your documents.", "keywords": [ "react" From efc5f1c4738b4b2c7892ec34fc6ebb8ce671158c Mon Sep 17 00:00:00 2001 From: Daneryl Date: Mon, 16 Dec 2024 10:45:35 +0100 Subject: [PATCH 15/15] Testing the queue.v2 --- app/api/queue.v2/configuration/factories.ts | 4 ++-- app/queueRegistry.ts | 20 +++++++++++++++++- scripts/scripts.v2/dispatchTestJobs.ts | 23 +++++++++++++++++++++ 3 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 scripts/scripts.v2/dispatchTestJobs.ts diff --git a/app/api/queue.v2/configuration/factories.ts b/app/api/queue.v2/configuration/factories.ts index b356f33642..a6712e5ee5 100644 --- a/app/api/queue.v2/configuration/factories.ts +++ b/app/api/queue.v2/configuration/factories.ts @@ -5,7 +5,7 @@ import { getSharedClient, getSharedConnection, } from 'api/common.v2/database/getConnectionForCurrentTenant'; -import { DefaultLogger } from 'api/log.v2/infrastructure/StandardLogger'; +import { DefaultLogger, SystemLogger } from 'api/log.v2/infrastructure/StandardLogger'; import { JobsRouter } from '../infrastructure/JobsRouter'; import { MongoQueueAdapter } from '../infrastructure/MongoQueueAdapter'; import { NamespacedDispatcher } from '../infrastructure/NamespacedDispatcher'; @@ -13,7 +13,7 @@ import { NamespacedDispatcher } from '../infrastructure/NamespacedDispatcher'; export function DefaultQueueAdapter() { return new MongoQueueAdapter( getSharedConnection(), - new MongoTransactionManager(getSharedClient(), DefaultLogger()) + new MongoTransactionManager(getSharedClient(), SystemLogger()) ); } diff --git a/app/queueRegistry.ts b/app/queueRegistry.ts index c25931535b..fe4fab9aa6 100644 --- a/app/queueRegistry.ts +++ b/app/queueRegistry.ts @@ -1,4 +1,4 @@ -import { Dispatchable } from 'api/queue.v2/application/contracts/Dispatchable'; +import { Dispatchable, HeartbeatCallback } from 'api/queue.v2/application/contracts/Dispatchable'; import { DispatchableClass } from 'api/queue.v2/application/contracts/JobsDispatcher'; import { UpdateTemplateRelationshipPropertiesJob as createUpdateTemplateRelationshipPropertiesJob, @@ -7,6 +7,23 @@ import { import { UpdateRelationshipPropertiesJob } from 'api/relationships.v2/services/propertyUpdateStrategies/UpdateRelationshipPropertiesJob'; import { UpdateTemplateRelationshipPropertiesJob } from 'api/relationships.v2/services/propertyUpdateStrategies/UpdateTemplateRelationshipPropertiesJob'; +function randomIntFromInterval(min, max) { + // min and max included + return Math.floor(Math.random() * (max - min + 1) + min); +} + +export class TestJob implements Dispatchable { + static BATCH_SIZE = 200; + + constructor() {} + + async handleDispatch(_heartbeat: HeartbeatCallback) { + await new Promise(resolve => { + setTimeout(resolve, randomIntFromInterval(1000, 2000)); + }); + } +} + export function registerJobs( register: ( dispatchable: DispatchableClass, @@ -15,4 +32,5 @@ export function registerJobs( ) { register(UpdateRelationshipPropertiesJob, async () => createUpdateRelationshipPropertiesJob()); register(UpdateTemplateRelationshipPropertiesJob, createUpdateTemplateRelationshipPropertiesJob); + register(TestJob, async () => new TestJob()); } diff --git a/scripts/scripts.v2/dispatchTestJobs.ts b/scripts/scripts.v2/dispatchTestJobs.ts new file mode 100644 index 0000000000..2dd030f6fd --- /dev/null +++ b/scripts/scripts.v2/dispatchTestJobs.ts @@ -0,0 +1,23 @@ +import { DefaultDispatcher } from 'api/queue.v2/configuration/factories'; +import { TestJob } from '../../app/queueRegistry'; +import { DB } from 'api/odm'; +import { config } from 'api/config'; + +let dbAuth = {}; + +if (process.env.DBUSER) { + dbAuth = { + auth: { authSource: 'admin' }, + user: process.env.DBUSER, + pass: process.env.DBPASS, + }; +} + +(async () => { + await DB.connect(config.DBHOST, dbAuth); + const dispatcher = await DefaultDispatcher('default'); + for (let i = 0; i < 100; i++) { + await dispatcher.dispatch(TestJob, {}); + } + await DB.disconnect(); +})();