nuvra 0.5.0 → 0.6.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/README.md +74 -18
- package/dist/components/document-editor.vue.d.ts +10 -0
- package/dist/components/editor-canvas.vue.d.ts +3 -0
- package/dist/components/editor-collaborators.vue.d.ts +17 -0
- package/dist/components/editor-outline.vue.d.ts +23 -3
- package/dist/components/editor-toolbar.vue.d.ts +2 -2
- package/dist/core/collaboration.d.ts +25 -0
- package/dist/core/engine/dom.d.ts +9 -2
- package/dist/core/engine/engine.d.ts +17 -1
- package/dist/core/engine/schema.d.ts +2 -0
- package/dist/core/export.d.ts +8 -1
- package/dist/core/locales/uz.d.ts +8 -0
- package/dist/core/outline.d.ts +2 -0
- package/dist/core/pagination.d.ts +21 -2
- package/dist/core/pdf.d.ts +43 -0
- package/dist/core/types.d.ts +1 -1
- package/dist/{export-DhHI3ZrQ.js → export-B06RXLqn.js} +16 -14
- package/dist/export-B06RXLqn.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3210 -2778
- package/dist/index.js.map +1 -1
- package/dist/pdf-mIRjnoOP.js +70 -0
- package/dist/pdf-mIRjnoOP.js.map +1 -0
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/dist/export-DhHI3ZrQ.js.map +0 -1
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
//#region src/core/pdf.ts
|
|
2
|
+
var e = 72 / 25.4, t = 96 / 25.4, n = 2, r = .92, i = "application/pdf", a = new TextEncoder(), o = (e) => {
|
|
3
|
+
let t = [], n = [], r = 0, i = (e) => {
|
|
4
|
+
let n = typeof e == "string" ? a.encode(e) : e;
|
|
5
|
+
t.push(n), r += n.length;
|
|
6
|
+
}, o = (e, t) => {
|
|
7
|
+
n[e] = r, i(`${e} 0 obj\n${t}\nendobj\n`);
|
|
8
|
+
}, s = e.map((e, t) => 3 + t * 3);
|
|
9
|
+
i("%PDF-1.4\n%âãÏÓ\n"), o(1, "<< /Type /Catalog /Pages 2 0 R >>"), o(2, `<< /Type /Pages /Kids [${s.map((e) => `${e} 0 R`).join(" ")}] /Count ${e.length} >>`), e.forEach((e, t) => {
|
|
10
|
+
let a = s[t] ?? 0, c = e.widthPt.toFixed(2), l = e.heightPt.toFixed(2);
|
|
11
|
+
o(a, `<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${c} ${l}] /Resources << /XObject << /Im0 ${a + 2} 0 R >> >> /Contents ${a + 1} 0 R >>`);
|
|
12
|
+
let u = `q ${c} 0 0 ${l} 0 0 cm /Im0 Do Q`;
|
|
13
|
+
o(a + 1, `<< /Length ${u.length} >>\nstream\n${u}\nendstream`), n[a + 2] = r, i(`${a + 2} 0 obj\n<< /Type /XObject /Subtype /Image /Width ${e.width} /Height ${e.height} /ColorSpace /DeviceRGB /BitsPerComponent 8 /Filter /DCTDecode /Length ${e.jpeg.length} >>\nstream\n`), i(e.jpeg), i("\nendstream\nendobj\n");
|
|
14
|
+
});
|
|
15
|
+
let c = 3 + e.length * 3, l = r;
|
|
16
|
+
i(`xref\n0 ${c}\n${Array.from({ length: c }, (e, t) => t === 0 ? "0000000000 65535 f \n" : `${String(n[t] ?? 0).padStart(10, "0")} 00000 n \n`).join("")}trailer\n<< /Size ${c} /Root 1 0 R >>\nstartxref\n${l}\n%%EOF\n`);
|
|
17
|
+
let u = new Uint8Array(r), d = 0;
|
|
18
|
+
for (let e of t) u.set(e, d), d += e.length;
|
|
19
|
+
return u;
|
|
20
|
+
}, s = (e) => new Promise((t, n) => {
|
|
21
|
+
let r = new FileReader();
|
|
22
|
+
r.onload = () => t(String(r.result)), r.onerror = () => n(r.error), r.readAsDataURL(e);
|
|
23
|
+
}), c = async (e) => {
|
|
24
|
+
await Promise.all(Array.from(e.querySelectorAll("img")).map(async (e) => {
|
|
25
|
+
let t = e.getAttribute("src") ?? "";
|
|
26
|
+
if (!t.startsWith("data:")) try {
|
|
27
|
+
let n = await fetch(t, { mode: "cors" });
|
|
28
|
+
if (!n.ok) throw Error(String(n.status));
|
|
29
|
+
e.setAttribute("src", await s(await n.blob()));
|
|
30
|
+
} catch {
|
|
31
|
+
e.remove();
|
|
32
|
+
}
|
|
33
|
+
}));
|
|
34
|
+
}, l = (e) => new Promise((t, n) => {
|
|
35
|
+
let r = new Image();
|
|
36
|
+
r.onload = () => t(r), r.onerror = () => n(/* @__PURE__ */ Error("The page could not be drawn")), r.src = e;
|
|
37
|
+
}), u = async (e, t, n, r, i) => {
|
|
38
|
+
let a = new XMLSerializer(), o = `<svg xmlns="http://www.w3.org/2000/svg" width="${n}" height="${r}"><foreignObject x="0" y="0" width="100%" height="100%">${`<div xmlns="http://www.w3.org/1999/xhtml"><style>${t.replace(/]]>/g, "]] >")}</style>${a.serializeToString(e)}</div>`}</foreignObject></svg>`, s = await l(`data:image/svg+xml;charset=utf-8,${encodeURIComponent(o)}`), c = document.createElement("canvas");
|
|
39
|
+
c.width = Math.round(n * i.scale), c.height = Math.round(r * i.scale);
|
|
40
|
+
let u = c.getContext("2d");
|
|
41
|
+
if (!u) throw Error("Canvas is not available");
|
|
42
|
+
u.fillStyle = "#fff", u.fillRect(0, 0, c.width, c.height), u.drawImage(s, 0, 0, c.width, c.height);
|
|
43
|
+
let d = await new Promise((e) => c.toBlob(e, "image/jpeg", i.quality));
|
|
44
|
+
if (!d) throw Error("The page could not be encoded");
|
|
45
|
+
return {
|
|
46
|
+
jpeg: new Uint8Array(await d.arrayBuffer()),
|
|
47
|
+
width: c.width,
|
|
48
|
+
height: c.height
|
|
49
|
+
};
|
|
50
|
+
}, d = async (a, s, l = {}) => {
|
|
51
|
+
let d = {
|
|
52
|
+
scale: l.scale ?? n,
|
|
53
|
+
quality: l.quality ?? r
|
|
54
|
+
}, f = new DOMParser().parseFromString(a, "text/html"), p = Array.from(f.querySelectorAll("style"), (e) => e.textContent ?? "").join("\n");
|
|
55
|
+
await c(f.body);
|
|
56
|
+
let m = Array.from(f.querySelectorAll("section.doc-sheet")), h = [];
|
|
57
|
+
for (let n of m) {
|
|
58
|
+
let r = n.classList.contains("is-rotated"), i = r ? s.height : s.width, a = r ? s.width : s.height, o = await u(n, p, Math.round(i * t), Math.round(a * t), d);
|
|
59
|
+
h.push({
|
|
60
|
+
...o,
|
|
61
|
+
widthPt: i * e,
|
|
62
|
+
heightPt: a * e
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return new Blob([o(h)], { type: i });
|
|
66
|
+
};
|
|
67
|
+
//#endregion
|
|
68
|
+
export { i as PDF_MIME, d as renderPdf };
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=pdf-mIRjnoOP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf-mIRjnoOP.js","names":[],"sources":["../src/core/pdf.ts"],"sourcesContent":["/**\n * PDF download without the print dialog and without dependencies. Every sheet of the printable document is drawn into\n * a canvas through an SVG `foreignObject`, and the pictures are written into a PDF, one per page. The PDF looks like\n * the printout, but its text cannot be selected or searched.\n */\n\n/** A rendered page: a JPEG picture of the sheet and the paper size it is printed on. */\nexport interface PdfPage {\n /** JPEG data of the page picture. */\n jpeg: Uint8Array;\n /** Picture width in pixels. */\n width: number;\n /** Picture height in pixels. */\n height: number;\n /** Paper width in PDF points (1/72 inch). */\n widthPt: number;\n /** Paper height in PDF points. */\n heightPt: number;\n}\n\n/** Options of {@link renderPdf}. */\nexport interface PdfOptions {\n /** Pixels per CSS pixel of the page pictures; higher is sharper and larger. Defaults to 2. */\n scale?: number;\n /** JPEG quality between 0 and 1. Defaults to 0.92. */\n quality?: number;\n}\n\n/** PDF points per millimetre. */\nconst PT_PER_MM = 72 / 25.4;\n/** CSS pixels per millimetre at 96 DPI. */\nconst PX_PER_MM = 96 / 25.4;\nconst DEFAULT_SCALE = 2;\nconst DEFAULT_QUALITY = 0.92;\n/** MIME type of PDF files. */\nexport const PDF_MIME = 'application/pdf';\n\nconst encoder = new TextEncoder();\n\n/**\n * Writes JPEG pictures into a PDF document, one picture filling each page.\n *\n * @returns the PDF file content.\n */\nexport const buildPdf = (pages: readonly PdfPage[]): Uint8Array => {\n const chunks: Uint8Array[] = [];\n const offsets: number[] = [];\n let length = 0;\n const push = (chunk: Uint8Array | string) => {\n const bytes = typeof chunk === 'string' ? encoder.encode(chunk) : chunk;\n chunks.push(bytes);\n length += bytes.length;\n };\n /** Starts object `id`, remembering where it begins for the cross-reference table. */\n const object = (id: number, body: string) => {\n offsets[id] = length;\n push(`${id} 0 obj\\n${body}\\nendobj\\n`);\n };\n\n // Objects: 1 catalog, 2 page tree, then for every page: page, content stream, image.\n const pageIds = pages.map((_, index) => 3 + index * 3);\n push('%PDF-1.4\\n%âãÏÓ\\n');\n object(1, '<< /Type /Catalog /Pages 2 0 R >>');\n object(2, `<< /Type /Pages /Kids [${pageIds.map(id => `${id} 0 R`).join(' ')}] /Count ${pages.length} >>`);\n pages.forEach((page, index) => {\n const pageId = pageIds[index] ?? 0;\n const width = page.widthPt.toFixed(2);\n const height = page.heightPt.toFixed(2);\n object(\n pageId,\n `<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${width} ${height}] /Resources << /XObject << /Im0 ${pageId + 2} 0 R >> >> /Contents ${pageId + 1} 0 R >>`\n );\n const content = `q ${width} 0 0 ${height} 0 0 cm /Im0 Do Q`;\n object(pageId + 1, `<< /Length ${content.length} >>\\nstream\\n${content}\\nendstream`);\n offsets[pageId + 2] = length;\n push(\n `${pageId + 2} 0 obj\\n<< /Type /XObject /Subtype /Image /Width ${page.width} /Height ${page.height} /ColorSpace /DeviceRGB /BitsPerComponent 8 /Filter /DCTDecode /Length ${page.jpeg.length} >>\\nstream\\n`\n );\n push(page.jpeg);\n push('\\nendstream\\nendobj\\n');\n });\n\n const count = 3 + pages.length * 3;\n const xref = length;\n const entries = Array.from({ length: count }, (_, id) =>\n id === 0 ? '0000000000 65535 f \\n' : `${String(offsets[id] ?? 0).padStart(10, '0')} 00000 n \\n`\n );\n push(`xref\\n0 ${count}\\n${entries.join('')}trailer\\n<< /Size ${count} /Root 1 0 R >>\\nstartxref\\n${xref}\\n%%EOF\\n`);\n\n const result = new Uint8Array(length);\n let position = 0;\n for (const chunk of chunks) {\n result.set(chunk, position);\n position += chunk.length;\n }\n return result;\n};\n\n/** Reads a blob as a data URL. */\nconst toDataUrl = (blob: Blob) =>\n new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(String(reader.result));\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(blob);\n });\n\n/**\n * Embeds images as data URLs, so the canvas they are drawn into stays readable. Images that cannot be fetched (for\n * example from a server without CORS) are left out of the PDF rather than breaking it.\n */\nconst embedImages = async (root: ParentNode) => {\n await Promise.all(\n Array.from(root.querySelectorAll('img')).map(async image => {\n const source = image.getAttribute('src') ?? '';\n if (source.startsWith('data:')) return;\n try {\n const response = await fetch(source, { mode: 'cors' });\n if (!response.ok) throw new Error(String(response.status));\n image.setAttribute('src', await toDataUrl(await response.blob()));\n } catch {\n image.remove();\n }\n })\n );\n};\n\n/** Loads an image and waits until it can be drawn. */\nconst loadImage = (source: string) =>\n new Promise<HTMLImageElement>((resolve, reject) => {\n const image = new Image();\n image.onload = () => resolve(image);\n image.onerror = () => reject(new Error('The page could not be drawn'));\n image.src = source;\n });\n\n/** Draws one sheet into a JPEG picture. */\nconst renderSheet = async (\n sheet: Element,\n css: string,\n widthPx: number,\n heightPx: number,\n options: Required<PdfOptions>\n): Promise<{ jpeg: Uint8Array; width: number; height: number }> => {\n const serializer = new XMLSerializer();\n const body = `<div xmlns=\"http://www.w3.org/1999/xhtml\"><style>${css.replace(/]]>/g, ']] >')}</style>${serializer.serializeToString(sheet)}</div>`;\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${widthPx}\" height=\"${heightPx}\"><foreignObject x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">${body}</foreignObject></svg>`;\n const image = await loadImage(`data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`);\n const canvas = document.createElement('canvas');\n canvas.width = Math.round(widthPx * options.scale);\n canvas.height = Math.round(heightPx * options.scale);\n const context = canvas.getContext('2d');\n if (!context) throw new Error('Canvas is not available');\n context.fillStyle = '#fff';\n context.fillRect(0, 0, canvas.width, canvas.height);\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\n const blob = await new Promise<Blob | null>(resolve => canvas.toBlob(resolve, 'image/jpeg', options.quality));\n if (!blob) throw new Error('The page could not be encoded');\n return { jpeg: new Uint8Array(await blob.arrayBuffer()), width: canvas.width, height: canvas.height };\n};\n\n/**\n * Turns the printable HTML of a paginated document (one `section.doc-sheet` per page) into a PDF.\n *\n * @param printableHtml Standalone HTML as built for printing from the page view.\n * @param paper Paper width and height in millimetres, in the chosen orientation.\n */\nexport const renderPdf = async (\n printableHtml: string,\n paper: { width: number; height: number },\n options: PdfOptions = {}\n): Promise<Blob> => {\n const settings: Required<PdfOptions> = {\n scale: options.scale ?? DEFAULT_SCALE,\n quality: options.quality ?? DEFAULT_QUALITY\n };\n const parsed = new DOMParser().parseFromString(printableHtml, 'text/html');\n const css = Array.from(parsed.querySelectorAll('style'), style => style.textContent ?? '').join('\\n');\n await embedImages(parsed.body);\n const sheets = Array.from(parsed.querySelectorAll('section.doc-sheet'));\n const pages: PdfPage[] = [];\n for (const sheet of sheets) {\n // A sheet turned by a section break is printed on turned paper.\n const rotated = sheet.classList.contains('is-rotated');\n const width = rotated ? paper.height : paper.width;\n const height = rotated ? paper.width : paper.height;\n const picture = await renderSheet(\n sheet,\n css,\n Math.round(width * PX_PER_MM),\n Math.round(height * PX_PER_MM),\n settings\n );\n pages.push({ ...picture, widthPt: width * PT_PER_MM, heightPt: height * PT_PER_MM });\n }\n return new Blob([buildPdf(pages) as BlobPart], { type: PDF_MIME });\n};\n"],"mappings":"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"}
|
package/dist/style.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
.doc-content{color:#1f2328;white-space:pre-wrap;overflow-wrap:break-word;tab-size:4;font-family:Times New Roman,Times,serif;font-size:12pt;line-height:1.5}.doc-content :is(p,h1,h2,h3,h4,h5,h6):not([dir]){unicode-bidi:plaintext}.doc-content p{margin:0 0 6pt}.doc-content h1,.doc-content h2,.doc-content h3,.doc-content h4,.doc-content h5,.doc-content h6{margin:0 0 6pt;padding-top:6pt;font-weight:700;line-height:1.25}.doc-content h1{font-size:20pt}.doc-content h2{font-size:16pt}.doc-content h3{font-size:14pt}.doc-content h4{font-size:12pt}.doc-content h5{font-size:11pt}.doc-content h6{font-size:10pt}.doc-content ul,.doc-content ol{margin:0 0 6pt;padding-left:24pt}.doc-content li>p{margin-bottom:2pt}.doc-content ol[data-numbering=legal],.doc-content ol[data-numbering=legal] ol{counter-reset:doc-legal;padding-left:0;list-style:none}.doc-content ol[data-numbering=legal]>li,.doc-content ol[data-numbering=legal] ol>li{counter-increment:doc-legal;grid-template-columns:auto minmax(0,1fr);column-gap:6pt;display:grid}.doc-content ol[data-numbering=legal]>li:before,.doc-content ol[data-numbering=legal] ol>li:before{content:counters(doc-legal, ".") ".";grid-area:1/1}.doc-content ol[data-numbering=legal] li>*{grid-column:2}.doc-content ol[data-numbering=legal] ol{margin:2pt 0 0}.doc-content ul[data-type=taskList]{padding-left:2pt;list-style:none}.doc-content ul[data-type=taskList] li{align-items:flex-start;gap:6pt;display:flex}.doc-content ul[data-type=taskList] li>label{-webkit-user-select:none;user-select:none;flex:none;margin-top:.3em}.doc-content ul[data-type=taskList] li>div{flex:auto;min-width:0}.doc-content ul[data-type=taskList] li[data-checked=true]>div{color:#667085;text-decoration:line-through}.doc-content blockquote{color:#475467;border-left:3px solid #b3c5f5;margin:0 0 6pt;padding:2pt 0 2pt 12pt}.doc-content blockquote>p:last-child,.doc-content li>p:last-child,.doc-content td>p:last-child,.doc-content th>p:last-child{margin-bottom:0}.doc-content pre{white-space:pre-wrap;background:#f4f6f8;border-radius:4px;margin:0 0 6pt;padding:8pt 10pt;font-family:Consolas,Courier New,monospace;font-size:10pt;line-height:1.45}.doc-content code{background:#eef1f4;border-radius:3px;padding:1px 4px;font-family:Consolas,Courier New,monospace;font-size:.9em}.doc-content pre code{font-size:inherit;background:0 0;padding:0}.doc-content hr{border:0;border-bottom:1px solid #c4cad4;height:0;margin:0 0 6pt;padding-top:6pt}.doc-content a{color:#1d4ed8;text-decoration:underline}.doc-content mark{color:inherit;border-radius:2px;padding:0 1px}.doc-content img{max-width:100%;height:auto}.doc-content img[data-align=left]{margin:0 auto 6pt 0;display:block}.doc-content img[data-align=center]{margin:0 auto 6pt;display:block}.doc-content img[data-align=right]{margin:0 0 6pt auto;display:block}.doc-content table{border-collapse:collapse;table-layout:fixed;width:100%;margin:0 0 6pt}.doc-content td,.doc-content th{box-sizing:border-box;vertical-align:top;border:1px solid #8f99a8;min-width:1em;padding:3pt 5pt}.doc-content th{text-align:left;background:#f2f4f7;font-weight:700}.doc-content table[data-type=signature] td,.doc-content table[data-type=signature] th,.doc-content table[data-type=toc] td,.doc-content table[data-type=toc] th{background:0 0;border:0;padding:0 5pt}.doc-content table[data-type=toc] tr:first-child td{padding-bottom:6pt}.doc-content ins[data-change]{color:#15803d;text-decoration:underline}.doc-content del[data-change]{color:#b91c1c;text-decoration:line-through}.doc-content{counter-reset:doc-footnote}.doc-content sup[data-footnote]{counter-increment:doc-footnote}.doc-content sup[data-footnote]:empty:after{content:counter(doc-footnote)}.doc-footnotes{box-sizing:border-box;color:#1f2328;padding-top:4pt;font:10pt/1.3 Times New Roman,Times,serif}.doc-footnotes:before{content:"";border-top:1px solid #667085;width:33%;margin-bottom:3pt;display:block}.doc-footnotes p{text-align:justify;margin:0 0 2pt}.doc-content .doc-page-break{break-after:page;page-break-after:always;height:0}:where(.document-editor){--nuvra-color-primary:#409eff;--nuvra-color-primary-hover:#79bbff;--nuvra-color-primary-border:#a0cfff;--nuvra-color-primary-muted:#c6e2ff;--nuvra-color-primary-soft:#ecf5ff;--nuvra-color-on-primary:#fff;--nuvra-color-danger:#f56c6c;--nuvra-color-danger-soft:#fef0f0;--nuvra-text-strong:#303133;--nuvra-text:#606266;--nuvra-text-muted:#909399;--nuvra-text-placeholder:#a8abb2;--nuvra-text-disabled:#c0c4cc;--nuvra-border:#dcdfe6;--nuvra-border-hover:#c0c4cc;--nuvra-border-light:#e4e7ed;--nuvra-border-lighter:#ebeef5;--nuvra-fill:#f5f7fa;--nuvra-bg:#fff;--nuvra-bg-overlay:#fff;--nuvra-shadow:0 0 12px #0000001f;--nuvra-fullscreen-z-index:2000}:where(.dark .document-editor,[data-theme=dark] .document-editor){--nuvra-color-primary-hover:#66b1ff;--nuvra-color-primary-border:#2a598a;--nuvra-color-primary-muted:#213d5b;--nuvra-color-primary-soft:#18222c;--nuvra-color-danger-soft:#2b1d1d;--nuvra-text-strong:#e5eaf3;--nuvra-text:#cfd3dc;--nuvra-text-muted:#a3a6ad;--nuvra-text-placeholder:#8d9095;--nuvra-text-disabled:#6c6e72;--nuvra-border:#4c4d4f;--nuvra-border-hover:#6c6e72;--nuvra-border-light:#414243;--nuvra-border-lighter:#363637;--nuvra-fill:#262727;--nuvra-bg:#141414;--nuvra-bg-overlay:#1d1e1f;--nuvra-shadow:0 0 12px #000000b8}.doc-content.is-format-painter{cursor:copy}.doc-content.doc-show-marks p:after,.doc-content.doc-show-marks h1:after,.doc-content.doc-show-marks h2:after,.doc-content.doc-show-marks h3:after,.doc-content.doc-show-marks h4:after,.doc-content.doc-show-marks h5:after,.doc-content.doc-show-marks h6:after{content:"¶";color:var(--nuvra-color-primary);opacity:.55;pointer-events:none;-webkit-user-select:none;user-select:none;margin-left:1px;font-family:system-ui,sans-serif;font-weight:400}.doc-tb-button{box-sizing:border-box;min-width:28px;height:28px;color:var(--nuvra-text);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;gap:4px;padding:0 5px;font-size:13px;line-height:1;transition:background-color .12s,color .12s;display:inline-flex}.doc-tb-button:hover:not(:disabled){background:var(--nuvra-fill)}.doc-tb-button:focus-visible{outline:2px solid var(--nuvra-color-primary);outline-offset:-2px}.doc-tb-button.is-active{color:var(--nuvra-color-primary);background:var(--nuvra-color-primary-soft)}.doc-tb-button:disabled{color:var(--nuvra-text-disabled);cursor:not-allowed}.doc-tb-button--select{justify-content:space-between;padding:0 4px 0 7px}.doc-tb-button--caret{min-width:16px;padding:0 2px}.doc-tb-button__label{text-overflow:ellipsis;overflow:hidden}.doc-menu{--doc-popover-padding:4px}.doc-menu__items{min-width:168px;display:grid}.doc-menu__item{box-sizing:border-box;width:100%;color:var(--nuvra-text);font:inherit;text-align:left;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:6px;outline:none;align-items:center;gap:8px;padding:5px 12px 5px 8px;font-size:13px;line-height:20px;display:flex}.doc-menu__item:hover,.doc-menu__item:focus-visible{color:var(--nuvra-color-primary);background:var(--nuvra-color-primary-soft)}.doc-menu__item.is-selected{color:var(--nuvra-color-primary);font-weight:600}.doc-menu__item.is-danger:hover,.doc-menu__item.is-danger:focus-visible{color:var(--nuvra-color-danger);background:var(--nuvra-color-danger-soft)}.doc-menu__item:disabled{color:var(--nuvra-text-disabled);cursor:default;background:0 0}.doc-menu__divider{background:var(--nuvra-border-lighter);height:1px;margin:4px 0}.doc-menu__hint{color:var(--nuvra-text-placeholder);margin-left:auto;padding-left:20px;font-size:11px;font-weight:400}.doc-menu__h1{font-size:18px;font-weight:700}.doc-menu__h2{font-size:16px;font-weight:700}.doc-menu__h3{font-size:15px;font-weight:700}.doc-menu__h4{font-size:14px;font-weight:700}.doc-input{box-sizing:border-box;border:1px solid var(--nuvra-border);width:100%;min-width:0;height:24px;color:var(--nuvra-text);background:var(--nuvra-bg);font:inherit;border-radius:4px;outline:none;margin:0;padding:0 7px;font-size:12px;transition:border-color .12s}.doc-input::placeholder{color:var(--nuvra-text-placeholder)}.doc-input:hover{border-color:var(--nuvra-border-hover)}.doc-input:focus,.doc-input:focus-within{border-color:var(--nuvra-color-primary)}.doc-input--affix{align-items:center;gap:6px;display:inline-flex}.doc-input--affix input{min-width:0;height:100%;color:inherit;font:inherit;background:0 0;border:0;outline:none;flex:auto;margin:0;padding:0}.doc-input--affix input::placeholder{color:var(--nuvra-text-placeholder)}.doc-btn{box-sizing:border-box;border:1px solid var(--nuvra-border);height:24px;color:var(--nuvra-text);background:var(--nuvra-bg);font:inherit;white-space:nowrap;cursor:pointer;border-radius:4px;flex:none;justify-content:center;align-items:center;gap:5px;margin:0;padding:0 11px;font-size:12px;line-height:1;transition:background-color .12s,border-color .12s,color .12s;display:inline-flex}.doc-btn:hover:not(:disabled){border-color:var(--nuvra-color-primary-muted);color:var(--nuvra-color-primary);background:var(--nuvra-color-primary-soft)}.doc-btn:focus-visible{outline:2px solid var(--nuvra-color-primary-border);outline-offset:1px}.doc-btn:disabled{border-color:var(--nuvra-border-lighter);color:var(--nuvra-text-placeholder);cursor:not-allowed}.doc-btn--primary{border-color:var(--nuvra-color-primary);color:var(--nuvra-color-on-primary);background:var(--nuvra-color-primary)}.doc-btn--primary:hover:not(:disabled){border-color:var(--nuvra-color-primary-hover);color:var(--nuvra-color-on-primary);background:var(--nuvra-color-primary-hover)}.doc-btn--primary:disabled{border-color:var(--nuvra-color-primary-border);color:var(--nuvra-color-on-primary);background:var(--nuvra-color-primary-border)}.doc-btn--danger-text{color:var(--nuvra-color-danger);background:0 0;border-color:#0000}.doc-btn--danger-text:hover:not(:disabled){color:var(--nuvra-color-danger);background:var(--nuvra-color-danger-soft);border-color:#0000}.doc-checkbox{color:var(--nuvra-text);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;font-size:12px;display:inline-flex}.doc-checkbox input{width:13px;height:13px;accent-color:var(--nuvra-color-primary);cursor:pointer;margin:0}.doc-spin{animation:1s linear infinite doc-spin}@keyframes doc-spin{to{transform:rotate(360deg)}}.doc-canvas .doc-content{--doc-placeholder:""}.doc-canvas .doc-content.is-empty>p:first-child:before{float:left;color:#98a2b3;content:var(--doc-placeholder);pointer-events:none;height:0}.doc-canvas .doc-content .doc-page-break{cursor:default;-webkit-user-select:none;user-select:none;height:18px;margin-bottom:6pt;position:relative}.doc-canvas .doc-content .doc-page-break:before{content:"";border-top:1px dashed #98a2b3;position:absolute;top:50%;left:0;right:0}.doc-canvas .doc-content .doc-page-break:after{color:#667085;letter-spacing:.04em;text-transform:uppercase;content:var(--page-break-label);background:#fff;padding:0 8px;font:10px/16px system-ui,sans-serif;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.doc-canvas .doc-content td,.doc-canvas .doc-content th{position:relative}.doc-canvas .doc-content .doc-cell-selected:after{content:"";pointer-events:none;background:#3b82f629;position:absolute;inset:0}.doc-canvas .doc-content.has-cell-selection ::selection{background:0 0}.doc-canvas .doc-content.is-column-resize,.doc-canvas .doc-content.is-column-resize *{cursor:col-resize}.doc-canvas .doc-content table[data-type=signature] td,.doc-canvas .doc-content table[data-type=signature] th{border:1px dashed #d0d5dd}.doc-canvas .doc-content sup[data-footnote]{color:var(--nuvra-color-primary,#409eff);cursor:pointer;border-radius:2px;padding:0 1px}.doc-canvas .doc-content sup[data-footnote]:hover{background:var(--nuvra-color-primary-soft,#ecf5ff)}.doc-canvas .doc-content span[data-comment]{background:#facc1538;border-bottom:2px solid #f5c542}.doc-canvas .doc-content span[data-comment].is-active{background:#facc1573}.doc-canvas .doc-content span[data-comment].is-resolved{background:0 0;border-bottom:0}.doc-canvas .doc-content table[data-type=toc]{outline-offset:2px;outline:1px dashed #d0d5dd}.doc-canvas .doc-content .doc-variable{color:var(--nuvra-color-primary,#409eff);background:color-mix(in srgb, var(--nuvra-color-primary,#409eff) 12%, transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--nuvra-color-primary,#409eff) 35%, transparent);cursor:default;-webkit-user-select:all;user-select:all;border-radius:3px;padding:0 3px}.doc-canvas .doc-content .doc-variable:before{content:attr(data-label)}.doc-canvas .doc-content .doc-variable.is-unknown{color:#b54708;background:#f790091f;box-shadow:inset 0 0 0 1px #f7900966}.doc-canvas .doc-content ul[data-type=taskList] input[type=checkbox]{cursor:pointer}.doc-canvas .doc-content a{cursor:text}::highlight(doc-search){background-color:#facc1573}::highlight(doc-search-current){background-color:#f973168c}.document-compare[data-v-f3136664]{box-sizing:border-box;border:1px solid var(--nuvra-border,#dcdfe6);background:#e9ebef;border-radius:10px;flex-direction:column;min-height:0;display:flex;overflow:hidden}.document-compare__summary[data-v-f3136664]{border-bottom:1px solid var(--nuvra-border,#dcdfe6);color:#606266;background:#fff;flex-wrap:wrap;gap:12px;padding:8px 14px;font:13px/1.4 system-ui,sans-serif;display:flex}.document-compare__count.is-ins[data-v-f3136664]{color:#15803d}.document-compare__count.is-del[data-v-f3136664]{color:#b91c1c}.document-compare__scroll[data-v-f3136664]{flex:auto;min-height:0;padding:24px;overflow:auto}.document-compare__sheet[data-v-f3136664]{box-sizing:border-box;background:#fff;max-width:794px;margin:0 auto;padding:48px 56px;box-shadow:0 0 0 1px #1018280f,0 2px 8px #1018281a}.document-compare__sheet[data-v-f3136664] ins.doc-diff-ins{color:#166534;background:#dcfce7;text-decoration:underline}.document-compare__sheet[data-v-f3136664] del.doc-diff-del{color:#991b1b;background:#fee2e2;text-decoration:line-through}.document-compare__sheet[data-v-f3136664] .doc-diff-block--ins{background:#f0fdf4;border-left:3px solid #22c55e;margin:0 -8px;padding:0 6px}.document-compare__sheet[data-v-f3136664] .doc-diff-block--del{opacity:.8;background:#fef2f2;border-left:3px solid #ef4444;margin:0 -8px;padding:0 6px;text-decoration:line-through}@media (width<=640px){.document-compare__scroll[data-v-f3136664]{padding:8px}.document-compare__sheet[data-v-f3136664]{padding:20px 16px}}.doc-icon[data-v-4e391eda]{flex:none}.doc-bubble[data-v-588db7c2]{z-index:2100;box-sizing:border-box;border:1px solid var(--nuvra-border-light);color:var(--nuvra-text);background:var(--nuvra-bg-overlay);border-radius:8px;align-items:center;gap:1px;margin:0;padding:3px;display:flex;position:fixed;inset:auto;overflow:visible;box-shadow:0 6px 20px #10182829}.doc-bubble.is-hidden[data-v-588db7c2]{visibility:hidden}.doc-bubble__divider[data-v-588db7c2]{background:var(--nuvra-border-lighter);flex:0 0 1px;align-self:stretch;margin:3px 4px}.doc-bubble .doc-tb-button.is-danger[data-v-588db7c2]:hover:not(:disabled){color:var(--nuvra-color-danger);background:var(--nuvra-color-danger-soft)}.doc-bubble__link[data-v-588db7c2]{max-width:260px;color:var(--nuvra-color-primary);align-items:center;gap:5px;padding:0 6px;font-size:12px;text-decoration:none;display:inline-flex}.doc-bubble__link span[data-v-588db7c2]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.doc-bubble__form[data-v-588db7c2]{gap:4px;width:280px;display:flex}.object-overlay[data-v-7da0d742]{z-index:3;pointer-events:none;position:absolute;inset:0}.object-overlay__image[data-v-7da0d742]{box-sizing:border-box;outline-offset:1px;outline:2px solid #3b82f6;position:absolute}.object-overlay__handle[data-v-7da0d742]{box-sizing:border-box;pointer-events:auto;background:#fff;border:1.5px solid #3b82f6;border-radius:2px;width:10px;height:10px;position:absolute}.object-overlay__handle.is-top-left[data-v-7da0d742]{cursor:nwse-resize;top:-6px;left:-6px}.object-overlay__handle.is-top-right[data-v-7da0d742]{cursor:nesw-resize;top:-6px;right:-6px}.object-overlay__handle.is-bottom-left[data-v-7da0d742]{cursor:nesw-resize;bottom:-6px;left:-6px}.object-overlay__handle.is-bottom-right[data-v-7da0d742]{cursor:nwse-resize;bottom:-6px;right:-6px}.object-overlay__size[data-v-7da0d742]{color:#fff;background:#101828bf;border-radius:4px;padding:2px 6px;font:11px/16px system-ui,sans-serif;position:absolute;bottom:4px;right:4px}.object-overlay__guide[data-v-7da0d742]{border-left:1px dashed #3b82f6;width:0;position:absolute}.doc-ruler[data-v-0d39d609]{box-sizing:border-box;border:1px solid var(--nuvra-border-lighter);background:var(--nuvra-fill);-webkit-user-select:none;user-select:none;border-radius:4px;height:26px;position:relative}.doc-ruler__text-area[data-v-0d39d609]{background:var(--nuvra-bg);position:absolute;top:0;bottom:0}.doc-ruler__tick[data-v-0d39d609]{background:var(--nuvra-text-placeholder);pointer-events:none;width:1px;height:4px;margin-top:-2px;position:absolute;top:50%}.doc-ruler__tick.is-labelled[data-v-0d39d609]{background:0 0}.doc-ruler__tick i[data-v-0d39d609]{color:var(--nuvra-text-muted);font:9px/1 system-ui,sans-serif;position:absolute;top:-5px;left:50%;transform:translate(-50%)}.doc-ruler__handle[data-v-0d39d609]{cursor:ew-resize;background:0 0;border:0;width:14px;height:8px;padding:0;position:absolute;transform:translate(-7px)}.doc-ruler__handle[data-v-0d39d609]:disabled{cursor:default}.doc-ruler__handle[data-v-0d39d609]:before{background:var(--nuvra-color-primary);content:"";opacity:.7;position:absolute;inset:1px 2px}.doc-ruler__handle[data-v-0d39d609]:hover:before,.doc-ruler__handle.is-dragging[data-v-0d39d609]:before{opacity:1}.doc-ruler__handle--first-line[data-v-0d39d609]{top:0}.doc-ruler__handle--first-line[data-v-0d39d609]:before{clip-path:polygon(0 0,100% 0,50% 100%)}.doc-ruler__handle--indent-left[data-v-0d39d609],.doc-ruler__handle--indent-right[data-v-0d39d609]{bottom:0}.doc-ruler__handle--indent-left[data-v-0d39d609]:before,.doc-ruler__handle--indent-right[data-v-0d39d609]:before{clip-path:polygon(50% 0,100% 100%,0 100%)}.doc-ruler__handle--margin[data-v-0d39d609]{height:8px;top:8px}.doc-ruler__handle--margin[data-v-0d39d609]:before{background:var(--nuvra-text-muted);border-radius:1px;inset:0 6px}.doc-ruler__guide[data-v-0d39d609]{background:var(--nuvra-color-primary);opacity:.5;pointer-events:none;width:1px;height:60vh;position:absolute;top:100%}.doc-canvas[data-v-ba796fc9]{box-sizing:border-box;min-height:0;padding:var(--doc-editor-canvas-padding);overscroll-behavior:contain;background:#e9ebef;flex:auto;position:relative;overflow:auto}.doc-canvas.is-auto[data-v-ba796fc9]{min-height:var(--doc-editor-min-height);max-height:var(--doc-editor-max-height);flex:none}.doc-canvas__sizer[data-v-ba796fc9]{margin:0 auto;position:relative}.doc-canvas__ruler[data-v-ba796fc9]{z-index:3;top:calc(-1 * var(--doc-editor-canvas-padding));box-sizing:border-box;width:max-content;min-width:calc(100% + 2 * var(--doc-editor-canvas-padding));margin:calc(-1 * var(--doc-editor-canvas-padding)) calc(-1 * var(--doc-editor-canvas-padding)) 16px;padding:8px var(--doc-editor-canvas-padding);background:inherit;position:sticky}.doc-canvas__ruler-track[data-v-ba796fc9]{margin:0 auto}.doc-canvas__stage[data-v-ba796fc9]{--page-height:1123px;--pages-height:1123px;--margin-top:96px;--margin-right:96px;--margin-bottom:96px;--margin-left:96px;--page-break-label:"";transform-origin:0 0;position:absolute;top:0;left:0}.doc-canvas.is-web .doc-canvas__stage[data-v-ba796fc9]{background:#fff;box-shadow:0 0 0 1px #1018280f,0 1px 4px #10182814}.doc-canvas__sheets[data-v-ba796fc9]{pointer-events:none;position:absolute;inset:0}.doc-canvas__sheet[data-v-ba796fc9]{width:100%;height:var(--page-height);background:#fff;position:absolute;left:0;box-shadow:0 0 0 1px #1018280f,0 2px 8px #1018281a}.doc-canvas__page-number[data-v-ba796fc9]{right:0;bottom:calc(var(--margin-bottom) / 2 - 8px);color:#98a2b3;text-align:center;font:11px/16px system-ui,sans-serif;position:absolute;left:0}.doc-canvas__watermark[data-v-ba796fc9]{letter-spacing:.06em;opacity:.16;text-transform:uppercase;white-space:nowrap;justify-content:center;align-items:center;font-family:Times New Roman,Times,serif;font-weight:700;line-height:1;display:flex;position:absolute;inset:0;overflow:hidden}.doc-canvas__footnotes[data-v-ba796fc9]{right:var(--margin-right);bottom:var(--margin-bottom);left:var(--margin-left);position:absolute}.doc-canvas.is-web .doc-canvas__web-footnotes[data-v-ba796fc9]{padding:0 56px 32px}.doc-canvas.is-auto.is-web .doc-canvas__web-footnotes[data-v-ba796fc9]{padding:0 20px 16px}.doc-canvas__running[data-v-ba796fc9]{right:var(--margin-right);left:var(--margin-left);color:#475467;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;font:10pt/1.4 Times New Roman,Times,serif;display:grid;position:absolute}.doc-canvas__running span[data-v-ba796fc9]{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.doc-canvas__running span[data-v-ba796fc9]:nth-child(2){text-align:center}.doc-canvas__running span[data-v-ba796fc9]:nth-child(3){text-align:right}.doc-canvas__running--header[data-v-ba796fc9]{top:max(6px, calc(var(--margin-top) / 2 - 8px))}.doc-canvas__running--footer[data-v-ba796fc9]{bottom:max(6px, calc(var(--margin-bottom) / 2 - 8px))}.doc-canvas__content[data-v-ba796fc9]{box-sizing:border-box;min-height:inherit;caret-color:#1f2328;outline:none;position:relative}.doc-canvas.is-page .doc-canvas__content[data-v-ba796fc9]{min-height:var(--pages-height);padding:var(--margin-top) var(--margin-right) var(--margin-bottom) var(--margin-left)}.doc-canvas.is-web .doc-canvas__content[data-v-ba796fc9]{padding:40px 56px}.doc-canvas.is-auto.is-web .doc-canvas__content[data-v-ba796fc9]{padding:16px 20px}.doc-changes[data-v-ca9e4ab5]{z-index:5;box-sizing:border-box;border-left:1px solid var(--nuvra-border);background:var(--nuvra-bg);width:min(300px,85%);box-shadow:var(--nuvra-shadow);color:var(--nuvra-text);flex-direction:column;font-size:13px;display:flex;position:absolute;top:0;bottom:0;right:0}.doc-changes__header[data-v-ca9e4ab5]{border-bottom:1px solid var(--nuvra-border);color:var(--nuvra-text-strong);justify-content:space-between;align-items:center;padding:6px 6px 6px 12px;font-weight:600;display:flex}.doc-changes__all[data-v-ca9e4ab5]{border-bottom:1px solid var(--nuvra-border-lighter);flex-wrap:wrap;gap:6px;padding:8px;display:flex}.doc-changes__list[data-v-ca9e4ab5]{flex:auto;align-content:start;gap:8px;min-height:0;padding:8px;display:grid;overflow:auto}.doc-changes__card[data-v-ca9e4ab5]{border:1px solid var(--nuvra-border-light);cursor:pointer;border-left-width:3px;border-radius:8px;gap:4px;padding:8px 10px;display:grid}.doc-changes__card.is-insert[data-v-ca9e4ab5]{border-left-color:#22c55e}.doc-changes__card.is-delete[data-v-ca9e4ab5]{border-left-color:#ef4444}.doc-changes__meta[data-v-ca9e4ab5]{color:var(--nuvra-text-muted);flex-wrap:wrap;align-items:baseline;gap:6px;font-size:11px;display:flex}.doc-changes__meta strong[data-v-ca9e4ab5]{color:var(--nuvra-text-strong);font-size:12px}.doc-changes__text[data-v-ca9e4ab5]{color:var(--nuvra-text-strong);white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.doc-changes__card.is-delete .doc-changes__text[data-v-ca9e4ab5]{text-decoration:line-through}.doc-changes__tools[data-v-ca9e4ab5]{cursor:default;gap:2px;margin:2px -4px -2px;display:flex}.doc-changes__tools .doc-tb-button[data-v-ca9e4ab5]{height:24px;font-size:12px}.doc-changes__empty[data-v-ca9e4ab5]{color:var(--nuvra-text-muted);margin:0;padding:8px 4px}.doc-comments[data-v-0ae8b470]{z-index:5;box-sizing:border-box;border-left:1px solid var(--nuvra-border);background:var(--nuvra-bg);width:min(300px,85%);box-shadow:var(--nuvra-shadow);color:var(--nuvra-text);flex-direction:column;font-size:13px;display:flex;position:absolute;top:0;bottom:0;right:0}.doc-comments__header[data-v-0ae8b470]{border-bottom:1px solid var(--nuvra-border);color:var(--nuvra-text-strong);justify-content:space-between;align-items:center;padding:6px 6px 6px 12px;font-weight:600;display:flex}.doc-comments__list[data-v-0ae8b470]{flex:auto;align-content:start;gap:8px;min-height:0;padding:8px;display:grid;overflow:auto}.doc-comments__card[data-v-0ae8b470]{border:1px solid var(--nuvra-border-light);background:var(--nuvra-bg);cursor:pointer;border-radius:8px;gap:4px;padding:8px 10px;display:grid}.doc-comments__card.is-active[data-v-0ae8b470],.doc-comments__card.is-draft[data-v-0ae8b470]{border-color:var(--nuvra-color-primary-border);box-shadow:0 0 0 2px var(--nuvra-color-primary-soft)}.doc-comments__card.is-draft[data-v-0ae8b470],.doc-comments__card.is-detached[data-v-0ae8b470]{cursor:default}.doc-comments__card.is-resolved[data-v-0ae8b470]{opacity:.7}.doc-comments__meta[data-v-0ae8b470]{color:var(--nuvra-text-muted);flex-wrap:wrap;align-items:baseline;gap:6px;font-size:11px;display:flex}.doc-comments__meta strong[data-v-0ae8b470]{color:var(--nuvra-text-strong);font-size:12px}.doc-comments__badge[data-v-0ae8b470]{color:var(--nuvra-color-primary);background:var(--nuvra-color-primary-soft);border-radius:999px;padding:0 6px}.doc-comments__text[data-v-0ae8b470]{color:var(--nuvra-text-strong);white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.doc-comments__note[data-v-0ae8b470]{color:var(--nuvra-color-danger);margin:0;font-size:11px}.doc-comments__reply-item[data-v-0ae8b470]{border-left:2px solid var(--nuvra-border-light);gap:2px;margin-left:8px;padding-left:8px;display:grid}.doc-comments__textarea[data-v-0ae8b470]{box-sizing:border-box;border:1px solid var(--nuvra-border);width:100%;color:var(--nuvra-text-strong);background:var(--nuvra-bg);font:inherit;resize:vertical;border-radius:6px;outline:none;padding:6px 8px}.doc-comments__textarea[data-v-0ae8b470]:focus{border-color:var(--nuvra-color-primary)}.doc-comments__reply[data-v-0ae8b470]{cursor:default;gap:6px;margin-top:4px;display:grid}.doc-comments__actions[data-v-0ae8b470]{justify-content:flex-end;gap:6px;display:flex}.doc-comments__tools[data-v-0ae8b470]{cursor:default;flex-wrap:wrap;gap:2px;margin:2px -4px -2px;display:flex}.doc-comments__tools .doc-tb-button[data-v-0ae8b470]{height:24px;font-size:12px}.doc-comments__delete[data-v-0ae8b470]{margin-left:auto}.doc-comments__delete[data-v-0ae8b470]:hover:not(:disabled){color:var(--nuvra-color-danger)}.doc-comments__empty[data-v-0ae8b470]{color:var(--nuvra-text-muted);margin:0;padding:8px 4px}.doc-context-menu[data-v-4ef1fd0b]{z-index:3000;box-sizing:border-box;max-height:80vh;padding:var(--doc-popover-padding,4px);border:1px solid var(--nuvra-border-light);color:var(--nuvra-text);background:var(--nuvra-bg-overlay);box-shadow:var(--nuvra-shadow);text-align:left;border-radius:10px;margin:0;font-size:14px;line-height:1.4;position:fixed;inset:auto;overflow:auto}.doc-context-menu[data-v-4ef1fd0b]:not(.is-open){display:none}.find-bar[data-v-d9d0df82]{z-index:5;border:1px solid var(--nuvra-border-light);background:var(--nuvra-bg-overlay);box-shadow:var(--nuvra-shadow);border-radius:10px;align-items:flex-start;gap:2px;padding:5px;display:flex;position:absolute;top:8px;right:20px}.find-bar__rows[data-v-d9d0df82]{gap:5px;display:grid}.find-bar__row[data-v-d9d0df82]{align-items:center;gap:1px;display:flex}.find-bar__input[data-v-d9d0df82]{width:220px;margin-right:4px}.find-bar__count[data-v-d9d0df82]{color:var(--nuvra-text-muted);font-variant-numeric:tabular-nums;font-size:11px}.find-bar__chevron[data-v-d9d0df82]{transition:transform .15s}.is-active>.find-bar__chevron[data-v-d9d0df82]{transform:rotate(90deg)}.find-bar__text-button[data-v-d9d0df82]{padding:0 8px;font-size:12px}@container (width<=560px){.find-bar[data-v-d9d0df82]{left:8px;right:8px}.find-bar__rows[data-v-d9d0df82]{flex:auto;min-width:0}.find-bar__input[data-v-d9d0df82]{flex:auto;width:auto}}.doc-footnote-form[data-v-c17c834c]{z-index:6;box-sizing:border-box;border:1px solid var(--nuvra-border-light);background:var(--nuvra-bg-overlay);box-shadow:var(--nuvra-shadow);color:var(--nuvra-text);border-radius:8px;gap:8px;padding:10px;font-size:12px;display:grid;position:absolute}.doc-footnote-form__label[data-v-c17c834c]{color:var(--nuvra-text-strong);gap:4px;font-weight:600;display:grid}.doc-footnote-form__text[data-v-c17c834c]{box-sizing:border-box;border:1px solid var(--nuvra-border);width:100%;color:var(--nuvra-text-strong);background:var(--nuvra-bg);font:inherit;resize:vertical;border-radius:6px;outline:none;padding:6px 8px;font-weight:400}.doc-footnote-form__text[data-v-c17c834c]:focus{border-color:var(--nuvra-color-primary)}.doc-footnote-form__actions[data-v-c17c834c]{justify-content:flex-end;gap:6px;display:flex}.doc-footnote-form__remove[data-v-c17c834c]{margin-right:auto}.doc-outline[data-v-69049683]{z-index:5;box-sizing:border-box;border-right:1px solid var(--nuvra-border);background:var(--nuvra-bg);width:min(260px,80%);box-shadow:var(--nuvra-shadow);color:var(--nuvra-text);flex-direction:column;font-size:13px;display:flex;position:absolute;top:0;bottom:0;left:0}.doc-outline__header[data-v-69049683]{border-bottom:1px solid var(--nuvra-border);color:var(--nuvra-text-strong);justify-content:space-between;align-items:center;padding:6px 6px 6px 12px;font-weight:600;display:flex}.doc-outline__list[data-v-69049683]{flex:auto;min-height:0;margin:0;padding:6px;list-style:none;overflow:auto}.doc-outline__item[data-v-69049683]{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;align-items:baseline;gap:8px;padding:5px 8px;display:flex}.doc-outline__item[data-v-69049683]:hover,.doc-outline__item[data-v-69049683]:focus-visible{background:var(--nuvra-fill);outline:none}.doc-outline__item.is-level-1[data-v-69049683]{font-weight:600}.doc-outline__text[data-v-69049683]{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.doc-outline__page[data-v-69049683]{color:var(--nuvra-text-muted);font-variant-numeric:tabular-nums;font-size:11px}.doc-outline__empty[data-v-69049683]{color:var(--nuvra-text-muted);margin:0;padding:16px 12px}.doc-slash-menu[data-v-b53ae3f1]{z-index:6;box-sizing:border-box;border:1px solid var(--nuvra-border-light);background:var(--nuvra-bg-overlay);box-shadow:var(--nuvra-shadow);border-radius:8px;align-content:start;padding:4px;position:absolute;overflow:auto}.doc-slash-menu .doc-menu__item.is-active[data-v-b53ae3f1]{color:var(--nuvra-color-primary);background:var(--nuvra-color-primary-soft)}.doc-slash-menu__label[data-v-b53ae3f1]{text-overflow:ellipsis;overflow:hidden}.status-bar[data-v-5c305db4]{border-top:1px solid var(--nuvra-border-lighter);min-height:32px;color:var(--nuvra-text-muted);background:var(--nuvra-bg);-webkit-user-select:none;user-select:none;flex:none;justify-content:space-between;align-items:center;gap:12px;padding:0 6px 0 12px;font-size:12px;display:flex}.status-bar__info[data-v-5c305db4]{white-space:nowrap;gap:14px;min-width:0;display:flex;overflow:hidden}.is-limit[data-v-5c305db4]{color:var(--nuvra-color-danger);font-weight:600}.status-bar__controls[data-v-5c305db4]{flex:none;align-items:center;gap:1px;display:flex}.status-bar .doc-tb-button[data-v-5c305db4]{min-width:24px;height:24px;font-size:12px}.status-bar__segmented[data-v-5c305db4]{background:var(--nuvra-fill);border-radius:7px;margin-right:6px;padding:2px;display:flex}.status-bar__segmented .doc-tb-button[data-v-5c305db4]{height:20px}.status-bar__segmented .doc-tb-button.is-active[data-v-5c305db4]{background:var(--nuvra-bg);box-shadow:0 1px 2px #1018281f}.status-bar__slider[data-v-5c305db4]{--slider-line:var(--nuvra-text-placeholder);--slider-thumb:var(--nuvra-text);cursor:pointer;background:linear-gradient(var(--slider-line), var(--slider-line)) calc(2px + (100% - 4px) * var(--v0fabfa1f)) 50% / 1px 8px no-repeat, linear-gradient(var(--slider-line), var(--slider-line)) 0 50% / 100% 1px no-repeat;appearance:none;width:100px;height:16px;margin:0 2px;padding:0}.status-bar__slider[data-v-5c305db4]:focus{outline:none}.status-bar__slider[data-v-5c305db4]::-webkit-slider-runnable-track{background:0 0;height:16px}.status-bar__slider[data-v-5c305db4]::-moz-range-track{background:0 0;height:16px}.status-bar__slider[data-v-5c305db4]::-webkit-slider-thumb{background:var(--slider-thumb);appearance:none;border:none;border-radius:1px;width:4px;height:12px;margin-top:2px;transition:background-color .15s}.status-bar__slider[data-v-5c305db4]::-moz-range-thumb{background:var(--slider-thumb);border:none;border-radius:1px;width:4px;height:12px;transition:background-color .15s}.status-bar__slider[data-v-5c305db4]:hover,.status-bar__slider[data-v-5c305db4]:active{--slider-thumb:var(--nuvra-color-primary)}.status-bar__slider[data-v-5c305db4]:focus-visible::-webkit-slider-thumb{outline:2px solid var(--nuvra-color-primary-border);outline-offset:1px}.status-bar__slider[data-v-5c305db4]:focus-visible::-moz-range-thumb{outline:2px solid var(--nuvra-color-primary-border);outline-offset:1px}.status-bar .status-bar__zoom-step[data-v-5c305db4]{min-width:20px;height:20px;padding:0}.status-bar__zoom[data-v-5c305db4]{font-variant-numeric:tabular-nums;min-width:40px}@container (width<=560px){.status-bar__slider[data-v-5c305db4],.status-bar__segmented[data-v-5c305db4]{display:none}}.doc-popover[data-v-cae67a7a],.doc-popover__reference[data-v-cae67a7a]{align-items:center;display:inline-flex}.doc-popover__panel[data-v-cae67a7a]{z-index:3000;box-sizing:border-box;padding:var(--doc-popover-padding,10px);border:1px solid var(--nuvra-border-light);color:var(--nuvra-text);background:var(--nuvra-bg-overlay);box-shadow:var(--nuvra-shadow);text-align:left;border-radius:10px;margin:0;font-size:14px;line-height:1.4;position:fixed;inset:auto;overflow:auto}.doc-popover__panel[data-v-cae67a7a]:not(.is-open){display:none}.color-picker[data-v-16f6edba]{align-items:center;display:inline-flex}.color-picker__apply[data-v-16f6edba]{min-width:26px;padding-bottom:3px;position:relative}.color-picker__letter[data-v-16f6edba]{font-family:Georgia,serif;font-size:15px;font-weight:700}.color-picker__bar[data-v-16f6edba]{border-radius:1px;height:3px;position:absolute;bottom:4px;left:6px;right:6px;box-shadow:inset 0 0 0 1px #0000001f}.palette[data-v-16f6edba]{gap:8px;display:grid}.palette__reset[data-v-16f6edba],.palette__custom[data-v-16f6edba]{height:28px;color:var(--nuvra-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;padding:0 6px;font-size:13px;display:flex}.palette__reset[data-v-16f6edba]:hover,.palette__custom[data-v-16f6edba]:hover{background:var(--nuvra-fill)}.palette__reset-swatch[data-v-16f6edba]{box-sizing:border-box;border:1px solid var(--nuvra-border);border-radius:3px;width:16px;height:16px}.palette__reset-swatch.is-text[data-v-16f6edba]{background:#1f2328}.palette__reset-swatch.is-highlight[data-v-16f6edba]{background:linear-gradient(to top right,#fff calc(50% - 1px),#e11d48 50%,#fff calc(50% + 1px))}.palette__grid[data-v-16f6edba]{grid-template-columns:repeat(10,18px);justify-content:space-between;gap:3px;display:grid}.palette__swatch[data-v-16f6edba]{cursor:pointer;border:1px solid #0000001f;border-radius:3px;width:18px;height:18px;padding:0;transition:transform .1s}.palette__swatch[data-v-16f6edba]:hover{transform:scale(1.15)}.palette__swatch.is-selected[data-v-16f6edba]{box-shadow:0 0 0 2px #fff, 0 0 0 3.5px var(--nuvra-color-primary)}.palette__custom input[data-v-16f6edba]{cursor:pointer;background:0 0;border:0;width:22px;height:22px;padding:0}.header-footer[data-v-f0c03cd3]{color:var(--nuvra-text);gap:12px;display:grid}.header-footer__section[data-v-f0c03cd3]{gap:6px;display:grid}.header-footer__section h4[data-v-f0c03cd3]{color:var(--nuvra-text-strong);margin:0;font-size:12px;font-weight:600}.header-footer__grid[data-v-f0c03cd3]{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;display:grid}.header-footer__field[data-v-f0c03cd3]{color:var(--nuvra-text-muted);gap:3px;font-size:11px;display:grid}.header-footer__tokens[data-v-f0c03cd3]{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.header-footer__numbering[data-v-f0c03cd3]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 12px;font-size:12px;display:flex}.header-footer__check[data-v-f0c03cd3],.header-footer__number[data-v-f0c03cd3]{align-items:center;gap:6px;display:inline-flex}.header-footer__number .doc-input[data-v-f0c03cd3]{width:72px}.header-footer__actions[data-v-f0c03cd3]{justify-content:space-between;align-items:center;gap:8px;display:flex}.header-footer__caption[data-v-f0c03cd3]{color:var(--nuvra-text-muted);font-size:11px}.page-setup[data-v-c560a634]{color:var(--nuvra-text);gap:12px;display:grid}.page-setup__section[data-v-c560a634]{gap:6px;display:grid}.page-setup__section h4[data-v-c560a634]{color:var(--nuvra-text-strong);margin:0;font-size:12px;font-weight:600}.page-setup__grid[data-v-c560a634]{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;display:grid}.page-setup__grid--sizes[data-v-c560a634],.page-setup__grid--presets[data-v-c560a634]{grid-template-columns:repeat(3,minmax(0,1fr))}.page-setup__chip[data-v-c560a634]{border:1px solid var(--nuvra-border);min-width:0;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border-radius:6px;flex-direction:column;align-items:flex-start;gap:1px;padding:5px 8px;font-size:12px;display:flex}.page-setup__chip[data-v-c560a634]:hover{border-color:var(--nuvra-color-primary-border)}.page-setup__chip.is-active[data-v-c560a634]{border-color:var(--nuvra-color-primary);color:var(--nuvra-color-primary);background:var(--nuvra-color-primary-soft)}.page-setup__chip--row[data-v-c560a634]{flex-direction:row;align-items:center;gap:6px}.page-setup__chip small[data-v-c560a634]{color:var(--nuvra-text-muted);white-space:nowrap;font-size:10px}.page-setup__caption[data-v-c560a634]{color:var(--nuvra-text-muted);margin-top:4px;font-size:11px}.page-setup__field[data-v-c560a634]{color:var(--nuvra-text-muted);gap:3px;font-size:11px;display:grid}.page-setup__color[data-v-c560a634]{height:28px;padding:2px}.page-setup__checkbox[data-v-c560a634]{align-self:end;padding-bottom:4px}.table-picker[data-v-e2298f4b]{gap:6px;display:grid}.table-picker__grid[data-v-e2298f4b]{grid-template-columns:repeat(10,16px);gap:3px;display:grid}.table-picker__cell[data-v-e2298f4b]{border:1px solid var(--nuvra-border);background:var(--nuvra-bg);cursor:pointer;border-radius:2px;width:16px;height:16px;padding:0}.table-picker__cell.is-active[data-v-e2298f4b]{border-color:var(--nuvra-color-primary);background:var(--nuvra-color-primary-muted)}.table-picker__size[data-v-e2298f4b]{color:var(--nuvra-text);text-align:center;font-size:12px}.doc-toolbar[data-v-f35179e9]{box-sizing:border-box;border-bottom:1px solid var(--nuvra-border-lighter);background:var(--nuvra-bg);scrollbar-width:thin;flex:none;align-items:center;gap:2px;min-height:40px;padding:5px 8px;display:flex;overflow-x:auto}.doc-toolbar__group[data-v-f35179e9]{flex:none;align-items:center;gap:1px;display:flex}.doc-toolbar__divider[data-v-f35179e9]{background:var(--nuvra-border-lighter);flex:0 0 1px;align-self:stretch;margin:4px 5px}.doc-toolbar__spacer[data-v-f35179e9]{flex:auto;min-width:8px}.doc-toolbar__group--end[data-v-f35179e9]{background:var(--nuvra-bg);padding-left:6px;position:sticky;right:0}.doc-toolbar__block[data-v-f35179e9]{width:108px}.doc-toolbar__font[data-v-f35179e9]{width:118px}.doc-toolbar__size[data-v-f35179e9]{text-align:center;width:44px;height:28px;padding:0 4px}.doc-toolbar[data-v-f35179e9] .doc-toolbar__size-menu{min-width:96px}.doc-toolbar__form[data-v-f35179e9]{gap:8px;display:grid}.doc-toolbar__field[data-v-f35179e9]{color:var(--nuvra-text-muted);gap:4px;font-size:12px;display:grid}.doc-toolbar__form-actions[data-v-f35179e9]{justify-content:flex-end;gap:6px;display:flex}.doc-toolbar__caption[data-v-f35179e9]{color:var(--nuvra-text-muted);text-align:center;font-size:11px}.doc-toolbar__inline-form[data-v-f35179e9]{gap:6px;display:flex}.doc-toolbar__characters[data-v-f35179e9]{grid-template-columns:repeat(9,minmax(0,1fr));gap:2px;display:grid}.doc-toolbar__characters button[data-v-f35179e9]{height:26px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px;padding:0;font-size:15px}.doc-toolbar__characters button[data-v-f35179e9]:hover{background:var(--nuvra-fill)}.document-editor[data-v-e9a2bcfc]{--doc-editor-canvas-padding:50px;--doc-editor-height:760px;--doc-editor-min-height:240px;--doc-editor-max-height:600px;box-sizing:border-box;width:100%;min-width:0;height:var(--doc-editor-height);border:1px solid var(--nuvra-border);background:var(--nuvra-bg);border-radius:10px;flex-direction:column;min-height:360px;transition:border-color .16s;display:flex;position:relative;overflow:hidden;container-type:inline-size}.document-editor[data-v-e9a2bcfc]:focus-within{border-color:var(--nuvra-color-primary-border)}.document-editor.is-auto-height[data-v-e9a2bcfc]{height:auto;min-height:0}.document-editor.is-fullscreen[data-v-e9a2bcfc]{z-index:var(--nuvra-fullscreen-z-index);border:0;border-radius:0;height:100dvh;position:fixed;inset:0}.document-editor__body[data-v-e9a2bcfc]{flex-direction:column;flex:auto;min-height:0;display:flex;position:relative}.document-editor__source[data-v-e9a2bcfc]{box-sizing:border-box;color:#1f2328;resize:none;tab-size:2;background:#fbfcfd;border:0;outline:none;flex:auto;min-height:0;margin:0;padding:16px 20px;font:13px/1.6 ui-monospace,SFMono-Regular,Consolas,monospace}.document-editor__uploading[data-v-e9a2bcfc]{color:#fff;pointer-events:none;background:#101828cc;border-radius:999px;padding:6px 12px;font-size:12px;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}.document-form[data-v-57d71548]{box-sizing:border-box;border:1px solid var(--nuvra-border,#dcdfe6);background:#e9ebef;border-radius:10px;padding:24px;overflow:auto}.document-form__sheet[data-v-57d71548]{box-sizing:border-box;background:#fff;max-width:794px;margin:0 auto;padding:48px 56px;box-shadow:0 0 0 1px #1018280f,0 2px 8px #1018281a}.document-form__sheet[data-v-57d71548] .doc-form-field input{box-sizing:content-box;max-width:100%;color:inherit;font:inherit;line-height:inherit;background:#ecf5ff;border:0;border-bottom:1px solid #409eff;border-radius:2px 2px 0 0;outline:none;margin:0 1px;padding:0 3px}.document-form__sheet[data-v-57d71548] .doc-form-field input:focus{background:#d9ecff;box-shadow:0 1px #409eff}.document-form__sheet[data-v-57d71548] .doc-form-field input::placeholder{color:#79bbff}.document-form__sheet[data-v-57d71548] .doc-form-field input.is-invalid{background:#fef0f0;border-bottom-color:#f56c6c}.document-form__sheet[data-v-57d71548] .doc-form-field input:read-only{background:0 0;border-bottom-color:#0000}@media (width<=640px){.document-form[data-v-57d71548]{padding:8px}.document-form__sheet[data-v-57d71548]{padding:20px 16px}}
|
|
1
|
+
.doc-content{color:#1f2328;white-space:pre-wrap;overflow-wrap:break-word;tab-size:4;font-family:Times New Roman,Times,serif;font-size:12pt;line-height:1.5}.doc-content :is(p,h1,h2,h3,h4,h5,h6):not([dir]){unicode-bidi:plaintext}.doc-content p{margin:0 0 6pt}.doc-content h1,.doc-content h2,.doc-content h3,.doc-content h4,.doc-content h5,.doc-content h6{margin:0 0 6pt;padding-top:6pt;font-weight:700;line-height:1.25}.doc-content h1{font-size:20pt}.doc-content h2{font-size:16pt}.doc-content h3{font-size:14pt}.doc-content h4{font-size:12pt}.doc-content h5{font-size:11pt}.doc-content h6{font-size:10pt}.doc-content ul,.doc-content ol{margin:0 0 6pt;padding-left:24pt}.doc-content li>p{margin-bottom:2pt}.doc-content ol[data-numbering=legal],.doc-content ol[data-numbering=legal] ol{counter-reset:doc-legal;padding-left:0;list-style:none}.doc-content ol[data-numbering=legal]>li,.doc-content ol[data-numbering=legal] ol>li{counter-increment:doc-legal;grid-template-columns:auto minmax(0,1fr);column-gap:6pt;display:grid}.doc-content ol[data-numbering=legal]>li:before,.doc-content ol[data-numbering=legal] ol>li:before{content:counters(doc-legal, ".") ".";grid-area:1/1}.doc-content ol[data-numbering=legal] li>*{grid-column:2}.doc-content ol[data-numbering=legal] ol{margin:2pt 0 0}.doc-content ul[data-type=taskList]{padding-left:2pt;list-style:none}.doc-content ul[data-type=taskList] li{align-items:flex-start;gap:6pt;display:flex}.doc-content ul[data-type=taskList] li>label{-webkit-user-select:none;user-select:none;flex:none;margin-top:.3em}.doc-content ul[data-type=taskList] li>div{flex:auto;min-width:0}.doc-content ul[data-type=taskList] li[data-checked=true]>div{color:#667085;text-decoration:line-through}.doc-content blockquote{color:#475467;border-left:3px solid #b3c5f5;margin:0 0 6pt;padding:2pt 0 2pt 12pt}.doc-content blockquote>p:last-child,.doc-content li>p:last-child,.doc-content td>p:last-child,.doc-content th>p:last-child{margin-bottom:0}.doc-content pre{white-space:pre-wrap;background:#f4f6f8;border-radius:4px;margin:0 0 6pt;padding:8pt 10pt;font-family:Consolas,Courier New,monospace;font-size:10pt;line-height:1.45}.doc-content code{background:#eef1f4;border-radius:3px;padding:1px 4px;font-family:Consolas,Courier New,monospace;font-size:.9em}.doc-content pre code{font-size:inherit;background:0 0;padding:0}.doc-content hr{border:0;border-bottom:1px solid #c4cad4;height:0;margin:0 0 6pt;padding-top:6pt}.doc-content a{color:#1d4ed8;text-decoration:underline}.doc-content mark{color:inherit;border-radius:2px;padding:0 1px}.doc-content img{max-width:100%;height:auto}.doc-content img[data-align=left]{margin:0 auto 6pt 0;display:block}.doc-content img[data-align=center]{margin:0 auto 6pt;display:block}.doc-content img[data-align=right]{margin:0 0 6pt auto;display:block}.doc-content table{border-collapse:collapse;table-layout:fixed;width:100%;margin:0 0 6pt}.doc-content td,.doc-content th{box-sizing:border-box;vertical-align:top;border:1px solid #8f99a8;min-width:1em;padding:3pt 5pt}.doc-content th{text-align:left;background:#f2f4f7;font-weight:700}.doc-content table[data-type=signature] td,.doc-content table[data-type=signature] th,.doc-content table[data-type=toc] td,.doc-content table[data-type=toc] th{background:0 0;border:0;padding:0 5pt}.doc-content table[data-type=toc] tr:first-child td{padding-bottom:6pt}.doc-content ins[data-change]{color:#15803d;text-decoration:underline}.doc-content del[data-change]{color:#b91c1c;text-decoration:line-through}.doc-content{counter-reset:doc-footnote}.doc-content sup[data-footnote]{counter-increment:doc-footnote}.doc-content sup[data-footnote]:empty:after{content:counter(doc-footnote)}.doc-footnotes{box-sizing:border-box;color:#1f2328;padding-top:4pt;font:10pt/1.3 Times New Roman,Times,serif}.doc-footnotes:before{content:"";border-top:1px solid #667085;width:33%;margin-bottom:3pt;display:block}.doc-footnotes p{text-align:justify;margin:0 0 2pt}.doc-content .doc-page-break{break-after:page;page-break-after:always;height:0}:where(.document-editor){--nuvra-color-primary:#409eff;--nuvra-color-primary-hover:#79bbff;--nuvra-color-primary-border:#a0cfff;--nuvra-color-primary-muted:#c6e2ff;--nuvra-color-primary-soft:#ecf5ff;--nuvra-color-on-primary:#fff;--nuvra-color-danger:#f56c6c;--nuvra-color-danger-soft:#fef0f0;--nuvra-text-strong:#303133;--nuvra-text:#606266;--nuvra-text-muted:#909399;--nuvra-text-placeholder:#a8abb2;--nuvra-text-disabled:#c0c4cc;--nuvra-border:#dcdfe6;--nuvra-border-hover:#c0c4cc;--nuvra-border-light:#e4e7ed;--nuvra-border-lighter:#ebeef5;--nuvra-fill:#f5f7fa;--nuvra-bg:#fff;--nuvra-bg-overlay:#fff;--nuvra-shadow:0 0 12px #0000001f;--nuvra-fullscreen-z-index:2000}:where(.dark .document-editor,[data-theme=dark] .document-editor){--nuvra-color-primary-hover:#66b1ff;--nuvra-color-primary-border:#2a598a;--nuvra-color-primary-muted:#213d5b;--nuvra-color-primary-soft:#18222c;--nuvra-color-danger-soft:#2b1d1d;--nuvra-text-strong:#e5eaf3;--nuvra-text:#cfd3dc;--nuvra-text-muted:#a3a6ad;--nuvra-text-placeholder:#8d9095;--nuvra-text-disabled:#6c6e72;--nuvra-border:#4c4d4f;--nuvra-border-hover:#6c6e72;--nuvra-border-light:#414243;--nuvra-border-lighter:#363637;--nuvra-fill:#262727;--nuvra-bg:#141414;--nuvra-bg-overlay:#1d1e1f;--nuvra-shadow:0 0 12px #000000b8}.doc-content.is-format-painter{cursor:copy}.doc-content.doc-show-marks p:after,.doc-content.doc-show-marks h1:after,.doc-content.doc-show-marks h2:after,.doc-content.doc-show-marks h3:after,.doc-content.doc-show-marks h4:after,.doc-content.doc-show-marks h5:after,.doc-content.doc-show-marks h6:after{content:"¶";color:var(--nuvra-color-primary);opacity:.55;pointer-events:none;-webkit-user-select:none;user-select:none;margin-left:1px;font-family:system-ui,sans-serif;font-weight:400}.doc-tb-button{box-sizing:border-box;min-width:28px;height:28px;color:var(--nuvra-text);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;gap:4px;padding:0 5px;font-size:13px;line-height:1;transition:background-color .12s,color .12s;display:inline-flex}.doc-tb-button:hover:not(:disabled){background:var(--nuvra-fill)}.doc-tb-button:focus-visible{outline:2px solid var(--nuvra-color-primary);outline-offset:-2px}.doc-tb-button.is-active{color:var(--nuvra-color-primary);background:var(--nuvra-color-primary-soft)}.doc-tb-button:disabled{color:var(--nuvra-text-disabled);cursor:not-allowed}.doc-tb-button--select{justify-content:space-between;padding:0 4px 0 7px}.doc-tb-button--caret{min-width:16px;padding:0 2px}.doc-tb-button__label{text-overflow:ellipsis;overflow:hidden}.doc-menu{--doc-popover-padding:4px}.doc-menu__items{min-width:168px;display:grid}.doc-menu__item{box-sizing:border-box;width:100%;color:var(--nuvra-text);font:inherit;text-align:left;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:6px;outline:none;align-items:center;gap:8px;padding:5px 12px 5px 8px;font-size:13px;line-height:20px;display:flex}.doc-menu__item:hover,.doc-menu__item:focus-visible{color:var(--nuvra-color-primary);background:var(--nuvra-color-primary-soft)}.doc-menu__item.is-selected{color:var(--nuvra-color-primary);font-weight:600}.doc-menu__item.is-danger:hover,.doc-menu__item.is-danger:focus-visible{color:var(--nuvra-color-danger);background:var(--nuvra-color-danger-soft)}.doc-menu__item:disabled{color:var(--nuvra-text-disabled);cursor:default;background:0 0}.doc-menu__divider{background:var(--nuvra-border-lighter);height:1px;margin:4px 0}.doc-menu__hint{color:var(--nuvra-text-placeholder);margin-left:auto;padding-left:20px;font-size:11px;font-weight:400}.doc-menu__h1{font-size:18px;font-weight:700}.doc-menu__h2{font-size:16px;font-weight:700}.doc-menu__h3{font-size:15px;font-weight:700}.doc-menu__h4{font-size:14px;font-weight:700}.doc-input{box-sizing:border-box;border:1px solid var(--nuvra-border);width:100%;min-width:0;height:24px;color:var(--nuvra-text);background:var(--nuvra-bg);font:inherit;border-radius:4px;outline:none;margin:0;padding:0 7px;font-size:12px;transition:border-color .12s}.doc-input::placeholder{color:var(--nuvra-text-placeholder)}.doc-input:hover{border-color:var(--nuvra-border-hover)}.doc-input:focus,.doc-input:focus-within{border-color:var(--nuvra-color-primary)}.doc-input--affix{align-items:center;gap:6px;display:inline-flex}.doc-input--affix input{min-width:0;height:100%;color:inherit;font:inherit;background:0 0;border:0;outline:none;flex:auto;margin:0;padding:0}.doc-input--affix input::placeholder{color:var(--nuvra-text-placeholder)}.doc-btn{box-sizing:border-box;border:1px solid var(--nuvra-border);height:24px;color:var(--nuvra-text);background:var(--nuvra-bg);font:inherit;white-space:nowrap;cursor:pointer;border-radius:4px;flex:none;justify-content:center;align-items:center;gap:5px;margin:0;padding:0 11px;font-size:12px;line-height:1;transition:background-color .12s,border-color .12s,color .12s;display:inline-flex}.doc-btn:hover:not(:disabled){border-color:var(--nuvra-color-primary-muted);color:var(--nuvra-color-primary);background:var(--nuvra-color-primary-soft)}.doc-btn:focus-visible{outline:2px solid var(--nuvra-color-primary-border);outline-offset:1px}.doc-btn:disabled{border-color:var(--nuvra-border-lighter);color:var(--nuvra-text-placeholder);cursor:not-allowed}.doc-btn--primary{border-color:var(--nuvra-color-primary);color:var(--nuvra-color-on-primary);background:var(--nuvra-color-primary)}.doc-btn--primary:hover:not(:disabled){border-color:var(--nuvra-color-primary-hover);color:var(--nuvra-color-on-primary);background:var(--nuvra-color-primary-hover)}.doc-btn--primary:disabled{border-color:var(--nuvra-color-primary-border);color:var(--nuvra-color-on-primary);background:var(--nuvra-color-primary-border)}.doc-btn--danger-text{color:var(--nuvra-color-danger);background:0 0;border-color:#0000}.doc-btn--danger-text:hover:not(:disabled){color:var(--nuvra-color-danger);background:var(--nuvra-color-danger-soft);border-color:#0000}.doc-checkbox{color:var(--nuvra-text);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;font-size:12px;display:inline-flex}.doc-checkbox input{width:13px;height:13px;accent-color:var(--nuvra-color-primary);cursor:pointer;margin:0}.doc-spin{animation:1s linear infinite doc-spin}@keyframes doc-spin{to{transform:rotate(360deg)}}.doc-canvas .doc-content{--doc-placeholder:""}.doc-canvas .doc-content.is-empty>p:first-child:before{float:left;color:#98a2b3;content:var(--doc-placeholder);pointer-events:none;height:0}.doc-canvas.is-page .doc-content>[data-doc-rotated]{margin-right:var(--rotated-shift,0px)}.doc-canvas.is-page .doc-content>table[data-doc-rotated]{width:calc(100% - var(--rotated-shift,0px))}.doc-canvas .doc-content .doc-page-break{cursor:default;-webkit-user-select:none;user-select:none;height:18px;margin-bottom:6pt;position:relative}.doc-canvas .doc-content .doc-page-break:before{content:"";border-top:1px dashed #98a2b3;position:absolute;top:50%;left:0;right:0}.doc-canvas .doc-content .doc-page-break:after{color:#667085;letter-spacing:.04em;text-transform:uppercase;content:var(--page-break-label);background:#fff;padding:0 8px;font:10px/16px system-ui,sans-serif;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.doc-canvas .doc-content .doc-section-break:before{border-top-style:double;border-top-width:3px}.doc-canvas .doc-content .doc-section-break[data-orientation=landscape]:after{content:var(--section-landscape-label)}.doc-canvas .doc-content .doc-section-break[data-orientation=portrait]:after{content:var(--section-portrait-label)}.doc-canvas .doc-content td,.doc-canvas .doc-content th{position:relative}.doc-canvas .doc-content .doc-cell-selected:after{content:"";pointer-events:none;background:#3b82f629;position:absolute;inset:0}.doc-canvas .doc-content.has-cell-selection ::selection{background:0 0}.doc-canvas .doc-content.is-column-resize,.doc-canvas .doc-content.is-column-resize *{cursor:col-resize}.doc-canvas .doc-content table[data-type=signature] td,.doc-canvas .doc-content table[data-type=signature] th{border:1px dashed #d0d5dd}.doc-canvas .doc-content sup[data-footnote]{color:var(--nuvra-color-primary,#409eff);cursor:pointer;border-radius:2px;padding:0 1px}.doc-canvas .doc-content sup[data-footnote]:hover{background:var(--nuvra-color-primary-soft,#ecf5ff)}.doc-canvas .doc-content span[data-comment]{background:#facc1538;border-bottom:2px solid #f5c542}.doc-canvas .doc-content span[data-comment].is-active{background:#facc1573}.doc-canvas .doc-content span[data-comment].is-resolved{background:0 0;border-bottom:0}.doc-canvas .doc-content table[data-type=toc]{outline-offset:2px;outline:1px dashed #d0d5dd}.doc-canvas .doc-content .doc-variable{color:var(--nuvra-color-primary,#409eff);background:color-mix(in srgb, var(--nuvra-color-primary,#409eff) 12%, transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--nuvra-color-primary,#409eff) 35%, transparent);cursor:default;-webkit-user-select:all;user-select:all;border-radius:3px;padding:0 3px}.doc-canvas .doc-content .doc-variable:before{content:attr(data-label)}.doc-canvas .doc-content .doc-variable.is-unknown{color:#b54708;background:#f790091f;box-shadow:inset 0 0 0 1px #f7900966}.doc-canvas .doc-content ul[data-type=taskList] input[type=checkbox]{cursor:pointer}.doc-canvas .doc-content a{cursor:text}::highlight(doc-search){background-color:#facc1573}::highlight(doc-search-current){background-color:#f973168c}.document-compare[data-v-f3136664]{box-sizing:border-box;border:1px solid var(--nuvra-border,#dcdfe6);background:#e9ebef;border-radius:10px;flex-direction:column;min-height:0;display:flex;overflow:hidden}.document-compare__summary[data-v-f3136664]{border-bottom:1px solid var(--nuvra-border,#dcdfe6);color:#606266;background:#fff;flex-wrap:wrap;gap:12px;padding:8px 14px;font:13px/1.4 system-ui,sans-serif;display:flex}.document-compare__count.is-ins[data-v-f3136664]{color:#15803d}.document-compare__count.is-del[data-v-f3136664]{color:#b91c1c}.document-compare__scroll[data-v-f3136664]{flex:auto;min-height:0;padding:24px;overflow:auto}.document-compare__sheet[data-v-f3136664]{box-sizing:border-box;background:#fff;max-width:794px;margin:0 auto;padding:48px 56px;box-shadow:0 0 0 1px #1018280f,0 2px 8px #1018281a}.document-compare__sheet[data-v-f3136664] ins.doc-diff-ins{color:#166534;background:#dcfce7;text-decoration:underline}.document-compare__sheet[data-v-f3136664] del.doc-diff-del{color:#991b1b;background:#fee2e2;text-decoration:line-through}.document-compare__sheet[data-v-f3136664] .doc-diff-block--ins{background:#f0fdf4;border-left:3px solid #22c55e;margin:0 -8px;padding:0 6px}.document-compare__sheet[data-v-f3136664] .doc-diff-block--del{opacity:.8;background:#fef2f2;border-left:3px solid #ef4444;margin:0 -8px;padding:0 6px;text-decoration:line-through}@media (width<=640px){.document-compare__scroll[data-v-f3136664]{padding:8px}.document-compare__sheet[data-v-f3136664]{padding:20px 16px}}.doc-icon[data-v-4e391eda]{flex:none}.doc-bubble[data-v-588db7c2]{z-index:2100;box-sizing:border-box;border:1px solid var(--nuvra-border-light);color:var(--nuvra-text);background:var(--nuvra-bg-overlay);border-radius:8px;align-items:center;gap:1px;margin:0;padding:3px;display:flex;position:fixed;inset:auto;overflow:visible;box-shadow:0 6px 20px #10182829}.doc-bubble.is-hidden[data-v-588db7c2]{visibility:hidden}.doc-bubble__divider[data-v-588db7c2]{background:var(--nuvra-border-lighter);flex:0 0 1px;align-self:stretch;margin:3px 4px}.doc-bubble .doc-tb-button.is-danger[data-v-588db7c2]:hover:not(:disabled){color:var(--nuvra-color-danger);background:var(--nuvra-color-danger-soft)}.doc-bubble__link[data-v-588db7c2]{max-width:260px;color:var(--nuvra-color-primary);align-items:center;gap:5px;padding:0 6px;font-size:12px;text-decoration:none;display:inline-flex}.doc-bubble__link span[data-v-588db7c2]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.doc-bubble__form[data-v-588db7c2]{gap:4px;width:280px;display:flex}.object-overlay[data-v-7da0d742]{z-index:3;pointer-events:none;position:absolute;inset:0}.object-overlay__image[data-v-7da0d742]{box-sizing:border-box;outline-offset:1px;outline:2px solid #3b82f6;position:absolute}.object-overlay__handle[data-v-7da0d742]{box-sizing:border-box;pointer-events:auto;background:#fff;border:1.5px solid #3b82f6;border-radius:2px;width:10px;height:10px;position:absolute}.object-overlay__handle.is-top-left[data-v-7da0d742]{cursor:nwse-resize;top:-6px;left:-6px}.object-overlay__handle.is-top-right[data-v-7da0d742]{cursor:nesw-resize;top:-6px;right:-6px}.object-overlay__handle.is-bottom-left[data-v-7da0d742]{cursor:nesw-resize;bottom:-6px;left:-6px}.object-overlay__handle.is-bottom-right[data-v-7da0d742]{cursor:nwse-resize;bottom:-6px;right:-6px}.object-overlay__size[data-v-7da0d742]{color:#fff;background:#101828bf;border-radius:4px;padding:2px 6px;font:11px/16px system-ui,sans-serif;position:absolute;bottom:4px;right:4px}.object-overlay__guide[data-v-7da0d742]{border-left:1px dashed #3b82f6;width:0;position:absolute}.doc-ruler[data-v-0d39d609]{box-sizing:border-box;border:1px solid var(--nuvra-border-lighter);background:var(--nuvra-fill);-webkit-user-select:none;user-select:none;border-radius:4px;height:26px;position:relative}.doc-ruler__text-area[data-v-0d39d609]{background:var(--nuvra-bg);position:absolute;top:0;bottom:0}.doc-ruler__tick[data-v-0d39d609]{background:var(--nuvra-text-placeholder);pointer-events:none;width:1px;height:4px;margin-top:-2px;position:absolute;top:50%}.doc-ruler__tick.is-labelled[data-v-0d39d609]{background:0 0}.doc-ruler__tick i[data-v-0d39d609]{color:var(--nuvra-text-muted);font:9px/1 system-ui,sans-serif;position:absolute;top:-5px;left:50%;transform:translate(-50%)}.doc-ruler__handle[data-v-0d39d609]{cursor:ew-resize;background:0 0;border:0;width:14px;height:8px;padding:0;position:absolute;transform:translate(-7px)}.doc-ruler__handle[data-v-0d39d609]:disabled{cursor:default}.doc-ruler__handle[data-v-0d39d609]:before{background:var(--nuvra-color-primary);content:"";opacity:.7;position:absolute;inset:1px 2px}.doc-ruler__handle[data-v-0d39d609]:hover:before,.doc-ruler__handle.is-dragging[data-v-0d39d609]:before{opacity:1}.doc-ruler__handle--first-line[data-v-0d39d609]{top:0}.doc-ruler__handle--first-line[data-v-0d39d609]:before{clip-path:polygon(0 0,100% 0,50% 100%)}.doc-ruler__handle--indent-left[data-v-0d39d609],.doc-ruler__handle--indent-right[data-v-0d39d609]{bottom:0}.doc-ruler__handle--indent-left[data-v-0d39d609]:before,.doc-ruler__handle--indent-right[data-v-0d39d609]:before{clip-path:polygon(50% 0,100% 100%,0 100%)}.doc-ruler__handle--margin[data-v-0d39d609]{height:8px;top:8px}.doc-ruler__handle--margin[data-v-0d39d609]:before{background:var(--nuvra-text-muted);border-radius:1px;inset:0 6px}.doc-ruler__guide[data-v-0d39d609]{background:var(--nuvra-color-primary);opacity:.5;pointer-events:none;width:1px;height:60vh;position:absolute;top:100%}.doc-canvas[data-v-7678bcdb]{box-sizing:border-box;min-height:0;padding:var(--doc-editor-canvas-padding);overscroll-behavior:contain;background:#e9ebef;flex:auto;position:relative;overflow:auto}.doc-canvas.is-auto[data-v-7678bcdb]{min-height:var(--doc-editor-min-height);max-height:var(--doc-editor-max-height);flex:none}.doc-canvas__sizer[data-v-7678bcdb]{margin:0 auto;position:relative}.doc-canvas__ruler[data-v-7678bcdb]{z-index:3;top:calc(-1 * var(--doc-editor-canvas-padding));box-sizing:border-box;width:max-content;min-width:calc(100% + 2 * var(--doc-editor-canvas-padding));margin:calc(-1 * var(--doc-editor-canvas-padding)) calc(-1 * var(--doc-editor-canvas-padding)) 16px;padding:8px var(--doc-editor-canvas-padding);background:inherit;position:sticky}.doc-canvas__ruler-track[data-v-7678bcdb]{margin:0 auto}.doc-canvas__stage[data-v-7678bcdb]{--page-height:1123px;--pages-height:1123px;--margin-top:96px;--margin-right:96px;--margin-bottom:96px;--margin-left:96px;--page-break-label:"";--section-landscape-label:"";--section-portrait-label:"";transform-origin:0 0;position:absolute;top:0;left:0}.doc-canvas.is-web .doc-canvas__stage[data-v-7678bcdb]{background:#fff;box-shadow:0 0 0 1px #1018280f,0 1px 4px #10182814}.doc-canvas__sheets[data-v-7678bcdb]{pointer-events:none;position:absolute;inset:0}.doc-canvas__sheet[data-v-7678bcdb]{width:100%;height:var(--page-height);background:#fff;position:absolute;left:0;box-shadow:0 0 0 1px #1018280f,0 2px 8px #1018281a}.doc-canvas__page-number[data-v-7678bcdb]{right:0;bottom:calc(var(--margin-bottom) / 2 - 8px);color:#98a2b3;text-align:center;font:11px/16px system-ui,sans-serif;position:absolute;left:0}.doc-canvas__watermark[data-v-7678bcdb]{letter-spacing:.06em;opacity:.16;text-transform:uppercase;white-space:nowrap;justify-content:center;align-items:center;font-family:Times New Roman,Times,serif;font-weight:700;line-height:1;display:flex;position:absolute;inset:0;overflow:hidden}.doc-canvas__footnotes[data-v-7678bcdb]{right:var(--margin-right);bottom:var(--margin-bottom);left:var(--margin-left);position:absolute}.doc-canvas.is-web .doc-canvas__web-footnotes[data-v-7678bcdb]{padding:0 56px 32px}.doc-canvas.is-auto.is-web .doc-canvas__web-footnotes[data-v-7678bcdb]{padding:0 20px 16px}.doc-canvas__running[data-v-7678bcdb]{right:var(--margin-right);left:var(--margin-left);color:#475467;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;font:10pt/1.4 Times New Roman,Times,serif;display:grid;position:absolute}.doc-canvas__running span[data-v-7678bcdb]{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.doc-canvas__running span[data-v-7678bcdb]:nth-child(2){text-align:center}.doc-canvas__running span[data-v-7678bcdb]:nth-child(3){text-align:right}.doc-canvas__running--header[data-v-7678bcdb]{top:max(6px, calc(var(--margin-top) / 2 - 8px))}.doc-canvas__running--footer[data-v-7678bcdb]{bottom:max(6px, calc(var(--margin-bottom) / 2 - 8px))}.doc-canvas__content[data-v-7678bcdb]{box-sizing:border-box;min-height:inherit;caret-color:#1f2328;outline:none;position:relative}.doc-canvas.is-page .doc-canvas__content[data-v-7678bcdb]{width:var(--page-width);min-height:var(--pages-height);padding:var(--margin-top) var(--margin-right) var(--margin-bottom) var(--margin-left)}.doc-canvas.is-web .doc-canvas__content[data-v-7678bcdb]{padding:40px 56px}.doc-canvas.is-auto.is-web .doc-canvas__content[data-v-7678bcdb]{padding:16px 20px}.doc-changes[data-v-ca9e4ab5]{z-index:5;box-sizing:border-box;border-left:1px solid var(--nuvra-border);background:var(--nuvra-bg);width:min(300px,85%);box-shadow:var(--nuvra-shadow);color:var(--nuvra-text);flex-direction:column;font-size:13px;display:flex;position:absolute;top:0;bottom:0;right:0}.doc-changes__header[data-v-ca9e4ab5]{border-bottom:1px solid var(--nuvra-border);color:var(--nuvra-text-strong);justify-content:space-between;align-items:center;padding:6px 6px 6px 12px;font-weight:600;display:flex}.doc-changes__all[data-v-ca9e4ab5]{border-bottom:1px solid var(--nuvra-border-lighter);flex-wrap:wrap;gap:6px;padding:8px;display:flex}.doc-changes__list[data-v-ca9e4ab5]{flex:auto;align-content:start;gap:8px;min-height:0;padding:8px;display:grid;overflow:auto}.doc-changes__card[data-v-ca9e4ab5]{border:1px solid var(--nuvra-border-light);cursor:pointer;border-left-width:3px;border-radius:8px;gap:4px;padding:8px 10px;display:grid}.doc-changes__card.is-insert[data-v-ca9e4ab5]{border-left-color:#22c55e}.doc-changes__card.is-delete[data-v-ca9e4ab5]{border-left-color:#ef4444}.doc-changes__meta[data-v-ca9e4ab5]{color:var(--nuvra-text-muted);flex-wrap:wrap;align-items:baseline;gap:6px;font-size:11px;display:flex}.doc-changes__meta strong[data-v-ca9e4ab5]{color:var(--nuvra-text-strong);font-size:12px}.doc-changes__text[data-v-ca9e4ab5]{color:var(--nuvra-text-strong);white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.doc-changes__card.is-delete .doc-changes__text[data-v-ca9e4ab5]{text-decoration:line-through}.doc-changes__tools[data-v-ca9e4ab5]{cursor:default;gap:2px;margin:2px -4px -2px;display:flex}.doc-changes__tools .doc-tb-button[data-v-ca9e4ab5]{height:24px;font-size:12px}.doc-changes__empty[data-v-ca9e4ab5]{color:var(--nuvra-text-muted);margin:0;padding:8px 4px}.doc-collaborators[data-v-9d98247b]{z-index:2;pointer-events:none;position:absolute;inset:0;overflow:hidden}.doc-collaborators__selection[data-v-9d98247b]{opacity:.22;position:absolute}.doc-collaborators__caret[data-v-9d98247b]{width:2px;margin-left:-1px;position:absolute}.doc-collaborators__name[data-v-9d98247b]{color:#fff;white-space:nowrap;border-radius:3px 3px 3px 0;padding:1px 5px;font:600 11px/16px system-ui,sans-serif;position:absolute;bottom:100%;left:-1px}.doc-comments[data-v-0ae8b470]{z-index:5;box-sizing:border-box;border-left:1px solid var(--nuvra-border);background:var(--nuvra-bg);width:min(300px,85%);box-shadow:var(--nuvra-shadow);color:var(--nuvra-text);flex-direction:column;font-size:13px;display:flex;position:absolute;top:0;bottom:0;right:0}.doc-comments__header[data-v-0ae8b470]{border-bottom:1px solid var(--nuvra-border);color:var(--nuvra-text-strong);justify-content:space-between;align-items:center;padding:6px 6px 6px 12px;font-weight:600;display:flex}.doc-comments__list[data-v-0ae8b470]{flex:auto;align-content:start;gap:8px;min-height:0;padding:8px;display:grid;overflow:auto}.doc-comments__card[data-v-0ae8b470]{border:1px solid var(--nuvra-border-light);background:var(--nuvra-bg);cursor:pointer;border-radius:8px;gap:4px;padding:8px 10px;display:grid}.doc-comments__card.is-active[data-v-0ae8b470],.doc-comments__card.is-draft[data-v-0ae8b470]{border-color:var(--nuvra-color-primary-border);box-shadow:0 0 0 2px var(--nuvra-color-primary-soft)}.doc-comments__card.is-draft[data-v-0ae8b470],.doc-comments__card.is-detached[data-v-0ae8b470]{cursor:default}.doc-comments__card.is-resolved[data-v-0ae8b470]{opacity:.7}.doc-comments__meta[data-v-0ae8b470]{color:var(--nuvra-text-muted);flex-wrap:wrap;align-items:baseline;gap:6px;font-size:11px;display:flex}.doc-comments__meta strong[data-v-0ae8b470]{color:var(--nuvra-text-strong);font-size:12px}.doc-comments__badge[data-v-0ae8b470]{color:var(--nuvra-color-primary);background:var(--nuvra-color-primary-soft);border-radius:999px;padding:0 6px}.doc-comments__text[data-v-0ae8b470]{color:var(--nuvra-text-strong);white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.doc-comments__note[data-v-0ae8b470]{color:var(--nuvra-color-danger);margin:0;font-size:11px}.doc-comments__reply-item[data-v-0ae8b470]{border-left:2px solid var(--nuvra-border-light);gap:2px;margin-left:8px;padding-left:8px;display:grid}.doc-comments__textarea[data-v-0ae8b470]{box-sizing:border-box;border:1px solid var(--nuvra-border);width:100%;color:var(--nuvra-text-strong);background:var(--nuvra-bg);font:inherit;resize:vertical;border-radius:6px;outline:none;padding:6px 8px}.doc-comments__textarea[data-v-0ae8b470]:focus{border-color:var(--nuvra-color-primary)}.doc-comments__reply[data-v-0ae8b470]{cursor:default;gap:6px;margin-top:4px;display:grid}.doc-comments__actions[data-v-0ae8b470]{justify-content:flex-end;gap:6px;display:flex}.doc-comments__tools[data-v-0ae8b470]{cursor:default;flex-wrap:wrap;gap:2px;margin:2px -4px -2px;display:flex}.doc-comments__tools .doc-tb-button[data-v-0ae8b470]{height:24px;font-size:12px}.doc-comments__delete[data-v-0ae8b470]{margin-left:auto}.doc-comments__delete[data-v-0ae8b470]:hover:not(:disabled){color:var(--nuvra-color-danger)}.doc-comments__empty[data-v-0ae8b470]{color:var(--nuvra-text-muted);margin:0;padding:8px 4px}.doc-context-menu[data-v-4ef1fd0b]{z-index:3000;box-sizing:border-box;max-height:80vh;padding:var(--doc-popover-padding,4px);border:1px solid var(--nuvra-border-light);color:var(--nuvra-text);background:var(--nuvra-bg-overlay);box-shadow:var(--nuvra-shadow);text-align:left;border-radius:10px;margin:0;font-size:14px;line-height:1.4;position:fixed;inset:auto;overflow:auto}.doc-context-menu[data-v-4ef1fd0b]:not(.is-open){display:none}.find-bar[data-v-d9d0df82]{z-index:5;border:1px solid var(--nuvra-border-light);background:var(--nuvra-bg-overlay);box-shadow:var(--nuvra-shadow);border-radius:10px;align-items:flex-start;gap:2px;padding:5px;display:flex;position:absolute;top:8px;right:20px}.find-bar__rows[data-v-d9d0df82]{gap:5px;display:grid}.find-bar__row[data-v-d9d0df82]{align-items:center;gap:1px;display:flex}.find-bar__input[data-v-d9d0df82]{width:220px;margin-right:4px}.find-bar__count[data-v-d9d0df82]{color:var(--nuvra-text-muted);font-variant-numeric:tabular-nums;font-size:11px}.find-bar__chevron[data-v-d9d0df82]{transition:transform .15s}.is-active>.find-bar__chevron[data-v-d9d0df82]{transform:rotate(90deg)}.find-bar__text-button[data-v-d9d0df82]{padding:0 8px;font-size:12px}@container (width<=560px){.find-bar[data-v-d9d0df82]{left:8px;right:8px}.find-bar__rows[data-v-d9d0df82]{flex:auto;min-width:0}.find-bar__input[data-v-d9d0df82]{flex:auto;width:auto}}.doc-footnote-form[data-v-c17c834c]{z-index:6;box-sizing:border-box;border:1px solid var(--nuvra-border-light);background:var(--nuvra-bg-overlay);box-shadow:var(--nuvra-shadow);color:var(--nuvra-text);border-radius:8px;gap:8px;padding:10px;font-size:12px;display:grid;position:absolute}.doc-footnote-form__label[data-v-c17c834c]{color:var(--nuvra-text-strong);gap:4px;font-weight:600;display:grid}.doc-footnote-form__text[data-v-c17c834c]{box-sizing:border-box;border:1px solid var(--nuvra-border);width:100%;color:var(--nuvra-text-strong);background:var(--nuvra-bg);font:inherit;resize:vertical;border-radius:6px;outline:none;padding:6px 8px;font-weight:400}.doc-footnote-form__text[data-v-c17c834c]:focus{border-color:var(--nuvra-color-primary)}.doc-footnote-form__actions[data-v-c17c834c]{justify-content:flex-end;gap:6px;display:flex}.doc-footnote-form__remove[data-v-c17c834c]{margin-right:auto}.doc-outline[data-v-6179ae8b]{z-index:5;box-sizing:border-box;border-right:1px solid var(--nuvra-border);background:var(--nuvra-bg);width:min(260px,80%);box-shadow:var(--nuvra-shadow);color:var(--nuvra-text);flex-direction:column;font-size:13px;display:flex;position:absolute;top:0;bottom:0;left:0}.doc-outline__header[data-v-6179ae8b]{border-bottom:1px solid var(--nuvra-border);color:var(--nuvra-text-strong);justify-content:space-between;align-items:center;padding:6px 6px 6px 12px;font-weight:600;display:flex}.doc-outline__tabs[data-v-6179ae8b]{border-bottom:1px solid var(--nuvra-border-lighter);gap:4px;padding:6px 6px 0;display:flex}.doc-outline__tab[data-v-6179ae8b]{color:var(--nuvra-text-muted);font:inherit;cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;padding:4px 10px 6px}.doc-outline__tab.is-active[data-v-6179ae8b]{border-bottom-color:var(--nuvra-color-primary);color:var(--nuvra-text-strong)}.doc-outline__list[data-v-6179ae8b]{flex:auto;min-height:0;margin:0;padding:6px;list-style:none;overflow:auto}.doc-outline__item[data-v-6179ae8b]{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;align-items:baseline;gap:8px;padding:5px 8px;display:flex}.doc-outline__item[data-v-6179ae8b]:hover,.doc-outline__item[data-v-6179ae8b]:focus-visible{background:var(--nuvra-fill);outline:none}.doc-outline__item.is-level-1[data-v-6179ae8b]{font-weight:600}.doc-outline__text[data-v-6179ae8b]{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.doc-outline__page[data-v-6179ae8b]{color:var(--nuvra-text-muted);font-variant-numeric:tabular-nums;font-size:11px}.doc-outline__pages[data-v-6179ae8b]{align-content:start;justify-items:center;gap:10px;padding:10px 6px;display:grid}.doc-outline__thumbnail[data-v-6179ae8b]{cursor:pointer;background:0 0;border:0;border-radius:6px;justify-items:center;gap:4px;padding:4px;display:grid}.doc-outline__thumbnail:hover .doc-outline__frame[data-v-6179ae8b],.doc-outline__thumbnail:focus-visible .doc-outline__frame[data-v-6179ae8b]{outline:2px solid var(--nuvra-color-primary)}.doc-outline__thumbnail[data-v-6179ae8b]:focus-visible{outline:none}.doc-outline__frame[data-v-6179ae8b]{pointer-events:none;background:#fff;display:block;position:relative;overflow:hidden;box-shadow:0 0 0 1px #1018281f}.doc-outline__sheet[data-v-6179ae8b]{box-sizing:border-box;text-align:left;transform-origin:0 0;display:block;position:absolute;top:0;left:0;overflow:hidden}.doc-outline__empty[data-v-6179ae8b]{color:var(--nuvra-text-muted);margin:0;padding:16px 12px}.doc-slash-menu[data-v-b53ae3f1]{z-index:6;box-sizing:border-box;border:1px solid var(--nuvra-border-light);background:var(--nuvra-bg-overlay);box-shadow:var(--nuvra-shadow);border-radius:8px;align-content:start;padding:4px;position:absolute;overflow:auto}.doc-slash-menu .doc-menu__item.is-active[data-v-b53ae3f1]{color:var(--nuvra-color-primary);background:var(--nuvra-color-primary-soft)}.doc-slash-menu__label[data-v-b53ae3f1]{text-overflow:ellipsis;overflow:hidden}.status-bar[data-v-5c305db4]{border-top:1px solid var(--nuvra-border-lighter);min-height:32px;color:var(--nuvra-text-muted);background:var(--nuvra-bg);-webkit-user-select:none;user-select:none;flex:none;justify-content:space-between;align-items:center;gap:12px;padding:0 6px 0 12px;font-size:12px;display:flex}.status-bar__info[data-v-5c305db4]{white-space:nowrap;gap:14px;min-width:0;display:flex;overflow:hidden}.is-limit[data-v-5c305db4]{color:var(--nuvra-color-danger);font-weight:600}.status-bar__controls[data-v-5c305db4]{flex:none;align-items:center;gap:1px;display:flex}.status-bar .doc-tb-button[data-v-5c305db4]{min-width:24px;height:24px;font-size:12px}.status-bar__segmented[data-v-5c305db4]{background:var(--nuvra-fill);border-radius:7px;margin-right:6px;padding:2px;display:flex}.status-bar__segmented .doc-tb-button[data-v-5c305db4]{height:20px}.status-bar__segmented .doc-tb-button.is-active[data-v-5c305db4]{background:var(--nuvra-bg);box-shadow:0 1px 2px #1018281f}.status-bar__slider[data-v-5c305db4]{--slider-line:var(--nuvra-text-placeholder);--slider-thumb:var(--nuvra-text);cursor:pointer;background:linear-gradient(var(--slider-line), var(--slider-line)) calc(2px + (100% - 4px) * var(--v0fabfa1f)) 50% / 1px 8px no-repeat, linear-gradient(var(--slider-line), var(--slider-line)) 0 50% / 100% 1px no-repeat;appearance:none;width:100px;height:16px;margin:0 2px;padding:0}.status-bar__slider[data-v-5c305db4]:focus{outline:none}.status-bar__slider[data-v-5c305db4]::-webkit-slider-runnable-track{background:0 0;height:16px}.status-bar__slider[data-v-5c305db4]::-moz-range-track{background:0 0;height:16px}.status-bar__slider[data-v-5c305db4]::-webkit-slider-thumb{background:var(--slider-thumb);appearance:none;border:none;border-radius:1px;width:4px;height:12px;margin-top:2px;transition:background-color .15s}.status-bar__slider[data-v-5c305db4]::-moz-range-thumb{background:var(--slider-thumb);border:none;border-radius:1px;width:4px;height:12px;transition:background-color .15s}.status-bar__slider[data-v-5c305db4]:hover,.status-bar__slider[data-v-5c305db4]:active{--slider-thumb:var(--nuvra-color-primary)}.status-bar__slider[data-v-5c305db4]:focus-visible::-webkit-slider-thumb{outline:2px solid var(--nuvra-color-primary-border);outline-offset:1px}.status-bar__slider[data-v-5c305db4]:focus-visible::-moz-range-thumb{outline:2px solid var(--nuvra-color-primary-border);outline-offset:1px}.status-bar .status-bar__zoom-step[data-v-5c305db4]{min-width:20px;height:20px;padding:0}.status-bar__zoom[data-v-5c305db4]{font-variant-numeric:tabular-nums;min-width:40px}@container (width<=560px){.status-bar__slider[data-v-5c305db4],.status-bar__segmented[data-v-5c305db4]{display:none}}.doc-popover[data-v-cae67a7a],.doc-popover__reference[data-v-cae67a7a]{align-items:center;display:inline-flex}.doc-popover__panel[data-v-cae67a7a]{z-index:3000;box-sizing:border-box;padding:var(--doc-popover-padding,10px);border:1px solid var(--nuvra-border-light);color:var(--nuvra-text);background:var(--nuvra-bg-overlay);box-shadow:var(--nuvra-shadow);text-align:left;border-radius:10px;margin:0;font-size:14px;line-height:1.4;position:fixed;inset:auto;overflow:auto}.doc-popover__panel[data-v-cae67a7a]:not(.is-open){display:none}.color-picker[data-v-16f6edba]{align-items:center;display:inline-flex}.color-picker__apply[data-v-16f6edba]{min-width:26px;padding-bottom:3px;position:relative}.color-picker__letter[data-v-16f6edba]{font-family:Georgia,serif;font-size:15px;font-weight:700}.color-picker__bar[data-v-16f6edba]{border-radius:1px;height:3px;position:absolute;bottom:4px;left:6px;right:6px;box-shadow:inset 0 0 0 1px #0000001f}.palette[data-v-16f6edba]{gap:8px;display:grid}.palette__reset[data-v-16f6edba],.palette__custom[data-v-16f6edba]{height:28px;color:var(--nuvra-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;padding:0 6px;font-size:13px;display:flex}.palette__reset[data-v-16f6edba]:hover,.palette__custom[data-v-16f6edba]:hover{background:var(--nuvra-fill)}.palette__reset-swatch[data-v-16f6edba]{box-sizing:border-box;border:1px solid var(--nuvra-border);border-radius:3px;width:16px;height:16px}.palette__reset-swatch.is-text[data-v-16f6edba]{background:#1f2328}.palette__reset-swatch.is-highlight[data-v-16f6edba]{background:linear-gradient(to top right,#fff calc(50% - 1px),#e11d48 50%,#fff calc(50% + 1px))}.palette__grid[data-v-16f6edba]{grid-template-columns:repeat(10,18px);justify-content:space-between;gap:3px;display:grid}.palette__swatch[data-v-16f6edba]{cursor:pointer;border:1px solid #0000001f;border-radius:3px;width:18px;height:18px;padding:0;transition:transform .1s}.palette__swatch[data-v-16f6edba]:hover{transform:scale(1.15)}.palette__swatch.is-selected[data-v-16f6edba]{box-shadow:0 0 0 2px #fff, 0 0 0 3.5px var(--nuvra-color-primary)}.palette__custom input[data-v-16f6edba]{cursor:pointer;background:0 0;border:0;width:22px;height:22px;padding:0}.header-footer[data-v-f0c03cd3]{color:var(--nuvra-text);gap:12px;display:grid}.header-footer__section[data-v-f0c03cd3]{gap:6px;display:grid}.header-footer__section h4[data-v-f0c03cd3]{color:var(--nuvra-text-strong);margin:0;font-size:12px;font-weight:600}.header-footer__grid[data-v-f0c03cd3]{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;display:grid}.header-footer__field[data-v-f0c03cd3]{color:var(--nuvra-text-muted);gap:3px;font-size:11px;display:grid}.header-footer__tokens[data-v-f0c03cd3]{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.header-footer__numbering[data-v-f0c03cd3]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 12px;font-size:12px;display:flex}.header-footer__check[data-v-f0c03cd3],.header-footer__number[data-v-f0c03cd3]{align-items:center;gap:6px;display:inline-flex}.header-footer__number .doc-input[data-v-f0c03cd3]{width:72px}.header-footer__actions[data-v-f0c03cd3]{justify-content:space-between;align-items:center;gap:8px;display:flex}.header-footer__caption[data-v-f0c03cd3]{color:var(--nuvra-text-muted);font-size:11px}.page-setup[data-v-c560a634]{color:var(--nuvra-text);gap:12px;display:grid}.page-setup__section[data-v-c560a634]{gap:6px;display:grid}.page-setup__section h4[data-v-c560a634]{color:var(--nuvra-text-strong);margin:0;font-size:12px;font-weight:600}.page-setup__grid[data-v-c560a634]{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;display:grid}.page-setup__grid--sizes[data-v-c560a634],.page-setup__grid--presets[data-v-c560a634]{grid-template-columns:repeat(3,minmax(0,1fr))}.page-setup__chip[data-v-c560a634]{border:1px solid var(--nuvra-border);min-width:0;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border-radius:6px;flex-direction:column;align-items:flex-start;gap:1px;padding:5px 8px;font-size:12px;display:flex}.page-setup__chip[data-v-c560a634]:hover{border-color:var(--nuvra-color-primary-border)}.page-setup__chip.is-active[data-v-c560a634]{border-color:var(--nuvra-color-primary);color:var(--nuvra-color-primary);background:var(--nuvra-color-primary-soft)}.page-setup__chip--row[data-v-c560a634]{flex-direction:row;align-items:center;gap:6px}.page-setup__chip small[data-v-c560a634]{color:var(--nuvra-text-muted);white-space:nowrap;font-size:10px}.page-setup__caption[data-v-c560a634]{color:var(--nuvra-text-muted);margin-top:4px;font-size:11px}.page-setup__field[data-v-c560a634]{color:var(--nuvra-text-muted);gap:3px;font-size:11px;display:grid}.page-setup__color[data-v-c560a634]{height:28px;padding:2px}.page-setup__checkbox[data-v-c560a634]{align-self:end;padding-bottom:4px}.table-picker[data-v-e2298f4b]{gap:6px;display:grid}.table-picker__grid[data-v-e2298f4b]{grid-template-columns:repeat(10,16px);gap:3px;display:grid}.table-picker__cell[data-v-e2298f4b]{border:1px solid var(--nuvra-border);background:var(--nuvra-bg);cursor:pointer;border-radius:2px;width:16px;height:16px;padding:0}.table-picker__cell.is-active[data-v-e2298f4b]{border-color:var(--nuvra-color-primary);background:var(--nuvra-color-primary-muted)}.table-picker__size[data-v-e2298f4b]{color:var(--nuvra-text);text-align:center;font-size:12px}.doc-toolbar[data-v-86fd020e]{box-sizing:border-box;border-bottom:1px solid var(--nuvra-border-lighter);background:var(--nuvra-bg);scrollbar-width:thin;flex:none;align-items:center;gap:2px;min-height:40px;padding:5px 8px;display:flex;overflow-x:auto}.doc-toolbar__group[data-v-86fd020e]{flex:none;align-items:center;gap:1px;display:flex}.doc-toolbar__divider[data-v-86fd020e]{background:var(--nuvra-border-lighter);flex:0 0 1px;align-self:stretch;margin:4px 5px}.doc-toolbar__spacer[data-v-86fd020e]{flex:auto;min-width:8px}.doc-toolbar__group--end[data-v-86fd020e]{background:var(--nuvra-bg);padding-left:6px;position:sticky;right:0}.doc-toolbar__block[data-v-86fd020e]{width:108px}.doc-toolbar__font[data-v-86fd020e]{width:118px}.doc-toolbar__size[data-v-86fd020e]{text-align:center;width:44px;height:28px;padding:0 4px}.doc-toolbar[data-v-86fd020e] .doc-toolbar__size-menu{min-width:96px}.doc-toolbar__form[data-v-86fd020e]{gap:8px;display:grid}.doc-toolbar__field[data-v-86fd020e]{color:var(--nuvra-text-muted);gap:4px;font-size:12px;display:grid}.doc-toolbar__form-actions[data-v-86fd020e]{justify-content:flex-end;gap:6px;display:flex}.doc-toolbar__caption[data-v-86fd020e]{color:var(--nuvra-text-muted);text-align:center;font-size:11px}.doc-toolbar__inline-form[data-v-86fd020e]{gap:6px;display:flex}.doc-toolbar__characters[data-v-86fd020e]{grid-template-columns:repeat(9,minmax(0,1fr));gap:2px;display:grid}.doc-toolbar__characters button[data-v-86fd020e]{height:26px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px;padding:0;font-size:15px}.doc-toolbar__characters button[data-v-86fd020e]:hover{background:var(--nuvra-fill)}.document-editor[data-v-cd464dc9]{--doc-editor-canvas-padding:50px;--doc-editor-height:760px;--doc-editor-min-height:240px;--doc-editor-max-height:600px;box-sizing:border-box;width:100%;min-width:0;height:var(--doc-editor-height);border:1px solid var(--nuvra-border);background:var(--nuvra-bg);border-radius:10px;flex-direction:column;min-height:360px;transition:border-color .16s;display:flex;position:relative;overflow:hidden;container-type:inline-size}.document-editor[data-v-cd464dc9]:focus-within{border-color:var(--nuvra-color-primary-border)}.document-editor.is-auto-height[data-v-cd464dc9]{height:auto;min-height:0}.document-editor.is-fullscreen[data-v-cd464dc9]{z-index:var(--nuvra-fullscreen-z-index);border:0;border-radius:0;height:100dvh;position:fixed;inset:0}.document-editor__body[data-v-cd464dc9]{flex-direction:column;flex:auto;min-height:0;display:flex;position:relative}.document-editor__source[data-v-cd464dc9]{box-sizing:border-box;color:#1f2328;resize:none;tab-size:2;background:#fbfcfd;border:0;outline:none;flex:auto;min-height:0;margin:0;padding:16px 20px;font:13px/1.6 ui-monospace,SFMono-Regular,Consolas,monospace}.document-editor__uploading[data-v-cd464dc9]{color:#fff;pointer-events:none;background:#101828cc;border-radius:999px;padding:6px 12px;font-size:12px;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}.document-form[data-v-57d71548]{box-sizing:border-box;border:1px solid var(--nuvra-border,#dcdfe6);background:#e9ebef;border-radius:10px;padding:24px;overflow:auto}.document-form__sheet[data-v-57d71548]{box-sizing:border-box;background:#fff;max-width:794px;margin:0 auto;padding:48px 56px;box-shadow:0 0 0 1px #1018280f,0 2px 8px #1018281a}.document-form__sheet[data-v-57d71548] .doc-form-field input{box-sizing:content-box;max-width:100%;color:inherit;font:inherit;line-height:inherit;background:#ecf5ff;border:0;border-bottom:1px solid #409eff;border-radius:2px 2px 0 0;outline:none;margin:0 1px;padding:0 3px}.document-form__sheet[data-v-57d71548] .doc-form-field input:focus{background:#d9ecff;box-shadow:0 1px #409eff}.document-form__sheet[data-v-57d71548] .doc-form-field input::placeholder{color:#79bbff}.document-form__sheet[data-v-57d71548] .doc-form-field input.is-invalid{background:#fef0f0;border-bottom-color:#f56c6c}.document-form__sheet[data-v-57d71548] .doc-form-field input:read-only{background:0 0;border-bottom-color:#0000}@media (width<=640px){.document-form[data-v-57d71548]{padding:8px}.document-form__sheet[data-v-57d71548]{padding:20px 16px}}
|
|
2
2
|
/*$vite$:1*/
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"export-DhHI3ZrQ.js","names":[],"sources":["../src/styles/document-content.css?inline","../src/core/export.ts"],"sourcesContent":["/*\n * Typography of the document itself. Shared by the editor page, print output and Word/HTML export,\n * so every rule is plain CSS scoped to `.doc-content`. Vertical rhythm uses bottom margins only:\n * no margin collapsing keeps page layout measurements exact.\n */\n\n/* Base text. Typed spaces are content, so they are kept exactly. */\n.doc-content {\n color: #1f2328;\n font-family: \"Times New Roman\", Times, serif;\n font-size: 12pt;\n line-height: 1.5;\n white-space: pre-wrap;\n overflow-wrap: break-word;\n tab-size: 4;\n}\n\n/* Paragraphs without an explicit direction follow their own text (Arabic and Latin in one document). */\n.doc-content :is(p, h1, h2, h3, h4, h5, h6):not([dir]) {\n unicode-bidi: plaintext;\n}\n\n/* Paragraphs and headings. */\n.doc-content p {\n margin: 0 0 6pt;\n}\n\n.doc-content h1,\n.doc-content h2,\n.doc-content h3,\n.doc-content h4,\n.doc-content h5,\n.doc-content h6 {\n margin: 0 0 6pt;\n padding-top: 6pt;\n font-weight: 700;\n line-height: 1.25;\n}\n\n.doc-content h1 {\n font-size: 20pt;\n}\n\n.doc-content h2 {\n font-size: 16pt;\n}\n\n.doc-content h3 {\n font-size: 14pt;\n}\n\n.doc-content h4 {\n font-size: 12pt;\n}\n\n.doc-content h5 {\n font-size: 11pt;\n}\n\n.doc-content h6 {\n font-size: 10pt;\n}\n\n/* Lists, including task lists with a checkbox label and a content column. */\n.doc-content ul,\n.doc-content ol {\n margin: 0 0 6pt;\n padding-left: 24pt;\n}\n\n.doc-content li > p {\n margin-bottom: 2pt;\n}\n\n/* Legal numbering (1., 1.1., 1.1.1.) for regulations and orders: nested ordered lists continue their parent's number. */\n.doc-content ol[data-numbering=\"legal\"],\n.doc-content ol[data-numbering=\"legal\"] ol {\n padding-left: 0;\n list-style: none;\n counter-reset: doc-legal;\n}\n\n/* The number sits in its own column, so wrapped lines and nested lists align with the item text. */\n.doc-content ol[data-numbering=\"legal\"] > li,\n.doc-content ol[data-numbering=\"legal\"] ol > li {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr);\n column-gap: 6pt;\n counter-increment: doc-legal;\n}\n\n.doc-content ol[data-numbering=\"legal\"] > li::before,\n.doc-content ol[data-numbering=\"legal\"] ol > li::before {\n grid-row: 1;\n grid-column: 1;\n content: counters(doc-legal, \".\") \".\";\n}\n\n.doc-content ol[data-numbering=\"legal\"] li > * {\n grid-column: 2;\n}\n\n.doc-content ol[data-numbering=\"legal\"] ol {\n margin: 2pt 0 0;\n}\n\n.doc-content ul[data-type=\"taskList\"] {\n padding-left: 2pt;\n list-style: none;\n}\n\n.doc-content ul[data-type=\"taskList\"] li {\n display: flex;\n align-items: flex-start;\n gap: 6pt;\n}\n\n.doc-content ul[data-type=\"taskList\"] li > label {\n flex: 0 0 auto;\n margin-top: 0.3em;\n user-select: none;\n}\n\n.doc-content ul[data-type=\"taskList\"] li > div {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.doc-content ul[data-type=\"taskList\"] li[data-checked=\"true\"] > div {\n color: #667085;\n text-decoration: line-through;\n}\n\n/* Quotes. */\n.doc-content blockquote {\n margin: 0 0 6pt;\n padding: 2pt 0 2pt 12pt;\n border-left: 3px solid #b3c5f5;\n color: #475467;\n}\n\n/* The last paragraph of a container adds no space below it. */\n.doc-content blockquote > p:last-child,\n.doc-content li > p:last-child,\n.doc-content td > p:last-child,\n.doc-content th > p:last-child {\n margin-bottom: 0;\n}\n\n/* Code blocks and inline code. */\n.doc-content pre {\n margin: 0 0 6pt;\n padding: 8pt 10pt;\n border-radius: 4px;\n background: #f4f6f8;\n font-family: Consolas, \"Courier New\", monospace;\n font-size: 10pt;\n line-height: 1.45;\n white-space: pre-wrap;\n}\n\n.doc-content code {\n padding: 1px 4px;\n border-radius: 3px;\n background: #eef1f4;\n font-family: Consolas, \"Courier New\", monospace;\n font-size: 0.9em;\n}\n\n.doc-content pre code {\n padding: 0;\n background: none;\n font-size: inherit;\n}\n\n/* Horizontal rule. */\n.doc-content hr {\n height: 0;\n margin: 0 0 6pt;\n padding-top: 6pt;\n border: 0;\n border-bottom: 1px solid #c4cad4;\n}\n\n/* Inline marks. */\n.doc-content a {\n color: #1d4ed8;\n text-decoration: underline;\n}\n\n.doc-content mark {\n padding: 0 1px;\n border-radius: 2px;\n color: inherit;\n}\n\n/* Images are blocks aligned through their data-align attribute. */\n.doc-content img {\n max-width: 100%;\n height: auto;\n}\n\n.doc-content img[data-align=\"left\"] {\n display: block;\n margin: 0 auto 6pt 0;\n}\n\n.doc-content img[data-align=\"center\"] {\n display: block;\n margin: 0 auto 6pt;\n}\n\n.doc-content img[data-align=\"right\"] {\n display: block;\n margin: 0 0 6pt auto;\n}\n\n/* Tables. */\n.doc-content table {\n width: 100%;\n margin: 0 0 6pt;\n border-collapse: collapse;\n table-layout: fixed;\n}\n\n.doc-content td,\n.doc-content th {\n box-sizing: border-box;\n min-width: 1em;\n padding: 3pt 5pt;\n border: 1px solid #8f99a8;\n vertical-align: top;\n}\n\n.doc-content th {\n background: #f2f4f7;\n font-weight: 700;\n text-align: left;\n}\n\n/* Signature blocks and the table of contents are laid out in tables without visible borders. */\n.doc-content table[data-type=\"signature\"] td,\n.doc-content table[data-type=\"signature\"] th,\n.doc-content table[data-type=\"toc\"] td,\n.doc-content table[data-type=\"toc\"] th {\n padding: 0 5pt;\n border: 0;\n background: none;\n}\n\n.doc-content table[data-type=\"toc\"] tr:first-child td {\n padding-bottom: 6pt;\n}\n\n/* Tracked changes are shown, and printed, as reviewers expect them from Word. */\n.doc-content ins[data-change] {\n color: #15803d;\n text-decoration: underline;\n}\n\n.doc-content del[data-change] {\n color: #b91c1c;\n text-decoration: line-through;\n}\n\n/* Footnote references are numbered in document order; saved HTML also carries the number as text. */\n.doc-content {\n counter-reset: doc-footnote;\n}\n\n.doc-content sup[data-footnote] {\n counter-increment: doc-footnote;\n}\n\n.doc-content sup[data-footnote]:empty::after {\n content: counter(doc-footnote);\n}\n\n/* Notes at the bottom of a sheet, under a short rule. */\n.doc-footnotes {\n box-sizing: border-box;\n padding-top: 4pt;\n color: #1f2328;\n font:\n 10pt / 1.3 \"Times New Roman\",\n Times,\n serif;\n}\n\n.doc-footnotes::before {\n display: block;\n width: 33%;\n margin-bottom: 3pt;\n border-top: 1px solid #667085;\n content: \"\";\n}\n\n.doc-footnotes p {\n margin: 0 0 2pt;\n text-align: justify;\n}\n\n/* Manual page break: invisible in print, where it starts a new sheet. */\n.doc-content .doc-page-break {\n height: 0;\n break-after: page;\n page-break-after: always;\n}\n","import contentCss from '../styles/document-content.css?inline';\nimport { type SheetFootnote, footnotesHtml } from './footnotes';\nimport {\n type HeaderFooterContext,\n PAGE_SIZES,\n type PageHeaderFooter,\n type PageSettings,\n type PageWatermark,\n WATERMARK_ANGLE,\n hasHeaderFooterText,\n hasWatermarkText,\n pageNumberOf,\n renderHeaderFooter,\n showsRunningTexts,\n watermarkFontSize\n} from './page';\n\n/** Everything needed to print or export the document. */\ninterface DocumentSnapshot {\n /** Clean document HTML, used when the document is not laid out in sheets. */\n html: string;\n /**\n * Clean HTML of every sheet, in document order. The page view passes it so printing repeats the header and footer\n * with real page numbers and breaks the pages exactly where the editor shows them.\n */\n pages?: string[];\n /** Footnotes of every sheet of `pages`; without pages, the notes of all of them are printed after the document. */\n footnotes?: SheetFootnote[][];\n /** Document title, used for the print title and file names. */\n title: string;\n /** Page size, orientation, margins and the running texts. */\n page: PageSettings;\n}\n\n/** Characters escaped when text is placed into HTML. */\nconst HTML_ESCAPES: Record<string, string> = { '&': '&', '<': '<', '>': '>', '\"': '"', \"'\": ''' };\n/** Characters not allowed in file names on common systems. */\nconst INVALID_FILE_NAME_CHARACTERS = /[\\\\/:*?\"<>|]+/g;\n/** File name used when the title is empty. */\nconst DEFAULT_FILE_NAME = 'document';\n/** Removes the print iframe even when the browser never reports `afterprint`. */\nconst PRINT_CLEANUP_TIMEOUT_MS = 60_000;\n/** Distance a running text keeps from the paper edge when its margin is too small to centre it in, in millimetres. */\nconst MIN_RUNNING_EDGE_MM = 4;\n/** CSS pixels per millimetre at 96 DPI, used to size the watermark for the paper. */\nconst PX_PER_MM = 96 / 25.4;\n/** How faintly the watermark is printed. */\nconst WATERMARK_OPACITY = 0.16;\n/** The three parts of a running text, in the order they are drawn. */\nconst RUNNING_PARTS = ['left', 'center', 'right'] as const;\n/** Styles that keep the print iframe out of view without `display: none`, which would stop it from printing. */\nconst HIDDEN_FRAME_STYLE: Partial<CSSStyleDeclaration> = {\n position: 'fixed',\n left: '-10000px',\n top: '0',\n width: '1px',\n height: '1px',\n border: '0'\n};\n\n/** Escapes text for use inside HTML. */\nconst escapeHtml = (value: string) => value.replace(/[&<>\"']/g, character => HTML_ESCAPES[character] ?? character);\n\n/** Paper width and height in millimetres, in the chosen orientation. */\nconst paperSize = ({ size, orientation }: PageSettings) => {\n const paper = PAGE_SIZES[size] ?? PAGE_SIZES.a4;\n const portrait = orientation === 'portrait';\n return { width: portrait ? paper.width : paper.height, height: portrait ? paper.height : paper.width };\n};\n\n/** CSS declarations for `@page` with the paper size and margins of the page settings. */\nconst pageRule = (page: PageSettings) => {\n const { width, height } = paperSize(page);\n const { margins } = page;\n return `size: ${width}mm ${height}mm; margin: ${margins.top}mm ${margins.right}mm ${margins.bottom}mm ${margins.left}mm;`;\n};\n\n/** Distance of a running text from the top or bottom edge of the paper, centred in its margin. */\nconst runningEdge = (margin: number) => Math.max(MIN_RUNNING_EDGE_MM, margin / 2 - 2);\n\n/** Shared look of the header and footer, both in print and in the exported page. */\nconst RUNNING_CSS = `\n.doc-running { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 12px; color: #475467; font: 10pt/1.4 'Times New Roman', Times, serif; }\n.doc-running span { min-width: 0; overflow: hidden; white-space: pre-wrap; }\n.doc-running span:nth-child(2) { text-align: center; }\n.doc-running span:nth-child(3) { text-align: right; }`;\n\n/** One running text rendered for a page, or an empty string when it holds no text. */\nconst runningHtml = (\n value: PageHeaderFooter | undefined,\n place: 'header' | 'footer',\n context: HeaderFooterContext\n): string => {\n if (!value || !hasHeaderFooterText(value)) return '';\n const parts = RUNNING_PARTS.map(part => `<span>${escapeHtml(renderHeaderFooter(value[part], context))}</span>`).join(\n ''\n );\n return `<div class=\"doc-running doc-running--${place}\">${parts}</div>`;\n};\n\n/** The watermark of a page, or an empty string when the document has none. */\nconst watermarkHtml = (watermark: PageWatermark | undefined): string =>\n hasWatermarkText(watermark) && watermark\n ? `<div class=\"doc-watermark\">${escapeHtml(watermark.text.trim())}</div>`\n : '';\n\n/** Look of the watermark; it is positioned per sheet when the pages are known, and fixed when the document flows. */\nconst watermarkCss = (page: PageSettings, fixed: boolean): string => {\n const { watermark } = page;\n if (!hasWatermarkText(watermark) || !watermark) return '';\n const { width, height } = paperSize(page);\n const size = watermarkFontSize(width * PX_PER_MM, height * PX_PER_MM, watermark.text, watermark.diagonal);\n const rotation = watermark.diagonal ? ` transform: rotate(${WATERMARK_ANGLE}deg);` : '';\n return `\n.doc-watermark { position: ${fixed ? 'fixed' : 'absolute'}; inset: 0; display: flex; align-items: center; justify-content: center; overflow: hidden; color: ${watermark.color}; font: 700 ${size}px/1 'Times New Roman', Times, serif; letter-spacing: 0.06em; opacity: ${WATERMARK_OPACITY}; text-transform: uppercase; white-space: nowrap; pointer-events: none;${rotation} }`;\n};\n\n/** Sheets with their own header and footer, used when the editor knows where the pages break. */\nconst sheetsHtml = (pages: string[], page: PageSettings, title: string, footnotes: SheetFootnote[][] = []): string =>\n pages\n .map((content, index) => {\n const context: HeaderFooterContext = { page: pageNumberOf(page, index + 1), pages: pages.length, title };\n const shown = showsRunningTexts(page, index + 1);\n const header = shown ? runningHtml(page.header, 'header', context) : '';\n const footer = shown ? runningHtml(page.footer, 'footer', context) : '';\n const watermark = watermarkHtml(page.watermark);\n const notes = footnotes[index]?.length\n ? `<div class=\"doc-sheet__notes\">${footnotesHtml(footnotes[index] ?? [])}</div>`\n : '';\n return `<section class=\"doc-sheet\">${watermark}${header}<article class=\"doc-content\">${content}</article>${notes}${footer}</section>`;\n })\n .join('');\n\n/** Page geometry of the sheet layout: the paper is the page box and every sheet carries the margins itself. */\nconst sheetCss = (page: PageSettings) => {\n const { width, height } = paperSize(page);\n const { margins } = page;\n return `@page { size: ${width}mm ${height}mm; margin: 0; }\n.doc-sheet { position: relative; box-sizing: border-box; width: ${width}mm; min-height: ${height}mm; padding: ${margins.top}mm ${margins.right}mm ${margins.bottom}mm ${margins.left}mm; overflow: hidden; background: #fff; break-after: page; }\n.doc-sheet:last-child { break-after: auto; }\n.doc-running { position: absolute; right: ${margins.right}mm; left: ${margins.left}mm; }\n.doc-sheet__notes { position: absolute; right: ${margins.right}mm; bottom: ${margins.bottom}mm; left: ${margins.left}mm; }\n.doc-running--header { top: ${runningEdge(margins.top)}mm; }\n.doc-running--footer { bottom: ${runningEdge(margins.bottom)}mm; }${RUNNING_CSS}${watermarkCss(page, false)}`;\n};\n\n/** Page geometry of the flowing layout, where the browser breaks the pages and repeats the fixed running texts. */\nconst flowCss = (page: PageSettings) => {\n const { margins } = page;\n return `@page { ${pageRule(page)} }\n.doc-running { position: fixed; right: 0; left: 0; }\n.doc-running--header { top: -${runningEdge(margins.top)}mm; }\n.doc-running--footer { bottom: -${runningEdge(margins.bottom)}mm; }${RUNNING_CSS}${watermarkCss(page, true)}`;\n};\n\n/** Turns a document title into a safe file name without extension. */\nexport const toFileName = (title: string): string =>\n title.replace(INVALID_FILE_NAME_CHARACTERS, ' ').trim() || DEFAULT_FILE_NAME;\n\n/**\n * Standalone HTML with the page size, margins and running texts encoded in CSS, used for printing and HTML export.\n * With the sheets of the page view every page carries its own header and footer, so the page numbers are exact and\n * the pages break where the editor shows them; without them the document flows and the browser repeats one fixed\n * header and footer on every page.\n */\nexport const buildPrintableHtml = ({ html, pages, footnotes, title, page }: DocumentSnapshot): string => {\n const paginated = pages !== undefined && pages.length > 0;\n const context: HeaderFooterContext = { page: 1, pages: 1, title };\n const flow = `${watermarkHtml(page.watermark)}${runningHtml(page.header, 'header', context)}${runningHtml(page.footer, 'footer', context)}<article class=\"doc-content\">${html}</article>${footnotesHtml(footnotes?.flat() ?? [])}`;\n return `<!doctype html>\n<html lang=\"uz\">\n<head>\n<meta charset=\"utf-8\">\n<title>${escapeHtml(title)}</title>\n<style>${paginated ? sheetCss(page) : flowCss(page)} html, body { margin: 0; background: #fff; } ${contentCss}</style>\n</head>\n<body>${paginated && pages ? sheetsHtml(pages, page, title, footnotes) : flow}</body>\n</html>`;\n};\n\n/** Offers text or binary content as a file download. */\nexport const downloadFile = (content: string | Blob, fileName: string, type: string): void => {\n const url = URL.createObjectURL(content instanceof Blob ? content : new Blob([content], { type }));\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n link.click();\n setTimeout(() => URL.revokeObjectURL(url), 0);\n};\n\n/** Prints through a detached iframe so the application chrome never ends up on paper. Waits for images first. */\nexport const printHtml = (documentHtml: string): void => {\n const frame = document.createElement('iframe');\n frame.setAttribute('aria-hidden', 'true');\n frame.tabIndex = -1;\n Object.assign(frame.style, HIDDEN_FRAME_STYLE);\n\n /** Removes the iframe once printing is done. */\n const cleanup = () => frame.remove();\n frame.onload = () => {\n const printWindow = frame.contentWindow;\n if (!printWindow) return cleanup();\n const pendingImages = Array.from(printWindow.document.images)\n .filter(image => !image.complete)\n .map(\n image =>\n new Promise(resolve => {\n image.addEventListener('load', resolve, { once: true });\n image.addEventListener('error', resolve, { once: true });\n })\n );\n void Promise.allSettled(pendingImages).then(() => {\n printWindow.addEventListener('afterprint', () => setTimeout(cleanup, 0), { once: true });\n printWindow.focus();\n printWindow.print();\n setTimeout(cleanup, PRINT_CLEANUP_TIMEOUT_MS);\n });\n };\n frame.srcdoc = documentHtml;\n document.body.appendChild(frame);\n};\n"],"mappings":";;;u8HCmCM,IAAuC;CAAE,KAAK;CAAS,KAAK;CAAQ,KAAK;CAAQ,MAAK;CAAU,KAAK;AAAQ,GAE7G,IAA+B,kBAE/B,IAAoB,YAEpB,IAA2B,KAE3B,IAAsB,GAEtB,IAAY,KAAK,MAEjB,IAAoB,KAEpB,IAAgB;CAAC;CAAQ;CAAU;AAAO,GAE1C,IAAmD;CACvD,UAAU;CACV,MAAM;CACN,KAAK;CACL,OAAO;CACP,QAAQ;CACR,QAAQ;AACV,GAGM,KAAc,MAAkB,EAAM,QAAQ,aAAY,MAAa,EAAa,MAAc,CAAS,GAG3G,KAAa,EAAE,SAAM,qBAAgC;CACzD,IAAM,IAAQ,EAAW,MAAS,EAAW,IACvC,IAAW,MAAgB;CACjC,OAAO;EAAE,OAAO,IAAW,EAAM,QAAQ,EAAM;EAAQ,QAAQ,IAAW,EAAM,SAAS,EAAM;CAAM;AACvG,GAGM,KAAY,MAAuB;CACvC,IAAM,EAAE,UAAO,cAAW,EAAU,CAAI,GAClC,EAAE,eAAY;CACpB,OAAO,SAAS,EAAM,KAAK,EAAO,cAAc,EAAQ,IAAI,KAAK,EAAQ,MAAM,KAAK,EAAQ,OAAO,KAAK,EAAQ,KAAK;AACvH,GAGM,KAAe,MAAmB,KAAK,IAAI,GAAqB,IAAS,IAAI,CAAC,GAG9E,IAAc,mXAOd,KACJ,GACA,GACA,MAEI,CAAC,KAAS,CAAC,EAAoB,CAAK,IAAU,KAI3C,wCAAwC,EAAM,IAHvC,EAAc,KAAI,MAAQ,SAAS,EAAW,EAAmB,EAAM,IAAO,CAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,KAC9G,EAEuD,EAAM,SAI3D,KAAiB,MACrB,EAAiB,CAAS,KAAK,IAC3B,8BAA8B,EAAW,EAAU,KAAK,KAAK,CAAC,EAAE,UAChE,IAGA,KAAgB,GAAoB,MAA2B;CACnE,IAAM,EAAE,iBAAc;CACtB,IAAI,CAAC,EAAiB,CAAS,KAAK,CAAC,GAAW,OAAO;CACvD,IAAM,EAAE,UAAO,cAAW,EAAU,CAAI,GAClC,IAAO,EAAkB,IAAQ,GAAW,IAAS,GAAW,EAAU,MAAM,EAAU,QAAQ,GAClG,IAAW,EAAU,WAAW,gCAA+C;CACrF,OAAO;6BACoB,IAAQ,UAAU,WAAW,oGAAoG,EAAU,MAAM,cAAc,EAAK,yEAAyE,EAAkB,yEAAyE,EAAS;AAC9W,GAGM,KAAc,GAAiB,GAAoB,GAAe,IAA+B,CAAC,MACtG,EACG,KAAK,GAAS,MAAU;CACvB,IAAM,IAA+B;EAAE,MAAM,EAAa,GAAM,IAAQ,CAAC;EAAG,OAAO,EAAM;EAAQ;CAAM,GACjG,IAAQ,EAAkB,GAAM,IAAQ,CAAC,GACzC,IAAS,IAAQ,EAAY,EAAK,QAAQ,UAAU,CAAO,IAAI,IAC/D,IAAS,IAAQ,EAAY,EAAK,QAAQ,UAAU,CAAO,IAAI;CAKrE,OAAO,8BAJW,EAAc,EAAK,SAIA,IAAY,EAAO,+BAA+B,EAAQ,YAHjF,EAAU,EAAM,EAAE,SAC5B,iCAAiC,EAAc,EAAU,MAAU,CAAC,CAAC,EAAE,UACvE,KAC+G,EAAO;AAC5H,CAAC,CAAC,CACD,KAAK,EAAE,GAGN,KAAY,MAAuB;CACvC,IAAM,EAAE,UAAO,cAAW,EAAU,CAAI,GAClC,EAAE,eAAY;CACpB,OAAO,iBAAiB,EAAM,KAAK,EAAO;kEACsB,EAAM,kBAAkB,EAAO,eAAe,EAAQ,IAAI,KAAK,EAAQ,MAAM,KAAK,EAAQ,OAAO,KAAK,EAAQ,KAAK;;4CAEzI,EAAQ,MAAM,YAAY,EAAQ,KAAK;iDAClC,EAAQ,MAAM,cAAc,EAAQ,OAAO,YAAY,EAAQ,KAAK;8BACvF,EAAY,EAAQ,GAAG,EAAE;iCACtB,EAAY,EAAQ,MAAM,EAAE,OAAO,IAAc,EAAa,GAAM,EAAK;AAC1G,GAGM,KAAW,MAAuB;CACtC,IAAM,EAAE,eAAY;CACpB,OAAO,WAAW,EAAS,CAAI,EAAE;;+BAEJ,EAAY,EAAQ,GAAG,EAAE;kCACtB,EAAY,EAAQ,MAAM,EAAE,OAAO,IAAc,EAAa,GAAM,EAAI;AAC1G,GAGa,KAAc,MACzB,EAAM,QAAQ,GAA8B,GAAG,CAAC,CAAC,KAAK,KAAK,GAQhD,KAAsB,EAAE,SAAM,UAAO,cAAW,UAAO,cAAqC;CACvG,IAAM,IAAY,MAAU,KAAA,KAAa,EAAM,SAAS,GAClD,IAA+B;EAAE,MAAM;EAAG,OAAO;EAAG;CAAM,GAC1D,IAAO,GAAG,EAAc,EAAK,SAAS,IAAI,EAAY,EAAK,QAAQ,UAAU,CAAO,IAAI,EAAY,EAAK,QAAQ,UAAU,CAAO,EAAE,+BAA+B,EAAK,YAAY,EAAc,GAAW,KAAK,KAAK,CAAC,CAAC;CAC/N,OAAO;;;;SAIA,EAAW,CAAK,EAAE;SAClB,IAAY,EAAS,CAAI,IAAI,EAAQ,CAAI,EAAE,+CAA+C,EAAW;;QAEtG,KAAa,IAAQ,EAAW,GAAO,GAAM,GAAO,CAAS,IAAI,EAAK;;AAE9E,GAGa,KAAgB,GAAwB,GAAkB,MAAuB;CAC5F,IAAM,IAAM,IAAI,gBAAgB,aAAmB,OAAO,IAAU,IAAI,KAAK,CAAC,CAAO,GAAG,EAAE,QAAK,CAAC,CAAC,GAC3F,IAAO,SAAS,cAAc,GAAG;CAIvC,AAHA,EAAK,OAAO,GACZ,EAAK,WAAW,GAChB,EAAK,MAAM,GACX,iBAAiB,IAAI,gBAAgB,CAAG,GAAG,CAAC;AAC9C,GAGa,KAAa,MAA+B;CACvD,IAAM,IAAQ,SAAS,cAAc,QAAQ;CAG7C,AAFA,EAAM,aAAa,eAAe,MAAM,GACxC,EAAM,WAAW,IACjB,OAAO,OAAO,EAAM,OAAO,CAAkB;CAG7C,IAAM,UAAgB,EAAM,OAAO;CAqBnC,AApBA,EAAM,eAAe;EACnB,IAAM,IAAc,EAAM;EAC1B,IAAI,CAAC,GAAa,OAAO,EAAQ;EACjC,IAAM,IAAgB,MAAM,KAAK,EAAY,SAAS,MAAM,CAAC,CAC1D,QAAO,MAAS,CAAC,EAAM,QAAQ,CAAC,CAChC,KACC,MACE,IAAI,SAAQ,MAAW;GAErB,AADA,EAAM,iBAAiB,QAAQ,GAAS,EAAE,MAAM,GAAK,CAAC,GACtD,EAAM,iBAAiB,SAAS,GAAS,EAAE,MAAM,GAAK,CAAC;EACzD,CAAC,CACL;EACF,QAAa,WAAW,CAAa,CAAC,CAAC,WAAW;GAIhD,AAHA,EAAY,iBAAiB,oBAAoB,WAAW,GAAS,CAAC,GAAG,EAAE,MAAM,GAAK,CAAC,GACvF,EAAY,MAAM,GAClB,EAAY,MAAM,GAClB,WAAW,GAAS,CAAwB;EAC9C,CAAC;CACH,GACA,EAAM,SAAS,GACf,SAAS,KAAK,YAAY,CAAK;AACjC"}
|