@shahajimbhosle/local-doc-viewer 1.0.5 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/README.md +38 -4
- package/dist/DocumentViewer.d.ts.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.js +19539 -17904
- package/dist/index.umd.cjs +112 -106
- package/dist/renderers/DocxRenderer.d.ts.map +1 -1
- package/dist/renderers/OdtRenderer.d.ts +3 -0
- package/dist/renderers/OdtRenderer.d.ts.map +1 -0
- package/dist/renderers/PdfRenderer.d.ts.map +1 -1
- package/dist/renderers/RtfRenderer.d.ts +3 -0
- package/dist/renderers/RtfRenderer.d.ts.map +1 -0
- package/dist/renderers/SpreadsheetRenderer.d.ts.map +1 -1
- package/dist/renderers/TextRenderer.d.ts.map +1 -1
- package/dist/renderers/UnsupportedRenderer.d.ts.map +1 -1
- package/dist/renderers/index.d.ts +3 -1
- package/dist/renderers/index.d.ts.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/ods.d.ts.map +1 -1
- package/dist/utils/sanitize.d.ts +3 -0
- package/dist/utils/sanitize.d.ts.map +1 -1
- package/dist/utils/xlsx.d.ts +35 -0
- package/dist/utils/xlsx.d.ts.map +1 -1
- package/package.json +10 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,42 @@ All notable changes to `@shahajimbhosle/local-doc-viewer` will be documented in
|
|
|
4
4
|
|
|
5
5
|
This project follows semantic versioning. Dates use `YYYY-MM-DD`.
|
|
6
6
|
|
|
7
|
+
## [1.0.7] - 2026-07-18
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Added local ODT rendering for OpenDocument Text files, including common paragraphs, headings, spans, lists, tables, links, styles, and embedded images.
|
|
12
|
+
- Added local RTF rendering for Rich Text Format files, including common inline styles, colors, links, bullets, and basic tables.
|
|
13
|
+
- Added basic example Blob samples for HTML, XML, YAML, TSV, PNG image, generated audio, generated video, and PPTX.
|
|
14
|
+
- Added embedded XLSX drawing previews for local worksheet images and basic charts.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Clarified that CAD drawing files such as `.dwg`/`.dxf` require a custom renderer or local/private conversion.
|
|
19
|
+
- Improved Markdown preview styling for headings, inline code, links, lists, blockquotes, code blocks, tables, and images.
|
|
20
|
+
- Kept sanitized Markdown links clickable in a new unlinked tab while continuing to remove script-capable links, inline event handlers, and automatic remote resource references.
|
|
21
|
+
- Aligned DOCX and ODT links with the same safe new-tab navigation behavior.
|
|
22
|
+
- Preserved document-provided page sizes and margins for local ODT and RTF previews.
|
|
23
|
+
- Moved basic example Blob generators out of `App.tsx` into separate files under `examples/basic/blobs`.
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- Fixed OpenDocument `lr-tb` writing mode so normal ODT text and ODS cells do not render vertically.
|
|
28
|
+
- Kept selected PDF/PPTX thumbnail borders above adjacent hover states.
|
|
29
|
+
- Rendered basic XLSX charts/graphs that were previously ignored because they live in worksheet drawing parts outside the cell grid.
|
|
30
|
+
- Showed ellipsis for clipped spreadsheet cell content and exposed the full value in a local hover popover.
|
|
31
|
+
- Kept DOCX internal reference/bookmark links inside the viewer instead of opening the app domain in a new tab.
|
|
32
|
+
- Preserved visible DOCX VML shape geometry and added local fallback rendering for unresolved DOCX images and unsupported DrawingML Word shapes.
|
|
33
|
+
- Restored fit width and fit page controls for DOCX previews.
|
|
34
|
+
- Normalized common DOCX Symbol/Wingdings bullet glyphs so filled dot bullets render as bullets instead of square boxes.
|
|
35
|
+
- Normalized DOCX nested hollow circle bullets that Word stores as Courier New `o` markers.
|
|
36
|
+
|
|
37
|
+
## [1.0.6] - 2026-07-18
|
|
38
|
+
|
|
39
|
+
### Added
|
|
40
|
+
|
|
41
|
+
- Added an inline password prompt for encrypted PDF files. Passwords are passed directly to PDF.js in the browser and are not uploaded.
|
|
42
|
+
|
|
7
43
|
## [1.0.5] - 2026-07-18
|
|
8
44
|
|
|
9
45
|
### Added
|
package/README.md
CHANGED
|
@@ -8,6 +8,7 @@ The package is designed for confidential documents. It accepts `File`, `Blob`, `
|
|
|
8
8
|
|
|
9
9
|
- npm: [@shahajimbhosle/local-doc-viewer](https://www.npmjs.com/package/@shahajimbhosle/local-doc-viewer)
|
|
10
10
|
- GitHub: [shahajimbhosle/DocViewer](https://github.com/shahajimbhosle/DocViewer)
|
|
11
|
+
- Example: [GitHub Pages demo](https://shahajimbhosle.github.io/DocViewer/)
|
|
11
12
|
- Issues: [GitHub issues](https://github.com/shahajimbhosle/DocViewer/issues)
|
|
12
13
|
|
|
13
14
|
## Built-In Formats
|
|
@@ -17,15 +18,17 @@ The package is designed for confidential documents. It accepts `File`, `Blob`, `
|
|
|
17
18
|
- Text/code: TXT, JSON, XML, YAML, HTML as text/sanitized content, logs, JS/TS/CSS
|
|
18
19
|
- Markdown, rendered locally and sanitized
|
|
19
20
|
- CSV/TSV
|
|
20
|
-
- DOCX, rendered locally with Word-style layout and embedded styles where browser rendering permits
|
|
21
|
-
-
|
|
21
|
+
- DOCX, rendered locally with Word-style layout, embedded images, common shapes, and embedded styles where browser rendering permits
|
|
22
|
+
- ODT, rendered locally from OpenDocument Text packages with common text, list, table, link, style, and embedded image support
|
|
23
|
+
- RTF, rendered locally with common rich text styling, colors, links, bullets, and basic tables
|
|
24
|
+
- XLS/XLSX/ODS, parsed locally in the browser; XLSX embedded images and basic chart previews are rendered when present
|
|
22
25
|
- PPTX, rendered locally to canvas with slide navigation and text search counts
|
|
23
26
|
- DOCX comments and XLSX/ODS notes/comments are shown locally when present
|
|
24
27
|
- Audio/video formats supported by the browser
|
|
25
28
|
|
|
26
29
|
Spreadsheet previews use row and column virtualization so larger XLS/XLSX/ODS files do not mount every grid cell into the DOM at once.
|
|
27
30
|
|
|
28
|
-
Legacy binary Word/PowerPoint documents, OpenDocument
|
|
31
|
+
Legacy binary Word/PowerPoint documents, OpenDocument presentation files, strict Office fidelity edge cases, CAD drawing files such as `.dwg`/`.dxf`, and uncommon enterprise formats are not rendered by default. Use a custom renderer or a private/on-prem conversion service for those formats. The viewer exposes a renderer registry for that purpose.
|
|
29
32
|
|
|
30
33
|
### About `.ppt`
|
|
31
34
|
|
|
@@ -82,7 +85,9 @@ By default, the viewer:
|
|
|
82
85
|
- Does not call third-party document preview services
|
|
83
86
|
- Rejects `http://` and `https://` document URLs
|
|
84
87
|
- Uses local `Blob` URLs for preview/download/print flows
|
|
85
|
-
- Sanitizes generated HTML
|
|
88
|
+
- Sanitizes generated HTML to remove scripts, event handlers, and embedded executable content
|
|
89
|
+
- Removes automatic remote resource references from rendered HTML, such as image and embed sources
|
|
90
|
+
- Keeps Markdown and document links clickable when the sanitizer considers the URL safe, and opens them in a new unlinked tab with `noopener noreferrer`
|
|
86
91
|
- Removes external PPTX relationships before rendering so linked resources are not fetched
|
|
87
92
|
- Uses a packaged PDF.js worker instead of a CDN worker
|
|
88
93
|
|
|
@@ -123,6 +128,22 @@ configurePdfWorker(pdfWorkerUrl);
|
|
|
123
128
|
|
|
124
129
|
The worker is intentionally not embedded as an inline base64 JavaScript data URL in the library bundle, because large inline executable payloads can trigger package malware scanners even when the code comes from PDF.js.
|
|
125
130
|
|
|
131
|
+
### Password-Protected PDFs
|
|
132
|
+
|
|
133
|
+
Encrypted PDFs prompt for a password inside the viewer. The password is passed directly to PDF.js in the browser and is not uploaded or sent to any preview service.
|
|
134
|
+
|
|
135
|
+
Prompt labels can be customized through `labels`:
|
|
136
|
+
|
|
137
|
+
```tsx
|
|
138
|
+
<DocumentViewer
|
|
139
|
+
labels={{
|
|
140
|
+
pdfPasswordTitle: 'Protected PDF',
|
|
141
|
+
pdfPasswordSubmit: 'Unlock',
|
|
142
|
+
}}
|
|
143
|
+
source={file}
|
|
144
|
+
/>
|
|
145
|
+
```
|
|
146
|
+
|
|
126
147
|
## Controls
|
|
127
148
|
|
|
128
149
|
The default control surface includes:
|
|
@@ -239,6 +260,19 @@ Build the package:
|
|
|
239
260
|
npm run build
|
|
240
261
|
```
|
|
241
262
|
|
|
263
|
+
Build the GitHub Pages example:
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
npm run build:pages
|
|
267
|
+
npm run preview:pages
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
The example site is built from `examples/basic` into `dist-pages` and is deployed by `.github/workflows/pages.yml`. In GitHub, open the repository settings and set **Pages > Build and deployment > Source** to **GitHub Actions**. After that, every push to `main` deploys the example to:
|
|
271
|
+
|
|
272
|
+
```text
|
|
273
|
+
https://shahajimbhosle.github.io/DocViewer/
|
|
274
|
+
```
|
|
275
|
+
|
|
242
276
|
## License
|
|
243
277
|
|
|
244
278
|
This package is released under the MIT License.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentViewer.d.ts","sourceRoot":"","sources":["../src/DocumentViewer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAMV,mBAAmB,EAOpB,MAAM,SAAS,CAAC;AAEjB,OAAO,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"DocumentViewer.d.ts","sourceRoot":"","sources":["../src/DocumentViewer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAMV,mBAAmB,EAOpB,MAAM,SAAS,CAAC;AAEjB,OAAO,cAAc,CAAC;AAmStB,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,KAAK,EACL,MAAY,EACZ,SAAS,EACT,eAAuB,EACvB,gBAAgC,EAChC,OAAc,EACd,OAAW,EACX,WAAe,EACf,WAAe,EACf,QAAQ,EACR,UAAU,EACV,MAAM,EACN,UAAU,EACV,MAAM,EACN,UAAU,EACV,MAAM,EACN,OAAO,GACR,EAAE,mBAAmB,+BAmUrB"}
|
package/dist/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.ldv-root{--ldv-bg: #f4f6f8;--ldv-panel: #ffffff;--ldv-panel-muted: #f8fafc;--ldv-border: #d8dee6;--ldv-border-strong: #aab4c0;--ldv-text: #17202a;--ldv-muted: #5f6f82;--ldv-accent: #0f766e;--ldv-accent-soft: #d8f3ef;--ldv-danger: #b42318;--ldv-warning: #8a4b0f;--ldv-highlight: #fff1a8;box-sizing:border-box;display:flex;min-height:320px;flex-direction:column;overflow:hidden;border:1px solid var(--ldv-border);border-radius:8px;background:var(--ldv-bg);color:var(--ldv-text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;letter-spacing:0}.ldv-root *,.ldv-root *:before,.ldv-root *:after{box-sizing:border-box}.ldv-root:fullscreen{width:100vw;height:100vh!important;border-radius:0}.ldv-toolbar{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;gap:8px;min-height:52px;padding:8px;border-bottom:1px solid var(--ldv-border);background:var(--ldv-panel-muted)}.ldv-toolbar-spacer{flex:1 1 24px}.ldv-control-group{display:inline-flex;align-items:center;gap:4px;padding:2px;border:1px solid var(--ldv-border);border-radius:7px;background:var(--ldv-panel)}.ldv-file-name{display:inline-flex;min-width:160px;max-width:min(280px,35vw);align-items:center;gap:8px;color:var(--ldv-text);font-size:13px;font-weight:600;white-space:nowrap}.ldv-file-name span{overflow:hidden;text-overflow:ellipsis}.ldv-icon-button,.ldv-zoom-reset,.ldv-sheet-tab{display:inline-flex;align-items:center;justify-content:center;border:0;background:transparent;color:var(--ldv-text);cursor:pointer;font:inherit}.ldv-icon-button{width:32px;height:32px;flex:0 0 32px;border-radius:6px}.ldv-icon-button:hover,.ldv-zoom-reset:hover,.ldv-sheet-tab:hover{background:#edf2f7}.ldv-icon-button:focus-visible,.ldv-zoom-reset:focus-visible,.ldv-sheet-tab:focus-visible,.ldv-page-control input:focus-visible,.ldv-search-control input:focus-visible{outline:2px solid var(--ldv-accent);outline-offset:2px}.ldv-icon-button[aria-pressed=true]{background:var(--ldv-accent-soft);color:#075e57}.ldv-icon-button:disabled{color:#9aa6b2;cursor:not-allowed}.ldv-icon-button[aria-busy=true]{cursor:progress}.ldv-icon-button-spinner{width:16px;height:16px;border:2px solid rgba(100,116,139,.28);border-top-color:var(--ldv-accent);border-radius:999px;animation:ldv-spin .7s linear infinite}.ldv-zoom-reset{min-width:76px;height:32px;gap:6px;padding:0 8px;border-radius:6px;color:var(--ldv-text);font-size:12px;font-weight:650}.ldv-page-control{display:inline-flex;align-items:center;gap:6px;padding:0 6px;color:var(--ldv-muted);font-size:12px;white-space:nowrap}.ldv-page-control input{width:58px;height:30px;border:1px solid var(--ldv-border);border-radius:5px;color:var(--ldv-text);font:inherit;text-align:center}.ldv-search-control{display:inline-flex;min-width:220px;max-width:360px;flex:1 1 240px;align-items:center;gap:8px;height:38px;padding:0 10px;border:1px solid var(--ldv-border);border-radius:7px;background:var(--ldv-panel);color:var(--ldv-muted)}.ldv-search-control input{min-width:80px;flex:1 1 auto;border:0;background:transparent;color:var(--ldv-text);font:inherit;outline:none}.ldv-search-status{max-width:120px;overflow:hidden;color:var(--ldv-muted);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.ldv-viewport{position:relative;flex:1 1 auto;overflow:auto;padding:4px;background:#e8edf2}.ldv-renderer-pptx .ldv-viewport,.ldv-renderer-spreadsheet .ldv-viewport,.ldv-renderer-csv .ldv-viewport{padding:0}.ldv-renderer-pdf .ldv-viewport{overflow:hidden;padding:0}.ldv-renderer-spreadsheet .ldv-viewport{overflow:hidden}.ldv-renderer-media .ldv-viewport{overflow:hidden;padding:0}.ldv-renderer-image:has(.ldv-image-fit-page) .ldv-viewport{overflow:hidden}.ldv-renderer-status,.ldv-empty-state,.ldv-error,.ldv-unsupported{display:grid;min-height:100%;place-items:center;align-content:center;justify-items:center;gap:10px;padding:28px;color:var(--ldv-muted);text-align:center}.ldv-loader{display:flex;width:100%;min-height:100%;align-items:center;justify-content:center;gap:10px;padding:28px;color:var(--ldv-muted);font-weight:600}.ldv-loader-spinner{width:18px;height:18px;border:2px solid rgba(100,116,139,.28);border-top-color:var(--ldv-accent);border-radius:999px;animation:ldv-spin .7s linear infinite}.ldv-loading-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:20;display:flex;background:#e8edf2db}@keyframes ldv-spin{to{transform:rotate(360deg)}}.ldv-error{color:var(--ldv-danger)}.ldv-error strong,.ldv-unsupported h2{color:var(--ldv-text);font-size:18px}.ldv-unsupported p{max-width:640px;margin:0;color:var(--ldv-muted);line-height:1.55}.ldv-pdf-stage,.ldv-image-stage,.ldv-media-stage{display:flex;min-height:100%;align-items:flex-start;justify-content:center}.ldv-media-stage{width:100%;height:100%;align-items:center;padding:12px}.ldv-pdf-canvas,.ldv-pptx-slide-frame,.ldv-image-document,.ldv-video-document,.ldv-rich-document,.ldv-text-document,.ldv-table-document table{background:var(--ldv-panel);box-shadow:0 10px 28px #0f172a29}.ldv-pdf-canvas{display:block}.ldv-pdf-page-surface{position:relative;flex:0 0 auto}.ldv-pdf-highlight-layer{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.ldv-pdf-search-highlight{position:absolute;z-index:1;border-radius:2px;background:#fff1a8ad;mix-blend-mode:multiply}.ldv-pdf-shell{display:grid;width:100%;height:100%;min-height:100%;grid-template-columns:168px minmax(0,1fr);background:#e8edf2}.ldv-pdf-shell.ldv-pdf-sidebar-collapsed{grid-template-columns:44px minmax(0,1fr)}.ldv-pdf-shell.ldv-pdf-sidebar-disabled{grid-template-columns:minmax(0,1fr)}.ldv-pdf-sidebar{display:flex;min-width:0;flex-direction:column;overflow:hidden;border-right:1px solid var(--ldv-border);background:#f8fafc}.ldv-pdf-sidebar-toggle{display:inline-flex;width:32px;height:32px;flex:0 0 32px;align-items:center;justify-content:center;align-self:flex-end;margin:6px;border:0;border-radius:6px;background:transparent;color:var(--ldv-text);cursor:pointer}.ldv-pdf-sidebar-collapsed .ldv-pdf-sidebar-toggle{align-self:center}.ldv-pdf-sidebar-toggle:hover{background:#edf2f7}.ldv-pdf-sidebar-toggle:focus-visible,.ldv-pdf-thumbnail:focus-visible{outline:2px solid var(--ldv-accent);outline-offset:2px}.ldv-pdf-thumbnail-list,.ldv-pptx-thumbnail-list{flex:1 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto;padding:0 6px 12px}.ldv-pdf-thumbnail-virtual-space,.ldv-pptx-thumbnail-virtual-space{position:relative;width:100%}.ldv-pdf-thumbnail,.ldv-pptx-thumbnail{position:absolute;top:0;left:50%;width:max-content;max-width:calc(100% - 8px)}.ldv-pdf-thumbnail:hover{background:#eef3f8}.ldv-pdf-thumbnail[aria-current=page]{border-color:var(--ldv-accent);background:#e8f5f3}.ldv-pdf-thumbnail-number{display:inline-flex;min-height:24px;align-items:center;justify-content:center;color:#4a5868;font-size:12px;font-weight:700}.ldv-pdf-thumbnail-canvas,.ldv-pptx-thumbnail-canvas{display:block;max-width:100%;border:0;background:var(--ldv-panel)}.ldv-pdf-thumbnail-preview,.ldv-pptx-thumbnail-preview{position:relative;box-sizing:content-box;display:inline-flex;align-items:center;justify-content:center;border:1px solid #cfd8e3;background:var(--ldv-panel);overflow:hidden;box-shadow:0 2px 8px #0f172a1f}.ldv-thumbnail-loader,.ldv-thumbnail-error{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:var(--ldv-muted);font-size:11px;font-weight:650}.ldv-thumbnail-loader-spinner{width:16px;height:16px;border:2px solid rgba(100,116,139,.28);border-top-color:var(--ldv-accent);border-radius:999px;animation:ldv-spin .7s linear infinite}.ldv-pdf-main{min-width:0;overflow:auto;padding:4px}.ldv-pdf-continuous-stage{display:flex;min-height:100%;flex-direction:column;align-items:center;gap:12px}.ldv-pdf-page-frame{display:flex;width:100%;justify-content:center}.ldv-pptx-shell{display:grid;width:100%;height:100%;min-height:100%;grid-template-columns:168px minmax(0,1fr);background:#e8edf2}.ldv-pptx-shell.ldv-pptx-sidebar-collapsed{grid-template-columns:44px minmax(0,1fr)}.ldv-pptx-shell.ldv-pptx-sidebar-disabled{grid-template-columns:minmax(0,1fr)}.ldv-pptx-sidebar{display:flex;min-width:0;flex-direction:column;overflow:hidden;border-right:1px solid var(--ldv-border);background:#f8fafc}.ldv-pptx-sidebar-toggle{display:inline-flex;width:32px;height:32px;flex:0 0 32px;align-items:center;justify-content:center;align-self:flex-end;margin:6px;border:0;border-radius:6px;background:transparent;color:var(--ldv-text);cursor:pointer}.ldv-pptx-sidebar-collapsed .ldv-pptx-sidebar-toggle{align-self:center}.ldv-pptx-sidebar-toggle:hover{background:#edf2f7}.ldv-pptx-sidebar-toggle:focus-visible,.ldv-pptx-thumbnail:focus-visible{outline:2px solid var(--ldv-accent);outline-offset:2px}.ldv-pdf-thumbnail,.ldv-pptx-thumbnail{display:grid;grid-template-columns:20px auto;gap:4px;align-items:start;padding:4px 4px 10px;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--ldv-text);cursor:pointer;font:inherit;text-align:left}.ldv-pptx-thumbnail:hover{background:#eef3f8}.ldv-pptx-thumbnail[aria-current=page]{border-color:var(--ldv-accent);background:#e8f5f3}.ldv-pptx-thumbnail-number{display:inline-flex;min-height:24px;align-items:center;justify-content:center;color:#4a5868;font-size:12px;font-weight:700}.ldv-pptx-thumbnail-canvas{display:block;max-width:100%;border:0;background:var(--ldv-panel)}.ldv-pptx-main{min-width:0;overflow:auto;padding:12px}.ldv-pptx-stage{display:flex;width:max-content;min-width:100%;min-height:100%;align-items:center;justify-content:center}.ldv-pptx-slide-frame{position:relative;flex:0 0 auto;background:var(--ldv-panel)}.ldv-pptx-highlight-layer{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.ldv-pptx-search-highlight{position:absolute;z-index:1;border:2px solid rgba(217,119,6,.65);border-radius:3px;background:#fff1a86b}.ldv-pptx-canvas{display:block;width:100%;height:100%;background:var(--ldv-panel)}.ldv-pptx-render-status{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;background:#ffffffb8;color:var(--ldv-muted);font-size:13px;font-weight:600}.ldv-image-stage{align-items:center}.ldv-image-document{display:block;max-width:none;transform-origin:center}.ldv-image-fit-width .ldv-image-document{width:100%;height:auto}.ldv-image-fit-page .ldv-image-document{max-width:100%;object-fit:contain}.ldv-video-document{width:100%;height:100%;max-width:100%;max-height:100%;background:#000;object-fit:contain}.ldv-audio-document{width:min(100%,640px)}.ldv-text-shell{display:flex;min-height:100%;justify-content:center}.ldv-text-document{width:min(100%,980px);min-height:100%;margin:0;padding:4px;overflow:auto;border:1px solid var(--ldv-border);border-radius:4px;color:#1d2733;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;-moz-tab-size:2;tab-size:2;white-space:pre-wrap;word-break:break-word}.ldv-rich-document{width:min(100%,860px);min-height:100%;margin:0 auto;padding:4px;border:1px solid var(--ldv-border);border-radius:4px;color:#1d2733;line-height:1.65}.ldv-rich-document h1,.ldv-rich-document h2,.ldv-rich-document h3{color:#111827;line-height:1.2}.ldv-rich-document img{max-width:100%}.ldv-docx-preview-shell{width:max-content;max-width:none;margin:0 auto}.ldv-docx-document{color:#111827}.ldv-docx-document .docx-wrapper{padding:0!important;background:transparent!important}.ldv-docx-document .docx-wrapper>section.docx{margin:0 auto 20px!important;box-shadow:0 10px 28px #0f172a29!important}.ldv-docx-document img,.ldv-docx-document svg,.ldv-docx-document canvas{max-width:none}.ldv-docx-vml-textbox{display:inline-flex;align-items:center;box-sizing:border-box;overflow:hidden;padding:0 2pt;vertical-align:middle}.ldv-docx-vml-textbox p{width:100%;min-height:0!important;margin:0!important}.ldv-docx-vml-textbox span{line-height:1.05}.ldv-rich-document table{width:100%;border-collapse:collapse}.ldv-rich-document th,.ldv-rich-document td{padding:4px;border:1px solid var(--ldv-border);text-align:left;vertical-align:top}.ldv-warning{margin-bottom:18px;padding:10px 12px;border:1px solid #f4c27b;border-radius:6px;background:#fff8eb;color:var(--ldv-warning);font-size:13px}.ldv-spreadsheet-document{display:flex;height:100%;min-height:100%;width:100%;min-width:100%;flex-direction:column;overflow:hidden}.ldv-spreadsheet-grid-scroll{flex:1 1 auto;min-height:0;overflow:auto;overflow-anchor:none;overscroll-behavior:contain}.ldv-spreadsheet-virtual-grid{position:relative;min-width:100%;background:var(--ldv-panel);color:#1d2733}.ldv-spreadsheet-virtual-header{position:sticky;top:0;z-index:6;min-width:100%;background:#f2f6fa}.ldv-spreadsheet-virtual-body{position:absolute;top:0;right:0;bottom:0;left:0;overflow:visible}.ldv-spreadsheet-virtual-row{position:absolute;top:0;left:0;overflow:visible}.ldv-spreadsheet-virtual-corner,.ldv-spreadsheet-virtual-column-header,.ldv-spreadsheet-virtual-row-header,.ldv-spreadsheet-virtual-cell{box-sizing:border-box;border:1px solid var(--ldv-border)}.ldv-spreadsheet-virtual-corner{position:sticky;top:0;left:0;z-index:8;background:#f2f6fa}.ldv-spreadsheet-virtual-column-header{position:absolute;top:0;display:flex;align-items:center;justify-content:center;background:#f2f6fa;color:#4a5868;font-weight:700;text-align:center}.ldv-spreadsheet-virtual-row-header{position:sticky;left:0;z-index:4;display:flex;align-items:center;justify-content:center;background:#f2f6fa;color:#4a5868;font-weight:700;text-align:center}.ldv-spreadsheet-virtual-cell{position:absolute;top:0;overflow:hidden;padding:0;background:#fff;line-height:1.18}.ldv-spreadsheet-virtual-cell.ldv-cell-has-comment{overflow:visible}.ldv-sheet-tabs{flex:0 0 38px;z-index:5;display:flex;height:38px;width:100%;min-width:0;align-items:center;gap:4px;overflow-x:auto;overflow-y:hidden;border-top:1px solid var(--ldv-border);background:#e8edf2;padding:4px 8px;overscroll-behavior-x:contain;white-space:nowrap}.ldv-sheet-tab{height:30px;max-width:180px;flex:0 0 auto;padding:0 10px;border:1px solid var(--ldv-border);border-radius:6px;background:var(--ldv-panel);color:var(--ldv-text);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ldv-sheet-tab[aria-selected=true]{border-color:var(--ldv-accent);background:var(--ldv-accent-soft);color:#075e57}.ldv-table-document{display:flex;min-width:max-content;justify-content:center}.ldv-grid-document{display:block;justify-content:flex-start}.ldv-table-document table{border-collapse:collapse;border-spacing:0;color:#1d2733;empty-cells:show}.ldv-spreadsheet-grid{table-layout:fixed;background:var(--ldv-panel)}.ldv-table-document th,.ldv-table-document td{position:relative;min-width:96px;max-width:360px;padding:0;border:1px solid var(--ldv-border);overflow-wrap:anywhere;text-align:left;vertical-align:top}.ldv-spreadsheet-grid .ldv-sheet-corner,.ldv-spreadsheet-grid .ldv-row-header{width:48px;min-width:48px;max-width:48px;background:#f2f6fa;color:#4a5868;font-weight:700;text-align:center;vertical-align:middle}.ldv-spreadsheet-grid .ldv-sheet-corner{position:sticky;top:0;left:0;z-index:4;height:30px}.ldv-spreadsheet-grid .ldv-column-header{height:30px;background:#f2f6fa;color:#4a5868;font-weight:700;text-align:center;vertical-align:middle}.ldv-spreadsheet-grid .ldv-row-header{position:sticky;top:auto;left:0;z-index:2;height:30px}.ldv-spreadsheet-grid td{height:30px;background:#fff}.ldv-spreadsheet-grid .ldv-cell-has-comment{overflow:visible}.ldv-cell-comment{position:absolute;top:0;right:0;width:12px;height:12px;outline:none}.ldv-cell-comment-marker{position:absolute;top:0;right:0;width:0;height:0;border-top:10px solid #d83b01;border-left:10px solid transparent}.ldv-cell-comment-popover{position:absolute;top:12px;right:0;z-index:20;display:none;width:260px;max-width:min(320px,80vw);padding:8px 10px;border:1px solid #c8d1dc;border-radius:6px;background:#fff;box-shadow:0 8px 24px #0f172a2e;color:#1d2733;font-size:12px;line-height:1.4;white-space:pre-wrap}.ldv-cell-comment:hover .ldv-cell-comment-popover,.ldv-cell-comment:focus .ldv-cell-comment-popover,.ldv-cell-comment:focus-within .ldv-cell-comment-popover{display:grid;gap:8px}.ldv-cell-comment-item{display:grid;gap:2px}.ldv-cell-comment-item strong{color:#111827;font-size:12px}.ldv-cell-comment-item small{color:var(--ldv-muted);font-size:11px}.ldv-table-document th{position:sticky;top:0;z-index:1;background:#f2f6fa;color:#111827;font-weight:700}.ldv-spreadsheet-grid .ldv-sheet-corner{top:0;left:0;z-index:4}.ldv-spreadsheet-grid .ldv-column-header{top:0;z-index:3;text-align:center}.ldv-spreadsheet-grid .ldv-row-header{top:auto;left:0;z-index:2;color:#4a5868}.ldv-highlight{border-radius:3px;background:var(--ldv-highlight);color:inherit}.ldv-print-root{padding:4px}@media(max-width:720px){.ldv-root{border-radius:0}.ldv-toolbar{align-items:stretch}.ldv-file-name{max-width:100%;flex:1 1 100%}.ldv-search-control{max-width:none;flex-basis:100%}.ldv-viewport{padding:4px}.ldv-renderer-pptx .ldv-viewport,.ldv-renderer-spreadsheet .ldv-viewport,.ldv-renderer-csv .ldv-viewport{padding:0}.ldv-pptx-shell{grid-template-columns:148px minmax(280px,1fr)}.ldv-pptx-shell.ldv-pptx-sidebar-collapsed{grid-template-columns:44px minmax(280px,1fr)}.ldv-pptx-main{padding:8px}.ldv-rich-document,.ldv-text-document{padding:4px}}@media print{.ldv-toolbar{display:none}.ldv-root{height:auto!important;border:0}.ldv-viewport{overflow:visible;padding:0;background:#fff}.ldv-pdf-canvas,.ldv-image-document,.ldv-video-document,.ldv-rich-document,.ldv-text-document,.ldv-table-document table{box-shadow:none}}
|
|
1
|
+
.ldv-root{--ldv-bg: #f4f6f8;--ldv-panel: #ffffff;--ldv-panel-muted: #f8fafc;--ldv-border: #d8dee6;--ldv-border-strong: #aab4c0;--ldv-text: #17202a;--ldv-muted: #5f6f82;--ldv-accent: #0f766e;--ldv-accent-soft: #d8f3ef;--ldv-danger: #b42318;--ldv-warning: #8a4b0f;--ldv-highlight: #fff1a8;box-sizing:border-box;display:flex;min-height:320px;flex-direction:column;overflow:hidden;border:1px solid var(--ldv-border);border-radius:8px;background:var(--ldv-bg);color:var(--ldv-text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;letter-spacing:0}.ldv-root *,.ldv-root *:before,.ldv-root *:after{box-sizing:border-box}.ldv-root:fullscreen{width:100vw;height:100vh!important;border-radius:0}.ldv-toolbar{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;gap:8px;min-height:52px;padding:8px;border-bottom:1px solid var(--ldv-border);background:var(--ldv-panel-muted)}.ldv-toolbar-spacer{flex:1 1 24px}.ldv-control-group{display:inline-flex;align-items:center;gap:4px;padding:2px;border:1px solid var(--ldv-border);border-radius:7px;background:var(--ldv-panel)}.ldv-file-name{display:inline-flex;min-width:160px;max-width:min(280px,35vw);align-items:center;gap:8px;color:var(--ldv-text);font-size:13px;font-weight:600;white-space:nowrap}.ldv-file-name span{overflow:hidden;text-overflow:ellipsis}.ldv-icon-button,.ldv-zoom-reset,.ldv-sheet-tab{display:inline-flex;align-items:center;justify-content:center;border:0;background:transparent;color:var(--ldv-text);cursor:pointer;font:inherit}.ldv-icon-button{width:32px;height:32px;flex:0 0 32px;border-radius:6px}.ldv-icon-button:hover,.ldv-zoom-reset:hover,.ldv-sheet-tab:hover{background:#edf2f7}.ldv-icon-button:focus-visible,.ldv-zoom-reset:focus-visible,.ldv-sheet-tab:focus-visible,.ldv-page-control input:focus-visible,.ldv-search-control input:focus-visible{outline:2px solid var(--ldv-accent);outline-offset:2px}.ldv-icon-button[aria-pressed=true]{background:var(--ldv-accent-soft);color:#075e57}.ldv-icon-button:disabled{color:#9aa6b2;cursor:not-allowed}.ldv-icon-button[aria-busy=true]{cursor:progress}.ldv-icon-button-spinner{width:16px;height:16px;border:2px solid rgba(100,116,139,.28);border-top-color:var(--ldv-accent);border-radius:999px;animation:ldv-spin .7s linear infinite}.ldv-zoom-reset{min-width:76px;height:32px;gap:6px;padding:0 8px;border-radius:6px;color:var(--ldv-text);font-size:12px;font-weight:650}.ldv-page-control{display:inline-flex;align-items:center;gap:6px;padding:0 6px;color:var(--ldv-muted);font-size:12px;white-space:nowrap}.ldv-page-control input{width:58px;height:30px;border:1px solid var(--ldv-border);border-radius:5px;color:var(--ldv-text);font:inherit;text-align:center}.ldv-search-control{display:inline-flex;min-width:220px;max-width:360px;flex:1 1 240px;align-items:center;gap:8px;height:38px;padding:0 10px;border:1px solid var(--ldv-border);border-radius:7px;background:var(--ldv-panel);color:var(--ldv-muted)}.ldv-search-control input{min-width:80px;flex:1 1 auto;border:0;background:transparent;color:var(--ldv-text);font:inherit;outline:none}.ldv-search-status{max-width:120px;overflow:hidden;color:var(--ldv-muted);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.ldv-viewport{position:relative;flex:1 1 auto;overflow:auto;padding:4px;background:#e8edf2}.ldv-renderer-pptx .ldv-viewport,.ldv-renderer-spreadsheet .ldv-viewport,.ldv-renderer-csv .ldv-viewport{padding:0}.ldv-renderer-pdf .ldv-viewport{overflow:hidden;padding:0}.ldv-renderer-spreadsheet .ldv-viewport{overflow:hidden}.ldv-renderer-media .ldv-viewport{overflow:hidden;padding:0}.ldv-renderer-image:has(.ldv-image-fit-page) .ldv-viewport{overflow:hidden}.ldv-renderer-status,.ldv-empty-state,.ldv-error,.ldv-unsupported{display:grid;min-height:100%;place-items:center;align-content:center;justify-items:center;gap:10px;padding:28px;color:var(--ldv-muted);text-align:center}.ldv-loader{display:flex;width:100%;min-height:100%;align-items:center;justify-content:center;gap:10px;padding:28px;color:var(--ldv-muted);font-weight:600}.ldv-loader-spinner{width:18px;height:18px;border:2px solid rgba(100,116,139,.28);border-top-color:var(--ldv-accent);border-radius:999px;animation:ldv-spin .7s linear infinite}.ldv-loading-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:20;display:flex;background:#e8edf2db}.ldv-pdf-password{display:grid;min-height:100%;place-items:center;padding:24px}.ldv-pdf-password-panel{display:grid;width:min(360px,100%);gap:12px;padding:20px;border:1px solid var(--ldv-border);border-radius:8px;background:var(--ldv-panel);box-shadow:0 12px 32px #0f172a1f}.ldv-pdf-password-panel h2{margin:0;color:var(--ldv-text);font-size:18px;line-height:1.2}.ldv-pdf-password-panel p{margin:0;color:var(--ldv-muted);font-size:13px;line-height:1.45}.ldv-pdf-password-field{display:grid;gap:6px;color:var(--ldv-text);font-size:13px;font-weight:650}.ldv-pdf-password-field input{height:36px;padding:0 10px;border:1px solid var(--ldv-border);border-radius:6px;color:var(--ldv-text);font:inherit}.ldv-pdf-password-field input:focus-visible{outline:2px solid var(--ldv-accent);outline-offset:2px}.ldv-pdf-password-submit{display:inline-flex;height:36px;align-items:center;justify-content:center;justify-self:start;padding:0 14px;border:1px solid var(--ldv-accent);border-radius:6px;background:var(--ldv-accent);color:#fff;cursor:pointer;font:inherit;font-size:13px;font-weight:700}.ldv-pdf-password-submit:hover{background:#0b665f}@keyframes ldv-spin{to{transform:rotate(360deg)}}.ldv-error{color:var(--ldv-danger)}.ldv-error strong,.ldv-unsupported h2{color:var(--ldv-text);font-size:18px}.ldv-unsupported p{max-width:640px;margin:0;color:var(--ldv-muted);line-height:1.55}.ldv-pdf-stage,.ldv-image-stage,.ldv-media-stage{display:flex;min-height:100%;align-items:flex-start;justify-content:center}.ldv-media-stage{width:100%;height:100%;align-items:center;padding:12px}.ldv-pdf-canvas,.ldv-pptx-slide-frame,.ldv-image-document,.ldv-video-document,.ldv-rich-document,.ldv-text-document,.ldv-table-document table{background:var(--ldv-panel);box-shadow:0 10px 28px #0f172a29}.ldv-pdf-canvas{display:block}.ldv-pdf-page-surface{position:relative;flex:0 0 auto}.ldv-pdf-highlight-layer{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.ldv-pdf-search-highlight{position:absolute;z-index:1;border-radius:2px;background:#fff1a8ad;mix-blend-mode:multiply}.ldv-pdf-shell{display:grid;width:100%;height:100%;min-height:100%;grid-template-columns:168px minmax(0,1fr);background:#e8edf2}.ldv-pdf-shell.ldv-pdf-sidebar-collapsed{grid-template-columns:44px minmax(0,1fr)}.ldv-pdf-shell.ldv-pdf-sidebar-disabled{grid-template-columns:minmax(0,1fr)}.ldv-pdf-sidebar{display:flex;min-width:0;flex-direction:column;overflow:hidden;border-right:1px solid var(--ldv-border);background:#f8fafc}.ldv-pdf-sidebar-toggle{display:inline-flex;width:32px;height:32px;flex:0 0 32px;align-items:center;justify-content:center;align-self:flex-end;margin:6px;border:0;border-radius:6px;background:transparent;color:var(--ldv-text);cursor:pointer}.ldv-pdf-sidebar-collapsed .ldv-pdf-sidebar-toggle{align-self:center}.ldv-pdf-sidebar-toggle:hover{background:#edf2f7}.ldv-pdf-sidebar-toggle:focus-visible,.ldv-pdf-thumbnail:focus-visible{outline:2px solid var(--ldv-accent);outline-offset:2px}.ldv-pdf-thumbnail-list,.ldv-pptx-thumbnail-list{flex:1 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto;padding:0 6px 12px}.ldv-pdf-thumbnail-virtual-space,.ldv-pptx-thumbnail-virtual-space{position:relative;width:100%}.ldv-pdf-thumbnail,.ldv-pptx-thumbnail{position:absolute;top:0;left:50%;width:max-content;max-width:calc(100% - 8px);z-index:0}.ldv-pdf-thumbnail:hover:not([aria-current=page]){background:#eef3f8}.ldv-pdf-thumbnail[aria-current=page]{z-index:2;border-color:var(--ldv-accent);background:#e8f5f3}.ldv-pdf-thumbnail-number{display:inline-flex;min-height:24px;align-items:center;justify-content:center;color:#4a5868;font-size:12px;font-weight:700}.ldv-pdf-thumbnail-canvas,.ldv-pptx-thumbnail-canvas{display:block;max-width:100%;border:0;background:var(--ldv-panel)}.ldv-pdf-thumbnail-preview,.ldv-pptx-thumbnail-preview{position:relative;box-sizing:content-box;display:inline-flex;align-items:center;justify-content:center;border:1px solid #cfd8e3;background:var(--ldv-panel);overflow:hidden;box-shadow:0 2px 8px #0f172a1f}.ldv-thumbnail-loader,.ldv-thumbnail-error{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:var(--ldv-muted);font-size:11px;font-weight:650}.ldv-thumbnail-loader-spinner{width:16px;height:16px;border:2px solid rgba(100,116,139,.28);border-top-color:var(--ldv-accent);border-radius:999px;animation:ldv-spin .7s linear infinite}.ldv-pdf-main{min-width:0;overflow:auto;padding:4px}.ldv-pdf-continuous-stage{display:flex;min-height:100%;flex-direction:column;align-items:center;gap:12px}.ldv-pdf-page-frame{display:flex;width:100%;justify-content:center}.ldv-pptx-shell{display:grid;width:100%;height:100%;min-height:100%;grid-template-columns:168px minmax(0,1fr);background:#e8edf2}.ldv-pptx-shell.ldv-pptx-sidebar-collapsed{grid-template-columns:44px minmax(0,1fr)}.ldv-pptx-shell.ldv-pptx-sidebar-disabled{grid-template-columns:minmax(0,1fr)}.ldv-pptx-sidebar{display:flex;min-width:0;flex-direction:column;overflow:hidden;border-right:1px solid var(--ldv-border);background:#f8fafc}.ldv-pptx-sidebar-toggle{display:inline-flex;width:32px;height:32px;flex:0 0 32px;align-items:center;justify-content:center;align-self:flex-end;margin:6px;border:0;border-radius:6px;background:transparent;color:var(--ldv-text);cursor:pointer}.ldv-pptx-sidebar-collapsed .ldv-pptx-sidebar-toggle{align-self:center}.ldv-pptx-sidebar-toggle:hover{background:#edf2f7}.ldv-pptx-sidebar-toggle:focus-visible,.ldv-pptx-thumbnail:focus-visible{outline:2px solid var(--ldv-accent);outline-offset:2px}.ldv-pdf-thumbnail,.ldv-pptx-thumbnail{display:grid;grid-template-columns:20px auto;gap:4px;align-items:start;padding:4px 4px 10px;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--ldv-text);cursor:pointer;font:inherit;text-align:left}.ldv-pptx-thumbnail:hover:not([aria-current=page]){background:#eef3f8}.ldv-pptx-thumbnail[aria-current=page]{z-index:2;border-color:var(--ldv-accent);background:#e8f5f3}.ldv-pptx-thumbnail-number{display:inline-flex;min-height:24px;align-items:center;justify-content:center;color:#4a5868;font-size:12px;font-weight:700}.ldv-pptx-thumbnail-canvas{display:block;max-width:100%;border:0;background:var(--ldv-panel)}.ldv-pptx-main{min-width:0;overflow:auto;padding:12px}.ldv-pptx-stage{display:flex;width:max-content;min-width:100%;min-height:100%;align-items:center;justify-content:center}.ldv-pptx-slide-frame{position:relative;flex:0 0 auto;background:var(--ldv-panel)}.ldv-pptx-highlight-layer{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.ldv-pptx-search-highlight{position:absolute;z-index:1;border:2px solid rgba(217,119,6,.65);border-radius:3px;background:#fff1a86b}.ldv-pptx-canvas{display:block;width:100%;height:100%;background:var(--ldv-panel)}.ldv-pptx-render-status{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;background:#ffffffb8;color:var(--ldv-muted);font-size:13px;font-weight:600}.ldv-image-stage{align-items:center}.ldv-image-document{display:block;max-width:none;transform-origin:center}.ldv-image-fit-width .ldv-image-document{width:100%;height:auto}.ldv-image-fit-page .ldv-image-document{max-width:100%;object-fit:contain}.ldv-video-document{width:100%;height:100%;max-width:100%;max-height:100%;background:#000;object-fit:contain}.ldv-audio-document{width:min(100%,640px)}.ldv-text-shell{display:flex;min-height:100%;justify-content:center}.ldv-text-document{width:min(100%,980px);min-height:100%;margin:0;padding:4px;overflow:auto;border:1px solid var(--ldv-border);border-radius:4px;color:#1d2733;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;-moz-tab-size:2;tab-size:2;white-space:pre-wrap;word-break:break-word}.ldv-rich-document{width:min(100%,860px);min-height:100%;margin:0 auto;padding:4px;border:1px solid var(--ldv-border);border-radius:4px;color:#1d2733;line-height:1.65}.ldv-paged-rich-document{width:auto;max-width:none;min-height:auto;flex:0 0 auto}.ldv-rich-document h1,.ldv-rich-document h2,.ldv-rich-document h3{color:#111827;line-height:1.2}.ldv-rich-document img{max-width:100%}.ldv-markdown-document{padding:32px;color:#1f2328;font-size:16px;line-height:1.55}.ldv-markdown-document>:first-child{margin-top:0}.ldv-markdown-document>:last-child{margin-bottom:0}.ldv-markdown-document h1,.ldv-markdown-document h2{padding-bottom:.3em;border-bottom:1px solid #d0d7de}.ldv-markdown-document h1{margin:0 0 24px;font-size:2em;font-weight:700;line-height:1.25}.ldv-markdown-document h2{margin:24px 0 16px;font-size:1.5em;font-weight:700;line-height:1.25}.ldv-markdown-document h3{margin:24px 0 16px;font-size:1.25em;font-weight:700}.ldv-markdown-document h4,.ldv-markdown-document h5,.ldv-markdown-document h6{margin:20px 0 12px;font-weight:700}.ldv-markdown-document p,.ldv-markdown-document blockquote,.ldv-markdown-document ul,.ldv-markdown-document ol,.ldv-markdown-document dl,.ldv-markdown-document table,.ldv-markdown-document pre{margin-top:0;margin-bottom:16px}.ldv-markdown-document ul,.ldv-markdown-document ol{padding-left:2em}.ldv-markdown-document li+li{margin-top:.25em}.ldv-markdown-document a{color:#0969da;text-decoration:none}.ldv-markdown-document a[href]:hover{text-decoration:underline}.ldv-markdown-document a:not([href]){cursor:default}.ldv-markdown-document code,.ldv-markdown-document kbd,.ldv-markdown-document samp{padding:.2em .4em;border-radius:6px;background:#afb8c133;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:85%}.ldv-markdown-document pre{overflow:auto;padding:16px;border-radius:6px;background:#f6f8fa;line-height:1.45}.ldv-markdown-document pre code{display:inline;padding:0;border-radius:0;background:transparent;font-size:100%;white-space:pre}.ldv-markdown-document blockquote{padding:0 1em;border-left:.25em solid #d0d7de;color:#57606a}.ldv-markdown-document hr{height:.25em;margin:24px 0;border:0;background:#d8dee4}.ldv-rich-document.ldv-markdown-document table{display:block;width:max-content;max-width:100%;overflow:auto}.ldv-rich-document.ldv-markdown-document th{font-weight:700}.ldv-rich-document.ldv-markdown-document th,.ldv-rich-document.ldv-markdown-document td{padding:6px 13px;border:1px solid #d0d7de}.ldv-rich-document.ldv-markdown-document tr{border-top:1px solid #d0d7de}.ldv-rich-document.ldv-markdown-document tr:nth-child(2n){background:#f6f8fa}.ldv-markdown-document img{max-width:100%;box-sizing:content-box;background:#fff}.ldv-markdown-document input[type=checkbox]{margin:0 .2em .25em -1.4em;vertical-align:middle}.ldv-docx-preview-shell{width:max-content;max-width:none;margin:0 auto}.ldv-docx-document{color:#111827}.ldv-docx-document .docx-wrapper{padding:0!important;background:transparent!important}.ldv-docx-document .docx-wrapper>section.docx{margin:0 auto 20px!important;box-shadow:0 10px 28px #0f172a29!important}.ldv-docx-document img,.ldv-docx-document svg,.ldv-docx-document canvas{max-width:none}.ldv-docx-document svg{overflow:visible}.ldv-docx-normalized-bullet{font-family:Arial,Helvetica,sans-serif!important}.ldv-docx-document p[class*=docx-num-]:before{font-family:Arial,Helvetica,sans-serif!important}.ldv-odt-document{padding:32px;color:#1d2733;font-size:16px;line-height:1.55}.ldv-odt-document>:first-child{margin-top:0}.ldv-odt-document>:last-child{margin-bottom:0}.ldv-odt-document h1,.ldv-odt-document h2,.ldv-odt-document h3,.ldv-odt-document h4,.ldv-odt-document h5,.ldv-odt-document h6{margin:1em 0 .45em;color:#111827;line-height:1.2}.ldv-odt-document p{margin:0 0 .85em}.ldv-odt-document a{color:#0969da;text-decoration:none}.ldv-odt-document a[href]:hover{text-decoration:underline}.ldv-odt-list{margin:0 0 .85em;padding-left:2em}.ldv-rich-document.ldv-odt-document table{width:auto;max-width:100%;margin:0 0 1em;border-collapse:collapse}.ldv-rich-document.ldv-odt-document th,.ldv-rich-document.ldv-odt-document td{padding:6px 10px;border:1px solid var(--ldv-border);vertical-align:top}.ldv-odt-image{display:inline-block;max-width:100%;height:auto;vertical-align:middle}.ldv-odt-note{color:var(--ldv-muted)}.ldv-odt-note-body{margin-left:4px;font-size:.85em}.ldv-odt-page-break{margin:24px 0;border:0;border-top:1px dashed var(--ldv-border-strong)}.ldv-rtf-document{padding:32px;color:#1d2733;font-size:16px;line-height:1.55;white-space:pre-wrap}.ldv-rtf-document>:first-child{margin-top:0}.ldv-rtf-document>:last-child{margin-bottom:0}.ldv-rtf-document p{margin:0 0 .85em}.ldv-rtf-document a{color:#0969da;text-decoration:none}.ldv-rtf-document a[href]:hover{text-decoration:underline}.ldv-rich-document.ldv-rtf-document table{width:auto;max-width:100%;margin:0 0 1em;border-collapse:collapse;white-space:normal}.ldv-rich-document.ldv-rtf-document th,.ldv-rich-document.ldv-rtf-document td{padding:6px 10px;border:1px solid var(--ldv-border);vertical-align:top}.ldv-docx-vml-textbox{display:inline-flex;align-items:center;box-sizing:border-box;overflow:hidden;padding:0 2pt;vertical-align:middle}.ldv-docx-vml-textbox p{width:100%;min-height:0!important;margin:0!important}.ldv-docx-vml-textbox span{line-height:1.05}.ldv-docx-vml-graphic,.ldv-docx-vml-textbox-foreign-object{overflow:visible}.ldv-docx-shape-fallback{position:relative;display:inline-grid;place-items:center;box-sizing:border-box;vertical-align:middle}.ldv-docx-image-fallback{display:inline-block;box-sizing:border-box;vertical-align:middle}.ldv-docx-image-fallback img{display:block;width:100%;height:100%;object-fit:contain}.ldv-docx-shape-fallback svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.ldv-docx-shape-fallback-text{position:relative;z-index:1;box-sizing:border-box;max-width:100%;padding:4px 8px;color:#111827;font-size:12px;line-height:1.2;text-align:center;overflow-wrap:anywhere}.ldv-rich-document table{width:100%;border-collapse:collapse}.ldv-rich-document th,.ldv-rich-document td{padding:4px;border:1px solid var(--ldv-border);text-align:left;vertical-align:top}.ldv-warning{margin-bottom:18px;padding:10px 12px;border:1px solid #f4c27b;border-radius:6px;background:#fff8eb;color:var(--ldv-warning);font-size:13px}.ldv-spreadsheet-document{display:flex;height:100%;min-height:100%;width:100%;min-width:100%;flex-direction:column;overflow:hidden}.ldv-spreadsheet-grid-scroll{flex:1 1 auto;min-height:0;overflow:auto;overflow-anchor:none;overscroll-behavior:contain}.ldv-spreadsheet-virtual-grid{position:relative;min-width:100%;background:var(--ldv-panel);color:#1d2733}.ldv-spreadsheet-virtual-header{position:sticky;top:0;z-index:6;min-width:100%;background:#f2f6fa}.ldv-spreadsheet-virtual-body{position:absolute;top:0;right:0;bottom:0;left:0;overflow:visible}.ldv-spreadsheet-drawing-layer{position:absolute;top:0;right:0;bottom:0;left:0;z-index:3;pointer-events:none}.ldv-spreadsheet-drawing{position:absolute;box-sizing:border-box;overflow:hidden;border:1px solid rgba(148,163,184,.45);background:#fff;box-shadow:0 4px 12px #0f172a1f}.ldv-spreadsheet-drawing-image img{display:block;width:100%;height:100%;object-fit:contain}.ldv-spreadsheet-chart,.ldv-spreadsheet-chart-empty{display:grid;width:100%;height:100%;grid-template-rows:auto 1fr;gap:4px;padding:8px;color:#1d2733;font-family:Georgia,Times New Roman,serif;font-size:12px;line-height:1.2}.ldv-spreadsheet-chart strong,.ldv-spreadsheet-chart-empty strong{overflow:hidden;color:#6b7280;font-size:14px;font-weight:500;padding-left:16px;text-align:left;text-overflow:ellipsis;white-space:nowrap}.ldv-spreadsheet-chart svg{width:100%;height:100%;min-height:0}.ldv-spreadsheet-chart text{fill:#475569;font-size:9px}.ldv-spreadsheet-chart-axis{stroke:#94a3b8;stroke-width:1}.ldv-spreadsheet-chart-grid{stroke:#d8e0ea;stroke-dasharray:4 4;stroke-width:1}.ldv-spreadsheet-chart-tick{fill:#64748b}.ldv-spreadsheet-chart-bar{fill:#1d6f8a}.ldv-spreadsheet-chart-line{fill:none;stroke:#0f766e;stroke-linecap:round;stroke-linejoin:round;stroke-width:3}.ldv-spreadsheet-chart-area{fill:#0f766e29}.ldv-spreadsheet-chart circle{fill:#0f766e}.ldv-spreadsheet-chart-empty{place-items:center;align-content:center;color:var(--ldv-muted);text-align:center}.ldv-spreadsheet-virtual-row{position:absolute;top:0;left:0;overflow:visible}.ldv-spreadsheet-virtual-corner,.ldv-spreadsheet-virtual-column-header,.ldv-spreadsheet-virtual-row-header,.ldv-spreadsheet-virtual-cell{box-sizing:border-box;border:1px solid var(--ldv-border)}.ldv-spreadsheet-virtual-corner{position:sticky;top:0;left:0;z-index:8;background:#f2f6fa}.ldv-spreadsheet-virtual-column-header{position:absolute;top:0;display:flex;align-items:center;justify-content:center;background:#f2f6fa;color:#4a5868;font-weight:700;text-align:center}.ldv-spreadsheet-virtual-row-header{position:sticky;left:0;z-index:4;display:flex;align-items:center;justify-content:center;background:#f2f6fa;color:#4a5868;font-weight:700;text-align:center}.ldv-spreadsheet-virtual-cell{position:absolute;top:0;overflow:visible;padding:0;background:#fff;line-height:1.18}.ldv-spreadsheet-virtual-cell:hover,.ldv-spreadsheet-virtual-cell:focus-within{z-index:12}.ldv-sheet-tabs{flex:0 0 38px;z-index:5;display:flex;height:38px;width:100%;min-width:0;align-items:center;gap:4px;overflow-x:auto;overflow-y:hidden;border-top:1px solid var(--ldv-border);background:#e8edf2;padding:4px 8px;overscroll-behavior-x:contain;white-space:nowrap}.ldv-sheet-tab{height:30px;max-width:180px;flex:0 0 auto;padding:0 10px;border:1px solid var(--ldv-border);border-radius:6px;background:var(--ldv-panel);color:var(--ldv-text);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ldv-sheet-tab[aria-selected=true]{border-color:var(--ldv-accent);background:var(--ldv-accent-soft);color:#075e57}.ldv-table-document{display:flex;min-width:max-content;justify-content:center}.ldv-grid-document{display:block;justify-content:flex-start}.ldv-table-document table{border-collapse:collapse;border-spacing:0;color:#1d2733;empty-cells:show}.ldv-spreadsheet-grid{table-layout:fixed;background:var(--ldv-panel)}.ldv-table-document th,.ldv-table-document td{position:relative;min-width:96px;max-width:360px;padding:0;border:1px solid var(--ldv-border);overflow-wrap:anywhere;text-align:left;vertical-align:top}.ldv-spreadsheet-grid .ldv-sheet-corner,.ldv-spreadsheet-grid .ldv-row-header{width:48px;min-width:48px;max-width:48px;background:#f2f6fa;color:#4a5868;font-weight:700;text-align:center;vertical-align:middle}.ldv-spreadsheet-grid .ldv-sheet-corner{position:sticky;top:0;left:0;z-index:4;height:30px}.ldv-spreadsheet-grid .ldv-column-header{height:30px;background:#f2f6fa;color:#4a5868;font-weight:700;text-align:center;vertical-align:middle}.ldv-spreadsheet-grid .ldv-row-header{position:sticky;top:auto;left:0;z-index:2;height:30px}.ldv-spreadsheet-grid td{height:30px;background:#fff}.ldv-spreadsheet-grid .ldv-cell-has-comment{overflow:visible}.ldv-cell-comment{position:absolute;top:0;right:0;width:12px;height:12px;outline:none}.ldv-cell-comment-marker{position:absolute;top:0;right:0;width:0;height:0;border-top:10px solid #d83b01;border-left:10px solid transparent}.ldv-cell-comment-popover{position:absolute;top:12px;right:0;z-index:20;display:none;width:260px;max-width:min(320px,80vw);padding:8px 10px;border:1px solid #c8d1dc;border-radius:6px;background:#fff;box-shadow:0 8px 24px #0f172a2e;color:#1d2733;font-size:12px;line-height:1.4;white-space:pre-wrap}.ldv-cell-comment:hover .ldv-cell-comment-popover,.ldv-cell-comment:focus .ldv-cell-comment-popover,.ldv-cell-comment:focus-within .ldv-cell-comment-popover{display:grid;gap:8px}.ldv-cell-comment-item{display:grid;gap:2px}.ldv-cell-comment-item strong{color:#111827;font-size:12px}.ldv-cell-comment-item small{color:var(--ldv-muted);font-size:11px}.ldv-table-document th{position:sticky;top:0;z-index:1;background:#f2f6fa;color:#111827;font-weight:700}.ldv-spreadsheet-grid .ldv-sheet-corner{top:0;left:0;z-index:4}.ldv-spreadsheet-grid .ldv-column-header{top:0;z-index:3;text-align:center}.ldv-spreadsheet-grid .ldv-row-header{top:auto;left:0;z-index:2;color:#4a5868}.ldv-highlight{border-radius:3px;background:var(--ldv-highlight);color:inherit}.ldv-print-root{padding:4px}@media(max-width:720px){.ldv-root{border-radius:0}.ldv-toolbar{align-items:stretch}.ldv-file-name{max-width:100%;flex:1 1 100%}.ldv-search-control{max-width:none;flex-basis:100%}.ldv-viewport{padding:4px}.ldv-renderer-pptx .ldv-viewport,.ldv-renderer-spreadsheet .ldv-viewport,.ldv-renderer-csv .ldv-viewport{padding:0}.ldv-pptx-shell{grid-template-columns:148px minmax(280px,1fr)}.ldv-pptx-shell.ldv-pptx-sidebar-collapsed{grid-template-columns:44px minmax(280px,1fr)}.ldv-pptx-main{padding:8px}.ldv-rich-document,.ldv-text-document{padding:4px}}@media print{.ldv-toolbar{display:none}.ldv-root{height:auto!important;border:0}.ldv-viewport{overflow:visible;padding:0;background:#fff}.ldv-pdf-canvas,.ldv-image-document,.ldv-video-document,.ldv-rich-document,.ldv-text-document,.ldv-table-document table{box-shadow:none}}
|