commit e8f276f427b180743ca15f689c0cef7261976052 Author: jamesvici Date: Tue Sep 15 19:50:37 2026 -0400 Migrate vicihost.com off WordPress to Astro Same approach as the vicidial.com migration: 58 pages, 6 posts, 41 attachments and the 4-item nav exported from wordpress_vicihost via scripts/export-wp.mjs, with the layout and styling ported from this site's own copy of the small-business theme. That theme copy is not identical to vicidial's -- it carries the red VICIhost palette, its own meta description, and shows 6 slides rather than 5 (smallbusiness_ppp) -- so the CSS and slideshow are ported from it rather than shared with the other site. The export script gained handling for custom-link menu items, which this menu uses for its "Home" entry and vicidial's did not. Co-Authored-By: Claude Opus 5 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..c836177 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,16 @@ +# Normalise text to LF in the repository and on checkout. global.css was ported +# from the WordPress theme with CRLF endings and has been renormalised. +* text=auto eol=lf + +# Migrated WordPress uploads and other binaries: never diff, merge or touch endings. +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.ico binary +*.webp binary +*.pdf binary +*.mp4 binary + +# Generated by npm, and pure noise in review. +package-lock.json -diff linguist-generated=true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c0fc27a --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +# Build output. Apache serves /srv/www/vhosts/vicidial/dist directly from disk, +# so this is regenerated in place by `npm run build` and never committed. +dist/ + +# Generated types and caches +.astro/ +node_modules/ + +# Logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Credentials. scripts/export-wp.mjs takes WP_DB_USER / WP_DB_PASSWORD from the +# environment, so keep any local .env holding those out of the repo. +.env +.env.* + +# Editor and OS noise +.vscode/ +.idea/ +*.swp +.DS_Store +Thumbs.db diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 0000000..e762ba5 --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,5 @@ +// @ts-check +import { defineConfig } from 'astro/config'; + +// https://astro.build/config +export default defineConfig({}); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..805728a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4273 @@ +{ + "name": "vicidial", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "vicidial", + "version": "0.0.1", + "dependencies": { + "@splidejs/splide": "^4.1.4", + "astro": "^7.3.2", + "mysql2": "^3.24.4", + "turndown": "^7.2.4" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding/-/compiler-binding-0.4.1.tgz", + "integrity": "sha512-ZYVDW1P58OXyxqZbOMp+/2U9KA7y2esIx9r4pWdpZ/l6fCZhaw4ul+D7EgpRVxYLkyTWqzANbTTUFGPFP8zDHA==", + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@astrojs/compiler-binding-android-arm64": "0.4.1", + "@astrojs/compiler-binding-darwin-arm64": "0.4.1", + "@astrojs/compiler-binding-darwin-x64": "0.4.1", + "@astrojs/compiler-binding-linux-arm64-gnu": "0.4.1", + "@astrojs/compiler-binding-linux-arm64-musl": "0.4.1", + "@astrojs/compiler-binding-linux-x64-gnu": "0.4.1", + "@astrojs/compiler-binding-linux-x64-musl": "0.4.1", + "@astrojs/compiler-binding-wasm32-wasi": "0.4.1", + "@astrojs/compiler-binding-win32-arm64-msvc": "0.4.1", + "@astrojs/compiler-binding-win32-x64-msvc": "0.4.1" + } + }, + "node_modules/@astrojs/compiler-binding-android-arm64": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-android-arm64/-/compiler-binding-android-arm64-0.4.1.tgz", + "integrity": "sha512-Wtx2DZORuNTLASLLZ8hlrjFaJe1LUloatcCn9EPq7knBhRpjMGXeJANIJMeBZG4igvz7x+3nyAJM2iwCSW9xog==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-darwin-arm64": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-arm64/-/compiler-binding-darwin-arm64-0.4.1.tgz", + "integrity": "sha512-7iwXcU+hB60Y1SvOfnWHNioT72gDsDQKaDipXh2Onwp/TvQMozhbvhy13wJR8Af940a0h6PbddCeJFpj791UDA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-darwin-x64": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-x64/-/compiler-binding-darwin-x64-0.4.1.tgz", + "integrity": "sha512-pifjICos49RXhSVKSDu5gDB0/8j0O7DmxSp1DaWW2PyLG5ekwSkcrfOZto5JqhdI7QYMZB3XOiXpsdOXpS4npA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-arm64-gnu": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-gnu/-/compiler-binding-linux-arm64-gnu-0.4.1.tgz", + "integrity": "sha512-hsZMlNWc6LqWHh9LlSwTq1/XCY7pxA5rkkKIdZRV8mgbOz9OwLvjEoe5Jry13eIZjMUQO8XnQyzk8o/Pjw2YFA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-arm64-musl": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-musl/-/compiler-binding-linux-arm64-musl-0.4.1.tgz", + "integrity": "sha512-a3EW27f+Z9uf57vYmpLgUriA1y9wDhKz57PT8D8XlFZt2HZEWhUxKuxI1jvKVI9p8okYee11WXEm/FHY1G9yoQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-x64-gnu": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-gnu/-/compiler-binding-linux-x64-gnu-0.4.1.tgz", + "integrity": "sha512-XruPTKB/SS4DFzeAjQ1ZyM0ieHDjapHkOSnnzRApZ4FXY2YAI7UY3mETjfJiIS/acyZyrnPH5jObv1gATTdUJQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-x64-musl": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-musl/-/compiler-binding-linux-x64-musl-0.4.1.tgz", + "integrity": "sha512-E8j7lGanqNpudtkUbsFaOLJhmwFe4Ecqux7K9hkj4wULIPNZRM2bYZNcMSj8r1oWvaUiwZl8LaaNwv3+14jqhw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-wasm32-wasi": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-wasm32-wasi/-/compiler-binding-wasm32-wasi-0.4.1.tgz", + "integrity": "sha512-vNLxIv41ZE+nmPFtw24cRW5ZXG+ZPcAGtgigtjCP8lvcxKI7u2GrXoMsCgEH5fMw8WCEJpwLvsVBg15rJKAkyA==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.2.4" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@astrojs/compiler-binding-win32-arm64-msvc": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-arm64-msvc/-/compiler-binding-win32-arm64-msvc-0.4.1.tgz", + "integrity": "sha512-/xTDgRsFDoTh0/+KFXJ74DY4Jqn8CoSHwa8UP5RAblHfnRHkenwfSl4zYDET61O9vXKLk09UzHjjq09yP20/AQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-win32-x64-msvc": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-x64-msvc/-/compiler-binding-win32-x64-msvc-0.4.1.tgz", + "integrity": "sha512-0x5J6iHZO0Fjo/CVzoIbXKzWnGESftDbEUQ/oXQ61HhUAFoR7+T1jfToZSNAS+gYyBXHSTpMWYC7lzarbhClcg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-rs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-rs/-/compiler-rs-0.4.1.tgz", + "integrity": "sha512-//NmAuRhy7eU9iP0ceI5Pymy55M+nUZ//kS6XeOyhBWdDib2KbJOyFaVJ52k7sDkJwTKVox7oPu3SpYiVnGm5A==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler-binding": "0.4.1" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.11.0.tgz", + "integrity": "sha512-3rzxJ+xbo0+8YyqOzLziIN32wmsHdCjEVz2sGOpRxJ+Ben/KiLph4ItxBy1abEL+E8fkRzqjg0rfXmaHJGw9JA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.4", + "@types/mdast": "^4.0.4", + "js-yaml": "^4.3.0", + "picomatch": "^4.0.4", + "retext-smartypants": "^6.2.0", + "shiki": "^4.0.2", + "smol-toml": "^1.6.0", + "unified": "^11.0.5" + } + }, + "node_modules/@astrojs/markdown-satteri": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-satteri/-/markdown-satteri-0.4.1.tgz", + "integrity": "sha512-EniHbFNa6SQHDih7JnpPos3NWXO6hdt4raBcOosfGmlfc3gP9CI/sESA3VOf1PgJZ7SFfewlZW9Livn0JugEZg==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.11.0", + "@astrojs/prism": "4.0.2", + "github-slugger": "^2.0.0", + "satteri": "^0.10.3" + } + }, + "node_modules/@astrojs/prism": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.2.tgz", + "integrity": "sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.3.tgz", + "integrity": "sha512-C1TLn5sPJr0x4vk56piHWKbnqlEB8BKyte5Y45V02U+D7BGO5eMqZDH5aPjnkXQWJggvmsTXxH03QMZ9NgWLzQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.4.0", + "dset": "^3.1.4", + "is-docker": "^4.0.0", + "package-manager-detector": "^1.6.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bruits/satteri-darwin-arm64": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-arm64/-/satteri-darwin-arm64-0.10.5.tgz", + "integrity": "sha512-27KTVl4TJkVahMy/ohyA7qd4938G5UNneFUz/PsScYfpIhj0IVAS23mpcJXdPF44sa6nva198lmV/cKIb2YPyA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@bruits/satteri-darwin-x64": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-x64/-/satteri-darwin-x64-0.10.5.tgz", + "integrity": "sha512-IjnLe3nKspq6qaeqGgjT7MT8VrTV74yWRlaag7ZdNsI8TDAYZ0iPxMCo+9KQZHUk5EyVB+reBI/PFWL5KuFw9Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@bruits/satteri-linux-arm64-gnu": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-gnu/-/satteri-linux-arm64-gnu-0.10.5.tgz", + "integrity": "sha512-glkYXZCJywjP13v67eAyAMSJdF+ncvEbYvgi/wOtffL9tQ27lr/zsyzUfgs+ovjJ9d8JNQKiXeiArJcX8PJL9w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-linux-arm64-musl": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-musl/-/satteri-linux-arm64-musl-0.10.5.tgz", + "integrity": "sha512-yWdgG1g17Nh2QyGVlFUxGRa3FEFwiMcpZEyMNWkbM3deC94cmVc+/i9OuyFpdKuWo3GkgoCtYVOoxk1uCnCZIA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-linux-x64-gnu": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-gnu/-/satteri-linux-x64-gnu-0.10.5.tgz", + "integrity": "sha512-FVaLoPT1fBgGl0J+AYebyyXJYBachGl8Oyyrf1lye4RTqCB4S0Gwkj1uM9RJyThUOvx5VUmAT1CnNh1SFHA+kw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-linux-x64-musl": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-musl/-/satteri-linux-x64-musl-0.10.5.tgz", + "integrity": "sha512-EHpVAx2bqW3GINHTKkljtxVfQmVDGWIuwOYOP5YghTj+0PkBa2o8oKPRtQ9Kbsr1Fye8jtUcDjhwj2jMNugZKg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-wasm32-wasi": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-wasm32-wasi/-/satteri-wasm32-wasi-0.10.5.tgz", + "integrity": "sha512-ypz8c/Zmipxp4IoeDa228Gstv6TLzVmNs3yC6wKCoNSOjx1iwpgzu87Y3hTkXFdwChVGU85qeUDuOIarGUZQLw==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.2.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@bruits/satteri-win32-arm64-msvc": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-arm64-msvc/-/satteri-win32-arm64-msvc-0.10.5.tgz", + "integrity": "sha512-siTV88nb0LRqNpkL2gXboqCwVdq95sLtzMHS1/3eONV2gLbB3NAK46wmSMvCO/yquBvI2lvaFIfd8P12ecsxBw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@bruits/satteri-win32-x64-msvc": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-x64-msvc/-/satteri-win32-x64-msvc-0.10.5.tgz", + "integrity": "sha512-C3IfPvfvMXmlzBxaMPKFS1XiuV9pu2mC7YqkPk7PSvTgPZ8gbdASIpHpztDLvTTQjqZ0z1Ol8tK5X+V6XXC0wQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.1.tgz", + "integrity": "sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@clack/core": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.5.1.tgz", + "integrity": "sha512-iHTrHA8MtVuLl2TfZySmcKv1qO2PoyC9Z7pfSDozEuV5vtY3/wcOPKJXlqJ5Oq2Cx5DDGQGAMVx6HZfRRoVEbQ==", + "license": "MIT", + "dependencies": { + "fast-wrap-ansi": "^0.2.0", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 20.12.0" + } + }, + "node_modules/@clack/prompts": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.8.1.tgz", + "integrity": "sha512-dlT1m5e/0yUL0kRNcQn7yGLVThkgbB0Ga/1AmfDDC/8ik6AIiSf2QLQO2zPYvefsHP0aFgxO93cVLCCfDp7kzQ==", + "license": "MIT", + "dependencies": { + "@clack/core": "1.5.1", + "fast-string-width": "^3.0.2", + "fast-wrap-ansi": "^0.2.0", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 20.12.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz", + "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.3", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz", + "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.4.tgz", + "integrity": "sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.3.3" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.4.tgz", + "integrity": "sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.3.3" + } + }, + "node_modules/@img/sharp-freebsd-wasm32": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.4.tgz", + "integrity": "sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA==", + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "dependencies": { + "@img/sharp-wasm32": "0.35.4" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.3.tgz", + "integrity": "sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.3.tgz", + "integrity": "sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.3.tgz", + "integrity": "sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.3.tgz", + "integrity": "sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.3.tgz", + "integrity": "sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.3.tgz", + "integrity": "sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.3.tgz", + "integrity": "sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.3.tgz", + "integrity": "sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.3.tgz", + "integrity": "sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.3.tgz", + "integrity": "sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.4.tgz", + "integrity": "sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.4.tgz", + "integrity": "sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.4.tgz", + "integrity": "sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.4.tgz", + "integrity": "sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.4.tgz", + "integrity": "sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.4.tgz", + "integrity": "sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.3.3" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.4.tgz", + "integrity": "sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.3.3" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.4.tgz", + "integrity": "sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.3.3" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.4.tgz", + "integrity": "sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==", + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.11.3" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-webcontainers-wasm32": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.4.tgz", + "integrity": "sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/sharp-wasm32": "0.35.4" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.4.tgz", + "integrity": "sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.4.tgz", + "integrity": "sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.4.tgz", + "integrity": "sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "license": "MIT" + }, + "node_modules/@mixmark-io/domino": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz", + "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==", + "license": "BSD-2-Clause" + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.4.tgz", + "integrity": "sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g==", + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@oxc-project/types": { + "version": "0.149.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.149.0.tgz", + "integrity": "sha512-Efcc+iF0j3Bf67YjEqIqWXbX5XddXoK/Mw4K1/JuXwRCZ8N16VR7iT23nlCc9XrveFVh/E5Rqs2StT0V8v9LdA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/oxc-project" + } + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.8.tgz", + "integrity": "sha512-tN5aztYkKCte4i5SIrrz5yK/HMjEuCqCSCJa418jOV8tZ1cBY3YF2otxB1ktPxzsLA1BeTqwapK0bfjxNvHJVw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.8.tgz", + "integrity": "sha512-dIYTWl9XprMUiQFoc55KUyk/oS8SKYH3zFl0LTR7RT0Xj4hgSVyuJcroH8JUu8RcpF8fTB6E0aOwCkZoYPcDSQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.8.tgz", + "integrity": "sha512-PCSDQGXD2IyTEFrcgPyBM8jJuGmrbCMuoIOXdbEGVemruKACXoLQJrb+A45Z0L5t1RQkdfJprAYPkikbh7dzdA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.8.tgz", + "integrity": "sha512-Uk7lRsGhPFHVX/sAUC6D5H9Ol30dFHd6iquokll2th3LpdJ3F5CzQB+7DHn0Ri2mG+U7k2zXiPHDrwZenXhwSA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.8.tgz", + "integrity": "sha512-DjszaTEVogPqA5bYzsEeqDCQxbcp2fexQwKcRspYji2yzR68fCf+e4fx6kBSRDwX5/brZaHw/hWS9+A/+/w9sQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.8.tgz", + "integrity": "sha512-zmwa7FTmdzB6aaEEuuls18H6Ap5JmJPSoPTuXixeJZV6tG40SyLkApQtz1g8ptZtiEKqj9OM0oNLPh1AgvE31Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.8.tgz", + "integrity": "sha512-KdYQDPHwJVnbFwdTGMgxsI9SqblBlz6STGM+w1We/d5B8OWWidYH0MwkU/uA1wM5fIpO2MkOVxXrNzzuZhw9ew==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.8.tgz", + "integrity": "sha512-jFJTifHnNPY+yzOoNZQfSIysrVyXzEQPhPnOUjmD1bcQGHH6s7c8cViKWar8YplQImE5N9JRqMCLrM2CdxOrZA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.8.tgz", + "integrity": "sha512-FhiOziBDWPBjbcmRzfLyIJnaP7AVMFXT7YCXPjXxj7wKU3vx24RjrCNN/zjvVa+N2vVoHJwCoUBvsrN/DG3zIA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.8.tgz", + "integrity": "sha512-WnHfADMzOV2Y55wlx1hzzQnar/wDt/VdvWSD99r18Mz9ylNieIGOkRx3UV21h7m/eJvjySYJkO26VvGNFkwsIQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.8.tgz", + "integrity": "sha512-H9tRr5ibfXFVLxbPOseVewewFpl28zcEdjRDt2FTUZU7odxP0gEv1ki4/kGmcGOh78oRwZuuQllGLZ9zTJp84g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.8.tgz", + "integrity": "sha512-UefiqfM3D6IVNlZ8tSGs9+Ejjud2T+oxO0IHADU45Y+lyEjD2dVFyZHbkfX0LUb5Zugo/oIv1eCO/KVYhgYJYA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.8.tgz", + "integrity": "sha512-637Ke4kWSy6rp9cxQ9gMOXlxPgIw/c1beASV4M//3+9I4uwBVOOl74G+e3zyU3u19U7RkRl/HuewixZ/Z6+Rjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.8.tgz", + "integrity": "sha512-xWBkPOF1Q9k/Gv1nQXnVdLxKu74jXppuOM4Z3mnypVUJJJwLsMl7hNJGRAUJoG8A5MgOI1ACKM+wBFxSJzKy4A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.8.tgz", + "integrity": "sha512-uz2ZvfgXbxqNwijjjbxrnvALwpyODDcgc1T1N8N3rf/DXKQmaFwmB4LX4yyjggpwN2obdQLb2rgirX5ffCWYng==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "license": "MIT" + }, + "node_modules/@shikijs/core": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.4.3.tgz", + "integrity": "sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg==", + "license": "MIT", + "dependencies": { + "@shikijs/primitive": "4.4.3", + "@shikijs/types": "4.4.3", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5", + "hast-util-to-html": "^9.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.4.3.tgz", + "integrity": "sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.4.3", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.6" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.4.3.tgz", + "integrity": "sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.4.3", + "@shikijs/vscode-textmate": "^10.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/langs": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.4.3.tgz", + "integrity": "sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.4.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/primitive": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.4.3.tgz", + "integrity": "sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.4.3", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/themes": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.4.3.tgz", + "integrity": "sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.4.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/types": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.3.tgz", + "integrity": "sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@splidejs/splide": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@splidejs/splide/-/splide-4.1.4.tgz", + "integrity": "sha512-5I30evTJcAJQXt6vJ26g2xEkG+l1nXcpEw4xpKh0/FWQ8ozmAeTbtniVtVmz2sH1Es3vgfC4SS8B2X4o5JMptA==", + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.4.tgz", + "integrity": "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", + "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "22.20.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.3.tgz", + "integrity": "sha512-DZmzkmwHzXrLPAXPyKNDzlIwMMUZCVacoD25ywdy5YTKGbOx/2ld+Q38Im2zJ0vBuZP5Prd3VZutKZyXwkOS8A==", + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz", + "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==", + "license": "ISC" + }, + "node_modules/am-i-vibing": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/am-i-vibing/-/am-i-vibing-0.4.0.tgz", + "integrity": "sha512-MxT4XZL7pzLHpuvhDKdMaQHMGGkJDLluKBLsbstn+8wv9sWcFT6h+0ve9qkml95amVTZtZV83gQe2hY+ojgHLg==", + "license": "MIT", + "dependencies": { + "process-ancestry": "^0.1.0" + }, + "bin": { + "am-i-vibing": "dist/cli.mjs" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/astro": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/astro/-/astro-7.3.2.tgz", + "integrity": "sha512-ysTcdpGP61XZpHoMRYC/CK19DQ94qkBvzXMtXEo0gEqPNkmOU/Tv++CtWmzaI4nF2Ck8RXFdiWvdlTWa2oOr9w==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler-rs": "^0.4.0", + "@astrojs/internal-helpers": "0.11.0", + "@astrojs/markdown-satteri": "0.4.1", + "@astrojs/telemetry": "3.3.3", + "@capsizecss/unpack": "^4.0.0", + "@clack/prompts": "^1.1.0", + "@oslojs/encoding": "^1.1.0", + "am-i-vibing": "^0.4.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "ci-info": "^4.4.0", + "clsx": "^2.1.1", + "common-ancestor-path": "^2.0.0", + "cookie": "^2.0.1", + "devalue": "^5.8.1", + "diff": "^9.0.0", + "dset": "^3.1.4", + "es-module-lexer": "^2.0.0", + "esbuild": "^0.28.0", + "find-proc": "0.1.0", + "flattie": "^1.1.1", + "fontace": "~0.4.1", + "get-tsconfig": "5.0.0-beta.4", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "js-yaml": "^4.3.0", + "jsonc-parser": "^3.3.1", + "magic-string": "^1.0.0", + "magicast": "^0.5.2", + "mrmime": "^2.0.1", + "neotraverse": "^1.0.1", + "obug": "^2.1.1", + "p-limit": "^7.3.0", + "p-queue": "^9.1.0", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.4", + "semver": "^7.7.4", + "shiki": "^4.0.2", + "smol-toml": "^1.6.0", + "svgo": "^4.0.1", + "tinyclip": "^0.1.12", + "tinyexec": "^1.0.4", + "tinyglobby": "^0.2.15", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.5", + "unstorage": "^1.17.5", + "vite": "^8.0.13", + "vitefu": "^1.1.2", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^22.0.0", + "zod": "^4.5.4" + }, + "bin": { + "astro": "bin/astro.mjs" + }, + "engines": { + "node": ">=22.12.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.35.4" + }, + "peerDependencies": { + "@astrojs/markdown-remark": "^7.3.0" + }, + "peerDependenciesMeta": { + "@astrojs/markdown-remark": { + "optional": true + } + } + }, + "node_modules/aws-ssl-profiles": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/common-ancestor-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz", + "integrity": "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">= 18" + } + }, + "node_modules/cookie": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-2.0.1.tgz", + "integrity": "sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==", + "license": "MIT", + "engines": { + "node": ">=22" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.3.tgz", + "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==", + "license": "MIT" + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-select": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", + "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", + "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/defu": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devalue": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.9.2.tgz", + "integrity": "sha512-po4PAY5c53tw5XMocSnf8A/5OHhbbUftpr93aEN6BBoAdntUmK7vu7wOATqvt7cXO7m1Cl4gMVn6p7n6n4mj0w==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-9.0.0.tgz", + "integrity": "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", + "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz", + "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==", + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/find-proc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/find-proc/-/find-proc-0.1.0.tgz", + "integrity": "sha512-OaOpEYv2PiQ7SQ5LIrl+deA1XaWcxEjnpM6VuWXTUvn+teIXxeFTLDmu18/zDQpFmHN4o3oDBX+BT0AGwEhemg==", + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz", + "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.2" + } + }, + "node_modules/fontkitten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz", + "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "license": "MIT", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/get-tsconfig": { + "version": "5.0.0-beta.4", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-5.0.0-beta.4.tgz", + "integrity": "sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "engines": { + "node": ">=20.20.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, + "node_modules/h3": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz", + "integrity": "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.3", + "crossws": "^0.3.5", + "defu": "^6.1.6", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-docker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-4.0.0.tgz", + "integrity": "sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/lru.min": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.5.tgz", + "integrity": "sha512-5J9ysMYUpYIg9RF2vJpy9SinEmSviFSe0GyPpCQ4L5QSkLAgeLXlTAOu2ZwWUU5m+0SBl6gUU1R1ZQB3aKypfA==", + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, + "node_modules/magic-string": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.1.tgz", + "integrity": "sha512-8lyCu36ErXR0J9uaGKlKQoiLZKmtI63YGLE8G2o9jyRPdr4X47LusSOwgOJOzcVtp81fTAAjxR7BwKz682Jhow==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.6.0" + } + }, + "node_modules/magicast": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.5.tgz", + "integrity": "sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "source-map-js": "^1.2.1" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/mysql2": { + "version": "3.24.4", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.24.4.tgz", + "integrity": "sha512-A2olluVlj0mvgyIRRISMEzXc51m+21mRtcMVjJyIpt2GG98+XrC9m9HzsqcMsX2LcnfccJvY5NB22g8fENBnOA==", + "license": "MIT", + "dependencies": { + "aws-ssl-profiles": "^1.1.2", + "generate-function": "^2.3.1", + "iconv-lite": "^0.7.3", + "long": "^5.3.2", + "lru.min": "^1.1.4", + "named-placeholders": "^1.1.6", + "sql-escaper": "^1.5.1" + }, + "engines": { + "node": ">= 8.0" + }, + "peerDependencies": { + "@types/node": ">= 8" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.6.tgz", + "integrity": "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==", + "license": "MIT", + "dependencies": { + "lru.min": "^1.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neotraverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-1.0.1.tgz", + "integrity": "sha512-WmmLty1YWwJl9yZi77v2dVIV6X2kuYV8YYBI/G3LWGKdGHmHUvL1z7FW0iDvEvGAwNEoc5x1tOOOyDnf5jJw/w==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-mock-http": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.5.tgz", + "integrity": "sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/obug": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.2.1.tgz", + "integrity": "sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==", + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.12.tgz", + "integrity": "sha512-65S/5gk9YSsaRjcyf7Nfa6h/d3E8/1gslpXfI4W7Dxn/oap8IKRuNT5VXkLQ1YFKIEg4apRY4Pj6aiwFzrDdmw==", + "license": "MIT" + }, + "node_modules/oniguruma-parser": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz", + "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz", + "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.2", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/p-limit": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.2.tgz", + "integrity": "sha512-Ll0w3fU24vYpXoZmjjZIee6bJQDgG0oAyo1PdmFYI8UDwJJddaHAypxIH9avUu+t+lSsAwKVsb1jDCMIIChliw==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.2.1" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.3.3.tgz", + "integrity": "sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.4", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.2.tgz", + "integrity": "sha512-prbX4Z3YszrFNgH+MW5Zoeq3baXrMtP/MQnFeET90UB/GtGcGDQ5Usg9OCy6ETjTTntOw1SL2z9fMPUppN3Guw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.8.0.tgz", + "integrity": "sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==", + "license": "MIT" + }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", + "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.18", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/process-ancestry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/process-ancestry/-/process-ancestry-0.1.0.tgz", + "integrity": "sha512-tGqJW/UnclpYASFcM6Xh8D8l/BMtaQ9+CSG0vlJSJTcdMM4lDRv4c6H0Pdcsfted+bVczdYSfk2fdukg2gQkZg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/property-information": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rolldown": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.8.tgz", + "integrity": "sha512-Z67nTmhZe7anqnM/EjI392w5i/ANUinjip7QYsOyN37oayduxt3ksdX0hf5OOamkAd53BiIHfbfSzfUmzKFQqQ==", + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.149.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.8", + "@rolldown/binding-android-arm64": "1.2.8", + "@rolldown/binding-darwin-arm64": "1.2.8", + "@rolldown/binding-darwin-x64": "1.2.8", + "@rolldown/binding-freebsd-x64": "1.2.8", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.8", + "@rolldown/binding-linux-arm64-gnu": "1.2.8", + "@rolldown/binding-linux-arm64-musl": "1.2.8", + "@rolldown/binding-linux-ppc64-gnu": "1.2.8", + "@rolldown/binding-linux-s390x-gnu": "1.2.8", + "@rolldown/binding-linux-x64-gnu": "1.2.8", + "@rolldown/binding-linux-x64-musl": "1.2.8", + "@rolldown/binding-openharmony-arm64": "1.2.8", + "@rolldown/binding-win32-arm64-msvc": "1.2.8", + "@rolldown/binding-win32-x64-msvc": "1.2.8" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/satteri": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/satteri/-/satteri-0.10.5.tgz", + "integrity": "sha512-Ao1LKpAEa9Wdg0otgbVKViZHEq9ebdXe4DMrp3s9vQAU0HNIuHnFEuMuOcm0ZIXyV0Yzxj91NvhLpvXZJO/5ZQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.5", + "@types/hast": "^3.0.5", + "@types/mdast": "^4.0.4", + "@types/unist": "^3.0.3" + }, + "optionalDependencies": { + "@bruits/satteri-darwin-arm64": "0.10.5", + "@bruits/satteri-darwin-x64": "0.10.5", + "@bruits/satteri-linux-arm64-gnu": "0.10.5", + "@bruits/satteri-linux-arm64-musl": "0.10.5", + "@bruits/satteri-linux-x64-gnu": "0.10.5", + "@bruits/satteri-linux-x64-musl": "0.10.5", + "@bruits/satteri-wasm32-wasi": "0.10.5", + "@bruits/satteri-win32-arm64-msvc": "0.10.5", + "@bruits/satteri-win32-x64-msvc": "0.10.5" + } + }, + "node_modules/sax": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.4.tgz", + "integrity": "sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.1.0", + "detect-libc": "^2.1.2", + "semver": "^7.8.5" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.35.4", + "@img/sharp-darwin-x64": "0.35.4", + "@img/sharp-freebsd-wasm32": "0.35.4", + "@img/sharp-libvips-darwin-arm64": "1.3.3", + "@img/sharp-libvips-darwin-x64": "1.3.3", + "@img/sharp-libvips-linux-arm": "1.3.3", + "@img/sharp-libvips-linux-arm64": "1.3.3", + "@img/sharp-libvips-linux-ppc64": "1.3.3", + "@img/sharp-libvips-linux-riscv64": "1.3.3", + "@img/sharp-libvips-linux-s390x": "1.3.3", + "@img/sharp-libvips-linux-x64": "1.3.3", + "@img/sharp-libvips-linuxmusl-arm64": "1.3.3", + "@img/sharp-libvips-linuxmusl-x64": "1.3.3", + "@img/sharp-linux-arm": "0.35.4", + "@img/sharp-linux-arm64": "0.35.4", + "@img/sharp-linux-ppc64": "0.35.4", + "@img/sharp-linux-riscv64": "0.35.4", + "@img/sharp-linux-s390x": "0.35.4", + "@img/sharp-linux-x64": "0.35.4", + "@img/sharp-linuxmusl-arm64": "0.35.4", + "@img/sharp-linuxmusl-x64": "0.35.4", + "@img/sharp-webcontainers-wasm32": "0.35.4", + "@img/sharp-win32-arm64": "0.35.4", + "@img/sharp-win32-ia32": "0.35.4", + "@img/sharp-win32-x64": "0.35.4" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/shiki": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.4.3.tgz", + "integrity": "sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "4.4.3", + "@shikijs/engine-javascript": "4.4.3", + "@shikijs/engine-oniguruma": "4.4.3", + "@shikijs/langs": "4.4.3", + "@shikijs/themes": "4.4.3", + "@shikijs/types": "4.4.3", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/smol-toml": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.8.0.tgz", + "integrity": "sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/sql-escaper": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/sql-escaper/-/sql-escaper-1.5.2.tgz", + "integrity": "sha512-6CKD38c31SENivxOADeMNLdukOnUxUcflKtzVWzace7Riv1v7cAEym5Cx9Q7gYZ3ezIJI7ZpqecQq8cqNeSSFg==", + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=2.0.0", + "node": ">=12.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/mysqljs/sql-escaper?sponsor=1" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/svgo": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.1.0.tgz", + "integrity": "sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^6.0.0", + "css-tree": "^3.0.1", + "css-what": "^7.0.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "1.6.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tinyclip": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/tinyclip/-/tinyclip-0.1.15.tgz", + "integrity": "sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==", + "license": "MIT", + "engines": { + "node": "^16.14.0 || >= 17.3.0" + } + }, + "node_modules/tinyexec": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.1.tgz", + "integrity": "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, + "node_modules/turndown": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.2.4.tgz", + "integrity": "sha512-I8yFsfRzmzK0WV1pNNOA4A7y4RDfFxPRxb3t+e3ui14qSGOxGtiSP6GjeX+Y6CHb7HYaFj7ECUD7VE5kQMZWGQ==", + "license": "MIT", + "dependencies": { + "@mixmark-io/domino": "^2.2.0" + }, + "engines": { + "node": ">=18", + "npm": ">=9" + } + }, + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.7.0.tgz", + "integrity": "sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/undici": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-8.10.2.tgz", + "integrity": "sha512-/y4/bH9YNU5hi9NIrpOuvGXFcxrj3CMrV+/AYpowAYTpHn8gX/XPFjNy766FPoYY0miQhdW977JFWKGNhBdwyQ==", + "license": "MIT", + "engines": { + "node": ">=22.19.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT", + "peer": true + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.5.tgz", + "integrity": "sha512-ULe/Cs+ZIsq+dcFofNkhqielCrUJnb5mr+Yc4EBM2VlL+6OZR6+cjtI2mT1bJvRBrVncqHAbLURxmPLcCXzWMg==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ohash": "^2.0.11", + "undici": "^8.0.0" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unstorage": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.0.tgz", + "integrity": "sha512-lhZBVvEHefgE+HQZC9O7EBJgCU/nVzFNl7vkS4RE0APtWLP02/8QVIkQtzBxPquh7lq5/78NHipTj7ODQ6XuyQ==", + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.7", + "postcss": "^8.5.28", + "rolldown": "~1.2.6", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.7.1", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz", + "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz", + "integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..3836b2f --- /dev/null +++ b/package.json @@ -0,0 +1,23 @@ +{ + "name": "vicidial", + "type": "module", + "version": "0.0.1", + "engines": { + "node": ">=22.12.0" + }, + "scripts": { + "dev": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@splidejs/splide": "^4.1.4", + "astro": "^7.3.2", + "mysql2": "^3.24.4", + "turndown": "^7.2.4" + }, + "allowScripts": { + "esbuild": true + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..5b11f9f Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..f6e6d1d --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-Agent: * +Allow: / diff --git a/public/theme-images/btn.png b/public/theme-images/btn.png new file mode 100644 index 0000000..ea6d414 Binary files /dev/null and b/public/theme-images/btn.png differ diff --git a/public/theme-images/cropped-vicihost-logo_300x100.jpg b/public/theme-images/cropped-vicihost-logo_300x100.jpg new file mode 100644 index 0000000..5ca5c05 Binary files /dev/null and b/public/theme-images/cropped-vicihost-logo_300x100.jpg differ diff --git a/public/theme-images/d5logofooter.png b/public/theme-images/d5logofooter.png new file mode 100644 index 0000000..40fbd25 Binary files /dev/null and b/public/theme-images/d5logofooter.png differ diff --git a/public/theme-images/h3bg.png b/public/theme-images/h3bg.png new file mode 100644 index 0000000..18d7140 Binary files /dev/null and b/public/theme-images/h3bg.png differ diff --git a/public/theme-images/listicon.gif b/public/theme-images/listicon.gif new file mode 100644 index 0000000..dffa443 Binary files /dev/null and b/public/theme-images/listicon.gif differ diff --git a/public/theme-images/listiconf.gif b/public/theme-images/listiconf.gif new file mode 100644 index 0000000..7cc866e Binary files /dev/null and b/public/theme-images/listiconf.gif differ diff --git a/public/theme-images/logo.png b/public/theme-images/logo.png new file mode 100644 index 0000000..ec8d100 Binary files /dev/null and b/public/theme-images/logo.png differ diff --git a/public/theme-images/next.png b/public/theme-images/next.png new file mode 100644 index 0000000..dd4a34d Binary files /dev/null and b/public/theme-images/next.png differ diff --git a/public/theme-images/prev.png b/public/theme-images/prev.png new file mode 100644 index 0000000..d15db4e Binary files /dev/null and b/public/theme-images/prev.png differ diff --git a/public/theme-images/search.png b/public/theme-images/search.png new file mode 100644 index 0000000..a280459 Binary files /dev/null and b/public/theme-images/search.png differ diff --git a/public/theme-images/searchb.png b/public/theme-images/searchb.png new file mode 100644 index 0000000..1acc77e Binary files /dev/null and b/public/theme-images/searchb.png differ diff --git a/public/theme-images/slide-shadow.png b/public/theme-images/slide-shadow.png new file mode 100644 index 0000000..2930e6b Binary files /dev/null and b/public/theme-images/slide-shadow.png differ diff --git a/public/theme-images/sticky.png b/public/theme-images/sticky.png new file mode 100644 index 0000000..aa21b8d Binary files /dev/null and b/public/theme-images/sticky.png differ diff --git a/scripts/export-wp.mjs b/scripts/export-wp.mjs new file mode 100644 index 0000000..e0caa0e --- /dev/null +++ b/scripts/export-wp.mjs @@ -0,0 +1,269 @@ +#!/usr/bin/env node +// One-time (re-runnable) export of the WordPress content into Astro content collections. +// Requires read-only DB creds via env vars: WP_DB_USER, WP_DB_PASSWORD +// (host/db default to the known wordpress_vicidial instance, override via WP_DB_HOST/WP_DB_NAME). +// +// WP_DB_USER=viciadmin WP_DB_PASSWORD=... node scripts/export-wp.mjs + +import mysql from 'mysql2/promise'; +import TurndownService from 'turndown'; +import fs from 'node:fs/promises'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.resolve(__dirname, '..'); + +const DB_HOST = process.env.WP_DB_HOST || '192.168.202.2'; +const DB_USER = process.env.WP_DB_USER; +const DB_PASSWORD = process.env.WP_DB_PASSWORD; +const DB_NAME = process.env.WP_DB_NAME || 'wordpress_vicihost'; +const TABLE_PREFIX = 'vhmain_'; + +if (!DB_USER || !DB_PASSWORD) { + console.error('Set WP_DB_USER and WP_DB_PASSWORD (read-only WordPress DB creds) before running.'); + process.exit(1); +} + +const UPLOADS_SRC = '/srv/www/vhosts/vicihost-old/wp-content/uploads'; +const UPLOADS_DEST = path.join(ROOT, 'src/assets/uploads'); +const PAGES_DEST = path.join(ROOT, 'src/content/pages'); +const POSTS_DEST = path.join(ROOT, 'src/content/posts'); +const NAV_DEST = path.join(ROOT, 'src/data/nav.json'); + +const turndown = new TurndownService({ headingStyle: 'atx', codeBlockStyle: 'fenced' }); + +// Emit literal
rather than Markdown's trailing-two-spaces hard break. Markdown drops a +// hard break at the start of a paragraph, and this content uses leading breaks deliberately to +// space out sections -- raw tags survive that round-trip, and render identically. +// Deliberately no trailing newline: a lone tag on its own line starts a raw HTML block +// (CommonMark type 7), which would stop the rest of the paragraph being parsed as Markdown. +turndown.addRule('lineBreak', { + filter: 'br', + replacement: () => '
', +}); + +// This DB's post_content has literal backslash-n sequences from a past export/import, +// not real newlines -- normalize before treating it as HTML/text. The content also contains +// malformed `
` closing tags, which browsers (and therefore the old site) render as a +// line break, but an HTML parser drops -- rewrite them so those breaks survive. +function fixLiteralNewlines(text) { + return text + .replace(/\\r\\n/g, '\n') + .replace(/\\n/g, '\n') + .replace(/\r\n/g, '\n') + .replace(/\r/g, '\n') + .replace(/<\/br\s*>/gi, '
'); +} + +// Classic-editor content is stored without

tags and rendered through WordPress's +// wpautop filter at display time. Reproduce that so converted Markdown keeps paragraph breaks. +function wpautop(text) { + return text + .split(/\n\s*\n/) + .map((block) => block.trim()) + .filter(Boolean) + .map((block) => { + if (/^<(h[1-6]|div|ul|ol|li|table|blockquote|p)[ >]/i.test(block)) return block; + return `

${block.replace(/\n/g, '
\n')}

`; + }) + .join('\n'); +} + +function frontmatterString(value) { + return `"${String(value).replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`; +} + +function rewriteImageUrls(html, fromDir) { + const relToUploads = path.relative(fromDir, UPLOADS_DEST); + return html.replace( + /(?:https?:\/\/(?:www\.|wp\.)?vicihost\.com)?\/wp-content\/uploads\/([^\s"')]+)/g, + (_match, relPath) => `${relToUploads}/${relPath}` + ); +} + +// Content links between pages are stored as absolute WordPress URLs against www.vicihost.com. +// Turn them into site-relative paths. IDs with no published page/post behind them (deleted +// pages, a stray revision) are left alone: they are already broken on the live site. +function rewriteInternalLinks(html, linkMap, unresolved) { + return html.replace( + /https?:\/\/(?:www\.|wp\.)?vicihost\.com\/\?(?:page_id|p)=(\d+)/gi, + (match, id) => { + const target = linkMap.get(Number(id)); + if (!target) { + unresolved.add(id); + return match; + } + return target; + } + ); +} + +// WordPress expands [caption] at render time via do_shortcode(); the raw post_content keeps it +// literal, so it has to be expanded here or it shows up as visible markup on the page. +// The shortcode is swapped for a placeholder before the HTML->Markdown conversion and rebuilt +// afterwards, so the inside still goes through Turndown (and therefore still gets picked +// up by Astro's image pipeline) rather than being frozen as raw HTML pointing into src/assets. +const CAPTION_PLACEHOLDER = (i) => `CAPTIONPLACEHOLDER${i}END`; + +function extractCaptions(html, captions) { + return html.replace(/\[caption([^\]]*)\]([\s\S]*?)\[\/caption\]/gi, (_match, attrs, inner) => { + const lastTag = inner.lastIndexOf('>'); + captions.push({ + align: (attrs.match(/align=["']?(align\w+)["']?/i) || [, 'aligncenter'])[1], + width: (attrs.match(/width=["']?(\d+)["']?/i) || [, ''])[1], + mediaHtml: inner.slice(0, lastTag + 1), + text: inner.slice(lastTag + 1).trim(), + }); + return CAPTION_PLACEHOLDER(captions.length - 1); + }); +} + +// Blank lines around the image are load-bearing: they close the surrounding raw HTML block so +// the image is parsed as Markdown rather than swallowed as literal HTML. +function buildCaption({ align, width, mediaHtml, text }) { + const media = turndown.turndown(mediaHtml).trim(); + const style = width ? ` style="width: ${Number(width) + 10}px"` : ''; + const caption = text ? `\n

${text}

` : ''; + return `
\n\n${media}\n${caption}\n
`; +} + +async function buildLinkMap(conn) { + const [rows] = await conn.execute( + `SELECT ID, post_type, post_name FROM ${TABLE_PREFIX}posts + WHERE post_status = 'publish' AND post_type IN ('page', 'post')` + ); + return new Map(rows.map((r) => [r.ID, r.post_type === 'post' ? `/blog/${r.post_name}` : `/${r.post_name}`])); +} + +async function copyAttachments() { + // Copy the whole uploads tree rather than just the 82 attachment rows: WordPress generates + // multiple resized variants per image (e.g. "-1008x1024.png") that content tags/srcsets + // reference directly but that aren't tracked as their own attachment posts in the DB. + await fs.rm(UPLOADS_DEST, { recursive: true, force: true }); + await fs.cp(UPLOADS_SRC, UPLOADS_DEST, { recursive: true }); + console.log(`Copied uploads tree to ${UPLOADS_DEST}`); +} + +async function exportPostType(conn, postType, destDir, { attachmentPaths, thumbnails, linkMap, unresolved }) { + const [rows] = await conn.execute( + `SELECT ID, post_title, post_name, post_date, post_content, post_excerpt + FROM ${TABLE_PREFIX}posts WHERE post_type = ? AND post_status = 'publish' ORDER BY post_date DESC`, + [postType] + ); + + await fs.mkdir(destDir, { recursive: true }); + + for (const row of rows) { + const slug = row.post_name || String(row.ID); + let html = fixLiteralNewlines(row.post_content || ''); + if (!/^\s*<(p|div|h[1-6]|ul|ol|table)[ >]/i.test(html)) { + html = wpautop(html); + } + html = rewriteImageUrls(html, destDir); + html = rewriteInternalLinks(html, linkMap, unresolved); + + const captions = []; + html = extractCaptions(html, captions); + const markdown = turndown + .turndown(html) + .replace(/CAPTIONPLACEHOLDER(\d+)END/g, (_m, i) => buildCaption(captions[Number(i)])); + + let excerpt = fixLiteralNewlines(row.post_excerpt || ''); + if (!excerpt) { + const plain = html + .replace(/CAPTIONPLACEHOLDER\d+END/g, ' ') + .replace(/<[^>]+>/g, ' ') + .replace(/\s+/g, ' ') + .trim(); + // 60 words: what the theme's front-page loop sets ($sbExcerptLength = 60). + // The slideshow truncates this further to 30 at render, as the theme does. + excerpt = plain.split(' ').slice(0, 60).join(' '); + } + + const frontmatter = [`title: ${frontmatterString(row.post_title)}`, `slug: ${frontmatterString(slug)}`]; + if (postType === 'post') { + frontmatter.push(`date: ${frontmatterString(row.post_date.toISOString())}`); + frontmatter.push(`excerpt: ${frontmatterString(excerpt)}`); + + const thumbId = thumbnails.get(row.ID); + const thumbFile = thumbId && attachmentPaths.get(Number(thumbId)); + if (thumbFile) { + const relToUploads = path.relative(destDir, UPLOADS_DEST); + frontmatter.push(`featuredImage: ${frontmatterString(`${relToUploads}/${thumbFile}`)}`); + } + } + + await fs.writeFile(path.join(destDir, `${slug}.md`), `---\n${frontmatter.join('\n')}\n---\n\n${markdown}\n`); + } + console.log(`Wrote ${rows.length} ${postType}(s) to ${destDir}`); +} + +async function exportNav(conn) { + // A menu item is either a reference to a page/post (title and URL come from the target) or a + // custom link, which carries its own label and URL -- this menu's "Home" entry is the latter. + const [navRows] = await conn.execute( + `SELECT p.ID, p.menu_order, p.post_title, + MAX(CASE WHEN pm.meta_key = '_menu_item_object_id' THEN pm.meta_value END) AS object_id, + MAX(CASE WHEN pm.meta_key = '_menu_item_type' THEN pm.meta_value END) AS item_type, + MAX(CASE WHEN pm.meta_key = '_menu_item_url' THEN pm.meta_value END) AS item_url + FROM ${TABLE_PREFIX}posts p + JOIN ${TABLE_PREFIX}postmeta pm ON pm.post_id = p.ID + WHERE p.post_type = 'nav_menu_item' AND p.post_status = 'publish' + GROUP BY p.ID, p.menu_order, p.post_title + ORDER BY p.menu_order` + ); + + const targetIds = navRows.filter((r) => r.item_type !== 'custom').map((r) => Number(r.object_id)); + const [targetRows] = targetIds.length + ? await conn.query(`SELECT ID, post_title, post_name, post_type FROM ${TABLE_PREFIX}posts WHERE ID IN (?)`, [targetIds]) + : [[]]; + const targets = new Map(targetRows.map((r) => [r.ID, r])); + + const nav = navRows.map((r) => { + if (r.item_type === 'custom') { + return { title: r.post_title, href: r.item_url || '/' }; + } + const target = targets.get(Number(r.object_id)); + const href = target?.post_type === 'post' ? `/blog/${target.post_name}` : `/${target?.post_name ?? ''}`; + // WordPress lets a menu item override the target's label; fall back to the target title. + return { title: r.post_title || target?.post_title || '', href }; + }); + + await fs.mkdir(path.dirname(NAV_DEST), { recursive: true }); + await fs.writeFile(NAV_DEST, `${JSON.stringify(nav, null, 2)}\n`); + console.log(`Wrote ${nav.length} nav items to ${NAV_DEST}`); +} + +async function main() { + const conn = await mysql.createConnection({ host: DB_HOST, user: DB_USER, password: DB_PASSWORD, database: DB_NAME }); + + const [attachmentRows] = await conn.execute( + `SELECT p.ID, pm.meta_value AS file FROM ${TABLE_PREFIX}posts p + JOIN ${TABLE_PREFIX}postmeta pm ON pm.post_id = p.ID AND pm.meta_key = '_wp_attached_file' + WHERE p.post_type = 'attachment'` + ); + const attachmentPaths = new Map(attachmentRows.map((r) => [r.ID, r.file])); + + const [thumbRows] = await conn.execute(`SELECT post_id, meta_value FROM ${TABLE_PREFIX}postmeta WHERE meta_key = '_thumbnail_id'`); + const thumbnails = new Map(thumbRows.map((r) => [r.post_id, r.meta_value])); + + await copyAttachments(); + const linkMap = await buildLinkMap(conn); + const unresolved = new Set(); + + await exportPostType(conn, 'page', PAGES_DEST, { attachmentPaths, thumbnails, linkMap, unresolved }); + await exportPostType(conn, 'post', POSTS_DEST, { attachmentPaths, thumbnails, linkMap, unresolved }); + + if (unresolved.size) { + console.warn(`Left ${unresolved.size} link(s) pointing at WordPress IDs with no published page: ${[...unresolved].join(', ')}`); + } + await exportNav(conn); + + await conn.end(); +} + +main().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/src/assets/uploads/2014/05/chat_customer_screenshot_20160818-150x150.png b/src/assets/uploads/2014/05/chat_customer_screenshot_20160818-150x150.png new file mode 100644 index 0000000..645cb69 Binary files /dev/null and b/src/assets/uploads/2014/05/chat_customer_screenshot_20160818-150x150.png differ diff --git a/src/assets/uploads/2014/05/chat_customer_screenshot_20160818-300x240.png b/src/assets/uploads/2014/05/chat_customer_screenshot_20160818-300x240.png new file mode 100644 index 0000000..58300a0 Binary files /dev/null and b/src/assets/uploads/2014/05/chat_customer_screenshot_20160818-300x240.png differ diff --git a/src/assets/uploads/2014/05/chat_customer_screenshot_20160818-442x354.png b/src/assets/uploads/2014/05/chat_customer_screenshot_20160818-442x354.png new file mode 100644 index 0000000..91e2cd6 Binary files /dev/null and b/src/assets/uploads/2014/05/chat_customer_screenshot_20160818-442x354.png differ diff --git a/src/assets/uploads/2014/05/chat_customer_screenshot_20160818.png b/src/assets/uploads/2014/05/chat_customer_screenshot_20160818.png new file mode 100644 index 0000000..d1f465e Binary files /dev/null and b/src/assets/uploads/2014/05/chat_customer_screenshot_20160818.png differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_1c-150x150.jpg b/src/assets/uploads/2014/05/main_page_big_image_1c-150x150.jpg new file mode 100644 index 0000000..3f331d2 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_1c-150x150.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_1c-300x114.jpg b/src/assets/uploads/2014/05/main_page_big_image_1c-300x114.jpg new file mode 100644 index 0000000..5abbaa9 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_1c-300x114.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_1c-930x354.jpg b/src/assets/uploads/2014/05/main_page_big_image_1c-930x354.jpg new file mode 100644 index 0000000..9e8f333 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_1c-930x354.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_1c.jpg b/src/assets/uploads/2014/05/main_page_big_image_1c.jpg new file mode 100644 index 0000000..563282e Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_1c.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_1d-150x150.jpg b/src/assets/uploads/2014/05/main_page_big_image_1d-150x150.jpg new file mode 100644 index 0000000..cc3d48e Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_1d-150x150.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_1d-300x114.jpg b/src/assets/uploads/2014/05/main_page_big_image_1d-300x114.jpg new file mode 100644 index 0000000..771cad8 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_1d-300x114.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_1d-930x354.jpg b/src/assets/uploads/2014/05/main_page_big_image_1d-930x354.jpg new file mode 100644 index 0000000..07dca1b Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_1d-930x354.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_1d.jpg b/src/assets/uploads/2014/05/main_page_big_image_1d.jpg new file mode 100644 index 0000000..8ac3a36 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_1d.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_1e-150x150.jpg b/src/assets/uploads/2014/05/main_page_big_image_1e-150x150.jpg new file mode 100644 index 0000000..2f28fad Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_1e-150x150.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_1e-300x114.jpg b/src/assets/uploads/2014/05/main_page_big_image_1e-300x114.jpg new file mode 100644 index 0000000..4575271 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_1e-300x114.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_1e-930x354.jpg b/src/assets/uploads/2014/05/main_page_big_image_1e-930x354.jpg new file mode 100644 index 0000000..e950081 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_1e-930x354.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_1e.jpg b/src/assets/uploads/2014/05/main_page_big_image_1e.jpg new file mode 100644 index 0000000..f648865 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_1e.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_2e-150x150.jpg b/src/assets/uploads/2014/05/main_page_big_image_2e-150x150.jpg new file mode 100644 index 0000000..8df79f3 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_2e-150x150.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_2e-300x114.jpg b/src/assets/uploads/2014/05/main_page_big_image_2e-300x114.jpg new file mode 100644 index 0000000..ed88c90 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_2e-300x114.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_2e-930x354.jpg b/src/assets/uploads/2014/05/main_page_big_image_2e-930x354.jpg new file mode 100644 index 0000000..549c151 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_2e-930x354.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_2e.jpg b/src/assets/uploads/2014/05/main_page_big_image_2e.jpg new file mode 100644 index 0000000..4b56735 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_2e.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_3b-150x150.jpg b/src/assets/uploads/2014/05/main_page_big_image_3b-150x150.jpg new file mode 100644 index 0000000..63e9d19 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_3b-150x150.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_3b-300x114.jpg b/src/assets/uploads/2014/05/main_page_big_image_3b-300x114.jpg new file mode 100644 index 0000000..1265106 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_3b-300x114.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_3b-930x354.jpg b/src/assets/uploads/2014/05/main_page_big_image_3b-930x354.jpg new file mode 100644 index 0000000..fec04d7 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_3b-930x354.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_3b.jpg b/src/assets/uploads/2014/05/main_page_big_image_3b.jpg new file mode 100644 index 0000000..12184e9 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_3b.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_5a-150x150.jpg b/src/assets/uploads/2014/05/main_page_big_image_5a-150x150.jpg new file mode 100644 index 0000000..7c72dec Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_5a-150x150.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_5a-300x114.jpg b/src/assets/uploads/2014/05/main_page_big_image_5a-300x114.jpg new file mode 100644 index 0000000..33ca9f9 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_5a-300x114.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_5a-930x354.jpg b/src/assets/uploads/2014/05/main_page_big_image_5a-930x354.jpg new file mode 100644 index 0000000..297f1ea Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_5a-930x354.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_5a.jpg b/src/assets/uploads/2014/05/main_page_big_image_5a.jpg new file mode 100644 index 0000000..c936ac8 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_5a.jpg differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_small_20151114-150x150.png b/src/assets/uploads/2014/05/main_page_big_image_small_20151114-150x150.png new file mode 100644 index 0000000..b3ea7af Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_small_20151114-150x150.png differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_small_20151114-300x114.png b/src/assets/uploads/2014/05/main_page_big_image_small_20151114-300x114.png new file mode 100644 index 0000000..7024621 Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_small_20151114-300x114.png differ diff --git a/src/assets/uploads/2014/05/main_page_big_image_small_20151114.png b/src/assets/uploads/2014/05/main_page_big_image_small_20151114.png new file mode 100644 index 0000000..eb2813b Binary files /dev/null and b/src/assets/uploads/2014/05/main_page_big_image_small_20151114.png differ diff --git a/src/assets/uploads/2014/05/vicihost-logo_300x100-150x100.jpg b/src/assets/uploads/2014/05/vicihost-logo_300x100-150x100.jpg new file mode 100644 index 0000000..ff459c4 Binary files /dev/null and b/src/assets/uploads/2014/05/vicihost-logo_300x100-150x100.jpg differ diff --git a/src/assets/uploads/2014/05/vicihost-logo_300x100.jpg b/src/assets/uploads/2014/05/vicihost-logo_300x100.jpg new file mode 100644 index 0000000..d053f2e Binary files /dev/null and b/src/assets/uploads/2014/05/vicihost-logo_300x100.jpg differ diff --git a/src/assets/uploads/2015/09/main_page_big_image_encryption-150x150.png b/src/assets/uploads/2015/09/main_page_big_image_encryption-150x150.png new file mode 100644 index 0000000..1ecf473 Binary files /dev/null and b/src/assets/uploads/2015/09/main_page_big_image_encryption-150x150.png differ diff --git a/src/assets/uploads/2015/09/main_page_big_image_encryption-300x114.png b/src/assets/uploads/2015/09/main_page_big_image_encryption-300x114.png new file mode 100644 index 0000000..8aab377 Binary files /dev/null and b/src/assets/uploads/2015/09/main_page_big_image_encryption-300x114.png differ diff --git a/src/assets/uploads/2015/09/main_page_big_image_encryption-930x354.png b/src/assets/uploads/2015/09/main_page_big_image_encryption-930x354.png new file mode 100644 index 0000000..bf56c29 Binary files /dev/null and b/src/assets/uploads/2015/09/main_page_big_image_encryption-930x354.png differ diff --git a/src/assets/uploads/2015/09/main_page_big_image_encryption.png b/src/assets/uploads/2015/09/main_page_big_image_encryption.png new file mode 100644 index 0000000..9a969e9 Binary files /dev/null and b/src/assets/uploads/2015/09/main_page_big_image_encryption.png differ diff --git a/src/assets/uploads/2015/10/Vicihselect_logo_20151019-1024x186.png b/src/assets/uploads/2015/10/Vicihselect_logo_20151019-1024x186.png new file mode 100644 index 0000000..5f7250a Binary files /dev/null and b/src/assets/uploads/2015/10/Vicihselect_logo_20151019-1024x186.png differ diff --git a/src/assets/uploads/2015/10/Vicihselect_logo_20151019-150x150.png b/src/assets/uploads/2015/10/Vicihselect_logo_20151019-150x150.png new file mode 100644 index 0000000..7794ffd Binary files /dev/null and b/src/assets/uploads/2015/10/Vicihselect_logo_20151019-150x150.png differ diff --git a/src/assets/uploads/2015/10/Vicihselect_logo_20151019-300x54.png b/src/assets/uploads/2015/10/Vicihselect_logo_20151019-300x54.png new file mode 100644 index 0000000..b50861a Binary files /dev/null and b/src/assets/uploads/2015/10/Vicihselect_logo_20151019-300x54.png differ diff --git a/src/assets/uploads/2015/10/Vicihselect_logo_20151019-930x169.png b/src/assets/uploads/2015/10/Vicihselect_logo_20151019-930x169.png new file mode 100644 index 0000000..b19c077 Binary files /dev/null and b/src/assets/uploads/2015/10/Vicihselect_logo_20151019-930x169.png differ diff --git a/src/assets/uploads/2015/10/Vicihselect_logo_20151019.png b/src/assets/uploads/2015/10/Vicihselect_logo_20151019.png new file mode 100644 index 0000000..5133606 Binary files /dev/null and b/src/assets/uploads/2015/10/Vicihselect_logo_20151019.png differ diff --git a/src/assets/uploads/2015/11/VICIDIAL_admin_QA_agent_20210312-210x150.png b/src/assets/uploads/2015/11/VICIDIAL_admin_QA_agent_20210312-210x150.png new file mode 100644 index 0000000..63efbf8 Binary files /dev/null and b/src/assets/uploads/2015/11/VICIDIAL_admin_QA_agent_20210312-210x150.png differ diff --git a/src/assets/uploads/2015/11/VICIDIAL_admin_QA_agent_20210312-300x195.png b/src/assets/uploads/2015/11/VICIDIAL_admin_QA_agent_20210312-300x195.png new file mode 100644 index 0000000..7426a4c Binary files /dev/null and b/src/assets/uploads/2015/11/VICIDIAL_admin_QA_agent_20210312-300x195.png differ diff --git a/src/assets/uploads/2015/11/VICIDIAL_admin_QA_agent_20210312-543x354.png b/src/assets/uploads/2015/11/VICIDIAL_admin_QA_agent_20210312-543x354.png new file mode 100644 index 0000000..44a2304 Binary files /dev/null and b/src/assets/uploads/2015/11/VICIDIAL_admin_QA_agent_20210312-543x354.png differ diff --git a/src/assets/uploads/2015/11/VICIDIAL_admin_QA_agent_20210312.png b/src/assets/uploads/2015/11/VICIDIAL_admin_QA_agent_20210312.png new file mode 100644 index 0000000..b96d2d6 Binary files /dev/null and b/src/assets/uploads/2015/11/VICIDIAL_admin_QA_agent_20210312.png differ diff --git a/src/assets/uploads/2015/11/VICIDIAL_agent_3way_call_20190709-210x150.png b/src/assets/uploads/2015/11/VICIDIAL_agent_3way_call_20190709-210x150.png new file mode 100644 index 0000000..fe315be Binary files /dev/null and b/src/assets/uploads/2015/11/VICIDIAL_agent_3way_call_20190709-210x150.png differ diff --git a/src/assets/uploads/2015/11/VICIDIAL_agent_3way_call_20190709-300x211.png b/src/assets/uploads/2015/11/VICIDIAL_agent_3way_call_20190709-300x211.png new file mode 100644 index 0000000..44e5f75 Binary files /dev/null and b/src/assets/uploads/2015/11/VICIDIAL_agent_3way_call_20190709-300x211.png differ diff --git a/src/assets/uploads/2015/11/VICIDIAL_agent_3way_call_20190709-503x354.png b/src/assets/uploads/2015/11/VICIDIAL_agent_3way_call_20190709-503x354.png new file mode 100644 index 0000000..fde8643 Binary files /dev/null and b/src/assets/uploads/2015/11/VICIDIAL_agent_3way_call_20190709-503x354.png differ diff --git a/src/assets/uploads/2015/11/VICIDIAL_agent_3way_call_20190709.png b/src/assets/uploads/2015/11/VICIDIAL_agent_3way_call_20190709.png new file mode 100644 index 0000000..0981ae4 Binary files /dev/null and b/src/assets/uploads/2015/11/VICIDIAL_agent_3way_call_20190709.png differ diff --git a/src/assets/uploads/2015/12/customer_chat_20151214-150x150.png b/src/assets/uploads/2015/12/customer_chat_20151214-150x150.png new file mode 100644 index 0000000..99625a7 Binary files /dev/null and b/src/assets/uploads/2015/12/customer_chat_20151214-150x150.png differ diff --git a/src/assets/uploads/2015/12/customer_chat_20151214-300x175.png b/src/assets/uploads/2015/12/customer_chat_20151214-300x175.png new file mode 100644 index 0000000..5d5f040 Binary files /dev/null and b/src/assets/uploads/2015/12/customer_chat_20151214-300x175.png differ diff --git a/src/assets/uploads/2015/12/customer_chat_20151214-607x354.png b/src/assets/uploads/2015/12/customer_chat_20151214-607x354.png new file mode 100644 index 0000000..7fbdebd Binary files /dev/null and b/src/assets/uploads/2015/12/customer_chat_20151214-607x354.png differ diff --git a/src/assets/uploads/2015/12/customer_chat_20151214.png b/src/assets/uploads/2015/12/customer_chat_20151214.png new file mode 100644 index 0000000..64491db Binary files /dev/null and b/src/assets/uploads/2015/12/customer_chat_20151214.png differ diff --git a/src/assets/uploads/2015/12/internal_chat_20151214-150x150.png b/src/assets/uploads/2015/12/internal_chat_20151214-150x150.png new file mode 100644 index 0000000..72e9033 Binary files /dev/null and b/src/assets/uploads/2015/12/internal_chat_20151214-150x150.png differ diff --git a/src/assets/uploads/2015/12/internal_chat_20151214-300x175.png b/src/assets/uploads/2015/12/internal_chat_20151214-300x175.png new file mode 100644 index 0000000..b9d2a00 Binary files /dev/null and b/src/assets/uploads/2015/12/internal_chat_20151214-300x175.png differ diff --git a/src/assets/uploads/2015/12/internal_chat_20151214-607x354.png b/src/assets/uploads/2015/12/internal_chat_20151214-607x354.png new file mode 100644 index 0000000..707a4c5 Binary files /dev/null and b/src/assets/uploads/2015/12/internal_chat_20151214-607x354.png differ diff --git a/src/assets/uploads/2015/12/internal_chat_20151214.png b/src/assets/uploads/2015/12/internal_chat_20151214.png new file mode 100644 index 0000000..7096e88 Binary files /dev/null and b/src/assets/uploads/2015/12/internal_chat_20151214.png differ diff --git a/src/assets/uploads/2015/12/internal_chat_manager_20151214-150x150.png b/src/assets/uploads/2015/12/internal_chat_manager_20151214-150x150.png new file mode 100644 index 0000000..24efc05 Binary files /dev/null and b/src/assets/uploads/2015/12/internal_chat_manager_20151214-150x150.png differ diff --git a/src/assets/uploads/2015/12/internal_chat_manager_20151214-300x105.png b/src/assets/uploads/2015/12/internal_chat_manager_20151214-300x105.png new file mode 100644 index 0000000..2ae3536 Binary files /dev/null and b/src/assets/uploads/2015/12/internal_chat_manager_20151214-300x105.png differ diff --git a/src/assets/uploads/2015/12/internal_chat_manager_20151214-930x327.png b/src/assets/uploads/2015/12/internal_chat_manager_20151214-930x327.png new file mode 100644 index 0000000..c9c348e Binary files /dev/null and b/src/assets/uploads/2015/12/internal_chat_manager_20151214-930x327.png differ diff --git a/src/assets/uploads/2015/12/internal_chat_manager_20151214.png b/src/assets/uploads/2015/12/internal_chat_manager_20151214.png new file mode 100644 index 0000000..519942e Binary files /dev/null and b/src/assets/uploads/2015/12/internal_chat_manager_20151214.png differ diff --git a/src/assets/uploads/2016/01/Vicidial_agent_screen_jp-150x150.png b/src/assets/uploads/2016/01/Vicidial_agent_screen_jp-150x150.png new file mode 100644 index 0000000..51e610f Binary files /dev/null and b/src/assets/uploads/2016/01/Vicidial_agent_screen_jp-150x150.png differ diff --git a/src/assets/uploads/2016/01/Vicidial_agent_screen_jp-300x208.png b/src/assets/uploads/2016/01/Vicidial_agent_screen_jp-300x208.png new file mode 100644 index 0000000..88d699b Binary files /dev/null and b/src/assets/uploads/2016/01/Vicidial_agent_screen_jp-300x208.png differ diff --git a/src/assets/uploads/2016/01/Vicidial_agent_screen_jp-510x354.png b/src/assets/uploads/2016/01/Vicidial_agent_screen_jp-510x354.png new file mode 100644 index 0000000..66cdec7 Binary files /dev/null and b/src/assets/uploads/2016/01/Vicidial_agent_screen_jp-510x354.png differ diff --git a/src/assets/uploads/2016/01/Vicidial_agent_screen_jp.png b/src/assets/uploads/2016/01/Vicidial_agent_screen_jp.png new file mode 100644 index 0000000..0371ae9 Binary files /dev/null and b/src/assets/uploads/2016/01/Vicidial_agent_screen_jp.png differ diff --git a/src/assets/uploads/2016/04/main_page_big_image_small_CRMs1-150x150.jpg b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs1-150x150.jpg new file mode 100644 index 0000000..9901d90 Binary files /dev/null and b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs1-150x150.jpg differ diff --git a/src/assets/uploads/2016/04/main_page_big_image_small_CRMs1-300x114.jpg b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs1-300x114.jpg new file mode 100644 index 0000000..6ec28aa Binary files /dev/null and b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs1-300x114.jpg differ diff --git a/src/assets/uploads/2016/04/main_page_big_image_small_CRMs1.jpg b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs1.jpg new file mode 100644 index 0000000..5b00fe1 Binary files /dev/null and b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs1.jpg differ diff --git a/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20170416-150x150.png b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20170416-150x150.png new file mode 100644 index 0000000..1d99271 Binary files /dev/null and b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20170416-150x150.png differ diff --git a/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20170416-300x114.png b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20170416-300x114.png new file mode 100644 index 0000000..e2b3214 Binary files /dev/null and b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20170416-300x114.png differ diff --git a/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20170416.png b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20170416.png new file mode 100644 index 0000000..425a7ca Binary files /dev/null and b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20170416.png differ diff --git a/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20191202-210x150.png b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20191202-210x150.png new file mode 100644 index 0000000..c0985ef Binary files /dev/null and b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20191202-210x150.png differ diff --git a/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20191202-300x114.png b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20191202-300x114.png new file mode 100644 index 0000000..931a0aa Binary files /dev/null and b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20191202-300x114.png differ diff --git a/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20191202.png b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20191202.png new file mode 100644 index 0000000..c2838f7 Binary files /dev/null and b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20191202.png differ diff --git a/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20200210-210x150.png b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20200210-210x150.png new file mode 100644 index 0000000..507606a Binary files /dev/null and b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20200210-210x150.png differ diff --git a/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20200210-300x114.png b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20200210-300x114.png new file mode 100644 index 0000000..620b9b5 Binary files /dev/null and b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20200210-300x114.png differ diff --git a/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20200210.png b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20200210.png new file mode 100644 index 0000000..66735b0 Binary files /dev/null and b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20200210.png differ diff --git a/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20230413-210x150.png b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20230413-210x150.png new file mode 100644 index 0000000..615e0ff Binary files /dev/null and b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20230413-210x150.png differ diff --git a/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20230413-300x114.png b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20230413-300x114.png new file mode 100644 index 0000000..8fa5b8d Binary files /dev/null and b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20230413-300x114.png differ diff --git a/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20230413.png b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20230413.png new file mode 100644 index 0000000..fe5f1d5 Binary files /dev/null and b/src/assets/uploads/2016/04/main_page_big_image_small_CRMs_20230413.png differ diff --git a/src/assets/uploads/2016/05/main_page_big_image_small_SOUNDBOARD_20160510-150x150.png b/src/assets/uploads/2016/05/main_page_big_image_small_SOUNDBOARD_20160510-150x150.png new file mode 100644 index 0000000..396046d Binary files /dev/null and b/src/assets/uploads/2016/05/main_page_big_image_small_SOUNDBOARD_20160510-150x150.png differ diff --git a/src/assets/uploads/2016/05/main_page_big_image_small_SOUNDBOARD_20160510-300x114.png b/src/assets/uploads/2016/05/main_page_big_image_small_SOUNDBOARD_20160510-300x114.png new file mode 100644 index 0000000..ca2995d Binary files /dev/null and b/src/assets/uploads/2016/05/main_page_big_image_small_SOUNDBOARD_20160510-300x114.png differ diff --git a/src/assets/uploads/2016/05/main_page_big_image_small_SOUNDBOARD_20160510.png b/src/assets/uploads/2016/05/main_page_big_image_small_SOUNDBOARD_20160510.png new file mode 100644 index 0000000..b2b6e03 Binary files /dev/null and b/src/assets/uploads/2016/05/main_page_big_image_small_SOUNDBOARD_20160510.png differ diff --git a/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416-1008x1024.png b/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416-1008x1024.png new file mode 100644 index 0000000..0413bbb Binary files /dev/null and b/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416-1008x1024.png differ diff --git a/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416-150x150.png b/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416-150x150.png new file mode 100644 index 0000000..703f60d Binary files /dev/null and b/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416-150x150.png differ diff --git a/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416-295x300.png b/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416-295x300.png new file mode 100644 index 0000000..d1708cd Binary files /dev/null and b/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416-295x300.png differ diff --git a/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416-300x305.png b/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416-300x305.png new file mode 100644 index 0000000..d8aeba1 Binary files /dev/null and b/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416-300x305.png differ diff --git a/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416-348x354.png b/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416-348x354.png new file mode 100644 index 0000000..9ab7961 Binary files /dev/null and b/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416-348x354.png differ diff --git a/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416.png b/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416.png new file mode 100644 index 0000000..6ad20fb Binary files /dev/null and b/src/assets/uploads/2017/04/VICIHOST_automated-reports_20170416.png differ diff --git a/src/assets/uploads/2017/04/VICIHOST_reports_20170416-150x150.png b/src/assets/uploads/2017/04/VICIHOST_reports_20170416-150x150.png new file mode 100644 index 0000000..fc2aae9 Binary files /dev/null and b/src/assets/uploads/2017/04/VICIHOST_reports_20170416-150x150.png differ diff --git a/src/assets/uploads/2017/04/VICIHOST_reports_20170416-300x216.png b/src/assets/uploads/2017/04/VICIHOST_reports_20170416-300x216.png new file mode 100644 index 0000000..8459aed Binary files /dev/null and b/src/assets/uploads/2017/04/VICIHOST_reports_20170416-300x216.png differ diff --git a/src/assets/uploads/2017/04/VICIHOST_reports_20170416-492x354.png b/src/assets/uploads/2017/04/VICIHOST_reports_20170416-492x354.png new file mode 100644 index 0000000..bc2509d Binary files /dev/null and b/src/assets/uploads/2017/04/VICIHOST_reports_20170416-492x354.png differ diff --git a/src/assets/uploads/2017/04/VICIHOST_reports_20170416.png b/src/assets/uploads/2017/04/VICIHOST_reports_20170416.png new file mode 100644 index 0000000..f84d968 Binary files /dev/null and b/src/assets/uploads/2017/04/VICIHOST_reports_20170416.png differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_AGENTS-ANYWHERE-210x150.jpg b/src/assets/uploads/2018/03/main_page_big_image_small_AGENTS-ANYWHERE-210x150.jpg new file mode 100644 index 0000000..6599a31 Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_AGENTS-ANYWHERE-210x150.jpg differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_AGENTS-ANYWHERE-300x114.jpg b/src/assets/uploads/2018/03/main_page_big_image_small_AGENTS-ANYWHERE-300x114.jpg new file mode 100644 index 0000000..5e59294 Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_AGENTS-ANYWHERE-300x114.jpg differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_AGENTS-ANYWHERE.jpg b/src/assets/uploads/2018/03/main_page_big_image_small_AGENTS-ANYWHERE.jpg new file mode 100644 index 0000000..12184e9 Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_AGENTS-ANYWHERE.jpg differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_CALLS-EMAILS-210x150.jpg b/src/assets/uploads/2018/03/main_page_big_image_small_CALLS-EMAILS-210x150.jpg new file mode 100644 index 0000000..5e14690 Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_CALLS-EMAILS-210x150.jpg differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_CALLS-EMAILS-300x114.jpg b/src/assets/uploads/2018/03/main_page_big_image_small_CALLS-EMAILS-300x114.jpg new file mode 100644 index 0000000..7807c9e Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_CALLS-EMAILS-300x114.jpg differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_CALLS-EMAILS.jpg b/src/assets/uploads/2018/03/main_page_big_image_small_CALLS-EMAILS.jpg new file mode 100644 index 0000000..4b56735 Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_CALLS-EMAILS.jpg differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_CRMs_20170416-210x150.png b/src/assets/uploads/2018/03/main_page_big_image_small_CRMs_20170416-210x150.png new file mode 100644 index 0000000..f8b6cbe Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_CRMs_20170416-210x150.png differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_CRMs_20170416-300x114.png b/src/assets/uploads/2018/03/main_page_big_image_small_CRMs_20170416-300x114.png new file mode 100644 index 0000000..e2b3214 Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_CRMs_20170416-300x114.png differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_CRMs_20170416.png b/src/assets/uploads/2018/03/main_page_big_image_small_CRMs_20170416.png new file mode 100644 index 0000000..425a7ca Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_CRMs_20170416.png differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_ENCRYPTION-210x150.png b/src/assets/uploads/2018/03/main_page_big_image_small_ENCRYPTION-210x150.png new file mode 100644 index 0000000..2db64d7 Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_ENCRYPTION-210x150.png differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_ENCRYPTION-300x114.png b/src/assets/uploads/2018/03/main_page_big_image_small_ENCRYPTION-300x114.png new file mode 100644 index 0000000..9fdf4b1 Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_ENCRYPTION-300x114.png differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_ENCRYPTION.png b/src/assets/uploads/2018/03/main_page_big_image_small_ENCRYPTION.png new file mode 100644 index 0000000..9a969e9 Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_ENCRYPTION.png differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_PRIVATE-CLOUD-210x150.png b/src/assets/uploads/2018/03/main_page_big_image_small_PRIVATE-CLOUD-210x150.png new file mode 100644 index 0000000..e327333 Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_PRIVATE-CLOUD-210x150.png differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_PRIVATE-CLOUD-300x114.png b/src/assets/uploads/2018/03/main_page_big_image_small_PRIVATE-CLOUD-300x114.png new file mode 100644 index 0000000..7024621 Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_PRIVATE-CLOUD-300x114.png differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_PRIVATE-CLOUD.png b/src/assets/uploads/2018/03/main_page_big_image_small_PRIVATE-CLOUD.png new file mode 100644 index 0000000..eb2813b Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_PRIVATE-CLOUD.png differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_SOUNDBOARD_20160510-210x150.png b/src/assets/uploads/2018/03/main_page_big_image_small_SOUNDBOARD_20160510-210x150.png new file mode 100644 index 0000000..f1ab8f5 Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_SOUNDBOARD_20160510-210x150.png differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_SOUNDBOARD_20160510-300x114.png b/src/assets/uploads/2018/03/main_page_big_image_small_SOUNDBOARD_20160510-300x114.png new file mode 100644 index 0000000..ca2995d Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_SOUNDBOARD_20160510-300x114.png differ diff --git a/src/assets/uploads/2018/03/main_page_big_image_small_SOUNDBOARD_20160510.png b/src/assets/uploads/2018/03/main_page_big_image_small_SOUNDBOARD_20160510.png new file mode 100644 index 0000000..b2b6e03 Binary files /dev/null and b/src/assets/uploads/2018/03/main_page_big_image_small_SOUNDBOARD_20160510.png differ diff --git a/src/assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport-1024x1012.png b/src/assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport-1024x1012.png new file mode 100644 index 0000000..4008fc4 Binary files /dev/null and b/src/assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport-1024x1012.png differ diff --git a/src/assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport-210x150.png b/src/assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport-210x150.png new file mode 100644 index 0000000..dc7c891 Binary files /dev/null and b/src/assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport-210x150.png differ diff --git a/src/assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport-300x297.png b/src/assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport-300x297.png new file mode 100644 index 0000000..ee521cc Binary files /dev/null and b/src/assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport-300x297.png differ diff --git a/src/assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport-358x354.png b/src/assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport-358x354.png new file mode 100644 index 0000000..ef2b3e9 Binary files /dev/null and b/src/assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport-358x354.png differ diff --git a/src/assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport.png b/src/assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport.png new file mode 100644 index 0000000..59f2de5 Binary files /dev/null and b/src/assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport.png differ diff --git a/src/assets/uploads/2018/09/VICIDIAL_agent_switch-form-buttons_20180507-210x150.png b/src/assets/uploads/2018/09/VICIDIAL_agent_switch-form-buttons_20180507-210x150.png new file mode 100644 index 0000000..bc183bb Binary files /dev/null and b/src/assets/uploads/2018/09/VICIDIAL_agent_switch-form-buttons_20180507-210x150.png differ diff --git a/src/assets/uploads/2018/09/VICIDIAL_agent_switch-form-buttons_20180507-300x186.png b/src/assets/uploads/2018/09/VICIDIAL_agent_switch-form-buttons_20180507-300x186.png new file mode 100644 index 0000000..da26c9a Binary files /dev/null and b/src/assets/uploads/2018/09/VICIDIAL_agent_switch-form-buttons_20180507-300x186.png differ diff --git a/src/assets/uploads/2018/09/VICIDIAL_agent_switch-form-buttons_20180507-570x354.png b/src/assets/uploads/2018/09/VICIDIAL_agent_switch-form-buttons_20180507-570x354.png new file mode 100644 index 0000000..73bb0f9 Binary files /dev/null and b/src/assets/uploads/2018/09/VICIDIAL_agent_switch-form-buttons_20180507-570x354.png differ diff --git a/src/assets/uploads/2018/09/VICIDIAL_agent_switch-form-buttons_20180507.png b/src/assets/uploads/2018/09/VICIDIAL_agent_switch-form-buttons_20180507.png new file mode 100644 index 0000000..3008fcf Binary files /dev/null and b/src/assets/uploads/2018/09/VICIDIAL_agent_switch-form-buttons_20180507.png differ diff --git a/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20190410-210x150.png b/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20190410-210x150.png new file mode 100644 index 0000000..37dabbf Binary files /dev/null and b/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20190410-210x150.png differ diff --git a/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20190410-300x114.png b/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20190410-300x114.png new file mode 100644 index 0000000..a740abc Binary files /dev/null and b/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20190410-300x114.png differ diff --git a/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20190410.png b/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20190410.png new file mode 100644 index 0000000..e45d5aa Binary files /dev/null and b/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20190410.png differ diff --git a/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20191022-210x150.png b/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20191022-210x150.png new file mode 100644 index 0000000..a1fceef Binary files /dev/null and b/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20191022-210x150.png differ diff --git a/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20191022-300x114.png b/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20191022-300x114.png new file mode 100644 index 0000000..f139644 Binary files /dev/null and b/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20191022-300x114.png differ diff --git a/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20191022.png b/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20191022.png new file mode 100644 index 0000000..f6382de Binary files /dev/null and b/src/assets/uploads/2019/10/main_page_big_image_small_CRMs_20191022.png differ diff --git a/src/assets/uploads/2021/03/VICIDIAL_admin_2FA_choice_20210312-210x150.png b/src/assets/uploads/2021/03/VICIDIAL_admin_2FA_choice_20210312-210x150.png new file mode 100644 index 0000000..8fb6e36 Binary files /dev/null and b/src/assets/uploads/2021/03/VICIDIAL_admin_2FA_choice_20210312-210x150.png differ diff --git a/src/assets/uploads/2021/03/VICIDIAL_admin_2FA_choice_20210312-300x157.png b/src/assets/uploads/2021/03/VICIDIAL_admin_2FA_choice_20210312-300x157.png new file mode 100644 index 0000000..d32c9f7 Binary files /dev/null and b/src/assets/uploads/2021/03/VICIDIAL_admin_2FA_choice_20210312-300x157.png differ diff --git a/src/assets/uploads/2021/03/VICIDIAL_admin_2FA_choice_20210312-674x354.png b/src/assets/uploads/2021/03/VICIDIAL_admin_2FA_choice_20210312-674x354.png new file mode 100644 index 0000000..2eafeb2 Binary files /dev/null and b/src/assets/uploads/2021/03/VICIDIAL_admin_2FA_choice_20210312-674x354.png differ diff --git a/src/assets/uploads/2021/03/VICIDIAL_admin_2FA_choice_20210312.png b/src/assets/uploads/2021/03/VICIDIAL_admin_2FA_choice_20210312.png new file mode 100644 index 0000000..605921d Binary files /dev/null and b/src/assets/uploads/2021/03/VICIDIAL_admin_2FA_choice_20210312.png differ diff --git a/src/assets/uploads/2021/03/VICIDIAL_admin_Intl-DNC_20210312-210x150.png b/src/assets/uploads/2021/03/VICIDIAL_admin_Intl-DNC_20210312-210x150.png new file mode 100644 index 0000000..f9e92be Binary files /dev/null and b/src/assets/uploads/2021/03/VICIDIAL_admin_Intl-DNC_20210312-210x150.png differ diff --git a/src/assets/uploads/2021/03/VICIDIAL_admin_Intl-DNC_20210312-300x176.png b/src/assets/uploads/2021/03/VICIDIAL_admin_Intl-DNC_20210312-300x176.png new file mode 100644 index 0000000..db73267 Binary files /dev/null and b/src/assets/uploads/2021/03/VICIDIAL_admin_Intl-DNC_20210312-300x176.png differ diff --git a/src/assets/uploads/2021/03/VICIDIAL_admin_Intl-DNC_20210312-604x354.png b/src/assets/uploads/2021/03/VICIDIAL_admin_Intl-DNC_20210312-604x354.png new file mode 100644 index 0000000..ca53d7d Binary files /dev/null and b/src/assets/uploads/2021/03/VICIDIAL_admin_Intl-DNC_20210312-604x354.png differ diff --git a/src/assets/uploads/2021/03/VICIDIAL_admin_Intl-DNC_20210312.png b/src/assets/uploads/2021/03/VICIDIAL_admin_Intl-DNC_20210312.png new file mode 100644 index 0000000..6a2c789 Binary files /dev/null and b/src/assets/uploads/2021/03/VICIDIAL_admin_Intl-DNC_20210312.png differ diff --git a/src/assets/uploads/2021/09/cropped-vicihost-logo_300x100-210x90.jpg b/src/assets/uploads/2021/09/cropped-vicihost-logo_300x100-210x90.jpg new file mode 100644 index 0000000..30613a8 Binary files /dev/null and b/src/assets/uploads/2021/09/cropped-vicihost-logo_300x100-210x90.jpg differ diff --git a/src/assets/uploads/2021/09/cropped-vicihost-logo_300x100-300x90.jpg b/src/assets/uploads/2021/09/cropped-vicihost-logo_300x100-300x90.jpg new file mode 100644 index 0000000..eacdbff Binary files /dev/null and b/src/assets/uploads/2021/09/cropped-vicihost-logo_300x100-300x90.jpg differ diff --git a/src/assets/uploads/2021/09/cropped-vicihost-logo_300x100.jpg b/src/assets/uploads/2021/09/cropped-vicihost-logo_300x100.jpg new file mode 100644 index 0000000..5ca5c05 Binary files /dev/null and b/src/assets/uploads/2021/09/cropped-vicihost-logo_300x100.jpg differ diff --git a/src/assets/uploads/2021/09/vicihost-logo_300x100-210x100.jpg b/src/assets/uploads/2021/09/vicihost-logo_300x100-210x100.jpg new file mode 100644 index 0000000..643f6e6 Binary files /dev/null and b/src/assets/uploads/2021/09/vicihost-logo_300x100-210x100.jpg differ diff --git a/src/assets/uploads/2021/09/vicihost-logo_300x100-300x100.jpg b/src/assets/uploads/2021/09/vicihost-logo_300x100-300x100.jpg new file mode 100644 index 0000000..36efc82 Binary files /dev/null and b/src/assets/uploads/2021/09/vicihost-logo_300x100-300x100.jpg differ diff --git a/src/assets/uploads/2021/09/vicihost-logo_300x100.jpg b/src/assets/uploads/2021/09/vicihost-logo_300x100.jpg new file mode 100644 index 0000000..d053f2e Binary files /dev/null and b/src/assets/uploads/2021/09/vicihost-logo_300x100.jpg differ diff --git a/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912-210x150.png b/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912-210x150.png new file mode 100644 index 0000000..82b6dfb Binary files /dev/null and b/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912-210x150.png differ diff --git a/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912-300x114.png b/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912-300x114.png new file mode 100644 index 0000000..82cf0ed Binary files /dev/null and b/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912-300x114.png differ diff --git a/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912.png b/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912.png new file mode 100644 index 0000000..045a938 Binary files /dev/null and b/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912.png differ diff --git a/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912x-210x150.jpg b/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912x-210x150.jpg new file mode 100644 index 0000000..f20ca34 Binary files /dev/null and b/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912x-210x150.jpg differ diff --git a/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912x-300x114.jpg b/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912x-300x114.jpg new file mode 100644 index 0000000..a9d1c5f Binary files /dev/null and b/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912x-300x114.jpg differ diff --git a/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912x.jpg b/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912x.jpg new file mode 100644 index 0000000..a44c4d5 Binary files /dev/null and b/src/assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912x.jpg differ diff --git a/src/components/FeaturedBox.astro b/src/components/FeaturedBox.astro new file mode 100644 index 0000000..4777f97 --- /dev/null +++ b/src/components/FeaturedBox.astro @@ -0,0 +1,37 @@ +--- +// Ported from wp-content/themes/small-business/featured-box.php. +// Values come from the theme's Options Framework row (wp_options.smallbusiness), +// which stores every option in one serialized blob rather than separate rows. +// Internal WP links (?page_id= / ?p=) are rewritten to their new-site paths. + +const boxes = [ + { + title: 'Fully Featured Contact Center', + link: '/features', + description: + 'VICIhost offers Inbound ACD, Outbound Predictive Dialing, Inbound Email handling, Web-configurable IVRs, Skills-based agent routing, Voicemail boxes, Full call recording, PBX functionality and much more', + }, + { + title: 'Agents Anywhere', + link: '/blog/agents-anywhere', + description: + 'Your agents can work from home or a central Call Center. All they need is an internet connection, a computer and a headset.', + }, + { + title: 'VICIdial Call Center Software', + link: '/about-us', + description: + 'The VICIdial Contact Center Suite is in use at thousands of companies around the world. VICIhost is run by the creators and maintainers of VICIdial.', + }, +]; +--- + + +
diff --git a/src/components/Nav.astro b/src/components/Nav.astro new file mode 100644 index 0000000..278e8c1 --- /dev/null +++ b/src/components/Nav.astro @@ -0,0 +1,11 @@ +--- +import nav from '../data/nav.json'; +--- + + diff --git a/src/components/Slideshow.astro b/src/components/Slideshow.astro new file mode 100644 index 0000000..5ecdc3f --- /dev/null +++ b/src/components/Slideshow.astro @@ -0,0 +1,60 @@ +--- +import { Image } from 'astro:assets'; +import { getCollection } from 'astro:content'; + +const allPosts = await getCollection('posts'); +const slides = allPosts + .sort((a, b) => b.data.date.getTime() - a.data.date.getTime()) + .slice(0, 6); + +// The theme sets $sbExcerptLength = 30 for slides, vs 60 for the front-page loop. +const slideExcerpt = (excerpt: string) => excerpt.split(' ').slice(0, 30).join(' '); +--- + + + + + + diff --git a/src/content.config.ts b/src/content.config.ts new file mode 100644 index 0000000..f0ef66c --- /dev/null +++ b/src/content.config.ts @@ -0,0 +1,25 @@ +import { defineCollection, z } from 'astro:content'; +import { glob } from 'astro/loaders'; + +const pages = defineCollection({ + loader: glob({ pattern: '**/*.md', base: './src/content/pages' }), + schema: z.object({ + title: z.string(), + slug: z.string(), + order: z.number().optional(), + }), +}); + +const posts = defineCollection({ + loader: glob({ pattern: '**/*.md', base: './src/content/posts' }), + schema: ({ image }) => + z.object({ + title: z.string(), + slug: z.string(), + date: z.coerce.date(), + excerpt: z.string(), + featuredImage: image().optional(), + }), +}); + +export const collections = { pages, posts }; diff --git a/src/content/pages/24-hour-called-count-limit-campaign-feature.md b/src/content/pages/24-hour-called-count-limit-campaign-feature.md new file mode 100644 index 0000000..79c23ff --- /dev/null +++ b/src/content/pages/24-hour-called-count-limit-campaign-feature.md @@ -0,0 +1,12 @@ +--- +title: "24-Hour Called Count Limit campaign feature" +slug: "24-hour-called-count-limit-campaign-feature" +--- + +24-Hour Called Count Limit campaign features allow you to limit the number of calls to be placed to any specific phone number or lead within a 24-hour time period. This is different from a "Daily" call count limit in that the 24-hour limit is based on the clock and not what day it is. + +These features also allow for state-based override settings. Some states, like Florida, have specific regulations requiring 24-hour call count limitations. + +For more information, [please contact us](/contact-us). + +[Click here to go back to the Features Page](/features) diff --git a/src/content/pages/99-9-up-time-guarantee.md b/src/content/pages/99-9-up-time-guarantee.md new file mode 100644 index 0000000..0a8d1cc --- /dev/null +++ b/src/content/pages/99-9-up-time-guarantee.md @@ -0,0 +1,12 @@ +--- +title: "99.9% Up-Time Guarantee" +slug: "99-9-up-time-guarantee" +--- + +Our standard Up-time guarantee is based off of a 15 hour (9am to 12am GMT -5) work day. But we do have several clients on VICIhost that operate 24 hours a day and 7 days a week, and we can customize a system to allow you to have the ability to run 24/7 and still allow us to regularly service your VICIhost system. + +If there ever is a catastrophic hardware failure at either of our hosting facilities that results in a lengthy down time, we will provide a service credit proportional to the amount of time that our systems were unavailable, based upon your monthly VICIhost costs. + +For more information on our Up-Time Guarantee, please [contact us](/contact-us). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/pages/ability-to-have-recordings-automatically-transferred-to-an-external-ftp-site.md b/src/content/pages/ability-to-have-recordings-automatically-transferred-to-an-external-ftp-site.md new file mode 100644 index 0000000..ffece37 --- /dev/null +++ b/src/content/pages/ability-to-have-recordings-automatically-transferred-to-an-external-ftp-site.md @@ -0,0 +1,12 @@ +--- +title: "Ability to Have Recordings Automatically Transferred to an External FTP Site" +slug: "ability-to-have-recordings-automatically-transferred-to-an-external-ftp-site" +--- + +With VICIhost, we already archive your agent call recordings to our in-house archive servers. But if you want us to also send them to your own FTP account in a real-time basis, we can set that up for you too. + +We can also set up processes to export and FTP only specific agent status call recordings, like SALES, to an FTP account of your choice on a nightly basis. + +For more information on our call recording FTP transfer features, please [contact us](/contact-us). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/pages/about-us.md b/src/content/pages/about-us.md new file mode 100644 index 0000000..4f70da4 --- /dev/null +++ b/src/content/pages/about-us.md @@ -0,0 +1,6 @@ +--- +title: "About Us" +slug: "about-us" +--- + +**VICIdial Contact Center Software:**The [VICIdial Contact Center Suite](http://www.vicidial.com) is Open Source Software that was first built in 2003. It now has over 2,000 features and settings, and is in use at over 14,000 companies in over 100 countries around the world.   **VICIhost Hosting Facilities:** We have two hosting facilities that our services are supplied from: Our primary facility in Tampa, FL, and our secondary facility in Central Ohio(just outside of Columbus). Both facilities have blended internet from multiple Internet backbone providers and telco connections from multiple carriers. These facilities also have multiple layers of redundant power backup and both are SSAE-16/SAS-70 certified. The facilities are manned 24 hours a day 365 days a year by on-site technicians. This allows us to provide our customers a 99.9% uptime guarantee\*.   **The Vicidial Group:** The Vicidial Group was founded in 2007 to provide an array of professional products and services to the rapidly growing national and international VICIdial user community. The Vicidial Group began offering its VICIhost solution that same year. The original creator and primary developer of VICIdial, Matt Florell, started the Vicidial Group along with several other VICIdial consultants who had all been operating independently.   **Privacy Policy** [Our privacy policy is available here](http://www.vicidial.com/?page_id=495).     \* Uptime is based off of a 15 hour (9am to 12am GMT -5) work day. diff --git a/src/content/pages/agent-scripting-with-customer-data.md b/src/content/pages/agent-scripting-with-customer-data.md new file mode 100644 index 0000000..a43d09c --- /dev/null +++ b/src/content/pages/agent-scripting-with-customer-data.md @@ -0,0 +1,12 @@ +--- +title: "Agent Scripting with Customer Data" +slug: "agent-scripting-with-customer-data" +--- + +Our Agent Scripting utility allows you to insert customer data fields into your script so it can be a seamless presentation for your customers. + +Also, you can use your own web page in the Agent Scripting screen instead, and you can pass the customer variables to your system instantly as soon as the call is presented to the agent. + +For more information about VICIhost's Agent Scripting, please [contact us](/contact-us). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/pages/auto-generate-call-lists-based-on-dropped-inbound-queued-calls.md b/src/content/pages/auto-generate-call-lists-based-on-dropped-inbound-queued-calls.md new file mode 100644 index 0000000..08098f4 --- /dev/null +++ b/src/content/pages/auto-generate-call-lists-based-on-dropped-inbound-queued-calls.md @@ -0,0 +1,10 @@ +--- +title: "Auto-generate call lists based on dropped inbound queued calls" +slug: "auto-generate-call-lists-based-on-dropped-inbound-queued-calls" +--- + +You can use the "Drop Lists" feature to create calling lists from inbound calls that dropped while the customer was in queue. + +You can schedule how often this process runs, and set different in-group queue drops to go into different lists. + +For more information on our reports, [please contact us](/contact-us).
To go back to the [Features Page, click here](/features). diff --git a/src/content/pages/available-languages.md b/src/content/pages/available-languages.md new file mode 100644 index 0000000..1e4053e --- /dev/null +++ b/src/content/pages/available-languages.md @@ -0,0 +1,48 @@ +--- +title: "Available Languages" +slug: "available-languages" +--- + +
+ +[![VICIdial Agent Screen in Japanese](../../assets/uploads/2016/01/Vicidial_agent_screen_jp.png)](../../assets/uploads/2016/01/Vicidial_agent_screen_jp.png) + +

VICIdial Agent Screen in Japanese

+
+ +The VICIdial agent screen is available in 16 languages:
+ +
* English +
* Spanish +
* Greek +
* German +
* French +
* Italian +
* Polish +
* Portuguese +
* Brazilian Portuguese +
* Slovak +
* Russian +
* Dutch +
* Swedish +
* Traditional Chinese +
* Japanese +
* Danish +
+ +
The VICIdial admin screen is available in 6 languages:
+ +
* English +
* Spanish +
* French +
* German +
* Italian +
* Greek +
* Brazilian Portuguese +
+ +
Not only can you use any of the above languages for the agent and admin screens, but VICIdial also lets you make your own language libraries right within the Administrative Web Interface! + +For more information on the language options available on VICIhost, [please contact us](/contact-us). + +**[To go back to the Features page, click here](/features)** diff --git a/src/content/pages/call-quota-lead-ranking-for-multiple-contact-attempts.md b/src/content/pages/call-quota-lead-ranking-for-multiple-contact-attempts.md new file mode 100644 index 0000000..0edef0f --- /dev/null +++ b/src/content/pages/call-quota-lead-ranking-for-multiple-contact-attempts.md @@ -0,0 +1,14 @@ +--- +title: "Call Quota Lead Ranking for multiple contact attempts" +slug: "call-quota-lead-ranking-for-multiple-contact-attempts" +--- + +Call Quota Lead Ranking was designed to allow for structured recycle dialing of leads where no contact is made over set time periods over a number of consecutive days. This feature set was built specifically for a client that had two main requirements:
+ +
* To be able to dial leads that do not connect to a customer at least 6 times over 2 concurrent days with at least one attempt made in each of 3 time periods during the day. +
* To be able to automatically set an inactive list to active when the number of dialable NEW leads in the already active lists was about to be exhausted.
+
+ +While the feature-set that was built offers more flexibility than the requirements that were specified above, these were the parameters that we specifically tested to ensure this set of features was working properly. + +For more information on this, please [contact us](/contact-us). diff --git a/src/content/pages/cellphone-filtering-for-tcpa-compliance.md b/src/content/pages/cellphone-filtering-for-tcpa-compliance.md new file mode 100644 index 0000000..7c2d0d7 --- /dev/null +++ b/src/content/pages/cellphone-filtering-for-tcpa-compliance.md @@ -0,0 +1,12 @@ +--- +title: "Cellphone Filtering for TCPA Compliance" +slug: "cellphone-filtering-for-tcpa-compliance" +--- + +In the USA, the TCPA(Telephone Consumer Protection Act of 1991) specifically prevents calls or texts to cellphones from systems that have a capability to "auto-dial". With "Auto-Dialing" being defined as the ability to store a phone number and place a phone call. + +Because of this restriction, we have added the ability to automaticly nightly filter cellphones from our clients calling lists, as a VICIhost feature. You can choose to have the leads flagged so that you can filter them out yourself, or we can delete them entirely. You can also do batch filtering of cellphones on lists during the day. + +For more information on Cellphone Filtering with VICIhost, please [contact us](/contact-us). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/pages/comparisons.md b/src/content/pages/comparisons.md new file mode 100644 index 0000000..2c31a46 --- /dev/null +++ b/src/content/pages/comparisons.md @@ -0,0 +1,6 @@ +--- +title: "Comparisons" +slug: "comparisons" +--- + +Under this page will be comparisons of VICIhost to other hosted contact center solutions. diff --git a/src/content/pages/computer-ip-address-access-restrictions-for-web-resources.md b/src/content/pages/computer-ip-address-access-restrictions-for-web-resources.md new file mode 100644 index 0000000..c0b1647 --- /dev/null +++ b/src/content/pages/computer-ip-address-access-restrictions-for-web-resources.md @@ -0,0 +1,10 @@ +--- +title: "Computer IP Address access restrictions for web resources" +slug: "computer-ip-address-access-restrictions-for-web-resources" +--- + +You can set up IP Address Lists  to be able to restrict access to the Agent, Admin and/or API web resources on a per User Group basis. + +There is also an option to set up a system-wide IP Address blacklist to prevent users from those IP Addresses from being able to use any web resources on the system. + +For more information on our reports, [please contact us](/contact-us).
To go back to the [Features Page, click here](/features). diff --git a/src/content/pages/contact-form-error.md b/src/content/pages/contact-form-error.md new file mode 100644 index 0000000..6c20c96 --- /dev/null +++ b/src/content/pages/contact-form-error.md @@ -0,0 +1,6 @@ +--- +title: "Contact Form Error" +slug: "contact-form-error" +--- + +Your email was not sent due to an error.
Please press the back button and try again.
Please check that you filled in the required fields. diff --git a/src/content/pages/contact-form-success.md b/src/content/pages/contact-form-success.md new file mode 100644 index 0000000..ca51159 --- /dev/null +++ b/src/content/pages/contact-form-success.md @@ -0,0 +1,8 @@ +--- +title: "Contact Form Success" +slug: "contact-form-success" +--- + +Thank you for your interest in VICIhost.
Your email has been successfully sent to sales@vicidial.com.
One of our sales representatives will get back to you as soon as possible. + +window.dataLayer = window.dataLayer || \[\]; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'AW-1026924645');
gtag('event', 'conversion', {'send\_to': 'AW-1026924645/kkt8CIrb3\_gBEOXA1ukD'}); diff --git a/src/content/pages/contact-us.md b/src/content/pages/contact-us.md new file mode 100644 index 0000000..5c54aed --- /dev/null +++ b/src/content/pages/contact-us.md @@ -0,0 +1,16 @@ +--- +title: "Contact Us" +slug: "contact-us" +--- + +Contact Us:







+ +If you are interested in our hosted contact center solution, or you just have questions, please feel free to call or email us. + +**Phone:** +1-888-894-VICI (8424) or +1-863-393-9330 + +**Email:** [sales@vicidial.com](mailto:sales@vicidial.com) + +**Twitter:** [@vicihost](http://twitter.com/vicihost) + +Please note that we are NOT hiring call center agents at this time. diff --git a/src/content/pages/custom-data-field-forms-with-switchable-forms.md b/src/content/pages/custom-data-field-forms-with-switchable-forms.md new file mode 100644 index 0000000..262291a --- /dev/null +++ b/src/content/pages/custom-data-field-forms-with-switchable-forms.md @@ -0,0 +1,10 @@ +--- +title: "Custom Data Field Forms with Switchable Forms" +slug: "custom-data-field-forms-with-switchable-forms" +--- + +You will have the ability to use custom data fields, allowing you to collect and display as much data as you want for a specific lead. You also have the ability to switch the custom fields form to a different set of fields at the click of a button all within the agent screen.
[![Custom Form switch buttons](../../assets/uploads/2018/09/VICIDIAL_agent_switch-form-buttons_20180507.png)](../../assets/uploads/2018/09/VICIDIAL_agent_switch-form-buttons_20180507.png) + +For more information on this feature, [contact us](/contact-us). + +[Click here to go back to the Features page](/features). diff --git a/src/content/pages/dedicated-dialing-server-hardware.md b/src/content/pages/dedicated-dialing-server-hardware.md new file mode 100644 index 0000000..3488c14 --- /dev/null +++ b/src/content/pages/dedicated-dialing-server-hardware.md @@ -0,0 +1,12 @@ +--- +title: "Dedicated Dialing Server Hardware" +slug: "dedicated-dialing-server-hardware" +--- + +One way VICIhost guarantees quality is by giving each client their own dedicated dialer server hardware. We don't use virtual machines, and all your dialer will be used for is the handling of phone calls. We offload the web and database functions to separate large servers that are built to handle web and database functions only, so your dialer hardware can be left to handle more calls. + +We also custom build these dialers to be able to better handle high call loads. This means that a VICIhost dialer can handle more traffic than our competitor's server hardware. + +For more information about our dedicated dialer hardware, please [contact us](/contact-us). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/pages/dnc-com-lead-filtering-and-inbound-call-filtering.md b/src/content/pages/dnc-com-lead-filtering-and-inbound-call-filtering.md new file mode 100644 index 0000000..adad3a8 --- /dev/null +++ b/src/content/pages/dnc-com-lead-filtering-and-inbound-call-filtering.md @@ -0,0 +1,10 @@ +--- +title: "DNC.COM Lead Filtering and Inbound Call Filtering" +slug: "dnc-com-lead-filtering-and-inbound-call-filtering" +--- + +We have partnered with DNC.COM to offer built-in lead filtering and inbound call filtering using their services. This can allow you to use your existing DNC.COM dialing lists filtering right on your dialer. The inbound features allow you to be able to block blacklisted phone numbers, as well as DNC.COM's proprietary "frequent litigator phone list". + +For more information on this feature, [contact us](/contact-us). + +[Click here to go back to the Features page](/features). diff --git a/src/content/pages/dozens-of-standard-reports-which-can-be-emailed-out-on-a-set-schedule.md b/src/content/pages/dozens-of-standard-reports-which-can-be-emailed-out-on-a-set-schedule.md new file mode 100644 index 0000000..434968c --- /dev/null +++ b/src/content/pages/dozens-of-standard-reports-which-can-be-emailed-out-on-a-set-schedule.md @@ -0,0 +1,19 @@ +--- +title: "Dozens of standard reports, which can be emailed out on a set schedule" +slug: "dozens-of-standard-reports-which-can-be-emailed-out-on-a-set-schedule" +--- + +There are dozens of standard reports included in your system. From agent reports, to time reports, inbound, outbound, IVR, list and many other types of reports. + +All of these reports can be scheduled to be run at specific scheduled times using the Automated Reports feature, which can send them out by email or upload them to an FTP server. + +For more information on our reports, [please contact us](/contact-us).
To go back to the [Features Page, click here](/features). + +[![VICIHOST Reports](../../assets/uploads/2017/04/VICIHOST_reports_20170416.png)](../../assets/uploads/2017/04/VICIHOST_reports_20170416.png) + +
+ +[![VICIhost Automated Reports ](../../assets/uploads/2017/04/VICIHOST_automated-reports_20170416-1008x1024.png)](../../assets/uploads/2017/04/VICIHOST_automated-reports_20170416.png) + +

VICIhost Automated Reports administration page

+
diff --git a/src/content/pages/easy-importing-of-calling-lists-through-the-web-by-api-or-scheduled-by-ftp.md b/src/content/pages/easy-importing-of-calling-lists-through-the-web-by-api-or-scheduled-by-ftp.md new file mode 100644 index 0000000..6f30d15 --- /dev/null +++ b/src/content/pages/easy-importing-of-calling-lists-through-the-web-by-api-or-scheduled-by-ftp.md @@ -0,0 +1,14 @@ +--- +title: "Easy Importing of Calling Lists Through the Web, by API or Scheduled by FTP" +slug: "easy-importing-of-calling-lists-through-the-web-by-api-or-scheduled-by-ftp" +--- + +There are several ways to get your calling lists imported into your VICIdial system. The easiest way is through our **Web-Based Lead Loader**. Through the Web-based Lead Loader you can select what fields you want to import, and even save your import mapping as a template to use in the future. The Web-based Lead Loader can accept data files in tab-delimited TXT, pipe-delimited TXT, CSV, XLS and ODS formats. + +The second method of importing leads is through the use of our **Web API**. The API is designed to quickly import leads one at a time instead of the batch format of one file at a time like the Web-based Lead Loader does. The API has more options than the Web-based Lead Loader does, and allows for leads to have their calls pre-scheduled, or even dialed immediately, [see this page for more details on that feature](/immediate-or-scheduled-website-callbacks). + +The third method of importing leads is through the **FTP batch process**. The FTP lead loading process can be set up to pull leads from an FTP account at regularly scheduled times. This process requires that the lead files be in one of a dozen different TXT file formats to work, and the results of each FTP importing process can be emailed to you. + +For more information on how you can load leads into your VICIdial system, please [contact us](/contact-us). + +**[Click here to go back to the Features Page.](/features)** diff --git a/src/content/pages/features.md b/src/content/pages/features.md new file mode 100644 index 0000000..ce19c5e --- /dev/null +++ b/src/content/pages/features.md @@ -0,0 +1,161 @@ +--- +title: "Features" +slug: "features" +--- + +### **Primary VICIHOST Contact Center Features:** + +(you can click on each feature below to see more information) + +* [Inbound, Outbound and Blended call handling, also Inbound Email and Chat](/blog/inbound-calls-outbound-calls-and-email-blended) +* [Skills-based routing with agent ranking](/skills-based-routing-with-agent-ranking) +* [Outbound agent-controlled, broadcast and predictive dialing](/outbound-agent-controlled-broadcast-and-predictive-dialing) +* [Integrated call recording (mono and stereo)](/integrated-call-recording) +* [Three-Way calling within the agent screen](/three-way-calling-within-the-agent-screen) +* [Scheduled Callbacks: Agent-Only and Anyone](/scheduled-callbacks-agent-only-and-anyone) +* [Ability to have agents work from almost any internet connected computer](/blog/agents-anywhere) +* [Agent Scripting with customer data](/agent-scripting-with-customer-data) +* [External CRM Integrations](/blog/crm-integration) +* [Custom Data Field Forms with Switchable Forms](/custom-data-field-forms-with-switchable-forms) +* [Web-configurable IVRs and Voicemail boxes](/web-configurable-ivrs-and-voicemail-boxes) +* [Virtually limitless campaigns, lists, IVRs, inbound queues, DIDs, phone accounts, voicemail boxes, and user accounts](/virtually-limitless-campaigns-lists-ivrs-inbound-queues) +* [Inbound Post-Call Customer Surveys](/inbound-post-call-customer-survey) +* [Inbound Queue Preserve-Place-in-Line](/inbound-queue-preserve-place-in-line) +* [Inbound Queue Closing Time Features](/inbound-queue-closing-time-features) +* [Outbound CallerID Groups: per-State, per-Areacode, Round-robin and Auto-rotate](/outbound-callerid-groups-per-state-or-per-areacode) +* [VICIphone WebRTC web browser phone is included](/zoiper-webphone) +* [Integrated web-based agent phone included, requires no agent setup](/integrated-web-based-agent-phone-included-requires-no-agent-setup) +* [Immediate or scheduled website callbacks](/immediate-or-scheduled-website-callbacks) +* [Real-time reports with "click-to-listen" to monitor agent phone calls](/real-time-reports-with-click-to-listen-to-monitor-agent-phone-calls) +* [Inbound and Advanced Forecasting Reports](/inbound-and-advanced-forecasting-reports) +* [Internal chat and broadcast messaging to agents](/internal-chat-and-broadcast-messaging-to-agents) +* [Easy importing of calling lists through the Web, by API or scheduled by FTP](/easy-importing-of-calling-lists-through-the-web-by-api-or-scheduled-by-ftp) +* [Share lead data across VICIdial clusters instantly when calls are transferred](/share-lead-data-across-vicidial-clusters-instantly-when-calls-are-transferred) +* [Call Quota Lead Ranking for multiple contact attempts](/call-quota-lead-ranking-for-multiple-contact-attempts) +* [Multiple configurable options for leaving messages on customer voicemail boxes](/multiple-configurable-options-for-leaving-messages-on-customer-voicemail-boxes) +* [Remote API control of agent screen functions](/remote-api-control-of-agent-screens) +* [Auto-generate call lists based on dropped inbound queued calls](/auto-generate-call-lists-based-on-dropped-inbound-queued-calls) +* [Local, toll-free and international inbound phone numbers available](/local-toll-free-and-international-inbound-phone-numbers-available) +* [Full USA, Canada and UK regulatory-compliance](/full-usa-canada-and-uk-regulatory-compliance) +* [Cellphone filtering for TCPA compliance available](/cellphone-filtering-for-tcpa-compliance) +* [Option of 24-Hour Called Count Limits for state compliance](/24-hour-called-count-limit-campaign-feature) +* [System-wide, per-Campaign and Inbound DNC Lists](/system-wide-per-campaign-and-inbound-dnc-lists) +* [DNC.COM Lead Filtering and Inbound Call Filtering](/dnc-com-lead-filtering-and-inbound-call-filtering) +* [Multi-country International DNC list Filtering](/multi-country-international-dnc-list-filtering) +* [GDPR Compliance features](/gdpr-compliance) +* [Encrypted customer data handling available](/blog/high-level-data-encryption) +* [Computer IP Address access restrictions for web resources](/computer-ip-address-access-restrictions-for-web-resources) +* [Two-Factor Authentication for admin web users](/two-factor-authentication-for-admin-web-users) +* [Agent Audio Soundboards available](/blog/agent-avatar-soundboards) +* [Dozens of standard reports, which can be emailed out on a set schedule](/dozens-of-standard-reports-which-can-be-emailed-out-on-a-set-schedule) +* [Ability to have recordings automatically transferred to an external FTP site](/ability-to-have-recordings-automatically-transferred-to-an-external-ftp-site) +* [Quality Control module with QC Scorecards](/quality-control-module-available) +* [16 languages available, or build your own language translations](/available-languages) +* [PBX features allow you to use your VICIhost system as your office PBX](/pbx-features-allow-you-to-use-your-system-as-your-office-pbx) +* [Includes eight(8) hours of initial setup support and one hour per month of free tech support](/included-support-time) +* [No hidden fees](/no-hidden-fees) +* [99.9% up-time guarantee\*](/99-9-up-time-guarantee) +* [Scalable to hundreds of logged in agents](/scalable-to-hundreds-of-logged-in-agents) +* [Dedicated dialing server hardware](/dedicated-dialing-server-hardware) +* [Single server guaranteed to handle at least 25 agents at 3:1 line ratio](/single-server-guaranteed-to-handle-at-least-25-agents-at-31-line-ratio) +* [Additional servers can be added to increase agent and call capacity](/single-server-guaranteed-to-handle-at-least-25-agents-at-31-line-ratio) +* [All hosted settings and configurations are transferable to a customer-owned premises VICIdial system, or we can go the other way too](/moving-hosted-to-on-site-or-on-site-to-hosted) +* [Month-to-month terms, no long-term contracts](/month-to-month-terms-no-long-term-contracts) + +An in depth features list can be found below.   + +### **Costs:** + +* $1,000 initial server provisioning fee (also covers the 1st month of hosting)\*\* +* $500 server provisioning fee for each additional server (covers the 1st month of hosting)\*\* +* $400 per server per month hosting fee(after first month) plus cost of minutes\*\* +* 1.5 cents per minute for outbound calls as well as inbound toll calls\*\* +* 2.8 cents per minute for inbound toll-free calls\*\* +* Minutes are billed as 6 second minimum with 6 second billing increments and are billed on talk time only\*\* +* All telco minutes are prepaid +* $2.50 a month for each DID (Direct Inward Dial) you require\*\* +* Special rates are available for high volume customers + +  + +### **Per Agent Bandwidth Requirements:** + +For each agent, VICIdial requires 87 kilobits for the phone connection and 3 kilobits for the web connection for a total of 90 kilobits. To calculate how much bandwidth you need at your location, simply multiply the number of agents by 90 kilobits (Example: 20 agents x 90 kilobits gives you 1800 kilobits). To calculate how many megabits that is, simply divide the sum by 1024 (Example 1800 kilobits divided by 1024 is 1.757 megabits). If need be, compression can be used on the agents' phone connections which will reduced the amount of bandwidth required. However, this can reduce the audio quality for both the agent and the customer.   + +### **Agent Workstation Requirements:** + +For each agent the Vicidial Group's hosted solution requires a voip enabled phone. These can be either a soft phone(software on the agent computer) or a hard phone. For soft phones we recommend using either Zoiper or X-lite. These are computer programs that run on the agent's system. A web-based phone is also available that requires no agent configuration to use. For hard phones we recommend Polycom or Snom. Each agent will also need a computer with the following minimum requirements: 500Mhz processor with 256megs of ram and a web browser that supports Javascript (Firefox 1.0.6+ / IE 6+ / Chrome 1.0+ / Opera 8.5+). If you will be running a soft phone on the computer then we would recommend at least a 1Ghz processor and 512megs of ram.   + +### **In Depth VICIDIAL Features List:** + +* Ability for an agent to call clients in succession from a database through a web-client +* Ability to display a script for the agent to read with fields like name, address, etc. filled-in +* Ability to set a campaign to auto-dial and send live calls to available agents +* Ability to dial predictively in a campaign with an adaptive dialing algorithm +* Ability to dial on a single campaign across multiple VICIhost dialers, or multiple campaigns on a single dialer +* Ability to transfer calls with customer data to a closer/verifier +* Ability to open a custom web page with user data from the call, per campaign, per In-Group, or per list +* Ability to autodial campaigns to start with a simple IVR then direct to agent +* Ability to broadcast dial to customers with a pre-recorded message +* Ability to park the customer with custom music per campaign +* Ability to send a dropped call to a voicemail box, queue or extension per campaign if no agent is available +* Ability to set outbound CallerID per campaign, per list, pre lead, or rotate per group +* Ability to take inbound calls gathering CallerID +* Ability to function as an ACD for inbound and fronter/closer verification calls +* Ability to have an agent take both inbound and outbound calls in one session(blended) +* Ability to start and stop recording an agent's calls at any time +* Ability to automatically record all calls +* Ability to record calls in Stereo, with the customer on the Right channel and agent on the Left +* Ability to manually or automatically call up to two other customer numbers for the same lead +* Automatically dial unlimited alternate numbers per customer until you get an answer +* Ability to schedule a callback with a customer as either any-agent or agent-specific +* Ability in Manual dial mode to preview leads before dialing +* Agents can be logged from anywhere with just a phone, web browser, and an internet connection +* Faster hangup and dispositioning of calls with one key press (HotKeys) +* Definable Agent Wrap-up time per campaign +* Ability to add custom call dispositions per campaign +* Ability to use custom database queries in campaign dialing +* Recycling of specified status calls at a specified interval without resetting a list +* Dialing with custom Time Zone restrictions including per state and per day-of-the-week +* Dialing with Answering Machine Detection, also playing a message for AM calls +* Multiple campaigns and lead-lists are possible +* Option of a drop timer with safe-harbor message for FTC compliance +* Variable drop call percentage when dialing predictively for FTC compliance +* System-wide and per-campaign DNC lists that can optionally be activated per campaign, or shared across multiple campaigns +* All calls are logged and statuses of calls are logged as well as agent time breakdowns +* Load Balancing of calls across multiple inbound or outbound Asterisk servers is possible +* Agent phone login load balancing and fail over across multiple VICIhost servers +* Dozens of real-time and summary reports available +* Real-time campaign display screens +* 3rd party conferencing(with DTMF macros and number presets) +* 3rd party blind call transfer +* 3rd party conferencing with agent drop-off +* Custom Music-On-Hold and agent alert sound for inbound calls +* Estimated hold time, place in line, overflow queues and several other inbound-only features +* Inbound preserve-place-in-line for each queue with customer call-backs +* Skills-based ranking and call routing per inbound group(queues) and campaign +* Queue Prioritization per campaign and inbound group +* Single agent call queuing +* Ability to set user levels and permissions for certain features and campaigns +* Ability for managers to listen-in on agent conversations +* Ability for managers to enter conversations with agents and customers +* Ability for managers to change the selected queues for an agent +* Ability for agents to select a Pause Code when they are not active +* Ability for agents to control volume levels and mute themselves +* Ability for agents to view the statuses of other agents on the system +* Ability for agents to view details for calls in queue that the agent is selected to take calls from +* Ability for agents to select and click to take calls in queue from their agent screen +* Agent shift enforcement by day and time, defined per user group +* Multi-function web-based agent API allowing for control of agent sessions including click-to-dial outside of the agent screen +* Lead import web-based API +* Web-based data export utilities +* Separate Time-clock application to track user work time +* Web-based administration +* DID, phone and carrier trunk provisioning through the web interface +* Inbound email handling through the agent web screen +* Chat with customers from a website through the agent web screen +* Chat with managers and other agents in the agent web screen +* The agent web application is available in English, Spanish, Greek, German, French, Italian, Polish, Portuguese, Brazilian Portuguese, Slovak, Russian, Dutch, Swedish, Traditional Chinese and Japanese. +* The admin web pages available in English, Spanish, Greek, German, Italian, French and Brazilian Portuguese. + +  \* Uptime is based off of a 15 hour (9am to 12am GMT -5) work day. \*\* All costs and billing increments are subject to change. Surcharges may apply for inbound calls based upon the inbound DID's rate center. diff --git a/src/content/pages/full-usa-canada-and-uk-regulatory-compliance.md b/src/content/pages/full-usa-canada-and-uk-regulatory-compliance.md new file mode 100644 index 0000000..93f6469 --- /dev/null +++ b/src/content/pages/full-usa-canada-and-uk-regulatory-compliance.md @@ -0,0 +1,16 @@ +--- +title: "Full USA, Canada and UK Regulatory-Compliance" +slug: "full-usa-canada-and-uk-regulatory-compliance" +--- + +VICIdial has the tools you need to stay in compliance with the calling regulations in the countries you are calling. + +In the USA, you have the ability to stay in compliance with both the FTC and FCC calling regulations for dropped calls, callerID, call abandon features and [filtering of cellphones](/cellphone-filtering-for-tcpa-compliance). + +In Canada, the regulations are very similar to the USA. + +In the UK, we added a specific dropped call timeout feature to stay in compliance with OFCOM regulations. + +For more information on VICIdial's regulatory compliance, please [contact us](/contact-us). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/pages/gdpr-compliance.md b/src/content/pages/gdpr-compliance.md new file mode 100644 index 0000000..d7c0987 --- /dev/null +++ b/src/content/pages/gdpr-compliance.md @@ -0,0 +1,14 @@ +--- +title: "GDPR Compliance" +slug: "gdpr-compliance" +--- + +VICIhost software includes built-in features allowing for the GDPR's "right of access" and "right to erasure", which can be performed by authorized users. + +Your VICIhost account can also be set up with [High-Level Data Encryption](/blog/high-level-data-encryption) and encrypted user passwords up to 100 characters in length. + +These features, along with our servers being hosted in SSAE-16 facilities, can be an important part of your company's GDPR compliance solution. + +For more information about VICIhost's GDPR Compliance features, [contact us](/contact-us). + +[Go back to the Features List](/features) diff --git a/src/content/pages/immediate-or-scheduled-website-callbacks.md b/src/content/pages/immediate-or-scheduled-website-callbacks.md new file mode 100644 index 0000000..13aebbc --- /dev/null +++ b/src/content/pages/immediate-or-scheduled-website-callbacks.md @@ -0,0 +1,12 @@ +--- +title: "Immediate or Scheduled Website Callbacks" +slug: "immediate-or-scheduled-website-callbacks" +--- + +Whether you want to call hot web leads back right away, or you want to let customers schedule phone calls to them when it's convenient, the VICIdial API lets you insert records into your system to allow you to do both of those and more. + +The VICIdial API has many different options for inserting leads into the system, including triggering an immediate phone call if there are agents available. We have many clients that have contact forms on their websites tied to their VICIdial account, so that as soon as a contact request arrives, a call is placed, and the agent is talking to that customer instantly. + +For more information on how Website Callbacks works in VICIdial, please [contact us](/contact-us). + +**[Click here to go back to the Features Page.](/features)** diff --git a/src/content/pages/inbound-and-advanced-forecasting-reports.md b/src/content/pages/inbound-and-advanced-forecasting-reports.md new file mode 100644 index 0000000..a9bbcc1 --- /dev/null +++ b/src/content/pages/inbound-and-advanced-forecasting-reports.md @@ -0,0 +1,12 @@ +--- +title: "Inbound and Advanced Forecasting Reports" +slug: "inbound-and-advanced-forecasting-reports" +--- + +The included Inbound and Advanced Forecasting Reports can help you to ensure you have enough agents to handle the anticipated call traffic at specific times of the day and days of the week. + +[![Inbound Forecasting Report](../../assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport-1024x1012.png)](../../assets/uploads/2018/09/VICIDIAL_20170428_InboundForecastingReport.png) + +For more information on our Forecasting reports, [contact us](/contact-us). + +[Click here to go back to the Features page](/features). diff --git a/src/content/pages/inbound-post-call-customer-survey.md b/src/content/pages/inbound-post-call-customer-survey.md new file mode 100644 index 0000000..ca25f55 --- /dev/null +++ b/src/content/pages/inbound-post-call-customer-survey.md @@ -0,0 +1,12 @@ +--- +title: "Inbound Post-Call Customer Survey" +slug: "inbound-post-call-customer-survey" +--- + +You can configure your inbound queues to ask a customer if they would like to take a post-call survey when they are finished talking to an agent. + +This can be configured to ask multiple questions, with the results tied to the caller and the agent that handled the call. + +For more information on this feature, [contact us](/contact-us). + +[Click here to go back to the Features page](/features). diff --git a/src/content/pages/inbound-queue-closing-time-features.md b/src/content/pages/inbound-queue-closing-time-features.md new file mode 100644 index 0000000..99a2b63 --- /dev/null +++ b/src/content/pages/inbound-queue-closing-time-features.md @@ -0,0 +1,10 @@ +--- +title: "Inbound Queue Closing Time Features" +slug: "inbound-queue-closing-time-features" +--- + +You can decided what you want to happen when you have customers waiting in an inbound queue when you close for the day. From a directing them to a voicemail box to offering them the option to be called back when you reopen tomorrow, you can give your customers options for what to do when your company closes for the day instead of allowing them to sit on hold for hours when nobody is there to take their call. + +For more information on this feature, [contact us](/contact-us). + +[Click here to go back to the Features page](/features). diff --git a/src/content/pages/inbound-queue-preserve-place-in-line.md b/src/content/pages/inbound-queue-preserve-place-in-line.md new file mode 100644 index 0000000..8149cda --- /dev/null +++ b/src/content/pages/inbound-queue-preserve-place-in-line.md @@ -0,0 +1,14 @@ +--- +title: "Inbound Queue Preserve-Place-in-Line" +slug: "inbound-queue-preserve-place-in-line" +--- + +You can give your customers waiting in an inbound queue the ability to hang up the phone and be called back when their place in line has been reached. + +You can even give the customer the ability to enter a different number to be called back at if you want. + +This feature can also be set up to force a customer to enter in a callback number if their caller ID number was blocked when they called in. + +For more information on this feature, [contact us](/contact-us). + +[Click here to go back to the Features page](/features). diff --git a/src/content/pages/included-support-time.md b/src/content/pages/included-support-time.md new file mode 100644 index 0000000..a49f398 --- /dev/null +++ b/src/content/pages/included-support-time.md @@ -0,0 +1,14 @@ +--- +title: "Included Support Time" +slug: "included-support-time" +--- + +With VICIhost, you have the creators and maintainers of the VICIdial Contact Center Suite at the ready to help you configure and manage your VICIdial system. + +When you sign up with VICIhost, you will get access to the VICIdial Agent and Manager Manuals, as well as eight(8) hours of tech support to help you set up your system. + +You also will get one hour of free tech support per dialer per month, and you can use that time for regular support, or even for custom programming in some cases. + +For more information on VICIhost's included support time, please [contact us](/contact-us). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/pages/integrated-call-recording.md b/src/content/pages/integrated-call-recording.md new file mode 100644 index 0000000..d48668d --- /dev/null +++ b/src/content/pages/integrated-call-recording.md @@ -0,0 +1,22 @@ +--- +title: "Integrated Call Recording" +slug: "integrated-call-recording" +--- + +Full Featured Call Recording is built in to VICIdial. With it you can automatically record all calls going to agents, or let the agents have control over when to start and stop call recordings. + +Call Recordings can be in "mono" with all participants being together on a single audio channel, or in "stereo" with the customer on the Right side and the agent on the Left side of the recording. You also have the option to record several call recordings in parallel on the same phone call, so you can have a "mono" recording, a whole-call "stereo" recording, a partial agent-controlled "stereo" recording, and even separate agent-only and customer-only recordings all for the same phone call at the same time. + +You also have the ability to record calls as they come in to your system before they are routed to an agent. Even if the call only routes to an IVR or a third-party, it can be recorded and reviewed later. + +For three-way calls, you can initiate a new recording when dialing in the third party, and that recording can stay running even if the agent leaves the three-way call. + +Call Recordings can also optionally be muted temporarily for a short time period if DTMF signals are detected on the call. + +If your agents are able to use their phones outside of the VICIdial agent screen, you can also record their phone calls. + +All of these recordings are automatically archived on our internal archive server and are accessible from the VICIdial Administration website. You can also have these recordings sent by FTP to your own server for storage. + +For more information about VICIdial call recording, please [contact us](/contact-us). + +**[Click here to go back to the Features Page.](/features)** diff --git a/src/content/pages/integrated-web-based-agent-phone-included-requires-no-agent-setup.md b/src/content/pages/integrated-web-based-agent-phone-included-requires-no-agent-setup.md new file mode 100644 index 0000000..1f1443a --- /dev/null +++ b/src/content/pages/integrated-web-based-agent-phone-included-requires-no-agent-setup.md @@ -0,0 +1,12 @@ +--- +title: "Integrated Web-Based Agent Phone Included, Requires no Agent Setup" +slug: "integrated-web-based-agent-phone-included-requires-no-agent-setup" +--- + +With your VICIhost account, you have access to our Web-based agent phone. This phone can operate as an integrated part of the VICIdial Agent Screen on any Windows-based agent workstation, and it does not require manual configuration like most software based phones do. + +The Integrated Web-based agent phone also has an extra advantage on VICIhost systems that use multiple servers, it is able to load balance the agent connections across the available servers, providing better system utilization and redundancy. + +For more information on the Integrated Web-Based Agent Phone, [contact us](/contact-us). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/pages/internal-chat-and-broadcast-messaging-to-agents.md b/src/content/pages/internal-chat-and-broadcast-messaging-to-agents.md new file mode 100644 index 0000000..162716e --- /dev/null +++ b/src/content/pages/internal-chat-and-broadcast-messaging-to-agents.md @@ -0,0 +1,28 @@ +--- +title: "Internal Chat and Broadcast Messaging to Agents" +slug: "internal-chat-and-broadcast-messaging-to-agents" +--- + +VICIhost allows you to send messages from managers to agents, with the ability for the agents to respond back as well. Managers can send a message to every agent that is logged-in, just a few select agents, or only one agent if they want. + +Agents can also send messages to other agents that are logged-in(this can be restricted too), and all chat messages are logged and searchable as well. Agents even have the ability to have a group chat with multiple agents at the same time in the same chat window. + +With the Internal Chat and Whisper monitoring, you can always keep in good communication with your agents, even if they are on a phone call. + +For more information on Internal chat, please **[contact us](/contact-us)**. + +To go back to the Features Page, **[click here](/features)**. + +
+ +[![Manager screen internal chat](../../assets/uploads/2015/12/internal_chat_manager_20151214.png)](../../assets/uploads/2015/12/internal_chat_manager_20151214.png) + +

Manager screen internal chat screenshot

+
+ +
+ +[![Agent screen internal chat](../../assets/uploads/2015/12/internal_chat_20151214.png)](../../assets/uploads/2015/12/internal_chat_20151214.png) + +

Agent screen internal chat screenshot

+
diff --git a/src/content/pages/local-toll-free-and-international-inbound-phone-numbers-available.md b/src/content/pages/local-toll-free-and-international-inbound-phone-numbers-available.md new file mode 100644 index 0000000..738f089 --- /dev/null +++ b/src/content/pages/local-toll-free-and-international-inbound-phone-numbers-available.md @@ -0,0 +1,12 @@ +--- +title: "Local, toll-free and international inbound phone numbers available" +slug: "local-toll-free-and-international-inbound-phone-numbers-available" +--- + +You can have local, toll-free or even international phone numbers tied to your VICIhost account. We can assign numbers to you from our inventory or provision new numbers from our carrier partners, you can import your existing numbers from another carrier, or you can even use another inbound phone carrier on your VICIhost system. + +We have clients with thousands of inbound DID phone numbers coming into their VICIhost systems currently, so we are sure we can handle whatever your incoming call routing needs are. + +For more information on inbound phone numbers available on VICIhost, please [contact us](/contact-us). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/pages/month-to-month-terms-no-long-term-contracts.md b/src/content/pages/month-to-month-terms-no-long-term-contracts.md new file mode 100644 index 0000000..5c9c689 --- /dev/null +++ b/src/content/pages/month-to-month-terms-no-long-term-contracts.md @@ -0,0 +1,12 @@ +--- +title: "Month-to-Month Terms, No Long-Term Contracts" +slug: "month-to-month-terms-no-long-term-contracts" +--- + +We don't use high-pressure sales tactics at VICIhost, and we only offer month-to-month service. So if you want to cancel your service, you can do so with only a week's notice. + +Along with the option to [move your VICIdial system](/moving-hosted-to-on-site-or-on-site-to-hosted) to your own hardware, the month-to-month service terms keep your lock-in to a minimum. + +For more information on our service terms, please [contact us](/contact-us). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/pages/moving-hosted-to-on-site-or-on-site-to-hosted.md b/src/content/pages/moving-hosted-to-on-site-or-on-site-to-hosted.md new file mode 100644 index 0000000..3765fdc --- /dev/null +++ b/src/content/pages/moving-hosted-to-on-site-or-on-site-to-hosted.md @@ -0,0 +1,12 @@ +--- +title: "Moving Hosted to On-Site, or On-Site to Hosted" +slug: "moving-hosted-to-on-site-or-on-site-to-hosted" +--- + +One of the features that makes VICIhost different, is that we are able to move your system from being hosted to being in hardware at your location if you like. Or we can go the other way around too, we can take your on-site premises VICIdial system and move it to a VICIhost system. + +Being based on the VICIdial Open Source Contact Center platform allows us to do what most providers can't: Give you the flexibility to move your contact center hardware anywhere you want. You don't have to be locked in to using our service. + +For more information on Moving a Hosted system, please [contact us](/contact-us). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/pages/multi-country-international-dnc-list-filtering.md b/src/content/pages/multi-country-international-dnc-list-filtering.md new file mode 100644 index 0000000..4f6f37a --- /dev/null +++ b/src/content/pages/multi-country-international-dnc-list-filtering.md @@ -0,0 +1,6 @@ +--- +title: "Multi-country International DNC list Filtering" +slug: "multi-country-international-dnc-list-filtering" +--- + +The international DNC list filter features include the ability to load country-based DNC lists as well as the ability to scrub against international DNCs in the web-based lead loader.[![Internation DNC](../../assets/uploads/2021/03/VICIDIAL_admin_Intl-DNC_20210312.png)](../../assets/uploads/2021/03/VICIDIAL_admin_Intl-DNC_20210312.png) diff --git a/src/content/pages/multiple-configurable-options-for-leaving-messages-on-customer-voicemail-boxes.md b/src/content/pages/multiple-configurable-options-for-leaving-messages-on-customer-voicemail-boxes.md new file mode 100644 index 0000000..9c3ec88 --- /dev/null +++ b/src/content/pages/multiple-configurable-options-for-leaving-messages-on-customer-voicemail-boxes.md @@ -0,0 +1,11 @@ +--- +title: "Multiple configurable options for leaving messages on customer voicemail boxes" +slug: "multiple-configurable-options-for-leaving-messages-on-customer-voicemail-boxes" +--- + +When an agent calls a customer and gets to a voicemail box, there are several options available in the system for what message is played to that voicemail box, or even if a message is played. + +* Agent-selectable messages within the agent screen +* Answering Machine Message Wildcards, play different messages based upon the value of one of the lead fields +* Voicemail Message Daily Limit, only play a voicemail message the first time the lead goes to a voicemail box +* Optional Text-to-Speech messages, generate text-to-speech audio based upon values in the lead record diff --git a/src/content/pages/no-hidden-fees.md b/src/content/pages/no-hidden-fees.md new file mode 100644 index 0000000..1837f89 --- /dev/null +++ b/src/content/pages/no-hidden-fees.md @@ -0,0 +1,16 @@ +--- +title: "No Hidden Fees" +slug: "no-hidden-fees" +--- + +All of our fees are published right on our [Features page](/features), we won't nickle and dime you, and we won't throw a lot of extra hidden fees at you either. + +Most of our features are included at no extra cost. + +If you want to have inbound phone numbers, we can provide those to you at a an extra monthly cost, or you can bring your own inbound carrier. + +As for outbound calling, we offer our own outbound call termination to VICIhost clients only using a mix of reliable providers at a competitive rate. Our termination service is focused on providing a reliable service, and we have very high standards for what end carriers we will use. + +For more information, please [contact us](/contact-us). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/pages/outbound-agent-controlled-broadcast-and-predictive-dialing.md b/src/content/pages/outbound-agent-controlled-broadcast-and-predictive-dialing.md new file mode 100644 index 0000000..997979c --- /dev/null +++ b/src/content/pages/outbound-agent-controlled-broadcast-and-predictive-dialing.md @@ -0,0 +1,18 @@ +--- +title: "Outbound Agent-Controlled, Broadcast and Predictive Dialing" +slug: "outbound-agent-controlled-broadcast-and-predictive-dialing" +--- + +With VICIdial, there are three main types of outbound dialing: **Agent-Controlled**, **Broadcast** and **Predictive** Dialing + +**Agent-Controlled** dialing is also called **Manual** Dialing. This is where the agent has to click to dial each phone call, either by taking the next lead in a list and dialing it, or entering in a phone number to dial and initiating the phone call. + +**Broadcast** dialing allows the system to place phone calls and play pre-recorded messages with no live agents present. + +**Predictive** dialing allows the system to calculate the number of phone calls it thinks it should place in order to keep the agents busy with phone calls while still staying below a set dropped call rate limit. There are many settings available that influence how the predictive dialing algorithm works. + +Another type of outbound dialing is **Ratio**, this will dial a constant ratio of phone lines to agents logged in. This method is not affected at all by the dropped call rate. Ratio can also be used with campaigns that have no leads and only handle inbound phone calls. + +For more information on how Outbound Dialing works in VICIdial, please [contact us](/contact-us). + +**[Click here to go back to the Features Page.](/features)** diff --git a/src/content/pages/outbound-callerid-groups-per-state-or-per-areacode.md b/src/content/pages/outbound-callerid-groups-per-state-or-per-areacode.md new file mode 100644 index 0000000..df4db5f --- /dev/null +++ b/src/content/pages/outbound-callerid-groups-per-state-or-per-areacode.md @@ -0,0 +1,10 @@ +--- +title: "Outbound CallerID Groups: per-State, per-Areacode, Round-robin and Auto-rotate" +slug: "outbound-callerid-groups-per-state-or-per-areacode" +--- + +You can set up Caller ID Groups that allow you to define an outbound CallerID number to be used on a per-state, per-areacode, round-robin or auto-rotate basis. You can also set up multiple CallerID numbers for the same states or areacodes and they will be used on a round-robin basis as the calls are dialed within only those geographic areas. Another option for CID Groups is to not define a geographic area per CallerID and just have all calls round-robin from the same list of CallerIDs. When using this type of CID Group, you can also optionally set it to only use one CallerID number for a set number of minutes, and then automatically rotate to the next CallerID. These CID Groups can also be shared across multiple campaigns + +For more information on this feature, [contact us](/contact-us). + +[Click here to go back to the Features page](/features). diff --git a/src/content/pages/pbx-features-allow-you-to-use-your-system-as-your-office-pbx.md b/src/content/pages/pbx-features-allow-you-to-use-your-system-as-your-office-pbx.md new file mode 100644 index 0000000..17d7b7f --- /dev/null +++ b/src/content/pages/pbx-features-allow-you-to-use-your-system-as-your-office-pbx.md @@ -0,0 +1,12 @@ +--- +title: "PBX features Allow You to Use Your System as Your Office PBX" +slug: "pbx-features-allow-you-to-use-your-system-as-your-office-pbx" +--- + +We have several VICIhost clients that use their hosted VICIdial system as their office PBX. With the features that you would expect from a PBX like voicemail, inbound call routing, IVRs, call queues and the ability to use your own SIP hard-phones, VICIhost can offer you a full PBX experience. + +You also get the added benefit of being able to more easily monitor your VICIdial call center agents right from the same phone you have on your desk. + +For more information on using your VICIhost system as your office PBX, please [contact us](/contact-us). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/pages/quality-control-module-available.md b/src/content/pages/quality-control-module-available.md new file mode 100644 index 0000000..50bf56c --- /dev/null +++ b/src/content/pages/quality-control-module-available.md @@ -0,0 +1,12 @@ +--- +title: "Quality Control Module" +slug: "quality-control-module-available" +--- + +[![QA Scorecard](../../assets/uploads/2015/11/VICIDIAL_admin_QA_agent_20210312.png)](../../assets/uploads/2015/11/VICIDIAL_admin_QA_agent_20210312.png)Built in to VICIdial is a Quality Control module, that can allow your supervisors and Quality Control staff to review and code calls after your agents have finished with them. + +The QC module allows for a review of audio recordings for the call, as well as editing of the customer record and special QC status codes to PASS or FAIL a call after it has been reviewed. QC scorecards are also available allowing QC reviewers to grade agents on different aspects of their phone calls. + +For more information on our Quality Control module, please [contact us](/contact-us). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/pages/real-time-reports-with-click-to-listen-to-monitor-agent-phone-calls.md b/src/content/pages/real-time-reports-with-click-to-listen-to-monitor-agent-phone-calls.md new file mode 100644 index 0000000..505e3f3 --- /dev/null +++ b/src/content/pages/real-time-reports-with-click-to-listen-to-monitor-agent-phone-calls.md @@ -0,0 +1,14 @@ +--- +title: "Real-Time Reports with “Click-to-Listen” to Monitor Agent Phone Calls" +slug: "real-time-reports-with-click-to-listen-to-monitor-agent-phone-calls" +--- + +Supervisors and managers have access to Real-Time Reports that will show them the status of agents and calls in the system.These reports also can show custom call counts for the day so far for agent disposition status categories like SALES or DNCs. You can also restrict what you see on the real-time reports to only be one campaign or one group of users. + +A supervisor can even click to listen to an agent conversation, whisper to the agent only, or even barge into the conversation if they want to. + +A supervisor also has the ability to change the inbound queues that an agent is assigned to in real-time from these reports. + +For more information on our Real-Time Reports, please [contact us](/contact-us). + +**[Click here to go back to the Features Page.](/features)** diff --git a/src/content/pages/remote-api-control-of-agent-screens.md b/src/content/pages/remote-api-control-of-agent-screens.md new file mode 100644 index 0000000..f63f74e --- /dev/null +++ b/src/content/pages/remote-api-control-of-agent-screens.md @@ -0,0 +1,12 @@ +--- +title: "Remote API control of agent screens" +slug: "remote-api-control-of-agent-screens" +--- + +Through the use of the Agent API, you can control the agent screen functions from your own external system. From basic functions like initiating a new phone call for an agent, to full control of the agent screen from your own application, nearly every agent screen function can be controlled from an outside source. + +Also available is a feature that can send out agent events by HTTP Push to your external system, allowing you even more fine-grained control of the agent screen from your own system. + +For more information on Remote API agent screen control, [please contact us](/contact-us). + +[To go back to the Features page, click here](/features). diff --git a/src/content/pages/scalable-to-hundreds-of-logged-in-agents.md b/src/content/pages/scalable-to-hundreds-of-logged-in-agents.md new file mode 100644 index 0000000..013c236 --- /dev/null +++ b/src/content/pages/scalable-to-hundreds-of-logged-in-agents.md @@ -0,0 +1,12 @@ +--- +title: "Scalable to Hundreds of Logged-in Agents" +slug: "scalable-to-hundreds-of-logged-in-agents" +--- + +We have one VICIhost client that has had a peak of over 500 agents logged in at one time handling phone calls. We have another VICIhost client that regularly placed over a million outbound phone calls per day. + +We can build a VICIhost cluster of servers to handle just about any call load that you would be able to throw at it. + +To talk to a VICIhost expert about your scaling questions, please [contact us](/contact-us). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/pages/scheduled-callbacks-agent-only-and-anyone.md b/src/content/pages/scheduled-callbacks-agent-only-and-anyone.md new file mode 100644 index 0000000..ebeb9fd --- /dev/null +++ b/src/content/pages/scheduled-callbacks-agent-only-and-anyone.md @@ -0,0 +1,20 @@ +--- +title: "Scheduled Callbacks: Agent-Only and Anyone" +slug: "scheduled-callbacks-agent-only-and-anyone" +--- + +Agents can schedule a callback with a customer, and either reserve that callback for themselves, or allow any agent to take the callback when the scheduled time arrives. + +For Agent-Only callbacks, there is a flashing notification in the agent screen that lets agents know they have callbacks that have triggered, so they can call them back. + +For Anyone callbacks, the calls will be placed and routed to available agents automatically after they have hit their scheduled date and time. + +There are administrative settings that allow you to prevent an agent from setting a callback too soon, as well as settings to prevent an agent from calling back a callback too soon. There is even an option to have the system automatically set a new callback if a call placed on an existing callback does not result in a customer contact. + +You can also allow your agents to set callbacks for a specific time zone, as well as force agents to dial their callbacks right after they have been triggered. + +There are also administrative tools that allow you to reassign Agent-Only callbacks to another agent or to change them to Anyone callbacks. + +For more information on scheduled callbacks within VICIdial, please [contact us](/contact-us). + +**[Click here to go back to the Features Page.](/features)** diff --git a/src/content/pages/share-lead-data-across-vicidial-clusters-instantly-when-calls-are-transferred.md b/src/content/pages/share-lead-data-across-vicidial-clusters-instantly-when-calls-are-transferred.md new file mode 100644 index 0000000..de2cf89 --- /dev/null +++ b/src/content/pages/share-lead-data-across-vicidial-clusters-instantly-when-calls-are-transferred.md @@ -0,0 +1,12 @@ +--- +title: "Share lead data across VICIdial clusters instantly when calls are transferred" +slug: "share-lead-data-across-vicidial-clusters-instantly-when-calls-are-transferred" +--- + +With VICIdial, you can transfer calls to another separate VICIdial cluster and instantly send the lead data along with the call so the customer information will show to the receiving agent at the same time they receive the phone call. + +If you have partner companies that are also using VICIdial, then when you transfer calls between companies, you can set up Cross-Cluster-Communication to be able to send lead data along with any transferred phone calls. + +For more information on Cross-Cluster-Communication, [please contact us](/contact-us). + +To go back to the Features page, [click here](/features). diff --git a/src/content/pages/single-server-guaranteed-to-handle-at-least-25-agents-at-31-line-ratio.md b/src/content/pages/single-server-guaranteed-to-handle-at-least-25-agents-at-31-line-ratio.md new file mode 100644 index 0000000..02d7d92 --- /dev/null +++ b/src/content/pages/single-server-guaranteed-to-handle-at-least-25-agents-at-31-line-ratio.md @@ -0,0 +1,14 @@ +--- +title: "Single Server Guaranteed to Handle at Least 25 Agents at 3:1 Line Ratio" +slug: "single-server-guaranteed-to-handle-at-least-25-agents-at-31-line-ratio" +--- + +We guarantee that our dialer servers will be able to handle 25 agents and 100 telco lines. Depending on what kind of call handling you are doing, you will probably be able to handle more than that. + +Once you outgrow a single server, we can quickly and easily add another server to give you more capacity. We have clients that have grown from a single server with 5 agents, to having 3 servers and 75 agents, all working as a single VICIdial system. + +Also, you can add and remove capacity as you need to. So, if you have seasonal spikes in demand, we can add servers for a month or two, and then remove them for the rest of the year. + +For more information on our service guarantees, please [contact us](/contact-us). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/pages/skills-based-routing-with-agent-ranking.md b/src/content/pages/skills-based-routing-with-agent-ranking.md new file mode 100644 index 0000000..036bfa1 --- /dev/null +++ b/src/content/pages/skills-based-routing-with-agent-ranking.md @@ -0,0 +1,30 @@ +--- +title: "Skills-Based Routing with Agent Ranking" +slug: "skills-based-routing-with-agent-ranking" +--- + +With Skills-Based Routing and Agent Ranking, you can have calls and emails go to the agents that can handle them the most efficiently and effectively for their skill sets. + +For example, let's say we have three agents that work in the call center at ACME Industries selling widgets: **Sally**, **Harold** and **Connie**
+ +
* **Sally** grew up speaking Spanish at home, and speaks both Spanish and English +
* **Harold** is from Quebec, Canada and speaks both French and English +
* **Connie** speaks only English +
+ +
ACME Industries operates in the United States and Canada, and has three call queues for their Sales and Support line: **English**, **Spanish** and **French**. Most calls that come in go to the English queue, the second most number of calls go to the Spanish queue, and the least number of calls go to the French queue. + +Here is how we would set up the agent skills and ranks in VICIdial for the three agents to most effectively and efficiently handle the calls that come in:
+ +
* **Sally** -  English rank: **4**   Spanish rank: **9**   French rank: _(not enabled)_ +
* **Harold** -  English rank: **5**   Spanish rank: _(not enabled)_   French rank: **9** +
* **Connie** -  English rank: **9**   Spanish rank: _(not enabled)_   French rank: _(not enabled)_ +
+ +
All three agents can handle English calls, but because **Connie** only speaks English, she gets the highest English rank and will be the first agent to get a call that comes in to this queue. **Harold** would be the second agent to receive and English queue call because his other language, French, is the least popular queue. **Sally** would be the last agent to take an English queue call. + +This was just a simple explanation of how our agent skills-based routing and ranking works, but we have helped clients to set up very complex routing plans with hundreds of queues, skills and agents involved. + +For more information on how our Skills-based routing and agent ranking works, please [contact us.](/contact-us) + +**[Click here to go back to the Features Page.](/features)** diff --git a/src/content/pages/system-wide-per-campaign-and-inbound-dnc-lists.md b/src/content/pages/system-wide-per-campaign-and-inbound-dnc-lists.md new file mode 100644 index 0000000..dfd40b0 --- /dev/null +++ b/src/content/pages/system-wide-per-campaign-and-inbound-dnc-lists.md @@ -0,0 +1,16 @@ +--- +title: "System-Wide, per-Campaign and Inbound DNC Lists" +slug: "system-wide-per-campaign-and-inbound-dnc-lists" +--- + +With your VICIhost system, you can set up separate or shared DNC lists for each campaign. You also have the option to use a system-wide DNC list, that can be enabled for each campaign as desired. + +Another option, is the ability to block or redirect inbound calls coming into VICIdial based upon the Caller ID number using an inbound DNC list, or a Filter Phone Group. + +You can also give customers the ability to call in and add their phone number to one of the outbound calling DNC lists through the use of an automated IVR that is included with VICIdial. + +As for the USA Federal DNC list, we recommend using our partner company [DNC.COM](http://dnc.com/) for that service. We have even added some integration tools that work with their service into VICIhost's features. + +For more information on VICIhost and DNC lists, please [contact us](/contact-us). + +[**To go back to the Features page, click here.**](/features) diff --git a/src/content/pages/three-way-calling-within-the-agent-screen.md b/src/content/pages/three-way-calling-within-the-agent-screen.md new file mode 100644 index 0000000..60b46f8 --- /dev/null +++ b/src/content/pages/three-way-calling-within-the-agent-screen.md @@ -0,0 +1,20 @@ +--- +title: "Three-Way Calling within the Agent Screen" +slug: "three-way-calling-within-the-agent-screen" +--- + +While an agent is on a phone call with a customer in the agent screen, they can place a call to a third-party and conference them in together with the customer they were talking to. + +This third-party call can be placed with the customer on hold, or live on the line. + +The three-way call can be recorded separately, and the recording will continue even if the agent leaves the three-way call. + +The Outbound CallerID for these three-way calls can be set up to use the customer's phone number in certain circumstances. + +Three-way calls can be routed out through a different carrier from other outbound calls if you want. + +If the customer hangs up while the agent is on the three-way call, the three-way call session can automatically be ended and logged. + +For more information about agent screen three way calling works, please [contact us](/contact-us). + +**[Click here to go back to the Features Page.](/features)** diff --git a/src/content/pages/two-factor-authentication-for-admin-web-users.md b/src/content/pages/two-factor-authentication-for-admin-web-users.md new file mode 100644 index 0000000..9629971 --- /dev/null +++ b/src/content/pages/two-factor-authentication-for-admin-web-users.md @@ -0,0 +1,6 @@ +--- +title: "Two-Factor Authentication for admin web users" +slug: "two-factor-authentication-for-admin-web-users" +--- + +[![Two-Factor auth screen](../../assets/uploads/2021/03/VICIDIAL_admin_2FA_choice_20210312.png)](../../assets/uploads/2021/03/VICIDIAL_admin_2FA_choice_20210312.png)Two-Factor-Authentication is an optional security feature that adds a required second step to the admin web screen login process through a method other than a password, such as: an Email, Phone Call or Text-Message(SMS). This 2FA auth also lasts only a set amount of time(defined in System Settings\[number of hours, from 1-9999 hours\]), or until the user logs out. diff --git a/src/content/pages/vicihost-vs-five9.md b/src/content/pages/vicihost-vs-five9.md new file mode 100644 index 0000000..ff4391c --- /dev/null +++ b/src/content/pages/vicihost-vs-five9.md @@ -0,0 +1,20 @@ +--- +title: "VICIhost vs. Five9" +slug: "vicihost-vs-five9" +--- + +Five9 Cloud Call Center Service has inconsistent pricing based upon a set of features which you have negotiate and pay for each separately. With VICIhost you only pay a flat monthly fee and telco costs, everything else is included. + +Five9 can move you from server to server on their shared systems at any time. With VICIhost you have dedicated hardware that you will not be forced to move from. + +Five9 makes you wait 30 days to add more agent capacity to your system. With VICIhost you can grow your system to 25 agents with no waiting, and beyond that with only 1 day's notice. + +Even the most simple Five9 service offering is significantly more expensive than VICIhost for a call center with 4 of more agents, and there are many standard features offered on VICIhost that are not available on Five9, such as advanced inbound call filtering options, and advanced outbound list mixing. + +Five9 has most of their customer and technical support personnel located in Russia and the Philippines, while their sales operations are in the United States. VICIhost has only United States based technical and customer support. + +Five9 as a company is unprofitable. They lose tens of millions of dollars a year and require significant ongoing stockholder and funding investments to continue operations. VICIhost as a company has no debt, consistently operates at a profit and owns all of it's infrastructure hardware. + +Five9 has recently decommissioned some of their datacenters to save money, reducing fail-over and backup capacity in the process. In March of 2014, Five9 had an extended outage for most of their customers as a result of equipment failures at their California datacenter. VICIhost maintains two datacenters to ensure geographic redundancy and backup capabilities. + +For more information about VICIhost, please [Click here to visit our website](/ "Home"), or [Contact Us](/contact-us "Contact Us"). diff --git a/src/content/pages/vicihost-vs-justgocloud.md b/src/content/pages/vicihost-vs-justgocloud.md new file mode 100644 index 0000000..6057f98 --- /dev/null +++ b/src/content/pages/vicihost-vs-justgocloud.md @@ -0,0 +1,20 @@ +--- +title: "VICIhost vs. JustGoCloud" +slug: "vicihost-vs-justgocloud" +--- + +JustGoCloud is a company based in the Philippines that uses a limited set of VICIdial features to offer a shared system for per-agent hosted call center services. VICIhost offers clients the full VICIdial experience, and does not require contacting support for something as simple as managing a DID call-in number. + +The JustGoCloud system has removed hundreds of VICIdial features and settings, and does not allow you to set your own user IDs, script IDs or several other IDs in the system like VICIhost lets you do. + +While the overall costs can sometimes be lower on JustGoCloud, VICIhost uses a blended set of carriers that consistently offer higher connect rates. + +VICIhost also offers live phone technical support and compliance features like TCPA cellphone filtering services and an easier-to-use integrated agent web phone. + +Instead of a shared environment like JustGoCloud, on VICIhost, clients get dedicated servers so there are no resource allocation issues like shared systems often have. + +The software that JustGoCloud uses is based upon GoAutoDial, which uses an older version of VICIdial with less features than VICIhost offers. + +JustGoCloud leases its generic servers from large server farm companies. VICIhost owns its entire server infrastructure of custom built servers made specifically for hosted call center applications. + +For more information on VICIhost, please [Click to visit our website](http://www.vicihost.com "VICIhost vs. Five9"), or [Contact Us](/contact-us "Contact Us"). diff --git a/src/content/pages/vicihost-vs-ytel.md b/src/content/pages/vicihost-vs-ytel.md new file mode 100644 index 0000000..16d42c9 --- /dev/null +++ b/src/content/pages/vicihost-vs-ytel.md @@ -0,0 +1,10 @@ +--- +title: "VICIhost vs. Ytel" +slug: "vicihost-vs-ytel" +--- + +Ytel uses a customized web interface to offer limited features for their lower cost offerings. For call centers with 4 agents or more, the VICIhost solution is both lower cost and has all of the standard VICIdial features. + +With Ytel, you are forced to use the carriers that are attached through Ytel. With VICIhost you have the option of using your own carriers if you like, and if you do choose to use the VICIhost high-quality carrier mix, they are offered at a lower cost than Ytel's mandatory carriers are offered at. Costs for inbound numbers(DIDs) are also significantly lower on the VICIhost platform, if you choose to use our inbound carriers. + +For more information on VICIhost, please [Click here to visit our website](http://www.vicihost.com "Home"), or [Contact Us](/contact-us "Contact Us"). diff --git a/src/content/pages/virtually-limitless-campaigns-lists-ivrs-inbound-queues.md b/src/content/pages/virtually-limitless-campaigns-lists-ivrs-inbound-queues.md new file mode 100644 index 0000000..830aa84 --- /dev/null +++ b/src/content/pages/virtually-limitless-campaigns-lists-ivrs-inbound-queues.md @@ -0,0 +1,12 @@ +--- +title: "Virtually Limitless Campaigns, Lists, IVRs, Inbound Queues, ..." +slug: "virtually-limitless-campaigns-lists-ivrs-inbound-queues" +--- + +We have clients that have some very large configurations. We've seen one client with over 10,000 DIDs on a single system. Another client with over 700 inbound queues. A client with over 800 lists. And a client with 400 campaigns. + +With VICIdial, the sky is the limit, and we can help you build your system to have as many different settings as you need to make it work the way you want it to work. + +For more information on the our virtually limitless settings, please [contact us](/contact-us). + +**[Click here to go back to the Features Page.](/features)** diff --git a/src/content/pages/web-configurable-ivrs-and-voicemail-boxes.md b/src/content/pages/web-configurable-ivrs-and-voicemail-boxes.md new file mode 100644 index 0000000..1928d30 --- /dev/null +++ b/src/content/pages/web-configurable-ivrs-and-voicemail-boxes.md @@ -0,0 +1,12 @@ +--- +title: "Web-Configurable IVRs and Voicemail Boxes" +slug: "web-configurable-ivrs-and-voicemail-boxes" +--- + +Through the Administrative website, you can configure multi-level IVRs(Interactive Voice Response) that have hundreds of end-points, with time-based options and even logging of customer IVR responses available. We have also helped clients to integrate with their internal systems to build dynamic IVRs that offer information on order progress, shipment tracking, and pay-by-phone automated services. + +You can also configure voicemail boxes that can be used for agents or for any other purpose. You can select a pre-recorded audio prompt to be used as the welcome message for the voicemail greeting, and voicemails can even be configured to be sent to an email address once they are left. + +For more information on how our web-based administration of IVRs and Voicemail boxes works, please [contact us](/contact-us). + +**[Click here to go back to the Features Page.](/features)** diff --git a/src/content/pages/your-caller-id-numbers-and-spamscam-labels.md b/src/content/pages/your-caller-id-numbers-and-spamscam-labels.md new file mode 100644 index 0000000..bcfed95 --- /dev/null +++ b/src/content/pages/your-caller-id-numbers-and-spamscam-labels.md @@ -0,0 +1,71 @@ +--- +title: "Your Caller ID Numbers and SPAM/SCAM Labels" +slug: "your-caller-id-numbers-and-spamscam-labels" +--- + +## **Reducing SPAM / SCAM labels on your Caller ID Numbers** + +_The information on this page has been compiled through discussions with clients, carriers and industry-insiders. The call-flagging process of any specific service or carrier is almost always somewhat inconsistent and ever-changing, and the companies that provide these services do not disclose their methods publicly._ At the beginning of 2026, the major phone number reputation data providers stopped resetting their Caller ID Number reputation scores when numbers sit dormant. Instead they are only resetting the reputation score when the Caller ID Number's CNAME entry is changed and a business registers the number with them. This means that you can get a fresh number from your phone carrier that already displays as as SPAM / SCAM. There is nothing your phone carrier can do about this. Your carrier can also not register the number for you, nor can they contest the mislabeling on your behalf. All they can do is set your Caller ID Name (CNAME) data in the national database for you. _NOTE: If you are using [VICIhost](https://vicihost.com) as your DID provider, the first time we set the Caller ID Name for you on compatible DIDs, it is free. Just let us know at the time of ordering your DIDs, and we can get that set right away. If you forgot to have that done, just email and we will get that taken care of._ + +## **Before you start dialing:** + +it is important that before you start placing outbound phone calls with your new Caller ID Numbers, that you do the following: + +1. Confirm with your carrier that your Caller ID Name is set properly in the National Database +2. You should register your numbers with Free Caller Registry: https://freecallerregistry.com/fcr/ +3. You should also register your numbers with the big three number reputation data providers the big cell phone carriers use. ([freecallerregistry.com](https://freecallerregistry.com) should do this for you, but it does not always happen 100% of the time) **Hiya**: [https://www.hiya.com/products/connect/number-registration](https://www.hiya.com/products/connect/number-registration) **First Orion**: [https://www.calltransparency.com/](https://www.calltransparency.com/) **TNS**: [https://reportarobocall.com/](https://reportarobocall.com/)      _Note: The above services can take several business days to process your registration._ +4. Wait until ALL of the reputation data providers have confirmed that your numbers have been registered. +5. There are also hundreds of apps out there that also block / label your calls on users' cell phones. These are independent of the phone carriers and use community reputation scores. Many of these apps have methods to register your number with them which helps to keep it from getting flagged. Many of the apps let you do this directly in the app. Many of them also feed their data back into the major number reputation data providers. + +Doing all of this will make it so your numbers are starting with a clean slate and will reduce the rate at which your Caller ID Numbers' reputation scores go down. There are pay-for services out there that can register the numbers for you, and we actually suggest that you look into them(such as [DNC.com](https://dnc.com)). They can also monitor the status of your numbers and help you file claims with the carriers / number reputation data providers to deal with issues. + +## Once you start dialing: + +Unfortunately setting the Caller ID Name and registering your numbers is not enough. The Caller ID Number reputation data providers are constantly looking at your numbers' activity and reevaluating your score. As such, it is important to make sure that your number gets blocked / reported as little as possible, as well as not annoying the carriers. + +1. Do not call Disconnected Numbers. Carriers hate it when you do this and consider it as SPAM-worthy activity and report it to the number reputation data providers. There are services out there that will scan your leads and flag any that are a disconnected / invalid phone number. If you remove any phone number that you call from your system where you received a '404' SIP code from your carrier, that will help. +2. Do not call numbers on the National Do Not Call(DNC) list even if you have permission to do so. Because call centers are legally required to scrub against the DNC list the carriers and number reputation data providers are looking for repeat calls to DNCed numbers and assuming that these are from scammers not following the law. They do not care if there are exceptions. +3. Try to increase your call duration. Carriers HATE short duration answered phone calls(usually less than 6 seconds) and consider it nuisance traffic. As such short duration calls will negatively impact your numbers' reputation scores. One way to increase your average call duration is to leave voicemail messages. VICIdial has options to let your agents easily send calls to a pre-recorded voicemail message. +4. Avoid over-dialing / dropping outbound phone calls. When you drop a call it will usually be a short duration call, but on top of that, the person you called will have a negative experience with your caller id number. As such they are far more likely to block it. When they do that, information is sent to the reputation data providers. +5. Make sure that if a call does drop, that you are actually playing a Safe Harbor message that explains who you are / why you were calling. You are legally required to do this, but it also increases the call duration. +6. Avoid using low-accuracy Answering Machine Detection(AMD) systems like the one that comes with Asterisk. Such systems regularly misidentify live humans as answering machines. This will cause the person you called to have a negative experience and potentially block you. +7. If you must use AMD, there are a number of high accuracy Answering Machine Detection systems on the market that VICIdial integrates with. +8. If you do use Answering Machine Detection, make sure to configure it to leave a voicemail message to prevent short duration calls. +9. Make sure your agents' sale pitch does not sound like a scam. People are extremely leery about auto-dialed phone calls to begin with. If something sounds too good to be true, they are likely to hang up and block your number. +10. Make sure your agents are friendly and polite. Rude agents will cause the person you called to have a negative experience and potentially block you. +11. Use lots of Caller ID Numbers and rotate through them. When the reputation data providers see the same number over and over again in quick succession they assume that you are SPAMMING people. +12. Ramp up the usage of your caller id numbers. The number reputation data providers consider numbers that go from zero traffic to millions of calls in a day as suspicious. + +## What to do when your numbers do get flagged as SCAM / SPAM: + +It used to be that when this happened we recommended letting the number sit for a few weeks so that the reputation would improve. Unfortunately, that is not happening anymore. We also do not recommend immediately replacing the numbers either. This is because you already went through quite a bit of effort to establish the number. Instead you should contact the number reputation data providers / phone carriers that are displaying Spam, Scam and contest it. As stated previously, your phone carrier cannot do this for you. By contesting the flagging it shows that your are a legitimate business who cares about your numbers to the number reputation data providers. This should help the number to go get flagged as quickly again. + +## Other suggestions: + +* "Branded Caller ID" helps significantly but it is an expensive option(averaging $0.07 to $0.12 per phone call, in addition to monthly fees) and it can take up to 4 weeks to set up. +* We also suggest that organizations have a batch of numbers in reserve that they can cycle-in while contesting a "SPAM/SCAM" flagging with the carriers. +* Avoid using toll free numbers(800,888,866,etc...) as your Caller ID number, they almost always result in lower answer rates compared to using standard phone numbers for Caller ID. + +  + +## Carrier Caller ID Number Reputation Contacts: + +Below are some of the carriers / number reputation data providers and how to contact them. We try to keep this information up to date, but unfortunately it is constantly changing. Please report any problems to **support@vicidial.com**. If you find a new way to report these issues to a carrier, please email **support@vicidial.com** so we can update this info. If a carrier is not listed below you can try searching Google for the name of the carrier followed by "report number not spam" and you should find a method to contest it. + +* For AT&T follow this link: [https://hiyahelp.zendesk.com/hc/en-us/p/screening/](https://hiyahelp.zendesk.com/hc/en-us/p/screening/) +* For Verizon follow this link: [https://www.voicespamfeedback.com/vsf/](https://www.voicespamfeedback.com/vsf/) and this link [https://reportarobocall.com](https://reportarobocall.com) +* For T-Mobile follow this link: [https://callreporting.t-mobile.com/](https://callreporting.t-mobile.com/) +* For US Cellular follow this link [https://reportarobocall.com](https://reportarobocall.com) and email **communications@tnsi.com** +* For NOMOROBO email **remediation@nomorobo.com** and **reports@nomorobo.com** and [https://www.nomorobo.com/contact](https://www.nomorobo.com/contact) +* For Big River Communications call **855-244-7483** +* For Altice USA email **robocallmitigation@alticeusa.com** +* For YouMail follow this link: [https://support.youmail.com/en/articles/10848801-updating-your-info-in-the-youmail-directory](https://support.youmail.com/en/articles/10848801-updating-your-info-in-the-youmail-directory) +* For Comcast follow this link: [https://www.xfinity.com/support/articles/report-call-blocking-errors](https://www.xfinity.com/support/articles/report-call-blocking-errors) +* For C Spire email **askus@cspire.com** and **communications@tnsi.com** +* For Frontier they use NOMOROBO contact them as well as **nospam@ftr.com** +* For Lumen they use NOMOROBO contact them +* For Midco email **robocalling@midco.com** +* For RoboKiller email **inquiries@robokiller.com** +* For Spectrum follow this link: [https://reportspam.spectrum.com/charter/](https://reportspam.spectrum.com/charter/) +* For Telzio call **888-998-9080** or email **support@telzio.com** +* For Windstream email **windstream.networkabuse@windstream.com** diff --git a/src/content/pages/zoiper-webphone.md b/src/content/pages/zoiper-webphone.md new file mode 100644 index 0000000..55bed41 --- /dev/null +++ b/src/content/pages/zoiper-webphone.md @@ -0,0 +1,12 @@ +--- +title: "VICIphone WebRTC Web-Browser Phone" +slug: "zoiper-webphone" +--- + +With your VICIhost account, you are able to use the VICIphone WebRTC phone at no extra charge, and it can be easily embedded right into your VICIdial Agent Screen using only your agents' web browsers. + +Perhaps the best feature of the VICIphone WebRTC phone, is that it requires no configuration on the Agent workstation, which can greatly reduce support costs, especially in at-home-agent call centers. + +For more information on the VICIphone WebRTC phone, [please contact us.](/contact-us) + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/posts/21.md b/src/content/posts/21.md new file mode 100644 index 0000000..1d469e6 --- /dev/null +++ b/src/content/posts/21.md @@ -0,0 +1,13 @@ +--- +title: "VICIhost Dedicated Hosting" +slug: "21" +date: "2014-05-16T01:01:16.000Z" +excerpt: "You get your own physical servers in one of our hosting facilities. We have hundreds of servers in our private hosted clusters that we maintain just for our hosted call center services. We only use Tier-3 datacenters with multiple internet backbone connections and redundant power solutions, so you know your service is going to work. For more information about our" +featuredImage: "../../assets/uploads/2018/03/main_page_big_image_small_PRIVATE-CLOUD.png" +--- + +You get your own physical servers in one of our hosting facilities. We have hundreds of servers in our private hosted clusters that we maintain just for our hosted call center services. We only use Tier-3 datacenters with multiple internet backbone connections and redundant power solutions, so you know your service is going to work. + +For more information about our VICIhost datacenters, please [Contact Us](/contact-us "Contact Us"). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/posts/agent-avatar-soundboards.md b/src/content/posts/agent-avatar-soundboards.md new file mode 100644 index 0000000..ffcac92 --- /dev/null +++ b/src/content/posts/agent-avatar-soundboards.md @@ -0,0 +1,22 @@ +--- +title: "Agent Audio Soundboards" +slug: "agent-avatar-soundboards" +date: "2014-07-24T00:41:39.000Z" +excerpt: "Audio Soundboards can allow a human agent to just play a few selected audio recordings, like legal or contractual disclaimers, or they can replace an agent speaking to the customer entirely in much more complex audio soundboard setups. We have tested the Agent Soundboard control screen in VICIdial with over 100 audio recordings successfully, and the system is capable of" +featuredImage: "../../assets/uploads/2018/03/main_page_big_image_small_SOUNDBOARD_20160510.png" +--- + +
+ +[![Agent Soundboard Example](../../assets/uploads/2016/05/main_page_big_image_small_SOUNDBOARD_20160510.png)](../../assets/uploads/2016/05/main_page_big_image_small_SOUNDBOARD_20160510.png) + +

Agent Soundboard Example

+
+ +Audio Soundboards can allow a human agent to just play a few selected audio recordings, like legal or contractual disclaimers, or they can replace an agent speaking to the customer entirely in much more complex audio soundboard setups. We have tested the Agent Soundboard control screen in VICIdial with over 100 audio recordings successfully, and the system is capable of handling many more than that. + +Agent Soundboards have been in use in call centers around the world for years. The technology to play selected audio files within a VICIdial agent session has also been available for several years through the D1-DIAL options in the agent interface, but only a few audio files could be selected and played easily. So, in order to allow for more audio files to be displayed within the agent Script tab or a separate window and quickly played, as well as allow an audio file that is being played to be instantly stopped or restarted, new administrative interface, agent interface and server-side modules were needed. This new VICIdial Audio Soundboard module adds those new features. + +[Click here to contact us and ask us about VICIhost Agent Audio Soundboards](/contact-us "Contact Us"). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/posts/agents-anywhere.md b/src/content/posts/agents-anywhere.md new file mode 100644 index 0000000..01727e7 --- /dev/null +++ b/src/content/posts/agents-anywhere.md @@ -0,0 +1,23 @@ +--- +title: "Agents Anywhere" +slug: "agents-anywhere" +date: "2014-07-24T00:42:28.000Z" +excerpt: "Your agents can work from almost anywhere! Agents can work from home or in a central call center, all they need is an internet connection, a computer and a headset or phone. We have clients with hundreds of at-home agents, all on the same VICIhost cluster. Agents from dozens of countries around the world on five different continents use our" +featuredImage: "../../assets/uploads/2018/03/main_page_big_image_small_AGENTS-ANYWHERE.jpg" +--- + +Your agents can work from almost anywhere! + +Agents can work from home or in a central call center, all they need is an internet connection, a computer and a headset or phone. + +We have clients with hundreds of at-home agents, all on the same VICIhost cluster. + +Agents from dozens of countries around the world on five different continents use our VICIhost call center services. + +You can have from 5 to 500 agents on a single VICIhost contact center cluster. Load balancing, redundancy and failover are built-in to the VICIhost platform. + +We also offer [Strong Data Encryption](/blog/high-level-data-encryption "High-Level Data Encryption") to safeguard your customer data, no matter where your agents are. + +For more information about agent flexibility on VICIhost, please [Contact Us](/contact-us "Contact Us"). + +**[To go back to the Features page, click here.](/features)** diff --git a/src/content/posts/crm-integration.md b/src/content/posts/crm-integration.md new file mode 100644 index 0000000..106778e --- /dev/null +++ b/src/content/posts/crm-integration.md @@ -0,0 +1,41 @@ +--- +title: "CRM Integration" +slug: "crm-integration" +date: "2016-04-30T11:54:08.000Z" +excerpt: "VICIhost can integrate with many popular CRM systems, providing you with a seamless user interface tied into your back-end customer management systems. Here are a few of the CRM systems that we currently integrate with: Zoho Zendesk WordPress Vtiger Teamsupport SugarCRM Salesforce.com SalesExec Pipedrive Mortgage IQ MailChimp lodasoft LessAnnoyingCRM Lawmatics Insightly Hubspot Google Sheets Gmail Bailtrac Monday.com And, if your" +featuredImage: "../../assets/uploads/2023/09/main_page_big_image_small_CRMs_20230912x.jpg" +--- + +VICIhost can integrate with many popular CRM systems, providing you with a seamless user interface tied into your back-end customer management systems. + +Here are a few of the CRM systems that we currently integrate with:
+ +
* Zoho +
* Zendesk +
* WordPress +
* Vtiger +
* Teamsupport +
* SugarCRM +
* Salesforce.com +
* SalesExec +
* Pipedrive +
* Mortgage IQ +
* MailChimp +
* lodasoft +
* LessAnnoyingCRM +
* Lawmatics +
* Insightly +
* Hubspot +
* Google Sheets +
* Gmail +
* Bailtrac +
* Monday.com +
+ +
And, if your CRM allows web-based integrations, we can probably interoperate with it too! + +CRM integration can be as simple as a web page popping up with customer data when a phone call is received by an agent, or it can go as far as back-end data synchronization. We can help you to integrate with your CRM system as much or as little as you need. + +For more information on VICIhost CRM integrations, **[please contact us](/contact-us).** + +[To go back to the features page, click here.](/features) diff --git a/src/content/posts/high-level-data-encryption.md b/src/content/posts/high-level-data-encryption.md new file mode 100644 index 0000000..249e62b --- /dev/null +++ b/src/content/posts/high-level-data-encryption.md @@ -0,0 +1,43 @@ +--- +title: "High-Level Data Encryption" +slug: "high-level-data-encryption" +date: "2015-09-09T09:25:53.000Z" +excerpt: "High-Level Data Encryption is available from your agents' web browsers all the way to the database back-end where your data is stored in our secure SSAE-16 certified hosting facilities. We use NIST-approved, strong encryption algorithms to safeguard your data. You can also send your customers to a secure IVR to collect sensitive information like credit card numbers to shield that" +featuredImage: "../../assets/uploads/2018/03/main_page_big_image_small_ENCRYPTION.png" +--- + +High-Level Data Encryption is available from your agents' web browsers all the way to the database back-end where your data is stored in our secure SSAE-16 certified hosting facilities. We use NIST-approved, strong encryption algorithms to safeguard your data. + +You can also send your customers to a secure IVR to collect sensitive information like credit card numbers to shield that information from your agents while still allowing them to take customer orders. + +You are also able to hide all(or part) of sensitive customer data fields, like payment data, from your agents. + +Another encryption feature that we offer is encrypted recordings of phone call audio, allowing your company to stay in compliance with many industry security requirements, such as HIPAA and PCI compliance. + +Here is the full list of encryption and other security enhancements that we offer on VICIhost:
+ +
* SSL encrypted(https) agent interface screen and data transport +
* Encrypted database storage of custom field data +
* Masking of sensitive custom field data from agents and managerial staff +
* The ability for agents to send customers to an IVR to enter in sensitive information +
* Encrypted recordings of phone call audio +
* Restricted audio call recordings access, with logging +
* Secure calls to agents using either WebRTC or SRTP soft-phones +
* Encrypted user password logins +
* Segmented user groups access and permissions +
* Two-Factor Authentication +
* Hosted in our secured SSAE-16 certified facility +
+ +
  + +For more information on how our VICIhost strong data encryption and security enhancements work, please [contact us](/contact-us "Contact Us"). + +**[To go back to the Features page, click here.](/features)** + +
+ +[![High-Level Data Encryption](../../assets/uploads/2015/09/main_page_big_image_encryption.png)](../../assets/uploads/2015/09/main_page_big_image_encryption.png) + +

High-Level Data Encryption agent screenshot

+
diff --git a/src/content/posts/inbound-calls-outbound-calls-and-email-blended.md b/src/content/posts/inbound-calls-outbound-calls-and-email-blended.md new file mode 100644 index 0000000..176f2cb --- /dev/null +++ b/src/content/posts/inbound-calls-outbound-calls-and-email-blended.md @@ -0,0 +1,33 @@ +--- +title: "Inbound Calls, Outbound Calls, Email and Website Customer Chat" +slug: "inbound-calls-outbound-calls-and-email-blended" +date: "2014-05-16T02:01:46.000Z" +excerpt: "Let your agents handle inbound and outbound phone calls as well as inbound email and website customer chat all together in the same web-based agent interface. VICIdial was built with blended contact handling in mind, so no need to have agents log out to change from inbound to outbound, and no need for a second application for email handling or" +featuredImage: "../../assets/uploads/2018/03/main_page_big_image_small_CALLS-EMAILS.jpg" +--- + +Let your agents handle inbound and outbound phone calls as well as inbound email and website customer chat all together in the same web-based agent interface. VICIdial was built with blended contact handling in mind, so no need to have agents log out to change from inbound to outbound, and no need for a second application for email handling or customer chatting on websites. Everything is handled in the same agent screen. + +With Skills-based routing and Agent Ranking, you can have calls and emails go to the agents that can handle them the most efficiently for their skill set. + +Queue Prioritization allows you to send the more important calls to agents first. + +You can also have your agents handling outbound calls when the inbound call load is low. + +For more information about the features that we offer on VICIhost, take a look at our [Features page](/features "Features"), or [Contact Us](/contact-us "Contact Us"). + +**[To go back to the Features page, click here.](/features)** + +
+ +[![Chat customer screenshot](../../assets/uploads/2014/05/chat_customer_screenshot_20160818.png)](../../assets/uploads/2014/05/chat_customer_screenshot_20160818.png) + +

Chat customer screenshot

+
+ +
+ +[![Agent screen customer chat](../../assets/uploads/2015/12/customer_chat_20151214.png)](../../assets/uploads/2015/12/customer_chat_20151214.png) + +

Agent screen customer chat screenshot

+
diff --git a/src/data/nav.json b/src/data/nav.json new file mode 100644 index 0000000..ecde0fb --- /dev/null +++ b/src/data/nav.json @@ -0,0 +1,18 @@ +[ + { + "title": "Home", + "href": "/" + }, + { + "title": "Features", + "href": "/features" + }, + { + "title": "Contact Us", + "href": "/contact-us" + }, + { + "title": "About Us", + "href": "/about-us" + } +] diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro new file mode 100644 index 0000000..bd9cdaf --- /dev/null +++ b/src/layouts/BaseLayout.astro @@ -0,0 +1,48 @@ +--- +import Nav from '../components/Nav.astro'; +import '../styles/global.css'; +import '@splidejs/splide/dist/css/splide.min.css'; + +interface Props { + title: string; + description?: string; +} + +const { title, description = 'VICIhost is a full-featured, Enterprise-level Contact Center solution that is hosted and maintained by the creators and mainters of VICIdial.' } = Astro.props; +--- + + + + + + + + + {title} + + + +
+
+
+ + +
+ +
+
+ + +
+ + diff --git a/src/pages/[...slug].astro b/src/pages/[...slug].astro new file mode 100644 index 0000000..31cc113 --- /dev/null +++ b/src/pages/[...slug].astro @@ -0,0 +1,25 @@ +--- +import { getCollection, render } from 'astro:content'; +import BaseLayout from '../layouts/BaseLayout.astro'; + +export async function getStaticPaths() { + const pages = await getCollection('pages'); + return pages.map((page) => ({ + params: { slug: page.data.slug }, + props: { page }, + })); +} + +const { page } = Astro.props; +const { Content } = await render(page); +--- + + +
+

{page.data.title}

+
+
+ +
+
+
diff --git a/src/pages/blog/[slug].astro b/src/pages/blog/[slug].astro new file mode 100644 index 0000000..c3e3d29 --- /dev/null +++ b/src/pages/blog/[slug].astro @@ -0,0 +1,28 @@ +--- +import { getCollection, render } from 'astro:content'; +import { Image } from 'astro:assets'; +import BaseLayout from '../../layouts/BaseLayout.astro'; + +export async function getStaticPaths() { + const posts = await getCollection('posts'); + return posts.map((post) => ({ + params: { slug: post.data.slug }, + props: { post }, + })); +} + +const { post } = Astro.props; +const { Content } = await render(post); +--- + + +
+

{post.data.title}

+ +
+
+ {post.data.featuredImage && {post.data.title}} + +
+
+
diff --git a/src/pages/blog/index.astro b/src/pages/blog/index.astro new file mode 100644 index 0000000..1cbe736 --- /dev/null +++ b/src/pages/blog/index.astro @@ -0,0 +1,21 @@ +--- +import { getCollection } from 'astro:content'; +import { Image } from 'astro:assets'; +import BaseLayout from '../../layouts/BaseLayout.astro'; + +const posts = (await getCollection('posts')).sort((a, b) => b.data.date.getTime() - a.data.date.getTime()); +--- + + +
+ {posts.map((post) => ( + + ))} +
+
diff --git a/src/pages/index.astro b/src/pages/index.astro new file mode 100644 index 0000000..690ba68 --- /dev/null +++ b/src/pages/index.astro @@ -0,0 +1,37 @@ +--- +import { Image } from 'astro:assets'; +import BaseLayout from '../layouts/BaseLayout.astro'; +import Slideshow from '../components/Slideshow.astro'; +import FeaturedBox from '../components/FeaturedBox.astro'; +import { getCollection } from 'astro:content'; + +const posts = (await getCollection('posts')).sort((a, b) => b.data.date.getTime() - a.data.date.getTime()); +--- + + + + +

Dedicated Contact Center Hosting

+ + + + + +
+
+
Have your Call Center hosted on dedicated hardware in our private cloud of hundreds of servers
+
+
diff --git a/src/styles/global.css b/src/styles/global.css new file mode 100644 index 0000000..1051b74 --- /dev/null +++ b/src/styles/global.css @@ -0,0 +1,1431 @@ +/* +Theme Name: Small Business +Theme URI: http://d5creation.com/theme/smallbusiness/ + +Author: D5 Creation +Author URI: http://d5creation.com/ + +Description: Small Business is a theme for Business. Customizable Background and other options will give the WordPress Driven Site an attractive look. Small Business is super elegant and Professional Theme which will create the business widely expressed. The Slider will show the featured images and contents of posts automatically. Front Page, Right and Footer Sidebar will be usable for showing the widgets and PlugIns items. Full Wide page can be used for showing showcase or other pages. Small Business Pro has come with exciting Post Options, Theme Options and Extra Functionalities. D5 Creation's Support will be with you, Always! + +Version: 1.7 + +Tags: gray, light, black, red, white, two-columns, right-sidebar, fixed-width, custom-header, custom-background, custom-menu, threaded-comments, sticky-post, rtl-language-support, front-page-post-form, full-width-template, theme-options + +License: GNU General Public License v2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +Small Business WordPress Theme, Copyright 2012: D5 Creation (www.d5creation.com) +Small Business is distributed under the terms of the GNU GPL + +Text Domain: smallbusiness + +*/ + +/* =Reset default browser CSS. Based on work by Eric Meyer: http://meyerweb.com/eric/tools/css/reset/index.html +-------------------------------------------------------------- */ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + border: 0; + font-family: inherit; + font-size: 100%; + font-style: inherit; + font-weight: inherit; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; +} +:focus {/* remember to define focus styles! */ + outline: 0; +} + +body { + line-height: 1; +} + +ol, +ul { + list-style: none; +} + +table {/* tables still need 'cellspacing="0"' in the markup */ + border-collapse: separate; + border-spacing: 0; + background-color:#EEEEEE; + border:1px solid #FFFFFF; + box-shadow:0 0 5px 0 #DDDDDD; + color:#333333; +} + +caption, th, td { + font-weight: normal; + text-align: left; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ""; +} + +blockquote, +q { + quotes: "" ""; +} + +a img { + border: 0; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +menu, +nav, +section { + display: block; +} + + +/* =WordPress Core and Addition +-------------------------------------------------------------- */ +.alignnone, +#content .alignnone, +#content-full .alignnone, +div .alignnone { + margin: 5px 20px 20px 0; +} + +.aligncenter, +#content .aligncenter, +#content-full .aligncenter, +div.aligncenter { + display:block; + margin: 5px auto 5px auto; +} + +.alignright, +#content .alignright, +#content-full .alignright, +div .alignright { + float:right; + margin: 5px 0 20px 20px; +} + +.alignleft, +#content .alignleft, +#content-full .alignleft, +div .alignleft { + float:left; + margin: 5px 20px 20px 0; +} + +a img.alignright { + float:right; + margin: 5px 0 20px 20px; +} + +a img.alignnone { + margin: 5px 20px 20px 0; +} + +a img.alignleft { + float:left; + margin: 5px 20px 20px 0; +} + +a img.aligncenter { + display: block; + margin-left: auto; + margin-right: auto +} + +.wp-caption { + background: #FFFFFF; + border: 1px solid #f0f0f0; + max-width: 96%; /* Image does not overflow the content area */ + padding: 5px 3px 10px; + text-align: center; +} + +.wp-caption.alignnone { + margin: 5px 20px 20px 0; +} + +.wp-caption.alignleft { + margin: 5px 20px 20px 0; +} + +.wp-caption.alignright { + margin: 5px 0 20px 20px; +} + +.wp-caption img { + border: 0 none; + height: auto; + margin:0; + max-width: 98.5%; + padding:0; + width: auto; +} + +.wp-caption p.wp-caption-text { + font-size:11px; + line-height:17px; + margin:0; + padding:0 4px 5px; +} + +/* =Structure +----------------------------------------------- */ + +body { + font-family: Arial,Helvetica,sans-serif; + font-size: 14px; + line-height: 1.6; + word-wrap: break-word; + color:#333333; + background:#AAAAAA; +} + + +img { + max-width: 100%; + border: 0 none; +} + +#container { + margin: 0 auto; + padding: 0 50px; + width: 930px; + background:#FFFFFF; +} + +#top-menu-container { + height: 30px; + margin: 0 -50px; + width: 930px; + padding: 5px 50px; + background:#e5010a; +} + +#top-menu-container input#s { + float: right; + padding: 5px 25px 5px 10px; + width: 150px; + background: url("/theme-images/search.png") no-repeat scroll right 50% transparent; + border: 1px solid #D61003; + box-shadow: 0 0 3px 0 #940D05; + color: #999999; +} + +#top-menu-container input[type="submit"] { + display: none; +} + +#header { + min-height: 100px; + min-width: 930px; + margin-bottom: 20px; +} + +img.site-logo, h1.site-title { + color: #e5010a; + float: left; + font-size: 80px; + font-weight: bold; + letter-spacing: -7px; + max-height: 90px; + max-width: 300px; + padding: 5px 0; + text-shadow: 1px 1px 1px #000000; + word-wrap: normal; +} + +#header-content { + width: 930px; + margin:auto; +} + +.site-title-hidden { + display: none; +} + +#headersep { + height: 3px; + margin: 20px -50px; +} + +#content { + float:left; + width: 650px; +} + +#content-full { + + width: 930px; +} + +.content-ver-sep { + clear: both; + height: 1px; + background:#CCCCCC; + border-bottom:1px solid #FFFFFF; +} + +#right-sidebar { + float: right; + width: 230px; +} + +#footer { + clear: both; + margin: 0 -50px; + font-size: 12px; + min-width: 930px; + background: #333333; + border-top: 7px solid #e5010a; +} + +#footer-content { + width: 930px; + margin: 0 auto; +} + +#social { + display: table; + float: right; + height: 20px; + margin-right: 20px; +} + +.facebook-link { + background: url("/theme-images/fbicon.png") no-repeat scroll center 50% transparent; +} + +.twitter-link { + background: url("/theme-images/twittericon.png") no-repeat scroll center 50% transparent; + +} + +.youtube-link { + background: url("/theme-images/youtubeicon.png") no-repeat scroll center 50% transparent; + +} + +.li-link { + background: url("/theme-images/liicon.png") no-repeat scroll center 50% transparent; + +} + +.feed-link { + background: url("/theme-images/feedicon.png") no-repeat scroll center 50% transparent; + +} + + +.facebook-link, +.twitter-link, +.youtube-link, +.li-link, +.feed-link { + float: left; + height: 20px; + margin: 2px 5px; + padding: 3px; + width: 20px; + border-radius: 5px 0 5px 0; + border-style: solid; + border-width: 1px; +} + +.facebook-link:hover, +.twitter-link:hover, +.youtube-link:hover, +.li-link:hover, +.feed-link:hover { + opacity: 1; +} + +#footer-sidebar { + overflow: hidden; +} + +#creditline { + font-size: 13px; + margin: 0 -50px; + padding: 5px 50px 10px; + text-align: center; + width: 930px; + background:#e5010a; + color: #CCCCCC; +} + +#creditline a { + font-weight: bold; + color: #CCCCCC; +} + +h3.subtitle { + color: #AAAAAA; +} + +/* Common Elements +------------------------------------------------------------- */ +ol, +ul { + padding: 0 0 10px 20px; + display: block; + margin-bottom: 10px; +} + +ul { + list-style: square outside none; +} + +ol { + list-style: decimal outside none; +} + +strong { + font-weight: bold; +} + +dl { + margin: 0 0 24px 0; +} + +dt { + font-weight: bold; +} + +dd { + margin-bottom: 18px; +} + +strong { + font-weight: bold; +} + +cite, +em, +i { + font-style: italic; +} + +big { + font-size: 131.25%; +} + +ins { + background: #ffc; + text-decoration: none; +} + +blockquote cite, +q cite, +blockquote em, +q em, +blockquote i, +q i { + font-style: normal; +} + +pre { + background:#FFFFFF; + color: #222222; + line-height: 18px; + margin-bottom: 18px; + overflow: auto; + padding: 1.5em; +} + +abbr, +acronym { + border-bottom: 1px dotted #666; + cursor: help; +} + +sup, +sub { + height: 0; + line-height: 1; + position: relative; + vertical-align: baseline; + font-size: 70%; +} + +sup { + bottom: 1ex; +} + +sub { + top: .5ex; +} + +address { + background: #EEEEEE; + border: 2px solid #DDDDDD; + font-style: italic; + font-weight: bold; + margin-bottom: 15px; + max-width: 250px; + padding: 5px 10px; + text-align: right; +} + +embed { + max-width: 100%; +} + +caption { + color:#999999; +} + +s, +strike, +del { + text-decoration: line-through; +} + +/* Menu Elements +------------------------------------------------------------- */ + +#smallbusiness-main-menu { + float: right; + font-family: 'Coda',cursive,sans-serif; + line-height: 1; + max-width: 610px; + color:#EEEEEE; +} + +.menu { + float: right; +} + +#smallbusiness-main-menu ul { + list-style: none outside none; +} + +#smallbusiness-main-menu li { + float: left; + position: relative; + margin: 0 3px; +} + + +#smallbusiness-main-menu a { + display: block; + font-size: 13px; + min-width: 40px; + padding: 47px 7px 20px; + position: relative; + text-align: center; + text-transform: uppercase; + color: #e5010a; +} + +#smallbusiness-main-menu li ul { + float: left; + position: relative; + margin: 0; +} + +#smallbusiness-main-menu ul ul, +.sub-menu, .sub-menu ul ul { + display: none; + float: left; + left: 0; + position: absolute; + font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif; + z-index: 10000; + padding: 5px; + box-shadow: 0 0 5px 0 #000000; + background: #F2F2F2; + border: 3px solid #e5010a; +} + +#smallbusiness-main-menu ul li ul li { +margin:0; +} + +#smallbusiness-main-menu ul ul ul { + left: 100%; + top: 0; + z-index: 999; +} + +#smallbusiness-main-menu ul ul a { + padding: 9px 15px; + width: 140px; + text-align: left; + text-transform: none; + background:#F2F2F2; + border-bottom:1px solid #BFBFBF; + border-top:1px solid #FFFFFF; + color:#e5010a; +} + + +#smallbusiness-main-menu ul ul a{} +#smallbusiness-main-menu ul ul a:hover, +#smallbusiness-main-menu ul ul .current-menu-item > a, +#smallbusiness-main-menu ul ul .current-menu-ancestor > a, +#smallbusiness-main-menu ul ul .current_page_item > a, +#smallbusiness-main-menu ul ul .current_page_ancestor > a{ + background:#e5010a; + color:#FFFFFF; +} + + + +#smallbusiness-main-menu ul li:hover > ul { + display: block; +} + +#smallbusiness-top-menu { + display: block; + float: left; + max-width: 550px; + height: 25px; + border-left:1px solid #940d05; + border-right:1px solid #d61003; +} + +#smallbusiness-top-menu ul{ + list-style: none outside none; + padding: 0; +} + +#smallbusiness-top-menu li{ + position: relative; + float: left; +} + +#smallbusiness-top-menu li a{ + border-left: 1px solid #d61003; + border-right: 1px solid #940d05; + color: #EEEEEE; + font-size: 11px; + padding: 3px 10px; + text-decoration: none; + text-shadow: 0 0 1px #CCCCCC; + text-transform: uppercase; +} + +.widget .menu { + float:left; +} + +/* Wedget Elements +------------------------------------------------------------- */ +.widget { + display: block; + word-wrap: break-word; +} + +.widget ul, +.widget ol { + padding: 0; +} + +#right-sidebar .widget { + float: right; + margin-bottom: 20px; + padding: 15px; + width: 200px; + background:#EEEEEE; +} + +#right-sidebar .widget h3 { + padding-bottom: 5px; + text-transform: uppercase; + color:#e5010a; +} + +#right-sidebar .widget, +#right-sidebar .widget li, +#right-sidebar .widget a, +#right-sidebar .widget a:hover { + text-decoration: none; + color:#333333; +} + +#right-sidebar .widget li { + list-style: none outside none; + padding: 5px 0 5px 17px; + background:url("/theme-images/listicon.gif") no-repeat scroll 0 10px transparent; + border-bottom:1px solid #CCCCCC; + border-top:1px solid #FFFFFF; +} + + +#footer-sidebar .widget { + width:277px; + margin: 15px 0; +} + +#footer-sidebar #first-footer-widget { + float:left; +} + +#footer-sidebar #footer-widgets { + margin-left: 49.5px; + float:left; +} + +#footer-sidebar .widget h3 { + padding-bottom: 5px; + text-transform: uppercase; + color:#DDDDDD; + text-shadow:1px 1px 1px #000000; +} + +#footer-sidebar .widget, +#footer-sidebar .widget li, +#footer-sidebar .widget a, +#footer-sidebar .widget a:hover, +#footer table { + text-decoration: none; + color:#8f8f8e; +} + +#footer-sidebar .widget ul { + background: url("/theme-images/listiconf.gif") no-repeat scroll 0 7px transparent; + border-bottom: 1px dotted #555555; + border-top: 1px dotted #111111; +} + +#footer-sidebar .widget li { + list-style: none outside none; + padding: 3px 0 3px 17px; + background: url("/theme-images/listiconf.gif") no-repeat scroll 0 7px transparent; + border-bottom: 1px dotted #111111; + border-top: 1px dotted #555555; +} + +#right-sidebar input#s, +#footer-sidebar input#s { + width: 60%; + min-width: 100px; +} + +#right-sidebar form#searchform input[type="submit"], +#footer-sidebar form#searchform input[type="submit"] { + padding: 8px 7px; +} + +.textwedget { + width: 100%; +} + +/* Design Elements +------------------------------------------------------------- */ +h1, h1 a, h1 a:visited, h1 a:hover, h2, h2 a, h2 a:visited, h2 a:hover, h3, h4, h5, h6 { + font-family: 'Coda',cursive,sans-serif; + font-weight: normal; + line-height: 1.25; + margin: 0 0 10px; + color:#111111; +} + +h1 { + font-size: 30px; +} + +h2 { + font-size: 23px; +} + +h3 { + font-size: 20px; +} + +h4 { + font-size: 17px; +} + +h5 { + font-size: 15px; +} + +h6 { + font-size: 13px; +} + +p { + margin-bottom: 10px; +} + +a { + text-decoration:none; + color:#fc542b; +} + +b, strong { + font-weight: bold; +} +displaynone { + display: none; +} + +.clear { + clear: both; +} + +table { + padding: 5px; + min-width: 200px; + margin-bottom: 15px; + max-width: 100%; +} + +td { + padding: 5px 7px; + vertical-align: top; +} + +#wp-calendar td { + padding: 0px 7px; +} + +th { + font-weight: bold; + line-height: 1; + padding: 5px 7px; + text-shadow:0 1px 0 rgba(255, 255, 255, 0.7); + background:#CCCCCC; +} + +table#wp-calendar { + background: none repeat scroll 0 0 transparent; + border: medium none; + box-shadow: none; + width: 100%; +} + +button, +input[type="reset"], +input[type="button"], +input[type="submit"]{ + border-radius:5px; + display:inline-block; + font-family:arial; + font-size:13px; + font-weight:bold; + padding:5px 15px 6px; + text-decoration:none; + height:35px; + text-transform: uppercase; + cursor:pointer; + margin:5px 0; + background: url("/theme-images/btn.png") repeat-x scroll right top #F2240D; + border: 2px solid #E01F0A; + box-shadow: 0 0 5px 0 #FABDB6; + color: #F7F7F7; + text-shadow: 1px 1px 1px #000000; +} + + +input[type="text"], +textarea, input#s, +input[type="password"] { + border-radius: 5px; + font-size: 14px; + padding: 10px 7px; + width: 98%; + background:#EDEDED; + border-top:1px solid #999999; + border-left:1px solid #999999; + border-right:1px solid #FFFFFF; + border-bottom:1px solid #FFFFFF; +} + +input[type="password"] { + width: 200px; +} + +button:active, +input[type="reset"]:active, +input[type="button"]:active, +input[type="submit"]:active { + position:relative; + top:1px; +} + + +input#s { + width: 70%; + min-width: 135px; +} + + + +.post.sticky, +.sticky { + margin-bottom: 30px; + padding: 15px; + background:url("/theme-images/sticky.png") no-repeat scroll right top #F2F2F2; + border:3px solid #DDDDDD; +} + +.gallery-caption { + clear: both; + width:95%; +} + +#content .gallery .attachment-thumbnail { + float:none; + margin: 5px auto; +} + +.bypostauthor { +} + +#container, +#content, +#content-full { + font-size: 14px; + text-align: justify; +} + +#content img, +#content-full img { + height: auto; + margin: 0; + max-width: 100%; + vertical-align: middle; +} + + +#heading { + font-size: 33px; + margin: 0 0 20px; + text-align: center; + text-transform: uppercase; + color:#AAAAAA; +} + +/* ------------------------------------------------------------------------------------------ */ + +#slider { + background: url("/theme-images/slide-shadow.png") no-repeat scroll center bottom transparent; + margin: 20px auto; + position: relative; + width: 930px; + height: 399px; +} + +#slideshow { + background: #333333; + position: relative; + width: 930px; + height: 354px; +} + +#slideshow, +#slideshow a, +#slideshow h2 { + color: #EEEEEE; +} + +#slideshow img.attachment-slide-thumb { + position:absolute; +} + +#slideshow .post-slide { + background: none repeat scroll 0 0 rgba(0, 0, 0, 0.7); + margin: 70px 0 0 465px; + padding: 20px; + position: absolute; + top: 0; + left: 0; + text-align: left; + width: 425px; + border-radius: 10px 0 0 10px; +} + +#slideshow .read-more { + display: none\9; +} + + +ul.bjqs{position:relative; list-style:none;padding:0;margin:0;overflow:hidden; display:none;} +li.bjqs-slide{display:none;position:absolute;} +ul.bjqs-controls{list-style:none;margin:0;padding:0;z-index:9999;} +#slideshow ol.bjqs-markers{list-style:none;margin:0;padding:0;z-index:9999; margin: 10px auto; display: table;} +ol.bjqs-markers li{float:left;} +p.bjqs-caption{display:block;width:96%;margin:0;padding:2%;position:absolute;bottom:0;} + +ul.bjqs-controls li a.bjqs-prev { + background: url("/theme-images/prev.png") no-repeat scroll left top transparent; + height: 42px; + left: 10px; + margin-top: -15px; + opacity: 0.3; + filter:alpha(opacity=30); /* For IE8 and earlier */ + overflow: hidden; + position: absolute; + text-indent: -9999em; + top: 50%; + width: 42px; + z-index: 100; +} + +ul.bjqs-controls li a.bjqs-next { + background: url("/theme-images/next.png") no-repeat scroll left top transparent; + height: 42px; + margin-top: -15px; + opacity: 0.3; + filter:alpha(opacity=30); /* For IE8 and earlier */ + overflow: hidden; + position: absolute; + right: 10px; + text-indent: -9999em; + top: 50%; + width: 42px; + z-index: 100; +} + +ul.bjqs-controls li a.bjqs-prev:hover, +ul.bjqs-controls li a.bjqs-next:hover { + opacity: 0.5; + filter:alpha(opacity=90); /* For IE8 and earlier */ +} + +ol.bjqs-markers li a { + background: #333333; + border-radius: 50px; + display: inline-block; + height: 14px; + margin: 4px; + text-indent: -9999px; + width: 14px; + opacity: .7; +} + +ol.bjqs-markers li.active-marker a { + background: #fc542b; +} + + + +/* ------------------------------------------------------------------------------------------ */ + +#featured-boxs { + display: block; +} + +#featured-boxs h2 { + padding: 10px 0 5px; + text-align: center; + text-shadow:-1px -1px 3px #FFFFFF; +} + +#featured-boxs p { + text-align: justify; +} + +.featured-box, +.featured-box-first { + width:277px; + display:inline; +} + +.featured-box-first { + float:left; + +} + +.featured-box { + margin-left: 49.5px; + float:left; +} + +#customers-comment { + font-size: 17px; + font-weight: bold; + margin-top: 20px; + line-height: 2; +} + +blockquote, +q { + margin:20px 10px; + padding:10px; + quotes: '<<' '>>'; + font-weight:normal; + background:#fee4de; + background:rgba(250, 205, 194, 0.35); + border-left:10px solid #fb6441; + border-right:10px solid #fb6441; +} + +blockquote:before, +q:before { + content:'\201C'; + font-size:4em; + line-height:.1em; + margin-right:.20em; + vertical-align:-.4em; + color:#fb6441; +} + +blockquote:after, +q:after { + content:'\201D'; + font-size:4em; + line-height:.1em; + margin-left:.20em; + vertical-align:-.4em; + color:#fb6441; +} + +blockquote p, +q p { + display:inline; +} + +#container .attachment-thumbnail, +#container .attachment-category-thumb { + border: 1px solid #EEEEEE; + float: left; + margin: 5px 15px 10px 0; + padding: 3px; +} + + +h1.page-title, +h1.arc-post-title { + font-size: 35px; + text-transform: uppercase; + text-align: left; + text-shadow:-1px -1px 3px #FFFFFF; + color:#515151; +} + +h2.post-title, +h2.comments, +h3#reply-title, +h2.post-title-color { + font-size: 30px; + margin-bottom: 0; + padding-bottom: 5px; + text-align: left; + text-transform: uppercase; + text-shadow:-1px -1px 3px #FFFFFF; + color:#595656; +} + + +.entrytext { + padding: 10px 0; +} + +h3.arc-src { + text-transform: uppercase; + font-size: 20px; + color:#fbbda1; +} + +.post, +.hentry, +.no-results { + margin-bottom: 20px; + +} + +.read-more { + display: table; + padding: 5px 10px; + border-radius: 10px 0; + background:url("/theme-images/btn.png") repeat-x scroll 0 0 #e5010a; + border:1px solid #EEEEEE; + box-shadow:0 0 3px 0 #fead99; + +} + +form#loginform input[type="text"], +form#loginform textarea, +form#loginform input#s, +form#loginform input[type="password"] { + width: 90%; +} + +.postmetadata { + font-family:Arial, Helvetica, sans-serif; + text-shadow:0 0 1px #FFFFFF; +} + +p.postmetadata { + margin: 0; +} + +.postmetadataw { + font-weight: bold; + letter-spacing: 1px; +} + +.up-bottom-border { + display: inline-block; + margin-bottom: 13px; + padding: 5px 10px; + width: 98%; + background:#EEEEEE; +} + +.floatleft { + float: left; + width: 45%; + text-align:left; +} + +.floatright { + float: right; + width: 45%; + text-align:right; +} + +#page-nav .alignright { + text-align:right; +} + +#page-nav .alignleft { + text-align:left; +} + +#page-nav a { + border-style: solid; + border-width: 1px; + font-size: 17px; + padding: 10px; + background:none repeat scroll 0 0 #EEEEEE; + border-color:#FFFFFF #B1B4B5 #B1B4B5 #FFFFFF; +} + + + +#commentsbox { + margin: 20px 0; +} + +#commentsbox ol, +#commentsbox li { + list-style: none outside none; +} + + + + +#commentsbox .commentlist { + margin: 0 0 0 -25px; +} + +#commentsbox .watermark { + font-family: 'Coda',cursive,sans-serif; + font-size: 17px; + text-align: center; + text-shadow: none; + text-transform: uppercase; + color:rgba(150, 150, 150, 0.7); +} + +#commentsbox .comment-author cite, +#commentsbox .comment-author cite a { + font-weight: bold; + letter-spacing: 3px; + color:#ec510c; + text-shadow:-1px -1px 1px #FFFFFF; +} + + + +ol.commentlist, +ul.commentlist { + list-style: none outside none; +} + + +#commentsbox img.avatar { + left: 0; + position: absolute; + ttop: 7px; + +} + +#commentsbox ul.children { + padding: 0; +} + + +.comment-body { + padding: 0 0 10px; +} + +#commentsbox .comment-body ol li { + list-style: decimal outside none; +} + +#commentsbox .comment-body ul li{ + list-style: square outside none; +} + +#commentsbox .commentlist li.comment { + line-height: 19px; + margin: 0 0 24px; + padding: 5px 0 0 50px; + position: relative; + border-top:3px solid #fad5c5; +} + +#comments .comment-body p:last-child { + margin-bottom: 6px; +} + +#commentsbox .comment-meta, +#commentsbox .comment-meta a:link, +#commentsbox .comment-meta a:visited { + font-size: 12px; + padding-bottom: 10px; + text-shadow: none; + color:#a19f9f; +} + +a.comment-reply-link { + font-size: 12px; + padding: 1px 5px; + box-shadow:0px 0px 3px 0px #555555; +} + +#commentsbox .commentlist .children li { + margin: 0; + border-top:1px solid #fad5c5; +} + +#commentsbox .commentlist li:last-child { + border-bottom: medium none; + margin-bottom: 0; +} + +#comment-form { + max-width: 550px; +} + + +#respond .required { + font-weight: bold; + position:absolute; + color:#ff4b33; +} + + + +#comments-list #respond { + margin: 0 0 18px 0; +} +#comments-list ul #respond { + margin: 0; +} + +#cancel-comment-reply-link { + font-weight: normal; + line-height: 18px; +} + + +#respond input { + margin: 0 0 9px; +} + +#respond textarea { + width: 98%; +} + +#respond .form-allowed-tags { + font-size: 13px; + line-height: 18px; +} +#respond .form-allowed-tags code { + font-size: 11px; +} +#respond .form-submit { + margin: 12px 0; +} +#respond .form-submit input { + font-size: 14px; + width: auto; +} + +h2#client-text.post-title { + opacity: 0.7; + padding: 10px 0; + text-align: center; + color:#fbaf9d; + text-shadow:1px 1px 3px #EEEEEE; +} + +#client { + display:table; + margin: 20px auto; +} + +#client img { + margin: 0 13px; + max-height: 90px; + vertical-align: middle; + width: 100px; +} + + +.facebook-link, +.twitter-link, +.youtube-link, +.li-link, +.feed-link{background-color: #fd7b6d; border-color: #fcb3ab #fcb3ab #911406 #911406;} +#smallbusiness-main-menu a:hover, +#smallbusiness-main-menu .current-menu-item > a, +#smallbusiness-main-menu .current-menu-ancestor > a, +#smallbusiness-main-menu .current_page_item > a, +#smallbusiness-main-menu .current_page_ancestor > a{ + color:#FFFFFF; + background:#e5010a; + transition: background-color 1s linear; + -moz-transition: background-color 1s linear; /* FF3.7+ */ + -o-transition: background-color 1s linear; /* Opera 10.5 */ + -webkit-transition: background-color 1s linear; /* Saf3.2+, Chrome */ +} +#right-sidebar .widget ul{ + border-bottom:1px solid #FFFFFF; + border-top:1px solid #CCCCCC; +} +input[type="text"]:focus, +textarea:focus, +input#s:focus, +input[type="password"]:focus{background:none repeat scroll 0 0 #F7F7F7;} +button:hover, +input[type="reset"]:hover, +input[type="button"]:hover, +input[type="submit"]:hover{ + box-shadow:0px 0px 5px 0px #EEEEEE; + border:2px solid #e96b5d; +} +h3 span{color:#e64f0d;} +.read-more, .read-more a{ + color:#FFFFFF; + text-shadow: 1px 1px 1px #555555; +} +.postmetadata a{color:#fc783d;} +.postmetadataw a{color:#f35915;} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..8bf91d3 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist"] +}