quoin-editor 0.4.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +205 -0
- package/MIGRATION.md +233 -0
- package/README.md +78 -715
- package/dist/ai.cjs +1107 -0
- package/dist/ai.cjs.map +1 -0
- package/dist/ai.d.cts +68 -0
- package/dist/ai.d.ts +68 -0
- package/dist/ai.js +1107 -0
- package/dist/ai.js.map +1 -0
- package/dist/catalogue.cjs +59 -0
- package/dist/catalogue.cjs.map +1 -0
- package/dist/catalogue.d.cts +39 -0
- package/dist/catalogue.d.ts +39 -0
- package/dist/catalogue.js +59 -0
- package/dist/catalogue.js.map +1 -0
- package/dist/chunk-2QCRZ7OL.cjs +319 -0
- package/dist/chunk-2QCRZ7OL.cjs.map +1 -0
- package/dist/chunk-2VDK27IF.cjs +6666 -0
- package/dist/chunk-2VDK27IF.cjs.map +1 -0
- package/dist/chunk-47MLKSI2.js +326 -0
- package/dist/chunk-47MLKSI2.js.map +1 -0
- package/dist/chunk-5DNCCN6X.cjs +326 -0
- package/dist/chunk-5DNCCN6X.cjs.map +1 -0
- package/dist/chunk-AEJXZBVR.cjs +1378 -0
- package/dist/chunk-AEJXZBVR.cjs.map +1 -0
- package/dist/chunk-CDELOHDY.cjs +239 -0
- package/dist/chunk-CDELOHDY.cjs.map +1 -0
- package/dist/chunk-E75EHRPA.cjs +175 -0
- package/dist/chunk-E75EHRPA.cjs.map +1 -0
- package/dist/chunk-EL2OEJQC.cjs +562 -0
- package/dist/chunk-EL2OEJQC.cjs.map +1 -0
- package/dist/chunk-GLLXHMH2.cjs +25 -0
- package/dist/chunk-GLLXHMH2.cjs.map +1 -0
- package/dist/chunk-GTTPVJSD.cjs +3286 -0
- package/dist/chunk-GTTPVJSD.cjs.map +1 -0
- package/dist/chunk-HELJTLNC.cjs +100 -0
- package/dist/chunk-HELJTLNC.cjs.map +1 -0
- package/dist/chunk-HJIQT3S5.js +4047 -0
- package/dist/chunk-HJIQT3S5.js.map +1 -0
- package/dist/chunk-HZSSEYJS.cjs +504 -0
- package/dist/chunk-HZSSEYJS.cjs.map +1 -0
- package/dist/chunk-JDPTZUBW.js +184 -0
- package/dist/chunk-JDPTZUBW.js.map +1 -0
- package/dist/chunk-JEIFJHEI.js +14 -0
- package/dist/chunk-JEIFJHEI.js.map +1 -0
- package/dist/chunk-K574XHMM.js +25 -0
- package/dist/chunk-K574XHMM.js.map +1 -0
- package/dist/chunk-KAVU6T6J.js +249 -0
- package/dist/chunk-KAVU6T6J.js.map +1 -0
- package/dist/chunk-KXOBZGQO.js +1378 -0
- package/dist/chunk-KXOBZGQO.js.map +1 -0
- package/dist/chunk-LCQSG4M6.js +3335 -0
- package/dist/chunk-LCQSG4M6.js.map +1 -0
- package/dist/chunk-MQ2XQ4MX.js +100 -0
- package/dist/chunk-MQ2XQ4MX.js.map +1 -0
- package/dist/chunk-ND5XJVK2.cjs +3335 -0
- package/dist/chunk-ND5XJVK2.cjs.map +1 -0
- package/dist/chunk-NNDYYEW5.js +504 -0
- package/dist/chunk-NNDYYEW5.js.map +1 -0
- package/dist/chunk-NOKWNK2O.js +319 -0
- package/dist/chunk-NOKWNK2O.js.map +1 -0
- package/dist/chunk-OMOBMXD5.cjs +57 -0
- package/dist/chunk-OMOBMXD5.cjs.map +1 -0
- package/dist/chunk-PMWCQSQX.js +239 -0
- package/dist/chunk-PMWCQSQX.js.map +1 -0
- package/dist/chunk-POBM7MGR.js +30 -0
- package/dist/chunk-POBM7MGR.js.map +1 -0
- package/dist/chunk-PWUEPDA3.cjs +598 -0
- package/dist/chunk-PWUEPDA3.cjs.map +1 -0
- package/dist/chunk-PZ4GT5JO.cjs +4047 -0
- package/dist/chunk-PZ4GT5JO.cjs.map +1 -0
- package/dist/chunk-QAW5NH6S.cjs +14 -0
- package/dist/chunk-QAW5NH6S.cjs.map +1 -0
- package/dist/chunk-RDG4VI6E.cjs +706 -0
- package/dist/chunk-RDG4VI6E.cjs.map +1 -0
- package/dist/chunk-RUDWMKYX.js +562 -0
- package/dist/chunk-RUDWMKYX.js.map +1 -0
- package/dist/chunk-SG37UBDO.js +706 -0
- package/dist/chunk-SG37UBDO.js.map +1 -0
- package/dist/chunk-SLVDAHHK.cjs +30 -0
- package/dist/chunk-SLVDAHHK.cjs.map +1 -0
- package/dist/chunk-T7SW6OWV.js +598 -0
- package/dist/chunk-T7SW6OWV.js.map +1 -0
- package/dist/chunk-TC4DARU2.js +175 -0
- package/dist/chunk-TC4DARU2.js.map +1 -0
- package/dist/chunk-WQHV3MRE.cjs +184 -0
- package/dist/chunk-WQHV3MRE.cjs.map +1 -0
- package/dist/chunk-WXMYDXPN.cjs +33 -0
- package/dist/chunk-WXMYDXPN.cjs.map +1 -0
- package/dist/chunk-XEBWC7ZL.js +57 -0
- package/dist/chunk-XEBWC7ZL.js.map +1 -0
- package/dist/chunk-ZC24WB7Y.cjs +249 -0
- package/dist/chunk-ZC24WB7Y.cjs.map +1 -0
- package/dist/chunk-ZGZEJCRV.js +6666 -0
- package/dist/chunk-ZGZEJCRV.js.map +1 -0
- package/dist/chunk-ZHOSSWUM.js +33 -0
- package/dist/chunk-ZHOSSWUM.js.map +1 -0
- package/dist/chunk-ZS2WA357.js +3286 -0
- package/dist/chunk-ZS2WA357.js.map +1 -0
- package/dist/comments.cjs +993 -0
- package/dist/comments.cjs.map +1 -0
- package/dist/comments.d.cts +88 -0
- package/dist/comments.d.ts +88 -0
- package/dist/comments.js +993 -0
- package/dist/comments.js.map +1 -0
- package/dist/diff.cjs +343 -0
- package/dist/diff.cjs.map +1 -0
- package/dist/diff.d.cts +67 -0
- package/dist/diff.d.ts +67 -0
- package/dist/diff.js +343 -0
- package/dist/diff.js.map +1 -0
- package/dist/docx.cjs +854 -0
- package/dist/docx.cjs.map +1 -0
- package/dist/docx.d.cts +27 -0
- package/dist/docx.d.ts +27 -0
- package/dist/docx.js +854 -0
- package/dist/docx.js.map +1 -0
- package/dist/embed-provider-jXwlRmnp.d.cts +19 -0
- package/dist/embed-provider-jXwlRmnp.d.ts +19 -0
- package/dist/embed.cjs +17 -0
- package/dist/embed.cjs.map +1 -0
- package/dist/embed.d.cts +56 -0
- package/dist/embed.d.ts +56 -0
- package/dist/embed.js +17 -0
- package/dist/embed.js.map +1 -0
- package/dist/emoji-data.cjs +1968 -0
- package/dist/emoji-data.cjs.map +1 -0
- package/dist/emoji-data.js +1968 -0
- package/dist/emoji-data.js.map +1 -0
- package/dist/emoji-extension-C12gDPm6.d.cts +46 -0
- package/dist/emoji-extension-DpQ43HjE.d.ts +46 -0
- package/dist/emoji.cjs +18 -0
- package/dist/emoji.cjs.map +1 -0
- package/dist/emoji.d.cts +31 -0
- package/dist/emoji.d.ts +31 -0
- package/dist/emoji.js +18 -0
- package/dist/emoji.js.map +1 -0
- package/dist/engine.cjs +119 -0
- package/dist/engine.cjs.map +1 -0
- package/dist/engine.d.cts +144 -0
- package/dist/engine.d.ts +144 -0
- package/dist/engine.js +119 -0
- package/dist/engine.js.map +1 -0
- package/dist/find-extension-DKqLLSuP.d.ts +41 -0
- package/dist/find-extension-_sbZEt3R.d.cts +41 -0
- package/dist/find.cjs +20 -0
- package/dist/find.cjs.map +1 -0
- package/dist/find.d.cts +44 -0
- package/dist/find.d.ts +44 -0
- package/dist/find.js +20 -0
- package/dist/find.js.map +1 -0
- package/dist/headless.cjs +151 -518
- package/dist/headless.cjs.map +1 -1
- package/dist/headless.d.cts +102 -69
- package/dist/headless.d.ts +102 -69
- package/dist/headless.js +149 -467
- package/dist/headless.js.map +1 -1
- package/dist/index-CgD72kHB.d.cts +65 -0
- package/dist/index-DNYbTK3w.d.ts +65 -0
- package/dist/index.cjs +183 -2753
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +345 -253
- package/dist/index.d.ts +345 -253
- package/dist/index.js +168 -2696
- package/dist/index.js.map +1 -1
- package/dist/math.cjs +18 -0
- package/dist/math.cjs.map +1 -0
- package/dist/math.d.cts +49 -0
- package/dist/math.d.ts +49 -0
- package/dist/math.js +18 -0
- package/dist/math.js.map +1 -0
- package/dist/mention.cjs +18 -0
- package/dist/mention.cjs.map +1 -0
- package/dist/mention.d.cts +50 -0
- package/dist/mention.d.ts +50 -0
- package/dist/mention.js +18 -0
- package/dist/mention.js.map +1 -0
- package/dist/presence.cjs +565 -0
- package/dist/presence.cjs.map +1 -0
- package/dist/presence.d.cts +30 -0
- package/dist/presence.d.ts +30 -0
- package/dist/presence.js +565 -0
- package/dist/presence.js.map +1 -0
- package/dist/registry-CWBOSAHm.d.cts +121 -0
- package/dist/registry-CWBOSAHm.d.ts +121 -0
- package/dist/stats-extension-Bly88uio.d.ts +40 -0
- package/dist/stats-extension-CJPijvUb.d.cts +40 -0
- package/dist/stats.cjs +19 -0
- package/dist/stats.cjs.map +1 -0
- package/dist/stats.d.cts +19 -0
- package/dist/stats.d.ts +19 -0
- package/dist/stats.js +19 -0
- package/dist/stats.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/table-extension-BTLxFy2S.d.cts +57 -0
- package/dist/table-extension-Dzf4k6hI.d.ts +57 -0
- package/dist/table.cjs +50 -0
- package/dist/table.cjs.map +1 -0
- package/dist/table.d.cts +57 -0
- package/dist/table.d.ts +57 -0
- package/dist/table.js +50 -0
- package/dist/table.js.map +1 -0
- package/dist/to-html-C5t7xyaM.d.ts +21 -0
- package/dist/to-html-CNCITCln.d.cts +21 -0
- package/dist/toc-extension-B3-s6h2x.d.cts +25 -0
- package/dist/toc-extension-DWm5alVj.d.ts +25 -0
- package/dist/toc.cjs +18 -0
- package/dist/toc.cjs.map +1 -0
- package/dist/toc.d.cts +24 -0
- package/dist/toc.d.ts +24 -0
- package/dist/toc.js +18 -0
- package/dist/toc.js.map +1 -0
- package/dist/types-Cz7XJLaK.d.cts +366 -0
- package/dist/types-DULc8wwg.d.cts +120 -0
- package/dist/types-DULc8wwg.d.ts +120 -0
- package/dist/types-a1CRBlEh.d.ts +366 -0
- package/dist/view-controller-DSHw0ltQ.d.cts +118 -0
- package/dist/view-controller-UbpzblGl.d.ts +118 -0
- package/dist/view.cjs +23 -0
- package/dist/view.cjs.map +1 -0
- package/dist/view.d.cts +40 -0
- package/dist/view.d.ts +40 -0
- package/dist/view.js +23 -0
- package/dist/view.js.map +1 -0
- package/dist/yjs.cjs +1026 -0
- package/dist/yjs.cjs.map +1 -0
- package/dist/yjs.d.cts +22 -0
- package/dist/yjs.d.ts +22 -0
- package/dist/yjs.js +1026 -0
- package/dist/yjs.js.map +1 -0
- package/package.json +219 -20
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { ComponentType } from 'react';
|
|
2
|
+
|
|
3
|
+
/** A run of code drawn in one colour or class. Its text is drawn as text, never parsed as markup. */
|
|
4
|
+
type CodeToken = {
|
|
5
|
+
text: string;
|
|
6
|
+
color?: string;
|
|
7
|
+
className?: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Highlights the code of a code block: one array of tokens per line of `code`, split on `\n`, whose texts put together
|
|
11
|
+
* spell the line exactly, since the tokens are drawn under the text the writer types into. Wrap any highlighter, such as
|
|
12
|
+
* Shiki, Prism or highlight.js, in one. `language` is the block's language as stored, which may be an alias such as `ts`.
|
|
13
|
+
*/
|
|
14
|
+
type CodeHighlighter = (code: string, language: string) => CodeToken[][];
|
|
15
|
+
|
|
16
|
+
/** What your upload function resolves with so Quoin can reference the stored file later. */
|
|
17
|
+
type UploadResult = {
|
|
18
|
+
/** Opaque key your storage uses to find the file again. */
|
|
19
|
+
storageKey: string;
|
|
20
|
+
filename: string;
|
|
21
|
+
size: number;
|
|
22
|
+
/** Your own record id for the file, if you track one. */
|
|
23
|
+
assetId?: string;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Stores a file and returns its key. Quoin never performs the request itself.
|
|
27
|
+
* `category` names what the file is for (for example an image or a recording) so you can route it.
|
|
28
|
+
* Reject with an Error whose message is safe to show the user: it is rendered
|
|
29
|
+
* verbatim beside the upload button. A non-Error rejection or an empty message shows a generic "Upload failed." instead.
|
|
30
|
+
* A raw `fetch` rejection such as "Failed to fetch" would surface verbatim, so catch and rethrow with your own wording.
|
|
31
|
+
* The control is disabled while an upload is in flight.
|
|
32
|
+
*/
|
|
33
|
+
type UploadFn = (file: File, category: string) => Promise<UploadResult>;
|
|
34
|
+
/** Props for a block's read-only rendering, which is what you see for every block you are not editing. */
|
|
35
|
+
type BlockPreviewProps<D = Record<string, unknown>> = {
|
|
36
|
+
data: D;
|
|
37
|
+
/** Id of the block being drawn, for anchors and keys. */
|
|
38
|
+
blockId?: string;
|
|
39
|
+
};
|
|
40
|
+
/** Props for a block's editing surface; call `onChange` with the whole next data, not a patch. */
|
|
41
|
+
type BlockEditorProps<D = Record<string, unknown>> = {
|
|
42
|
+
data: D;
|
|
43
|
+
onChange: (data: D) => void;
|
|
44
|
+
/** Inserts a new block of the given type after this one. */
|
|
45
|
+
onInsertBlock?: (type: string) => void;
|
|
46
|
+
/** Leaves edit mode and returns to the preview. */
|
|
47
|
+
onDone?: () => void;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/** The fields every block definition carries, whatever it can do with its data. */
|
|
51
|
+
type BlockDefinitionCommon<D extends object> = {
|
|
52
|
+
type: string;
|
|
53
|
+
label: string;
|
|
54
|
+
/** Any icon component, such as a lucide one, that takes a class name and can be hidden from assistive technology. */
|
|
55
|
+
icon: ComponentType<{
|
|
56
|
+
className?: string;
|
|
57
|
+
'aria-hidden'?: boolean | 'true' | 'false';
|
|
58
|
+
}>;
|
|
59
|
+
/**
|
|
60
|
+
* Called when a new block of this type is inserted, to seed its data.
|
|
61
|
+
* `NoInfer` keeps `D` inferred from `editor` and `preview` alone, so the seed is checked
|
|
62
|
+
* against the editor's data type instead of widening it.
|
|
63
|
+
*/
|
|
64
|
+
initialData?: () => NoInfer<D>;
|
|
65
|
+
/** Whether the block is offered in the slash palette and inserter; defaults to true. */
|
|
66
|
+
inSlashPalette?: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Renders this block's editor permanently instead of a preview you click to edit.
|
|
69
|
+
* Also supply a `preview`: a read-only canvas draws the preview rather than the editor,
|
|
70
|
+
* so without one the block's content is invisible there.
|
|
71
|
+
*/
|
|
72
|
+
alwaysEditing?: boolean;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Describes one block type: how to label it, how to draw it at rest, how to edit it.
|
|
76
|
+
*
|
|
77
|
+
* Supply `editor`, `preview`, or both, and the canvas does the rest. A definition with no
|
|
78
|
+
* `preview` is edit-only: a read-only canvas has nothing to draw for it but its label.
|
|
79
|
+
* A definition with no `editor` can never be edited in the canvas, which is what a block
|
|
80
|
+
* whose content belongs to a server-side record wants; the card offers no edit affordance
|
|
81
|
+
* for it and a click goes through to whatever the preview itself renders.
|
|
82
|
+
*
|
|
83
|
+
* Omitting both is a type error, because such a block would only ever draw its own label.
|
|
84
|
+
*
|
|
85
|
+
* A definition of a type the canvas draws itself, other than Quoin's own, draws that type as a void block: `DIVIDER`
|
|
86
|
+
* everywhere, and `MARKDOWN`, `CALLOUT` and `TOGGLE` only on a read-only canvas, since an editable one types into them
|
|
87
|
+
* in place.
|
|
88
|
+
*/
|
|
89
|
+
type BlockDefinition<D extends object = Record<string, unknown>> = (BlockDefinitionCommon<D> & {
|
|
90
|
+
editor: ComponentType<BlockEditorProps<D>>;
|
|
91
|
+
/**
|
|
92
|
+
* What the block shows when it is not being edited. Optional so a host can register an
|
|
93
|
+
* edit-only block type, and overridable so a host can supply rich rendering (a full
|
|
94
|
+
* markdown pipeline, a chart) without Quoin depending on one.
|
|
95
|
+
*/
|
|
96
|
+
preview?: ComponentType<BlockPreviewProps<D>>;
|
|
97
|
+
}) | (BlockDefinitionCommon<D> & {
|
|
98
|
+
/** Omitted: this block is never editable in the canvas. */
|
|
99
|
+
editor?: undefined;
|
|
100
|
+
/** Required here, because it is the only thing that can draw the block. */
|
|
101
|
+
preview: ComponentType<BlockPreviewProps<D>>;
|
|
102
|
+
});
|
|
103
|
+
/** A definition with its data type erased, so definitions of different shapes compose in one array. */
|
|
104
|
+
type AnyBlockDefinition = BlockDefinition<Record<string, unknown>>;
|
|
105
|
+
/**
|
|
106
|
+
* Types `data` inside your editor component, then erases the generic on the way out.
|
|
107
|
+
* The erasure is deliberate: `D` appears in both covariant and contravariant positions
|
|
108
|
+
* on `editor`, so without it an array of differently-shaped definitions will not typecheck.
|
|
109
|
+
* `initialData` is checked against the editor's data type. That relies on `NoInfer`, so
|
|
110
|
+
* TypeScript 5.4 or later is required.
|
|
111
|
+
*
|
|
112
|
+
* `D` defaults to `Record<string, unknown>`, so a definition whose components take no
|
|
113
|
+
* annotation still gets a usable `data` rather than a bare `object`.
|
|
114
|
+
*/
|
|
115
|
+
declare function defineBlock<D extends object = Record<string, unknown>>(definition: BlockDefinition<D>): AnyBlockDefinition;
|
|
116
|
+
/** The definition for a type, or undefined; the last registration of a type wins, so a host can override a core block. */
|
|
117
|
+
declare function blockByType(definitions: readonly AnyBlockDefinition[], type: string): AnyBlockDefinition | undefined;
|
|
118
|
+
/** The definitions offered in the slash palette, in registration order, one per type, with the last registration of a type winning. */
|
|
119
|
+
declare function paletteBlocks(definitions: AnyBlockDefinition[]): AnyBlockDefinition[];
|
|
120
|
+
|
|
121
|
+
export { type AnyBlockDefinition as A, type BlockDefinition as B, type CodeHighlighter as C, type UploadFn as U, type UploadResult as a, type BlockEditorProps as b, type BlockPreviewProps as c, defineBlock as d, type CodeToken as e, blockByType as f, paletteBlocks as p };
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { ComponentType } from 'react';
|
|
2
|
+
|
|
3
|
+
/** A run of code drawn in one colour or class. Its text is drawn as text, never parsed as markup. */
|
|
4
|
+
type CodeToken = {
|
|
5
|
+
text: string;
|
|
6
|
+
color?: string;
|
|
7
|
+
className?: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Highlights the code of a code block: one array of tokens per line of `code`, split on `\n`, whose texts put together
|
|
11
|
+
* spell the line exactly, since the tokens are drawn under the text the writer types into. Wrap any highlighter, such as
|
|
12
|
+
* Shiki, Prism or highlight.js, in one. `language` is the block's language as stored, which may be an alias such as `ts`.
|
|
13
|
+
*/
|
|
14
|
+
type CodeHighlighter = (code: string, language: string) => CodeToken[][];
|
|
15
|
+
|
|
16
|
+
/** What your upload function resolves with so Quoin can reference the stored file later. */
|
|
17
|
+
type UploadResult = {
|
|
18
|
+
/** Opaque key your storage uses to find the file again. */
|
|
19
|
+
storageKey: string;
|
|
20
|
+
filename: string;
|
|
21
|
+
size: number;
|
|
22
|
+
/** Your own record id for the file, if you track one. */
|
|
23
|
+
assetId?: string;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Stores a file and returns its key. Quoin never performs the request itself.
|
|
27
|
+
* `category` names what the file is for (for example an image or a recording) so you can route it.
|
|
28
|
+
* Reject with an Error whose message is safe to show the user: it is rendered
|
|
29
|
+
* verbatim beside the upload button. A non-Error rejection or an empty message shows a generic "Upload failed." instead.
|
|
30
|
+
* A raw `fetch` rejection such as "Failed to fetch" would surface verbatim, so catch and rethrow with your own wording.
|
|
31
|
+
* The control is disabled while an upload is in flight.
|
|
32
|
+
*/
|
|
33
|
+
type UploadFn = (file: File, category: string) => Promise<UploadResult>;
|
|
34
|
+
/** Props for a block's read-only rendering, which is what you see for every block you are not editing. */
|
|
35
|
+
type BlockPreviewProps<D = Record<string, unknown>> = {
|
|
36
|
+
data: D;
|
|
37
|
+
/** Id of the block being drawn, for anchors and keys. */
|
|
38
|
+
blockId?: string;
|
|
39
|
+
};
|
|
40
|
+
/** Props for a block's editing surface; call `onChange` with the whole next data, not a patch. */
|
|
41
|
+
type BlockEditorProps<D = Record<string, unknown>> = {
|
|
42
|
+
data: D;
|
|
43
|
+
onChange: (data: D) => void;
|
|
44
|
+
/** Inserts a new block of the given type after this one. */
|
|
45
|
+
onInsertBlock?: (type: string) => void;
|
|
46
|
+
/** Leaves edit mode and returns to the preview. */
|
|
47
|
+
onDone?: () => void;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/** The fields every block definition carries, whatever it can do with its data. */
|
|
51
|
+
type BlockDefinitionCommon<D extends object> = {
|
|
52
|
+
type: string;
|
|
53
|
+
label: string;
|
|
54
|
+
/** Any icon component, such as a lucide one, that takes a class name and can be hidden from assistive technology. */
|
|
55
|
+
icon: ComponentType<{
|
|
56
|
+
className?: string;
|
|
57
|
+
'aria-hidden'?: boolean | 'true' | 'false';
|
|
58
|
+
}>;
|
|
59
|
+
/**
|
|
60
|
+
* Called when a new block of this type is inserted, to seed its data.
|
|
61
|
+
* `NoInfer` keeps `D` inferred from `editor` and `preview` alone, so the seed is checked
|
|
62
|
+
* against the editor's data type instead of widening it.
|
|
63
|
+
*/
|
|
64
|
+
initialData?: () => NoInfer<D>;
|
|
65
|
+
/** Whether the block is offered in the slash palette and inserter; defaults to true. */
|
|
66
|
+
inSlashPalette?: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Renders this block's editor permanently instead of a preview you click to edit.
|
|
69
|
+
* Also supply a `preview`: a read-only canvas draws the preview rather than the editor,
|
|
70
|
+
* so without one the block's content is invisible there.
|
|
71
|
+
*/
|
|
72
|
+
alwaysEditing?: boolean;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Describes one block type: how to label it, how to draw it at rest, how to edit it.
|
|
76
|
+
*
|
|
77
|
+
* Supply `editor`, `preview`, or both, and the canvas does the rest. A definition with no
|
|
78
|
+
* `preview` is edit-only: a read-only canvas has nothing to draw for it but its label.
|
|
79
|
+
* A definition with no `editor` can never be edited in the canvas, which is what a block
|
|
80
|
+
* whose content belongs to a server-side record wants; the card offers no edit affordance
|
|
81
|
+
* for it and a click goes through to whatever the preview itself renders.
|
|
82
|
+
*
|
|
83
|
+
* Omitting both is a type error, because such a block would only ever draw its own label.
|
|
84
|
+
*
|
|
85
|
+
* A definition of a type the canvas draws itself, other than Quoin's own, draws that type as a void block: `DIVIDER`
|
|
86
|
+
* everywhere, and `MARKDOWN`, `CALLOUT` and `TOGGLE` only on a read-only canvas, since an editable one types into them
|
|
87
|
+
* in place.
|
|
88
|
+
*/
|
|
89
|
+
type BlockDefinition<D extends object = Record<string, unknown>> = (BlockDefinitionCommon<D> & {
|
|
90
|
+
editor: ComponentType<BlockEditorProps<D>>;
|
|
91
|
+
/**
|
|
92
|
+
* What the block shows when it is not being edited. Optional so a host can register an
|
|
93
|
+
* edit-only block type, and overridable so a host can supply rich rendering (a full
|
|
94
|
+
* markdown pipeline, a chart) without Quoin depending on one.
|
|
95
|
+
*/
|
|
96
|
+
preview?: ComponentType<BlockPreviewProps<D>>;
|
|
97
|
+
}) | (BlockDefinitionCommon<D> & {
|
|
98
|
+
/** Omitted: this block is never editable in the canvas. */
|
|
99
|
+
editor?: undefined;
|
|
100
|
+
/** Required here, because it is the only thing that can draw the block. */
|
|
101
|
+
preview: ComponentType<BlockPreviewProps<D>>;
|
|
102
|
+
});
|
|
103
|
+
/** A definition with its data type erased, so definitions of different shapes compose in one array. */
|
|
104
|
+
type AnyBlockDefinition = BlockDefinition<Record<string, unknown>>;
|
|
105
|
+
/**
|
|
106
|
+
* Types `data` inside your editor component, then erases the generic on the way out.
|
|
107
|
+
* The erasure is deliberate: `D` appears in both covariant and contravariant positions
|
|
108
|
+
* on `editor`, so without it an array of differently-shaped definitions will not typecheck.
|
|
109
|
+
* `initialData` is checked against the editor's data type. That relies on `NoInfer`, so
|
|
110
|
+
* TypeScript 5.4 or later is required.
|
|
111
|
+
*
|
|
112
|
+
* `D` defaults to `Record<string, unknown>`, so a definition whose components take no
|
|
113
|
+
* annotation still gets a usable `data` rather than a bare `object`.
|
|
114
|
+
*/
|
|
115
|
+
declare function defineBlock<D extends object = Record<string, unknown>>(definition: BlockDefinition<D>): AnyBlockDefinition;
|
|
116
|
+
/** The definition for a type, or undefined; the last registration of a type wins, so a host can override a core block. */
|
|
117
|
+
declare function blockByType(definitions: readonly AnyBlockDefinition[], type: string): AnyBlockDefinition | undefined;
|
|
118
|
+
/** The definitions offered in the slash palette, in registration order, one per type, with the last registration of a type winning. */
|
|
119
|
+
declare function paletteBlocks(definitions: AnyBlockDefinition[]): AnyBlockDefinition[];
|
|
120
|
+
|
|
121
|
+
export { type AnyBlockDefinition as A, type BlockDefinition as B, type CodeHighlighter as C, type UploadFn as U, type UploadResult as a, type BlockEditorProps as b, type BlockPreviewProps as c, defineBlock as d, type CodeToken as e, blockByType as f, paletteBlocks as p };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { E as Extension } from './types-a1CRBlEh.js';
|
|
2
|
+
|
|
3
|
+
/** Every string the stats footer shows and the character limit speaks. */
|
|
4
|
+
type StatsLabels = {
|
|
5
|
+
/** How many characters, words and blocks the document holds. */
|
|
6
|
+
characters(count: number): string;
|
|
7
|
+
words(count: number): string;
|
|
8
|
+
blocks(count: number): string;
|
|
9
|
+
/** How many characters the document holds of the most it may hold. */
|
|
10
|
+
characterLimit(count: number, limit: number): string;
|
|
11
|
+
/** What is announced when an edit is refused because it would take the document past its limit. */
|
|
12
|
+
limitReached(limit: number): string;
|
|
13
|
+
};
|
|
14
|
+
declare const englishStatsLabels: StatsLabels;
|
|
15
|
+
|
|
16
|
+
type StatsOptions = {
|
|
17
|
+
/** Shows the counts under the document. On by default. */
|
|
18
|
+
footer?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* The most characters the document may hold, counted as the footer counts them: the cells of a table without the
|
|
21
|
+
* separators between them, and nothing for an image, a file, an embed or a bookmark, so attaching one never counts.
|
|
22
|
+
* Anything but a finite number of zero or more is no limit.
|
|
23
|
+
*/
|
|
24
|
+
limit?: number;
|
|
25
|
+
/** Dims every block but those the selection touches, while the canvas is editable and holds focus. */
|
|
26
|
+
focusMode?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Turns quotes, dashes, arrows and the like into their typographic forms as they are typed, outside a formula or a
|
|
29
|
+
* code span still being typed.
|
|
30
|
+
*/
|
|
31
|
+
typography?: boolean | {
|
|
32
|
+
dashes?: 'em' | 'en' | 'none';
|
|
33
|
+
};
|
|
34
|
+
/** Every string the feature shows or speaks, English by default. A key left out stays English. */
|
|
35
|
+
labels?: Partial<StatsLabels>;
|
|
36
|
+
};
|
|
37
|
+
/** Counts of the document under it, and optionally a character limit, focus mode and typographic input rules. */
|
|
38
|
+
declare function statsExtension(options?: StatsOptions): Extension;
|
|
39
|
+
|
|
40
|
+
export { type StatsLabels as S, type StatsOptions as a, englishStatsLabels as e, statsExtension as s };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { E as Extension } from './types-Cz7XJLaK.cjs';
|
|
2
|
+
|
|
3
|
+
/** Every string the stats footer shows and the character limit speaks. */
|
|
4
|
+
type StatsLabels = {
|
|
5
|
+
/** How many characters, words and blocks the document holds. */
|
|
6
|
+
characters(count: number): string;
|
|
7
|
+
words(count: number): string;
|
|
8
|
+
blocks(count: number): string;
|
|
9
|
+
/** How many characters the document holds of the most it may hold. */
|
|
10
|
+
characterLimit(count: number, limit: number): string;
|
|
11
|
+
/** What is announced when an edit is refused because it would take the document past its limit. */
|
|
12
|
+
limitReached(limit: number): string;
|
|
13
|
+
};
|
|
14
|
+
declare const englishStatsLabels: StatsLabels;
|
|
15
|
+
|
|
16
|
+
type StatsOptions = {
|
|
17
|
+
/** Shows the counts under the document. On by default. */
|
|
18
|
+
footer?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* The most characters the document may hold, counted as the footer counts them: the cells of a table without the
|
|
21
|
+
* separators between them, and nothing for an image, a file, an embed or a bookmark, so attaching one never counts.
|
|
22
|
+
* Anything but a finite number of zero or more is no limit.
|
|
23
|
+
*/
|
|
24
|
+
limit?: number;
|
|
25
|
+
/** Dims every block but those the selection touches, while the canvas is editable and holds focus. */
|
|
26
|
+
focusMode?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Turns quotes, dashes, arrows and the like into their typographic forms as they are typed, outside a formula or a
|
|
29
|
+
* code span still being typed.
|
|
30
|
+
*/
|
|
31
|
+
typography?: boolean | {
|
|
32
|
+
dashes?: 'em' | 'en' | 'none';
|
|
33
|
+
};
|
|
34
|
+
/** Every string the feature shows or speaks, English by default. A key left out stays English. */
|
|
35
|
+
labels?: Partial<StatsLabels>;
|
|
36
|
+
};
|
|
37
|
+
/** Counts of the document under it, and optionally a character limit, focus mode and typographic input rules. */
|
|
38
|
+
declare function statsExtension(options?: StatsOptions): Extension;
|
|
39
|
+
|
|
40
|
+
export { type StatsLabels as S, type StatsOptions as a, englishStatsLabels as e, statsExtension as s };
|
package/dist/stats.cjs
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use client';"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkZC24WB7Ycjs = require('./chunk-ZC24WB7Y.cjs');
|
|
7
|
+
require('./chunk-SLVDAHHK.cjs');
|
|
8
|
+
require('./chunk-2VDK27IF.cjs');
|
|
9
|
+
require('./chunk-GTTPVJSD.cjs');
|
|
10
|
+
require('./chunk-OMOBMXD5.cjs');
|
|
11
|
+
require('./chunk-PZ4GT5JO.cjs');
|
|
12
|
+
require('./chunk-2QCRZ7OL.cjs');
|
|
13
|
+
require('./chunk-ND5XJVK2.cjs');
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
exports.englishStatsLabels = _chunkZC24WB7Ycjs.englishStatsLabels; exports.statsExtension = _chunkZC24WB7Ycjs.statsExtension; exports.useEditorStats = _chunkZC24WB7Ycjs.useEditorStats;
|
|
19
|
+
//# sourceMappingURL=stats.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["stats.cjs"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACF,wLAAC","file":"/home/runner/work/quoin-editor/quoin-editor/dist/stats.cjs"}
|
package/dist/stats.d.cts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export { S as StatsLabels, a as StatsOptions, e as englishStatsLabels, s as statsExtension } from './stats-extension-CJPijvUb.cjs';
|
|
2
|
+
import { V as ViewController } from './view-controller-DSHw0ltQ.cjs';
|
|
3
|
+
import './types-Cz7XJLaK.cjs';
|
|
4
|
+
import './types-DULc8wwg.cjs';
|
|
5
|
+
|
|
6
|
+
type EditorStats = {
|
|
7
|
+
readonly characters: number;
|
|
8
|
+
readonly words: number;
|
|
9
|
+
readonly blocks: number;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* The characters, words and blocks of the document of `controller`, the one a canvas handle or `useViewController()`
|
|
13
|
+
* gives, counting what was written: the cells of a table without the separators between them, and nothing for an
|
|
14
|
+
* image, a file, an embed or a bookmark. Counted again at most once per animation frame however many edits it holds,
|
|
15
|
+
* and each block only when it changed.
|
|
16
|
+
*/
|
|
17
|
+
declare function useEditorStats(controller: ViewController): EditorStats;
|
|
18
|
+
|
|
19
|
+
export { type EditorStats, useEditorStats };
|
package/dist/stats.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export { S as StatsLabels, a as StatsOptions, e as englishStatsLabels, s as statsExtension } from './stats-extension-Bly88uio.js';
|
|
2
|
+
import { V as ViewController } from './view-controller-UbpzblGl.js';
|
|
3
|
+
import './types-a1CRBlEh.js';
|
|
4
|
+
import './types-DULc8wwg.js';
|
|
5
|
+
|
|
6
|
+
type EditorStats = {
|
|
7
|
+
readonly characters: number;
|
|
8
|
+
readonly words: number;
|
|
9
|
+
readonly blocks: number;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* The characters, words and blocks of the document of `controller`, the one a canvas handle or `useViewController()`
|
|
13
|
+
* gives, counting what was written: the cells of a table without the separators between them, and nothing for an
|
|
14
|
+
* image, a file, an embed or a bookmark. Counted again at most once per animation frame however many edits it holds,
|
|
15
|
+
* and each block only when it changed.
|
|
16
|
+
*/
|
|
17
|
+
declare function useEditorStats(controller: ViewController): EditorStats;
|
|
18
|
+
|
|
19
|
+
export { type EditorStats, useEditorStats };
|
package/dist/stats.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
englishStatsLabels,
|
|
4
|
+
statsExtension,
|
|
5
|
+
useEditorStats
|
|
6
|
+
} from "./chunk-KAVU6T6J.js";
|
|
7
|
+
import "./chunk-POBM7MGR.js";
|
|
8
|
+
import "./chunk-ZGZEJCRV.js";
|
|
9
|
+
import "./chunk-ZS2WA357.js";
|
|
10
|
+
import "./chunk-XEBWC7ZL.js";
|
|
11
|
+
import "./chunk-HJIQT3S5.js";
|
|
12
|
+
import "./chunk-NOKWNK2O.js";
|
|
13
|
+
import "./chunk-LCQSG4M6.js";
|
|
14
|
+
export {
|
|
15
|
+
englishStatsLabels,
|
|
16
|
+
statsExtension,
|
|
17
|
+
useEditorStats
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"mappings":"","names":[]}
|
package/dist/styles.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-duration:initial;--tw-content:"";--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer quoin.theme;@layer quoin.base{.quoin,.quoin *,.quoin:before,.quoin:after,.quoin::backdrop,.quoin :before,.quoin :after,.quoin ::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}.quoin{tab-size:4;-webkit-tap-highlight-color:transparent;line-height:1.5}.quoin ul,.quoin ol{list-style:none}.quoin button,.quoin input,.quoin select,.quoin textarea{font:inherit;color:inherit;background:0 0;border-radius:0}.quoin img,.quoin svg{vertical-align:middle;display:block}.quoin img{max-width:100%;height:auto}.quoin textarea{resize:vertical}.quoin code,.quoin pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}.quoin ::placeholder{opacity:1}:root{--quoin-background:oklch(100% 0 0);--quoin-foreground:oklch(14.5% 0 0);--quoin-muted:oklch(97% 0 0);--quoin-muted-foreground:oklch(54% 0 0);--quoin-popover:oklch(100% 0 0);--quoin-popover-foreground:oklch(14.5% 0 0);--quoin-border:oklch(92.2% 0 0);--quoin-input:oklch(92.2% 0 0);--quoin-ring:oklch(45% 0 0);--quoin-primary:oklch(20.5% 0 0);--quoin-primary-foreground:oklch(98.5% 0 0);--quoin-accent:oklch(97% 0 0);--quoin-accent-foreground:oklch(20.5% 0 0);--quoin-destructive:oklch(55% .245 27.325);--quoin-secondary:oklch(97% 0 0);--quoin-secondary-foreground:oklch(20.5% 0 0);--quoin-info:oklch(55% .17 250);--quoin-success:oklch(55% .14 155);--quoin-warning:oklch(65% .16 65);--quoin-radius:.625rem}.dark{--quoin-background:oklch(14.5% 0 0);--quoin-foreground:oklch(98.5% 0 0);--quoin-muted:oklch(26.9% 0 0);--quoin-muted-foreground:oklch(70.8% 0 0);--quoin-popover:oklch(20.5% 0 0);--quoin-popover-foreground:oklch(98.5% 0 0);--quoin-border:oklch(100% 0 0/.1);--quoin-input:oklch(100% 0 0/.15);--quoin-ring:oklch(70.8% 0 0);--quoin-primary:oklch(92.2% 0 0);--quoin-primary-foreground:oklch(20.5% 0 0);--quoin-accent:oklch(26.9% 0 0);--quoin-accent-foreground:oklch(98.5% 0 0);--quoin-secondary:oklch(26.9% 0 0);--quoin-secondary-foreground:oklch(98.5% 0 0);--quoin-destructive:oklch(70.4% .191 22.216);--quoin-info:oklch(72% .14 250);--quoin-success:oklch(74% .15 155);--quoin-warning:oklch(79% .15 65);--quoin-radius:.625rem}}@layer quoin.components;@layer quoin.utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:0}.inset-x-0{inset-inline:0}.top-0{top:0}.top-1\/2{top:50%}.top-4{top:1rem}.top-\[50\%\]{top:50%}.right-0{right:0}.right-2{right:.5rem}.right-4{right:1rem}.left-2{left:.5rem}.left-\[50\%\]{left:50%}.z-10{z-index:10}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-1{margin-inline:-.25rem}.-mx-2{margin-inline:-.5rem}.my-1{margin-block:.25rem}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.field-sizing-content{field-sizing:content}.size-2{width:.5rem;height:.5rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-6{width:1.5rem;height:1.5rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-10{width:2.5rem;height:2.5rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-10{height:2.5rem}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.max-h-\[300px\]{max-height:300px}.min-h-7{min-height:1.75rem}.min-h-16{min-height:4rem}.min-h-32{min-height:8rem}.w-40{width:10rem}.w-48{width:12rem}.w-56{width:14rem}.w-72{width:18rem}.w-\[calc\(100\%\+1rem\)\]{width:calc(100% + 1rem)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.min-w-0{min-width:0}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.scroll-py-1{scroll-padding-block:.25rem}.grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.grid-cols-subgrid{grid-template-columns:subgrid}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-x-4{column-gap:1rem}.gap-y-2{row-gap:.5rem}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--quoin-radius)}.rounded-md{border-radius:calc(var(--quoin-radius) - 2px)}.rounded-sm{border-radius:calc(var(--quoin-radius) - 4px)}.rounded-xs{border-radius:.125rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-border{border-color:var(--quoin-border)}.border-destructive{border-color:var(--quoin-destructive)}.border-info{border-color:var(--quoin-info)}.border-input{border-color:var(--quoin-input)}.border-primary{border-color:var(--quoin-primary)}.border-success{border-color:var(--quoin-success)}.border-transparent{border-color:#0000}.border-warning{border-color:var(--quoin-warning)}.bg-background,.bg-background\/90{background-color:var(--quoin-background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/90{background-color:color-mix(in oklab, var(--quoin-background) 90%, transparent)}}.bg-black\/50{background-color:oklab(0% none none/.5)}.bg-border{background-color:var(--quoin-border)}.bg-destructive,.bg-destructive\/15{background-color:var(--quoin-destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\/15{background-color:color-mix(in oklab, var(--quoin-destructive) 15%, transparent)}}.bg-info\/15{background-color:var(--quoin-info)}@supports (color:color-mix(in lab, red, red)){.bg-info\/15{background-color:color-mix(in oklab, var(--quoin-info) 15%, transparent)}}.bg-muted,.bg-muted\/50{background-color:var(--quoin-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab, var(--quoin-muted) 50%, transparent)}}.bg-popover{background-color:var(--quoin-popover)}.bg-primary,.bg-primary\/15{background-color:var(--quoin-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/15{background-color:color-mix(in oklab, var(--quoin-primary) 15%, transparent)}}.bg-secondary{background-color:var(--quoin-secondary)}.bg-success\/15{background-color:var(--quoin-success)}@supports (color:color-mix(in lab, red, red)){.bg-success\/15{background-color:color-mix(in oklab, var(--quoin-success) 15%, transparent)}}.bg-transparent{background-color:#0000}.bg-warning\/15{background-color:var(--quoin-warning)}@supports (color:color-mix(in lab, red, red)){.bg-warning\/15{background-color:color-mix(in oklab, var(--quoin-warning) 15%, transparent)}}.fill-current{fill:currentColor}.p-0{padding:0}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1\.5{padding-inline:.375rem}.px-2{padding-inline:.5rem}.px-3{padding-inline:.75rem}.px-4{padding-inline:1rem}.px-6{padding-inline:1.5rem}.py-0{padding-block:0}.py-0\.5{padding-block:.125rem}.py-1{padding-block:.25rem}.py-1\.5{padding-block:.375rem}.py-2{padding-block:.5rem}.py-3{padding-block:.75rem}.py-6{padding-block:1.5rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pb-1{padding-bottom:.25rem}.pl-2{padding-left:.5rem}.pl-8{padding-left:2rem}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-base{font-size:1rem;line-height:var(--tw-leading,calc(1.5 / 1))}.text-lg{font-size:1.125rem;line-height:var(--tw-leading,calc(1.75 / 1.125))}.text-sm{font-size:.875rem;line-height:var(--tw-leading,calc(1.25 / .875))}.text-xs{font-size:.75rem;line-height:var(--tw-leading,calc(1 / .75))}.leading-7{--tw-leading:calc(.25rem * 7);line-height:1.75rem}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:500;font-weight:500}.font-semibold{--tw-font-weight:600;font-weight:600}.tracking-widest{--tw-tracking:.1em;letter-spacing:.1em}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-destructive{color:var(--quoin-destructive)}.text-foreground{color:var(--quoin-foreground)}.text-muted-foreground{color:var(--quoin-muted-foreground)}.text-popover-foreground{color:var(--quoin-popover-foreground)}.text-primary{color:var(--quoin-primary)}.text-primary-foreground{color:var(--quoin-primary-foreground)}.text-secondary-foreground{color:var(--quoin-secondary-foreground)}.text-white{color:#fff}.capitalize{text-transform:capitalize}.italic{font-style:italic}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.transition-\[color\,background-color\,border-color\,box-shadow\,opacity\]{transition-property:color,background-color,border-color,box-shadow,opacity;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.duration-200{--tw-duration:.2s;transition-duration:.2s}.select-none{-webkit-user-select:none;user-select:none}.group-focus-within\/card\:opacity-100:is(:where(.group\/card):focus-within *),.group-focus-within\/inserter\:opacity-100:is(:where(.group\/inserter):focus-within *){opacity:1}@media (hover:hover){.group-hover\/block\:bg-muted\/40:is(:where(.group\/block):hover *){background-color:var(--quoin-muted)}@supports (color:color-mix(in lab, red, red)){.group-hover\/block\:bg-muted\/40:is(:where(.group\/block):hover *){background-color:color-mix(in oklab, var(--quoin-muted) 40%, transparent)}}.group-hover\/card\:opacity-100:is(:where(.group\/card):hover *),.group-hover\/inserter\:opacity-100:is(:where(.group\/inserter):hover *){opacity:1}}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:1.75rem}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:var(--tw-leading,calc(1.25 / .875))}.file\:font-medium::file-selector-button{--tw-font-weight:500;font-weight:500}.placeholder\:text-muted-foreground::placeholder{color:var(--quoin-muted-foreground)}@media (hover:hover){.hover\:bg-accent:hover{background-color:var(--quoin-accent)}.hover\:bg-destructive\/90:hover{background-color:var(--quoin-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, var(--quoin-destructive) 90%, transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--quoin-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--quoin-primary) 90%, transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--quoin-secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--quoin-secondary) 80%, transparent)}}.hover\:text-accent-foreground:hover{color:var(--quoin-accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:bg-accent:focus{background-color:var(--quoin-accent)}.focus\:text-accent-foreground:focus{color:var(--quoin-accent-foreground)}.focus\:text-destructive:focus{color:var(--quoin-destructive)}.focus-visible\:border-ring:focus-visible{border-color:var(--quoin-ring)}.focus-visible\:opacity-100:focus-visible{opacity:1}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-\[var\(--quoin-ring\)\]:focus-visible{outline-color:var(--quoin-ring)}.focus-visible\:outline-solid:focus-visible{--tw-outline-style:solid;outline-style:solid}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\:focus-visible\]\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:focus-visible\]\:outline-offset-2:has(:focus-visible){outline-offset:2px}.has-\[\:focus-visible\]\:outline-\[var\(--quoin-ring\)\]:has(:focus-visible){outline-color:var(--quoin-ring)}.has-\[\>svg\]\:px-1\.5:has(>svg){padding-inline:.375rem}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:.625rem}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:.75rem}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:1rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--quoin-destructive)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[highlighted\]\:shadow-\[inset_2px_0_0_var\(--quoin-foreground\)\][data-highlighted]{--tw-shadow:inset 2px 0 0 var(--tw-shadow-color,var(--quoin-foreground));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-\[inset\]\:pl-8[data-inset]{padding-left:2rem}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--quoin-muted-foreground)}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:var(--quoin-accent)}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--quoin-accent-foreground)}.data-\[selected\=true\]\:shadow-\[inset_2px_0_0_var\(--quoin-foreground\)\][data-selected=true]{--tw-shadow:inset 2px 0 0 var(--tw-shadow-color,var(--quoin-foreground));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:.25rem;translate:var(--tw-translate-x) var(--tw-translate-y)}:is(.\*\*\:data-\[slot\=command-input-wrapper\]\:h-12 *)[data-slot=command-input-wrapper]{height:3rem}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--quoin-accent)}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}@media (min-width:40rem){.sm\:max-w-md{max-width:28rem}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:text-left{text-align:left}}@media (min-width:48rem){.md\:text-sm{font-size:.875rem;line-height:var(--tw-leading,calc(1.25 / .875))}}@media (min-width:64rem){.lg\:absolute{position:absolute}.lg\:top-1{top:.25rem}.lg\:right-full{right:100%}.lg\:justify-start{justify-content:flex-start}.lg\:pr-1{padding-right:.25rem}.lg\:pb-0{padding-bottom:0}.lg\:opacity-0{opacity:0}.lg\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.lg\:group-focus-within\/block\:opacity-100:is(:where(.group\/block):focus-within *){opacity:1}@media (hover:hover){.lg\:group-hover\/block\:opacity-100:is(:where(.group\/block):hover *){opacity:1}}}.dark\:bg-destructive\/60:is(.dark *){background-color:var(--quoin-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-destructive\/60:is(.dark *){background-color:color-mix(in oklab, var(--quoin-destructive) 60%, transparent)}}@media (hover:hover){.dark\:hover\:bg-destructive\/75:is(.dark *):hover{background-color:var(--quoin-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-destructive\/75:is(.dark *):hover{background-color:color-mix(in oklab, var(--quoin-destructive) 75%, transparent)}}}@media (pointer:coarse){.pointer-coarse\:h-11{height:2.75rem}.pointer-coarse\:min-h-11{min-height:2.75rem}.pointer-coarse\:min-w-11{min-width:2.75rem}.pointer-coarse\:opacity-100{opacity:1}.pointer-coarse\:before\:absolute:before{content:var(--tw-content);position:absolute}.pointer-coarse\:before\:top-1\/2:before{content:var(--tw-content);top:50%}.pointer-coarse\:before\:left-1\/2:before{content:var(--tw-content);left:50%}.pointer-coarse\:before\:size-11:before{content:var(--tw-content);width:2.75rem;height:2.75rem}.pointer-coarse\:before\:-translate-x-1\/2:before{content:var(--tw-content);--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.pointer-coarse\:before\:-translate-y-1\/2:before{content:var(--tw-content);--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.pointer-coarse\:before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:var(--tw-leading,calc(1 / .75))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:500;font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--quoin-muted-foreground)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:.5rem}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:.75rem;height:.75rem}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:1rem;height:1rem}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--quoin-muted-foreground)}.\[\&\>svg\]\:size-3>svg{width:.75rem;height:.75rem}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-content:"";--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer quoin.theme;@layer quoin.base{:root{--quoin-background:oklch(100% 0 0);--quoin-foreground:oklch(14.5% 0 0);--quoin-muted:oklch(97% 0 0);--quoin-muted-foreground:oklch(49% 0 0);--quoin-popover:oklch(100% 0 0);--quoin-popover-foreground:oklch(14.5% 0 0);--quoin-border:oklch(92.2% 0 0);--quoin-input:oklch(92.2% 0 0);--quoin-ring:oklch(45% 0 0);--quoin-primary:oklch(20.5% 0 0);--quoin-primary-foreground:oklch(98.5% 0 0);--quoin-accent:oklch(97% 0 0);--quoin-accent-foreground:oklch(20.5% 0 0);--quoin-destructive:oklch(55% .245 27.325);--quoin-secondary:oklch(97% 0 0);--quoin-secondary-foreground:oklch(20.5% 0 0);--quoin-info:oklch(55% .17 250);--quoin-success:oklch(55% .14 155);--quoin-warning:oklch(65% .16 65);--quoin-selection:oklch(62% .17 250/.28);--quoin-comment:oklch(97.5% .06 90);--quoin-comment-active:oklch(98% .06 85);--quoin-comment-edge:oklch(62% .14 70);--quoin-radius:.625rem;--quoin-color-default:oklch(14.5% 0 0);--quoin-color-gray:oklch(53% 0 0);--quoin-color-brown:oklch(52% .06 50);--quoin-color-orange:oklch(56% .14 52);--quoin-color-yellow:oklch(55% .11 80);--quoin-color-green:oklch(53% .11 155);--quoin-color-blue:oklch(53% .13 245);--quoin-color-purple:oklch(53% .15 305);--quoin-color-pink:oklch(54% .17 355);--quoin-color-red:oklch(55% .19 27);--quoin-bg-default:oklch(100% 0 0);--quoin-bg-gray:oklch(95.5% 0 0);--quoin-bg-brown:oklch(95% .012 50);--quoin-bg-orange:oklch(95.5% .03 65);--quoin-bg-yellow:oklch(96.5% .045 95);--quoin-bg-green:oklch(95.5% .03 155);--quoin-bg-blue:oklch(95.5% .025 235);--quoin-bg-purple:oklch(95.5% .025 305);--quoin-bg-pink:oklch(95.5% .025 350);--quoin-bg-red:oklch(95% .022 20);--quoin-diff-inserted:oklch(48% .11 155);--quoin-diff-deleted:oklch(50% .19 27);--quoin-link:oklch(50% .16 255)}.dark{--quoin-background:oklch(14.5% 0 0);--quoin-foreground:oklch(98.5% 0 0);--quoin-muted:oklch(26.9% 0 0);--quoin-muted-foreground:oklch(70.8% 0 0);--quoin-popover:oklch(20.5% 0 0);--quoin-popover-foreground:oklch(98.5% 0 0);--quoin-border:oklch(100% 0 0/.1);--quoin-input:oklch(100% 0 0/.15);--quoin-ring:oklch(70.8% 0 0);--quoin-primary:oklch(92.2% 0 0);--quoin-primary-foreground:oklch(20.5% 0 0);--quoin-accent:oklch(26.9% 0 0);--quoin-accent-foreground:oklch(98.5% 0 0);--quoin-secondary:oklch(26.9% 0 0);--quoin-secondary-foreground:oklch(98.5% 0 0);--quoin-destructive:oklch(70.4% .191 22.216);--quoin-info:oklch(72% .14 250);--quoin-success:oklch(74% .15 155);--quoin-warning:oklch(79% .15 65);--quoin-selection:oklch(72% .14 250/.35);--quoin-comment:oklch(35% .08 90);--quoin-comment-active:oklch(30% .08 85);--quoin-comment-edge:oklch(72% .14 75);--quoin-radius:.625rem;--quoin-color-default:oklch(98.5% 0 0);--quoin-color-gray:oklch(72% 0 0);--quoin-color-brown:oklch(72% .06 55);--quoin-color-orange:oklch(76% .13 60);--quoin-color-yellow:oklch(83% .13 90);--quoin-color-green:oklch(76% .13 155);--quoin-color-blue:oklch(74% .12 245);--quoin-color-purple:oklch(74% .13 305);--quoin-color-pink:oklch(74% .14 355);--quoin-color-red:oklch(72% .16 25);--quoin-bg-default:oklch(14.5% 0 0);--quoin-bg-gray:oklch(29% 0 0);--quoin-bg-brown:oklch(29% .025 50);--quoin-bg-orange:oklch(30% .05 55);--quoin-bg-yellow:oklch(31% .05 90);--quoin-bg-green:oklch(29% .045 155);--quoin-bg-blue:oklch(29% .05 245);--quoin-bg-purple:oklch(29% .055 305);--quoin-bg-pink:oklch(29% .055 355);--quoin-bg-red:oklch(29% .06 25);--quoin-diff-inserted:oklch(76% .13 155);--quoin-diff-deleted:oklch(74% .15 25);--quoin-link:oklch(76% .12 250)}.quoin,.quoin *,.quoin:before,.quoin:after,.quoin::backdrop,.quoin :before,.quoin :after,.quoin ::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}.quoin{tab-size:4;-webkit-tap-highlight-color:transparent;color-scheme:light;line-height:1.5}.dark .quoin,.quoin.dark{color-scheme:dark}.quoin ul,.quoin ol{list-style:none}.quoin button,.quoin input,.quoin select,.quoin textarea{font:inherit;color:inherit;background:0 0;border-radius:0}.quoin img,.quoin svg{vertical-align:middle;display:block}.quoin img{max-width:100%;height:auto}.quoin textarea{resize:vertical}.quoin code,.quoin pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}.quoin ::placeholder{opacity:1}@media (forced-colors:active){.quoin:focus-visible,.quoin :focus-visible{outline-offset:2px!important;outline:2px solid canvastext!important}.quoin [data-highlighted]{outline-offset:-2px!important;outline:2px solid canvastext!important}}@media (prefers-reduced-motion:reduce){.quoin,.quoin *,.quoin :before,.quoin :after{scroll-behavior:auto!important;transition:none!important}}}@layer quoin.components{.quoin.quoin-editor{position:relative}.quoin [data-quoin-host]{white-space:pre-wrap;overflow-wrap:anywhere;outline:none;min-height:1lh;position:relative}.quoin [data-placeholder]:has(>br[data-quoin-filler]:only-child):before{content:attr(data-placeholder);color:var(--quoin-muted-foreground);pointer-events:none;position:absolute}.quoin [data-quoin-block]{border-radius:var(--quoin-radius);outline:none;margin-inline-start:calc(var(--quoin-indent,0) * 1.5rem)}.quoin [data-quoin-block][data-align=left]{text-align:left}.quoin [data-quoin-block][data-align=center]{text-align:center}.quoin [data-quoin-block][data-align=right]{text-align:right}.quoin [data-quoin-block][data-align=justify]{text-align:justify}.quoin [data-quoin-block][data-selected=true]{background:var(--quoin-accent);box-shadow:0 0 0 2px var(--quoin-ring);outline:2px solid #0000}.quoin[data-quoin-cross] [data-quoin-host]::selection{background:0 0}.quoin[data-quoin-cross] [data-quoin-host] ::selection{background:0 0}.quoin .quoin-selected{background:var(--quoin-selection)}.quoin ::highlight(quoin-selection){background:var(--quoin-selection)}.quoin[data-quoin-dragging] [data-quoin-host]{-webkit-user-select:none;user-select:none}.quoin [data-quoin-sink]{clip-path:inset(50%);white-space:pre;outline:none;width:1px;height:1px;position:fixed;top:0;left:0;overflow:hidden}.quoin .quoin-heading{font-weight:600;line-height:1.25}.quoin .quoin-heading[aria-level="1"]{font-size:1.875em}.quoin .quoin-heading[aria-level="2"]{font-size:1.5em}.quoin .quoin-heading[aria-level="3"]{font-size:1.25em}.quoin .quoin-list-item,.quoin .quoin-task,.quoin .quoin-toggle{align-items:baseline;gap:.5rem;display:flex}.quoin .quoin-list-item>[data-quoin-host],.quoin .quoin-task>[data-quoin-host],.quoin .quoin-toggle>[data-quoin-host]{flex:1;min-width:0}.quoin .quoin-marker{text-align:end;-webkit-user-select:none;user-select:none;min-width:1.25rem}.quoin .quoin-task-box{border:1px solid var(--quoin-muted-foreground);cursor:pointer;border-radius:.25rem;flex:none;align-self:center;width:1rem;height:1rem}.quoin .quoin-task-box[aria-checked=true]{background:var(--quoin-primary);color:var(--quoin-primary-foreground)}.quoin .quoin-task[data-checked=true]>[data-quoin-host]{color:var(--quoin-muted-foreground);text-decoration:line-through}.quoin .quoin-quote{border-inline-start:3px solid var(--quoin-border);padding-inline-start:.75rem}.quoin .quoin-callout{border-inline-start:4px solid var(--quoin-info);border-radius:var(--quoin-radius);background:var(--quoin-muted);padding:.75rem 1rem}.quoin .quoin-callout[data-tone=tip]{border-color:var(--quoin-primary)}.quoin .quoin-callout[data-tone=warning]{border-color:var(--quoin-warning)}.quoin .quoin-callout[data-tone=success]{border-color:var(--quoin-success)}.quoin .quoin-callout[data-tone=danger]{border-color:var(--quoin-destructive)}.quoin .quoin-toggle-button{cursor:pointer;flex:none;align-self:center;width:1.25rem;height:1.25rem}.quoin .quoin-toggle-button svg{width:100%;height:100%;transition:transform .12s}.quoin .quoin-toggle-button[aria-expanded=true] svg{transform:rotate(90deg)}@media (prefers-reduced-motion:reduce){.quoin .quoin-toggle-button svg{transition:none}}.quoin .quoin-void{color:var(--quoin-muted-foreground);padding-block:.5rem}.quoin .quoin-void[role=separator]:before{content:"";border-block-start:1px solid var(--quoin-border);display:block}.quoin .quoin-visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.quoin .quoin-code{border-radius:var(--quoin-radius);background:var(--quoin-muted)}.quoin .quoin-code-header{justify-content:space-between;align-items:center;gap:.5rem;height:2rem;padding-inline:.5rem;display:flex}.quoin .quoin-code-scroll{overflow-x:auto}.quoin .quoin-code-lines{width:max-content;min-width:100%;position:relative}.quoin .quoin-code-caret{pointer-events:none;width:2px;height:1.5rem;position:absolute;top:0;left:0}.quoin .quoin-code-text{white-space:pre;tab-size:2;letter-spacing:normal;word-spacing:normal;font-variant-ligatures:none;font-feature-settings:normal;text-transform:none;text-indent:0;text-align:left;margin:0;padding:0 .75rem .75rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.875rem;line-height:1.5rem}.quoin .quoin-code-input{resize:none;color:#0000;width:100%;height:100%;caret-color:var(--quoin-foreground);background:0 0;outline:none;position:absolute;inset:0;overflow:hidden}.quoin .quoin-code-input::selection{background:var(--quoin-selection);color:#0000}.quoin .quoin-code-language{border-radius:calc(var(--quoin-radius) - 4px);width:8rem;height:1.5rem;color:var(--quoin-muted-foreground);padding-inline:.375rem;font-size:.75rem}.quoin .quoin-code-language::placeholder{color:var(--quoin-muted-foreground)}.quoin .quoin-code-language:focus{background:var(--quoin-background);color:var(--quoin-foreground)}.quoin .quoin-code-control{opacity:0}.quoin .quoin-code:hover .quoin-code-control,.quoin .quoin-code:focus-within .quoin-code-control,.quoin [data-selected=true] .quoin-code-control{opacity:1}@media (pointer:coarse){.quoin .quoin-code-control{opacity:1}}.quoin .quoin-upload{border:1px dashed var(--quoin-muted-foreground);border-radius:var(--quoin-radius);text-align:start;flex-direction:column;align-items:flex-start;gap:.5rem;padding:1rem;display:flex}.quoin .quoin-upload-actions{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.quoin .quoin-block-message{color:var(--quoin-muted-foreground);font-size:.75rem}.quoin .quoin-block-message:empty{display:none}.quoin .quoin-image{padding-block:.25rem}.quoin .quoin-image-frame{vertical-align:top;-webkit-user-select:none;user-select:none;max-width:100%;display:inline-block;position:relative}.quoin .quoin-image-frame>img,.quoin .quoin-image-missing{border-radius:var(--quoin-radius);max-width:100%;height:auto;display:block}.quoin .quoin-image-frame[style]>img,.quoin .quoin-image-frame[style]>.quoin-image-missing{width:100%}.quoin .quoin-image-missing{background:var(--quoin-muted);align-items:center;gap:.5rem;min-height:6rem;padding:1rem;font-size:.875rem;display:flex}.quoin .quoin-image-handle{border:1px solid var(--quoin-background);background:var(--quoin-foreground);opacity:0;cursor:ew-resize;touch-action:none;border-radius:9999px;width:.5rem;height:min(3rem,50%);position:absolute;top:50%;translate:0 -50%}.quoin .quoin-image-handle[data-side="-1"]{left:.5rem}.quoin .quoin-image-handle[data-side="1"]{right:.5rem}.quoin .quoin-image:hover .quoin-image-handle,.quoin [data-selected=true] .quoin-image-handle,.quoin .quoin-image-handle:focus-visible,.quoin .quoin-image-handle:active{opacity:1}.quoin .quoin-image-handle:focus-visible{outline:2px solid var(--quoin-ring);outline-offset:2px}.quoin .quoin-image-caption{color:var(--quoin-muted-foreground);margin-top:.25rem;font-size:.875rem}.quoin [data-quoin-block]:not(:hover,[data-selected=true]) .quoin-image-caption:not(:focus):before{content:none}.quoin .quoin-image-link{flex-wrap:wrap;align-items:center;gap:.5rem;width:min(100%,24rem);display:flex}.quoin .quoin-image-link>input{flex:1;width:auto}.quoin .quoin-image-alt{flex-direction:column;align-items:flex-start;gap:.5rem;display:flex}.quoin .quoin-file{padding-block:.25rem}.quoin .quoin-file-card{border:1px solid var(--quoin-border);border-radius:var(--quoin-radius);-webkit-user-select:none;user-select:none;flex-wrap:wrap;align-items:center;gap:.25rem .75rem;padding:.75rem 1rem;display:flex}.quoin .quoin-file-icon{width:1.5rem;height:1.5rem;color:var(--quoin-muted-foreground);flex:none}.quoin .quoin-file-name{overflow-wrap:anywhere;flex:8rem;min-width:0;font-weight:500}.quoin .quoin-file-size{color:var(--quoin-muted-foreground);font-variant-numeric:tabular-nums;font-size:.875rem}.quoin .quoin-file-download{border-radius:calc(var(--quoin-radius) - 2px);color:inherit;align-items:center;gap:.375rem;padding:.25rem .5rem;font-size:.875rem;font-weight:500;text-decoration:none;display:inline-flex}.quoin .quoin-file-download:hover{background:var(--quoin-accent);color:var(--quoin-accent-foreground)}.quoin .quoin-file-download:focus-visible{outline:2px solid var(--quoin-ring);outline-offset:2px}.quoin .quoin-file-download>svg{width:1rem;height:1rem}.quoin .quoin-table{padding-block:.25rem}.quoin .quoin-table-scroll{padding:.75rem .25rem .25rem 1rem;position:relative;overflow-x:auto}.quoin .quoin-table[data-readonly] .quoin-table-scroll{padding:0}.quoin .quoin-table table{border-collapse:collapse}.quoin .quoin-table :is(th,td){border:1px solid var(--quoin-border);text-align:start;vertical-align:top;padding:0}.quoin .quoin-table th{background:var(--quoin-muted);font-weight:600}.quoin .quoin-table :is(th,td)[data-in-range]{background:var(--quoin-selection)}.quoin .quoin-table-text{min-width:6rem;padding:.375rem .5rem}.quoin .quoin-table-controls{pointer-events:none;position:absolute;inset:0}.quoin .quoin-table-controls :is(button,[role=separator]){pointer-events:auto;position:absolute;translate:-50% -50%}.quoin .quoin-table-handle,.quoin .quoin-table-insert{border:1px solid var(--quoin-border);background:var(--quoin-background);color:var(--quoin-muted-foreground);cursor:pointer;border-radius:.25rem;justify-content:center;align-items:center;display:flex}.quoin .quoin-table-handle[data-axis=row]{width:1rem;height:1.5rem}.quoin .quoin-table-handle[data-axis=column]{width:1.5rem;height:1rem}.quoin .quoin-table-insert{border-radius:9999px;width:1.25rem;height:1.25rem}.quoin .quoin-table-controls svg{width:.875rem;height:.875rem}.quoin .quoin-table-handle:hover,.quoin .quoin-table-insert:hover,.quoin .quoin-table-handle[data-state=open]{background:var(--quoin-accent);color:var(--quoin-accent-foreground)}.quoin .quoin-table-controls .quoin-table-resizer{cursor:col-resize;touch-action:none;-webkit-user-select:none;user-select:none;width:.5625rem;translate:-50%}.quoin .quoin-table-resizer:after{content:"";background:var(--quoin-ring);opacity:0;inset-block:0;width:2px;position:absolute;left:calc(50% - 1px)}.quoin .quoin-table-resizer:is(:hover,:focus-visible,:active):after{opacity:1}.quoin .quoin-table-controls :is(button,[role=separator]):focus-visible{outline:2px solid var(--quoin-ring);outline-offset:2px}.quoin .quoin-embed,.quoin .quoin-bookmark{padding-block:.25rem}.quoin .quoin-embed-frame{aspect-ratio:16/9;border-radius:var(--quoin-radius);background:var(--quoin-muted);position:relative;overflow:hidden}.quoin .quoin-embed-frame[data-player]{aspect-ratio:auto}.quoin .quoin-embed-frame>iframe{border:0;width:100%;height:100%;position:absolute;inset:0}.quoin .quoin-embed-cover{position:absolute;inset:0}.quoin .quoin-link-card{border:1px solid var(--quoin-border);border-radius:var(--quoin-radius);-webkit-user-select:none;user-select:none;align-items:stretch;gap:.75rem;display:flex;overflow:hidden}.quoin .quoin-link-card-text{flex-direction:column;flex:auto;gap:.25rem;min-width:0;padding:.75rem 1rem;display:flex}.quoin .quoin-link-card-title{overflow-wrap:anywhere;color:inherit;font-weight:500;text-decoration:none}.quoin a.quoin-link-card-title:hover{text-decoration:underline}.quoin a.quoin-link-card-title:focus-visible{outline:2px solid var(--quoin-ring);outline-offset:2px}.quoin .quoin-link-card-description{-webkit-line-clamp:2;color:var(--quoin-muted-foreground);-webkit-box-orient:vertical;font-size:.875rem;display:-webkit-box;overflow:hidden}.quoin .quoin-link-card-domain{color:var(--quoin-muted-foreground);font-size:.75rem}.quoin .quoin-link-card-image{object-fit:cover;flex:none;width:8rem;max-height:7rem}.quoin .quoin-embed-ask{flex-wrap:wrap;align-items:center;gap:.25rem;display:flex}.quoin .quoin-embed-ask>input{flex:10rem}.quoin .quoin-embed-ask-message{color:var(--quoin-destructive);flex-basis:100%;padding-inline:.25rem;font-size:.875rem}.quoin [data-quoin-selected-atom]>[data-quoin-atom]{background:var(--quoin-accent);outline:2px solid var(--quoin-ring);outline-offset:1px;border-radius:2px}.quoin .quoin-math{padding-block:.25rem}.quoin .quoin-math[data-editable]{cursor:pointer}.quoin .quoin-math-rendered{text-align:center;padding:.5rem;overflow-x:auto}.quoin .quoin-math .quoin-math-source,.quoin .quoin-math-preview .quoin-math-source{border-radius:var(--quoin-radius);background:var(--quoin-muted);white-space:pre-wrap;margin:0;padding:.5rem .75rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.875rem;overflow-x:auto}.quoin .quoin-math-empty{color:var(--quoin-muted-foreground);text-align:center;padding:.5rem}.quoin .quoin-math-inline{border-radius:2px}.quoin .quoin-math-inline[data-quoin-atom]{cursor:pointer}.quoin .quoin-math-inline.quoin-math-source{background:var(--quoin-muted);padding-inline:.125rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.875em}.quoin .quoin-math-inline.quoin-math-empty{padding:0;font-style:italic}.quoin .quoin-math-editor{flex-direction:column;align-items:flex-start;gap:.5rem;display:flex}.quoin .quoin-math-field{resize:vertical;border:1px solid var(--quoin-muted-foreground);border-radius:calc(var(--quoin-radius) - 2px);background:0 0;width:100%;padding:.375rem .75rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.875rem}.quoin .quoin-math-field:focus-visible{border-color:var(--quoin-ring);outline:2px solid var(--quoin-ring);outline-offset:1px}.quoin .quoin-math-preview{border:1px dashed var(--quoin-border);border-radius:calc(var(--quoin-radius) - 2px);width:100%;max-height:12rem;overflow:auto}.quoin .quoin-toc{padding-block:.25rem}.quoin .quoin-toc-list{margin:0;padding:0;list-style:none}.quoin .quoin-toc-list .quoin-toc-list{padding-inline-start:1.25rem}.quoin .quoin-toc-link{color:var(--quoin-muted-foreground);text-decoration:underline;-webkit-text-decoration-color:var(--quoin-border);-webkit-text-decoration-color:var(--quoin-border);text-decoration-color:var(--quoin-border);text-underline-offset:.2em;padding-block:.125rem;display:inline-block}.quoin .quoin-toc-link:hover{color:var(--quoin-foreground);text-decoration-color:currentColor}.quoin .quoin-toc-link:focus-visible{outline:2px solid var(--quoin-ring);outline-offset:2px;border-radius:2px}.quoin .quoin-toc-empty{color:var(--quoin-muted-foreground);margin:0;font-size:.875rem}.quoin .quoin-mention{background:var(--quoin-muted);border-radius:4px;padding-inline:.125rem;font-weight:500}.quoin .quoin-mention[data-opens]{cursor:pointer}.quoin .quoin-mention[role=button]:focus-visible{outline:2px solid var(--quoin-ring);outline-offset:1px}.quoin .quoin-find-match{background:var(--quoin-bg-yellow);border-radius:2px}.quoin .quoin-find-current{background:var(--quoin-bg-orange);outline:2px solid var(--quoin-ring);outline-offset:1px}@media (forced-colors:active){.quoin .quoin-find-match{color:marktext;background:mark}.quoin .quoin-find-current{outline-color:highlight}}.quoin .quoin-stats{color:var(--quoin-muted-foreground);font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none;flex-wrap:wrap;gap:.25rem 1rem;margin-top:1rem;font-size:.75rem;display:flex}.quoin[data-quoin-focus-mode]:focus-within [data-quoin-dimmed]{opacity:.4}@media (prefers-reduced-motion:no-preference){.quoin[data-quoin-focus-mode] [data-quoin-block]{transition:opacity .15s}}.quoin .quoin-presence-selection{background:var(--quoin-presence,var(--quoin-ring))}@supports (color:color-mix(in lab, red, red)){.quoin .quoin-presence-selection{background:color-mix(in srgb, var(--quoin-presence,var(--quoin-ring)) 20%, transparent)}}.quoin .quoin-presence-carets{pointer-events:none;position:absolute;inset:0;overflow-x:clip}.quoin .quoin-presence-caret{background:var(--quoin-presence,var(--quoin-ring));width:2px;margin-left:-1px;position:absolute;top:0;left:0}.quoin .quoin-presence-name{background:var(--quoin-presence,var(--quoin-ring));color:#fff;text-overflow:ellipsis;white-space:nowrap;border-radius:3px;max-width:16em;padding:0 4px;font-size:11px;font-weight:500;line-height:16px;transition:opacity .3s;position:absolute;bottom:100%;left:0;overflow:hidden}.quoin .quoin-presence-caret[data-idle] .quoin-presence-name{opacity:0}.quoin.quoin-editor:has(>.quoin-presence-avatars){padding-inline-end:24px}.quoin .quoin-presence-avatars{pointer-events:none;top:0;position:absolute;inset-inline-end:0}.quoin .quoin-presence-group{top:0;flex-direction:column;display:flex;position:absolute;inset-inline-end:3px}.quoin .quoin-presence-avatar{background:var(--quoin-presence,var(--quoin-ring));color:#fff;text-align:center;border-radius:9999px;width:18px;height:18px;font-size:9px;font-weight:600;line-height:18px}.quoin .quoin-presence-avatar+.quoin-presence-avatar{box-shadow:0 0 0 1px var(--quoin-background);margin-top:-8px}@media (forced-colors:active){.quoin .quoin-presence-selection{color:marktext;background:mark}.quoin .quoin-presence-caret{background:highlight}.quoin .quoin-presence-name,.quoin .quoin-presence-avatar{border:1px solid canvastext}}.quoin [data-quoin-block][data-quoin-ai-room]{margin-bottom:var(--quoin-ai-room,0px)}.quoin .quoin-ai-layer{z-index:10;flex-direction:column;gap:4px;display:flex;position:absolute;top:0;left:0}.quoin .quoin-ai-ghost{border-inline-start:2px solid var(--quoin-primary);color:var(--quoin-foreground);-webkit-user-select:none;user-select:none;white-space:pre-wrap;padding-inline-start:.75em}.quoin .quoin-ai-ghost:empty{min-height:1.5em}.quoin .quoin-ai-ghost-block{margin-inline-start:calc(var(--quoin-ai-indent,0) * 1.5em)}.quoin .quoin-ai-ghost-block+.quoin-ai-ghost-block{margin-top:.25em}.quoin .quoin-ai-ghost-block[data-kind=heading]{font-size:1.25em;font-weight:600}.quoin .quoin-ai-ghost-block[data-kind=heading][data-level="1"]{font-size:1.5em}.quoin .quoin-ai-ghost-block[data-kind=bullet]:before{content:"• "}.quoin .quoin-ai-ghost-block[data-kind=task]:before{content:"☐ "}.quoin .quoin-ai-ghost-block[data-kind=quote]{border-inline-start:2px solid var(--quoin-border);color:var(--quoin-muted-foreground);padding-inline-start:.75em}.quoin .quoin-ai-ghost-block[data-kind=code]{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.875em}.quoin .quoin-ai-replaced{text-decoration:line-through;-webkit-text-decoration-color:var(--quoin-muted-foreground);-webkit-text-decoration-color:var(--quoin-muted-foreground);text-decoration-color:var(--quoin-muted-foreground);color:var(--quoin-muted-foreground)}@media (forced-colors:active){.quoin .quoin-ai-ghost{border-inline-start-color:highlight}}.quoin.quoin-editor:has(>.quoin-comments-rail,>.quoin-comments-markers) [data-comment]{background:var(--quoin-comment)}@supports (color:color-mix(in lab, red, red)){.quoin.quoin-editor:has(>.quoin-comments-rail,>.quoin-comments-markers) [data-comment]{background:color-mix(in oklch, var(--quoin-comment) 45%, transparent)}}.quoin.quoin-editor:has(>.quoin-comments-rail,>.quoin-comments-markers) [data-comment]{box-shadow:inset 0 -1px var(--quoin-comment-edge)}.quoin.quoin-editor:has(>.quoin-comments-rail,>.quoin-comments-markers) [data-comment] [data-comment]{border-bottom:3px double var(--quoin-comment-edge)}.quoin .quoin-comment-active{background:var(--quoin-comment-active);box-shadow:inset 0 -3px var(--quoin-comment-edge)}.quoin .quoin-comment-pending{background:var(--quoin-comment)}@supports (color:color-mix(in lab, red, red)){.quoin .quoin-comment-pending{background:color-mix(in oklch, var(--quoin-comment) 30%, transparent)}}.quoin .quoin-comment-pending{-webkit-text-decoration:underline dashed var(--quoin-ring);-webkit-text-decoration:underline dashed var(--quoin-ring);text-decoration:underline dashed var(--quoin-ring)}.quoin.quoin-editor:has(>.quoin-comments-rail){--quoin-comments-room:272px}.quoin.quoin-editor:has(>.quoin-comments-markers){--quoin-comments-room:36px}.quoin.quoin-editor:has(>.quoin-comments-rail,>.quoin-comments-markers){min-height:var(--quoin-comments-height,auto);padding-inline-end:var(--quoin-comments-room)}.quoin.quoin-editor:has(>.quoin-comments-rail,>.quoin-comments-markers):has(>.quoin-presence-avatars){padding-inline-end:calc(var(--quoin-comments-room) + 24px)}.quoin.quoin-editor:has(>.quoin-comments-rail,>.quoin-comments-markers)>.quoin-presence-avatars{inset-inline-end:var(--quoin-comments-room)}.quoin .quoin-comments-rail,.quoin .quoin-comments-markers{-webkit-user-select:none;user-select:none;top:0;position:absolute;inset-inline-end:0}.quoin .quoin-comments-rail .quoin-comments-field{-webkit-user-select:text;user-select:text}.quoin .quoin-comments-rail{width:256px}.quoin .quoin-comments-markers{width:32px}.quoin .quoin-comments-rail [data-rail-item]{top:0;position:absolute;inset-inline:0}.quoin .quoin-comments-card{border:1px solid var(--quoin-border);border-radius:var(--quoin-radius);background:var(--quoin-popover);color:var(--quoin-popover-foreground);padding:8px}.quoin .quoin-comments-card[data-active]{border-color:var(--quoin-ring)}.quoin .quoin-comments-marker{min-width:28px;min-height:24px;color:var(--quoin-muted-foreground);top:0;border-radius:6px;align-items:center;gap:2px;padding:0 4px;font-size:11px;display:flex;position:absolute;inset-inline-end:2px}.quoin .quoin-comments-marker svg{width:14px;height:14px}.quoin .quoin-comments-marker:hover{background:var(--quoin-accent);color:var(--quoin-accent-foreground)}.quoin.quoin-comments-sheet{z-index:50;border-top:1px solid var(--quoin-border);background:var(--quoin-popover);max-height:60vh;color:var(--quoin-popover-foreground);inset-inline:0;flex-direction:column;gap:8px;padding:12px 16px;display:flex;position:fixed;bottom:0;overflow-y:auto;box-shadow:0 -4px 12px #0000001a}.quoin .quoin-comments-quote{-webkit-line-clamp:2;border-inline-start:2px solid var(--quoin-ring);color:var(--quoin-muted-foreground);-webkit-box-orient:vertical;padding-inline-start:6px;font-size:.75rem;display:-webkit-box;overflow:hidden}.quoin .quoin-comments-body{white-space:pre-wrap;overflow-wrap:anywhere}.quoin .quoin-comments-initials{background:var(--quoin-muted);width:24px;height:24px;color:var(--quoin-foreground);border-radius:9999px;flex-shrink:0;justify-content:center;align-items:center;font-size:10px;font-weight:600;display:inline-flex}.quoin .quoin-comments-field{resize:vertical;border:1px solid var(--quoin-muted-foreground);border-radius:calc(var(--quoin-radius) - 4px);min-width:0;color:inherit;font:inherit;background:0 0;flex:1;padding:4px 8px;font-size:.875rem}.quoin .quoin-comments-field:focus-visible,.quoin .quoin-comments-choice:focus-visible{outline:2px solid var(--quoin-ring);outline-offset:1px}.quoin .quoin-comments-choice{text-align:start;border-radius:6px;flex-direction:column;align-items:flex-start;gap:2px;width:100%;padding:6px;display:flex}.quoin .quoin-comments-choice:hover{background:var(--quoin-accent)}@media (forced-colors:active){.quoin.quoin-editor:has(>.quoin-comments-rail,>.quoin-comments-markers) [data-comment],.quoin .quoin-comment-pending{color:marktext;background:mark}.quoin .quoin-comment-active{color:highlighttext;background:highlight}}.quoin-view a[href],.quoin-diff a[href]{color:var(--quoin-link);text-decoration:underline}.quoin-diff [data-diff]{border-inline-start:3px solid var(--quoin-border);padding-inline-start:.75rem}.quoin-diff [data-diff=added]{border-inline-start-color:var(--quoin-success)}.quoin-diff [data-diff=removed]{border-inline-start-color:var(--quoin-destructive)}.quoin-diff [data-diff=moved],.quoin-diff [data-diff=moved-away]{border-inline-start-color:var(--quoin-info)}.quoin-diff [data-diff=changed]{border-inline-start-color:var(--quoin-warning)}.quoin-diff [data-diff-label]{color:var(--quoin-muted-foreground);font-size:.75em;font-weight:600;display:block}.quoin-diff ins{color:var(--quoin-diff-inserted);background-color:var(--quoin-bg-green);text-decoration:underline}.quoin-diff del{color:var(--quoin-diff-deleted);background-color:var(--quoin-bg-red);text-decoration:line-through}.quoin-diff ins a[href],.quoin-diff del a[href],.quoin mark,.quoin mark[data-color]{color:inherit}.quoin mark{background-color:var(--quoin-bg-yellow)}.quoin [data-color=default]{color:var(--quoin-color-default)}.quoin [data-color=gray]{color:var(--quoin-color-gray)}.quoin [data-color=brown]{color:var(--quoin-color-brown)}.quoin [data-color=orange]{color:var(--quoin-color-orange)}.quoin [data-color=yellow]{color:var(--quoin-color-yellow)}.quoin [data-color=green]{color:var(--quoin-color-green)}.quoin [data-color=blue]{color:var(--quoin-color-blue)}.quoin [data-color=purple]{color:var(--quoin-color-purple)}.quoin [data-color=pink]{color:var(--quoin-color-pink)}.quoin [data-color=red]{color:var(--quoin-color-red)}.quoin :is([data-bg=default],mark[data-color=default]){background-color:var(--quoin-bg-default)}.quoin :is([data-bg=gray],mark[data-color=gray]){background-color:var(--quoin-bg-gray)}.quoin :is([data-bg=brown],mark[data-color=brown]){background-color:var(--quoin-bg-brown)}.quoin :is([data-bg=orange],mark[data-color=orange]){background-color:var(--quoin-bg-orange)}.quoin :is([data-bg=yellow],mark[data-color=yellow]){background-color:var(--quoin-bg-yellow)}.quoin :is([data-bg=green],mark[data-color=green]){background-color:var(--quoin-bg-green)}.quoin :is([data-bg=blue],mark[data-color=blue]){background-color:var(--quoin-bg-blue)}.quoin :is([data-bg=purple],mark[data-color=purple]){background-color:var(--quoin-bg-purple)}.quoin :is([data-bg=pink],mark[data-color=pink]){background-color:var(--quoin-bg-pink)}.quoin :is([data-bg=red],mark[data-color=red]){background-color:var(--quoin-bg-red)}}@layer quoin.utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{inset-inline:0}.top-0{top:0}.top-4{top:1rem}.top-\[50\%\]{top:50%}.right-0{right:0}.right-4{right:1rem}.left-0{left:0}.left-2{left:.5rem}.left-\[50\%\]{left:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-1{margin-inline:-.25rem}.mx-0\.5{margin-inline:.125rem}.my-1{margin-block:.25rem}.me-1{margin-inline-end:.25rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.size-2{width:.5rem;height:.5rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-6{width:1.5rem;height:1.5rem}.size-8{width:2rem;height:2rem}.h-0{height:0}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-px{height:1px}.max-h-\(--radix-popper-available-height\){max-height:var(--radix-popper-available-height)}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-\[85vh\]{max-height:85vh}.max-h-\[min\(22rem\,var\(--radix-popper-available-height\)\)\]{max-height:min(22rem, var(--radix-popper-available-height))}.min-h-0{min-height:0}.w-4{width:1rem}.w-48{width:12rem}.w-72{width:18rem}.w-80{width:20rem}.w-96{width:24rem}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.min-w-0{min-width:0}.min-w-16{min-width:4rem}.min-w-\[8rem\]{min-width:8rem}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.resize{resize:both}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-x-2{column-gap:.5rem}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--quoin-radius)}.rounded-md{border-radius:calc(var(--quoin-radius) - 2px)}.rounded-sm{border-radius:calc(var(--quoin-radius) - 4px)}.rounded-xs{border-radius:.125rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-border{border-color:var(--quoin-border)}.border-destructive{border-color:var(--quoin-destructive)}.border-info{border-color:var(--quoin-info)}.border-input{border-color:var(--quoin-input)}.border-muted-foreground{border-color:var(--quoin-muted-foreground)}.border-primary{border-color:var(--quoin-primary)}.border-ring{border-color:var(--quoin-ring)}.border-success{border-color:var(--quoin-success)}.border-warning{border-color:var(--quoin-warning)}.bg-accent{background-color:var(--quoin-accent)}.bg-background\/90{background-color:var(--quoin-background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/90{background-color:color-mix(in oklab, var(--quoin-background) 90%, transparent)}}.bg-black\/50{background-color:oklab(0% none none/.5)}.bg-border{background-color:var(--quoin-border)}.bg-destructive\/15{background-color:var(--quoin-destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\/15{background-color:color-mix(in oklab, var(--quoin-destructive) 15%, transparent)}}.bg-info\/15{background-color:var(--quoin-info)}@supports (color:color-mix(in lab, red, red)){.bg-info\/15{background-color:color-mix(in oklab, var(--quoin-info) 15%, transparent)}}.bg-muted,.bg-muted\/50{background-color:var(--quoin-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab, var(--quoin-muted) 50%, transparent)}}.bg-popover{background-color:var(--quoin-popover)}.bg-primary,.bg-primary\/15{background-color:var(--quoin-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/15{background-color:color-mix(in oklab, var(--quoin-primary) 15%, transparent)}}.bg-success\/15{background-color:var(--quoin-success)}@supports (color:color-mix(in lab, red, red)){.bg-success\/15{background-color:color-mix(in oklab, var(--quoin-success) 15%, transparent)}}.bg-transparent{background-color:#0000}.bg-warning\/15{background-color:var(--quoin-warning)}@supports (color:color-mix(in lab, red, red)){.bg-warning\/15{background-color:color-mix(in oklab, var(--quoin-warning) 15%, transparent)}}.fill-current{fill:currentColor}.object-cover{object-fit:cover}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1{padding-inline:.25rem}.px-1\.5{padding-inline:.375rem}.px-2{padding-inline:.5rem}.px-3{padding-inline:.75rem}.px-4{padding-inline:1rem}.py-0\.5{padding-block:.125rem}.py-1{padding-block:.25rem}.py-1\.5{padding-block:.375rem}.py-2{padding-block:.5rem}.ps-3{padding-inline-start:.75rem}.ps-12{padding-inline-start:3rem}.pe-1{padding-inline-end:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pr-2{padding-right:.5rem}.pb-1{padding-bottom:.25rem}.pl-8{padding-left:2rem}.text-center{text-align:center}.text-start{text-align:start}.font-sans{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-2xl{font-size:1.5rem;line-height:var(--tw-leading,calc(2 / 1.5))}.text-3xl{font-size:1.875rem;line-height:var(--tw-leading,calc(2.25 / 1.875))}.text-base{font-size:1rem;line-height:var(--tw-leading,calc(1.5 / 1))}.text-lg{font-size:1.125rem;line-height:var(--tw-leading,calc(1.75 / 1.125))}.text-sm{font-size:.875rem;line-height:var(--tw-leading,calc(1.25 / .875))}.text-xl{font-size:1.25rem;line-height:var(--tw-leading,calc(1.75 / 1.25))}.text-xs{font-size:.75rem;line-height:var(--tw-leading,calc(1 / .75))}.leading-7{--tw-leading:calc(.25rem * 7);line-height:1.75rem}.leading-none{--tw-leading:1;line-height:1}.leading-tight{--tw-leading:1.25;line-height:1.25}.font-medium{--tw-font-weight:500;font-weight:500}.font-semibold{--tw-font-weight:600;font-weight:600}.tracking-widest{--tw-tracking:.1em;letter-spacing:.1em}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent-foreground{color:var(--quoin-accent-foreground)}.text-destructive{color:var(--quoin-destructive)}.text-muted-foreground{color:var(--quoin-muted-foreground)}.text-popover-foreground{color:var(--quoin-popover-foreground)}.text-primary-foreground{color:var(--quoin-primary-foreground)}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.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,)}.invert{--tw-invert:invert(100%);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,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.transition-\[color\,background-color\,border-color\,box-shadow\,opacity\]{transition-property:color,background-color,border-color,box-shadow,opacity;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.duration-200{--tw-duration:.2s;transition-duration:.2s}.select-none{-webkit-user-select:none;user-select:none}.running{animation-play-state:running}.group-focus-within\/callout\:opacity-100:is(:where(.group\/callout):focus-within *){opacity:1}@media (hover:hover){.group-hover\/callout\:opacity-100:is(:where(.group\/callout):hover *),.group-hover\/void\:opacity-100:is(:where(.group\/void):hover *){opacity:1}}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:1.75rem}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:var(--tw-leading,calc(1.25 / .875))}.file\:font-medium::file-selector-button{--tw-font-weight:500;font-weight:500}.placeholder\:text-muted-foreground::placeholder{color:var(--quoin-muted-foreground)}.empty\:hidden:empty{display:none}@media (hover:hover){.hover\:bg-accent:hover{background-color:var(--quoin-accent)}.hover\:bg-primary\/90:hover{background-color:var(--quoin-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--quoin-primary) 90%, transparent)}}.hover\:text-accent-foreground:hover{color:var(--quoin-accent-foreground)}.hover\:opacity-100:hover{opacity:1}}.focus\:bg-accent:focus{background-color:var(--quoin-accent)}.focus\:text-accent-foreground:focus{color:var(--quoin-accent-foreground)}.focus\:text-destructive:focus{color:var(--quoin-destructive)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:border-ring:focus-visible{border-color:var(--quoin-ring)}.focus-visible\:opacity-100:focus-visible{opacity:1}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-\[var\(--quoin-ring\)\]:focus-visible{outline-color:var(--quoin-ring)}.focus-visible\:outline-solid:focus-visible{--tw-outline-style:solid;outline-style:solid}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}:where([data-selected=true]) .in-data-\[selected\=true\]\:opacity-100{opacity:1}:where([data-quoin-block]:first-child) .in-\[\[data-quoin-block\]\:first-child\]\:mt-0{margin-top:0}.has-\[\:focus-visible\]\:outline-2:has(:focus-visible){outline-style:var(--tw-outline-style);outline-width:2px}.has-\[\:focus-visible\]\:outline-offset-2:has(:focus-visible){outline-offset:2px}.has-\[\:focus-visible\]\:outline-\[var\(--quoin-ring\)\]:has(:focus-visible){outline-color:var(--quoin-ring)}.has-\[\>svg\]\:px-1\.5:has(>svg){padding-inline:.375rem}.has-\[\>svg\]\:px-2:has(>svg){padding-inline:.5rem}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:.625rem}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:.75rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:cursor-not-allowed[aria-disabled=true]{cursor:not-allowed}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--quoin-destructive)}.aria-pressed\:bg-accent[aria-pressed=true]{background-color:var(--quoin-accent)}.aria-pressed\:text-accent-foreground[aria-pressed=true]{color:var(--quoin-accent-foreground)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[highlighted\]\:bg-accent[data-highlighted]{background-color:var(--quoin-accent)}.data-\[highlighted\]\:text-accent-foreground[data-highlighted]{color:var(--quoin-accent-foreground)}.data-\[highlighted\]\:shadow-\[inset_2px_0_0_var\(--quoin-foreground\)\][data-highlighted]{--tw-shadow:inset 2px 0 0 var(--tw-shadow-color,var(--quoin-foreground));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-\[inset\]\:pl-8[data-inset]{padding-left:2rem}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--quoin-accent)}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}@media (min-width:40rem){.sm\:max-w-2xl{max-width:42rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:text-left{text-align:left}}@media (min-width:48rem){.md\:text-sm{font-size:.875rem;line-height:var(--tw-leading,calc(1.25 / .875))}}@media (pointer:coarse){.pointer-coarse\:hidden{display:none}.pointer-coarse\:min-h-11{min-height:2.75rem}.pointer-coarse\:min-w-11{min-width:2.75rem}.pointer-coarse\:opacity-100{opacity:1}.pointer-coarse\:not-data-current\:hidden:not([data-current]){display:none}.pointer-coarse\:before\:absolute:before{content:var(--tw-content);position:absolute}.pointer-coarse\:before\:top-1\/2:before{content:var(--tw-content);top:50%}.pointer-coarse\:before\:left-1\/2:before{content:var(--tw-content);left:50%}.pointer-coarse\:before\:size-11:before{content:var(--tw-content);width:2.75rem;height:2.75rem}.pointer-coarse\:before\:-translate-x-1\/2:before{content:var(--tw-content);--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.pointer-coarse\:before\:-translate-y-1\/2:before{content:var(--tw-content);--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.pointer-coarse\:before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:.75rem;height:.75rem}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:1rem;height:1rem}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}
|