403Webshell
Server IP : 14.225.204.176  /  Your IP : 216.73.216.252
Web Server : nginx/1.24.0
System : Linux nodejs-ybgk 6.8.0-40-generic #40-Ubuntu SMP PREEMPT_DYNAMIC Fri Jul 5 10:34:03 UTC 2024 x86_64
User : root ( 0)
PHP Version : 8.1.34
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /var/www/html/php/zinisoft.net-react/.next/cache/webpack/server-production/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/php/zinisoft.net-react/.next/cache/webpack/server-production/13.pack
wpc�<�webpack/lib/cache/PackFileCacheStrategy�PackContentItems�`OResolverCachePlugin|normal|default|alias=|false|dependencyType=|esm|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFields=[|0=|main|]|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|true|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3|request=|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\page.jsx�ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/empty|client-only$=|next/dist/compiled/client-only/error|next/dist/compiled/server-only$=|next/dist/compiled/server-only/empty|next/dist/compiled/client-only$=|next/dist/compiled/client-only/error|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\head.js=|next/dist/client/components/noop-head|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\image.js=|next/dist/api/image|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\constants.js=|next/dist/api/constants|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\router.js=|next/dist/api/router|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dynamic.js=|next/dist/api/app-dynamic|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\script.js=|next/dist/api/script|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\link.js=|next/dist/api/link|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\navigation.js=|next/dist/api/navigation|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\headers.js=|next/dist/api/headers|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\og.js=|next/dist/api/og|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\document.js=|next/dist/api/document|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\app.js=|next/dist/api/app|]|dependencyType=|esm|path=|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3|request=|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\page.jsx|Compilation/modules|javascript/auto|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dist\build\webpack\loaders\next-flight-loader\index.js!G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dist\build\webpack\loaders\next-swc-loader.js??ruleSet[1].rules[14].oneOf[2].use[0]!G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\page.jsx|rsc�
ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/empty|client-only$=|next/dist/compiled/client-only/error|next/dist/compiled/server-only$=|next/dist/compiled/server-only/empty|next/dist/compiled/client-only$=|next/dist/compiled/client-only/error|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\head.js=|next/dist/client/components/noop-head|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\image.js=|next/dist/api/image|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\constants.js=|next/dist/api/constants|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\router.js=|next/dist/api/router|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dynamic.js=|next/dist/api/app-dynamic|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\script.js=|next/dist/api/script|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\link.js=|next/dist/api/link|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\navigation.js=|next/dist/api/navigation|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\headers.js=|next/dist/api/headers|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\og.js=|next/dist/api/og|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\document.js=|next/dist/api/document|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\app.js=|next/dist/api/app|react$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react|react-dom$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-dom|react/jsx-runtime$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-runtime|react/jsx-dev-runtime$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server|react-dom/static$=|next/dist/compiled/react-dom-experimental/static|react-dom/static.edge$=|next/dist/compiled/react-dom-experimental/static.edge|react-dom/static.browser$=|next/dist/compiled/react-dom-experimental/static.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server-edge.js|react-dom/server.browser$=|next/dist/build/webpack/alias/react-dom-server-browser.js|react-server-dom-webpack/client$=|next/dist/compiled/react-server-dom-webpack/client|react-server-dom-webpack/client.edge$=|next/dist/compiled/react-server-dom-webpack/client.edge|react-server-dom-webpack/server.edge$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-edge|react-server-dom-webpack/server.node$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-node|@vercel/turbopack-ecmascript-runtime/dev/client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|]|mainFields=[|0=|main|]|conditionNames=[|0=|node|1=|require|]|fullySpecified=|false|dependencyType=|commonjs|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\(service)\services|request=|../../../data/servicesApi�
ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/empty|client-only$=|next/dist/compiled/client-only/error|next/dist/compiled/server-only$=|next/dist/compiled/server-only/empty|next/dist/compiled/client-only$=|next/dist/compiled/client-only/error|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\head.js=|next/dist/client/components/noop-head|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\image.js=|next/dist/api/image|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\constants.js=|next/dist/api/constants|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\router.js=|next/dist/api/router|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dynamic.js=|next/dist/api/app-dynamic|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\script.js=|next/dist/api/script|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\link.js=|next/dist/api/link|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\navigation.js=|next/dist/api/navigation|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\headers.js=|next/dist/api/headers|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\og.js=|next/dist/api/og|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\document.js=|next/dist/api/document|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\app.js=|next/dist/api/app|react$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react|react-dom$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-dom|react/jsx-runtime$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-runtime|react/jsx-dev-runtime$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server|react-dom/static$=|next/dist/compiled/react-dom-experimental/static|react-dom/static.edge$=|next/dist/compiled/react-dom-experimental/static.edge|react-dom/static.browser$=|next/dist/compiled/react-dom-experimental/static.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server-edge.js|react-dom/server.browser$=|next/dist/build/webpack/alias/react-dom-server-browser.js|react-server-dom-webpack/client$=|next/dist/compiled/react-server-dom-webpack/client|react-server-dom-webpack/client.edge$=|next/dist/compiled/react-server-dom-webpack/client.edge|react-server-dom-webpack/server.edge$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-edge|react-server-dom-webpack/server.node$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-node|@vercel/turbopack-ecmascript-runtime/dev/client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|]|mainFields=[|0=|main|]|conditionNames=[|0=|node|1=|require|]|fullySpecified=|false|dependencyType=|commonjs|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\(service)\service\[id]|request=|../../../../data/servicesApiy
ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/empty|client-only$=|next/dist/compiled/client-only/error|next/dist/compiled/server-only$=|next/dist/compiled/server-only/empty|next/dist/compiled/client-only$=|next/dist/compiled/client-only/error|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\head.js=|next/dist/client/components/noop-head|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\image.js=|next/dist/api/image|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\constants.js=|next/dist/api/constants|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\router.js=|next/dist/api/router|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dynamic.js=|next/dist/api/app-dynamic|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\script.js=|next/dist/api/script|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\link.js=|next/dist/api/link|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\navigation.js=|next/dist/api/navigation|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\headers.js=|next/dist/api/headers|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\og.js=|next/dist/api/og|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\document.js=|next/dist/api/document|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\app.js=|next/dist/api/app|react$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react|react-dom$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-dom|react/jsx-runtime$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-runtime|react/jsx-dev-runtime$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server|react-dom/static$=|next/dist/compiled/react-dom-experimental/static|react-dom/static.edge$=|next/dist/compiled/react-dom-experimental/static.edge|react-dom/static.browser$=|next/dist/compiled/react-dom-experimental/static.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server-edge.js|react-dom/server.browser$=|next/dist/build/webpack/alias/react-dom-server-browser.js|react-server-dom-webpack/client$=|next/dist/compiled/react-server-dom-webpack/client|react-server-dom-webpack/client.edge$=|next/dist/compiled/react-server-dom-webpack/client.edge|react-server-dom-webpack/server.edge$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-edge|react-server-dom-webpack/server.node$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-node|@vercel/turbopack-ecmascript-runtime/dev/client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|]|mainFields=[|0=|main|]|conditionNames=[|0=|node|1=|require|]|fullySpecified=|false|dependencyType=|commonjs|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app|request=|../data/servicesApiIResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/empty|client-only$=|next/dist/compiled/client-only/error|next/dist/compiled/server-only$=|next/dist/compiled/server-only/empty|next/dist/compiled/client-only$=|next/dist/compiled/client-only/error|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\head.js=|next/dist/client/components/noop-head|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\image.js=|next/dist/api/image|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\constants.js=|next/dist/api/constants|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\router.js=|next/dist/api/router|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dynamic.js=|next/dist/api/app-dynamic|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\script.js=|next/dist/api/script|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\link.js=|next/dist/api/link|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\navigation.js=|next/dist/api/navigation|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\headers.js=|next/dist/api/headers|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\og.js=|next/dist/api/og|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\document.js=|next/dist/api/document|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\app.js=|next/dist/api/app|react$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react|react-dom$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-dom|react/jsx-runtime$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-runtime|react/jsx-dev-runtime$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server|react-dom/static$=|next/dist/compiled/react-dom-experimental/static|react-dom/static.edge$=|next/dist/compiled/react-dom-experimental/static.edge|react-dom/static.browser$=|next/dist/compiled/react-dom-experimental/static.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server-edge.js|react-dom/server.browser$=|next/dist/build/webpack/alias/react-dom-server-browser.js|react-server-dom-webpack/client$=|next/dist/compiled/react-server-dom-webpack/client|react-server-dom-webpack/client.edge$=|next/dist/compiled/react-server-dom-webpack/client.edge|react-server-dom-webpack/server.edge$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-edge|react-server-dom-webpack/server.node$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-node|@vercel/turbopack-ecmascript-runtime/dev/client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|]|mainFields=[|0=|module|1=|main|]|conditionNames=[|0=|react-server|1=|...|]|fullySpecified=|false|dependencyType=|esm|path=|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app|request=|../data/servicesApibResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/empty|client-only$=|next/dist/compiled/client-only/error|next/dist/compiled/server-only$=|next/dist/compiled/server-only/empty|next/dist/compiled/client-only$=|next/dist/compiled/client-only/error|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\head.js=|next/dist/client/components/noop-head|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\image.js=|next/dist/api/image|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\constants.js=|next/dist/api/constants|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\router.js=|next/dist/api/router|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dynamic.js=|next/dist/api/app-dynamic|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\script.js=|next/dist/api/script|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\link.js=|next/dist/api/link|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\navigation.js=|next/dist/api/navigation|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\headers.js=|next/dist/api/headers|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\og.js=|next/dist/api/og|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\document.js=|next/dist/api/document|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\app.js=|next/dist/api/app|react$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react|react-dom$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-dom|react/jsx-runtime$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-runtime|react/jsx-dev-runtime$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server|react-dom/static$=|next/dist/compiled/react-dom-experimental/static|react-dom/static.edge$=|next/dist/compiled/react-dom-experimental/static.edge|react-dom/static.browser$=|next/dist/compiled/react-dom-experimental/static.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server-edge.js|react-dom/server.browser$=|next/dist/build/webpack/alias/react-dom-server-browser.js|react-server-dom-webpack/client$=|next/dist/compiled/react-server-dom-webpack/client|react-server-dom-webpack/client.edge$=|next/dist/compiled/react-server-dom-webpack/client.edge|react-server-dom-webpack/server.edge$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-edge|react-server-dom-webpack/server.node$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-node|@vercel/turbopack-ecmascript-runtime/dev/client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|]|mainFields=[|0=|module|1=|main|]|conditionNames=[|0=|react-server|1=|...|]|fullySpecified=|false|dependencyType=|esm|path=|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\(service)\services|request=|../../../data/servicesApiiResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/empty|client-only$=|next/dist/compiled/client-only/error|next/dist/compiled/server-only$=|next/dist/compiled/server-only/empty|next/dist/compiled/client-only$=|next/dist/compiled/client-only/error|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\head.js=|next/dist/client/components/noop-head|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\image.js=|next/dist/api/image|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\constants.js=|next/dist/api/constants|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\router.js=|next/dist/api/router|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dynamic.js=|next/dist/api/app-dynamic|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\script.js=|next/dist/api/script|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\link.js=|next/dist/api/link|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\navigation.js=|next/dist/api/navigation|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\headers.js=|next/dist/api/headers|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\og.js=|next/dist/api/og|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\document.js=|next/dist/api/document|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\app.js=|next/dist/api/app|react$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react|react-dom$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-dom|react/jsx-runtime$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-runtime|react/jsx-dev-runtime$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server|react-dom/static$=|next/dist/compiled/react-dom-experimental/static|react-dom/static.edge$=|next/dist/compiled/react-dom-experimental/static.edge|react-dom/static.browser$=|next/dist/compiled/react-dom-experimental/static.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server-edge.js|react-dom/server.browser$=|next/dist/build/webpack/alias/react-dom-server-browser.js|react-server-dom-webpack/client$=|next/dist/compiled/react-server-dom-webpack/client|react-server-dom-webpack/client.edge$=|next/dist/compiled/react-server-dom-webpack/client.edge|react-server-dom-webpack/server.edge$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-edge|react-server-dom-webpack/server.node$=|next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-node|@vercel/turbopack-ecmascript-runtime/dev/client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|]|mainFields=[|0=|module|1=|main|]|conditionNames=[|0=|react-server|1=|...|]|fullySpecified=|false|dependencyType=|esm|path=|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\(service)\service\[id]|request=|../../../../data/servicesApi�Compilation/modules|javascript/auto|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dist\build\webpack\loaders\next-flight-loader\index.js!G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dist\build\webpack\loaders\next-swc-loader.js??ruleSet[1].rules[14].oneOf[2].use[0]!G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\data\servicesApi.js|app-metadata-route�Compilation/modules|javascript/auto|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dist\build\webpack\loaders\next-flight-loader\index.js!G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dist\build\webpack\loaders\next-swc-loader.js??ruleSet[1].rules[14].oneOf[2].use[0]!G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\data\servicesApi.js|rsc�ResolverCachePlugin|normal|default|dependencyType=|esm|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|enforceExtensions=|false|symlinks=|true|mainFields=[|0=|main|]|mainFiles=[|0=|index|]|roots=[|]|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|alias=|false|path=|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app|request=|../data/servicesApi�ResolverCachePlugin|normal|default|dependencyType=|esm|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|enforceExtensions=|false|symlinks=|true|mainFields=[|0=|main|]|mainFiles=[|0=|index|]|roots=[|]|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|alias=|false|path=|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\(service)\services|request=|../../../data/servicesApi�ResolverCachePlugin|normal|default|dependencyType=|esm|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|enforceExtensions=|false|symlinks=|true|mainFields=[|0=|main|]|mainFiles=[|0=|index|]|roots=[|]|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|alias=|false|path=|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\(service)\service\[id]|request=|../../../../data/servicesApi�FlagDependencyExportsPlugin|javascript/auto|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dist\build\webpack\loaders\next-flight-loader\index.js!G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dist\build\webpack\loaders\next-swc-loader.js??ruleSet[1].rules[14].oneOf[2].use[0]!G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\data\servicesApi.js|app-metadata-route�FlagDependencyExportsPlugin|javascript/auto|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dist\build\webpack\loaders\next-flight-loader\index.js!G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dist\build\webpack\loaders\next-swc-loader.js??ruleSet[1].rules[14].oneOf[2].use[0]!G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\data\servicesApi.js|rsc�Compilation/codeGeneration|javascript/auto|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dist\build\webpack\loaders\next-flight-loader\index.js!G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dist\build\webpack\loaders\next-swc-loader.js??ruleSet[1].rules[14].oneOf[2].use[0]!G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\data\servicesApi.js|rsc|webpack-runtime#Compilation/codeGeneration|javascript/auto|G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dist\build\webpack\loaders\next-app-loader.js?page=%2Fsitemap.xml%2Froute&name=app%2Fsitemap.xml%2Froute&pagePath=private-next-app-dir%2Fsitemap.js&appDir=G%3A%5Czinisoft%5Czinisoft_beta%5Czinisoft.net%5Cfrontend-v3%5Capp&appPaths=%2Fsitemap&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!|rsc|ef65840f49cf6609|webpack-runtime�Compilation/assets|chunk717�Compilation/assets|chunk960�TerserWebpackPlugin|../app/sitemap.xml/route.js�TerserWebpackPlugin|960.js�webpack/lib/cache/ResolverCachePlugin��`�_ResolverCachePluginCacheMiss�context�path�request�query�fragment�module�directory�file�internal�fullySpecified�descriptionFilePath�descriptionFileData�descriptionFileRoot�relativePath�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\page.jsx��0�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\package.json�name�version�private�scripts�dependencies�zinisoft-frontend�1.3.0�dev�build�start�lint�start http://localhost:3000 && next dev�next build�next start�next lint`�@hookform/resolvers�aos�bootstrap�eslint-config-next�jarallax�next�photoswipe�react�react-accessible-accordion�react-animated-cursor�react-countup�react-dom�react-hook-form�react-modal-video�react-photoswipe-gallery�react-pro-sidebar�react-slick�react-tooltip�react-transition-group�react-visibility-sensor�sass�slick-carousel�util�yup�^2.9.11�^2.3.4�^5.1.3�^14.1.0�^1.12.8��^5.3.7�^18.2.0�^5.0.0�^2.7.0�^6.4.2��^7.44.3�^2.0.2�^2.2.7�^0.7.1�^0.29.0�^4.5.1�^4.4.5�^5.1.1�^1.62.1�^1.8.1�^0.12.5�^0.32.11�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3�./app/page.jsx�webpack/lib/FileSystemInfo�Snapshot@� �2��yB�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\package.json
�@	 �2��yB��G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app�safeTime�timestamp�hash!�\R�yBp\R�yB�63df2d77a088f522��	 �2��yB��G:\zinisoft\zinisoft_beta\zinisoft.net�G:\zinisoft\zinisoft_beta�G:\zinisoft�G:\�! �8�yB�8�yB�9ee201e165a02c33������������issuer�issuerLayer�compiler��rsc�server��� ����@� @6��yB�
��webpack/lib/NormalModule�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource�import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import FooterSection from "../components/footer/FooterSection";
import Header from "../components/header/Header";
import Hero from "../components/hero/Hero";
import Services from "../components/service/Services";
import TechnicalStandards from "../components/service/TechnicalStandards";
import { homePage } from "../data/home";
import { getGroupServices, getServicesByGroup } from "../data/servicesApi";
import { SITE_CONFIG, buildWebPageSchema } from "../data/seo";
export const metadata = homePage.metadata;
const Home = async ()=>{
    const [groups, aiItems, saasItems, group135Items] = await Promise.all([
        getGroupServices(),
        getServicesByGroup(133),
        getServicesByGroup(134),
        getServicesByGroup(135)
    ]);
    const jsonLd = {
        ...buildWebPageSchema({
            title: "ZiniSoft Ltd. Co | AI & Software Systems",
            description: SITE_CONFIG.description,
            path: "/"
        }),
        about: {
            "@id": `${SITE_CONFIG.url}/#organization`
        }
    };
    return /*#__PURE__*/ _jsxs("div", {
        className: "ptf-site-wrapper animsition ptf-is--home-agency",
        children: [
            /*#__PURE__*/ _jsx("script", {
                type: "application/ld+json",
                dangerouslySetInnerHTML: {
                    __html: JSON.stringify(jsonLd)
                }
            }),
            /*#__PURE__*/ _jsxs("div", {
                className: "ptf-site-wrapper__inner",
                children: [
                    /*#__PURE__*/ _jsx(Header, {}),
                    /*#__PURE__*/ _jsx("div", {
                        className: "ptf-main",
                        children: /*#__PURE__*/ _jsxs("div", {
                            className: "ptf-page ptf-page--home-agency",
                            children: [
                                /*#__PURE__*/ _jsx("div", {
                                    className: "ptf-showcase-3 swiper-container",
                                    children: /*#__PURE__*/ _jsx("div", {
                                        className: "swiper-wrapper",
                                        children: /*#__PURE__*/ _jsx(Hero, {})
                                    })
                                }),
                                /*#__PURE__*/ _jsx(Services, {
                                    initialGroups: groups,
                                    initialAiItems: aiItems,
                                    initialSaasItems: saasItems,
                                    initialGroup135Items: group135Items
                                }),
                                /*#__PURE__*/ _jsx(TechnicalStandards, {})
                            ]
                        })
                    }),
                    /*#__PURE__*/ _jsx(FooterSection, {})
                ]
            })
        ]
    });
};
export default Home;
�exportsType�namespace
�javascript/auto���alias�mainFields�conditionNames}���` �server-only$�client-only$�next/dist/compiled/server-only$�next/dist/compiled/client-only$�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\head.js�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\image.js�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\constants.js�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\router.js�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dynamic.js�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\script.js�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\link.js�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\navigation.js�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\headers.js�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\og.js�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\document.js�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\app.js�react$�react-dom$�react/jsx-runtime$�react/jsx-dev-runtime$�react-dom/client$�react-dom/server$�react-dom/static$�react-dom/static.edge$�react-dom/static.browser$�react-dom/server.edge$�react-dom/server.browser$�react-server-dom-webpack/client$�react-server-dom-webpack/client.edge$�react-server-dom-webpack/server.edge$�react-server-dom-webpack/server.node$�@vercel/turbopack-ecmascript-runtime/dev/client/hmr-client.ts�next/dist/compiled/server-only/empty�next/dist/compiled/client-only/error���next/dist/client/components/noop-head�next/dist/api/image�next/dist/api/constants�next/dist/api/router�next/dist/api/app-dynamic�next/dist/api/script�next/dist/api/link�next/dist/api/navigation�next/dist/api/headers�next/dist/api/og�next/dist/api/document�next/dist/api/app�next/dist/server/future/route-modules/app-page/vendored/rsc/react�next/dist/server/future/route-modules/app-page/vendored/rsc/react-dom�next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-runtime�next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime�next/dist/compiled/react-dom/client�next/dist/compiled/react-dom/server�next/dist/compiled/react-dom-experimental/static�next/dist/compiled/react-dom-experimental/static.edge�next/dist/compiled/react-dom-experimental/static.browser�next/dist/build/webpack/alias/react-dom-server-edge.js�next/dist/build/webpack/alias/react-dom-server-browser.js�next/dist/compiled/react-server-dom-webpack/client�next/dist/compiled/react-server-dom-webpack/client.edge�next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-edge�next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-node�next/dist/client/dev/noop-turbopack-hmr8����main�react-server�...


�`�cacheable�parsed�fileDependencies�contextDependencies�missingDependencies�buildDependencies�valueDependencies��assets�assetsInfo��strict�exportsArgument�topLevelDeclarations�snapshot�webpack/lib/util/LazySet�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dist\build\webpack\loaders\next-flight-loader\index.js�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\node_modules\next\dist\build\webpack\loaders\next-swc-loader.js	�webpack/DefinePlugin_hash�c67f61d6�20515ace0cfe3b6d�type�actions�clientRefs�clientEntryType�isClientRef�
�__webpack_exports__�metadata�Home�*default*	 �ɩ�yB	���m���`�webpack/lib/dependencies/HarmonyCompatibilityDependency
d����webpack/lib/dependencies/ConstDependency�`?

`?�a@

`?�A��

`1�A��

`+�A�

`6�A_

`J�A`�

`(�A��

`K�A�

		`>�webpack/lib/dependencies/HarmonyExportHeaderDependency	A>	A>


`*	A��	A��

cEE	`%�webpack/lib/dependencies/HarmonyImportSideEffectDependency�react/jsx-runtime�

`?�../components/footer/FooterSection�

`?�../components/header/Header�

`1�../components/hero/Hero�

`+�../components/service/Services�

`6�../components/service/TechnicalStandards�

`J�../data/home�

`(�../data/servicesApi�

`K	�../data/seo�

		`>�webpack/lib/dependencies/HarmonyExportSpecifierDependency`��


`*�webpack/lib/dependencies/HarmonyImportSpecifierDependencya�homePage��A,=A,4
���

b
)�getGroupServices�A��
�default���

c

�getServicesByGroup�A������

c��A������

c��A
����

c�buildWebPageSchema�AJ\�	���

c�SITE_CONFIG�description�A��A��
�	���

c0��url�A(A$
�	���

c%�jsxs�_jsxsAch����

c�jsx�_jsxA��

����

c��A������

c%%��AAE

����

c("(&��HeaderAFL

����

c('(-��Auy

����

c)")&��A������

c+0+5��A��

����

c...2��A,0

����

c0<0@��A��

����

c2@2D��HeroA��

����

c2E2I��AG	K	

����

c5.52��ServicesAL	T	

����

c535;��A�
�


����

c;.;2��TechnicalStandardsA�
�


����

c;3;E��A;?

����

c?"?&��FooterSectionA@M

��������

c?'?4�webpack/lib/dependencies/HarmonyExportExpressionDependency@x���y����

cEE�webpack/lib/dependencies/PureExpressionDependency@w����

cEEs����G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\data\servicesApi.js�� t������������./data/servicesApi.js
@� pA��yB��G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\data����!�]R�yB�]R�yB�3556ff8ca6dde200����d������
@��G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\(service)\services\package.json�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\(service)\package.json�����G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\data\package.json�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\data\servicesApi `������ b������������
@� pA��yB�������V�������
@��G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\(service)\service\[id]\package.json�G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\(service)\service\package.json�������@T������ V������������
@� pA��yB�������J�������
@�������J��������G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\sitemap.js�app-metadata-route������� J������������
@	 `E��yB���������B��������G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\(service)\services\page.jsx����������� C������������
@	 `E��yB���������;��������G:\zinisoft\zinisoft_beta\zinisoft.net\frontend-v3\app\(service)\service\[id]\page.jsx����������� <�����������
@	 `E��yB���������
['const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
export const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ export const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ export const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ export const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ export const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ export const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};
`��������
�������

����	�������������187a2fb7e226e563�������

���`�API_BASE�htmlEntities�decodeHtml�stripHtml�getHtmlTagText�getFeaturedImage�getMediaImage�serviceIcons�iconAliases�normalizeLineIcon�getMediaById�normalizeWpService�getServicesB����getServiceByIdOrSlug:���
	 �ɩ�yB��

d���A�
�A�
�

cCTA
�A��

aW@�A�eA�e

@�@�A��A��

@�@�A�X#A�X#

@�@�A�#Z'A�#Z'

@�@���

cCT��

aW@���

@�@�&���&���

@�@���

@�@�������

@�@�
�`r���s���
t���f��������

����	����������������e���
���`��������������������
	 �ɩ�yB��

d���A�
�A�
�

cCTA
�A��

aW@�A�eA�e

@�@�A��A��

@�@�A�X#A�X#

@�@�A�#Z'A�#Z'

@�@���

cCT��

aW@���

@�@���������

@�@���

@�@���������

@�@����c����� ���������d���
@	 h��yBb���e���g���v���5�������]����� ���������^���
@	 0u��yB\���_���a���p���/���i������W����� ���������X���
@	 �u��yBV���Y���[���j���)���o����webpack/lib/ModuleGraph�RestoreProvidedData����provided�canMangleProvide�terminalBinding�exportsInfo���������������
����������������
�sources�runtimeRequirements�data�javascript�webpack/lib/util/registerExternalSerializer�webpack-sources/CachedSourcec*�webpack/lib/util/registerExternalSerializer�webpack-sources/ConcatSource��webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource�/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   U2: () => (/* binding */ getServices),
/* harmony export */   aH: () => (/* binding */ getServicesByGroup),
/* harmony export */   dL: () => (/* binding */ getGroupServices),
/* harmony export */   gq: () => (/* binding */ getServiceByIdOrSlug),
/* harmony export */   jl: () => (/* binding */ getMediaById)
/* harmony export */ });
/* unused harmony export normalizeWpService */
�webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource['const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
export const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ export const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ export const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ export const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ export const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ export const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};
K�
�
�
�������#�#�������buffer�source�size�maps����)/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   U2: () => (/* binding */ getServices),
/* harmony export */   aH: () => (/* binding */ getServicesByGroup),
/* harmony export */   dL: () => (/* binding */ getGroupServices),
/* harmony export */   gq: () => (/* binding */ getServiceByIdOrSlug),
/* harmony export */   jl: () => (/* binding */ getMediaById)
/* harmony export */ });
/* unused harmony export normalizeWpService */
const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};
�{"finalSource":true}�map�bufferedMapConcatSourceRawSource�/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   U2: () => (/* binding */ getServices),
/* harmony export */   aH: () => (/* binding */ getServicesByGroup),
/* harmony export */   dL: () => (/* binding */ getGroupServices),
/* harmony export */   gq: () => (/* binding */ getServiceByIdOrSlug),
/* harmony export */   jl: () => (/* binding */ getMediaById)
/* harmony export */ });
/* unused harmony export normalizeWpService */
ReplaceSourceRawSourceg���f27462752undefined33263332undefined66136619undefined73437349undefined81578163undefined91759181undefinedw����__webpack_require__.d�����ҋ�webpack/lib/util/registerExternalSerializer�webpack-sources/ConcatSource�`�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  headerHooks: () => (/* binding */ headerHooks),
  originalPathname: () => (/* binding */ originalPathname),
  patchFetch: () => (/* binding */ patchFetch),
  requestAsyncStorage: () => (/* binding */ requestAsyncStorage),
  routeModule: () => (/* binding */ routeModule),
  serverHooks: () => (/* binding */ serverHooks),
  staticGenerationAsyncStorage: () => (/* binding */ staticGenerationAsyncStorage),
  staticGenerationBailout: () => (/* binding */ staticGenerationBailout)
});

// NAMESPACE OBJECT: ./app/sitemap.js
var sitemap_namespaceObject = {};
__webpack_require__.r(sitemap_namespaceObject);
__webpack_require__.d(sitemap_namespaceObject, {
  "default": () => (sitemap)
});

// NAMESPACE OBJECT: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__
var sitemap_next_metadata_route_namespaceObject = {};
__webpack_require__.r(sitemap_next_metadata_route_namespaceObject);
__webpack_require__.d(sitemap_next_metadata_route_namespaceObject, {
  GET: () => (GET)
});

// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-modules/app-route/module.compiled.js
var module_compiled = __webpack_require__(95419);
// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-kind.js
var route_kind = __webpack_require__(69108);
// EXTERNAL MODULE: ./node_modules/next/dist/server/lib/patch-fetch.js
var patch_fetch = __webpack_require__(99678);
// EXTERNAL MODULE: ./node_modules/next/server.js
var server = __webpack_require__(79647);
// EXTERNAL MODULE: ./data/seo.js
var seo = __webpack_require__(62486);
;// CONCATENATED MODULE: ./data/blogApi.js
�webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�webpack/lib/util/registerExternalSerializer�webpack-sources/CachedSource��webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource�const BLOG_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2/posts";
const BLOG_FALLBACK_IMAGE = "/assets/img/blog/grid/post-1.png";
export const BLOG_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (value = "")=>decodeHtml(value.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim());
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const formatDate = (value)=>{
    if (!value) {
        return "";
    }
    return new Intl.DateTimeFormat("en", {
        month: "short",
        day: "numeric",
        year: "numeric"
    }).format(new Date(value));
};
const getFeaturedImage = (post)=>{
    const media = post?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || BLOG_FALLBACK_IMAGE;
};
const getCategory = (post)=>post?._embedded?.["wp:term"]?.[0]?.[0]?.name || "Blog";
const getTags = (post)=>{
    const terms = post?._embedded?.["wp:term"]?.[1] || [];
    return terms.map((term)=>term.name);
};
const getAuthorName = (post)=>post?._embedded?.author?.[0]?.name || "Admin";
const getAuthorAvatar = (post)=>post?._embedded?.author?.[0]?.avatar_urls?.["96"] || "/assets/img/root/author-avatar.png";
const getAuthorDescription = (post)=>post?._embedded?.author?.[0]?.description || "";
const appendListParam = (params, name, values = [])=>{
    const list = Array.isArray(values) ? values : [
        values
    ];
    list.filter(Boolean).forEach((value)=>{
        params.append(`${name}[]`, String(value));
    });
};
export const buildBlogPostsUrl = ({ page = BLOG_LIST_FILTERS.page, perPage = BLOG_LIST_FILTERS.perPage, orderby = BLOG_LIST_FILTERS.orderby, order = BLOG_LIST_FILTERS.order, sticky, search, searchColumns, categories, status, author, exclude } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage),
        orderby,
        order
    });
    if (typeof sticky === "boolean") {
        params.set("sticky", String(sticky));
    }
    if (search) {
        params.set("search", search);
    }
    appendListParam(params, "search_columns", searchColumns);
    appendListParam(params, "categories", categories);
    appendListParam(params, "status", status);
    appendListParam(params, "author", author);
    appendListParam(params, "exclude", exclude);
    return `${BLOG_API_BASE}?${params.toString()}`;
};
export const normalizeWpPost = (post, { includeContent = false } = {})=>({
        id: post.id,
        slug: post.slug,
        href: `/blog/${post.slug}`,
        sourceUrl: post.link,
        img: getFeaturedImage(post),
        alt: stripHtml(post.title?.rendered || "Blog image"),
        cat: getCategory(post),
        date: formatDate(post.date),
        title: stripHtml(post.title?.rendered || ""),
        description: stripHtml(post.excerpt?.rendered || ""),
        descriptions: stripHtml(post.excerpt?.rendered || ""),
        categoryIds: post.categories || [],
        tagIds: post.tags || [],
        tags: getTags(post),
        authorId: post.author,
        author: getAuthorName(post),
        authorAvatar: getAuthorAvatar(post),
        authorDescription: getAuthorDescription(post),
        content: includeContent ? normalizeContent(post.content?.rendered || "") : ""
    });
export const getBlogPostsPage = async (filters = {})=>{
    const url = buildBlogPostsUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                posts: [],
                totalPages: 0,
                total: 0
            };
        }
        const posts = await response.json();
        return {
            posts: Array.isArray(posts) ? posts.map((post)=>normalizeWpPost(post)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        return {
            posts: [],
            totalPages: 0,
            total: 0
        };
    }
};
export const getBlogPosts = async (filters = {})=>{
    const { posts } = await getBlogPostsPage(filters);
    return posts;
};
export const getBlogPostById = async (idOrSlug)=>{
    if (!idOrSlug) {
        return null;
    }
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${BLOG_API_BASE}/${idOrSlug}?_embed=1` : `${BLOG_API_BASE}?slug=${encodeURIComponent(idOrSlug)}&_embed=1`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpPost(data, {
                includeContent: true
            });
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpPost(data[0], {
                    includeContent: true
                });
            }
            return null;
        }
    } catch (error) {
        return null;
    }
};
export const getRelatedBlogPosts = async (post, { perPage = 2 } = {})=>{
    if (!post?.id) {
        return [];
    }
    const categories = post.categoryIds?.length ? post.categoryIds : undefined;
    const { posts } = await getBlogPostsPage({
        page: 1,
        perPage,
        orderby: "date",
        order: "desc",
        categories,
        exclude: [
            post.id
        ],
        sticky: false
    });
    return posts;
};
M����'-����hn���������buffer�source�size�maps�hash�const BLOG_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2/posts";
const BLOG_FALLBACK_IMAGE = "/assets/img/blog/grid/post-1.png";
const BLOG_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (value = "")=>decodeHtml(value.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim());
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const formatDate = (value)=>{
    if (!value) {
        return "";
    }
    return new Intl.DateTimeFormat("en", {
        month: "short",
        day: "numeric",
        year: "numeric"
    }).format(new Date(value));
};
const getFeaturedImage = (post)=>{
    const media = post?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || BLOG_FALLBACK_IMAGE;
};
const getCategory = (post)=>post?._embedded?.["wp:term"]?.[0]?.[0]?.name || "Blog";
const getTags = (post)=>{
    const terms = post?._embedded?.["wp:term"]?.[1] || [];
    return terms.map((term)=>term.name);
};
const getAuthorName = (post)=>post?._embedded?.author?.[0]?.name || "Admin";
const getAuthorAvatar = (post)=>post?._embedded?.author?.[0]?.avatar_urls?.["96"] || "/assets/img/root/author-avatar.png";
const getAuthorDescription = (post)=>post?._embedded?.author?.[0]?.description || "";
const appendListParam = (params, name, values = [])=>{
    const list = Array.isArray(values) ? values : [
        values
    ];
    list.filter(Boolean).forEach((value)=>{
        params.append(`${name}[]`, String(value));
    });
};
const buildBlogPostsUrl = ({ page = BLOG_LIST_FILTERS.page, perPage = BLOG_LIST_FILTERS.perPage, orderby = BLOG_LIST_FILTERS.orderby, order = BLOG_LIST_FILTERS.order, sticky, search, searchColumns, categories, status, author, exclude } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage),
        orderby,
        order
    });
    if (typeof sticky === "boolean") {
        params.set("sticky", String(sticky));
    }
    if (search) {
        params.set("search", search);
    }
    appendListParam(params, "search_columns", searchColumns);
    appendListParam(params, "categories", categories);
    appendListParam(params, "status", status);
    appendListParam(params, "author", author);
    appendListParam(params, "exclude", exclude);
    return `${BLOG_API_BASE}?${params.toString()}`;
};
const normalizeWpPost = (post, { includeContent = false } = {})=>({
        id: post.id,
        slug: post.slug,
        href: `/blog/${post.slug}`,
        sourceUrl: post.link,
        img: getFeaturedImage(post),
        alt: stripHtml(post.title?.rendered || "Blog image"),
        cat: getCategory(post),
        date: formatDate(post.date),
        title: stripHtml(post.title?.rendered || ""),
        description: stripHtml(post.excerpt?.rendered || ""),
        descriptions: stripHtml(post.excerpt?.rendered || ""),
        categoryIds: post.categories || [],
        tagIds: post.tags || [],
        tags: getTags(post),
        authorId: post.author,
        author: getAuthorName(post),
        authorAvatar: getAuthorAvatar(post),
        authorDescription: getAuthorDescription(post),
        content: includeContent ? normalizeContent(post.content?.rendered || "") : ""
    });
const getBlogPostsPage = async (filters = {})=>{
    const url = buildBlogPostsUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                posts: [],
                totalPages: 0,
                total: 0
            };
        }
        const posts = await response.json();
        return {
            posts: Array.isArray(posts) ? posts.map((post)=>normalizeWpPost(post)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        return {
            posts: [],
            totalPages: 0,
            total: 0
        };
    }
};
const getBlogPosts = async (filters = {})=>{
    const { posts } = await getBlogPostsPage(filters);
    return posts;
};
const getBlogPostById = async (idOrSlug)=>{
    if (!idOrSlug) {
        return null;
    }
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${BLOG_API_BASE}/${idOrSlug}?_embed=1` : `${BLOG_API_BASE}?slug=${encodeURIComponent(idOrSlug)}&_embed=1`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpPost(data, {
                includeContent: true
            });
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpPost(data[0], {
                    includeContent: true
                });
            }
            return null;
        }
    } catch (error) {
        return null;
    }
};
const getRelatedBlogPosts = async (post, { perPage = 2 } = {})=>{
    if (!post?.id) {
        return [];
    }
    const categories = post.categoryIds?.length ? post.categoryIds : undefined;
    const { posts } = await getBlogPostsPage({
        page: 1,
        perPage,
        orderby: "date",
        order: "desc",
        categories,
        exclude: [
            post.id
        ],
        sticky: false
    });
    return posts;
};
��{"finalSource":false}�map�bufferedMapReplaceSourceRawSource�const BLOG_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2/posts";
const BLOG_FALLBACK_IMAGE = "/assets/img/blog/grid/post-1.png";
export const BLOG_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (value = "")=>decodeHtml(value.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim());
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const formatDate = (value)=>{
    if (!value) {
        return "";
    }
    return new Intl.DateTimeFormat("en", {
        month: "short",
        day: "numeric",
        year: "numeric"
    }).format(new Date(value));
};
const getFeaturedImage = (post)=>{
    const media = post?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || BLOG_FALLBACK_IMAGE;
};
const getCategory = (post)=>post?._embedded?.["wp:term"]?.[0]?.[0]?.name || "Blog";
const getTags = (post)=>{
    const terms = post?._embedded?.["wp:term"]?.[1] || [];
    return terms.map((term)=>term.name);
};
const getAuthorName = (post)=>post?._embedded?.author?.[0]?.name || "Admin";
const getAuthorAvatar = (post)=>post?._embedded?.author?.[0]?.avatar_urls?.["96"] || "/assets/img/root/author-avatar.png";
const getAuthorDescription = (post)=>post?._embedded?.author?.[0]?.description || "";
const appendListParam = (params, name, values = [])=>{
    const list = Array.isArray(values) ? values : [
        values
    ];
    list.filter(Boolean).forEach((value)=>{
        params.append(`${name}[]`, String(value));
    });
};
export const buildBlogPostsUrl = ({ page = BLOG_LIST_FILTERS.page, perPage = BLOG_LIST_FILTERS.perPage, orderby = BLOG_LIST_FILTERS.orderby, order = BLOG_LIST_FILTERS.order, sticky, search, searchColumns, categories, status, author, exclude } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage),
        orderby,
        order
    });
    if (typeof sticky === "boolean") {
        params.set("sticky", String(sticky));
    }
    if (search) {
        params.set("search", search);
    }
    appendListParam(params, "search_columns", searchColumns);
    appendListParam(params, "categories", categories);
    appendListParam(params, "status", status);
    appendListParam(params, "author", author);
    appendListParam(params, "exclude", exclude);
    return `${BLOG_API_BASE}?${params.toString()}`;
};
export const normalizeWpPost = (post, { includeContent = false } = {})=>({
        id: post.id,
        slug: post.slug,
        href: `/blog/${post.slug}`,
        sourceUrl: post.link,
        img: getFeaturedImage(post),
        alt: stripHtml(post.title?.rendered || "Blog image"),
        cat: getCategory(post),
        date: formatDate(post.date),
        title: stripHtml(post.title?.rendered || ""),
        description: stripHtml(post.excerpt?.rendered || ""),
        descriptions: stripHtml(post.excerpt?.rendered || ""),
        categoryIds: post.categories || [],
        tagIds: post.tags || [],
        tags: getTags(post),
        authorId: post.author,
        author: getAuthorName(post),
        authorAvatar: getAuthorAvatar(post),
        authorDescription: getAuthorDescription(post),
        content: includeContent ? normalizeContent(post.content?.rendered || "") : ""
    });
export const getBlogPostsPage = async (filters = {})=>{
    const url = buildBlogPostsUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                posts: [],
                totalPages: 0,
                total: 0
            };
        }
        const posts = await response.json();
        return {
            posts: Array.isArray(posts) ? posts.map((post)=>normalizeWpPost(post)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        return {
            posts: [],
            totalPages: 0,
            total: 0
        };
    }
};
export const getBlogPosts = async (filters = {})=>{
    const { posts } = await getBlogPostsPage(filters);
    return posts;
};
export const getBlogPostById = async (idOrSlug)=>{
    if (!idOrSlug) {
        return null;
    }
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${BLOG_API_BASE}/${idOrSlug}?_embed=1` : `${BLOG_API_BASE}?slug=${encodeURIComponent(idOrSlug)}&_embed=1`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpPost(data, {
                includeContent: true
            });
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpPost(data[0], {
                    includeContent: true
                });
            }
            return null;
        }
    } catch (error) {
        return null;
    }
};
export const getRelatedBlogPosts = async (post, { perPage = 2 } = {})=>{
    if (!post?.id) {
        return [];
    }
    const categories = post.categoryIds?.length ? post.categoryIds : undefined;
    const { posts } = await getBlogPostsPage({
        page: 1,
        perPage,
        orderby: "date",
        order: "desc",
        categories,
        exclude: [
            post.id
        ],
        sticky: false
    });
    return posts;
};
u136142undefined32513257undefined41354141undefined50375043undefined58645870undefined59925998undefined69296935undefined0
;// CONCATENATED MODULE: ./data/servicesApi.js
5(�webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource['const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
export const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ export const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ export const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ export const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ export const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ export const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};
K�
�
�
�������#�#�������1'const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};
���['const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
export const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ export const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ export const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ export const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ export const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ export const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};
f27462752undefined33263332undefined66136619undefined73437349undefined81578163undefined91759181undefinedbCN_9B��������$��.
7
owy���qzaj��u~C�%�%&'&�servicesApi_htmlEntities�servicesApi_decodeHtml��servicesApi_stripHtml���servicesApi_getFeaturedImage������������-
;// CONCATENATED MODULE: ./data/worksApi.js
� �webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource const WORKS_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
export const getTechnologies = async ()=>{
    const url = `${WORKS_API_BASE}/technologies`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching technologies:", error);
        return [];
    }
};
const WORKS_FALLBACK_IMAGE = "/assets/img/portfolio/work-2.png";
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || WORKS_FALLBACK_IMAGE;
};
const formatDate = (value)=>{
    if (!value) return "";
    return new Intl.DateTimeFormat("en", {
        month: "short",
        year: "numeric"
    }).format(new Date(value));
};
const getTechnologyNames = (item)=>{
    const termGroups = item?._embedded?.["wp:term"] || [];
    for (const group of termGroups){
        if (Array.isArray(group) && group.length > 0 && group[0]?.taxonomy === "technology") {
            return group.map((t)=>decodeHtml(t.name)).join(", ");
        }
    }
    return "";
};
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
export const normalizeWpCaseStudy = (item)=>{
    const featuredImage = getFeaturedImage(item);
    const techNames = getTechnologyNames(item);
    return {
        id: item.id,
        slug: item.slug,
        title: decodeHtml(item.title?.rendered || ""),
        cat: techNames || (item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "Design"),
        date: item.meta?.zini_date ? decodeHtml(item.meta.zini_date) : formatDate(item.date),
        img: featuredImage,
        imgPopup: featuredImage,
        dataId: `work-${item.id}`,
        client: item.meta?.zini_client ? decodeHtml(item.meta.zini_client) : "",
        team: item.meta?.zini_team ? decodeHtml(item.meta.zini_team) : "",
        services: item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "",
        technologies: item.technologies || [],
        content: normalizeContent(item.content?.rendered || ""),
        excerpt: decodeHtml(item.excerpt?.rendered || "").replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim()
    };
};
export const WORKS_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
export const buildCaseStudiesUrl = ({ page = WORKS_LIST_FILTERS.page, perPage = WORKS_LIST_FILTERS.perPage, orderby = WORKS_LIST_FILTERS.orderby, order = WORKS_LIST_FILTERS.order, technologies } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage)
    });
    if (orderby) {
        params.set("orderby", orderby);
    }
    if (order) {
        params.set("order", order);
    }
    if (technologies) {
        params.set("technologies", String(technologies));
    }
    return `${WORKS_API_BASE}/case-studies?${params.toString()}`;
};
export const getCaseStudiesPage = async (filters = {})=>{
    const url = buildCaseStudiesUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                caseStudies: [],
                totalPages: 0,
                total: 0
            };
        }
        const data = await response.json();
        return {
            caseStudies: Array.isArray(data) ? data.map((item)=>normalizeWpCaseStudy(item)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        console.error("Error fetching case studies page:", error);
        return {
            caseStudies: [],
            totalPages: 0,
            total: 0
        };
    }
};
export const getCaseStudies = async (filters = {})=>{
    const { caseStudies } = await getCaseStudiesPage(filters);
    return caseStudies;
};
export const getCaseStudyById = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const params = new URLSearchParams();
    params.set("_embed", "1");
    const url = isNumeric ? `${WORKS_API_BASE}/case-studies/${idOrSlug}?${params.toString()}` : `${WORKS_API_BASE}/case-studies?slug=${encodeURIComponent(idOrSlug)}&${params.toString()}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpCaseStudy(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpCaseStudy(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching case study by ID/slug:", error);
        return null;
    }
};
export const getNextCaseStudy = async (currentId)=>{
    if (!currentId) return null;
    try {
        // Fetch all case studies sorted by date desc (lightweight, no content needed)
        const { caseStudies } = await getCaseStudiesPage({
            page: 1,
            perPage: 100,
            orderby: "date",
            order: "desc"
        });
        if (!caseStudies.length) return null;
        const currentIndex = caseStudies.findIndex((cs)=>String(cs.id) === String(currentId) || String(cs.slug) === String(currentId));
        // If current not found or is the last one, return null (do not wrap)
        if (currentIndex === -1 || currentIndex >= caseStudies.length - 1) {
            return null;
        }
        const nextIndex = currentIndex + 1;
        const next = caseStudies[nextIndex];
        return {
            title: next.title,
            href: `/case-study/${next.slug}`
        };
    } catch (error) {
        console.error("Error fetching next case study:", error);
        return null;
    }
};
O��

}���|�����������const WORKS_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const getTechnologies = async ()=>{
    const url = `${WORKS_API_BASE}/technologies`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching technologies:", error);
        return [];
    }
};
const WORKS_FALLBACK_IMAGE = "/assets/img/portfolio/work-2.png";
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || WORKS_FALLBACK_IMAGE;
};
const formatDate = (value)=>{
    if (!value) return "";
    return new Intl.DateTimeFormat("en", {
        month: "short",
        year: "numeric"
    }).format(new Date(value));
};
const getTechnologyNames = (item)=>{
    const termGroups = item?._embedded?.["wp:term"] || [];
    for (const group of termGroups){
        if (Array.isArray(group) && group.length > 0 && group[0]?.taxonomy === "technology") {
            return group.map((t)=>decodeHtml(t.name)).join(", ");
        }
    }
    return "";
};
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const normalizeWpCaseStudy = (item)=>{
    const featuredImage = getFeaturedImage(item);
    const techNames = getTechnologyNames(item);
    return {
        id: item.id,
        slug: item.slug,
        title: decodeHtml(item.title?.rendered || ""),
        cat: techNames || (item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "Design"),
        date: item.meta?.zini_date ? decodeHtml(item.meta.zini_date) : formatDate(item.date),
        img: featuredImage,
        imgPopup: featuredImage,
        dataId: `work-${item.id}`,
        client: item.meta?.zini_client ? decodeHtml(item.meta.zini_client) : "",
        team: item.meta?.zini_team ? decodeHtml(item.meta.zini_team) : "",
        services: item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "",
        technologies: item.technologies || [],
        content: normalizeContent(item.content?.rendered || ""),
        excerpt: decodeHtml(item.excerpt?.rendered || "").replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim()
    };
};
const WORKS_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const buildCaseStudiesUrl = ({ page = WORKS_LIST_FILTERS.page, perPage = WORKS_LIST_FILTERS.perPage, orderby = WORKS_LIST_FILTERS.orderby, order = WORKS_LIST_FILTERS.order, technologies } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage)
    });
    if (orderby) {
        params.set("orderby", orderby);
    }
    if (order) {
        params.set("order", order);
    }
    if (technologies) {
        params.set("technologies", String(technologies));
    }
    return `${WORKS_API_BASE}/case-studies?${params.toString()}`;
};
const getCaseStudiesPage = async (filters = {})=>{
    const url = buildCaseStudiesUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                caseStudies: [],
                totalPages: 0,
                total: 0
            };
        }
        const data = await response.json();
        return {
            caseStudies: Array.isArray(data) ? data.map((item)=>normalizeWpCaseStudy(item)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        console.error("Error fetching case studies page:", error);
        return {
            caseStudies: [],
            totalPages: 0,
            total: 0
        };
    }
};
const getCaseStudies = async (filters = {})=>{
    const { caseStudies } = await getCaseStudiesPage(filters);
    return caseStudies;
};
const getCaseStudyById = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const params = new URLSearchParams();
    params.set("_embed", "1");
    const url = isNumeric ? `${WORKS_API_BASE}/case-studies/${idOrSlug}?${params.toString()}` : `${WORKS_API_BASE}/case-studies?slug=${encodeURIComponent(idOrSlug)}&${params.toString()}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpCaseStudy(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpCaseStudy(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching case study by ID/slug:", error);
        return null;
    }
};
const getNextCaseStudy = async (currentId)=>{
    if (!currentId) return null;
    try {
        // Fetch all case studies sorted by date desc (lightweight, no content needed)
        const { caseStudies } = await getCaseStudiesPage({
            page: 1,
            perPage: 100,
            orderby: "date",
            order: "desc"
        });
        if (!caseStudies.length) return null;
        const currentIndex = caseStudies.findIndex((cs)=>String(cs.id) === String(currentId) || String(cs.slug) === String(currentId));
        // If current not found or is the last one, return null (do not wrap)
        if (currentIndex === -1 || currentIndex >= caseStudies.length - 1) {
            return null;
        }
        const nextIndex = currentIndex + 1;
        const next = caseStudies[nextIndex];
        return {
            title: next.title,
            href: `/case-study/${next.slug}`
        };
    } catch (error) {
        console.error("Error fetching next case study:", error);
        return null;
    }
};
��� const WORKS_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
export const getTechnologies = async ()=>{
    const url = `${WORKS_API_BASE}/technologies`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching technologies:", error);
        return [];
    }
};
const WORKS_FALLBACK_IMAGE = "/assets/img/portfolio/work-2.png";
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || WORKS_FALLBACK_IMAGE;
};
const formatDate = (value)=>{
    if (!value) return "";
    return new Intl.DateTimeFormat("en", {
        month: "short",
        year: "numeric"
    }).format(new Date(value));
};
const getTechnologyNames = (item)=>{
    const termGroups = item?._embedded?.["wp:term"] || [];
    for (const group of termGroups){
        if (Array.isArray(group) && group.length > 0 && group[0]?.taxonomy === "technology") {
            return group.map((t)=>decodeHtml(t.name)).join(", ");
        }
    }
    return "";
};
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
export const normalizeWpCaseStudy = (item)=>{
    const featuredImage = getFeaturedImage(item);
    const techNames = getTechnologyNames(item);
    return {
        id: item.id,
        slug: item.slug,
        title: decodeHtml(item.title?.rendered || ""),
        cat: techNames || (item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "Design"),
        date: item.meta?.zini_date ? decodeHtml(item.meta.zini_date) : formatDate(item.date),
        img: featuredImage,
        imgPopup: featuredImage,
        dataId: `work-${item.id}`,
        client: item.meta?.zini_client ? decodeHtml(item.meta.zini_client) : "",
        team: item.meta?.zini_team ? decodeHtml(item.meta.zini_team) : "",
        services: item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "",
        technologies: item.technologies || [],
        content: normalizeContent(item.content?.rendered || ""),
        excerpt: decodeHtml(item.excerpt?.rendered || "").replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim()
    };
};
export const WORKS_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
export const buildCaseStudiesUrl = ({ page = WORKS_LIST_FILTERS.page, perPage = WORKS_LIST_FILTERS.perPage, orderby = WORKS_LIST_FILTERS.orderby, order = WORKS_LIST_FILTERS.order, technologies } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage)
    });
    if (orderby) {
        params.set("orderby", orderby);
    }
    if (order) {
        params.set("order", order);
    }
    if (technologies) {
        params.set("technologies", String(technologies));
    }
    return `${WORKS_API_BASE}/case-studies?${params.toString()}`;
};
export const getCaseStudiesPage = async (filters = {})=>{
    const url = buildCaseStudiesUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                caseStudies: [],
                totalPages: 0,
                total: 0
            };
        }
        const data = await response.json();
        return {
            caseStudies: Array.isArray(data) ? data.map((item)=>normalizeWpCaseStudy(item)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        console.error("Error fetching case studies page:", error);
        return {
            caseStudies: [],
            totalPages: 0,
            total: 0
        };
    }
};
export const getCaseStudies = async (filters = {})=>{
    const { caseStudies } = await getCaseStudiesPage(filters);
    return caseStudies;
};
export const getCaseStudyById = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const params = new URLSearchParams();
    params.set("_embed", "1");
    const url = isNumeric ? `${WORKS_API_BASE}/case-studies/${idOrSlug}?${params.toString()}` : `${WORKS_API_BASE}/case-studies?slug=${encodeURIComponent(idOrSlug)}&${params.toString()}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpCaseStudy(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpCaseStudy(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching case study by ID/slug:", error);
        return null;
    }
};
export const getNextCaseStudy = async (currentId)=>{
    if (!currentId) return null;
    try {
        // Fetch all case studies sorted by date desc (lightweight, no content needed)
        const { caseStudies } = await getCaseStudiesPage({
            page: 1,
            perPage: 100,
            orderby: "date",
            order: "desc"
        });
        if (!caseStudies.length) return null;
        const currentIndex = caseStudies.findIndex((cs)=>String(cs.id) === String(currentId) || String(cs.slug) === String(currentId));
        // If current not found or is the last one, return null (do not wrap)
        if (currentIndex === -1 || currentIndex >= caseStudies.length - 1) {
            return null;
        }
        const nextIndex = currentIndex + 1;
        const next = caseStudies[nextIndex];
        return {
            title: next.title,
            href: `/case-study/${next.slug}`
        };
    } catch (error) {
        console.error("Error fetching next case study:", error);
        return null;
    }
};
�492498undefined33433349undefined43704376undefined44774483undefined50945100undefined60126018undefined61566162undefined71687174undefinedbIT_?H����AJ�@OI
X
�
�
9B����QZ����[jA���worksApi_htmlEntities�worksApi_decodeHtml���worksApi_getFeaturedImage�worksApi_formatDate��worksApi_normalizeContent����������+
;// CONCATENATED MODULE: ./app/sitemap.js
�
�webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSourcehimport { SITE_CONFIG } from "../data/seo";
import { getBlogPosts } from "../data/blogApi";
import { getServices } from "../data/servicesApi";
import { getCaseStudies } from "../data/worksApi";
export default async function sitemap() {
    const baseUrl = SITE_CONFIG.url;
    // 1. Fetch dynamic data for routes
    const [posts, services, caseStudies] = await Promise.all([
        getBlogPosts({
            perPage: 100
        }).catch(()=>[]),
        getServices().catch(()=>[]),
        getCaseStudies({
            perPage: 100
        }).catch(()=>[])
    ]);
    // 2. Define static routes
    const staticPaths = [
        "",
        "/about-us",
        "/about-me",
        "/contact",
        "/faq",
        "/pricing",
        "/privacy-policy",
        "/refund-returns",
        "/team",
        "/services",
        "/case-studies",
        "/blogs"
    ];
    const staticRoutes = staticPaths.map((route)=>({
            url: `${baseUrl}${route}`,
            lastModified: new Date().toISOString(),
            changeFrequency: route === "" ? "daily" : "weekly",
            priority: route === "" ? 1.0 : 0.8
        }));
    // 3. Map dynamic blog posts (dynamic slugs)
    const postRoutes = posts.map((post)=>({
            url: `${baseUrl}/blog/${post.slug || post.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 4. Map dynamic services (dynamic slugs)
    const serviceRoutes = services.map((service)=>({
            url: `${baseUrl}/service/${service.slug || service.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 5. Map dynamic case studies (dynamic slugs)
    const caseStudyRoutes = caseStudies.map((work)=>({
            url: `${baseUrl}/case-study/${work.slug || work.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    return [
        ...staticRoutes,
        ...postRoutes,
        ...serviceRoutes,
        ...caseStudyRoutes
    ];
}
	c)+Y[L������	�����������__WEBPACK_MODULE_REFERENCE__4_5b22534954455f434f4e464947225d_asiSafe1__._�__WEBPACK_MODULE_REFERENCE__5_5b22676574426c6f67506f737473225d_call_directImport_asiSafe1__._�__WEBPACK_MODULE_REFERENCE__6_5b226765745365727669636573225d_call_directImport_asiSafe1__._�__WEBPACK_MODULE_REFERENCE__7_5b226765744361736553747564696573225d_call_directImport_asiSafe1__._��



async function sitemap() {
    const baseUrl = __WEBPACK_MODULE_REFERENCE__4_5b22534954455f434f4e464947225d_asiSafe1__._.url;
    // 1. Fetch dynamic data for routes
    const [posts, services, caseStudies] = await Promise.all([
        __WEBPACK_MODULE_REFERENCE__5_5b22676574426c6f67506f737473225d_call_directImport_asiSafe1__._({
            perPage: 100
        }).catch(()=>[]),
        __WEBPACK_MODULE_REFERENCE__6_5b226765745365727669636573225d_call_directImport_asiSafe1__._().catch(()=>[]),
        __WEBPACK_MODULE_REFERENCE__7_5b226765744361736553747564696573225d_call_directImport_asiSafe1__._({
            perPage: 100
        }).catch(()=>[])
    ]);
    // 2. Define static routes
    const staticPaths = [
        "",
        "/about-us",
        "/about-me",
        "/contact",
        "/faq",
        "/pricing",
        "/privacy-policy",
        "/refund-returns",
        "/team",
        "/services",
        "/case-studies",
        "/blogs"
    ];
    const staticRoutes = staticPaths.map((route)=>({
            url: `${baseUrl}${route}`,
            lastModified: new Date().toISOString(),
            changeFrequency: route === "" ? "daily" : "weekly",
            priority: route === "" ? 1.0 : 0.8
        }));
    // 3. Map dynamic blog posts (dynamic slugs)
    const postRoutes = posts.map((post)=>({
            url: `${baseUrl}/blog/${post.slug || post.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 4. Map dynamic services (dynamic slugs)
    const serviceRoutes = services.map((service)=>({
            url: `${baseUrl}/service/${service.slug || service.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 5. Map dynamic case studies (dynamic slugs)
    const caseStudyRoutes = caseStudies.map((work)=>({
            url: `${baseUrl}/case-study/${work.slug || work.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    return [
        ...staticRoutes,
        ...postRoutes,
        ...serviceRoutes,
        ...caseStudyRoutes
    ];
}
���himport { SITE_CONFIG } from "../data/seo";
import { getBlogPosts } from "../data/blogApi";
import { getServices } from "../data/servicesApi";
import { getCaseStudies } from "../data/worksApi";
export default async function sitemap() {
    const baseUrl = SITE_CONFIG.url;
    // 1. Fetch dynamic data for routes
    const [posts, services, caseStudies] = await Promise.all([
        getBlogPosts({
            perPage: 100
        }).catch(()=>[]),
        getServices().catch(()=>[]),
        getCaseStudies({
            perPage: 100
        }).catch(()=>[])
    ]);
    // 2. Define static routes
    const staticPaths = [
        "",
        "/about-us",
        "/about-me",
        "/contact",
        "/faq",
        "/pricing",
        "/privacy-policy",
        "/refund-returns",
        "/team",
        "/services",
        "/case-studies",
        "/blogs"
    ];
    const staticRoutes = staticPaths.map((route)=>({
            url: `${baseUrl}${route}`,
            lastModified: new Date().toISOString(),
            changeFrequency: route === "" ? "daily" : "weekly",
            priority: route === "" ? 1.0 : 0.8
        }));
    // 3. Map dynamic blog posts (dynamic slugs)
    const postRoutes = posts.map((post)=>({
            url: `${baseUrl}/blog/${post.slug || post.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 4. Map dynamic services (dynamic slugs)
    const serviceRoutes = services.map((service)=>({
            url: `${baseUrl}/service/${service.slug || service.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 5. Map dynamic case studies (dynamic slugs)
    const caseStudyRoutes = caseStudies.map((work)=>({
            url: `${baseUrl}/case-study/${work.slug || work.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    return [
        ...staticRoutes,
        ...postRoutes,
        ...serviceRoutes,
        ...caseStudyRoutes
    ];
}
�041undefined4389undefined91140undefined142191undefined193207undefined255265__WEBPACK_MODULE_REFERENCE__4_5b22534954455f434f4e464947225d_asiSafe1__._undefined383394__WEBPACK_MODULE_REFERENCE__5_5b22676574426c6f67506f737473225d_call_directImport_asiSafe1__._undefined457467__WEBPACK_MODULE_REFERENCE__6_5b226765745365727669636573225d_call_directImport_asiSafe1__._undefined494507__WEBPACK_MODULE_REFERENCE__7_5b226765744361736553747564696573225d_call_directImport_asiSafe1__._undefineda3{E�M��a�seo/* SITE_CONFIG */.ep�getBlogPosts�getServices�getCaseStudiesO
// EXTERNAL MODULE: ./node_modules/next/dist/build/webpack/loaders/metadata/resolve-route-data.js
var resolve_route_data = __webpack_require__(57252);
;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__
6�webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource@import { NextResponse } from 'next/server'
import * as userland from "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"
import { resolveRouteData } from 'next/dist/build/webpack/loaders/metadata/resolve-route-data'

const sitemapModule = { ...userland }
const handler = sitemapModule.default
const generateSitemaps = sitemapModule.generateSitemaps
const contentType = "application/xml"
const fileType = "sitemap"


  if (typeof handler !== 'function') {
    throw new Error('Default export is missing in "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"')
  }
  


export * from "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"

export async function GET(_, ctx) {
  const { __metadata_id__ = [], ...params } = ctx.params || {}
  const targetId = __metadata_id__[0]
  let id = undefined
  const sitemaps = generateSitemaps ? await generateSitemaps() : null

  if (sitemaps) {
    id = sitemaps.find((item) => {
      if (process.env.NODE_ENV !== 'production') {
        if (item?.id == null) {
          throw new Error('id property is required for every item returned from generateSitemaps')
        }
      }
      return item.id.toString() === targetId
    })?.id
    if (id == null) {
      return new NextResponse('Not Found', {
        status: 404,
      })
    }
  }

  const data = await handler({ id })
  const content = resolveRouteData(data, fileType)

  return new NextResponse(content, {
    headers: {
      'Content-Type': contentType,
      'Cache-Control': "public, max-age=0, must-revalidate",
    },
  })
}


c)+R���
d������	z�������__WEBPACK_MODULE_REFERENCE__8_ns_asiSafe1__._���false�{}�__WEBPACK_MODULE_REFERENCE__3_5b224e657874526573706f6e7365225d_directImport_asiSafe1__._�__WEBPACK_MODULE_REFERENCE__9_5b227265736f6c7665526f75746544617461225d_call_directImport_asiSafe1__._��U



const sitemapModule = { ...__WEBPACK_MODULE_REFERENCE__8_ns_asiSafe1__._ }
const handler = sitemapModule.default
const generateSitemaps = sitemapModule.generateSitemaps
const contentType = "application/xml"
const fileType = "sitemap"


  if (typeof handler !== 'function') {
    throw new Error('Default export is missing in "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"')
  }
  




async function GET(_, ctx) {
  const { __metadata_id__ = [], ...params } = ctx.params || {}
  const targetId = __metadata_id__[0]
  let id = undefined
  const sitemaps = generateSitemaps ? await generateSitemaps() : null

  if (sitemaps) {
    id = sitemaps.find((item) => {
      if (false) {}
      return item.id.toString() === targetId
    })?.id
    if (id == null) {
      return new __WEBPACK_MODULE_REFERENCE__3_5b224e657874526573706f6e7365225d_directImport_asiSafe1__._('Not Found', {
        status: 404,
      })
    }
  }

  const data = await handler({ id })
  const content = __WEBPACK_MODULE_REFERENCE__9_5b227265736f6c7665526f75746544617461225d_call_directImport_asiSafe1__._(data, fileType)

  return new __WEBPACK_MODULE_REFERENCE__3_5b224e657874526573706f6e7365225d_directImport_asiSafe1__._(content, {
    headers: {
      'Content-Type': contentType,
      'Cache-Control': "public, max-age=0, must-revalidate",
    },
  })
}


���@import { NextResponse } from 'next/server'
import * as userland from "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"
import { resolveRouteData } from 'next/dist/build/webpack/loaders/metadata/resolve-route-data'

const sitemapModule = { ...userland }
const handler = sitemapModule.default
const generateSitemaps = sitemapModule.generateSitemaps
const contentType = "application/xml"
const fileType = "sitemap"


  if (typeof handler !== 'function') {
    throw new Error('Default export is missing in "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"')
  }
  


export * from "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"

export async function GET(_, ctx) {
  const { __metadata_id__ = [], ...params } = ctx.params || {}
  const targetId = __metadata_id__[0]
  let id = undefined
  const sitemaps = generateSitemaps ? await generateSitemaps() : null

  if (sitemaps) {
    id = sitemaps.find((item) => {
      if (process.env.NODE_ENV !== 'production') {
        if (item?.id == null) {
          throw new Error('id property is required for every item returned from generateSitemaps')
        }
      }
      return item.id.toString() === targetId
    })?.id
    if (id == null) {
      return new NextResponse('Not Found', {
        status: 404,
      })
    }
  }

  const data = await handler({ id })
  const content = resolveRouteData(data, fileType)

  return new NextResponse(content, {
    headers: {
      'Content-Type': contentType,
      'Cache-Control': "public, max-age=0, must-revalidate",
    },
  })
}


�041undefined43141undefined143236undefined266273__WEBPACK_MODULE_REFERENCE__8_ns_asiSafe1__._undefined612698undefined701707undefined9931029falseundefined10321181{}undefined12781289__WEBPACK_MODULE_REFERENCE__3_5b224e657874526573706f6e7365225d_directImport_asiSafe1__._undefined14021417__WEBPACK_MODULE_REFERENCE__9_5b227265736f6c7665526f75746544617461225d_call_directImport_asiSafe1__._undefined14491460__WEBPACK_MODULE_REFERENCE__3_5b224e657874526573706f6e7365225d_directImport_asiSafe1__._undefinedaKE&}�Rr��sitemap_namespaceObject�server.NextResponse�(0,resolve_route_data.resolveRouteData)��
;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?page=%2Fsitemap.xml%2Froute&name=app%2Fsitemap.xml%2Froute&pagePath=private-next-app-dir%2Fsitemap.js&appDir=G%3A%5Czinisoft%5Czinisoft_beta%5Czinisoft.net%5Cfrontend-v3%5Capp&appPaths=%2Fsitemap&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!
��webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource�import { AppRouteRouteModule } from "next/dist/server/future/route-modules/app-route/module.compiled";
import { RouteKind } from "next/dist/server/future/route-kind";
import { patchFetch as _patchFetch } from "next/dist/server/lib/patch-fetch";
import * as userland from "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__";
// We inject the nextConfigOutput here so that we can use them in the route
// module.
const nextConfigOutput = ""
const routeModule = new AppRouteRouteModule({
    definition: {
        kind: RouteKind.APP_ROUTE,
        page: "/sitemap.xml/route",
        pathname: "/sitemap.xml",
        filename: "sitemap",
        bundlePath: "app/sitemap.xml/route"
    },
    resolvedPagePath: "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__",
    nextConfigOutput,
    userland
});
// Pull out the exports that we need to expose from the module. This should
// be eliminated when we've moved the other routes to the new format. These
// are used to hook into the route.
const { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout } = routeModule;
const originalPathname = "/sitemap.xml/route";
function patchFetch() {
    return _patchFetch({
        serverHooks,
        staticGenerationAsyncStorage
    });
}
export { routeModule, requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout, originalPathname, patchFetch,  };

//# sourceMappingURL=app-route.js.map	aegN�����@Rv~�����~�����__WEBPACK_MODULE_REFERENCE__0_5b22417070526f757465526f7574654d6f64756c65225d_directImport_asiSafe1__._�__WEBPACK_MODULE_REFERENCE__1_5b22526f7574654b696e64225d_asiSafe1__._�: __WEBPACK_MODULE_REFERENCE__10_ns_asiSafe1__._�__WEBPACK_MODULE_REFERENCE__2_5b2270617463684665746368225d_call_directImport_asiSafe1__._��e



// We inject the nextConfigOutput here so that we can use them in the route
// module.
const nextConfigOutput = ""
const routeModule = new __WEBPACK_MODULE_REFERENCE__0_5b22417070526f757465526f7574654d6f64756c65225d_directImport_asiSafe1__._({
    definition: {
        kind: __WEBPACK_MODULE_REFERENCE__1_5b22526f7574654b696e64225d_asiSafe1__._.APP_ROUTE,
        page: "/sitemap.xml/route",
        pathname: "/sitemap.xml",
        filename: "sitemap",
        bundlePath: "app/sitemap.xml/route"
    },
    resolvedPagePath: "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__",
    nextConfigOutput,
    userland: __WEBPACK_MODULE_REFERENCE__10_ns_asiSafe1__._
});
// Pull out the exports that we need to expose from the module. This should
// be eliminated when we've moved the other routes to the new format. These
// are used to hook into the route.
const { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout } = routeModule;
const originalPathname = "/sitemap.xml/route";
function patchFetch() {
    return __WEBPACK_MODULE_REFERENCE__2_5b2270617463684665746368225d_call_directImport_asiSafe1__._({
        serverHooks,
        staticGenerationAsyncStorage
    });
}


//# sourceMappingURL=app-route.js.map����import { AppRouteRouteModule } from "next/dist/server/future/route-modules/app-route/module.compiled";
import { RouteKind } from "next/dist/server/future/route-kind";
import { patchFetch as _patchFetch } from "next/dist/server/lib/patch-fetch";
import * as userland from "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__";
// We inject the nextConfigOutput here so that we can use them in the route
// module.
const nextConfigOutput = ""
const routeModule = new AppRouteRouteModule({
    definition: {
        kind: RouteKind.APP_ROUTE,
        page: "/sitemap.xml/route",
        pathname: "/sitemap.xml",
        filename: "sitemap",
        bundlePath: "app/sitemap.xml/route"
    },
    resolvedPagePath: "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__",
    nextConfigOutput,
    userland
});
// Pull out the exports that we need to expose from the module. This should
// be eliminated when we've moved the other routes to the new format. These
// are used to hook into the route.
const { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout } = routeModule;
const originalPathname = "/sitemap.xml/route";
function patchFetch() {
    return _patchFetch({
        serverHooks,
        staticGenerationAsyncStorage
    });
}
export { routeModule, requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout, originalPathname, patchFetch,  };

//# sourceMappingURL=app-route.js.map�0101undefined103165undefined167243undefined245435undefined576594__WEBPACK_MODULE_REFERENCE__0_5b22417070526f757465526f7574654d6f64756c65225d_directImport_asiSafe1__._undefined630638__WEBPACK_MODULE_REFERENCE__1_5b22526f7574654b696e64225d_asiSafe1__._undefined10231022: __WEBPACK_MODULE_REFERENCE__10_ns_asiSafe1__._undefined14241434__WEBPACK_MODULE_REFERENCE__2_5b2270617463684665746368225d_call_directImport_asiSafe1__._undefined15061662undefinedG��\����module_compiled.AppRouteRouteModule�route_kind/* RouteKind */.x�sitemap_next_metadata_route_namespaceObject�(0,patch_fetch.patchFetch)���// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  headerHooks: () => (/* binding */ headerHooks),
  originalPathname: () => (/* binding */ originalPathname),
  patchFetch: () => (/* binding */ patchFetch),
  requestAsyncStorage: () => (/* binding */ requestAsyncStorage),
  routeModule: () => (/* binding */ routeModule),
  serverHooks: () => (/* binding */ serverHooks),
  staticGenerationAsyncStorage: () => (/* binding */ staticGenerationAsyncStorage),
  staticGenerationBailout: () => (/* binding */ staticGenerationBailout)
});

// NAMESPACE OBJECT: ./app/sitemap.js
var sitemap_namespaceObject = {};
__webpack_require__.r(sitemap_namespaceObject);
__webpack_require__.d(sitemap_namespaceObject, {
  "default": () => (sitemap)
});

// NAMESPACE OBJECT: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__
var sitemap_next_metadata_route_namespaceObject = {};
__webpack_require__.r(sitemap_next_metadata_route_namespaceObject);
__webpack_require__.d(sitemap_next_metadata_route_namespaceObject, {
  GET: () => (GET)
});

// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-modules/app-route/module.compiled.js
var module_compiled = __webpack_require__(95419);
// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-kind.js
var route_kind = __webpack_require__(69108);
// EXTERNAL MODULE: ./node_modules/next/dist/server/lib/patch-fetch.js
var patch_fetch = __webpack_require__(99678);
// EXTERNAL MODULE: ./node_modules/next/server.js
var server = __webpack_require__(79647);
// EXTERNAL MODULE: ./data/seo.js
var seo = __webpack_require__(62486);
;// CONCATENATED MODULE: ./data/blogApi.js
const BLOG_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2/posts";
const BLOG_FALLBACK_IMAGE = "/assets/img/blog/grid/post-1.png";
const BLOG_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (value = "")=>decodeHtml(value.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim());
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const formatDate = (value)=>{
    if (!value) {
        return "";
    }
    return new Intl.DateTimeFormat("en", {
        month: "short",
        day: "numeric",
        year: "numeric"
    }).format(new Date(value));
};
const getFeaturedImage = (post)=>{
    const media = post?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || BLOG_FALLBACK_IMAGE;
};
const getCategory = (post)=>post?._embedded?.["wp:term"]?.[0]?.[0]?.name || "Blog";
const getTags = (post)=>{
    const terms = post?._embedded?.["wp:term"]?.[1] || [];
    return terms.map((term)=>term.name);
};
const getAuthorName = (post)=>post?._embedded?.author?.[0]?.name || "Admin";
const getAuthorAvatar = (post)=>post?._embedded?.author?.[0]?.avatar_urls?.["96"] || "/assets/img/root/author-avatar.png";
const getAuthorDescription = (post)=>post?._embedded?.author?.[0]?.description || "";
const appendListParam = (params, name, values = [])=>{
    const list = Array.isArray(values) ? values : [
        values
    ];
    list.filter(Boolean).forEach((value)=>{
        params.append(`${name}[]`, String(value));
    });
};
const buildBlogPostsUrl = ({ page = BLOG_LIST_FILTERS.page, perPage = BLOG_LIST_FILTERS.perPage, orderby = BLOG_LIST_FILTERS.orderby, order = BLOG_LIST_FILTERS.order, sticky, search, searchColumns, categories, status, author, exclude } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage),
        orderby,
        order
    });
    if (typeof sticky === "boolean") {
        params.set("sticky", String(sticky));
    }
    if (search) {
        params.set("search", search);
    }
    appendListParam(params, "search_columns", searchColumns);
    appendListParam(params, "categories", categories);
    appendListParam(params, "status", status);
    appendListParam(params, "author", author);
    appendListParam(params, "exclude", exclude);
    return `${BLOG_API_BASE}?${params.toString()}`;
};
const normalizeWpPost = (post, { includeContent = false } = {})=>({
        id: post.id,
        slug: post.slug,
        href: `/blog/${post.slug}`,
        sourceUrl: post.link,
        img: getFeaturedImage(post),
        alt: stripHtml(post.title?.rendered || "Blog image"),
        cat: getCategory(post),
        date: formatDate(post.date),
        title: stripHtml(post.title?.rendered || ""),
        description: stripHtml(post.excerpt?.rendered || ""),
        descriptions: stripHtml(post.excerpt?.rendered || ""),
        categoryIds: post.categories || [],
        tagIds: post.tags || [],
        tags: getTags(post),
        authorId: post.author,
        author: getAuthorName(post),
        authorAvatar: getAuthorAvatar(post),
        authorDescription: getAuthorDescription(post),
        content: includeContent ? normalizeContent(post.content?.rendered || "") : ""
    });
const getBlogPostsPage = async (filters = {})=>{
    const url = buildBlogPostsUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                posts: [],
                totalPages: 0,
                total: 0
            };
        }
        const posts = await response.json();
        return {
            posts: Array.isArray(posts) ? posts.map((post)=>normalizeWpPost(post)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        return {
            posts: [],
            totalPages: 0,
            total: 0
        };
    }
};
const getBlogPosts = async (filters = {})=>{
    const { posts } = await getBlogPostsPage(filters);
    return posts;
};
const getBlogPostById = async (idOrSlug)=>{
    if (!idOrSlug) {
        return null;
    }
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${BLOG_API_BASE}/${idOrSlug}?_embed=1` : `${BLOG_API_BASE}?slug=${encodeURIComponent(idOrSlug)}&_embed=1`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpPost(data, {
                includeContent: true
            });
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpPost(data[0], {
                    includeContent: true
                });
            }
            return null;
        }
    } catch (error) {
        return null;
    }
};
const getRelatedBlogPosts = async (post, { perPage = 2 } = {})=>{
    if (!post?.id) {
        return [];
    }
    const categories = post.categoryIds?.length ? post.categoryIds : undefined;
    const { posts } = await getBlogPostsPage({
        page: 1,
        perPage,
        orderby: "date",
        order: "desc",
        categories,
        exclude: [
            post.id
        ],
        sticky: false
    });
    return posts;
};

;// CONCATENATED MODULE: ./data/servicesApi.js
const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const servicesApi_htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const servicesApi_decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>servicesApi_htmlEntities[entity] || entity);
const servicesApi_stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? servicesApi_stripHtml(servicesApi_decodeHtml(match[1])) : "";
};
const servicesApi_getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = servicesApi_decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ const normalizeWpService = (item)=>{
    const title = servicesApi_decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = servicesApi_stripHtml(servicesApi_decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = servicesApi_getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = servicesApi_decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? servicesApi_decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? servicesApi_decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? servicesApi_decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? servicesApi_decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: servicesApi_decodeHtml(item.name || ""),
                    description: servicesApi_decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};

;// CONCATENATED MODULE: ./data/worksApi.js
const WORKS_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const worksApi_htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const worksApi_decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>worksApi_htmlEntities[entity] || entity);
const getTechnologies = async ()=>{
    const url = `${WORKS_API_BASE}/technologies`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: worksApi_decodeHtml(item.name),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching technologies:", error);
        return [];
    }
};
const WORKS_FALLBACK_IMAGE = "/assets/img/portfolio/work-2.png";
const worksApi_getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || WORKS_FALLBACK_IMAGE;
};
const worksApi_formatDate = (value)=>{
    if (!value) return "";
    return new Intl.DateTimeFormat("en", {
        month: "short",
        year: "numeric"
    }).format(new Date(value));
};
const getTechnologyNames = (item)=>{
    const termGroups = item?._embedded?.["wp:term"] || [];
    for (const group of termGroups){
        if (Array.isArray(group) && group.length > 0 && group[0]?.taxonomy === "technology") {
            return group.map((t)=>worksApi_decodeHtml(t.name)).join(", ");
        }
    }
    return "";
};
const worksApi_normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const normalizeWpCaseStudy = (item)=>{
    const featuredImage = worksApi_getFeaturedImage(item);
    const techNames = getTechnologyNames(item);
    return {
        id: item.id,
        slug: item.slug,
        title: worksApi_decodeHtml(item.title?.rendered || ""),
        cat: techNames || (item.meta?.zini_services ? worksApi_decodeHtml(item.meta.zini_services) : "Design"),
        date: item.meta?.zini_date ? worksApi_decodeHtml(item.meta.zini_date) : worksApi_formatDate(item.date),
        img: featuredImage,
        imgPopup: featuredImage,
        dataId: `work-${item.id}`,
        client: item.meta?.zini_client ? worksApi_decodeHtml(item.meta.zini_client) : "",
        team: item.meta?.zini_team ? worksApi_decodeHtml(item.meta.zini_team) : "",
        services: item.meta?.zini_services ? worksApi_decodeHtml(item.meta.zini_services) : "",
        technologies: item.technologies || [],
        content: worksApi_normalizeContent(item.content?.rendered || ""),
        excerpt: worksApi_decodeHtml(item.excerpt?.rendered || "").replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim()
    };
};
const WORKS_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const buildCaseStudiesUrl = ({ page = WORKS_LIST_FILTERS.page, perPage = WORKS_LIST_FILTERS.perPage, orderby = WORKS_LIST_FILTERS.orderby, order = WORKS_LIST_FILTERS.order, technologies } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage)
    });
    if (orderby) {
        params.set("orderby", orderby);
    }
    if (order) {
        params.set("order", order);
    }
    if (technologies) {
        params.set("technologies", String(technologies));
    }
    return `${WORKS_API_BASE}/case-studies?${params.toString()}`;
};
const getCaseStudiesPage = async (filters = {})=>{
    const url = buildCaseStudiesUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                caseStudies: [],
                totalPages: 0,
                total: 0
            };
        }
        const data = await response.json();
        return {
            caseStudies: Array.isArray(data) ? data.map((item)=>normalizeWpCaseStudy(item)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        console.error("Error fetching case studies page:", error);
        return {
            caseStudies: [],
            totalPages: 0,
            total: 0
        };
    }
};
const getCaseStudies = async (filters = {})=>{
    const { caseStudies } = await getCaseStudiesPage(filters);
    return caseStudies;
};
const getCaseStudyById = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const params = new URLSearchParams();
    params.set("_embed", "1");
    const url = isNumeric ? `${WORKS_API_BASE}/case-studies/${idOrSlug}?${params.toString()}` : `${WORKS_API_BASE}/case-studies?slug=${encodeURIComponent(idOrSlug)}&${params.toString()}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpCaseStudy(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpCaseStudy(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching case study by ID/slug:", error);
        return null;
    }
};
const getNextCaseStudy = async (currentId)=>{
    if (!currentId) return null;
    try {
        // Fetch all case studies sorted by date desc (lightweight, no content needed)
        const { caseStudies } = await getCaseStudiesPage({
            page: 1,
            perPage: 100,
            orderby: "date",
            order: "desc"
        });
        if (!caseStudies.length) return null;
        const currentIndex = caseStudies.findIndex((cs)=>String(cs.id) === String(currentId) || String(cs.slug) === String(currentId));
        // If current not found or is the last one, return null (do not wrap)
        if (currentIndex === -1 || currentIndex >= caseStudies.length - 1) {
            return null;
        }
        const nextIndex = currentIndex + 1;
        const next = caseStudies[nextIndex];
        return {
            title: next.title,
            href: `/case-study/${next.slug}`
        };
    } catch (error) {
        console.error("Error fetching next case study:", error);
        return null;
    }
};

;// CONCATENATED MODULE: ./app/sitemap.js




async function sitemap() {
    const baseUrl = seo/* SITE_CONFIG */.ep.url;
    // 1. Fetch dynamic data for routes
    const [posts, services, caseStudies] = await Promise.all([
        getBlogPosts({
            perPage: 100
        }).catch(()=>[]),
        getServices().catch(()=>[]),
        getCaseStudies({
            perPage: 100
        }).catch(()=>[])
    ]);
    // 2. Define static routes
    const staticPaths = [
        "",
        "/about-us",
        "/about-me",
        "/contact",
        "/faq",
        "/pricing",
        "/privacy-policy",
        "/refund-returns",
        "/team",
        "/services",
        "/case-studies",
        "/blogs"
    ];
    const staticRoutes = staticPaths.map((route)=>({
            url: `${baseUrl}${route}`,
            lastModified: new Date().toISOString(),
            changeFrequency: route === "" ? "daily" : "weekly",
            priority: route === "" ? 1.0 : 0.8
        }));
    // 3. Map dynamic blog posts (dynamic slugs)
    const postRoutes = posts.map((post)=>({
            url: `${baseUrl}/blog/${post.slug || post.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 4. Map dynamic services (dynamic slugs)
    const serviceRoutes = services.map((service)=>({
            url: `${baseUrl}/service/${service.slug || service.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 5. Map dynamic case studies (dynamic slugs)
    const caseStudyRoutes = caseStudies.map((work)=>({
            url: `${baseUrl}/case-study/${work.slug || work.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    return [
        ...staticRoutes,
        ...postRoutes,
        ...serviceRoutes,
        ...caseStudyRoutes
    ];
}

// EXTERNAL MODULE: ./node_modules/next/dist/build/webpack/loaders/metadata/resolve-route-data.js
var resolve_route_data = __webpack_require__(57252);
;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__




const sitemapModule = { ...sitemap_namespaceObject }
const handler = sitemapModule.default
const generateSitemaps = sitemapModule.generateSitemaps
const contentType = "application/xml"
const fileType = "sitemap"


  if (typeof handler !== 'function') {
    throw new Error('Default export is missing in "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"')
  }
  




async function GET(_, ctx) {
  const { __metadata_id__ = [], ...params } = ctx.params || {}
  const targetId = __metadata_id__[0]
  let id = undefined
  const sitemaps = generateSitemaps ? await generateSitemaps() : null

  if (sitemaps) {
    id = sitemaps.find((item) => {
      if (false) {}
      return item.id.toString() === targetId
    })?.id
    if (id == null) {
      return new server.NextResponse('Not Found', {
        status: 404,
      })
    }
  }

  const data = await handler({ id })
  const content = (0,resolve_route_data.resolveRouteData)(data, fileType)

  return new server.NextResponse(content, {
    headers: {
      'Content-Type': contentType,
      'Cache-Control': "public, max-age=0, must-revalidate",
    },
  })
}



;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?page=%2Fsitemap.xml%2Froute&name=app%2Fsitemap.xml%2Froute&pagePath=private-next-app-dir%2Fsitemap.js&appDir=G%3A%5Czinisoft%5Czinisoft_beta%5Czinisoft.net%5Cfrontend-v3%5Capp&appPaths=%2Fsitemap&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!




// We inject the nextConfigOutput here so that we can use them in the route
// module.
const nextConfigOutput = ""
const routeModule = new module_compiled.AppRouteRouteModule({
    definition: {
        kind: route_kind/* RouteKind */.x.APP_ROUTE,
        page: "/sitemap.xml/route",
        pathname: "/sitemap.xml",
        filename: "sitemap",
        bundlePath: "app/sitemap.xml/route"
    },
    resolvedPagePath: "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__",
    nextConfigOutput,
    userland: sitemap_next_metadata_route_namespaceObject
});
// Pull out the exports that we need to expose from the module. This should
// be eliminated when we've moved the other routes to the new format. These
// are used to hook into the route.
const { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout } = routeModule;
const originalPathname = "/sitemap.xml/route";
function patchFetch() {
    return (0,patch_fetch.patchFetch)({
        serverHooks,
        staticGenerationAsyncStorage
    });
}


//# sourceMappingURL=app-route.js.map��`%�// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  headerHooks: () => (/* binding */ headerHooks),
  originalPathname: () => (/* binding */ originalPathname),
  patchFetch: () => (/* binding */ patchFetch),
  requestAsyncStorage: () => (/* binding */ requestAsyncStorage),
  routeModule: () => (/* binding */ routeModule),
  serverHooks: () => (/* binding */ serverHooks),
  staticGenerationAsyncStorage: () => (/* binding */ staticGenerationAsyncStorage),
  staticGenerationBailout: () => (/* binding */ staticGenerationBailout)
});

// NAMESPACE OBJECT: ./app/sitemap.js
var sitemap_namespaceObject = {};
__webpack_require__.r(sitemap_namespaceObject);
__webpack_require__.d(sitemap_namespaceObject, {
  "default": () => (sitemap)
});

// NAMESPACE OBJECT: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__
var sitemap_next_metadata_route_namespaceObject = {};
__webpack_require__.r(sitemap_next_metadata_route_namespaceObject);
__webpack_require__.d(sitemap_next_metadata_route_namespaceObject, {
  GET: () => (GET)
});

// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-modules/app-route/module.compiled.js
var module_compiled = __webpack_require__(95419);
// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-kind.js
var route_kind = __webpack_require__(69108);
// EXTERNAL MODULE: ./node_modules/next/dist/server/lib/patch-fetch.js
var patch_fetch = __webpack_require__(99678);
// EXTERNAL MODULE: ./node_modules/next/server.js
var server = __webpack_require__(79647);
// EXTERNAL MODULE: ./data/seo.js
var seo = __webpack_require__(62486);
;// CONCATENATED MODULE: ./data/blogApi.js

ReplaceSource��const BLOG_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2/posts";
const BLOG_FALLBACK_IMAGE = "/assets/img/blog/grid/post-1.png";
export const BLOG_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (value = "")=>decodeHtml(value.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim());
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const formatDate = (value)=>{
    if (!value) {
        return "";
    }
    return new Intl.DateTimeFormat("en", {
        month: "short",
        day: "numeric",
        year: "numeric"
    }).format(new Date(value));
};
const getFeaturedImage = (post)=>{
    const media = post?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || BLOG_FALLBACK_IMAGE;
};
const getCategory = (post)=>post?._embedded?.["wp:term"]?.[0]?.[0]?.name || "Blog";
const getTags = (post)=>{
    const terms = post?._embedded?.["wp:term"]?.[1] || [];
    return terms.map((term)=>term.name);
};
const getAuthorName = (post)=>post?._embedded?.author?.[0]?.name || "Admin";
const getAuthorAvatar = (post)=>post?._embedded?.author?.[0]?.avatar_urls?.["96"] || "/assets/img/root/author-avatar.png";
const getAuthorDescription = (post)=>post?._embedded?.author?.[0]?.description || "";
const appendListParam = (params, name, values = [])=>{
    const list = Array.isArray(values) ? values : [
        values
    ];
    list.filter(Boolean).forEach((value)=>{
        params.append(`${name}[]`, String(value));
    });
};
export const buildBlogPostsUrl = ({ page = BLOG_LIST_FILTERS.page, perPage = BLOG_LIST_FILTERS.perPage, orderby = BLOG_LIST_FILTERS.orderby, order = BLOG_LIST_FILTERS.order, sticky, search, searchColumns, categories, status, author, exclude } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage),
        orderby,
        order
    });
    if (typeof sticky === "boolean") {
        params.set("sticky", String(sticky));
    }
    if (search) {
        params.set("search", search);
    }
    appendListParam(params, "search_columns", searchColumns);
    appendListParam(params, "categories", categories);
    appendListParam(params, "status", status);
    appendListParam(params, "author", author);
    appendListParam(params, "exclude", exclude);
    return `${BLOG_API_BASE}?${params.toString()}`;
};
export const normalizeWpPost = (post, { includeContent = false } = {})=>({
        id: post.id,
        slug: post.slug,
        href: `/blog/${post.slug}`,
        sourceUrl: post.link,
        img: getFeaturedImage(post),
        alt: stripHtml(post.title?.rendered || "Blog image"),
        cat: getCategory(post),
        date: formatDate(post.date),
        title: stripHtml(post.title?.rendered || ""),
        description: stripHtml(post.excerpt?.rendered || ""),
        descriptions: stripHtml(post.excerpt?.rendered || ""),
        categoryIds: post.categories || [],
        tagIds: post.tags || [],
        tags: getTags(post),
        authorId: post.author,
        author: getAuthorName(post),
        authorAvatar: getAuthorAvatar(post),
        authorDescription: getAuthorDescription(post),
        content: includeContent ? normalizeContent(post.content?.rendered || "") : ""
    });
export const getBlogPostsPage = async (filters = {})=>{
    const url = buildBlogPostsUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                posts: [],
                totalPages: 0,
                total: 0
            };
        }
        const posts = await response.json();
        return {
            posts: Array.isArray(posts) ? posts.map((post)=>normalizeWpPost(post)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        return {
            posts: [],
            totalPages: 0,
            total: 0
        };
    }
};
export const getBlogPosts = async (filters = {})=>{
    const { posts } = await getBlogPostsPage(filters);
    return posts;
};
export const getBlogPostById = async (idOrSlug)=>{
    if (!idOrSlug) {
        return null;
    }
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${BLOG_API_BASE}/${idOrSlug}?_embed=1` : `${BLOG_API_BASE}?slug=${encodeURIComponent(idOrSlug)}&_embed=1`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpPost(data, {
                includeContent: true
            });
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpPost(data[0], {
                    includeContent: true
                });
            }
            return null;
        }
    } catch (error) {
        return null;
    }
};
export const getRelatedBlogPosts = async (post, { perPage = 2 } = {})=>{
    if (!post?.id) {
        return [];
    }
    const categories = post.categoryIds?.length ? post.categoryIds : undefined;
    const { posts } = await getBlogPostsPage({
        page: 1,
        perPage,
        orderby: "date",
        order: "desc",
        categories,
        exclude: [
            post.id
        ],
        sticky: false
    });
    return posts;
};
u136142undefined32513257undefined41354141undefined50375043undefined58645870undefined59925998undefined69296935undefined	RawSource0
;// CONCATENATED MODULE: ./data/servicesApi.js
��U�����6778servicesApi_htmlEntitiesundefined313322servicesApi_decodeHtmlundefined453464servicesApi_htmlEntitiesundefined492500servicesApi_stripHtmlundefined742750servicesApi_stripHtmlundefined752761servicesApi_decodeHtmlundefined789804servicesApi_getFeaturedImageundefined20312040servicesApi_decodeHtmlundefined33743383servicesApi_decodeHtmlundefined36953703servicesApi_stripHtmlundefined37053714servicesApi_decodeHtmlundefined37743789servicesApi_getFeaturedImageundefined39533962servicesApi_decodeHtmlundefined44494458servicesApi_decodeHtmlundefined45364545servicesApi_decodeHtmlundefined46284637servicesApi_decodeHtmlundefined47254734servicesApi_decodeHtmlundefined96969705servicesApi_decodeHtmlundefined97589767servicesApi_decodeHtmlundefinedRawSource-
;// CONCATENATED MODULE: ./data/worksApi.js
�� const WORKS_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
export const getTechnologies = async ()=>{
    const url = `${WORKS_API_BASE}/technologies`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching technologies:", error);
        return [];
    }
};
const WORKS_FALLBACK_IMAGE = "/assets/img/portfolio/work-2.png";
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || WORKS_FALLBACK_IMAGE;
};
const formatDate = (value)=>{
    if (!value) return "";
    return new Intl.DateTimeFormat("en", {
        month: "short",
        year: "numeric"
    }).format(new Date(value));
};
const getTechnologyNames = (item)=>{
    const termGroups = item?._embedded?.["wp:term"] || [];
    for (const group of termGroups){
        if (Array.isArray(group) && group.length > 0 && group[0]?.taxonomy === "technology") {
            return group.map((t)=>decodeHtml(t.name)).join(", ");
        }
    }
    return "";
};
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
export const normalizeWpCaseStudy = (item)=>{
    const featuredImage = getFeaturedImage(item);
    const techNames = getTechnologyNames(item);
    return {
        id: item.id,
        slug: item.slug,
        title: decodeHtml(item.title?.rendered || ""),
        cat: techNames || (item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "Design"),
        date: item.meta?.zini_date ? decodeHtml(item.meta.zini_date) : formatDate(item.date),
        img: featuredImage,
        imgPopup: featuredImage,
        dataId: `work-${item.id}`,
        client: item.meta?.zini_client ? decodeHtml(item.meta.zini_client) : "",
        team: item.meta?.zini_team ? decodeHtml(item.meta.zini_team) : "",
        services: item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "",
        technologies: item.technologies || [],
        content: normalizeContent(item.content?.rendered || ""),
        excerpt: decodeHtml(item.excerpt?.rendered || "").replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim()
    };
};
export const WORKS_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
export const buildCaseStudiesUrl = ({ page = WORKS_LIST_FILTERS.page, perPage = WORKS_LIST_FILTERS.perPage, orderby = WORKS_LIST_FILTERS.orderby, order = WORKS_LIST_FILTERS.order, technologies } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage)
    });
    if (orderby) {
        params.set("orderby", orderby);
    }
    if (order) {
        params.set("order", order);
    }
    if (technologies) {
        params.set("technologies", String(technologies));
    }
    return `${WORKS_API_BASE}/case-studies?${params.toString()}`;
};
export const getCaseStudiesPage = async (filters = {})=>{
    const url = buildCaseStudiesUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                caseStudies: [],
                totalPages: 0,
                total: 0
            };
        }
        const data = await response.json();
        return {
            caseStudies: Array.isArray(data) ? data.map((item)=>normalizeWpCaseStudy(item)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        console.error("Error fetching case studies page:", error);
        return {
            caseStudies: [],
            totalPages: 0,
            total: 0
        };
    }
};
export const getCaseStudies = async (filters = {})=>{
    const { caseStudies } = await getCaseStudiesPage(filters);
    return caseStudies;
};
export const getCaseStudyById = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const params = new URLSearchParams();
    params.set("_embed", "1");
    const url = isNumeric ? `${WORKS_API_BASE}/case-studies/${idOrSlug}?${params.toString()}` : `${WORKS_API_BASE}/case-studies?slug=${encodeURIComponent(idOrSlug)}&${params.toString()}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpCaseStudy(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpCaseStudy(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching case study by ID/slug:", error);
        return null;
    }
};
export const getNextCaseStudy = async (currentId)=>{
    if (!currentId) return null;
    try {
        // Fetch all case studies sorted by date desc (lightweight, no content needed)
        const { caseStudies } = await getCaseStudiesPage({
            page: 1,
            perPage: 100,
            orderby: "date",
            order: "desc"
        });
        if (!caseStudies.length) return null;
        const currentIndex = caseStudies.findIndex((cs)=>String(cs.id) === String(currentId) || String(cs.slug) === String(currentId));
        // If current not found or is the last one, return null (do not wrap)
        if (currentIndex === -1 || currentIndex >= caseStudies.length - 1) {
            return null;
        }
        const nextIndex = currentIndex + 1;
        const next = caseStudies[nextIndex];
        return {
            title: next.title,
            href: `/case-study/${next.slug}`
        };
    } catch (error) {
        console.error("Error fetching next case study:", error);
        return null;
    }
};
�492498undefined33433349undefined43704376undefined44774483undefined50945100undefined60126018undefined61566162undefined71687174undefined�7384worksApi_htmlEntitiesundefined319328worksApi_decodeHtmlundefined459470worksApi_htmlEntitiesundefined949958worksApi_decodeHtmlundefined12801295worksApi_getFeaturedImageundefined16011610worksApi_formatDateundefined20402049worksApi_decodeHtmlundefined21122127worksApi_normalizeContentundefined34013416worksApi_getFeaturedImageundefined35473556worksApi_decodeHtmlundefined36413650worksApi_decodeHtmlundefined37273736worksApi_decodeHtmlundefined37613770worksApi_formatDateundefined39213930worksApi_decodeHtmlundefined39984007worksApi_decodeHtmlundefined40814090worksApi_decodeHtmlundefined41874202worksApi_normalizeContentundefined42524261worksApi_decodeHtmlundefinedRawSource+
;// CONCATENATED MODULE: ./app/sitemap.js
��himport { SITE_CONFIG } from "../data/seo";
import { getBlogPosts } from "../data/blogApi";
import { getServices } from "../data/servicesApi";
import { getCaseStudies } from "../data/worksApi";
export default async function sitemap() {
    const baseUrl = SITE_CONFIG.url;
    // 1. Fetch dynamic data for routes
    const [posts, services, caseStudies] = await Promise.all([
        getBlogPosts({
            perPage: 100
        }).catch(()=>[]),
        getServices().catch(()=>[]),
        getCaseStudies({
            perPage: 100
        }).catch(()=>[])
    ]);
    // 2. Define static routes
    const staticPaths = [
        "",
        "/about-us",
        "/about-me",
        "/contact",
        "/faq",
        "/pricing",
        "/privacy-policy",
        "/refund-returns",
        "/team",
        "/services",
        "/case-studies",
        "/blogs"
    ];
    const staticRoutes = staticPaths.map((route)=>({
            url: `${baseUrl}${route}`,
            lastModified: new Date().toISOString(),
            changeFrequency: route === "" ? "daily" : "weekly",
            priority: route === "" ? 1.0 : 0.8
        }));
    // 3. Map dynamic blog posts (dynamic slugs)
    const postRoutes = posts.map((post)=>({
            url: `${baseUrl}/blog/${post.slug || post.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 4. Map dynamic services (dynamic slugs)
    const serviceRoutes = services.map((service)=>({
            url: `${baseUrl}/service/${service.slug || service.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 5. Map dynamic case studies (dynamic slugs)
    const caseStudyRoutes = caseStudies.map((work)=>({
            url: `${baseUrl}/case-study/${work.slug || work.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    return [
        ...staticRoutes,
        ...postRoutes,
        ...serviceRoutes,
        ...caseStudyRoutes
    ];
}
�041undefined4389undefined91140undefined142191undefined193207undefined255265__WEBPACK_MODULE_REFERENCE__4_5b22534954455f434f4e464947225d_asiSafe1__._undefined383394__WEBPACK_MODULE_REFERENCE__5_5b22676574426c6f67506f737473225d_call_directImport_asiSafe1__._undefined457467__WEBPACK_MODULE_REFERENCE__6_5b226765745365727669636573225d_call_directImport_asiSafe1__._undefined494507__WEBPACK_MODULE_REFERENCE__7_5b226765744361736553747564696573225d_call_directImport_asiSafe1__._undefined�51123seo/* SITE_CONFIG */.epundefined241333getBlogPostsundefined396486getServicesundefined513609getCaseStudiesundefinedRawSourceO
// EXTERNAL MODULE: ./node_modules/next/dist/build/webpack/loaders/metadata/resolve-route-data.js
var resolve_route_data = __webpack_require__(57252);
;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__
��@import { NextResponse } from 'next/server'
import * as userland from "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"
import { resolveRouteData } from 'next/dist/build/webpack/loaders/metadata/resolve-route-data'

const sitemapModule = { ...userland }
const handler = sitemapModule.default
const generateSitemaps = sitemapModule.generateSitemaps
const contentType = "application/xml"
const fileType = "sitemap"


  if (typeof handler !== 'function') {
    throw new Error('Default export is missing in "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"')
  }
  


export * from "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"

export async function GET(_, ctx) {
  const { __metadata_id__ = [], ...params } = ctx.params || {}
  const targetId = __metadata_id__[0]
  let id = undefined
  const sitemaps = generateSitemaps ? await generateSitemaps() : null

  if (sitemaps) {
    id = sitemaps.find((item) => {
      if (process.env.NODE_ENV !== 'production') {
        if (item?.id == null) {
          throw new Error('id property is required for every item returned from generateSitemaps')
        }
      }
      return item.id.toString() === targetId
    })?.id
    if (id == null) {
      return new NextResponse('Not Found', {
        status: 404,
      })
    }
  }

  const data = await handler({ id })
  const content = resolveRouteData(data, fileType)

  return new NextResponse(content, {
    headers: {
      'Content-Type': contentType,
      'Cache-Control': "public, max-age=0, must-revalidate",
    },
  })
}


�041undefined43141undefined143236undefined266273__WEBPACK_MODULE_REFERENCE__8_ns_asiSafe1__._undefined612698undefined701707undefined9931029falseundefined10321181{}undefined12781289__WEBPACK_MODULE_REFERENCE__3_5b224e657874526573706f6e7365225d_directImport_asiSafe1__._undefined14021417__WEBPACK_MODULE_REFERENCE__9_5b227265736f6c7665526f75746544617461225d_call_directImport_asiSafe1__._undefined14491460__WEBPACK_MODULE_REFERENCE__3_5b224e657874526573706f6e7365225d_directImport_asiSafe1__._undefined�3175sitemap_namespaceObjectundefined806893server.NextResponseundefined10061106(0,resolve_route_data.resolveRouteData)undefined11381225server.NextResponseundefinedRawSource�
;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?page=%2Fsitemap.xml%2Froute&name=app%2Fsitemap.xml%2Froute&pagePath=private-next-app-dir%2Fsitemap.js&appDir=G%3A%5Czinisoft%5Czinisoft_beta%5Czinisoft.net%5Cfrontend-v3%5Capp&appPaths=%2Fsitemap&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!
���import { AppRouteRouteModule } from "next/dist/server/future/route-modules/app-route/module.compiled";
import { RouteKind } from "next/dist/server/future/route-kind";
import { patchFetch as _patchFetch } from "next/dist/server/lib/patch-fetch";
import * as userland from "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__";
// We inject the nextConfigOutput here so that we can use them in the route
// module.
const nextConfigOutput = ""
const routeModule = new AppRouteRouteModule({
    definition: {
        kind: RouteKind.APP_ROUTE,
        page: "/sitemap.xml/route",
        pathname: "/sitemap.xml",
        filename: "sitemap",
        bundlePath: "app/sitemap.xml/route"
    },
    resolvedPagePath: "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__",
    nextConfigOutput,
    userland
});
// Pull out the exports that we need to expose from the module. This should
// be eliminated when we've moved the other routes to the new format. These
// are used to hook into the route.
const { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout } = routeModule;
const originalPathname = "/sitemap.xml/route";
function patchFetch() {
    return _patchFetch({
        serverHooks,
        staticGenerationAsyncStorage
    });
}
export { routeModule, requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout, originalPathname, patchFetch,  };

//# sourceMappingURL=app-route.js.map�0101undefined103165undefined167243undefined245435undefined576594__WEBPACK_MODULE_REFERENCE__0_5b22417070526f757465526f7574654d6f64756c65225d_directImport_asiSafe1__._undefined630638__WEBPACK_MODULE_REFERENCE__1_5b22526f7574654b696e64225d_asiSafe1__._undefined10231022: __WEBPACK_MODULE_REFERENCE__10_ns_asiSafe1__._undefined14241434__WEBPACK_MODULE_REFERENCE__2_5b2270617463684665746368225d_call_directImport_asiSafe1__._undefined15061662undefined�143244module_compiled.AppRouteRouteModuleundefined280348route_kind/* RouteKind */.xundefined735780sitemap_next_metadata_route_namespaceObjectundefined11821270(0,patch_fetch.patchFetch)undefinedD���`Z�module_compiled�module_compiled_namespaceObject�module_compiled_default�route_kind�route_kind_namespaceObject�patch_fetch�patch_fetch_namespaceObject�patch_fetch_default����server_namespaceObject�server_default�seo�BLOG_API_BASE�BLOG_FALLBACK_IMAGE�BLOG_LIST_FILTERS;���<���=����normalizeContent�formatDate=����getCategory�getTags�getAuthorName�getAuthorAvatar�getAuthorDescription�appendListParam�buildBlogPostsUrl�normalizeWpPost�getBlogPostsPage�getBlogPosts�getBlogPostById�getRelatedBlogPosts�blogApi_namespaceObject+����servicesApi_htmlEntities�servicesApi_decodeHtml�servicesApi_stripHtml,����servicesApi_getFeaturedImage-���.���/���0���1���2���3���v���4���o����servicesApi_namespaceObject�WORKS_API_BASE�worksApi_htmlEntities�worksApi_decodeHtml�getTechnologies�WORKS_FALLBACK_IMAGE�worksApi_getFeaturedImage�worksApi_formatDate�getTechnologyNames�worksApi_normalizeContent�normalizeWpCaseStudy�WORKS_LIST_FILTERS�buildCaseStudiesUrl�getCaseStudiesPage�getCaseStudies�getCaseStudyById�getNextCaseStudy�worksApi_namespaceObject�sitemap�sitemap_namespaceObject�resolve_route_data�resolve_route_data_namespaceObject�resolve_route_data_default�sitemapModule�handler�generateSitemaps�contentType�fileType�GET�sitemap_next_metadata_route_namespaceObject�nextConfigOutput�routeModule�requestAsyncStorage�staticGenerationAsyncStorage�serverHooks�headerHooks�staticGenerationBailout�originalPathname�patchFetchxnext_app_loaderpage_2Fsitemap_xml_2Froute_name_app_2Fsitemap_xml_2Froute_pagePath_private_next_app_dir_2Fsitemap_js_appDir_G_3A_5Czinisoft_5Czinisoft_beta_5Czinisoft_net_5Cfrontend_v3_5Capp_appPaths_2Fsitemap_pageExtensions_tsx_pageExtensions_ts_pageExtensions_jsx_pageExtensions_js_basePath_assetPrefix_nextConfigOutput_preferredRegion_middlewareConfig_e30_3D_namespaceObject�__webpack_require__.r	�����__webpack_require__���webpack/lib/util/registerExternalSerializer�webpack-sources/ConcatSource�`
�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSourcer"use strict";
(() => {
var exports = {};
exports.id = 717;
exports.ids = [717];
exports.modules = {

/***/ 30517:
�webpack/lib/util/registerExternalSerializer�webpack-sources/CachedSource&�webpack/lib/util/registerExternalSerializer�webpack-sources/ConcatSource��webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource/***/ ((module) => {

Umodule.exports = require("next/dist/compiled/next-server/app-route.runtime.prod.js");


/***/ })��buffer�source�size�maps�hashu/***/ ((module) => {

module.exports = require("next/dist/compiled/next-server/app-route.runtime.prod.js");

/***/ })��{"finalSource":true}�map�bufferedMapConcatSourceRawSource/***/ ((module) => {

	RawSourceUmodule.exports = require("next/dist/compiled/next-server/app-route.runtime.prod.js");�


/***/ }),

/***/ 17784:
���webpack/lib/util/registerExternalSerializer�webpack-sources/ConcatSource��webpack/lib/util/registerExternalSerializer�webpack-sources/RawSourceQ/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

�webpack/lib/util/registerExternalSerializer�webpack-sources/CachedSourceҋ�webpack/lib/util/registerExternalSerializer�webpack-sources/ConcatSource�`�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  headerHooks: () => (/* binding */ headerHooks),
  originalPathname: () => (/* binding */ originalPathname),
  patchFetch: () => (/* binding */ patchFetch),
  requestAsyncStorage: () => (/* binding */ requestAsyncStorage),
  routeModule: () => (/* binding */ routeModule),
  serverHooks: () => (/* binding */ serverHooks),
  staticGenerationAsyncStorage: () => (/* binding */ staticGenerationAsyncStorage),
  staticGenerationBailout: () => (/* binding */ staticGenerationBailout)
});

// NAMESPACE OBJECT: ./app/sitemap.js
var sitemap_namespaceObject = {};
__webpack_require__.r(sitemap_namespaceObject);
__webpack_require__.d(sitemap_namespaceObject, {
  "default": () => (sitemap)
});

// NAMESPACE OBJECT: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__
var sitemap_next_metadata_route_namespaceObject = {};
__webpack_require__.r(sitemap_next_metadata_route_namespaceObject);
__webpack_require__.d(sitemap_next_metadata_route_namespaceObject, {
  GET: () => (GET)
});

// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-modules/app-route/module.compiled.js
var module_compiled = __webpack_require__(95419);
// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-kind.js
var route_kind = __webpack_require__(69108);
// EXTERNAL MODULE: ./node_modules/next/dist/server/lib/patch-fetch.js
var patch_fetch = __webpack_require__(99678);
// EXTERNAL MODULE: ./node_modules/next/server.js
var server = __webpack_require__(79647);
// EXTERNAL MODULE: ./data/seo.js
var seo = __webpack_require__(62486);
;// CONCATENATED MODULE: ./data/blogApi.js
�webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�webpack/lib/util/registerExternalSerializer�webpack-sources/CachedSource��webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource�const BLOG_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2/posts";
const BLOG_FALLBACK_IMAGE = "/assets/img/blog/grid/post-1.png";
export const BLOG_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (value = "")=>decodeHtml(value.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim());
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const formatDate = (value)=>{
    if (!value) {
        return "";
    }
    return new Intl.DateTimeFormat("en", {
        month: "short",
        day: "numeric",
        year: "numeric"
    }).format(new Date(value));
};
const getFeaturedImage = (post)=>{
    const media = post?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || BLOG_FALLBACK_IMAGE;
};
const getCategory = (post)=>post?._embedded?.["wp:term"]?.[0]?.[0]?.name || "Blog";
const getTags = (post)=>{
    const terms = post?._embedded?.["wp:term"]?.[1] || [];
    return terms.map((term)=>term.name);
};
const getAuthorName = (post)=>post?._embedded?.author?.[0]?.name || "Admin";
const getAuthorAvatar = (post)=>post?._embedded?.author?.[0]?.avatar_urls?.["96"] || "/assets/img/root/author-avatar.png";
const getAuthorDescription = (post)=>post?._embedded?.author?.[0]?.description || "";
const appendListParam = (params, name, values = [])=>{
    const list = Array.isArray(values) ? values : [
        values
    ];
    list.filter(Boolean).forEach((value)=>{
        params.append(`${name}[]`, String(value));
    });
};
export const buildBlogPostsUrl = ({ page = BLOG_LIST_FILTERS.page, perPage = BLOG_LIST_FILTERS.perPage, orderby = BLOG_LIST_FILTERS.orderby, order = BLOG_LIST_FILTERS.order, sticky, search, searchColumns, categories, status, author, exclude } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage),
        orderby,
        order
    });
    if (typeof sticky === "boolean") {
        params.set("sticky", String(sticky));
    }
    if (search) {
        params.set("search", search);
    }
    appendListParam(params, "search_columns", searchColumns);
    appendListParam(params, "categories", categories);
    appendListParam(params, "status", status);
    appendListParam(params, "author", author);
    appendListParam(params, "exclude", exclude);
    return `${BLOG_API_BASE}?${params.toString()}`;
};
export const normalizeWpPost = (post, { includeContent = false } = {})=>({
        id: post.id,
        slug: post.slug,
        href: `/blog/${post.slug}`,
        sourceUrl: post.link,
        img: getFeaturedImage(post),
        alt: stripHtml(post.title?.rendered || "Blog image"),
        cat: getCategory(post),
        date: formatDate(post.date),
        title: stripHtml(post.title?.rendered || ""),
        description: stripHtml(post.excerpt?.rendered || ""),
        descriptions: stripHtml(post.excerpt?.rendered || ""),
        categoryIds: post.categories || [],
        tagIds: post.tags || [],
        tags: getTags(post),
        authorId: post.author,
        author: getAuthorName(post),
        authorAvatar: getAuthorAvatar(post),
        authorDescription: getAuthorDescription(post),
        content: includeContent ? normalizeContent(post.content?.rendered || "") : ""
    });
export const getBlogPostsPage = async (filters = {})=>{
    const url = buildBlogPostsUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                posts: [],
                totalPages: 0,
                total: 0
            };
        }
        const posts = await response.json();
        return {
            posts: Array.isArray(posts) ? posts.map((post)=>normalizeWpPost(post)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        return {
            posts: [],
            totalPages: 0,
            total: 0
        };
    }
};
export const getBlogPosts = async (filters = {})=>{
    const { posts } = await getBlogPostsPage(filters);
    return posts;
};
export const getBlogPostById = async (idOrSlug)=>{
    if (!idOrSlug) {
        return null;
    }
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${BLOG_API_BASE}/${idOrSlug}?_embed=1` : `${BLOG_API_BASE}?slug=${encodeURIComponent(idOrSlug)}&_embed=1`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpPost(data, {
                includeContent: true
            });
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpPost(data[0], {
                    includeContent: true
                });
            }
            return null;
        }
    } catch (error) {
        return null;
    }
};
export const getRelatedBlogPosts = async (post, { perPage = 2 } = {})=>{
    if (!post?.id) {
        return [];
    }
    const categories = post.categoryIds?.length ? post.categoryIds : undefined;
    const { posts } = await getBlogPostsPage({
        page: 1,
        perPage,
        orderby: "date",
        order: "desc",
        categories,
        exclude: [
            post.id
        ],
        sticky: false
    });
    return posts;
};
M����'-����hn���������buffer�source�size�maps�hash�const BLOG_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2/posts";
const BLOG_FALLBACK_IMAGE = "/assets/img/blog/grid/post-1.png";
const BLOG_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (value = "")=>decodeHtml(value.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim());
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const formatDate = (value)=>{
    if (!value) {
        return "";
    }
    return new Intl.DateTimeFormat("en", {
        month: "short",
        day: "numeric",
        year: "numeric"
    }).format(new Date(value));
};
const getFeaturedImage = (post)=>{
    const media = post?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || BLOG_FALLBACK_IMAGE;
};
const getCategory = (post)=>post?._embedded?.["wp:term"]?.[0]?.[0]?.name || "Blog";
const getTags = (post)=>{
    const terms = post?._embedded?.["wp:term"]?.[1] || [];
    return terms.map((term)=>term.name);
};
const getAuthorName = (post)=>post?._embedded?.author?.[0]?.name || "Admin";
const getAuthorAvatar = (post)=>post?._embedded?.author?.[0]?.avatar_urls?.["96"] || "/assets/img/root/author-avatar.png";
const getAuthorDescription = (post)=>post?._embedded?.author?.[0]?.description || "";
const appendListParam = (params, name, values = [])=>{
    const list = Array.isArray(values) ? values : [
        values
    ];
    list.filter(Boolean).forEach((value)=>{
        params.append(`${name}[]`, String(value));
    });
};
const buildBlogPostsUrl = ({ page = BLOG_LIST_FILTERS.page, perPage = BLOG_LIST_FILTERS.perPage, orderby = BLOG_LIST_FILTERS.orderby, order = BLOG_LIST_FILTERS.order, sticky, search, searchColumns, categories, status, author, exclude } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage),
        orderby,
        order
    });
    if (typeof sticky === "boolean") {
        params.set("sticky", String(sticky));
    }
    if (search) {
        params.set("search", search);
    }
    appendListParam(params, "search_columns", searchColumns);
    appendListParam(params, "categories", categories);
    appendListParam(params, "status", status);
    appendListParam(params, "author", author);
    appendListParam(params, "exclude", exclude);
    return `${BLOG_API_BASE}?${params.toString()}`;
};
const normalizeWpPost = (post, { includeContent = false } = {})=>({
        id: post.id,
        slug: post.slug,
        href: `/blog/${post.slug}`,
        sourceUrl: post.link,
        img: getFeaturedImage(post),
        alt: stripHtml(post.title?.rendered || "Blog image"),
        cat: getCategory(post),
        date: formatDate(post.date),
        title: stripHtml(post.title?.rendered || ""),
        description: stripHtml(post.excerpt?.rendered || ""),
        descriptions: stripHtml(post.excerpt?.rendered || ""),
        categoryIds: post.categories || [],
        tagIds: post.tags || [],
        tags: getTags(post),
        authorId: post.author,
        author: getAuthorName(post),
        authorAvatar: getAuthorAvatar(post),
        authorDescription: getAuthorDescription(post),
        content: includeContent ? normalizeContent(post.content?.rendered || "") : ""
    });
const getBlogPostsPage = async (filters = {})=>{
    const url = buildBlogPostsUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                posts: [],
                totalPages: 0,
                total: 0
            };
        }
        const posts = await response.json();
        return {
            posts: Array.isArray(posts) ? posts.map((post)=>normalizeWpPost(post)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        return {
            posts: [],
            totalPages: 0,
            total: 0
        };
    }
};
const getBlogPosts = async (filters = {})=>{
    const { posts } = await getBlogPostsPage(filters);
    return posts;
};
const getBlogPostById = async (idOrSlug)=>{
    if (!idOrSlug) {
        return null;
    }
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${BLOG_API_BASE}/${idOrSlug}?_embed=1` : `${BLOG_API_BASE}?slug=${encodeURIComponent(idOrSlug)}&_embed=1`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpPost(data, {
                includeContent: true
            });
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpPost(data[0], {
                    includeContent: true
                });
            }
            return null;
        }
    } catch (error) {
        return null;
    }
};
const getRelatedBlogPosts = async (post, { perPage = 2 } = {})=>{
    if (!post?.id) {
        return [];
    }
    const categories = post.categoryIds?.length ? post.categoryIds : undefined;
    const { posts } = await getBlogPostsPage({
        page: 1,
        perPage,
        orderby: "date",
        order: "desc",
        categories,
        exclude: [
            post.id
        ],
        sticky: false
    });
    return posts;
};
��{"finalSource":false}�map�bufferedMapReplaceSourceRawSource�const BLOG_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2/posts";
const BLOG_FALLBACK_IMAGE = "/assets/img/blog/grid/post-1.png";
export const BLOG_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (value = "")=>decodeHtml(value.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim());
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const formatDate = (value)=>{
    if (!value) {
        return "";
    }
    return new Intl.DateTimeFormat("en", {
        month: "short",
        day: "numeric",
        year: "numeric"
    }).format(new Date(value));
};
const getFeaturedImage = (post)=>{
    const media = post?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || BLOG_FALLBACK_IMAGE;
};
const getCategory = (post)=>post?._embedded?.["wp:term"]?.[0]?.[0]?.name || "Blog";
const getTags = (post)=>{
    const terms = post?._embedded?.["wp:term"]?.[1] || [];
    return terms.map((term)=>term.name);
};
const getAuthorName = (post)=>post?._embedded?.author?.[0]?.name || "Admin";
const getAuthorAvatar = (post)=>post?._embedded?.author?.[0]?.avatar_urls?.["96"] || "/assets/img/root/author-avatar.png";
const getAuthorDescription = (post)=>post?._embedded?.author?.[0]?.description || "";
const appendListParam = (params, name, values = [])=>{
    const list = Array.isArray(values) ? values : [
        values
    ];
    list.filter(Boolean).forEach((value)=>{
        params.append(`${name}[]`, String(value));
    });
};
export const buildBlogPostsUrl = ({ page = BLOG_LIST_FILTERS.page, perPage = BLOG_LIST_FILTERS.perPage, orderby = BLOG_LIST_FILTERS.orderby, order = BLOG_LIST_FILTERS.order, sticky, search, searchColumns, categories, status, author, exclude } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage),
        orderby,
        order
    });
    if (typeof sticky === "boolean") {
        params.set("sticky", String(sticky));
    }
    if (search) {
        params.set("search", search);
    }
    appendListParam(params, "search_columns", searchColumns);
    appendListParam(params, "categories", categories);
    appendListParam(params, "status", status);
    appendListParam(params, "author", author);
    appendListParam(params, "exclude", exclude);
    return `${BLOG_API_BASE}?${params.toString()}`;
};
export const normalizeWpPost = (post, { includeContent = false } = {})=>({
        id: post.id,
        slug: post.slug,
        href: `/blog/${post.slug}`,
        sourceUrl: post.link,
        img: getFeaturedImage(post),
        alt: stripHtml(post.title?.rendered || "Blog image"),
        cat: getCategory(post),
        date: formatDate(post.date),
        title: stripHtml(post.title?.rendered || ""),
        description: stripHtml(post.excerpt?.rendered || ""),
        descriptions: stripHtml(post.excerpt?.rendered || ""),
        categoryIds: post.categories || [],
        tagIds: post.tags || [],
        tags: getTags(post),
        authorId: post.author,
        author: getAuthorName(post),
        authorAvatar: getAuthorAvatar(post),
        authorDescription: getAuthorDescription(post),
        content: includeContent ? normalizeContent(post.content?.rendered || "") : ""
    });
export const getBlogPostsPage = async (filters = {})=>{
    const url = buildBlogPostsUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                posts: [],
                totalPages: 0,
                total: 0
            };
        }
        const posts = await response.json();
        return {
            posts: Array.isArray(posts) ? posts.map((post)=>normalizeWpPost(post)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        return {
            posts: [],
            totalPages: 0,
            total: 0
        };
    }
};
export const getBlogPosts = async (filters = {})=>{
    const { posts } = await getBlogPostsPage(filters);
    return posts;
};
export const getBlogPostById = async (idOrSlug)=>{
    if (!idOrSlug) {
        return null;
    }
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${BLOG_API_BASE}/${idOrSlug}?_embed=1` : `${BLOG_API_BASE}?slug=${encodeURIComponent(idOrSlug)}&_embed=1`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpPost(data, {
                includeContent: true
            });
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpPost(data[0], {
                    includeContent: true
                });
            }
            return null;
        }
    } catch (error) {
        return null;
    }
};
export const getRelatedBlogPosts = async (post, { perPage = 2 } = {})=>{
    if (!post?.id) {
        return [];
    }
    const categories = post.categoryIds?.length ? post.categoryIds : undefined;
    const { posts } = await getBlogPostsPage({
        page: 1,
        perPage,
        orderby: "date",
        order: "desc",
        categories,
        exclude: [
            post.id
        ],
        sticky: false
    });
    return posts;
};
u136142undefined32513257undefined41354141undefined50375043undefined58645870undefined59925998undefined69296935undefined0
;// CONCATENATED MODULE: ./data/servicesApi.js
5(�webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource['const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
export const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ export const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ export const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ export const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ export const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ export const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};
K�
�
�
�������#�#�������1'const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};
���['const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
export const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ export const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ export const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ export const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ export const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ export const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};
f27462752undefined33263332undefined66136619undefined73437349undefined81578163undefined91759181undefinedbCN_9B��������$��.
7
owy���qzaj��u~C�%�%&'&�servicesApi_htmlEntities�servicesApi_decodeHtml��servicesApi_stripHtml���servicesApi_getFeaturedImage������������-
;// CONCATENATED MODULE: ./data/worksApi.js
� �webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource const WORKS_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
export const getTechnologies = async ()=>{
    const url = `${WORKS_API_BASE}/technologies`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching technologies:", error);
        return [];
    }
};
const WORKS_FALLBACK_IMAGE = "/assets/img/portfolio/work-2.png";
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || WORKS_FALLBACK_IMAGE;
};
const formatDate = (value)=>{
    if (!value) return "";
    return new Intl.DateTimeFormat("en", {
        month: "short",
        year: "numeric"
    }).format(new Date(value));
};
const getTechnologyNames = (item)=>{
    const termGroups = item?._embedded?.["wp:term"] || [];
    for (const group of termGroups){
        if (Array.isArray(group) && group.length > 0 && group[0]?.taxonomy === "technology") {
            return group.map((t)=>decodeHtml(t.name)).join(", ");
        }
    }
    return "";
};
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
export const normalizeWpCaseStudy = (item)=>{
    const featuredImage = getFeaturedImage(item);
    const techNames = getTechnologyNames(item);
    return {
        id: item.id,
        slug: item.slug,
        title: decodeHtml(item.title?.rendered || ""),
        cat: techNames || (item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "Design"),
        date: item.meta?.zini_date ? decodeHtml(item.meta.zini_date) : formatDate(item.date),
        img: featuredImage,
        imgPopup: featuredImage,
        dataId: `work-${item.id}`,
        client: item.meta?.zini_client ? decodeHtml(item.meta.zini_client) : "",
        team: item.meta?.zini_team ? decodeHtml(item.meta.zini_team) : "",
        services: item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "",
        technologies: item.technologies || [],
        content: normalizeContent(item.content?.rendered || ""),
        excerpt: decodeHtml(item.excerpt?.rendered || "").replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim()
    };
};
export const WORKS_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
export const buildCaseStudiesUrl = ({ page = WORKS_LIST_FILTERS.page, perPage = WORKS_LIST_FILTERS.perPage, orderby = WORKS_LIST_FILTERS.orderby, order = WORKS_LIST_FILTERS.order, technologies } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage)
    });
    if (orderby) {
        params.set("orderby", orderby);
    }
    if (order) {
        params.set("order", order);
    }
    if (technologies) {
        params.set("technologies", String(technologies));
    }
    return `${WORKS_API_BASE}/case-studies?${params.toString()}`;
};
export const getCaseStudiesPage = async (filters = {})=>{
    const url = buildCaseStudiesUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                caseStudies: [],
                totalPages: 0,
                total: 0
            };
        }
        const data = await response.json();
        return {
            caseStudies: Array.isArray(data) ? data.map((item)=>normalizeWpCaseStudy(item)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        console.error("Error fetching case studies page:", error);
        return {
            caseStudies: [],
            totalPages: 0,
            total: 0
        };
    }
};
export const getCaseStudies = async (filters = {})=>{
    const { caseStudies } = await getCaseStudiesPage(filters);
    return caseStudies;
};
export const getCaseStudyById = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const params = new URLSearchParams();
    params.set("_embed", "1");
    const url = isNumeric ? `${WORKS_API_BASE}/case-studies/${idOrSlug}?${params.toString()}` : `${WORKS_API_BASE}/case-studies?slug=${encodeURIComponent(idOrSlug)}&${params.toString()}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpCaseStudy(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpCaseStudy(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching case study by ID/slug:", error);
        return null;
    }
};
export const getNextCaseStudy = async (currentId)=>{
    if (!currentId) return null;
    try {
        // Fetch all case studies sorted by date desc (lightweight, no content needed)
        const { caseStudies } = await getCaseStudiesPage({
            page: 1,
            perPage: 100,
            orderby: "date",
            order: "desc"
        });
        if (!caseStudies.length) return null;
        const currentIndex = caseStudies.findIndex((cs)=>String(cs.id) === String(currentId) || String(cs.slug) === String(currentId));
        // If current not found or is the last one, return null (do not wrap)
        if (currentIndex === -1 || currentIndex >= caseStudies.length - 1) {
            return null;
        }
        const nextIndex = currentIndex + 1;
        const next = caseStudies[nextIndex];
        return {
            title: next.title,
            href: `/case-study/${next.slug}`
        };
    } catch (error) {
        console.error("Error fetching next case study:", error);
        return null;
    }
};
O��

}���|�����������const WORKS_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const getTechnologies = async ()=>{
    const url = `${WORKS_API_BASE}/technologies`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching technologies:", error);
        return [];
    }
};
const WORKS_FALLBACK_IMAGE = "/assets/img/portfolio/work-2.png";
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || WORKS_FALLBACK_IMAGE;
};
const formatDate = (value)=>{
    if (!value) return "";
    return new Intl.DateTimeFormat("en", {
        month: "short",
        year: "numeric"
    }).format(new Date(value));
};
const getTechnologyNames = (item)=>{
    const termGroups = item?._embedded?.["wp:term"] || [];
    for (const group of termGroups){
        if (Array.isArray(group) && group.length > 0 && group[0]?.taxonomy === "technology") {
            return group.map((t)=>decodeHtml(t.name)).join(", ");
        }
    }
    return "";
};
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const normalizeWpCaseStudy = (item)=>{
    const featuredImage = getFeaturedImage(item);
    const techNames = getTechnologyNames(item);
    return {
        id: item.id,
        slug: item.slug,
        title: decodeHtml(item.title?.rendered || ""),
        cat: techNames || (item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "Design"),
        date: item.meta?.zini_date ? decodeHtml(item.meta.zini_date) : formatDate(item.date),
        img: featuredImage,
        imgPopup: featuredImage,
        dataId: `work-${item.id}`,
        client: item.meta?.zini_client ? decodeHtml(item.meta.zini_client) : "",
        team: item.meta?.zini_team ? decodeHtml(item.meta.zini_team) : "",
        services: item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "",
        technologies: item.technologies || [],
        content: normalizeContent(item.content?.rendered || ""),
        excerpt: decodeHtml(item.excerpt?.rendered || "").replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim()
    };
};
const WORKS_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const buildCaseStudiesUrl = ({ page = WORKS_LIST_FILTERS.page, perPage = WORKS_LIST_FILTERS.perPage, orderby = WORKS_LIST_FILTERS.orderby, order = WORKS_LIST_FILTERS.order, technologies } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage)
    });
    if (orderby) {
        params.set("orderby", orderby);
    }
    if (order) {
        params.set("order", order);
    }
    if (technologies) {
        params.set("technologies", String(technologies));
    }
    return `${WORKS_API_BASE}/case-studies?${params.toString()}`;
};
const getCaseStudiesPage = async (filters = {})=>{
    const url = buildCaseStudiesUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                caseStudies: [],
                totalPages: 0,
                total: 0
            };
        }
        const data = await response.json();
        return {
            caseStudies: Array.isArray(data) ? data.map((item)=>normalizeWpCaseStudy(item)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        console.error("Error fetching case studies page:", error);
        return {
            caseStudies: [],
            totalPages: 0,
            total: 0
        };
    }
};
const getCaseStudies = async (filters = {})=>{
    const { caseStudies } = await getCaseStudiesPage(filters);
    return caseStudies;
};
const getCaseStudyById = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const params = new URLSearchParams();
    params.set("_embed", "1");
    const url = isNumeric ? `${WORKS_API_BASE}/case-studies/${idOrSlug}?${params.toString()}` : `${WORKS_API_BASE}/case-studies?slug=${encodeURIComponent(idOrSlug)}&${params.toString()}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpCaseStudy(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpCaseStudy(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching case study by ID/slug:", error);
        return null;
    }
};
const getNextCaseStudy = async (currentId)=>{
    if (!currentId) return null;
    try {
        // Fetch all case studies sorted by date desc (lightweight, no content needed)
        const { caseStudies } = await getCaseStudiesPage({
            page: 1,
            perPage: 100,
            orderby: "date",
            order: "desc"
        });
        if (!caseStudies.length) return null;
        const currentIndex = caseStudies.findIndex((cs)=>String(cs.id) === String(currentId) || String(cs.slug) === String(currentId));
        // If current not found or is the last one, return null (do not wrap)
        if (currentIndex === -1 || currentIndex >= caseStudies.length - 1) {
            return null;
        }
        const nextIndex = currentIndex + 1;
        const next = caseStudies[nextIndex];
        return {
            title: next.title,
            href: `/case-study/${next.slug}`
        };
    } catch (error) {
        console.error("Error fetching next case study:", error);
        return null;
    }
};
��� const WORKS_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
export const getTechnologies = async ()=>{
    const url = `${WORKS_API_BASE}/technologies`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching technologies:", error);
        return [];
    }
};
const WORKS_FALLBACK_IMAGE = "/assets/img/portfolio/work-2.png";
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || WORKS_FALLBACK_IMAGE;
};
const formatDate = (value)=>{
    if (!value) return "";
    return new Intl.DateTimeFormat("en", {
        month: "short",
        year: "numeric"
    }).format(new Date(value));
};
const getTechnologyNames = (item)=>{
    const termGroups = item?._embedded?.["wp:term"] || [];
    for (const group of termGroups){
        if (Array.isArray(group) && group.length > 0 && group[0]?.taxonomy === "technology") {
            return group.map((t)=>decodeHtml(t.name)).join(", ");
        }
    }
    return "";
};
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
export const normalizeWpCaseStudy = (item)=>{
    const featuredImage = getFeaturedImage(item);
    const techNames = getTechnologyNames(item);
    return {
        id: item.id,
        slug: item.slug,
        title: decodeHtml(item.title?.rendered || ""),
        cat: techNames || (item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "Design"),
        date: item.meta?.zini_date ? decodeHtml(item.meta.zini_date) : formatDate(item.date),
        img: featuredImage,
        imgPopup: featuredImage,
        dataId: `work-${item.id}`,
        client: item.meta?.zini_client ? decodeHtml(item.meta.zini_client) : "",
        team: item.meta?.zini_team ? decodeHtml(item.meta.zini_team) : "",
        services: item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "",
        technologies: item.technologies || [],
        content: normalizeContent(item.content?.rendered || ""),
        excerpt: decodeHtml(item.excerpt?.rendered || "").replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim()
    };
};
export const WORKS_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
export const buildCaseStudiesUrl = ({ page = WORKS_LIST_FILTERS.page, perPage = WORKS_LIST_FILTERS.perPage, orderby = WORKS_LIST_FILTERS.orderby, order = WORKS_LIST_FILTERS.order, technologies } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage)
    });
    if (orderby) {
        params.set("orderby", orderby);
    }
    if (order) {
        params.set("order", order);
    }
    if (technologies) {
        params.set("technologies", String(technologies));
    }
    return `${WORKS_API_BASE}/case-studies?${params.toString()}`;
};
export const getCaseStudiesPage = async (filters = {})=>{
    const url = buildCaseStudiesUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                caseStudies: [],
                totalPages: 0,
                total: 0
            };
        }
        const data = await response.json();
        return {
            caseStudies: Array.isArray(data) ? data.map((item)=>normalizeWpCaseStudy(item)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        console.error("Error fetching case studies page:", error);
        return {
            caseStudies: [],
            totalPages: 0,
            total: 0
        };
    }
};
export const getCaseStudies = async (filters = {})=>{
    const { caseStudies } = await getCaseStudiesPage(filters);
    return caseStudies;
};
export const getCaseStudyById = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const params = new URLSearchParams();
    params.set("_embed", "1");
    const url = isNumeric ? `${WORKS_API_BASE}/case-studies/${idOrSlug}?${params.toString()}` : `${WORKS_API_BASE}/case-studies?slug=${encodeURIComponent(idOrSlug)}&${params.toString()}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpCaseStudy(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpCaseStudy(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching case study by ID/slug:", error);
        return null;
    }
};
export const getNextCaseStudy = async (currentId)=>{
    if (!currentId) return null;
    try {
        // Fetch all case studies sorted by date desc (lightweight, no content needed)
        const { caseStudies } = await getCaseStudiesPage({
            page: 1,
            perPage: 100,
            orderby: "date",
            order: "desc"
        });
        if (!caseStudies.length) return null;
        const currentIndex = caseStudies.findIndex((cs)=>String(cs.id) === String(currentId) || String(cs.slug) === String(currentId));
        // If current not found or is the last one, return null (do not wrap)
        if (currentIndex === -1 || currentIndex >= caseStudies.length - 1) {
            return null;
        }
        const nextIndex = currentIndex + 1;
        const next = caseStudies[nextIndex];
        return {
            title: next.title,
            href: `/case-study/${next.slug}`
        };
    } catch (error) {
        console.error("Error fetching next case study:", error);
        return null;
    }
};
�492498undefined33433349undefined43704376undefined44774483undefined50945100undefined60126018undefined61566162undefined71687174undefinedbIT_?H����AJ�@OI
X
�
�
9B����QZ����[jA���worksApi_htmlEntities�worksApi_decodeHtml���worksApi_getFeaturedImage�worksApi_formatDate��worksApi_normalizeContent����������+
;// CONCATENATED MODULE: ./app/sitemap.js
�
�webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSourcehimport { SITE_CONFIG } from "../data/seo";
import { getBlogPosts } from "../data/blogApi";
import { getServices } from "../data/servicesApi";
import { getCaseStudies } from "../data/worksApi";
export default async function sitemap() {
    const baseUrl = SITE_CONFIG.url;
    // 1. Fetch dynamic data for routes
    const [posts, services, caseStudies] = await Promise.all([
        getBlogPosts({
            perPage: 100
        }).catch(()=>[]),
        getServices().catch(()=>[]),
        getCaseStudies({
            perPage: 100
        }).catch(()=>[])
    ]);
    // 2. Define static routes
    const staticPaths = [
        "",
        "/about-us",
        "/about-me",
        "/contact",
        "/faq",
        "/pricing",
        "/privacy-policy",
        "/refund-returns",
        "/team",
        "/services",
        "/case-studies",
        "/blogs"
    ];
    const staticRoutes = staticPaths.map((route)=>({
            url: `${baseUrl}${route}`,
            lastModified: new Date().toISOString(),
            changeFrequency: route === "" ? "daily" : "weekly",
            priority: route === "" ? 1.0 : 0.8
        }));
    // 3. Map dynamic blog posts (dynamic slugs)
    const postRoutes = posts.map((post)=>({
            url: `${baseUrl}/blog/${post.slug || post.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 4. Map dynamic services (dynamic slugs)
    const serviceRoutes = services.map((service)=>({
            url: `${baseUrl}/service/${service.slug || service.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 5. Map dynamic case studies (dynamic slugs)
    const caseStudyRoutes = caseStudies.map((work)=>({
            url: `${baseUrl}/case-study/${work.slug || work.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    return [
        ...staticRoutes,
        ...postRoutes,
        ...serviceRoutes,
        ...caseStudyRoutes
    ];
}
	c)+Y[L������	�����������__WEBPACK_MODULE_REFERENCE__4_5b22534954455f434f4e464947225d_asiSafe1__._�__WEBPACK_MODULE_REFERENCE__5_5b22676574426c6f67506f737473225d_call_directImport_asiSafe1__._�__WEBPACK_MODULE_REFERENCE__6_5b226765745365727669636573225d_call_directImport_asiSafe1__._�__WEBPACK_MODULE_REFERENCE__7_5b226765744361736553747564696573225d_call_directImport_asiSafe1__._��



async function sitemap() {
    const baseUrl = __WEBPACK_MODULE_REFERENCE__4_5b22534954455f434f4e464947225d_asiSafe1__._.url;
    // 1. Fetch dynamic data for routes
    const [posts, services, caseStudies] = await Promise.all([
        __WEBPACK_MODULE_REFERENCE__5_5b22676574426c6f67506f737473225d_call_directImport_asiSafe1__._({
            perPage: 100
        }).catch(()=>[]),
        __WEBPACK_MODULE_REFERENCE__6_5b226765745365727669636573225d_call_directImport_asiSafe1__._().catch(()=>[]),
        __WEBPACK_MODULE_REFERENCE__7_5b226765744361736553747564696573225d_call_directImport_asiSafe1__._({
            perPage: 100
        }).catch(()=>[])
    ]);
    // 2. Define static routes
    const staticPaths = [
        "",
        "/about-us",
        "/about-me",
        "/contact",
        "/faq",
        "/pricing",
        "/privacy-policy",
        "/refund-returns",
        "/team",
        "/services",
        "/case-studies",
        "/blogs"
    ];
    const staticRoutes = staticPaths.map((route)=>({
            url: `${baseUrl}${route}`,
            lastModified: new Date().toISOString(),
            changeFrequency: route === "" ? "daily" : "weekly",
            priority: route === "" ? 1.0 : 0.8
        }));
    // 3. Map dynamic blog posts (dynamic slugs)
    const postRoutes = posts.map((post)=>({
            url: `${baseUrl}/blog/${post.slug || post.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 4. Map dynamic services (dynamic slugs)
    const serviceRoutes = services.map((service)=>({
            url: `${baseUrl}/service/${service.slug || service.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 5. Map dynamic case studies (dynamic slugs)
    const caseStudyRoutes = caseStudies.map((work)=>({
            url: `${baseUrl}/case-study/${work.slug || work.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    return [
        ...staticRoutes,
        ...postRoutes,
        ...serviceRoutes,
        ...caseStudyRoutes
    ];
}
���himport { SITE_CONFIG } from "../data/seo";
import { getBlogPosts } from "../data/blogApi";
import { getServices } from "../data/servicesApi";
import { getCaseStudies } from "../data/worksApi";
export default async function sitemap() {
    const baseUrl = SITE_CONFIG.url;
    // 1. Fetch dynamic data for routes
    const [posts, services, caseStudies] = await Promise.all([
        getBlogPosts({
            perPage: 100
        }).catch(()=>[]),
        getServices().catch(()=>[]),
        getCaseStudies({
            perPage: 100
        }).catch(()=>[])
    ]);
    // 2. Define static routes
    const staticPaths = [
        "",
        "/about-us",
        "/about-me",
        "/contact",
        "/faq",
        "/pricing",
        "/privacy-policy",
        "/refund-returns",
        "/team",
        "/services",
        "/case-studies",
        "/blogs"
    ];
    const staticRoutes = staticPaths.map((route)=>({
            url: `${baseUrl}${route}`,
            lastModified: new Date().toISOString(),
            changeFrequency: route === "" ? "daily" : "weekly",
            priority: route === "" ? 1.0 : 0.8
        }));
    // 3. Map dynamic blog posts (dynamic slugs)
    const postRoutes = posts.map((post)=>({
            url: `${baseUrl}/blog/${post.slug || post.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 4. Map dynamic services (dynamic slugs)
    const serviceRoutes = services.map((service)=>({
            url: `${baseUrl}/service/${service.slug || service.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 5. Map dynamic case studies (dynamic slugs)
    const caseStudyRoutes = caseStudies.map((work)=>({
            url: `${baseUrl}/case-study/${work.slug || work.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    return [
        ...staticRoutes,
        ...postRoutes,
        ...serviceRoutes,
        ...caseStudyRoutes
    ];
}
�041undefined4389undefined91140undefined142191undefined193207undefined255265__WEBPACK_MODULE_REFERENCE__4_5b22534954455f434f4e464947225d_asiSafe1__._undefined383394__WEBPACK_MODULE_REFERENCE__5_5b22676574426c6f67506f737473225d_call_directImport_asiSafe1__._undefined457467__WEBPACK_MODULE_REFERENCE__6_5b226765745365727669636573225d_call_directImport_asiSafe1__._undefined494507__WEBPACK_MODULE_REFERENCE__7_5b226765744361736553747564696573225d_call_directImport_asiSafe1__._undefineda3{E�M��a�seo/* SITE_CONFIG */.ep�getBlogPosts�getServices�getCaseStudiesO
// EXTERNAL MODULE: ./node_modules/next/dist/build/webpack/loaders/metadata/resolve-route-data.js
var resolve_route_data = __webpack_require__(57252);
;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__
6�webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource@import { NextResponse } from 'next/server'
import * as userland from "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"
import { resolveRouteData } from 'next/dist/build/webpack/loaders/metadata/resolve-route-data'

const sitemapModule = { ...userland }
const handler = sitemapModule.default
const generateSitemaps = sitemapModule.generateSitemaps
const contentType = "application/xml"
const fileType = "sitemap"


  if (typeof handler !== 'function') {
    throw new Error('Default export is missing in "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"')
  }
  


export * from "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"

export async function GET(_, ctx) {
  const { __metadata_id__ = [], ...params } = ctx.params || {}
  const targetId = __metadata_id__[0]
  let id = undefined
  const sitemaps = generateSitemaps ? await generateSitemaps() : null

  if (sitemaps) {
    id = sitemaps.find((item) => {
      if (process.env.NODE_ENV !== 'production') {
        if (item?.id == null) {
          throw new Error('id property is required for every item returned from generateSitemaps')
        }
      }
      return item.id.toString() === targetId
    })?.id
    if (id == null) {
      return new NextResponse('Not Found', {
        status: 404,
      })
    }
  }

  const data = await handler({ id })
  const content = resolveRouteData(data, fileType)

  return new NextResponse(content, {
    headers: {
      'Content-Type': contentType,
      'Cache-Control': "public, max-age=0, must-revalidate",
    },
  })
}


c)+R���
d������	z�������__WEBPACK_MODULE_REFERENCE__8_ns_asiSafe1__._���false�{}�__WEBPACK_MODULE_REFERENCE__3_5b224e657874526573706f6e7365225d_directImport_asiSafe1__._�__WEBPACK_MODULE_REFERENCE__9_5b227265736f6c7665526f75746544617461225d_call_directImport_asiSafe1__._��U



const sitemapModule = { ...__WEBPACK_MODULE_REFERENCE__8_ns_asiSafe1__._ }
const handler = sitemapModule.default
const generateSitemaps = sitemapModule.generateSitemaps
const contentType = "application/xml"
const fileType = "sitemap"


  if (typeof handler !== 'function') {
    throw new Error('Default export is missing in "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"')
  }
  




async function GET(_, ctx) {
  const { __metadata_id__ = [], ...params } = ctx.params || {}
  const targetId = __metadata_id__[0]
  let id = undefined
  const sitemaps = generateSitemaps ? await generateSitemaps() : null

  if (sitemaps) {
    id = sitemaps.find((item) => {
      if (false) {}
      return item.id.toString() === targetId
    })?.id
    if (id == null) {
      return new __WEBPACK_MODULE_REFERENCE__3_5b224e657874526573706f6e7365225d_directImport_asiSafe1__._('Not Found', {
        status: 404,
      })
    }
  }

  const data = await handler({ id })
  const content = __WEBPACK_MODULE_REFERENCE__9_5b227265736f6c7665526f75746544617461225d_call_directImport_asiSafe1__._(data, fileType)

  return new __WEBPACK_MODULE_REFERENCE__3_5b224e657874526573706f6e7365225d_directImport_asiSafe1__._(content, {
    headers: {
      'Content-Type': contentType,
      'Cache-Control': "public, max-age=0, must-revalidate",
    },
  })
}


���@import { NextResponse } from 'next/server'
import * as userland from "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"
import { resolveRouteData } from 'next/dist/build/webpack/loaders/metadata/resolve-route-data'

const sitemapModule = { ...userland }
const handler = sitemapModule.default
const generateSitemaps = sitemapModule.generateSitemaps
const contentType = "application/xml"
const fileType = "sitemap"


  if (typeof handler !== 'function') {
    throw new Error('Default export is missing in "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"')
  }
  


export * from "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"

export async function GET(_, ctx) {
  const { __metadata_id__ = [], ...params } = ctx.params || {}
  const targetId = __metadata_id__[0]
  let id = undefined
  const sitemaps = generateSitemaps ? await generateSitemaps() : null

  if (sitemaps) {
    id = sitemaps.find((item) => {
      if (process.env.NODE_ENV !== 'production') {
        if (item?.id == null) {
          throw new Error('id property is required for every item returned from generateSitemaps')
        }
      }
      return item.id.toString() === targetId
    })?.id
    if (id == null) {
      return new NextResponse('Not Found', {
        status: 404,
      })
    }
  }

  const data = await handler({ id })
  const content = resolveRouteData(data, fileType)

  return new NextResponse(content, {
    headers: {
      'Content-Type': contentType,
      'Cache-Control': "public, max-age=0, must-revalidate",
    },
  })
}


�041undefined43141undefined143236undefined266273__WEBPACK_MODULE_REFERENCE__8_ns_asiSafe1__._undefined612698undefined701707undefined9931029falseundefined10321181{}undefined12781289__WEBPACK_MODULE_REFERENCE__3_5b224e657874526573706f6e7365225d_directImport_asiSafe1__._undefined14021417__WEBPACK_MODULE_REFERENCE__9_5b227265736f6c7665526f75746544617461225d_call_directImport_asiSafe1__._undefined14491460__WEBPACK_MODULE_REFERENCE__3_5b224e657874526573706f6e7365225d_directImport_asiSafe1__._undefinedaKE&}�Rr��sitemap_namespaceObject�server.NextResponse�(0,resolve_route_data.resolveRouteData)��
;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?page=%2Fsitemap.xml%2Froute&name=app%2Fsitemap.xml%2Froute&pagePath=private-next-app-dir%2Fsitemap.js&appDir=G%3A%5Czinisoft%5Czinisoft_beta%5Czinisoft.net%5Cfrontend-v3%5Capp&appPaths=%2Fsitemap&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!
��webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource�import { AppRouteRouteModule } from "next/dist/server/future/route-modules/app-route/module.compiled";
import { RouteKind } from "next/dist/server/future/route-kind";
import { patchFetch as _patchFetch } from "next/dist/server/lib/patch-fetch";
import * as userland from "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__";
// We inject the nextConfigOutput here so that we can use them in the route
// module.
const nextConfigOutput = ""
const routeModule = new AppRouteRouteModule({
    definition: {
        kind: RouteKind.APP_ROUTE,
        page: "/sitemap.xml/route",
        pathname: "/sitemap.xml",
        filename: "sitemap",
        bundlePath: "app/sitemap.xml/route"
    },
    resolvedPagePath: "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__",
    nextConfigOutput,
    userland
});
// Pull out the exports that we need to expose from the module. This should
// be eliminated when we've moved the other routes to the new format. These
// are used to hook into the route.
const { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout } = routeModule;
const originalPathname = "/sitemap.xml/route";
function patchFetch() {
    return _patchFetch({
        serverHooks,
        staticGenerationAsyncStorage
    });
}
export { routeModule, requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout, originalPathname, patchFetch,  };

//# sourceMappingURL=app-route.js.map	aegN�����@Rv~�����~�����__WEBPACK_MODULE_REFERENCE__0_5b22417070526f757465526f7574654d6f64756c65225d_directImport_asiSafe1__._�__WEBPACK_MODULE_REFERENCE__1_5b22526f7574654b696e64225d_asiSafe1__._�: __WEBPACK_MODULE_REFERENCE__10_ns_asiSafe1__._�__WEBPACK_MODULE_REFERENCE__2_5b2270617463684665746368225d_call_directImport_asiSafe1__._��e



// We inject the nextConfigOutput here so that we can use them in the route
// module.
const nextConfigOutput = ""
const routeModule = new __WEBPACK_MODULE_REFERENCE__0_5b22417070526f757465526f7574654d6f64756c65225d_directImport_asiSafe1__._({
    definition: {
        kind: __WEBPACK_MODULE_REFERENCE__1_5b22526f7574654b696e64225d_asiSafe1__._.APP_ROUTE,
        page: "/sitemap.xml/route",
        pathname: "/sitemap.xml",
        filename: "sitemap",
        bundlePath: "app/sitemap.xml/route"
    },
    resolvedPagePath: "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__",
    nextConfigOutput,
    userland: __WEBPACK_MODULE_REFERENCE__10_ns_asiSafe1__._
});
// Pull out the exports that we need to expose from the module. This should
// be eliminated when we've moved the other routes to the new format. These
// are used to hook into the route.
const { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout } = routeModule;
const originalPathname = "/sitemap.xml/route";
function patchFetch() {
    return __WEBPACK_MODULE_REFERENCE__2_5b2270617463684665746368225d_call_directImport_asiSafe1__._({
        serverHooks,
        staticGenerationAsyncStorage
    });
}


//# sourceMappingURL=app-route.js.map����import { AppRouteRouteModule } from "next/dist/server/future/route-modules/app-route/module.compiled";
import { RouteKind } from "next/dist/server/future/route-kind";
import { patchFetch as _patchFetch } from "next/dist/server/lib/patch-fetch";
import * as userland from "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__";
// We inject the nextConfigOutput here so that we can use them in the route
// module.
const nextConfigOutput = ""
const routeModule = new AppRouteRouteModule({
    definition: {
        kind: RouteKind.APP_ROUTE,
        page: "/sitemap.xml/route",
        pathname: "/sitemap.xml",
        filename: "sitemap",
        bundlePath: "app/sitemap.xml/route"
    },
    resolvedPagePath: "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__",
    nextConfigOutput,
    userland
});
// Pull out the exports that we need to expose from the module. This should
// be eliminated when we've moved the other routes to the new format. These
// are used to hook into the route.
const { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout } = routeModule;
const originalPathname = "/sitemap.xml/route";
function patchFetch() {
    return _patchFetch({
        serverHooks,
        staticGenerationAsyncStorage
    });
}
export { routeModule, requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout, originalPathname, patchFetch,  };

//# sourceMappingURL=app-route.js.map�0101undefined103165undefined167243undefined245435undefined576594__WEBPACK_MODULE_REFERENCE__0_5b22417070526f757465526f7574654d6f64756c65225d_directImport_asiSafe1__._undefined630638__WEBPACK_MODULE_REFERENCE__1_5b22526f7574654b696e64225d_asiSafe1__._undefined10231022: __WEBPACK_MODULE_REFERENCE__10_ns_asiSafe1__._undefined14241434__WEBPACK_MODULE_REFERENCE__2_5b2270617463684665746368225d_call_directImport_asiSafe1__._undefined15061662undefinedG��\����module_compiled.AppRouteRouteModule�route_kind/* RouteKind */.x�sitemap_next_metadata_route_namespaceObject�(0,patch_fetch.patchFetch)��buffer�source�size�maps�hash��// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  headerHooks: () => (/* binding */ headerHooks),
  originalPathname: () => (/* binding */ originalPathname),
  patchFetch: () => (/* binding */ patchFetch),
  requestAsyncStorage: () => (/* binding */ requestAsyncStorage),
  routeModule: () => (/* binding */ routeModule),
  serverHooks: () => (/* binding */ serverHooks),
  staticGenerationAsyncStorage: () => (/* binding */ staticGenerationAsyncStorage),
  staticGenerationBailout: () => (/* binding */ staticGenerationBailout)
});

// NAMESPACE OBJECT: ./app/sitemap.js
var sitemap_namespaceObject = {};
__webpack_require__.r(sitemap_namespaceObject);
__webpack_require__.d(sitemap_namespaceObject, {
  "default": () => (sitemap)
});

// NAMESPACE OBJECT: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__
var sitemap_next_metadata_route_namespaceObject = {};
__webpack_require__.r(sitemap_next_metadata_route_namespaceObject);
__webpack_require__.d(sitemap_next_metadata_route_namespaceObject, {
  GET: () => (GET)
});

// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-modules/app-route/module.compiled.js
var module_compiled = __webpack_require__(95419);
// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-kind.js
var route_kind = __webpack_require__(69108);
// EXTERNAL MODULE: ./node_modules/next/dist/server/lib/patch-fetch.js
var patch_fetch = __webpack_require__(99678);
// EXTERNAL MODULE: ./node_modules/next/server.js
var server = __webpack_require__(79647);
// EXTERNAL MODULE: ./data/seo.js
var seo = __webpack_require__(62486);
;// CONCATENATED MODULE: ./data/blogApi.js
const BLOG_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2/posts";
const BLOG_FALLBACK_IMAGE = "/assets/img/blog/grid/post-1.png";
const BLOG_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (value = "")=>decodeHtml(value.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim());
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const formatDate = (value)=>{
    if (!value) {
        return "";
    }
    return new Intl.DateTimeFormat("en", {
        month: "short",
        day: "numeric",
        year: "numeric"
    }).format(new Date(value));
};
const getFeaturedImage = (post)=>{
    const media = post?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || BLOG_FALLBACK_IMAGE;
};
const getCategory = (post)=>post?._embedded?.["wp:term"]?.[0]?.[0]?.name || "Blog";
const getTags = (post)=>{
    const terms = post?._embedded?.["wp:term"]?.[1] || [];
    return terms.map((term)=>term.name);
};
const getAuthorName = (post)=>post?._embedded?.author?.[0]?.name || "Admin";
const getAuthorAvatar = (post)=>post?._embedded?.author?.[0]?.avatar_urls?.["96"] || "/assets/img/root/author-avatar.png";
const getAuthorDescription = (post)=>post?._embedded?.author?.[0]?.description || "";
const appendListParam = (params, name, values = [])=>{
    const list = Array.isArray(values) ? values : [
        values
    ];
    list.filter(Boolean).forEach((value)=>{
        params.append(`${name}[]`, String(value));
    });
};
const buildBlogPostsUrl = ({ page = BLOG_LIST_FILTERS.page, perPage = BLOG_LIST_FILTERS.perPage, orderby = BLOG_LIST_FILTERS.orderby, order = BLOG_LIST_FILTERS.order, sticky, search, searchColumns, categories, status, author, exclude } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage),
        orderby,
        order
    });
    if (typeof sticky === "boolean") {
        params.set("sticky", String(sticky));
    }
    if (search) {
        params.set("search", search);
    }
    appendListParam(params, "search_columns", searchColumns);
    appendListParam(params, "categories", categories);
    appendListParam(params, "status", status);
    appendListParam(params, "author", author);
    appendListParam(params, "exclude", exclude);
    return `${BLOG_API_BASE}?${params.toString()}`;
};
const normalizeWpPost = (post, { includeContent = false } = {})=>({
        id: post.id,
        slug: post.slug,
        href: `/blog/${post.slug}`,
        sourceUrl: post.link,
        img: getFeaturedImage(post),
        alt: stripHtml(post.title?.rendered || "Blog image"),
        cat: getCategory(post),
        date: formatDate(post.date),
        title: stripHtml(post.title?.rendered || ""),
        description: stripHtml(post.excerpt?.rendered || ""),
        descriptions: stripHtml(post.excerpt?.rendered || ""),
        categoryIds: post.categories || [],
        tagIds: post.tags || [],
        tags: getTags(post),
        authorId: post.author,
        author: getAuthorName(post),
        authorAvatar: getAuthorAvatar(post),
        authorDescription: getAuthorDescription(post),
        content: includeContent ? normalizeContent(post.content?.rendered || "") : ""
    });
const getBlogPostsPage = async (filters = {})=>{
    const url = buildBlogPostsUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                posts: [],
                totalPages: 0,
                total: 0
            };
        }
        const posts = await response.json();
        return {
            posts: Array.isArray(posts) ? posts.map((post)=>normalizeWpPost(post)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        return {
            posts: [],
            totalPages: 0,
            total: 0
        };
    }
};
const getBlogPosts = async (filters = {})=>{
    const { posts } = await getBlogPostsPage(filters);
    return posts;
};
const getBlogPostById = async (idOrSlug)=>{
    if (!idOrSlug) {
        return null;
    }
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${BLOG_API_BASE}/${idOrSlug}?_embed=1` : `${BLOG_API_BASE}?slug=${encodeURIComponent(idOrSlug)}&_embed=1`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpPost(data, {
                includeContent: true
            });
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpPost(data[0], {
                    includeContent: true
                });
            }
            return null;
        }
    } catch (error) {
        return null;
    }
};
const getRelatedBlogPosts = async (post, { perPage = 2 } = {})=>{
    if (!post?.id) {
        return [];
    }
    const categories = post.categoryIds?.length ? post.categoryIds : undefined;
    const { posts } = await getBlogPostsPage({
        page: 1,
        perPage,
        orderby: "date",
        order: "desc",
        categories,
        exclude: [
            post.id
        ],
        sticky: false
    });
    return posts;
};

;// CONCATENATED MODULE: ./data/servicesApi.js
const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const servicesApi_htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const servicesApi_decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>servicesApi_htmlEntities[entity] || entity);
const servicesApi_stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? servicesApi_stripHtml(servicesApi_decodeHtml(match[1])) : "";
};
const servicesApi_getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = servicesApi_decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ const normalizeWpService = (item)=>{
    const title = servicesApi_decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = servicesApi_stripHtml(servicesApi_decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = servicesApi_getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = servicesApi_decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? servicesApi_decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? servicesApi_decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? servicesApi_decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? servicesApi_decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: servicesApi_decodeHtml(item.name || ""),
                    description: servicesApi_decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};

;// CONCATENATED MODULE: ./data/worksApi.js
const WORKS_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const worksApi_htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const worksApi_decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>worksApi_htmlEntities[entity] || entity);
const getTechnologies = async ()=>{
    const url = `${WORKS_API_BASE}/technologies`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: worksApi_decodeHtml(item.name),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching technologies:", error);
        return [];
    }
};
const WORKS_FALLBACK_IMAGE = "/assets/img/portfolio/work-2.png";
const worksApi_getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || WORKS_FALLBACK_IMAGE;
};
const worksApi_formatDate = (value)=>{
    if (!value) return "";
    return new Intl.DateTimeFormat("en", {
        month: "short",
        year: "numeric"
    }).format(new Date(value));
};
const getTechnologyNames = (item)=>{
    const termGroups = item?._embedded?.["wp:term"] || [];
    for (const group of termGroups){
        if (Array.isArray(group) && group.length > 0 && group[0]?.taxonomy === "technology") {
            return group.map((t)=>worksApi_decodeHtml(t.name)).join(", ");
        }
    }
    return "";
};
const worksApi_normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const normalizeWpCaseStudy = (item)=>{
    const featuredImage = worksApi_getFeaturedImage(item);
    const techNames = getTechnologyNames(item);
    return {
        id: item.id,
        slug: item.slug,
        title: worksApi_decodeHtml(item.title?.rendered || ""),
        cat: techNames || (item.meta?.zini_services ? worksApi_decodeHtml(item.meta.zini_services) : "Design"),
        date: item.meta?.zini_date ? worksApi_decodeHtml(item.meta.zini_date) : worksApi_formatDate(item.date),
        img: featuredImage,
        imgPopup: featuredImage,
        dataId: `work-${item.id}`,
        client: item.meta?.zini_client ? worksApi_decodeHtml(item.meta.zini_client) : "",
        team: item.meta?.zini_team ? worksApi_decodeHtml(item.meta.zini_team) : "",
        services: item.meta?.zini_services ? worksApi_decodeHtml(item.meta.zini_services) : "",
        technologies: item.technologies || [],
        content: worksApi_normalizeContent(item.content?.rendered || ""),
        excerpt: worksApi_decodeHtml(item.excerpt?.rendered || "").replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim()
    };
};
const WORKS_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const buildCaseStudiesUrl = ({ page = WORKS_LIST_FILTERS.page, perPage = WORKS_LIST_FILTERS.perPage, orderby = WORKS_LIST_FILTERS.orderby, order = WORKS_LIST_FILTERS.order, technologies } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage)
    });
    if (orderby) {
        params.set("orderby", orderby);
    }
    if (order) {
        params.set("order", order);
    }
    if (technologies) {
        params.set("technologies", String(technologies));
    }
    return `${WORKS_API_BASE}/case-studies?${params.toString()}`;
};
const getCaseStudiesPage = async (filters = {})=>{
    const url = buildCaseStudiesUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                caseStudies: [],
                totalPages: 0,
                total: 0
            };
        }
        const data = await response.json();
        return {
            caseStudies: Array.isArray(data) ? data.map((item)=>normalizeWpCaseStudy(item)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        console.error("Error fetching case studies page:", error);
        return {
            caseStudies: [],
            totalPages: 0,
            total: 0
        };
    }
};
const getCaseStudies = async (filters = {})=>{
    const { caseStudies } = await getCaseStudiesPage(filters);
    return caseStudies;
};
const getCaseStudyById = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const params = new URLSearchParams();
    params.set("_embed", "1");
    const url = isNumeric ? `${WORKS_API_BASE}/case-studies/${idOrSlug}?${params.toString()}` : `${WORKS_API_BASE}/case-studies?slug=${encodeURIComponent(idOrSlug)}&${params.toString()}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpCaseStudy(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpCaseStudy(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching case study by ID/slug:", error);
        return null;
    }
};
const getNextCaseStudy = async (currentId)=>{
    if (!currentId) return null;
    try {
        // Fetch all case studies sorted by date desc (lightweight, no content needed)
        const { caseStudies } = await getCaseStudiesPage({
            page: 1,
            perPage: 100,
            orderby: "date",
            order: "desc"
        });
        if (!caseStudies.length) return null;
        const currentIndex = caseStudies.findIndex((cs)=>String(cs.id) === String(currentId) || String(cs.slug) === String(currentId));
        // If current not found or is the last one, return null (do not wrap)
        if (currentIndex === -1 || currentIndex >= caseStudies.length - 1) {
            return null;
        }
        const nextIndex = currentIndex + 1;
        const next = caseStudies[nextIndex];
        return {
            title: next.title,
            href: `/case-study/${next.slug}`
        };
    } catch (error) {
        console.error("Error fetching next case study:", error);
        return null;
    }
};

;// CONCATENATED MODULE: ./app/sitemap.js




async function sitemap() {
    const baseUrl = seo/* SITE_CONFIG */.ep.url;
    // 1. Fetch dynamic data for routes
    const [posts, services, caseStudies] = await Promise.all([
        getBlogPosts({
            perPage: 100
        }).catch(()=>[]),
        getServices().catch(()=>[]),
        getCaseStudies({
            perPage: 100
        }).catch(()=>[])
    ]);
    // 2. Define static routes
    const staticPaths = [
        "",
        "/about-us",
        "/about-me",
        "/contact",
        "/faq",
        "/pricing",
        "/privacy-policy",
        "/refund-returns",
        "/team",
        "/services",
        "/case-studies",
        "/blogs"
    ];
    const staticRoutes = staticPaths.map((route)=>({
            url: `${baseUrl}${route}`,
            lastModified: new Date().toISOString(),
            changeFrequency: route === "" ? "daily" : "weekly",
            priority: route === "" ? 1.0 : 0.8
        }));
    // 3. Map dynamic blog posts (dynamic slugs)
    const postRoutes = posts.map((post)=>({
            url: `${baseUrl}/blog/${post.slug || post.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 4. Map dynamic services (dynamic slugs)
    const serviceRoutes = services.map((service)=>({
            url: `${baseUrl}/service/${service.slug || service.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 5. Map dynamic case studies (dynamic slugs)
    const caseStudyRoutes = caseStudies.map((work)=>({
            url: `${baseUrl}/case-study/${work.slug || work.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    return [
        ...staticRoutes,
        ...postRoutes,
        ...serviceRoutes,
        ...caseStudyRoutes
    ];
}

// EXTERNAL MODULE: ./node_modules/next/dist/build/webpack/loaders/metadata/resolve-route-data.js
var resolve_route_data = __webpack_require__(57252);
;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__




const sitemapModule = { ...sitemap_namespaceObject }
const handler = sitemapModule.default
const generateSitemaps = sitemapModule.generateSitemaps
const contentType = "application/xml"
const fileType = "sitemap"


  if (typeof handler !== 'function') {
    throw new Error('Default export is missing in "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"')
  }
  




async function GET(_, ctx) {
  const { __metadata_id__ = [], ...params } = ctx.params || {}
  const targetId = __metadata_id__[0]
  let id = undefined
  const sitemaps = generateSitemaps ? await generateSitemaps() : null

  if (sitemaps) {
    id = sitemaps.find((item) => {
      if (false) {}
      return item.id.toString() === targetId
    })?.id
    if (id == null) {
      return new server.NextResponse('Not Found', {
        status: 404,
      })
    }
  }

  const data = await handler({ id })
  const content = (0,resolve_route_data.resolveRouteData)(data, fileType)

  return new server.NextResponse(content, {
    headers: {
      'Content-Type': contentType,
      'Cache-Control': "public, max-age=0, must-revalidate",
    },
  })
}



;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?page=%2Fsitemap.xml%2Froute&name=app%2Fsitemap.xml%2Froute&pagePath=private-next-app-dir%2Fsitemap.js&appDir=G%3A%5Czinisoft%5Czinisoft_beta%5Czinisoft.net%5Cfrontend-v3%5Capp&appPaths=%2Fsitemap&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!




// We inject the nextConfigOutput here so that we can use them in the route
// module.
const nextConfigOutput = ""
const routeModule = new module_compiled.AppRouteRouteModule({
    definition: {
        kind: route_kind/* RouteKind */.x.APP_ROUTE,
        page: "/sitemap.xml/route",
        pathname: "/sitemap.xml",
        filename: "sitemap",
        bundlePath: "app/sitemap.xml/route"
    },
    resolvedPagePath: "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__",
    nextConfigOutput,
    userland: sitemap_next_metadata_route_namespaceObject
});
// Pull out the exports that we need to expose from the module. This should
// be eliminated when we've moved the other routes to the new format. These
// are used to hook into the route.
const { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout } = routeModule;
const originalPathname = "/sitemap.xml/route";
function patchFetch() {
    return (0,patch_fetch.patchFetch)({
        serverHooks,
        staticGenerationAsyncStorage
    });
}


//# sourceMappingURL=app-route.js.map��{"finalSource":true}�map�bufferedMap`%ConcatSourceRawSource// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  headerHooks: () => (/* binding */ headerHooks),
  originalPathname: () => (/* binding */ originalPathname),
  patchFetch: () => (/* binding */ patchFetch),
  requestAsyncStorage: () => (/* binding */ requestAsyncStorage),
  routeModule: () => (/* binding */ routeModule),
  serverHooks: () => (/* binding */ serverHooks),
  staticGenerationAsyncStorage: () => (/* binding */ staticGenerationAsyncStorage),
  staticGenerationBailout: () => (/* binding */ staticGenerationBailout)
});

// NAMESPACE OBJECT: ./app/sitemap.js
var sitemap_namespaceObject = {};
__webpack_require__.r(sitemap_namespaceObject);
__webpack_require__.d(sitemap_namespaceObject, {
  "default": () => (sitemap)
});

// NAMESPACE OBJECT: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__
var sitemap_next_metadata_route_namespaceObject = {};
__webpack_require__.r(sitemap_next_metadata_route_namespaceObject);
__webpack_require__.d(sitemap_next_metadata_route_namespaceObject, {
  GET: () => (GET)
});

// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-modules/app-route/module.compiled.js
var module_compiled = __webpack_require__(95419);
// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-kind.js
var route_kind = __webpack_require__(69108);
// EXTERNAL MODULE: ./node_modules/next/dist/server/lib/patch-fetch.js
var patch_fetch = __webpack_require__(99678);
// EXTERNAL MODULE: ./node_modules/next/server.js
var server = __webpack_require__(79647);
// EXTERNAL MODULE: ./data/seo.js
var seo = __webpack_require__(62486);
;// CONCATENATED MODULE: ./data/blogApi.js

ReplaceSourceReplaceSourceRawSource�const BLOG_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2/posts";
const BLOG_FALLBACK_IMAGE = "/assets/img/blog/grid/post-1.png";
export const BLOG_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (value = "")=>decodeHtml(value.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim());
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const formatDate = (value)=>{
    if (!value) {
        return "";
    }
    return new Intl.DateTimeFormat("en", {
        month: "short",
        day: "numeric",
        year: "numeric"
    }).format(new Date(value));
};
const getFeaturedImage = (post)=>{
    const media = post?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || BLOG_FALLBACK_IMAGE;
};
const getCategory = (post)=>post?._embedded?.["wp:term"]?.[0]?.[0]?.name || "Blog";
const getTags = (post)=>{
    const terms = post?._embedded?.["wp:term"]?.[1] || [];
    return terms.map((term)=>term.name);
};
const getAuthorName = (post)=>post?._embedded?.author?.[0]?.name || "Admin";
const getAuthorAvatar = (post)=>post?._embedded?.author?.[0]?.avatar_urls?.["96"] || "/assets/img/root/author-avatar.png";
const getAuthorDescription = (post)=>post?._embedded?.author?.[0]?.description || "";
const appendListParam = (params, name, values = [])=>{
    const list = Array.isArray(values) ? values : [
        values
    ];
    list.filter(Boolean).forEach((value)=>{
        params.append(`${name}[]`, String(value));
    });
};
export const buildBlogPostsUrl = ({ page = BLOG_LIST_FILTERS.page, perPage = BLOG_LIST_FILTERS.perPage, orderby = BLOG_LIST_FILTERS.orderby, order = BLOG_LIST_FILTERS.order, sticky, search, searchColumns, categories, status, author, exclude } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage),
        orderby,
        order
    });
    if (typeof sticky === "boolean") {
        params.set("sticky", String(sticky));
    }
    if (search) {
        params.set("search", search);
    }
    appendListParam(params, "search_columns", searchColumns);
    appendListParam(params, "categories", categories);
    appendListParam(params, "status", status);
    appendListParam(params, "author", author);
    appendListParam(params, "exclude", exclude);
    return `${BLOG_API_BASE}?${params.toString()}`;
};
export const normalizeWpPost = (post, { includeContent = false } = {})=>({
        id: post.id,
        slug: post.slug,
        href: `/blog/${post.slug}`,
        sourceUrl: post.link,
        img: getFeaturedImage(post),
        alt: stripHtml(post.title?.rendered || "Blog image"),
        cat: getCategory(post),
        date: formatDate(post.date),
        title: stripHtml(post.title?.rendered || ""),
        description: stripHtml(post.excerpt?.rendered || ""),
        descriptions: stripHtml(post.excerpt?.rendered || ""),
        categoryIds: post.categories || [],
        tagIds: post.tags || [],
        tags: getTags(post),
        authorId: post.author,
        author: getAuthorName(post),
        authorAvatar: getAuthorAvatar(post),
        authorDescription: getAuthorDescription(post),
        content: includeContent ? normalizeContent(post.content?.rendered || "") : ""
    });
export const getBlogPostsPage = async (filters = {})=>{
    const url = buildBlogPostsUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                posts: [],
                totalPages: 0,
                total: 0
            };
        }
        const posts = await response.json();
        return {
            posts: Array.isArray(posts) ? posts.map((post)=>normalizeWpPost(post)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        return {
            posts: [],
            totalPages: 0,
            total: 0
        };
    }
};
export const getBlogPosts = async (filters = {})=>{
    const { posts } = await getBlogPostsPage(filters);
    return posts;
};
export const getBlogPostById = async (idOrSlug)=>{
    if (!idOrSlug) {
        return null;
    }
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${BLOG_API_BASE}/${idOrSlug}?_embed=1` : `${BLOG_API_BASE}?slug=${encodeURIComponent(idOrSlug)}&_embed=1`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpPost(data, {
                includeContent: true
            });
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpPost(data[0], {
                    includeContent: true
                });
            }
            return null;
        }
    } catch (error) {
        return null;
    }
};
export const getRelatedBlogPosts = async (post, { perPage = 2 } = {})=>{
    if (!post?.id) {
        return [];
    }
    const categories = post.categoryIds?.length ? post.categoryIds : undefined;
    const { posts } = await getBlogPostsPage({
        page: 1,
        perPage,
        orderby: "date",
        order: "desc",
        categories,
        exclude: [
            post.id
        ],
        sticky: false
    });
    return posts;
};
u136142undefined32513257undefined41354141undefined50375043undefined58645870undefined59925998undefined69296935undefined	RawSource0
;// CONCATENATED MODULE: ./data/servicesApi.js
��['const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
export const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ export const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ export const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ export const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ export const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ export const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};
f27462752undefined33263332undefined66136619undefined73437349undefined81578163undefined91759181undefined�6778servicesApi_htmlEntitiesundefined313322servicesApi_decodeHtmlundefined453464servicesApi_htmlEntitiesundefined492500servicesApi_stripHtmlundefined742750servicesApi_stripHtmlundefined752761servicesApi_decodeHtmlundefined789804servicesApi_getFeaturedImageundefined20312040servicesApi_decodeHtmlundefined33743383servicesApi_decodeHtmlundefined36953703servicesApi_stripHtmlundefined37053714servicesApi_decodeHtmlundefined37743789servicesApi_getFeaturedImageundefined39533962servicesApi_decodeHtmlundefined44494458servicesApi_decodeHtmlundefined45364545servicesApi_decodeHtmlundefined46284637servicesApi_decodeHtmlundefined47254734servicesApi_decodeHtmlundefined96969705servicesApi_decodeHtmlundefined97589767servicesApi_decodeHtmlundefinedRawSource-
;// CONCATENATED MODULE: ./data/worksApi.js
�� const WORKS_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
export const getTechnologies = async ()=>{
    const url = `${WORKS_API_BASE}/technologies`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching technologies:", error);
        return [];
    }
};
const WORKS_FALLBACK_IMAGE = "/assets/img/portfolio/work-2.png";
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || WORKS_FALLBACK_IMAGE;
};
const formatDate = (value)=>{
    if (!value) return "";
    return new Intl.DateTimeFormat("en", {
        month: "short",
        year: "numeric"
    }).format(new Date(value));
};
const getTechnologyNames = (item)=>{
    const termGroups = item?._embedded?.["wp:term"] || [];
    for (const group of termGroups){
        if (Array.isArray(group) && group.length > 0 && group[0]?.taxonomy === "technology") {
            return group.map((t)=>decodeHtml(t.name)).join(", ");
        }
    }
    return "";
};
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
export const normalizeWpCaseStudy = (item)=>{
    const featuredImage = getFeaturedImage(item);
    const techNames = getTechnologyNames(item);
    return {
        id: item.id,
        slug: item.slug,
        title: decodeHtml(item.title?.rendered || ""),
        cat: techNames || (item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "Design"),
        date: item.meta?.zini_date ? decodeHtml(item.meta.zini_date) : formatDate(item.date),
        img: featuredImage,
        imgPopup: featuredImage,
        dataId: `work-${item.id}`,
        client: item.meta?.zini_client ? decodeHtml(item.meta.zini_client) : "",
        team: item.meta?.zini_team ? decodeHtml(item.meta.zini_team) : "",
        services: item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "",
        technologies: item.technologies || [],
        content: normalizeContent(item.content?.rendered || ""),
        excerpt: decodeHtml(item.excerpt?.rendered || "").replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim()
    };
};
export const WORKS_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
export const buildCaseStudiesUrl = ({ page = WORKS_LIST_FILTERS.page, perPage = WORKS_LIST_FILTERS.perPage, orderby = WORKS_LIST_FILTERS.orderby, order = WORKS_LIST_FILTERS.order, technologies } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage)
    });
    if (orderby) {
        params.set("orderby", orderby);
    }
    if (order) {
        params.set("order", order);
    }
    if (technologies) {
        params.set("technologies", String(technologies));
    }
    return `${WORKS_API_BASE}/case-studies?${params.toString()}`;
};
export const getCaseStudiesPage = async (filters = {})=>{
    const url = buildCaseStudiesUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                caseStudies: [],
                totalPages: 0,
                total: 0
            };
        }
        const data = await response.json();
        return {
            caseStudies: Array.isArray(data) ? data.map((item)=>normalizeWpCaseStudy(item)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        console.error("Error fetching case studies page:", error);
        return {
            caseStudies: [],
            totalPages: 0,
            total: 0
        };
    }
};
export const getCaseStudies = async (filters = {})=>{
    const { caseStudies } = await getCaseStudiesPage(filters);
    return caseStudies;
};
export const getCaseStudyById = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const params = new URLSearchParams();
    params.set("_embed", "1");
    const url = isNumeric ? `${WORKS_API_BASE}/case-studies/${idOrSlug}?${params.toString()}` : `${WORKS_API_BASE}/case-studies?slug=${encodeURIComponent(idOrSlug)}&${params.toString()}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpCaseStudy(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpCaseStudy(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching case study by ID/slug:", error);
        return null;
    }
};
export const getNextCaseStudy = async (currentId)=>{
    if (!currentId) return null;
    try {
        // Fetch all case studies sorted by date desc (lightweight, no content needed)
        const { caseStudies } = await getCaseStudiesPage({
            page: 1,
            perPage: 100,
            orderby: "date",
            order: "desc"
        });
        if (!caseStudies.length) return null;
        const currentIndex = caseStudies.findIndex((cs)=>String(cs.id) === String(currentId) || String(cs.slug) === String(currentId));
        // If current not found or is the last one, return null (do not wrap)
        if (currentIndex === -1 || currentIndex >= caseStudies.length - 1) {
            return null;
        }
        const nextIndex = currentIndex + 1;
        const next = caseStudies[nextIndex];
        return {
            title: next.title,
            href: `/case-study/${next.slug}`
        };
    } catch (error) {
        console.error("Error fetching next case study:", error);
        return null;
    }
};
�492498undefined33433349undefined43704376undefined44774483undefined50945100undefined60126018undefined61566162undefined71687174undefined�7384worksApi_htmlEntitiesundefined319328worksApi_decodeHtmlundefined459470worksApi_htmlEntitiesundefined949958worksApi_decodeHtmlundefined12801295worksApi_getFeaturedImageundefined16011610worksApi_formatDateundefined20402049worksApi_decodeHtmlundefined21122127worksApi_normalizeContentundefined34013416worksApi_getFeaturedImageundefined35473556worksApi_decodeHtmlundefined36413650worksApi_decodeHtmlundefined37273736worksApi_decodeHtmlundefined37613770worksApi_formatDateundefined39213930worksApi_decodeHtmlundefined39984007worksApi_decodeHtmlundefined40814090worksApi_decodeHtmlundefined41874202worksApi_normalizeContentundefined42524261worksApi_decodeHtmlundefinedRawSource+
;// CONCATENATED MODULE: ./app/sitemap.js
��himport { SITE_CONFIG } from "../data/seo";
import { getBlogPosts } from "../data/blogApi";
import { getServices } from "../data/servicesApi";
import { getCaseStudies } from "../data/worksApi";
export default async function sitemap() {
    const baseUrl = SITE_CONFIG.url;
    // 1. Fetch dynamic data for routes
    const [posts, services, caseStudies] = await Promise.all([
        getBlogPosts({
            perPage: 100
        }).catch(()=>[]),
        getServices().catch(()=>[]),
        getCaseStudies({
            perPage: 100
        }).catch(()=>[])
    ]);
    // 2. Define static routes
    const staticPaths = [
        "",
        "/about-us",
        "/about-me",
        "/contact",
        "/faq",
        "/pricing",
        "/privacy-policy",
        "/refund-returns",
        "/team",
        "/services",
        "/case-studies",
        "/blogs"
    ];
    const staticRoutes = staticPaths.map((route)=>({
            url: `${baseUrl}${route}`,
            lastModified: new Date().toISOString(),
            changeFrequency: route === "" ? "daily" : "weekly",
            priority: route === "" ? 1.0 : 0.8
        }));
    // 3. Map dynamic blog posts (dynamic slugs)
    const postRoutes = posts.map((post)=>({
            url: `${baseUrl}/blog/${post.slug || post.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 4. Map dynamic services (dynamic slugs)
    const serviceRoutes = services.map((service)=>({
            url: `${baseUrl}/service/${service.slug || service.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 5. Map dynamic case studies (dynamic slugs)
    const caseStudyRoutes = caseStudies.map((work)=>({
            url: `${baseUrl}/case-study/${work.slug || work.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    return [
        ...staticRoutes,
        ...postRoutes,
        ...serviceRoutes,
        ...caseStudyRoutes
    ];
}
�041undefined4389undefined91140undefined142191undefined193207undefined255265__WEBPACK_MODULE_REFERENCE__4_5b22534954455f434f4e464947225d_asiSafe1__._undefined383394__WEBPACK_MODULE_REFERENCE__5_5b22676574426c6f67506f737473225d_call_directImport_asiSafe1__._undefined457467__WEBPACK_MODULE_REFERENCE__6_5b226765745365727669636573225d_call_directImport_asiSafe1__._undefined494507__WEBPACK_MODULE_REFERENCE__7_5b226765744361736553747564696573225d_call_directImport_asiSafe1__._undefined�51123seo/* SITE_CONFIG */.epundefined241333getBlogPostsundefined396486getServicesundefined513609getCaseStudiesundefinedRawSourceO
// EXTERNAL MODULE: ./node_modules/next/dist/build/webpack/loaders/metadata/resolve-route-data.js
var resolve_route_data = __webpack_require__(57252);
;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__
��@import { NextResponse } from 'next/server'
import * as userland from "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"
import { resolveRouteData } from 'next/dist/build/webpack/loaders/metadata/resolve-route-data'

const sitemapModule = { ...userland }
const handler = sitemapModule.default
const generateSitemaps = sitemapModule.generateSitemaps
const contentType = "application/xml"
const fileType = "sitemap"


  if (typeof handler !== 'function') {
    throw new Error('Default export is missing in "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"')
  }
  


export * from "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"

export async function GET(_, ctx) {
  const { __metadata_id__ = [], ...params } = ctx.params || {}
  const targetId = __metadata_id__[0]
  let id = undefined
  const sitemaps = generateSitemaps ? await generateSitemaps() : null

  if (sitemaps) {
    id = sitemaps.find((item) => {
      if (process.env.NODE_ENV !== 'production') {
        if (item?.id == null) {
          throw new Error('id property is required for every item returned from generateSitemaps')
        }
      }
      return item.id.toString() === targetId
    })?.id
    if (id == null) {
      return new NextResponse('Not Found', {
        status: 404,
      })
    }
  }

  const data = await handler({ id })
  const content = resolveRouteData(data, fileType)

  return new NextResponse(content, {
    headers: {
      'Content-Type': contentType,
      'Cache-Control': "public, max-age=0, must-revalidate",
    },
  })
}


�041undefined43141undefined143236undefined266273__WEBPACK_MODULE_REFERENCE__8_ns_asiSafe1__._undefined612698undefined701707undefined9931029falseundefined10321181{}undefined12781289__WEBPACK_MODULE_REFERENCE__3_5b224e657874526573706f6e7365225d_directImport_asiSafe1__._undefined14021417__WEBPACK_MODULE_REFERENCE__9_5b227265736f6c7665526f75746544617461225d_call_directImport_asiSafe1__._undefined14491460__WEBPACK_MODULE_REFERENCE__3_5b224e657874526573706f6e7365225d_directImport_asiSafe1__._undefined�3175sitemap_namespaceObjectundefined806893server.NextResponseundefined10061106(0,resolve_route_data.resolveRouteData)undefined11381225server.NextResponseundefinedRawSource�
;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?page=%2Fsitemap.xml%2Froute&name=app%2Fsitemap.xml%2Froute&pagePath=private-next-app-dir%2Fsitemap.js&appDir=G%3A%5Czinisoft%5Czinisoft_beta%5Czinisoft.net%5Cfrontend-v3%5Capp&appPaths=%2Fsitemap&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!
���import { AppRouteRouteModule } from "next/dist/server/future/route-modules/app-route/module.compiled";
import { RouteKind } from "next/dist/server/future/route-kind";
import { patchFetch as _patchFetch } from "next/dist/server/lib/patch-fetch";
import * as userland from "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__";
// We inject the nextConfigOutput here so that we can use them in the route
// module.
const nextConfigOutput = ""
const routeModule = new AppRouteRouteModule({
    definition: {
        kind: RouteKind.APP_ROUTE,
        page: "/sitemap.xml/route",
        pathname: "/sitemap.xml",
        filename: "sitemap",
        bundlePath: "app/sitemap.xml/route"
    },
    resolvedPagePath: "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__",
    nextConfigOutput,
    userland
});
// Pull out the exports that we need to expose from the module. This should
// be eliminated when we've moved the other routes to the new format. These
// are used to hook into the route.
const { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout } = routeModule;
const originalPathname = "/sitemap.xml/route";
function patchFetch() {
    return _patchFetch({
        serverHooks,
        staticGenerationAsyncStorage
    });
}
export { routeModule, requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout, originalPathname, patchFetch,  };

//# sourceMappingURL=app-route.js.map�0101undefined103165undefined167243undefined245435undefined576594__WEBPACK_MODULE_REFERENCE__0_5b22417070526f757465526f7574654d6f64756c65225d_directImport_asiSafe1__._undefined630638__WEBPACK_MODULE_REFERENCE__1_5b22526f7574654b696e64225d_asiSafe1__._undefined10231022: __WEBPACK_MODULE_REFERENCE__10_ns_asiSafe1__._undefined14241434__WEBPACK_MODULE_REFERENCE__2_5b2270617463684665746368225d_call_directImport_asiSafe1__._undefined15061662undefined�143244module_compiled.AppRouteRouteModuleundefined280348route_kind/* RouteKind */.xundefined735780sitemap_next_metadata_route_namespaceObjectundefined11821270(0,patch_fetch.patchFetch)undefined


/***/ })���/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  headerHooks: () => (/* binding */ headerHooks),
  originalPathname: () => (/* binding */ originalPathname),
  patchFetch: () => (/* binding */ patchFetch),
  requestAsyncStorage: () => (/* binding */ requestAsyncStorage),
  routeModule: () => (/* binding */ routeModule),
  serverHooks: () => (/* binding */ serverHooks),
  staticGenerationAsyncStorage: () => (/* binding */ staticGenerationAsyncStorage),
  staticGenerationBailout: () => (/* binding */ staticGenerationBailout)
});

// NAMESPACE OBJECT: ./app/sitemap.js
var sitemap_namespaceObject = {};
__webpack_require__.r(sitemap_namespaceObject);
__webpack_require__.d(sitemap_namespaceObject, {
  "default": () => (sitemap)
});

// NAMESPACE OBJECT: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__
var sitemap_next_metadata_route_namespaceObject = {};
__webpack_require__.r(sitemap_next_metadata_route_namespaceObject);
__webpack_require__.d(sitemap_next_metadata_route_namespaceObject, {
  GET: () => (GET)
});

// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-modules/app-route/module.compiled.js
var module_compiled = __webpack_require__(95419);
// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-kind.js
var route_kind = __webpack_require__(69108);
// EXTERNAL MODULE: ./node_modules/next/dist/server/lib/patch-fetch.js
var patch_fetch = __webpack_require__(99678);
// EXTERNAL MODULE: ./node_modules/next/server.js
var server = __webpack_require__(79647);
// EXTERNAL MODULE: ./data/seo.js
var seo = __webpack_require__(62486);
;// CONCATENATED MODULE: ./data/blogApi.js
const BLOG_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2/posts";
const BLOG_FALLBACK_IMAGE = "/assets/img/blog/grid/post-1.png";
const BLOG_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (value = "")=>decodeHtml(value.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim());
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const formatDate = (value)=>{
    if (!value) {
        return "";
    }
    return new Intl.DateTimeFormat("en", {
        month: "short",
        day: "numeric",
        year: "numeric"
    }).format(new Date(value));
};
const getFeaturedImage = (post)=>{
    const media = post?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || BLOG_FALLBACK_IMAGE;
};
const getCategory = (post)=>post?._embedded?.["wp:term"]?.[0]?.[0]?.name || "Blog";
const getTags = (post)=>{
    const terms = post?._embedded?.["wp:term"]?.[1] || [];
    return terms.map((term)=>term.name);
};
const getAuthorName = (post)=>post?._embedded?.author?.[0]?.name || "Admin";
const getAuthorAvatar = (post)=>post?._embedded?.author?.[0]?.avatar_urls?.["96"] || "/assets/img/root/author-avatar.png";
const getAuthorDescription = (post)=>post?._embedded?.author?.[0]?.description || "";
const appendListParam = (params, name, values = [])=>{
    const list = Array.isArray(values) ? values : [
        values
    ];
    list.filter(Boolean).forEach((value)=>{
        params.append(`${name}[]`, String(value));
    });
};
const buildBlogPostsUrl = ({ page = BLOG_LIST_FILTERS.page, perPage = BLOG_LIST_FILTERS.perPage, orderby = BLOG_LIST_FILTERS.orderby, order = BLOG_LIST_FILTERS.order, sticky, search, searchColumns, categories, status, author, exclude } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage),
        orderby,
        order
    });
    if (typeof sticky === "boolean") {
        params.set("sticky", String(sticky));
    }
    if (search) {
        params.set("search", search);
    }
    appendListParam(params, "search_columns", searchColumns);
    appendListParam(params, "categories", categories);
    appendListParam(params, "status", status);
    appendListParam(params, "author", author);
    appendListParam(params, "exclude", exclude);
    return `${BLOG_API_BASE}?${params.toString()}`;
};
const normalizeWpPost = (post, { includeContent = false } = {})=>({
        id: post.id,
        slug: post.slug,
        href: `/blog/${post.slug}`,
        sourceUrl: post.link,
        img: getFeaturedImage(post),
        alt: stripHtml(post.title?.rendered || "Blog image"),
        cat: getCategory(post),
        date: formatDate(post.date),
        title: stripHtml(post.title?.rendered || ""),
        description: stripHtml(post.excerpt?.rendered || ""),
        descriptions: stripHtml(post.excerpt?.rendered || ""),
        categoryIds: post.categories || [],
        tagIds: post.tags || [],
        tags: getTags(post),
        authorId: post.author,
        author: getAuthorName(post),
        authorAvatar: getAuthorAvatar(post),
        authorDescription: getAuthorDescription(post),
        content: includeContent ? normalizeContent(post.content?.rendered || "") : ""
    });
const getBlogPostsPage = async (filters = {})=>{
    const url = buildBlogPostsUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                posts: [],
                totalPages: 0,
                total: 0
            };
        }
        const posts = await response.json();
        return {
            posts: Array.isArray(posts) ? posts.map((post)=>normalizeWpPost(post)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        return {
            posts: [],
            totalPages: 0,
            total: 0
        };
    }
};
const getBlogPosts = async (filters = {})=>{
    const { posts } = await getBlogPostsPage(filters);
    return posts;
};
const getBlogPostById = async (idOrSlug)=>{
    if (!idOrSlug) {
        return null;
    }
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${BLOG_API_BASE}/${idOrSlug}?_embed=1` : `${BLOG_API_BASE}?slug=${encodeURIComponent(idOrSlug)}&_embed=1`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpPost(data, {
                includeContent: true
            });
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpPost(data[0], {
                    includeContent: true
                });
            }
            return null;
        }
    } catch (error) {
        return null;
    }
};
const getRelatedBlogPosts = async (post, { perPage = 2 } = {})=>{
    if (!post?.id) {
        return [];
    }
    const categories = post.categoryIds?.length ? post.categoryIds : undefined;
    const { posts } = await getBlogPostsPage({
        page: 1,
        perPage,
        orderby: "date",
        order: "desc",
        categories,
        exclude: [
            post.id
        ],
        sticky: false
    });
    return posts;
};

;// CONCATENATED MODULE: ./data/servicesApi.js
const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const servicesApi_htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const servicesApi_decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>servicesApi_htmlEntities[entity] || entity);
const servicesApi_stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? servicesApi_stripHtml(servicesApi_decodeHtml(match[1])) : "";
};
const servicesApi_getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = servicesApi_decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ const normalizeWpService = (item)=>{
    const title = servicesApi_decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = servicesApi_stripHtml(servicesApi_decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = servicesApi_getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = servicesApi_decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? servicesApi_decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? servicesApi_decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? servicesApi_decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? servicesApi_decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: servicesApi_decodeHtml(item.name || ""),
                    description: servicesApi_decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};

;// CONCATENATED MODULE: ./data/worksApi.js
const WORKS_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const worksApi_htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const worksApi_decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>worksApi_htmlEntities[entity] || entity);
const getTechnologies = async ()=>{
    const url = `${WORKS_API_BASE}/technologies`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: worksApi_decodeHtml(item.name),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching technologies:", error);
        return [];
    }
};
const WORKS_FALLBACK_IMAGE = "/assets/img/portfolio/work-2.png";
const worksApi_getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || WORKS_FALLBACK_IMAGE;
};
const worksApi_formatDate = (value)=>{
    if (!value) return "";
    return new Intl.DateTimeFormat("en", {
        month: "short",
        year: "numeric"
    }).format(new Date(value));
};
const getTechnologyNames = (item)=>{
    const termGroups = item?._embedded?.["wp:term"] || [];
    for (const group of termGroups){
        if (Array.isArray(group) && group.length > 0 && group[0]?.taxonomy === "technology") {
            return group.map((t)=>worksApi_decodeHtml(t.name)).join(", ");
        }
    }
    return "";
};
const worksApi_normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const normalizeWpCaseStudy = (item)=>{
    const featuredImage = worksApi_getFeaturedImage(item);
    const techNames = getTechnologyNames(item);
    return {
        id: item.id,
        slug: item.slug,
        title: worksApi_decodeHtml(item.title?.rendered || ""),
        cat: techNames || (item.meta?.zini_services ? worksApi_decodeHtml(item.meta.zini_services) : "Design"),
        date: item.meta?.zini_date ? worksApi_decodeHtml(item.meta.zini_date) : worksApi_formatDate(item.date),
        img: featuredImage,
        imgPopup: featuredImage,
        dataId: `work-${item.id}`,
        client: item.meta?.zini_client ? worksApi_decodeHtml(item.meta.zini_client) : "",
        team: item.meta?.zini_team ? worksApi_decodeHtml(item.meta.zini_team) : "",
        services: item.meta?.zini_services ? worksApi_decodeHtml(item.meta.zini_services) : "",
        technologies: item.technologies || [],
        content: worksApi_normalizeContent(item.content?.rendered || ""),
        excerpt: worksApi_decodeHtml(item.excerpt?.rendered || "").replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim()
    };
};
const WORKS_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const buildCaseStudiesUrl = ({ page = WORKS_LIST_FILTERS.page, perPage = WORKS_LIST_FILTERS.perPage, orderby = WORKS_LIST_FILTERS.orderby, order = WORKS_LIST_FILTERS.order, technologies } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage)
    });
    if (orderby) {
        params.set("orderby", orderby);
    }
    if (order) {
        params.set("order", order);
    }
    if (technologies) {
        params.set("technologies", String(technologies));
    }
    return `${WORKS_API_BASE}/case-studies?${params.toString()}`;
};
const getCaseStudiesPage = async (filters = {})=>{
    const url = buildCaseStudiesUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                caseStudies: [],
                totalPages: 0,
                total: 0
            };
        }
        const data = await response.json();
        return {
            caseStudies: Array.isArray(data) ? data.map((item)=>normalizeWpCaseStudy(item)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        console.error("Error fetching case studies page:", error);
        return {
            caseStudies: [],
            totalPages: 0,
            total: 0
        };
    }
};
const getCaseStudies = async (filters = {})=>{
    const { caseStudies } = await getCaseStudiesPage(filters);
    return caseStudies;
};
const getCaseStudyById = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const params = new URLSearchParams();
    params.set("_embed", "1");
    const url = isNumeric ? `${WORKS_API_BASE}/case-studies/${idOrSlug}?${params.toString()}` : `${WORKS_API_BASE}/case-studies?slug=${encodeURIComponent(idOrSlug)}&${params.toString()}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpCaseStudy(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpCaseStudy(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching case study by ID/slug:", error);
        return null;
    }
};
const getNextCaseStudy = async (currentId)=>{
    if (!currentId) return null;
    try {
        // Fetch all case studies sorted by date desc (lightweight, no content needed)
        const { caseStudies } = await getCaseStudiesPage({
            page: 1,
            perPage: 100,
            orderby: "date",
            order: "desc"
        });
        if (!caseStudies.length) return null;
        const currentIndex = caseStudies.findIndex((cs)=>String(cs.id) === String(currentId) || String(cs.slug) === String(currentId));
        // If current not found or is the last one, return null (do not wrap)
        if (currentIndex === -1 || currentIndex >= caseStudies.length - 1) {
            return null;
        }
        const nextIndex = currentIndex + 1;
        const next = caseStudies[nextIndex];
        return {
            title: next.title,
            href: `/case-study/${next.slug}`
        };
    } catch (error) {
        console.error("Error fetching next case study:", error);
        return null;
    }
};

;// CONCATENATED MODULE: ./app/sitemap.js




async function sitemap() {
    const baseUrl = seo/* SITE_CONFIG */.ep.url;
    // 1. Fetch dynamic data for routes
    const [posts, services, caseStudies] = await Promise.all([
        getBlogPosts({
            perPage: 100
        }).catch(()=>[]),
        getServices().catch(()=>[]),
        getCaseStudies({
            perPage: 100
        }).catch(()=>[])
    ]);
    // 2. Define static routes
    const staticPaths = [
        "",
        "/about-us",
        "/about-me",
        "/contact",
        "/faq",
        "/pricing",
        "/privacy-policy",
        "/refund-returns",
        "/team",
        "/services",
        "/case-studies",
        "/blogs"
    ];
    const staticRoutes = staticPaths.map((route)=>({
            url: `${baseUrl}${route}`,
            lastModified: new Date().toISOString(),
            changeFrequency: route === "" ? "daily" : "weekly",
            priority: route === "" ? 1.0 : 0.8
        }));
    // 3. Map dynamic blog posts (dynamic slugs)
    const postRoutes = posts.map((post)=>({
            url: `${baseUrl}/blog/${post.slug || post.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 4. Map dynamic services (dynamic slugs)
    const serviceRoutes = services.map((service)=>({
            url: `${baseUrl}/service/${service.slug || service.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 5. Map dynamic case studies (dynamic slugs)
    const caseStudyRoutes = caseStudies.map((work)=>({
            url: `${baseUrl}/case-study/${work.slug || work.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    return [
        ...staticRoutes,
        ...postRoutes,
        ...serviceRoutes,
        ...caseStudyRoutes
    ];
}

// EXTERNAL MODULE: ./node_modules/next/dist/build/webpack/loaders/metadata/resolve-route-data.js
var resolve_route_data = __webpack_require__(57252);
;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__




const sitemapModule = { ...sitemap_namespaceObject }
const handler = sitemapModule.default
const generateSitemaps = sitemapModule.generateSitemaps
const contentType = "application/xml"
const fileType = "sitemap"


  if (typeof handler !== 'function') {
    throw new Error('Default export is missing in "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"')
  }
  




async function GET(_, ctx) {
  const { __metadata_id__ = [], ...params } = ctx.params || {}
  const targetId = __metadata_id__[0]
  let id = undefined
  const sitemaps = generateSitemaps ? await generateSitemaps() : null

  if (sitemaps) {
    id = sitemaps.find((item) => {
      if (false) {}
      return item.id.toString() === targetId
    })?.id
    if (id == null) {
      return new server.NextResponse('Not Found', {
        status: 404,
      })
    }
  }

  const data = await handler({ id })
  const content = (0,resolve_route_data.resolveRouteData)(data, fileType)

  return new server.NextResponse(content, {
    headers: {
      'Content-Type': contentType,
      'Cache-Control': "public, max-age=0, must-revalidate",
    },
  })
}



;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?page=%2Fsitemap.xml%2Froute&name=app%2Fsitemap.xml%2Froute&pagePath=private-next-app-dir%2Fsitemap.js&appDir=G%3A%5Czinisoft%5Czinisoft_beta%5Czinisoft.net%5Cfrontend-v3%5Capp&appPaths=%2Fsitemap&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!




// We inject the nextConfigOutput here so that we can use them in the route
// module.
const nextConfigOutput = ""
const routeModule = new module_compiled.AppRouteRouteModule({
    definition: {
        kind: route_kind/* RouteKind */.x.APP_ROUTE,
        page: "/sitemap.xml/route",
        pathname: "/sitemap.xml",
        filename: "sitemap",
        bundlePath: "app/sitemap.xml/route"
    },
    resolvedPagePath: "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__",
    nextConfigOutput,
    userland: sitemap_next_metadata_route_namespaceObject
});
// Pull out the exports that we need to expose from the module. This should
// be eliminated when we've moved the other routes to the new format. These
// are used to hook into the route.
const { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout } = routeModule;
const originalPathname = "/sitemap.xml/route";
function patchFetch() {
    return (0,patch_fetch.patchFetch)({
        serverHooks,
        staticGenerationAsyncStorage
    });
}


//# sourceMappingURL=app-route.js.map

/***/ })��`)�Q/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

�// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  headerHooks: () => (/* binding */ headerHooks),
  originalPathname: () => (/* binding */ originalPathname),
  patchFetch: () => (/* binding */ patchFetch),
  requestAsyncStorage: () => (/* binding */ requestAsyncStorage),
  routeModule: () => (/* binding */ routeModule),
  serverHooks: () => (/* binding */ serverHooks),
  staticGenerationAsyncStorage: () => (/* binding */ staticGenerationAsyncStorage),
  staticGenerationBailout: () => (/* binding */ staticGenerationBailout)
});

// NAMESPACE OBJECT: ./app/sitemap.js
var sitemap_namespaceObject = {};
__webpack_require__.r(sitemap_namespaceObject);
__webpack_require__.d(sitemap_namespaceObject, {
  "default": () => (sitemap)
});

// NAMESPACE OBJECT: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__
var sitemap_next_metadata_route_namespaceObject = {};
__webpack_require__.r(sitemap_next_metadata_route_namespaceObject);
__webpack_require__.d(sitemap_next_metadata_route_namespaceObject, {
  GET: () => (GET)
});

// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-modules/app-route/module.compiled.js
var module_compiled = __webpack_require__(95419);
// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-kind.js
var route_kind = __webpack_require__(69108);
// EXTERNAL MODULE: ./node_modules/next/dist/server/lib/patch-fetch.js
var patch_fetch = __webpack_require__(99678);
// EXTERNAL MODULE: ./node_modules/next/server.js
var server = __webpack_require__(79647);
// EXTERNAL MODULE: ./data/seo.js
var seo = __webpack_require__(62486);
;// CONCATENATED MODULE: ./data/blogApi.js

ReplaceSourceReplaceSourceRawSource�const BLOG_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2/posts";
const BLOG_FALLBACK_IMAGE = "/assets/img/blog/grid/post-1.png";
export const BLOG_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (value = "")=>decodeHtml(value.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim());
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const formatDate = (value)=>{
    if (!value) {
        return "";
    }
    return new Intl.DateTimeFormat("en", {
        month: "short",
        day: "numeric",
        year: "numeric"
    }).format(new Date(value));
};
const getFeaturedImage = (post)=>{
    const media = post?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || BLOG_FALLBACK_IMAGE;
};
const getCategory = (post)=>post?._embedded?.["wp:term"]?.[0]?.[0]?.name || "Blog";
const getTags = (post)=>{
    const terms = post?._embedded?.["wp:term"]?.[1] || [];
    return terms.map((term)=>term.name);
};
const getAuthorName = (post)=>post?._embedded?.author?.[0]?.name || "Admin";
const getAuthorAvatar = (post)=>post?._embedded?.author?.[0]?.avatar_urls?.["96"] || "/assets/img/root/author-avatar.png";
const getAuthorDescription = (post)=>post?._embedded?.author?.[0]?.description || "";
const appendListParam = (params, name, values = [])=>{
    const list = Array.isArray(values) ? values : [
        values
    ];
    list.filter(Boolean).forEach((value)=>{
        params.append(`${name}[]`, String(value));
    });
};
export const buildBlogPostsUrl = ({ page = BLOG_LIST_FILTERS.page, perPage = BLOG_LIST_FILTERS.perPage, orderby = BLOG_LIST_FILTERS.orderby, order = BLOG_LIST_FILTERS.order, sticky, search, searchColumns, categories, status, author, exclude } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage),
        orderby,
        order
    });
    if (typeof sticky === "boolean") {
        params.set("sticky", String(sticky));
    }
    if (search) {
        params.set("search", search);
    }
    appendListParam(params, "search_columns", searchColumns);
    appendListParam(params, "categories", categories);
    appendListParam(params, "status", status);
    appendListParam(params, "author", author);
    appendListParam(params, "exclude", exclude);
    return `${BLOG_API_BASE}?${params.toString()}`;
};
export const normalizeWpPost = (post, { includeContent = false } = {})=>({
        id: post.id,
        slug: post.slug,
        href: `/blog/${post.slug}`,
        sourceUrl: post.link,
        img: getFeaturedImage(post),
        alt: stripHtml(post.title?.rendered || "Blog image"),
        cat: getCategory(post),
        date: formatDate(post.date),
        title: stripHtml(post.title?.rendered || ""),
        description: stripHtml(post.excerpt?.rendered || ""),
        descriptions: stripHtml(post.excerpt?.rendered || ""),
        categoryIds: post.categories || [],
        tagIds: post.tags || [],
        tags: getTags(post),
        authorId: post.author,
        author: getAuthorName(post),
        authorAvatar: getAuthorAvatar(post),
        authorDescription: getAuthorDescription(post),
        content: includeContent ? normalizeContent(post.content?.rendered || "") : ""
    });
export const getBlogPostsPage = async (filters = {})=>{
    const url = buildBlogPostsUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                posts: [],
                totalPages: 0,
                total: 0
            };
        }
        const posts = await response.json();
        return {
            posts: Array.isArray(posts) ? posts.map((post)=>normalizeWpPost(post)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        return {
            posts: [],
            totalPages: 0,
            total: 0
        };
    }
};
export const getBlogPosts = async (filters = {})=>{
    const { posts } = await getBlogPostsPage(filters);
    return posts;
};
export const getBlogPostById = async (idOrSlug)=>{
    if (!idOrSlug) {
        return null;
    }
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${BLOG_API_BASE}/${idOrSlug}?_embed=1` : `${BLOG_API_BASE}?slug=${encodeURIComponent(idOrSlug)}&_embed=1`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpPost(data, {
                includeContent: true
            });
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpPost(data[0], {
                    includeContent: true
                });
            }
            return null;
        }
    } catch (error) {
        return null;
    }
};
export const getRelatedBlogPosts = async (post, { perPage = 2 } = {})=>{
    if (!post?.id) {
        return [];
    }
    const categories = post.categoryIds?.length ? post.categoryIds : undefined;
    const { posts } = await getBlogPostsPage({
        page: 1,
        perPage,
        orderby: "date",
        order: "desc",
        categories,
        exclude: [
            post.id
        ],
        sticky: false
    });
    return posts;
};
u136142undefined32513257undefined41354141undefined50375043undefined58645870undefined59925998undefined69296935undefined�0
;// CONCATENATED MODULE: ./data/servicesApi.js
��['const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
export const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ export const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ export const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ export const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ export const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ export const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};
f27462752undefined33263332undefined66136619undefined73437349undefined81578163undefined91759181undefined�6778servicesApi_htmlEntitiesundefined313322servicesApi_decodeHtmlundefined453464servicesApi_htmlEntitiesundefined492500servicesApi_stripHtmlundefined742750servicesApi_stripHtmlundefined752761servicesApi_decodeHtmlundefined789804servicesApi_getFeaturedImageundefined20312040servicesApi_decodeHtmlundefined33743383servicesApi_decodeHtmlundefined36953703servicesApi_stripHtmlundefined37053714servicesApi_decodeHtmlundefined37743789servicesApi_getFeaturedImageundefined39533962servicesApi_decodeHtmlundefined44494458servicesApi_decodeHtmlundefined45364545servicesApi_decodeHtmlundefined46284637servicesApi_decodeHtmlundefined47254734servicesApi_decodeHtmlundefined96969705servicesApi_decodeHtmlundefined97589767servicesApi_decodeHtmlundefinedRawSource-
;// CONCATENATED MODULE: ./data/worksApi.js
�� const WORKS_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
export const getTechnologies = async ()=>{
    const url = `${WORKS_API_BASE}/technologies`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching technologies:", error);
        return [];
    }
};
const WORKS_FALLBACK_IMAGE = "/assets/img/portfolio/work-2.png";
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || WORKS_FALLBACK_IMAGE;
};
const formatDate = (value)=>{
    if (!value) return "";
    return new Intl.DateTimeFormat("en", {
        month: "short",
        year: "numeric"
    }).format(new Date(value));
};
const getTechnologyNames = (item)=>{
    const termGroups = item?._embedded?.["wp:term"] || [];
    for (const group of termGroups){
        if (Array.isArray(group) && group.length > 0 && group[0]?.taxonomy === "technology") {
            return group.map((t)=>decodeHtml(t.name)).join(", ");
        }
    }
    return "";
};
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
export const normalizeWpCaseStudy = (item)=>{
    const featuredImage = getFeaturedImage(item);
    const techNames = getTechnologyNames(item);
    return {
        id: item.id,
        slug: item.slug,
        title: decodeHtml(item.title?.rendered || ""),
        cat: techNames || (item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "Design"),
        date: item.meta?.zini_date ? decodeHtml(item.meta.zini_date) : formatDate(item.date),
        img: featuredImage,
        imgPopup: featuredImage,
        dataId: `work-${item.id}`,
        client: item.meta?.zini_client ? decodeHtml(item.meta.zini_client) : "",
        team: item.meta?.zini_team ? decodeHtml(item.meta.zini_team) : "",
        services: item.meta?.zini_services ? decodeHtml(item.meta.zini_services) : "",
        technologies: item.technologies || [],
        content: normalizeContent(item.content?.rendered || ""),
        excerpt: decodeHtml(item.excerpt?.rendered || "").replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim()
    };
};
export const WORKS_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
export const buildCaseStudiesUrl = ({ page = WORKS_LIST_FILTERS.page, perPage = WORKS_LIST_FILTERS.perPage, orderby = WORKS_LIST_FILTERS.orderby, order = WORKS_LIST_FILTERS.order, technologies } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage)
    });
    if (orderby) {
        params.set("orderby", orderby);
    }
    if (order) {
        params.set("order", order);
    }
    if (technologies) {
        params.set("technologies", String(technologies));
    }
    return `${WORKS_API_BASE}/case-studies?${params.toString()}`;
};
export const getCaseStudiesPage = async (filters = {})=>{
    const url = buildCaseStudiesUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                caseStudies: [],
                totalPages: 0,
                total: 0
            };
        }
        const data = await response.json();
        return {
            caseStudies: Array.isArray(data) ? data.map((item)=>normalizeWpCaseStudy(item)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        console.error("Error fetching case studies page:", error);
        return {
            caseStudies: [],
            totalPages: 0,
            total: 0
        };
    }
};
export const getCaseStudies = async (filters = {})=>{
    const { caseStudies } = await getCaseStudiesPage(filters);
    return caseStudies;
};
export const getCaseStudyById = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const params = new URLSearchParams();
    params.set("_embed", "1");
    const url = isNumeric ? `${WORKS_API_BASE}/case-studies/${idOrSlug}?${params.toString()}` : `${WORKS_API_BASE}/case-studies?slug=${encodeURIComponent(idOrSlug)}&${params.toString()}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpCaseStudy(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpCaseStudy(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching case study by ID/slug:", error);
        return null;
    }
};
export const getNextCaseStudy = async (currentId)=>{
    if (!currentId) return null;
    try {
        // Fetch all case studies sorted by date desc (lightweight, no content needed)
        const { caseStudies } = await getCaseStudiesPage({
            page: 1,
            perPage: 100,
            orderby: "date",
            order: "desc"
        });
        if (!caseStudies.length) return null;
        const currentIndex = caseStudies.findIndex((cs)=>String(cs.id) === String(currentId) || String(cs.slug) === String(currentId));
        // If current not found or is the last one, return null (do not wrap)
        if (currentIndex === -1 || currentIndex >= caseStudies.length - 1) {
            return null;
        }
        const nextIndex = currentIndex + 1;
        const next = caseStudies[nextIndex];
        return {
            title: next.title,
            href: `/case-study/${next.slug}`
        };
    } catch (error) {
        console.error("Error fetching next case study:", error);
        return null;
    }
};
�492498undefined33433349undefined43704376undefined44774483undefined50945100undefined60126018undefined61566162undefined71687174undefined�7384worksApi_htmlEntitiesundefined319328worksApi_decodeHtmlundefined459470worksApi_htmlEntitiesundefined949958worksApi_decodeHtmlundefined12801295worksApi_getFeaturedImageundefined16011610worksApi_formatDateundefined20402049worksApi_decodeHtmlundefined21122127worksApi_normalizeContentundefined34013416worksApi_getFeaturedImageundefined35473556worksApi_decodeHtmlundefined36413650worksApi_decodeHtmlundefined37273736worksApi_decodeHtmlundefined37613770worksApi_formatDateundefined39213930worksApi_decodeHtmlundefined39984007worksApi_decodeHtmlundefined40814090worksApi_decodeHtmlundefined41874202worksApi_normalizeContentundefined42524261worksApi_decodeHtmlundefinedRawSource+
;// CONCATENATED MODULE: ./app/sitemap.js
��himport { SITE_CONFIG } from "../data/seo";
import { getBlogPosts } from "../data/blogApi";
import { getServices } from "../data/servicesApi";
import { getCaseStudies } from "../data/worksApi";
export default async function sitemap() {
    const baseUrl = SITE_CONFIG.url;
    // 1. Fetch dynamic data for routes
    const [posts, services, caseStudies] = await Promise.all([
        getBlogPosts({
            perPage: 100
        }).catch(()=>[]),
        getServices().catch(()=>[]),
        getCaseStudies({
            perPage: 100
        }).catch(()=>[])
    ]);
    // 2. Define static routes
    const staticPaths = [
        "",
        "/about-us",
        "/about-me",
        "/contact",
        "/faq",
        "/pricing",
        "/privacy-policy",
        "/refund-returns",
        "/team",
        "/services",
        "/case-studies",
        "/blogs"
    ];
    const staticRoutes = staticPaths.map((route)=>({
            url: `${baseUrl}${route}`,
            lastModified: new Date().toISOString(),
            changeFrequency: route === "" ? "daily" : "weekly",
            priority: route === "" ? 1.0 : 0.8
        }));
    // 3. Map dynamic blog posts (dynamic slugs)
    const postRoutes = posts.map((post)=>({
            url: `${baseUrl}/blog/${post.slug || post.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 4. Map dynamic services (dynamic slugs)
    const serviceRoutes = services.map((service)=>({
            url: `${baseUrl}/service/${service.slug || service.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 5. Map dynamic case studies (dynamic slugs)
    const caseStudyRoutes = caseStudies.map((work)=>({
            url: `${baseUrl}/case-study/${work.slug || work.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    return [
        ...staticRoutes,
        ...postRoutes,
        ...serviceRoutes,
        ...caseStudyRoutes
    ];
}
�041undefined4389undefined91140undefined142191undefined193207undefined255265__WEBPACK_MODULE_REFERENCE__4_5b22534954455f434f4e464947225d_asiSafe1__._undefined383394__WEBPACK_MODULE_REFERENCE__5_5b22676574426c6f67506f737473225d_call_directImport_asiSafe1__._undefined457467__WEBPACK_MODULE_REFERENCE__6_5b226765745365727669636573225d_call_directImport_asiSafe1__._undefined494507__WEBPACK_MODULE_REFERENCE__7_5b226765744361736553747564696573225d_call_directImport_asiSafe1__._undefined�51123seo/* SITE_CONFIG */.epundefined241333getBlogPostsundefined396486getServicesundefined513609getCaseStudiesundefinedRawSourceO
// EXTERNAL MODULE: ./node_modules/next/dist/build/webpack/loaders/metadata/resolve-route-data.js
var resolve_route_data = __webpack_require__(57252);
;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__
��@import { NextResponse } from 'next/server'
import * as userland from "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"
import { resolveRouteData } from 'next/dist/build/webpack/loaders/metadata/resolve-route-data'

const sitemapModule = { ...userland }
const handler = sitemapModule.default
const generateSitemaps = sitemapModule.generateSitemaps
const contentType = "application/xml"
const fileType = "sitemap"


  if (typeof handler !== 'function') {
    throw new Error('Default export is missing in "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"')
  }
  


export * from "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"

export async function GET(_, ctx) {
  const { __metadata_id__ = [], ...params } = ctx.params || {}
  const targetId = __metadata_id__[0]
  let id = undefined
  const sitemaps = generateSitemaps ? await generateSitemaps() : null

  if (sitemaps) {
    id = sitemaps.find((item) => {
      if (process.env.NODE_ENV !== 'production') {
        if (item?.id == null) {
          throw new Error('id property is required for every item returned from generateSitemaps')
        }
      }
      return item.id.toString() === targetId
    })?.id
    if (id == null) {
      return new NextResponse('Not Found', {
        status: 404,
      })
    }
  }

  const data = await handler({ id })
  const content = resolveRouteData(data, fileType)

  return new NextResponse(content, {
    headers: {
      'Content-Type': contentType,
      'Cache-Control': "public, max-age=0, must-revalidate",
    },
  })
}


�041undefined43141undefined143236undefined266273__WEBPACK_MODULE_REFERENCE__8_ns_asiSafe1__._undefined612698undefined701707undefined9931029falseundefined10321181{}undefined12781289__WEBPACK_MODULE_REFERENCE__3_5b224e657874526573706f6e7365225d_directImport_asiSafe1__._undefined14021417__WEBPACK_MODULE_REFERENCE__9_5b227265736f6c7665526f75746544617461225d_call_directImport_asiSafe1__._undefined14491460__WEBPACK_MODULE_REFERENCE__3_5b224e657874526573706f6e7365225d_directImport_asiSafe1__._undefined�3175sitemap_namespaceObjectundefined806893server.NextResponseundefined10061106(0,resolve_route_data.resolveRouteData)undefined11381225server.NextResponseundefinedRawSource�
;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?page=%2Fsitemap.xml%2Froute&name=app%2Fsitemap.xml%2Froute&pagePath=private-next-app-dir%2Fsitemap.js&appDir=G%3A%5Czinisoft%5Czinisoft_beta%5Czinisoft.net%5Cfrontend-v3%5Capp&appPaths=%2Fsitemap&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!
���import { AppRouteRouteModule } from "next/dist/server/future/route-modules/app-route/module.compiled";
import { RouteKind } from "next/dist/server/future/route-kind";
import { patchFetch as _patchFetch } from "next/dist/server/lib/patch-fetch";
import * as userland from "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__";
// We inject the nextConfigOutput here so that we can use them in the route
// module.
const nextConfigOutput = ""
const routeModule = new AppRouteRouteModule({
    definition: {
        kind: RouteKind.APP_ROUTE,
        page: "/sitemap.xml/route",
        pathname: "/sitemap.xml",
        filename: "sitemap",
        bundlePath: "app/sitemap.xml/route"
    },
    resolvedPagePath: "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__",
    nextConfigOutput,
    userland
});
// Pull out the exports that we need to expose from the module. This should
// be eliminated when we've moved the other routes to the new format. These
// are used to hook into the route.
const { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout } = routeModule;
const originalPathname = "/sitemap.xml/route";
function patchFetch() {
    return _patchFetch({
        serverHooks,
        staticGenerationAsyncStorage
    });
}
export { routeModule, requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout, originalPathname, patchFetch,  };

//# sourceMappingURL=app-route.js.map�0101undefined103165undefined167243undefined245435undefined576594__WEBPACK_MODULE_REFERENCE__0_5b22417070526f757465526f7574654d6f64756c65225d_directImport_asiSafe1__._undefined630638__WEBPACK_MODULE_REFERENCE__1_5b22526f7574654b696e64225d_asiSafe1__._undefined10231022: __WEBPACK_MODULE_REFERENCE__10_ns_asiSafe1__._undefined14241434__WEBPACK_MODULE_REFERENCE__2_5b2270617463684665746368225d_call_directImport_asiSafe1__._undefined15061662undefined�143244module_compiled.AppRouteRouteModuleundefined280348route_kind/* RouteKind */.xundefined735780sitemap_next_metadata_route_namespaceObjectundefined11821270(0,patch_fetch.patchFetch)undefined��,

/***/ 62486:
�{�webpack/lib/util/registerExternalSerializer�webpack-sources/ConcatSource��webpack/lib/util/registerExternalSerializer�webpack-sources/RawSourceQ/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

�webpack/lib/util/registerExternalSerializer�webpack-sources/CachedSourcem)�webpack/lib/util/registerExternalSerializer�webpack-sources/ConcatSource��webpack/lib/util/registerExternalSerializer�webpack-sources/RawSourcea/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ep: () => (/* binding */ SITE_CONFIG)
/* harmony export */ });
/* unused harmony exports DEFAULT_OG, buildMetadata, buildWebPageSchema, buildOrganizationSchema, buildServiceSchema, buildBlogPostSchema, buildCaseStudySchema, cleanMetaDescription, buildFaqSchema */
�webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�&/**
 * Central SEO Configuration
 * Single source of truth for all site-wide SEO constants and helpers.
 */ // ─── Site-Wide Constants ────────────────────────────────────────────
export const SITE_CONFIG = {
    name: "ZiniSoft Ltd. Co.",
    url: "https://zinisoft.net",
    logo: "https://zinisoft.net/assets/img/root/logo-dark.png",
    description: "ZiniSoft Ltd. Co specializes in AI engineering and software system architecture, delivering high-performance, scalable B2B enterprise software applications.",
    socialLinks: [
        "https://www.facebook.com/zinisoft",
        "https://www.linkedin.com/company/zinisoft"
    ]
};
// ─── Default OpenGraph & Twitter Settings ───────────────────────────
export const DEFAULT_OG = {
    type: "website",
    siteName: SITE_CONFIG.name,
    locale: "en_US",
    image: {
        url: `${SITE_CONFIG.url}/assets/img/root/og-default.png`,
        width: 1200,
        height: 630,
        alt: `${SITE_CONFIG.name} - AI & Software Systems`
    }
};
// ─── Helper: Build Complete Next.js Metadata Object ─────────────────
/**
 * Takes a page config and returns a full Next.js metadata object
 * including title, description, openGraph, twitter, and canonical URL.
 *
 * @param {{ title: string, description: string, path?: string, ogImage?: string }} page
 * @returns {object} Next.js metadata object
 */ export function buildMetadata({ title, description, path = "", ogImage }) {
    const canonicalUrl = path ? `${SITE_CONFIG.url}${path.startsWith("/") ? path : `/${path}`}` : SITE_CONFIG.url;
    const ogImageObj = ogImage ? {
        url: ogImage,
        width: 1200,
        height: 630,
        alt: title
    } : DEFAULT_OG.image;
    return {
        title,
        description,
        metadataBase: new URL(SITE_CONFIG.url),
        alternates: {
            canonical: canonicalUrl
        },
        openGraph: {
            title,
            description,
            url: canonicalUrl,
            siteName: DEFAULT_OG.siteName,
            locale: DEFAULT_OG.locale,
            type: DEFAULT_OG.type,
            images: [
                ogImageObj
            ]
        },
        twitter: {
            card: "summary_large_image",
            title,
            description,
            images: [
                ogImageObj.url
            ]
        }
    };
}
// ─── Helper: Build WebPage JSON-LD Schema ───────────────────────────
/**
 * Generates a WebPage Schema.org JSON-LD object for a page.
 *
 * @param {{ title: string, description: string, path?: string, type?: string }} page
 * @returns {object} JSON-LD schema object
 */ export function buildWebPageSchema({ title, description, path = "", type = "WebPage" }) {
    const pageUrl = path ? `${SITE_CONFIG.url}${path.startsWith("/") ? path : `/${path}`}` : SITE_CONFIG.url;
    const typeLower = type.toLowerCase();
    return {
        "@context": "https://schema.org",
        "@type": type,
        "@id": `${pageUrl}/#${typeLower}`,
        url: pageUrl,
        name: title,
        description,
        isPartOf: {
            "@id": `${SITE_CONFIG.url}/#website`
        }
    };
}
// ─── Helper: Build Organization + WebSite @graph Schema ─────────────
/**
 * Returns the global Organization + WebSite JSON-LD graph.
 * Used once in the root layout.
 *
 * @returns {object} JSON-LD @graph schema
 */ export function buildOrganizationSchema() {
    return {
        "@context": "https://schema.org",
        "@graph": [
            {
                "@type": "Organization",
                "@id": `${SITE_CONFIG.url}/#organization`,
                name: SITE_CONFIG.name,
                url: SITE_CONFIG.url,
                logo: {
                    "@type": "ImageObject",
                    url: SITE_CONFIG.logo
                },
                sameAs: SITE_CONFIG.socialLinks
            },
            {
                "@type": "WebSite",
                "@id": `${SITE_CONFIG.url}/#website`,
                url: SITE_CONFIG.url,
                name: SITE_CONFIG.name,
                description: SITE_CONFIG.description,
                publisher: {
                    "@id": `${SITE_CONFIG.url}/#organization`
                }
            }
        ]
    };
}
// ─── Helper: Build Service Schema ───────────────────────────────────
/**
 * Generates a Service Schema.org JSON-LD for a service detail page.
 *
 * @param {object} service - The service data object from WordPress API
 * @returns {object|null} JSON-LD schema object or null
 */ export function buildServiceSchema(service) {
    if (!service) return null;
    const description = (service.descriptions || service.description || service.text || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "Service",
        "@id": `${SITE_CONFIG.url}/service/${service.id || service.slug}/#service`,
        name: service.title || service.name || "",
        description,
        provider: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url
        },
        serviceType: "Software Development & AI Engineering",
        image: service.featured_image_url || service.img || SITE_CONFIG.logo
    };
}
// ─── Helper: Build BlogPosting Schema ───────────────────────────────
/**
 * Generates a BlogPosting Schema.org JSON-LD for a blog detail page.
 *
 * @param {object} post - The blog post data object
 * @param {string} slugOrId - The slug or ID for the URL
 * @returns {object|null} JSON-LD schema object or null
 */ export function buildBlogPostSchema(post, slugOrId) {
    if (!post) return null;
    const description = (post.description || post.content || post.excerpt || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "BlogPosting",
        "@id": `${SITE_CONFIG.url}/blog/${slugOrId}/#blogposting`,
        headline: post.title || "",
        description,
        image: post.img || SITE_CONFIG.logo,
        datePublished: post.date || "",
        author: {
            "@type": "Person",
            name: post.author || "Admin"
        },
        publisher: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url,
            logo: {
                "@type": "ImageObject",
                url: SITE_CONFIG.logo
            }
        }
    };
}
// ─── Helper: Build CreativeWork Schema (Case Study) ─────────────────
/**
 * Generates a CreativeWork Schema.org JSON-LD for a case study detail page.
 *
 * @param {object} caseStudy - The case study data object
 * @param {string} idOrSlug - The ID or slug for the URL
 * @returns {object|null} JSON-LD schema object or null
 */ export function buildCaseStudySchema(caseStudy, idOrSlug) {
    if (!caseStudy) return null;
    const description = (caseStudy.excerpt || caseStudy.description || caseStudy.text || caseStudy.content || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "CreativeWork",
        "@id": `${SITE_CONFIG.url}/case-study/${idOrSlug}/#creativework`,
        url: `${SITE_CONFIG.url}/case-study/${idOrSlug}`,
        name: caseStudy.title || "Case Study",
        description,
        image: caseStudy.img || caseStudy.imgPopup || SITE_CONFIG.logo,
        publisher: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url
        }
    };
}
// ─── Helper: Strip HTML and Truncate for Meta Description ───────────
/**
 * Strips HTML tags, normalizes whitespace, and truncates to max length
 * with optional minimum padding.
 *
 * @param {string} raw - Raw text (may contain HTML)
 * @param {string} fallbackSuffix - Text to append if too short
 * @param {number} maxLen - Maximum character length
 * @returns {string}
 */ export function cleanMetaDescription(raw, fallbackSuffix = "", maxLen = 155) {
    let text = (raw || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim();
    if (text.length > maxLen) {
        return text.slice(0, maxLen - 3) + "...";
    }
    if (text.length < 50 && fallbackSuffix) {
        text = `${text} ${fallbackSuffix}`.trim();
        return text.length > maxLen ? text.slice(0, maxLen) : text;
    }
    return text;
}
// ─── Helper: Build FAQPage JSON-LD Schema ───────────────────────────
/**
 * Generates an FAQPage Schema.org JSON-LD object.
 *
 * @param {Array} faqContent - The FAQ list with groups and items
 * @returns {object} JSON-LD schema object
 */ export function buildFaqSchema(faqContent) {
    if (!faqContent) return null;
    return {
        "@context": "https://schema.org",
        "@type": "FAQPage",
        "mainEntity": faqContent.flatMap((group)=>(group.faqInner || []).map((item)=>({
                    "@type": "Question",
                    "name": item.title,
                    "acceptedAnswer": {
                        "@type": "Answer",
                        "text": (item.descriptions || "").replace(/\n/g, " ")
                    }
                })))
    };
}

S����MS0
6


��
���c"i"������������buffer�source�size�maps�hash�'/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ep: () => (/* binding */ SITE_CONFIG)
/* harmony export */ });
/* unused harmony exports DEFAULT_OG, buildMetadata, buildWebPageSchema, buildOrganizationSchema, buildServiceSchema, buildBlogPostSchema, buildCaseStudySchema, cleanMetaDescription, buildFaqSchema */
/**
 * Central SEO Configuration
 * Single source of truth for all site-wide SEO constants and helpers.
 */ // ─── Site-Wide Constants ────────────────────────────────────────────
const SITE_CONFIG = {
    name: "ZiniSoft Ltd. Co.",
    url: "https://zinisoft.net",
    logo: "https://zinisoft.net/assets/img/root/logo-dark.png",
    description: "ZiniSoft Ltd. Co specializes in AI engineering and software system architecture, delivering high-performance, scalable B2B enterprise software applications.",
    socialLinks: [
        "https://www.facebook.com/zinisoft",
        "https://www.linkedin.com/company/zinisoft"
    ]
};
// ─── Default OpenGraph & Twitter Settings ───────────────────────────
const DEFAULT_OG = {
    type: "website",
    siteName: SITE_CONFIG.name,
    locale: "en_US",
    image: {
        url: `${SITE_CONFIG.url}/assets/img/root/og-default.png`,
        width: 1200,
        height: 630,
        alt: `${SITE_CONFIG.name} - AI & Software Systems`
    }
};
// ─── Helper: Build Complete Next.js Metadata Object ─────────────────
/**
 * Takes a page config and returns a full Next.js metadata object
 * including title, description, openGraph, twitter, and canonical URL.
 *
 * @param {{ title: string, description: string, path?: string, ogImage?: string }} page
 * @returns {object} Next.js metadata object
 */ function buildMetadata({ title, description, path = "", ogImage }) {
    const canonicalUrl = path ? `${SITE_CONFIG.url}${path.startsWith("/") ? path : `/${path}`}` : SITE_CONFIG.url;
    const ogImageObj = ogImage ? {
        url: ogImage,
        width: 1200,
        height: 630,
        alt: title
    } : DEFAULT_OG.image;
    return {
        title,
        description,
        metadataBase: new URL(SITE_CONFIG.url),
        alternates: {
            canonical: canonicalUrl
        },
        openGraph: {
            title,
            description,
            url: canonicalUrl,
            siteName: DEFAULT_OG.siteName,
            locale: DEFAULT_OG.locale,
            type: DEFAULT_OG.type,
            images: [
                ogImageObj
            ]
        },
        twitter: {
            card: "summary_large_image",
            title,
            description,
            images: [
                ogImageObj.url
            ]
        }
    };
}
// ─── Helper: Build WebPage JSON-LD Schema ───────────────────────────
/**
 * Generates a WebPage Schema.org JSON-LD object for a page.
 *
 * @param {{ title: string, description: string, path?: string, type?: string }} page
 * @returns {object} JSON-LD schema object
 */ function buildWebPageSchema({ title, description, path = "", type = "WebPage" }) {
    const pageUrl = path ? `${SITE_CONFIG.url}${path.startsWith("/") ? path : `/${path}`}` : SITE_CONFIG.url;
    const typeLower = type.toLowerCase();
    return {
        "@context": "https://schema.org",
        "@type": type,
        "@id": `${pageUrl}/#${typeLower}`,
        url: pageUrl,
        name: title,
        description,
        isPartOf: {
            "@id": `${SITE_CONFIG.url}/#website`
        }
    };
}
// ─── Helper: Build Organization + WebSite @graph Schema ─────────────
/**
 * Returns the global Organization + WebSite JSON-LD graph.
 * Used once in the root layout.
 *
 * @returns {object} JSON-LD @graph schema
 */ function buildOrganizationSchema() {
    return {
        "@context": "https://schema.org",
        "@graph": [
            {
                "@type": "Organization",
                "@id": `${SITE_CONFIG.url}/#organization`,
                name: SITE_CONFIG.name,
                url: SITE_CONFIG.url,
                logo: {
                    "@type": "ImageObject",
                    url: SITE_CONFIG.logo
                },
                sameAs: SITE_CONFIG.socialLinks
            },
            {
                "@type": "WebSite",
                "@id": `${SITE_CONFIG.url}/#website`,
                url: SITE_CONFIG.url,
                name: SITE_CONFIG.name,
                description: SITE_CONFIG.description,
                publisher: {
                    "@id": `${SITE_CONFIG.url}/#organization`
                }
            }
        ]
    };
}
// ─── Helper: Build Service Schema ───────────────────────────────────
/**
 * Generates a Service Schema.org JSON-LD for a service detail page.
 *
 * @param {object} service - The service data object from WordPress API
 * @returns {object|null} JSON-LD schema object or null
 */ function buildServiceSchema(service) {
    if (!service) return null;
    const description = (service.descriptions || service.description || service.text || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "Service",
        "@id": `${SITE_CONFIG.url}/service/${service.id || service.slug}/#service`,
        name: service.title || service.name || "",
        description,
        provider: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url
        },
        serviceType: "Software Development & AI Engineering",
        image: service.featured_image_url || service.img || SITE_CONFIG.logo
    };
}
// ─── Helper: Build BlogPosting Schema ───────────────────────────────
/**
 * Generates a BlogPosting Schema.org JSON-LD for a blog detail page.
 *
 * @param {object} post - The blog post data object
 * @param {string} slugOrId - The slug or ID for the URL
 * @returns {object|null} JSON-LD schema object or null
 */ function buildBlogPostSchema(post, slugOrId) {
    if (!post) return null;
    const description = (post.description || post.content || post.excerpt || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "BlogPosting",
        "@id": `${SITE_CONFIG.url}/blog/${slugOrId}/#blogposting`,
        headline: post.title || "",
        description,
        image: post.img || SITE_CONFIG.logo,
        datePublished: post.date || "",
        author: {
            "@type": "Person",
            name: post.author || "Admin"
        },
        publisher: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url,
            logo: {
                "@type": "ImageObject",
                url: SITE_CONFIG.logo
            }
        }
    };
}
// ─── Helper: Build CreativeWork Schema (Case Study) ─────────────────
/**
 * Generates a CreativeWork Schema.org JSON-LD for a case study detail page.
 *
 * @param {object} caseStudy - The case study data object
 * @param {string} idOrSlug - The ID or slug for the URL
 * @returns {object|null} JSON-LD schema object or null
 */ function buildCaseStudySchema(caseStudy, idOrSlug) {
    if (!caseStudy) return null;
    const description = (caseStudy.excerpt || caseStudy.description || caseStudy.text || caseStudy.content || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "CreativeWork",
        "@id": `${SITE_CONFIG.url}/case-study/${idOrSlug}/#creativework`,
        url: `${SITE_CONFIG.url}/case-study/${idOrSlug}`,
        name: caseStudy.title || "Case Study",
        description,
        image: caseStudy.img || caseStudy.imgPopup || SITE_CONFIG.logo,
        publisher: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url
        }
    };
}
// ─── Helper: Strip HTML and Truncate for Meta Description ───────────
/**
 * Strips HTML tags, normalizes whitespace, and truncates to max length
 * with optional minimum padding.
 *
 * @param {string} raw - Raw text (may contain HTML)
 * @param {string} fallbackSuffix - Text to append if too short
 * @param {number} maxLen - Maximum character length
 * @returns {string}
 */ function cleanMetaDescription(raw, fallbackSuffix = "", maxLen = 155) {
    let text = (raw || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim();
    if (text.length > maxLen) {
        return text.slice(0, maxLen - 3) + "...";
    }
    if (text.length < 50 && fallbackSuffix) {
        text = `${text} ${fallbackSuffix}`.trim();
        return text.length > maxLen ? text.slice(0, maxLen) : text;
    }
    return text;
}
// ─── Helper: Build FAQPage JSON-LD Schema ───────────────────────────
/**
 * Generates an FAQPage Schema.org JSON-LD object.
 *
 * @param {Array} faqContent - The FAQ list with groups and items
 * @returns {object} JSON-LD schema object
 */ function buildFaqSchema(faqContent) {
    if (!faqContent) return null;
    return {
        "@context": "https://schema.org",
        "@type": "FAQPage",
        "mainEntity": faqContent.flatMap((group)=>(group.faqInner || []).map((item)=>({
                    "@type": "Question",
                    "name": item.title,
                    "acceptedAnswer": {
                        "@type": "Answer",
                        "text": (item.descriptions || "").replace(/\n/g, " ")
                    }
                })))
    };
}
��{"finalSource":true}�map�bufferedMapConcatSourceRawSourcea/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ep: () => (/* binding */ SITE_CONFIG)
/* harmony export */ });
/* unused harmony exports DEFAULT_OG, buildMetadata, buildWebPageSchema, buildOrganizationSchema, buildServiceSchema, buildBlogPostSchema, buildCaseStudySchema, cleanMetaDescription, buildFaqSchema */
ReplaceSourceRawSource�&/**
 * Central SEO Configuration
 * Single source of truth for all site-wide SEO constants and helpers.
 */ // ─── Site-Wide Constants ────────────────────────────────────────────
export const SITE_CONFIG = {
    name: "ZiniSoft Ltd. Co.",
    url: "https://zinisoft.net",
    logo: "https://zinisoft.net/assets/img/root/logo-dark.png",
    description: "ZiniSoft Ltd. Co specializes in AI engineering and software system architecture, delivering high-performance, scalable B2B enterprise software applications.",
    socialLinks: [
        "https://www.facebook.com/zinisoft",
        "https://www.linkedin.com/company/zinisoft"
    ]
};
// ─── Default OpenGraph & Twitter Settings ───────────────────────────
export const DEFAULT_OG = {
    type: "website",
    siteName: SITE_CONFIG.name,
    locale: "en_US",
    image: {
        url: `${SITE_CONFIG.url}/assets/img/root/og-default.png`,
        width: 1200,
        height: 630,
        alt: `${SITE_CONFIG.name} - AI & Software Systems`
    }
};
// ─── Helper: Build Complete Next.js Metadata Object ─────────────────
/**
 * Takes a page config and returns a full Next.js metadata object
 * including title, description, openGraph, twitter, and canonical URL.
 *
 * @param {{ title: string, description: string, path?: string, ogImage?: string }} page
 * @returns {object} Next.js metadata object
 */ export function buildMetadata({ title, description, path = "", ogImage }) {
    const canonicalUrl = path ? `${SITE_CONFIG.url}${path.startsWith("/") ? path : `/${path}`}` : SITE_CONFIG.url;
    const ogImageObj = ogImage ? {
        url: ogImage,
        width: 1200,
        height: 630,
        alt: title
    } : DEFAULT_OG.image;
    return {
        title,
        description,
        metadataBase: new URL(SITE_CONFIG.url),
        alternates: {
            canonical: canonicalUrl
        },
        openGraph: {
            title,
            description,
            url: canonicalUrl,
            siteName: DEFAULT_OG.siteName,
            locale: DEFAULT_OG.locale,
            type: DEFAULT_OG.type,
            images: [
                ogImageObj
            ]
        },
        twitter: {
            card: "summary_large_image",
            title,
            description,
            images: [
                ogImageObj.url
            ]
        }
    };
}
// ─── Helper: Build WebPage JSON-LD Schema ───────────────────────────
/**
 * Generates a WebPage Schema.org JSON-LD object for a page.
 *
 * @param {{ title: string, description: string, path?: string, type?: string }} page
 * @returns {object} JSON-LD schema object
 */ export function buildWebPageSchema({ title, description, path = "", type = "WebPage" }) {
    const pageUrl = path ? `${SITE_CONFIG.url}${path.startsWith("/") ? path : `/${path}`}` : SITE_CONFIG.url;
    const typeLower = type.toLowerCase();
    return {
        "@context": "https://schema.org",
        "@type": type,
        "@id": `${pageUrl}/#${typeLower}`,
        url: pageUrl,
        name: title,
        description,
        isPartOf: {
            "@id": `${SITE_CONFIG.url}/#website`
        }
    };
}
// ─── Helper: Build Organization + WebSite @graph Schema ─────────────
/**
 * Returns the global Organization + WebSite JSON-LD graph.
 * Used once in the root layout.
 *
 * @returns {object} JSON-LD @graph schema
 */ export function buildOrganizationSchema() {
    return {
        "@context": "https://schema.org",
        "@graph": [
            {
                "@type": "Organization",
                "@id": `${SITE_CONFIG.url}/#organization`,
                name: SITE_CONFIG.name,
                url: SITE_CONFIG.url,
                logo: {
                    "@type": "ImageObject",
                    url: SITE_CONFIG.logo
                },
                sameAs: SITE_CONFIG.socialLinks
            },
            {
                "@type": "WebSite",
                "@id": `${SITE_CONFIG.url}/#website`,
                url: SITE_CONFIG.url,
                name: SITE_CONFIG.name,
                description: SITE_CONFIG.description,
                publisher: {
                    "@id": `${SITE_CONFIG.url}/#organization`
                }
            }
        ]
    };
}
// ─── Helper: Build Service Schema ───────────────────────────────────
/**
 * Generates a Service Schema.org JSON-LD for a service detail page.
 *
 * @param {object} service - The service data object from WordPress API
 * @returns {object|null} JSON-LD schema object or null
 */ export function buildServiceSchema(service) {
    if (!service) return null;
    const description = (service.descriptions || service.description || service.text || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "Service",
        "@id": `${SITE_CONFIG.url}/service/${service.id || service.slug}/#service`,
        name: service.title || service.name || "",
        description,
        provider: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url
        },
        serviceType: "Software Development & AI Engineering",
        image: service.featured_image_url || service.img || SITE_CONFIG.logo
    };
}
// ─── Helper: Build BlogPosting Schema ───────────────────────────────
/**
 * Generates a BlogPosting Schema.org JSON-LD for a blog detail page.
 *
 * @param {object} post - The blog post data object
 * @param {string} slugOrId - The slug or ID for the URL
 * @returns {object|null} JSON-LD schema object or null
 */ export function buildBlogPostSchema(post, slugOrId) {
    if (!post) return null;
    const description = (post.description || post.content || post.excerpt || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "BlogPosting",
        "@id": `${SITE_CONFIG.url}/blog/${slugOrId}/#blogposting`,
        headline: post.title || "",
        description,
        image: post.img || SITE_CONFIG.logo,
        datePublished: post.date || "",
        author: {
            "@type": "Person",
            name: post.author || "Admin"
        },
        publisher: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url,
            logo: {
                "@type": "ImageObject",
                url: SITE_CONFIG.logo
            }
        }
    };
}
// ─── Helper: Build CreativeWork Schema (Case Study) ─────────────────
/**
 * Generates a CreativeWork Schema.org JSON-LD for a case study detail page.
 *
 * @param {object} caseStudy - The case study data object
 * @param {string} idOrSlug - The ID or slug for the URL
 * @returns {object|null} JSON-LD schema object or null
 */ export function buildCaseStudySchema(caseStudy, idOrSlug) {
    if (!caseStudy) return null;
    const description = (caseStudy.excerpt || caseStudy.description || caseStudy.text || caseStudy.content || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "CreativeWork",
        "@id": `${SITE_CONFIG.url}/case-study/${idOrSlug}/#creativework`,
        url: `${SITE_CONFIG.url}/case-study/${idOrSlug}`,
        name: caseStudy.title || "Case Study",
        description,
        image: caseStudy.img || caseStudy.imgPopup || SITE_CONFIG.logo,
        publisher: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url
        }
    };
}
// ─── Helper: Strip HTML and Truncate for Meta Description ───────────
/**
 * Strips HTML tags, normalizes whitespace, and truncates to max length
 * with optional minimum padding.
 *
 * @param {string} raw - Raw text (may contain HTML)
 * @param {string} fallbackSuffix - Text to append if too short
 * @param {number} maxLen - Maximum character length
 * @returns {string}
 */ export function cleanMetaDescription(raw, fallbackSuffix = "", maxLen = 155) {
    let text = (raw || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim();
    if (text.length > maxLen) {
        return text.slice(0, maxLen - 3) + "...";
    }
    if (text.length < 50 && fallbackSuffix) {
        text = `${text} ${fallbackSuffix}`.trim();
        return text.length > maxLen ? text.slice(0, maxLen) : text;
    }
    return text;
}
// ─── Helper: Build FAQPage JSON-LD Schema ───────────────────────────
/**
 * Generates an FAQPage Schema.org JSON-LD object.
 *
 * @param {Array} faqContent - The FAQ list with groups and items
 * @returns {object} JSON-LD schema object
 */ export function buildFaqSchema(faqContent) {
    if (!faqContent) return null;
    return {
        "@context": "https://schema.org",
        "@type": "FAQPage",
        "mainEntity": faqContent.flatMap((group)=>(group.faqInner || []).map((item)=>({
                    "@type": "Question",
                    "name": item.title,
                    "acceptedAnswer": {
                        "@type": "Answer",
                        "text": (item.descriptions || "").replace(/\n/g, " ")
                    }
                })))
    };
}
�180186undefined711717undefined13571363undefined26082614undefined33423348undefined45034509undefined56365642undefined69086914undefined81238129undefined88038809undefined


/***/ })�'(/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ep: () => (/* binding */ SITE_CONFIG)
/* harmony export */ });
/* unused harmony exports DEFAULT_OG, buildMetadata, buildWebPageSchema, buildOrganizationSchema, buildServiceSchema, buildBlogPostSchema, buildCaseStudySchema, cleanMetaDescription, buildFaqSchema */
/**
 * Central SEO Configuration
 * Single source of truth for all site-wide SEO constants and helpers.
 */ // ─── Site-Wide Constants ────────────────────────────────────────────
const SITE_CONFIG = {
    name: "ZiniSoft Ltd. Co.",
    url: "https://zinisoft.net",
    logo: "https://zinisoft.net/assets/img/root/logo-dark.png",
    description: "ZiniSoft Ltd. Co specializes in AI engineering and software system architecture, delivering high-performance, scalable B2B enterprise software applications.",
    socialLinks: [
        "https://www.facebook.com/zinisoft",
        "https://www.linkedin.com/company/zinisoft"
    ]
};
// ─── Default OpenGraph & Twitter Settings ───────────────────────────
const DEFAULT_OG = {
    type: "website",
    siteName: SITE_CONFIG.name,
    locale: "en_US",
    image: {
        url: `${SITE_CONFIG.url}/assets/img/root/og-default.png`,
        width: 1200,
        height: 630,
        alt: `${SITE_CONFIG.name} - AI & Software Systems`
    }
};
// ─── Helper: Build Complete Next.js Metadata Object ─────────────────
/**
 * Takes a page config and returns a full Next.js metadata object
 * including title, description, openGraph, twitter, and canonical URL.
 *
 * @param {{ title: string, description: string, path?: string, ogImage?: string }} page
 * @returns {object} Next.js metadata object
 */ function buildMetadata({ title, description, path = "", ogImage }) {
    const canonicalUrl = path ? `${SITE_CONFIG.url}${path.startsWith("/") ? path : `/${path}`}` : SITE_CONFIG.url;
    const ogImageObj = ogImage ? {
        url: ogImage,
        width: 1200,
        height: 630,
        alt: title
    } : DEFAULT_OG.image;
    return {
        title,
        description,
        metadataBase: new URL(SITE_CONFIG.url),
        alternates: {
            canonical: canonicalUrl
        },
        openGraph: {
            title,
            description,
            url: canonicalUrl,
            siteName: DEFAULT_OG.siteName,
            locale: DEFAULT_OG.locale,
            type: DEFAULT_OG.type,
            images: [
                ogImageObj
            ]
        },
        twitter: {
            card: "summary_large_image",
            title,
            description,
            images: [
                ogImageObj.url
            ]
        }
    };
}
// ─── Helper: Build WebPage JSON-LD Schema ───────────────────────────
/**
 * Generates a WebPage Schema.org JSON-LD object for a page.
 *
 * @param {{ title: string, description: string, path?: string, type?: string }} page
 * @returns {object} JSON-LD schema object
 */ function buildWebPageSchema({ title, description, path = "", type = "WebPage" }) {
    const pageUrl = path ? `${SITE_CONFIG.url}${path.startsWith("/") ? path : `/${path}`}` : SITE_CONFIG.url;
    const typeLower = type.toLowerCase();
    return {
        "@context": "https://schema.org",
        "@type": type,
        "@id": `${pageUrl}/#${typeLower}`,
        url: pageUrl,
        name: title,
        description,
        isPartOf: {
            "@id": `${SITE_CONFIG.url}/#website`
        }
    };
}
// ─── Helper: Build Organization + WebSite @graph Schema ─────────────
/**
 * Returns the global Organization + WebSite JSON-LD graph.
 * Used once in the root layout.
 *
 * @returns {object} JSON-LD @graph schema
 */ function buildOrganizationSchema() {
    return {
        "@context": "https://schema.org",
        "@graph": [
            {
                "@type": "Organization",
                "@id": `${SITE_CONFIG.url}/#organization`,
                name: SITE_CONFIG.name,
                url: SITE_CONFIG.url,
                logo: {
                    "@type": "ImageObject",
                    url: SITE_CONFIG.logo
                },
                sameAs: SITE_CONFIG.socialLinks
            },
            {
                "@type": "WebSite",
                "@id": `${SITE_CONFIG.url}/#website`,
                url: SITE_CONFIG.url,
                name: SITE_CONFIG.name,
                description: SITE_CONFIG.description,
                publisher: {
                    "@id": `${SITE_CONFIG.url}/#organization`
                }
            }
        ]
    };
}
// ─── Helper: Build Service Schema ───────────────────────────────────
/**
 * Generates a Service Schema.org JSON-LD for a service detail page.
 *
 * @param {object} service - The service data object from WordPress API
 * @returns {object|null} JSON-LD schema object or null
 */ function buildServiceSchema(service) {
    if (!service) return null;
    const description = (service.descriptions || service.description || service.text || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "Service",
        "@id": `${SITE_CONFIG.url}/service/${service.id || service.slug}/#service`,
        name: service.title || service.name || "",
        description,
        provider: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url
        },
        serviceType: "Software Development & AI Engineering",
        image: service.featured_image_url || service.img || SITE_CONFIG.logo
    };
}
// ─── Helper: Build BlogPosting Schema ───────────────────────────────
/**
 * Generates a BlogPosting Schema.org JSON-LD for a blog detail page.
 *
 * @param {object} post - The blog post data object
 * @param {string} slugOrId - The slug or ID for the URL
 * @returns {object|null} JSON-LD schema object or null
 */ function buildBlogPostSchema(post, slugOrId) {
    if (!post) return null;
    const description = (post.description || post.content || post.excerpt || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "BlogPosting",
        "@id": `${SITE_CONFIG.url}/blog/${slugOrId}/#blogposting`,
        headline: post.title || "",
        description,
        image: post.img || SITE_CONFIG.logo,
        datePublished: post.date || "",
        author: {
            "@type": "Person",
            name: post.author || "Admin"
        },
        publisher: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url,
            logo: {
                "@type": "ImageObject",
                url: SITE_CONFIG.logo
            }
        }
    };
}
// ─── Helper: Build CreativeWork Schema (Case Study) ─────────────────
/**
 * Generates a CreativeWork Schema.org JSON-LD for a case study detail page.
 *
 * @param {object} caseStudy - The case study data object
 * @param {string} idOrSlug - The ID or slug for the URL
 * @returns {object|null} JSON-LD schema object or null
 */ function buildCaseStudySchema(caseStudy, idOrSlug) {
    if (!caseStudy) return null;
    const description = (caseStudy.excerpt || caseStudy.description || caseStudy.text || caseStudy.content || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "CreativeWork",
        "@id": `${SITE_CONFIG.url}/case-study/${idOrSlug}/#creativework`,
        url: `${SITE_CONFIG.url}/case-study/${idOrSlug}`,
        name: caseStudy.title || "Case Study",
        description,
        image: caseStudy.img || caseStudy.imgPopup || SITE_CONFIG.logo,
        publisher: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url
        }
    };
}
// ─── Helper: Strip HTML and Truncate for Meta Description ───────────
/**
 * Strips HTML tags, normalizes whitespace, and truncates to max length
 * with optional minimum padding.
 *
 * @param {string} raw - Raw text (may contain HTML)
 * @param {string} fallbackSuffix - Text to append if too short
 * @param {number} maxLen - Maximum character length
 * @returns {string}
 */ function cleanMetaDescription(raw, fallbackSuffix = "", maxLen = 155) {
    let text = (raw || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim();
    if (text.length > maxLen) {
        return text.slice(0, maxLen - 3) + "...";
    }
    if (text.length < 50 && fallbackSuffix) {
        text = `${text} ${fallbackSuffix}`.trim();
        return text.length > maxLen ? text.slice(0, maxLen) : text;
    }
    return text;
}
// ─── Helper: Build FAQPage JSON-LD Schema ───────────────────────────
/**
 * Generates an FAQPage Schema.org JSON-LD object.
 *
 * @param {Array} faqContent - The FAQ list with groups and items
 * @returns {object} JSON-LD schema object
 */ function buildFaqSchema(faqContent) {
    if (!faqContent) return null;
    return {
        "@context": "https://schema.org",
        "@type": "FAQPage",
        "mainEntity": faqContent.flatMap((group)=>(group.faqInner || []).map((item)=>({
                    "@type": "Question",
                    "name": item.title,
                    "acceptedAnswer": {
                        "@type": "Answer",
                        "text": (item.descriptions || "").replace(/\n/g, " ")
                    }
                })))
    };
}


/***/ })��	���a/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ep: () => (/* binding */ SITE_CONFIG)
/* harmony export */ });
/* unused harmony exports DEFAULT_OG, buildMetadata, buildWebPageSchema, buildOrganizationSchema, buildServiceSchema, buildBlogPostSchema, buildCaseStudySchema, cleanMetaDescription, buildFaqSchema */
��&/**
 * Central SEO Configuration
 * Single source of truth for all site-wide SEO constants and helpers.
 */ // ─── Site-Wide Constants ────────────────────────────────────────────
export const SITE_CONFIG = {
    name: "ZiniSoft Ltd. Co.",
    url: "https://zinisoft.net",
    logo: "https://zinisoft.net/assets/img/root/logo-dark.png",
    description: "ZiniSoft Ltd. Co specializes in AI engineering and software system architecture, delivering high-performance, scalable B2B enterprise software applications.",
    socialLinks: [
        "https://www.facebook.com/zinisoft",
        "https://www.linkedin.com/company/zinisoft"
    ]
};
// ─── Default OpenGraph & Twitter Settings ───────────────────────────
export const DEFAULT_OG = {
    type: "website",
    siteName: SITE_CONFIG.name,
    locale: "en_US",
    image: {
        url: `${SITE_CONFIG.url}/assets/img/root/og-default.png`,
        width: 1200,
        height: 630,
        alt: `${SITE_CONFIG.name} - AI & Software Systems`
    }
};
// ─── Helper: Build Complete Next.js Metadata Object ─────────────────
/**
 * Takes a page config and returns a full Next.js metadata object
 * including title, description, openGraph, twitter, and canonical URL.
 *
 * @param {{ title: string, description: string, path?: string, ogImage?: string }} page
 * @returns {object} Next.js metadata object
 */ export function buildMetadata({ title, description, path = "", ogImage }) {
    const canonicalUrl = path ? `${SITE_CONFIG.url}${path.startsWith("/") ? path : `/${path}`}` : SITE_CONFIG.url;
    const ogImageObj = ogImage ? {
        url: ogImage,
        width: 1200,
        height: 630,
        alt: title
    } : DEFAULT_OG.image;
    return {
        title,
        description,
        metadataBase: new URL(SITE_CONFIG.url),
        alternates: {
            canonical: canonicalUrl
        },
        openGraph: {
            title,
            description,
            url: canonicalUrl,
            siteName: DEFAULT_OG.siteName,
            locale: DEFAULT_OG.locale,
            type: DEFAULT_OG.type,
            images: [
                ogImageObj
            ]
        },
        twitter: {
            card: "summary_large_image",
            title,
            description,
            images: [
                ogImageObj.url
            ]
        }
    };
}
// ─── Helper: Build WebPage JSON-LD Schema ───────────────────────────
/**
 * Generates a WebPage Schema.org JSON-LD object for a page.
 *
 * @param {{ title: string, description: string, path?: string, type?: string }} page
 * @returns {object} JSON-LD schema object
 */ export function buildWebPageSchema({ title, description, path = "", type = "WebPage" }) {
    const pageUrl = path ? `${SITE_CONFIG.url}${path.startsWith("/") ? path : `/${path}`}` : SITE_CONFIG.url;
    const typeLower = type.toLowerCase();
    return {
        "@context": "https://schema.org",
        "@type": type,
        "@id": `${pageUrl}/#${typeLower}`,
        url: pageUrl,
        name: title,
        description,
        isPartOf: {
            "@id": `${SITE_CONFIG.url}/#website`
        }
    };
}
// ─── Helper: Build Organization + WebSite @graph Schema ─────────────
/**
 * Returns the global Organization + WebSite JSON-LD graph.
 * Used once in the root layout.
 *
 * @returns {object} JSON-LD @graph schema
 */ export function buildOrganizationSchema() {
    return {
        "@context": "https://schema.org",
        "@graph": [
            {
                "@type": "Organization",
                "@id": `${SITE_CONFIG.url}/#organization`,
                name: SITE_CONFIG.name,
                url: SITE_CONFIG.url,
                logo: {
                    "@type": "ImageObject",
                    url: SITE_CONFIG.logo
                },
                sameAs: SITE_CONFIG.socialLinks
            },
            {
                "@type": "WebSite",
                "@id": `${SITE_CONFIG.url}/#website`,
                url: SITE_CONFIG.url,
                name: SITE_CONFIG.name,
                description: SITE_CONFIG.description,
                publisher: {
                    "@id": `${SITE_CONFIG.url}/#organization`
                }
            }
        ]
    };
}
// ─── Helper: Build Service Schema ───────────────────────────────────
/**
 * Generates a Service Schema.org JSON-LD for a service detail page.
 *
 * @param {object} service - The service data object from WordPress API
 * @returns {object|null} JSON-LD schema object or null
 */ export function buildServiceSchema(service) {
    if (!service) return null;
    const description = (service.descriptions || service.description || service.text || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "Service",
        "@id": `${SITE_CONFIG.url}/service/${service.id || service.slug}/#service`,
        name: service.title || service.name || "",
        description,
        provider: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url
        },
        serviceType: "Software Development & AI Engineering",
        image: service.featured_image_url || service.img || SITE_CONFIG.logo
    };
}
// ─── Helper: Build BlogPosting Schema ───────────────────────────────
/**
 * Generates a BlogPosting Schema.org JSON-LD for a blog detail page.
 *
 * @param {object} post - The blog post data object
 * @param {string} slugOrId - The slug or ID for the URL
 * @returns {object|null} JSON-LD schema object or null
 */ export function buildBlogPostSchema(post, slugOrId) {
    if (!post) return null;
    const description = (post.description || post.content || post.excerpt || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "BlogPosting",
        "@id": `${SITE_CONFIG.url}/blog/${slugOrId}/#blogposting`,
        headline: post.title || "",
        description,
        image: post.img || SITE_CONFIG.logo,
        datePublished: post.date || "",
        author: {
            "@type": "Person",
            name: post.author || "Admin"
        },
        publisher: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url,
            logo: {
                "@type": "ImageObject",
                url: SITE_CONFIG.logo
            }
        }
    };
}
// ─── Helper: Build CreativeWork Schema (Case Study) ─────────────────
/**
 * Generates a CreativeWork Schema.org JSON-LD for a case study detail page.
 *
 * @param {object} caseStudy - The case study data object
 * @param {string} idOrSlug - The ID or slug for the URL
 * @returns {object|null} JSON-LD schema object or null
 */ export function buildCaseStudySchema(caseStudy, idOrSlug) {
    if (!caseStudy) return null;
    const description = (caseStudy.excerpt || caseStudy.description || caseStudy.text || caseStudy.content || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "CreativeWork",
        "@id": `${SITE_CONFIG.url}/case-study/${idOrSlug}/#creativework`,
        url: `${SITE_CONFIG.url}/case-study/${idOrSlug}`,
        name: caseStudy.title || "Case Study",
        description,
        image: caseStudy.img || caseStudy.imgPopup || SITE_CONFIG.logo,
        publisher: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url
        }
    };
}
// ─── Helper: Strip HTML and Truncate for Meta Description ───────────
/**
 * Strips HTML tags, normalizes whitespace, and truncates to max length
 * with optional minimum padding.
 *
 * @param {string} raw - Raw text (may contain HTML)
 * @param {string} fallbackSuffix - Text to append if too short
 * @param {number} maxLen - Maximum character length
 * @returns {string}
 */ export function cleanMetaDescription(raw, fallbackSuffix = "", maxLen = 155) {
    let text = (raw || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim();
    if (text.length > maxLen) {
        return text.slice(0, maxLen - 3) + "...";
    }
    if (text.length < 50 && fallbackSuffix) {
        text = `${text} ${fallbackSuffix}`.trim();
        return text.length > maxLen ? text.slice(0, maxLen) : text;
    }
    return text;
}
// ─── Helper: Build FAQPage JSON-LD Schema ───────────────────────────
/**
 * Generates an FAQPage Schema.org JSON-LD object.
 *
 * @param {Array} faqContent - The FAQ list with groups and items
 * @returns {object} JSON-LD schema object
 */ export function buildFaqSchema(faqContent) {
    if (!faqContent) return null;
    return {
        "@context": "https://schema.org",
        "@type": "FAQPage",
        "mainEntity": faqContent.flatMap((group)=>(group.faqInner || []).map((item)=>({
                    "@type": "Question",
                    "name": item.title,
                    "acceptedAnswer": {
                        "@type": "Answer",
                        "text": (item.descriptions || "").replace(/\n/g, " ")
                    }
                })))
    };
}
�180186undefined711717undefined13571363undefined26082614undefined33423348undefined45034509undefined56365642undefined69086914undefined81238129undefined88038809undefined��,

/***/ 57252:
c)�webpack/lib/util/registerExternalSerializer�webpack-sources/ConcatSource��webpack/lib/util/registerExternalSerializer�webpack-sources/RawSourceE/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

�webpack/lib/util/registerExternalSerializer�webpack-sources/CachedSource�
�webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource�"use strict";
Object.defineProperty(exports, "__esModule", {
    value: true
});
0 && (module.exports = {
    resolveRobots: null,
    resolveSitemap: null,
    resolveManifest: null,
    resolveRouteData: null
});
function _export(target, all) {
    for(var name in all)Object.defineProperty(target, name, {
        enumerable: true,
        get: all[name]
    });
}
_export(exports, {
    resolveRobots: function() {
        return resolveRobots;
    },
    resolveSitemap: function() {
        return resolveSitemap;
    },
    resolveManifest: function() {
        return resolveManifest;
    },
    resolveRouteData: function() {
        return resolveRouteData;
    }
});
const _utils = require("../../../../lib/metadata/generate/utils");
function resolveRobots(data) {
    let content = "";
    const rules = Array.isArray(data.rules) ? data.rules : [
        data.rules
    ];
    for (const rule of rules){
        const userAgent = (0, _utils.resolveArray)(rule.userAgent || [
            "*"
        ]);
        for (const agent of userAgent){
            content += `User-Agent: ${agent}\n`;
        }
        if (rule.allow) {
            const allow = (0, _utils.resolveArray)(rule.allow);
            for (const item of allow){
                content += `Allow: ${item}\n`;
            }
        }
        if (rule.disallow) {
            const disallow = (0, _utils.resolveArray)(rule.disallow);
            for (const item of disallow){
                content += `Disallow: ${item}\n`;
            }
        }
        if (rule.crawlDelay) {
            content += `Crawl-delay: ${rule.crawlDelay}\n`;
        }
        content += "\n";
    }
    if (data.host) {
        content += `Host: ${data.host}\n`;
    }
    if (data.sitemap) {
        const sitemap = (0, _utils.resolveArray)(data.sitemap);
        // TODO-METADATA: support injecting sitemap url into robots.txt
        sitemap.forEach((item)=>{
            content += `Sitemap: ${item}\n`;
        });
    }
    return content;
}
function resolveSitemap(data) {
    let content = "";
    content += '<?xml version="1.0" encoding="UTF-8"?>\n';
    content += '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n';
    for (const item of data){
        content += "<url>\n";
        content += `<loc>${item.url}</loc>\n`;
        if (item.lastModified) {
            const serializedDate = item.lastModified instanceof Date ? item.lastModified.toISOString() : item.lastModified;
            content += `<lastmod>${serializedDate}</lastmod>\n`;
        }
        if (item.changeFrequency) {
            content += `<changefreq>${item.changeFrequency}</changefreq>\n`;
        }
        if (typeof item.priority === "number") {
            content += `<priority>${item.priority}</priority>\n`;
        }
        content += "</url>\n";
    }
    content += "</urlset>\n";
    return content;
}
function resolveManifest(data) {
    return JSON.stringify(data);
}
function resolveRouteData(data, fileType) {
    if (fileType === "robots") {
        return resolveRobots(data);
    }
    if (fileType === "sitemap") {
        return resolveSitemap(data);
    }
    if (fileType === "manifest") {
        return resolveManifest(data);
    }
    return "";
} //# sourceMappingURL=resolve-route-data.js.map
e:NNWD�������Object.defineProperty(exports, "__esModule", (�))�0�__webpack_require__�79926��buffer�source�size�maps�hash8
Object.defineProperty(exports, "__esModule", ({
    value: true
}));
0 && (0);
function _export(target, all) {
    for(var name in all)Object.defineProperty(target, name, {
        enumerable: true,
        get: all[name]
    });
}
_export(exports, {
    resolveRobots: function() {
        return resolveRobots;
    },
    resolveSitemap: function() {
        return resolveSitemap;
    },
    resolveManifest: function() {
        return resolveManifest;
    },
    resolveRouteData: function() {
        return resolveRouteData;
    }
});
const _utils = __webpack_require__(79926);
function resolveRobots(data) {
    let content = "";
    const rules = Array.isArray(data.rules) ? data.rules : [
        data.rules
    ];
    for (const rule of rules){
        const userAgent = (0, _utils.resolveArray)(rule.userAgent || [
            "*"
        ]);
        for (const agent of userAgent){
            content += `User-Agent: ${agent}\n`;
        }
        if (rule.allow) {
            const allow = (0, _utils.resolveArray)(rule.allow);
            for (const item of allow){
                content += `Allow: ${item}\n`;
            }
        }
        if (rule.disallow) {
            const disallow = (0, _utils.resolveArray)(rule.disallow);
            for (const item of disallow){
                content += `Disallow: ${item}\n`;
            }
        }
        if (rule.crawlDelay) {
            content += `Crawl-delay: ${rule.crawlDelay}\n`;
        }
        content += "\n";
    }
    if (data.host) {
        content += `Host: ${data.host}\n`;
    }
    if (data.sitemap) {
        const sitemap = (0, _utils.resolveArray)(data.sitemap);
        // TODO-METADATA: support injecting sitemap url into robots.txt
        sitemap.forEach((item)=>{
            content += `Sitemap: ${item}\n`;
        });
    }
    return content;
}
function resolveSitemap(data) {
    let content = "";
    content += '<?xml version="1.0" encoding="UTF-8"?>\n';
    content += '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n';
    for (const item of data){
        content += "<url>\n";
        content += `<loc>${item.url}</loc>\n`;
        if (item.lastModified) {
            const serializedDate = item.lastModified instanceof Date ? item.lastModified.toISOString() : item.lastModified;
            content += `<lastmod>${serializedDate}</lastmod>\n`;
        }
        if (item.changeFrequency) {
            content += `<changefreq>${item.changeFrequency}</changefreq>\n`;
        }
        if (typeof item.priority === "number") {
            content += `<priority>${item.priority}</priority>\n`;
        }
        content += "</url>\n";
    }
    content += "</urlset>\n";
    return content;
}
function resolveManifest(data) {
    return JSON.stringify(data);
}
function resolveRouteData(data, fileType) {
    if (fileType === "robots") {
        return resolveRobots(data);
    }
    if (fileType === "sitemap") {
        return resolveSitemap(data);
    }
    if (fileType === "manifest") {
        return resolveManifest(data);
    }
    return "";
} //# sourceMappingURL=resolve-route-data.js.map
��{"finalSource":true}�map�bufferedMapReplaceSourceRawSource�"use strict";
Object.defineProperty(exports, "__esModule", {
    value: true
});
0 && (module.exports = {
    resolveRobots: null,
    resolveSitemap: null,
    resolveManifest: null,
    resolveRouteData: null
});
function _export(target, all) {
    for(var name in all)Object.defineProperty(target, name, {
        enumerable: true,
        get: all[name]
    });
}
_export(exports, {
    resolveRobots: function() {
        return resolveRobots;
    },
    resolveSitemap: function() {
        return resolveSitemap;
    },
    resolveManifest: function() {
        return resolveManifest;
    },
    resolveRouteData: function() {
        return resolveRouteData;
    }
});
const _utils = require("../../../../lib/metadata/generate/utils");
function resolveRobots(data) {
    let content = "";
    const rules = Array.isArray(data.rules) ? data.rules : [
        data.rules
    ];
    for (const rule of rules){
        const userAgent = (0, _utils.resolveArray)(rule.userAgent || [
            "*"
        ]);
        for (const agent of userAgent){
            content += `User-Agent: ${agent}\n`;
        }
        if (rule.allow) {
            const allow = (0, _utils.resolveArray)(rule.allow);
            for (const item of allow){
                content += `Allow: ${item}\n`;
            }
        }
        if (rule.disallow) {
            const disallow = (0, _utils.resolveArray)(rule.disallow);
            for (const item of disallow){
                content += `Disallow: ${item}\n`;
            }
        }
        if (rule.crawlDelay) {
            content += `Crawl-delay: ${rule.crawlDelay}\n`;
        }
        content += "\n";
    }
    if (data.host) {
        content += `Host: ${data.host}\n`;
    }
    if (data.sitemap) {
        const sitemap = (0, _utils.resolveArray)(data.sitemap);
        // TODO-METADATA: support injecting sitemap url into robots.txt
        sitemap.forEach((item)=>{
            content += `Sitemap: ${item}\n`;
        });
    }
    return content;
}
function resolveSitemap(data) {
    let content = "";
    content += '<?xml version="1.0" encoding="UTF-8"?>\n';
    content += '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n';
    for (const item of data){
        content += "<url>\n";
        content += `<loc>${item.url}</loc>\n`;
        if (item.lastModified) {
            const serializedDate = item.lastModified instanceof Date ? item.lastModified.toISOString() : item.lastModified;
            content += `<lastmod>${serializedDate}</lastmod>\n`;
        }
        if (item.changeFrequency) {
            content += `<changefreq>${item.changeFrequency}</changefreq>\n`;
        }
        if (typeof item.priority === "number") {
            content += `<priority>${item.priority}</priority>\n`;
        }
        content += "</url>\n";
    }
    content += "</urlset>\n";
    return content;
}
function resolveManifest(data) {
    return JSON.stringify(data);
}
function resolveRouteData(data, fileType) {
    if (fileType === "robots") {
        return resolveRobots(data);
    }
    if (fileType === "sitemap") {
        return resolveSitemap(data);
    }
    if (fileType === "manifest") {
        return resolveManifest(data);
    }
    return "";
} //# sourceMappingURL=resolve-route-data.js.map
�012undefined1458Object.defineProperty(exports, "__esModule", (undefined7878))undefined872110undefined693699__webpack_require__undefined70174179926undefined


/***/ })��/***/ ((__unused_webpack_module, exports, __webpack_require__) => {


Object.defineProperty(exports, "__esModule", ({
    value: true
}));
0 && (0);
function _export(target, all) {
    for(var name in all)Object.defineProperty(target, name, {
        enumerable: true,
        get: all[name]
    });
}
_export(exports, {
    resolveRobots: function() {
        return resolveRobots;
    },
    resolveSitemap: function() {
        return resolveSitemap;
    },
    resolveManifest: function() {
        return resolveManifest;
    },
    resolveRouteData: function() {
        return resolveRouteData;
    }
});
const _utils = __webpack_require__(79926);
function resolveRobots(data) {
    let content = "";
    const rules = Array.isArray(data.rules) ? data.rules : [
        data.rules
    ];
    for (const rule of rules){
        const userAgent = (0, _utils.resolveArray)(rule.userAgent || [
            "*"
        ]);
        for (const agent of userAgent){
            content += `User-Agent: ${agent}\n`;
        }
        if (rule.allow) {
            const allow = (0, _utils.resolveArray)(rule.allow);
            for (const item of allow){
                content += `Allow: ${item}\n`;
            }
        }
        if (rule.disallow) {
            const disallow = (0, _utils.resolveArray)(rule.disallow);
            for (const item of disallow){
                content += `Disallow: ${item}\n`;
            }
        }
        if (rule.crawlDelay) {
            content += `Crawl-delay: ${rule.crawlDelay}\n`;
        }
        content += "\n";
    }
    if (data.host) {
        content += `Host: ${data.host}\n`;
    }
    if (data.sitemap) {
        const sitemap = (0, _utils.resolveArray)(data.sitemap);
        // TODO-METADATA: support injecting sitemap url into robots.txt
        sitemap.forEach((item)=>{
            content += `Sitemap: ${item}\n`;
        });
    }
    return content;
}
function resolveSitemap(data) {
    let content = "";
    content += '<?xml version="1.0" encoding="UTF-8"?>\n';
    content += '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n';
    for (const item of data){
        content += "<url>\n";
        content += `<loc>${item.url}</loc>\n`;
        if (item.lastModified) {
            const serializedDate = item.lastModified instanceof Date ? item.lastModified.toISOString() : item.lastModified;
            content += `<lastmod>${serializedDate}</lastmod>\n`;
        }
        if (item.changeFrequency) {
            content += `<changefreq>${item.changeFrequency}</changefreq>\n`;
        }
        if (typeof item.priority === "number") {
            content += `<priority>${item.priority}</priority>\n`;
        }
        content += "</url>\n";
    }
    content += "</urlset>\n";
    return content;
}
function resolveManifest(data) {
    return JSON.stringify(data);
}
function resolveRouteData(data, fileType) {
    if (fileType === "robots") {
        return resolveRobots(data);
    }
    if (fileType === "sitemap") {
        return resolveSitemap(data);
    }
    if (fileType === "manifest") {
        return resolveManifest(data);
    }
    return "";
} //# sourceMappingURL=resolve-route-data.js.map


/***/ })���E/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

��"use strict";
Object.defineProperty(exports, "__esModule", {
    value: true
});
0 && (module.exports = {
    resolveRobots: null,
    resolveSitemap: null,
    resolveManifest: null,
    resolveRouteData: null
});
function _export(target, all) {
    for(var name in all)Object.defineProperty(target, name, {
        enumerable: true,
        get: all[name]
    });
}
_export(exports, {
    resolveRobots: function() {
        return resolveRobots;
    },
    resolveSitemap: function() {
        return resolveSitemap;
    },
    resolveManifest: function() {
        return resolveManifest;
    },
    resolveRouteData: function() {
        return resolveRouteData;
    }
});
const _utils = require("../../../../lib/metadata/generate/utils");
function resolveRobots(data) {
    let content = "";
    const rules = Array.isArray(data.rules) ? data.rules : [
        data.rules
    ];
    for (const rule of rules){
        const userAgent = (0, _utils.resolveArray)(rule.userAgent || [
            "*"
        ]);
        for (const agent of userAgent){
            content += `User-Agent: ${agent}\n`;
        }
        if (rule.allow) {
            const allow = (0, _utils.resolveArray)(rule.allow);
            for (const item of allow){
                content += `Allow: ${item}\n`;
            }
        }
        if (rule.disallow) {
            const disallow = (0, _utils.resolveArray)(rule.disallow);
            for (const item of disallow){
                content += `Disallow: ${item}\n`;
            }
        }
        if (rule.crawlDelay) {
            content += `Crawl-delay: ${rule.crawlDelay}\n`;
        }
        content += "\n";
    }
    if (data.host) {
        content += `Host: ${data.host}\n`;
    }
    if (data.sitemap) {
        const sitemap = (0, _utils.resolveArray)(data.sitemap);
        // TODO-METADATA: support injecting sitemap url into robots.txt
        sitemap.forEach((item)=>{
            content += `Sitemap: ${item}\n`;
        });
    }
    return content;
}
function resolveSitemap(data) {
    let content = "";
    content += '<?xml version="1.0" encoding="UTF-8"?>\n';
    content += '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n';
    for (const item of data){
        content += "<url>\n";
        content += `<loc>${item.url}</loc>\n`;
        if (item.lastModified) {
            const serializedDate = item.lastModified instanceof Date ? item.lastModified.toISOString() : item.lastModified;
            content += `<lastmod>${serializedDate}</lastmod>\n`;
        }
        if (item.changeFrequency) {
            content += `<changefreq>${item.changeFrequency}</changefreq>\n`;
        }
        if (typeof item.priority === "number") {
            content += `<priority>${item.priority}</priority>\n`;
        }
        content += "</url>\n";
    }
    content += "</urlset>\n";
    return content;
}
function resolveManifest(data) {
    return JSON.stringify(data);
}
function resolveRouteData(data, fileType) {
    if (fileType === "robots") {
        return resolveRobots(data);
    }
    if (fileType === "sitemap") {
        return resolveSitemap(data);
    }
    if (fileType === "manifest") {
        return resolveManifest(data);
    }
    return "";
} //# sourceMappingURL=resolve-route-data.js.map
�012undefined1458Object.defineProperty(exports, "__esModule", (undefined7878))undefined872110undefined693699__webpack_require__undefined70174179926undefined��,

/***/ 79926:
r�webpack/lib/util/registerExternalSerializer�webpack-sources/ConcatSource��webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource0/***/ ((__unused_webpack_module, exports) => {

�webpack/lib/util/registerExternalSerializer�webpack-sources/CachedSource%�webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource�webpack/lib/util/registerExternalSerializer�webpack-sources/RawSourceB"use strict";
Object.defineProperty(exports, "__esModule", {
    value: true
});
0 && (module.exports = {
    resolveAsArrayOrUndefined: null,
    resolveArray: null
});
function _export(target, all) {
    for(var name in all)Object.defineProperty(target, name, {
        enumerable: true,
        get: all[name]
    });
}
_export(exports, {
    resolveAsArrayOrUndefined: function() {
        return resolveAsArrayOrUndefined;
    },
    resolveArray: function() {
        return resolveArray;
    }
});
function resolveArray(value) {
    if (Array.isArray(value)) {
        return value;
    }
    return [
        value
    ];
}
function resolveAsArrayOrUndefined(value) {
    if (typeof value === "undefined" || value === null) {
        return undefined;
    }
    return resolveArray(value);
} //# sourceMappingURL=utils.js.map
e:NNW@���Object.defineProperty(exports, "__esModule", (�))�0��buffer�source�size�maps�hash�
Object.defineProperty(exports, "__esModule", ({
    value: true
}));
0 && (0);
function _export(target, all) {
    for(var name in all)Object.defineProperty(target, name, {
        enumerable: true,
        get: all[name]
    });
}
_export(exports, {
    resolveAsArrayOrUndefined: function() {
        return resolveAsArrayOrUndefined;
    },
    resolveArray: function() {
        return resolveArray;
    }
});
function resolveArray(value) {
    if (Array.isArray(value)) {
        return value;
    }
    return [
        value
    ];
}
function resolveAsArrayOrUndefined(value) {
    if (typeof value === "undefined" || value === null) {
        return undefined;
    }
    return resolveArray(value);
} //# sourceMappingURL=utils.js.map
��{"finalSource":true}�map�bufferedMapReplaceSourceRawSourceB"use strict";
Object.defineProperty(exports, "__esModule", {
    value: true
});
0 && (module.exports = {
    resolveAsArrayOrUndefined: null,
    resolveArray: null
});
function _export(target, all) {
    for(var name in all)Object.defineProperty(target, name, {
        enumerable: true,
        get: all[name]
    });
}
_export(exports, {
    resolveAsArrayOrUndefined: function() {
        return resolveAsArrayOrUndefined;
    },
    resolveArray: function() {
        return resolveArray;
    }
});
function resolveArray(value) {
    if (Array.isArray(value)) {
        return value;
    }
    return [
        value
    ];
}
function resolveAsArrayOrUndefined(value) {
    if (typeof value === "undefined" || value === null) {
        return undefined;
    }
    return resolveArray(value);
} //# sourceMappingURL=utils.js.map
e012undefined1458Object.defineProperty(exports, "__esModule", (undefined7878))undefined871660undefined


/***/ })�"/***/ ((__unused_webpack_module, exports) => {


Object.defineProperty(exports, "__esModule", ({
    value: true
}));
0 && (0);
function _export(target, all) {
    for(var name in all)Object.defineProperty(target, name, {
        enumerable: true,
        get: all[name]
    });
}
_export(exports, {
    resolveAsArrayOrUndefined: function() {
        return resolveAsArrayOrUndefined;
    },
    resolveArray: function() {
        return resolveArray;
    }
});
function resolveArray(value) {
    if (Array.isArray(value)) {
        return value;
    }
    return [
        value
    ];
}
function resolveAsArrayOrUndefined(value) {
    if (typeof value === "undefined" || value === null) {
        return undefined;
    }
    return resolveArray(value);
} //# sourceMappingURL=utils.js.map


/***/ })���0/***/ ((__unused_webpack_module, exports) => {

�B"use strict";
Object.defineProperty(exports, "__esModule", {
    value: true
});
0 && (module.exports = {
    resolveAsArrayOrUndefined: null,
    resolveArray: null
});
function _export(target, all) {
    for(var name in all)Object.defineProperty(target, name, {
        enumerable: true,
        get: all[name]
    });
}
_export(exports, {
    resolveAsArrayOrUndefined: function() {
        return resolveAsArrayOrUndefined;
    },
    resolveArray: function() {
        return resolveArray;
    }
});
function resolveArray(value) {
    if (Array.isArray(value)) {
        return value;
    }
    return [
        value
    ];
}
function resolveAsArrayOrUndefined(value) {
    if (typeof value === "undefined" || value === null) {
        return undefined;
    }
    return resolveArray(value);
} //# sourceMappingURL=utils.js.map
e012undefined1458Object.defineProperty(exports, "__esModule", (undefined7878))undefined871660undefined��w

};
;

// load runtime
var __webpack_require__ = require("../../webpack-runtime.js");
__webpack_require__.C(exports);
�var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
var __webpack_exports__ = __webpack_require__.X(0, [638,266], () => (__webpack_exec__(17784)));
,module.exports = __webpack_exports__;

})();���M�"use strict";
(() => {
var exports = {};
exports.id = 717;
exports.ids = [717];
exports.modules = {

/***/ 30517:
/***/ ((module) => {

module.exports = require("next/dist/compiled/next-server/app-route.runtime.prod.js");

/***/ }),

/***/ 17784:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  headerHooks: () => (/* binding */ headerHooks),
  originalPathname: () => (/* binding */ originalPathname),
  patchFetch: () => (/* binding */ patchFetch),
  requestAsyncStorage: () => (/* binding */ requestAsyncStorage),
  routeModule: () => (/* binding */ routeModule),
  serverHooks: () => (/* binding */ serverHooks),
  staticGenerationAsyncStorage: () => (/* binding */ staticGenerationAsyncStorage),
  staticGenerationBailout: () => (/* binding */ staticGenerationBailout)
});

// NAMESPACE OBJECT: ./app/sitemap.js
var sitemap_namespaceObject = {};
__webpack_require__.r(sitemap_namespaceObject);
__webpack_require__.d(sitemap_namespaceObject, {
  "default": () => (sitemap)
});

// NAMESPACE OBJECT: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__
var sitemap_next_metadata_route_namespaceObject = {};
__webpack_require__.r(sitemap_next_metadata_route_namespaceObject);
__webpack_require__.d(sitemap_next_metadata_route_namespaceObject, {
  GET: () => (GET)
});

// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-modules/app-route/module.compiled.js
var module_compiled = __webpack_require__(95419);
// EXTERNAL MODULE: ./node_modules/next/dist/server/future/route-kind.js
var route_kind = __webpack_require__(69108);
// EXTERNAL MODULE: ./node_modules/next/dist/server/lib/patch-fetch.js
var patch_fetch = __webpack_require__(99678);
// EXTERNAL MODULE: ./node_modules/next/server.js
var server = __webpack_require__(79647);
// EXTERNAL MODULE: ./data/seo.js
var seo = __webpack_require__(62486);
;// CONCATENATED MODULE: ./data/blogApi.js
const BLOG_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2/posts";
const BLOG_FALLBACK_IMAGE = "/assets/img/blog/grid/post-1.png";
const BLOG_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (value = "")=>decodeHtml(value.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim());
const normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const formatDate = (value)=>{
    if (!value) {
        return "";
    }
    return new Intl.DateTimeFormat("en", {
        month: "short",
        day: "numeric",
        year: "numeric"
    }).format(new Date(value));
};
const getFeaturedImage = (post)=>{
    const media = post?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || BLOG_FALLBACK_IMAGE;
};
const getCategory = (post)=>post?._embedded?.["wp:term"]?.[0]?.[0]?.name || "Blog";
const getTags = (post)=>{
    const terms = post?._embedded?.["wp:term"]?.[1] || [];
    return terms.map((term)=>term.name);
};
const getAuthorName = (post)=>post?._embedded?.author?.[0]?.name || "Admin";
const getAuthorAvatar = (post)=>post?._embedded?.author?.[0]?.avatar_urls?.["96"] || "/assets/img/root/author-avatar.png";
const getAuthorDescription = (post)=>post?._embedded?.author?.[0]?.description || "";
const appendListParam = (params, name, values = [])=>{
    const list = Array.isArray(values) ? values : [
        values
    ];
    list.filter(Boolean).forEach((value)=>{
        params.append(`${name}[]`, String(value));
    });
};
const buildBlogPostsUrl = ({ page = BLOG_LIST_FILTERS.page, perPage = BLOG_LIST_FILTERS.perPage, orderby = BLOG_LIST_FILTERS.orderby, order = BLOG_LIST_FILTERS.order, sticky, search, searchColumns, categories, status, author, exclude } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage),
        orderby,
        order
    });
    if (typeof sticky === "boolean") {
        params.set("sticky", String(sticky));
    }
    if (search) {
        params.set("search", search);
    }
    appendListParam(params, "search_columns", searchColumns);
    appendListParam(params, "categories", categories);
    appendListParam(params, "status", status);
    appendListParam(params, "author", author);
    appendListParam(params, "exclude", exclude);
    return `${BLOG_API_BASE}?${params.toString()}`;
};
const normalizeWpPost = (post, { includeContent = false } = {})=>({
        id: post.id,
        slug: post.slug,
        href: `/blog/${post.slug}`,
        sourceUrl: post.link,
        img: getFeaturedImage(post),
        alt: stripHtml(post.title?.rendered || "Blog image"),
        cat: getCategory(post),
        date: formatDate(post.date),
        title: stripHtml(post.title?.rendered || ""),
        description: stripHtml(post.excerpt?.rendered || ""),
        descriptions: stripHtml(post.excerpt?.rendered || ""),
        categoryIds: post.categories || [],
        tagIds: post.tags || [],
        tags: getTags(post),
        authorId: post.author,
        author: getAuthorName(post),
        authorAvatar: getAuthorAvatar(post),
        authorDescription: getAuthorDescription(post),
        content: includeContent ? normalizeContent(post.content?.rendered || "") : ""
    });
const getBlogPostsPage = async (filters = {})=>{
    const url = buildBlogPostsUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                posts: [],
                totalPages: 0,
                total: 0
            };
        }
        const posts = await response.json();
        return {
            posts: Array.isArray(posts) ? posts.map((post)=>normalizeWpPost(post)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        return {
            posts: [],
            totalPages: 0,
            total: 0
        };
    }
};
const getBlogPosts = async (filters = {})=>{
    const { posts } = await getBlogPostsPage(filters);
    return posts;
};
const getBlogPostById = async (idOrSlug)=>{
    if (!idOrSlug) {
        return null;
    }
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${BLOG_API_BASE}/${idOrSlug}?_embed=1` : `${BLOG_API_BASE}?slug=${encodeURIComponent(idOrSlug)}&_embed=1`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpPost(data, {
                includeContent: true
            });
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpPost(data[0], {
                    includeContent: true
                });
            }
            return null;
        }
    } catch (error) {
        return null;
    }
};
const getRelatedBlogPosts = async (post, { perPage = 2 } = {})=>{
    if (!post?.id) {
        return [];
    }
    const categories = post.categoryIds?.length ? post.categoryIds : undefined;
    const { posts } = await getBlogPostsPage({
        page: 1,
        perPage,
        orderby: "date",
        order: "desc",
        categories,
        exclude: [
            post.id
        ],
        sticky: false
    });
    return posts;
};

;// CONCATENATED MODULE: ./data/servicesApi.js
const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const servicesApi_htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const servicesApi_decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>servicesApi_htmlEntities[entity] || entity);
const servicesApi_stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? servicesApi_stripHtml(servicesApi_decodeHtml(match[1])) : "";
};
const servicesApi_getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = servicesApi_decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ const normalizeWpService = (item)=>{
    const title = servicesApi_decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = servicesApi_stripHtml(servicesApi_decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = servicesApi_getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = servicesApi_decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? servicesApi_decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? servicesApi_decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? servicesApi_decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? servicesApi_decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: servicesApi_decodeHtml(item.name || ""),
                    description: servicesApi_decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};

;// CONCATENATED MODULE: ./data/worksApi.js
const WORKS_API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const worksApi_htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const worksApi_decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>worksApi_htmlEntities[entity] || entity);
const getTechnologies = async ()=>{
    const url = `${WORKS_API_BASE}/technologies`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: worksApi_decodeHtml(item.name),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching technologies:", error);
        return [];
    }
};
const WORKS_FALLBACK_IMAGE = "/assets/img/portfolio/work-2.png";
const worksApi_getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || WORKS_FALLBACK_IMAGE;
};
const worksApi_formatDate = (value)=>{
    if (!value) return "";
    return new Intl.DateTimeFormat("en", {
        month: "short",
        year: "numeric"
    }).format(new Date(value));
};
const getTechnologyNames = (item)=>{
    const termGroups = item?._embedded?.["wp:term"] || [];
    for (const group of termGroups){
        if (Array.isArray(group) && group.length > 0 && group[0]?.taxonomy === "technology") {
            return group.map((t)=>worksApi_decodeHtml(t.name)).join(", ");
        }
    }
    return "";
};
const worksApi_normalizeContent = (html = "")=>{
    if (!html) return "";
    return html.replace(/<img\s+[^>]*>/g, (imgTag)=>{
        let srcsetValue = "";
        const dataSrcsetMatch = imgTag.match(/data-srcset="([^"]+)"/);
        if (dataSrcsetMatch) {
            srcsetValue = dataSrcsetMatch[1];
        }
        let srcValue = "";
        const dataSrcMatch = imgTag.match(/data-src="([^"]+)"/) || imgTag.match(/data-orig-src="([^"]+)"/);
        if (dataSrcMatch) {
            srcValue = dataSrcMatch[1];
        }
        let newTag = imgTag;
        if (srcsetValue) {
            if (newTag.includes("srcset=")) {
                newTag = newTag.replace(/srcset="[^"]*"/, `srcset="${srcsetValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img srcset="${srcsetValue}"`);
            }
        } else {
            newTag = newTag.replace(/srcset="data:image\/svg\+xml[^"]*"/g, "");
        }
        if (srcValue) {
            if (newTag.includes("src=")) {
                newTag = newTag.replace(/src="[^"]*"/, `src="${srcValue}"`);
            } else {
                newTag = newTag.replace("<img", `<img src="${srcValue}"`);
            }
        }
        return newTag;
    });
};
const normalizeWpCaseStudy = (item)=>{
    const featuredImage = worksApi_getFeaturedImage(item);
    const techNames = getTechnologyNames(item);
    return {
        id: item.id,
        slug: item.slug,
        title: worksApi_decodeHtml(item.title?.rendered || ""),
        cat: techNames || (item.meta?.zini_services ? worksApi_decodeHtml(item.meta.zini_services) : "Design"),
        date: item.meta?.zini_date ? worksApi_decodeHtml(item.meta.zini_date) : worksApi_formatDate(item.date),
        img: featuredImage,
        imgPopup: featuredImage,
        dataId: `work-${item.id}`,
        client: item.meta?.zini_client ? worksApi_decodeHtml(item.meta.zini_client) : "",
        team: item.meta?.zini_team ? worksApi_decodeHtml(item.meta.zini_team) : "",
        services: item.meta?.zini_services ? worksApi_decodeHtml(item.meta.zini_services) : "",
        technologies: item.technologies || [],
        content: worksApi_normalizeContent(item.content?.rendered || ""),
        excerpt: worksApi_decodeHtml(item.excerpt?.rendered || "").replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim()
    };
};
const WORKS_LIST_FILTERS = {
    page: 1,
    perPage: 6,
    orderby: "date",
    order: "desc"
};
const buildCaseStudiesUrl = ({ page = WORKS_LIST_FILTERS.page, perPage = WORKS_LIST_FILTERS.perPage, orderby = WORKS_LIST_FILTERS.orderby, order = WORKS_LIST_FILTERS.order, technologies } = {})=>{
    const params = new URLSearchParams({
        _embed: "1",
        page: String(page),
        per_page: String(perPage)
    });
    if (orderby) {
        params.set("orderby", orderby);
    }
    if (order) {
        params.set("order", order);
    }
    if (technologies) {
        params.set("technologies", String(technologies));
    }
    return `${WORKS_API_BASE}/case-studies?${params.toString()}`;
};
const getCaseStudiesPage = async (filters = {})=>{
    const url = buildCaseStudiesUrl(filters);
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return {
                caseStudies: [],
                totalPages: 0,
                total: 0
            };
        }
        const data = await response.json();
        return {
            caseStudies: Array.isArray(data) ? data.map((item)=>normalizeWpCaseStudy(item)) : [],
            totalPages: Number(response.headers.get("x-wp-totalpages") || 0),
            total: Number(response.headers.get("x-wp-total") || 0)
        };
    } catch (error) {
        console.error("Error fetching case studies page:", error);
        return {
            caseStudies: [],
            totalPages: 0,
            total: 0
        };
    }
};
const getCaseStudies = async (filters = {})=>{
    const { caseStudies } = await getCaseStudiesPage(filters);
    return caseStudies;
};
const getCaseStudyById = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const params = new URLSearchParams();
    params.set("_embed", "1");
    const url = isNumeric ? `${WORKS_API_BASE}/case-studies/${idOrSlug}?${params.toString()}` : `${WORKS_API_BASE}/case-studies?slug=${encodeURIComponent(idOrSlug)}&${params.toString()}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpCaseStudy(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpCaseStudy(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching case study by ID/slug:", error);
        return null;
    }
};
const getNextCaseStudy = async (currentId)=>{
    if (!currentId) return null;
    try {
        // Fetch all case studies sorted by date desc (lightweight, no content needed)
        const { caseStudies } = await getCaseStudiesPage({
            page: 1,
            perPage: 100,
            orderby: "date",
            order: "desc"
        });
        if (!caseStudies.length) return null;
        const currentIndex = caseStudies.findIndex((cs)=>String(cs.id) === String(currentId) || String(cs.slug) === String(currentId));
        // If current not found or is the last one, return null (do not wrap)
        if (currentIndex === -1 || currentIndex >= caseStudies.length - 1) {
            return null;
        }
        const nextIndex = currentIndex + 1;
        const next = caseStudies[nextIndex];
        return {
            title: next.title,
            href: `/case-study/${next.slug}`
        };
    } catch (error) {
        console.error("Error fetching next case study:", error);
        return null;
    }
};

;// CONCATENATED MODULE: ./app/sitemap.js




async function sitemap() {
    const baseUrl = seo/* SITE_CONFIG */.ep.url;
    // 1. Fetch dynamic data for routes
    const [posts, services, caseStudies] = await Promise.all([
        getBlogPosts({
            perPage: 100
        }).catch(()=>[]),
        getServices().catch(()=>[]),
        getCaseStudies({
            perPage: 100
        }).catch(()=>[])
    ]);
    // 2. Define static routes
    const staticPaths = [
        "",
        "/about-us",
        "/about-me",
        "/contact",
        "/faq",
        "/pricing",
        "/privacy-policy",
        "/refund-returns",
        "/team",
        "/services",
        "/case-studies",
        "/blogs"
    ];
    const staticRoutes = staticPaths.map((route)=>({
            url: `${baseUrl}${route}`,
            lastModified: new Date().toISOString(),
            changeFrequency: route === "" ? "daily" : "weekly",
            priority: route === "" ? 1.0 : 0.8
        }));
    // 3. Map dynamic blog posts (dynamic slugs)
    const postRoutes = posts.map((post)=>({
            url: `${baseUrl}/blog/${post.slug || post.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 4. Map dynamic services (dynamic slugs)
    const serviceRoutes = services.map((service)=>({
            url: `${baseUrl}/service/${service.slug || service.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    // 5. Map dynamic case studies (dynamic slugs)
    const caseStudyRoutes = caseStudies.map((work)=>({
            url: `${baseUrl}/case-study/${work.slug || work.id}`,
            lastModified: new Date().toISOString(),
            changeFrequency: "weekly",
            priority: 0.6
        }));
    return [
        ...staticRoutes,
        ...postRoutes,
        ...serviceRoutes,
        ...caseStudyRoutes
    ];
}

// EXTERNAL MODULE: ./node_modules/next/dist/build/webpack/loaders/metadata/resolve-route-data.js
var resolve_route_data = __webpack_require__(57252);
;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-metadata-route-loader.js?page=%2Fsitemap.xml%2Froute&isDynamic=1!./app/sitemap.js?__next_metadata_route__




const sitemapModule = { ...sitemap_namespaceObject }
const handler = sitemapModule.default
const generateSitemaps = sitemapModule.generateSitemaps
const contentType = "application/xml"
const fileType = "sitemap"


  if (typeof handler !== 'function') {
    throw new Error('Default export is missing in "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"')
  }
  




async function GET(_, ctx) {
  const { __metadata_id__ = [], ...params } = ctx.params || {}
  const targetId = __metadata_id__[0]
  let id = undefined
  const sitemaps = generateSitemaps ? await generateSitemaps() : null

  if (sitemaps) {
    id = sitemaps.find((item) => {
      if (false) {}
      return item.id.toString() === targetId
    })?.id
    if (id == null) {
      return new server.NextResponse('Not Found', {
        status: 404,
      })
    }
  }

  const data = await handler({ id })
  const content = (0,resolve_route_data.resolveRouteData)(data, fileType)

  return new server.NextResponse(content, {
    headers: {
      'Content-Type': contentType,
      'Cache-Control': "public, max-age=0, must-revalidate",
    },
  })
}



;// CONCATENATED MODULE: ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?page=%2Fsitemap.xml%2Froute&name=app%2Fsitemap.xml%2Froute&pagePath=private-next-app-dir%2Fsitemap.js&appDir=G%3A%5Czinisoft%5Czinisoft_beta%5Czinisoft.net%5Cfrontend-v3%5Capp&appPaths=%2Fsitemap&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!




// We inject the nextConfigOutput here so that we can use them in the route
// module.
const nextConfigOutput = ""
const routeModule = new module_compiled.AppRouteRouteModule({
    definition: {
        kind: route_kind/* RouteKind */.x.APP_ROUTE,
        page: "/sitemap.xml/route",
        pathname: "/sitemap.xml",
        filename: "sitemap",
        bundlePath: "app/sitemap.xml/route"
    },
    resolvedPagePath: "next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__",
    nextConfigOutput,
    userland: sitemap_next_metadata_route_namespaceObject
});
// Pull out the exports that we need to expose from the module. This should
// be eliminated when we've moved the other routes to the new format. These
// are used to hook into the route.
const { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks, headerHooks, staticGenerationBailout } = routeModule;
const originalPathname = "/sitemap.xml/route";
function patchFetch() {
    return (0,patch_fetch.patchFetch)({
        serverHooks,
        staticGenerationAsyncStorage
    });
}


//# sourceMappingURL=app-route.js.map

/***/ }),

/***/ 62486:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ep: () => (/* binding */ SITE_CONFIG)
/* harmony export */ });
/* unused harmony exports DEFAULT_OG, buildMetadata, buildWebPageSchema, buildOrganizationSchema, buildServiceSchema, buildBlogPostSchema, buildCaseStudySchema, cleanMetaDescription, buildFaqSchema */
/**
 * Central SEO Configuration
 * Single source of truth for all site-wide SEO constants and helpers.
 */ // ─── Site-Wide Constants ────────────────────────────────────────────
const SITE_CONFIG = {
    name: "ZiniSoft Ltd. Co.",
    url: "https://zinisoft.net",
    logo: "https://zinisoft.net/assets/img/root/logo-dark.png",
    description: "ZiniSoft Ltd. Co specializes in AI engineering and software system architecture, delivering high-performance, scalable B2B enterprise software applications.",
    socialLinks: [
        "https://www.facebook.com/zinisoft",
        "https://www.linkedin.com/company/zinisoft"
    ]
};
// ─── Default OpenGraph & Twitter Settings ───────────────────────────
const DEFAULT_OG = {
    type: "website",
    siteName: SITE_CONFIG.name,
    locale: "en_US",
    image: {
        url: `${SITE_CONFIG.url}/assets/img/root/og-default.png`,
        width: 1200,
        height: 630,
        alt: `${SITE_CONFIG.name} - AI & Software Systems`
    }
};
// ─── Helper: Build Complete Next.js Metadata Object ─────────────────
/**
 * Takes a page config and returns a full Next.js metadata object
 * including title, description, openGraph, twitter, and canonical URL.
 *
 * @param {{ title: string, description: string, path?: string, ogImage?: string }} page
 * @returns {object} Next.js metadata object
 */ function buildMetadata({ title, description, path = "", ogImage }) {
    const canonicalUrl = path ? `${SITE_CONFIG.url}${path.startsWith("/") ? path : `/${path}`}` : SITE_CONFIG.url;
    const ogImageObj = ogImage ? {
        url: ogImage,
        width: 1200,
        height: 630,
        alt: title
    } : DEFAULT_OG.image;
    return {
        title,
        description,
        metadataBase: new URL(SITE_CONFIG.url),
        alternates: {
            canonical: canonicalUrl
        },
        openGraph: {
            title,
            description,
            url: canonicalUrl,
            siteName: DEFAULT_OG.siteName,
            locale: DEFAULT_OG.locale,
            type: DEFAULT_OG.type,
            images: [
                ogImageObj
            ]
        },
        twitter: {
            card: "summary_large_image",
            title,
            description,
            images: [
                ogImageObj.url
            ]
        }
    };
}
// ─── Helper: Build WebPage JSON-LD Schema ───────────────────────────
/**
 * Generates a WebPage Schema.org JSON-LD object for a page.
 *
 * @param {{ title: string, description: string, path?: string, type?: string }} page
 * @returns {object} JSON-LD schema object
 */ function buildWebPageSchema({ title, description, path = "", type = "WebPage" }) {
    const pageUrl = path ? `${SITE_CONFIG.url}${path.startsWith("/") ? path : `/${path}`}` : SITE_CONFIG.url;
    const typeLower = type.toLowerCase();
    return {
        "@context": "https://schema.org",
        "@type": type,
        "@id": `${pageUrl}/#${typeLower}`,
        url: pageUrl,
        name: title,
        description,
        isPartOf: {
            "@id": `${SITE_CONFIG.url}/#website`
        }
    };
}
// ─── Helper: Build Organization + WebSite @graph Schema ─────────────
/**
 * Returns the global Organization + WebSite JSON-LD graph.
 * Used once in the root layout.
 *
 * @returns {object} JSON-LD @graph schema
 */ function buildOrganizationSchema() {
    return {
        "@context": "https://schema.org",
        "@graph": [
            {
                "@type": "Organization",
                "@id": `${SITE_CONFIG.url}/#organization`,
                name: SITE_CONFIG.name,
                url: SITE_CONFIG.url,
                logo: {
                    "@type": "ImageObject",
                    url: SITE_CONFIG.logo
                },
                sameAs: SITE_CONFIG.socialLinks
            },
            {
                "@type": "WebSite",
                "@id": `${SITE_CONFIG.url}/#website`,
                url: SITE_CONFIG.url,
                name: SITE_CONFIG.name,
                description: SITE_CONFIG.description,
                publisher: {
                    "@id": `${SITE_CONFIG.url}/#organization`
                }
            }
        ]
    };
}
// ─── Helper: Build Service Schema ───────────────────────────────────
/**
 * Generates a Service Schema.org JSON-LD for a service detail page.
 *
 * @param {object} service - The service data object from WordPress API
 * @returns {object|null} JSON-LD schema object or null
 */ function buildServiceSchema(service) {
    if (!service) return null;
    const description = (service.descriptions || service.description || service.text || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "Service",
        "@id": `${SITE_CONFIG.url}/service/${service.id || service.slug}/#service`,
        name: service.title || service.name || "",
        description,
        provider: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url
        },
        serviceType: "Software Development & AI Engineering",
        image: service.featured_image_url || service.img || SITE_CONFIG.logo
    };
}
// ─── Helper: Build BlogPosting Schema ───────────────────────────────
/**
 * Generates a BlogPosting Schema.org JSON-LD for a blog detail page.
 *
 * @param {object} post - The blog post data object
 * @param {string} slugOrId - The slug or ID for the URL
 * @returns {object|null} JSON-LD schema object or null
 */ function buildBlogPostSchema(post, slugOrId) {
    if (!post) return null;
    const description = (post.description || post.content || post.excerpt || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "BlogPosting",
        "@id": `${SITE_CONFIG.url}/blog/${slugOrId}/#blogposting`,
        headline: post.title || "",
        description,
        image: post.img || SITE_CONFIG.logo,
        datePublished: post.date || "",
        author: {
            "@type": "Person",
            name: post.author || "Admin"
        },
        publisher: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url,
            logo: {
                "@type": "ImageObject",
                url: SITE_CONFIG.logo
            }
        }
    };
}
// ─── Helper: Build CreativeWork Schema (Case Study) ─────────────────
/**
 * Generates a CreativeWork Schema.org JSON-LD for a case study detail page.
 *
 * @param {object} caseStudy - The case study data object
 * @param {string} idOrSlug - The ID or slug for the URL
 * @returns {object|null} JSON-LD schema object or null
 */ function buildCaseStudySchema(caseStudy, idOrSlug) {
    if (!caseStudy) return null;
    const description = (caseStudy.excerpt || caseStudy.description || caseStudy.text || caseStudy.content || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "CreativeWork",
        "@id": `${SITE_CONFIG.url}/case-study/${idOrSlug}/#creativework`,
        url: `${SITE_CONFIG.url}/case-study/${idOrSlug}`,
        name: caseStudy.title || "Case Study",
        description,
        image: caseStudy.img || caseStudy.imgPopup || SITE_CONFIG.logo,
        publisher: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url
        }
    };
}
// ─── Helper: Strip HTML and Truncate for Meta Description ───────────
/**
 * Strips HTML tags, normalizes whitespace, and truncates to max length
 * with optional minimum padding.
 *
 * @param {string} raw - Raw text (may contain HTML)
 * @param {string} fallbackSuffix - Text to append if too short
 * @param {number} maxLen - Maximum character length
 * @returns {string}
 */ function cleanMetaDescription(raw, fallbackSuffix = "", maxLen = 155) {
    let text = (raw || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim();
    if (text.length > maxLen) {
        return text.slice(0, maxLen - 3) + "...";
    }
    if (text.length < 50 && fallbackSuffix) {
        text = `${text} ${fallbackSuffix}`.trim();
        return text.length > maxLen ? text.slice(0, maxLen) : text;
    }
    return text;
}
// ─── Helper: Build FAQPage JSON-LD Schema ───────────────────────────
/**
 * Generates an FAQPage Schema.org JSON-LD object.
 *
 * @param {Array} faqContent - The FAQ list with groups and items
 * @returns {object} JSON-LD schema object
 */ function buildFaqSchema(faqContent) {
    if (!faqContent) return null;
    return {
        "@context": "https://schema.org",
        "@type": "FAQPage",
        "mainEntity": faqContent.flatMap((group)=>(group.faqInner || []).map((item)=>({
                    "@type": "Question",
                    "name": item.title,
                    "acceptedAnswer": {
                        "@type": "Answer",
                        "text": (item.descriptions || "").replace(/\n/g, " ")
                    }
                })))
    };
}


/***/ }),

/***/ 57252:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {


Object.defineProperty(exports, "__esModule", ({
    value: true
}));
0 && (0);
function _export(target, all) {
    for(var name in all)Object.defineProperty(target, name, {
        enumerable: true,
        get: all[name]
    });
}
_export(exports, {
    resolveRobots: function() {
        return resolveRobots;
    },
    resolveSitemap: function() {
        return resolveSitemap;
    },
    resolveManifest: function() {
        return resolveManifest;
    },
    resolveRouteData: function() {
        return resolveRouteData;
    }
});
const _utils = __webpack_require__(79926);
function resolveRobots(data) {
    let content = "";
    const rules = Array.isArray(data.rules) ? data.rules : [
        data.rules
    ];
    for (const rule of rules){
        const userAgent = (0, _utils.resolveArray)(rule.userAgent || [
            "*"
        ]);
        for (const agent of userAgent){
            content += `User-Agent: ${agent}\n`;
        }
        if (rule.allow) {
            const allow = (0, _utils.resolveArray)(rule.allow);
            for (const item of allow){
                content += `Allow: ${item}\n`;
            }
        }
        if (rule.disallow) {
            const disallow = (0, _utils.resolveArray)(rule.disallow);
            for (const item of disallow){
                content += `Disallow: ${item}\n`;
            }
        }
        if (rule.crawlDelay) {
            content += `Crawl-delay: ${rule.crawlDelay}\n`;
        }
        content += "\n";
    }
    if (data.host) {
        content += `Host: ${data.host}\n`;
    }
    if (data.sitemap) {
        const sitemap = (0, _utils.resolveArray)(data.sitemap);
        // TODO-METADATA: support injecting sitemap url into robots.txt
        sitemap.forEach((item)=>{
            content += `Sitemap: ${item}\n`;
        });
    }
    return content;
}
function resolveSitemap(data) {
    let content = "";
    content += '<?xml version="1.0" encoding="UTF-8"?>\n';
    content += '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n';
    for (const item of data){
        content += "<url>\n";
        content += `<loc>${item.url}</loc>\n`;
        if (item.lastModified) {
            const serializedDate = item.lastModified instanceof Date ? item.lastModified.toISOString() : item.lastModified;
            content += `<lastmod>${serializedDate}</lastmod>\n`;
        }
        if (item.changeFrequency) {
            content += `<changefreq>${item.changeFrequency}</changefreq>\n`;
        }
        if (typeof item.priority === "number") {
            content += `<priority>${item.priority}</priority>\n`;
        }
        content += "</url>\n";
    }
    content += "</urlset>\n";
    return content;
}
function resolveManifest(data) {
    return JSON.stringify(data);
}
function resolveRouteData(data, fileType) {
    if (fileType === "robots") {
        return resolveRobots(data);
    }
    if (fileType === "sitemap") {
        return resolveSitemap(data);
    }
    if (fileType === "manifest") {
        return resolveManifest(data);
    }
    return "";
} //# sourceMappingURL=resolve-route-data.js.map


/***/ }),

/***/ 79926:
/***/ ((__unused_webpack_module, exports) => {


Object.defineProperty(exports, "__esModule", ({
    value: true
}));
0 && (0);
function _export(target, all) {
    for(var name in all)Object.defineProperty(target, name, {
        enumerable: true,
        get: all[name]
    });
}
_export(exports, {
    resolveAsArrayOrUndefined: function() {
        return resolveAsArrayOrUndefined;
    },
    resolveArray: function() {
        return resolveArray;
    }
});
function resolveArray(value) {
    if (Array.isArray(value)) {
        return value;
    }
    return [
        value
    ];
}
function resolveAsArrayOrUndefined(value) {
    if (typeof value === "undefined" || value === null) {
        return undefined;
    }
    return resolveArray(value);
} //# sourceMappingURL=utils.js.map


/***/ })

};
;

// load runtime
var __webpack_require__ = require("../../webpack-runtime.js");
__webpack_require__.C(exports);
var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
var __webpack_exports__ = __webpack_require__.X(0, [638,266], () => (__webpack_exec__(17784)));
module.exports = __webpack_exports__;

})();�{}�`V�r"use strict";
(() => {
var exports = {};
exports.id = 717;
exports.ids = [717];
exports.modules = {

/***/ 30517:
�/***/ ((module) => {

�Umodule.exports = require("next/dist/compiled/next-server/app-route.runtime.prod.js");�


/***/ })�,

/***/ 17784:
~���Q/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

}�������������������������������������������������������,

/***/ 62486:
|����|���a/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ep: () => (/* binding */ SITE_CONFIG)
/* harmony export */ });
/* unused harmony exports DEFAULT_OG, buildMetadata, buildWebPageSchema, buildOrganizationSchema, buildServiceSchema, buildBlogPostSchema, buildCaseStudySchema, cleanMetaDescription, buildFaqSchema */
}����&/**
 * Central SEO Configuration
 * Single source of truth for all site-wide SEO constants and helpers.
 */ // ─── Site-Wide Constants ────────────────────────────────────────────
export const SITE_CONFIG = {
    name: "ZiniSoft Ltd. Co.",
    url: "https://zinisoft.net",
    logo: "https://zinisoft.net/assets/img/root/logo-dark.png",
    description: "ZiniSoft Ltd. Co specializes in AI engineering and software system architecture, delivering high-performance, scalable B2B enterprise software applications.",
    socialLinks: [
        "https://www.facebook.com/zinisoft",
        "https://www.linkedin.com/company/zinisoft"
    ]
};
// ─── Default OpenGraph & Twitter Settings ───────────────────────────
export const DEFAULT_OG = {
    type: "website",
    siteName: SITE_CONFIG.name,
    locale: "en_US",
    image: {
        url: `${SITE_CONFIG.url}/assets/img/root/og-default.png`,
        width: 1200,
        height: 630,
        alt: `${SITE_CONFIG.name} - AI & Software Systems`
    }
};
// ─── Helper: Build Complete Next.js Metadata Object ─────────────────
/**
 * Takes a page config and returns a full Next.js metadata object
 * including title, description, openGraph, twitter, and canonical URL.
 *
 * @param {{ title: string, description: string, path?: string, ogImage?: string }} page
 * @returns {object} Next.js metadata object
 */ export function buildMetadata({ title, description, path = "", ogImage }) {
    const canonicalUrl = path ? `${SITE_CONFIG.url}${path.startsWith("/") ? path : `/${path}`}` : SITE_CONFIG.url;
    const ogImageObj = ogImage ? {
        url: ogImage,
        width: 1200,
        height: 630,
        alt: title
    } : DEFAULT_OG.image;
    return {
        title,
        description,
        metadataBase: new URL(SITE_CONFIG.url),
        alternates: {
            canonical: canonicalUrl
        },
        openGraph: {
            title,
            description,
            url: canonicalUrl,
            siteName: DEFAULT_OG.siteName,
            locale: DEFAULT_OG.locale,
            type: DEFAULT_OG.type,
            images: [
                ogImageObj
            ]
        },
        twitter: {
            card: "summary_large_image",
            title,
            description,
            images: [
                ogImageObj.url
            ]
        }
    };
}
// ─── Helper: Build WebPage JSON-LD Schema ───────────────────────────
/**
 * Generates a WebPage Schema.org JSON-LD object for a page.
 *
 * @param {{ title: string, description: string, path?: string, type?: string }} page
 * @returns {object} JSON-LD schema object
 */ export function buildWebPageSchema({ title, description, path = "", type = "WebPage" }) {
    const pageUrl = path ? `${SITE_CONFIG.url}${path.startsWith("/") ? path : `/${path}`}` : SITE_CONFIG.url;
    const typeLower = type.toLowerCase();
    return {
        "@context": "https://schema.org",
        "@type": type,
        "@id": `${pageUrl}/#${typeLower}`,
        url: pageUrl,
        name: title,
        description,
        isPartOf: {
            "@id": `${SITE_CONFIG.url}/#website`
        }
    };
}
// ─── Helper: Build Organization + WebSite @graph Schema ─────────────
/**
 * Returns the global Organization + WebSite JSON-LD graph.
 * Used once in the root layout.
 *
 * @returns {object} JSON-LD @graph schema
 */ export function buildOrganizationSchema() {
    return {
        "@context": "https://schema.org",
        "@graph": [
            {
                "@type": "Organization",
                "@id": `${SITE_CONFIG.url}/#organization`,
                name: SITE_CONFIG.name,
                url: SITE_CONFIG.url,
                logo: {
                    "@type": "ImageObject",
                    url: SITE_CONFIG.logo
                },
                sameAs: SITE_CONFIG.socialLinks
            },
            {
                "@type": "WebSite",
                "@id": `${SITE_CONFIG.url}/#website`,
                url: SITE_CONFIG.url,
                name: SITE_CONFIG.name,
                description: SITE_CONFIG.description,
                publisher: {
                    "@id": `${SITE_CONFIG.url}/#organization`
                }
            }
        ]
    };
}
// ─── Helper: Build Service Schema ───────────────────────────────────
/**
 * Generates a Service Schema.org JSON-LD for a service detail page.
 *
 * @param {object} service - The service data object from WordPress API
 * @returns {object|null} JSON-LD schema object or null
 */ export function buildServiceSchema(service) {
    if (!service) return null;
    const description = (service.descriptions || service.description || service.text || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "Service",
        "@id": `${SITE_CONFIG.url}/service/${service.id || service.slug}/#service`,
        name: service.title || service.name || "",
        description,
        provider: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url
        },
        serviceType: "Software Development & AI Engineering",
        image: service.featured_image_url || service.img || SITE_CONFIG.logo
    };
}
// ─── Helper: Build BlogPosting Schema ───────────────────────────────
/**
 * Generates a BlogPosting Schema.org JSON-LD for a blog detail page.
 *
 * @param {object} post - The blog post data object
 * @param {string} slugOrId - The slug or ID for the URL
 * @returns {object|null} JSON-LD schema object or null
 */ export function buildBlogPostSchema(post, slugOrId) {
    if (!post) return null;
    const description = (post.description || post.content || post.excerpt || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "BlogPosting",
        "@id": `${SITE_CONFIG.url}/blog/${slugOrId}/#blogposting`,
        headline: post.title || "",
        description,
        image: post.img || SITE_CONFIG.logo,
        datePublished: post.date || "",
        author: {
            "@type": "Person",
            name: post.author || "Admin"
        },
        publisher: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url,
            logo: {
                "@type": "ImageObject",
                url: SITE_CONFIG.logo
            }
        }
    };
}
// ─── Helper: Build CreativeWork Schema (Case Study) ─────────────────
/**
 * Generates a CreativeWork Schema.org JSON-LD for a case study detail page.
 *
 * @param {object} caseStudy - The case study data object
 * @param {string} idOrSlug - The ID or slug for the URL
 * @returns {object|null} JSON-LD schema object or null
 */ export function buildCaseStudySchema(caseStudy, idOrSlug) {
    if (!caseStudy) return null;
    const description = (caseStudy.excerpt || caseStudy.description || caseStudy.text || caseStudy.content || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim().slice(0, 200);
    return {
        "@context": "https://schema.org",
        "@type": "CreativeWork",
        "@id": `${SITE_CONFIG.url}/case-study/${idOrSlug}/#creativework`,
        url: `${SITE_CONFIG.url}/case-study/${idOrSlug}`,
        name: caseStudy.title || "Case Study",
        description,
        image: caseStudy.img || caseStudy.imgPopup || SITE_CONFIG.logo,
        publisher: {
            "@type": "Organization",
            "@id": `${SITE_CONFIG.url}/#organization`,
            name: SITE_CONFIG.name,
            url: SITE_CONFIG.url
        }
    };
}
// ─── Helper: Strip HTML and Truncate for Meta Description ───────────
/**
 * Strips HTML tags, normalizes whitespace, and truncates to max length
 * with optional minimum padding.
 *
 * @param {string} raw - Raw text (may contain HTML)
 * @param {string} fallbackSuffix - Text to append if too short
 * @param {number} maxLen - Maximum character length
 * @returns {string}
 */ export function cleanMetaDescription(raw, fallbackSuffix = "", maxLen = 155) {
    let text = (raw || "").replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim();
    if (text.length > maxLen) {
        return text.slice(0, maxLen - 3) + "...";
    }
    if (text.length < 50 && fallbackSuffix) {
        text = `${text} ${fallbackSuffix}`.trim();
        return text.length > maxLen ? text.slice(0, maxLen) : text;
    }
    return text;
}
// ─── Helper: Build FAQPage JSON-LD Schema ───────────────────────────
/**
 * Generates an FAQPage Schema.org JSON-LD object.
 *
 * @param {Array} faqContent - The FAQ list with groups and items
 * @returns {object} JSON-LD schema object
 */ export function buildFaqSchema(faqContent) {
    if (!faqContent) return null;
    return {
        "@context": "https://schema.org",
        "@type": "FAQPage",
        "mainEntity": faqContent.flatMap((group)=>(group.faqInner || []).map((item)=>({
                    "@type": "Question",
                    "name": item.title,
                    "acceptedAnswer": {
                        "@type": "Answer",
                        "text": (item.descriptions || "").replace(/\n/g, " ")
                    }
                })))
    };
}
�180186undefined711717undefined13571363undefined26082614undefined33423348undefined45034509undefined56365642undefined69086914undefined81238129undefined88038809undefined���,

/***/ 57252:
x���E/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

y����"use strict";
Object.defineProperty(exports, "__esModule", {
    value: true
});
0 && (module.exports = {
    resolveRobots: null,
    resolveSitemap: null,
    resolveManifest: null,
    resolveRouteData: null
});
function _export(target, all) {
    for(var name in all)Object.defineProperty(target, name, {
        enumerable: true,
        get: all[name]
    });
}
_export(exports, {
    resolveRobots: function() {
        return resolveRobots;
    },
    resolveSitemap: function() {
        return resolveSitemap;
    },
    resolveManifest: function() {
        return resolveManifest;
    },
    resolveRouteData: function() {
        return resolveRouteData;
    }
});
const _utils = require("../../../../lib/metadata/generate/utils");
function resolveRobots(data) {
    let content = "";
    const rules = Array.isArray(data.rules) ? data.rules : [
        data.rules
    ];
    for (const rule of rules){
        const userAgent = (0, _utils.resolveArray)(rule.userAgent || [
            "*"
        ]);
        for (const agent of userAgent){
            content += `User-Agent: ${agent}\n`;
        }
        if (rule.allow) {
            const allow = (0, _utils.resolveArray)(rule.allow);
            for (const item of allow){
                content += `Allow: ${item}\n`;
            }
        }
        if (rule.disallow) {
            const disallow = (0, _utils.resolveArray)(rule.disallow);
            for (const item of disallow){
                content += `Disallow: ${item}\n`;
            }
        }
        if (rule.crawlDelay) {
            content += `Crawl-delay: ${rule.crawlDelay}\n`;
        }
        content += "\n";
    }
    if (data.host) {
        content += `Host: ${data.host}\n`;
    }
    if (data.sitemap) {
        const sitemap = (0, _utils.resolveArray)(data.sitemap);
        // TODO-METADATA: support injecting sitemap url into robots.txt
        sitemap.forEach((item)=>{
            content += `Sitemap: ${item}\n`;
        });
    }
    return content;
}
function resolveSitemap(data) {
    let content = "";
    content += '<?xml version="1.0" encoding="UTF-8"?>\n';
    content += '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n';
    for (const item of data){
        content += "<url>\n";
        content += `<loc>${item.url}</loc>\n`;
        if (item.lastModified) {
            const serializedDate = item.lastModified instanceof Date ? item.lastModified.toISOString() : item.lastModified;
            content += `<lastmod>${serializedDate}</lastmod>\n`;
        }
        if (item.changeFrequency) {
            content += `<changefreq>${item.changeFrequency}</changefreq>\n`;
        }
        if (typeof item.priority === "number") {
            content += `<priority>${item.priority}</priority>\n`;
        }
        content += "</url>\n";
    }
    content += "</urlset>\n";
    return content;
}
function resolveManifest(data) {
    return JSON.stringify(data);
}
function resolveRouteData(data, fileType) {
    if (fileType === "robots") {
        return resolveRobots(data);
    }
    if (fileType === "sitemap") {
        return resolveSitemap(data);
    }
    if (fileType === "manifest") {
        return resolveManifest(data);
    }
    return "";
} //# sourceMappingURL=resolve-route-data.js.map
�012undefined1458Object.defineProperty(exports, "__esModule", (undefined7878))undefined872110undefined693699__webpack_require__undefined70174179926undefined���,

/***/ 79926:
t���0/***/ ((__unused_webpack_module, exports) => {

u���B"use strict";
Object.defineProperty(exports, "__esModule", {
    value: true
});
0 && (module.exports = {
    resolveAsArrayOrUndefined: null,
    resolveArray: null
});
function _export(target, all) {
    for(var name in all)Object.defineProperty(target, name, {
        enumerable: true,
        get: all[name]
    });
}
_export(exports, {
    resolveAsArrayOrUndefined: function() {
        return resolveAsArrayOrUndefined;
    },
    resolveArray: function() {
        return resolveArray;
    }
});
function resolveArray(value) {
    if (Array.isArray(value)) {
        return value;
    }
    return [
        value
    ];
}
function resolveAsArrayOrUndefined(value) {
    if (typeof value === "undefined" || value === null) {
        return undefined;
    }
    return resolveArray(value);
} //# sourceMappingURL=utils.js.map
e012undefined1458Object.defineProperty(exports, "__esModule", (undefined7878))undefined871660undefined���w

};
;

// load runtime
var __webpack_require__ = require("../../webpack-runtime.js");
__webpack_require__.C(exports);
��var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
var __webpack_exports__ = __webpack_require__.X(0, [638,266], () => (__webpack_exec__(17784)));
�,module.exports = __webpack_exports__;

})();N��webpack/lib/util/registerExternalSerializer�webpack-sources/ConcatSource��webpack/lib/util/registerExternalSerializer�webpack-sources/RawSourceW"use strict";
exports.id = 960;
exports.ids = [960];
exports.modules = {

/***/ 21203:
�webpack/lib/util/registerExternalSerializer�webpack-sources/CachedSource���webpack/lib/util/registerExternalSerializer�webpack-sources/ConcatSource��webpack/lib/util/registerExternalSerializer�webpack-sources/RawSourceQ/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

�webpack/lib/util/registerExternalSerializer�webpack-sources/CachedSourceG2�webpack/lib/util/registerExternalSerializer�webpack-sources/ConcatSource��webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource�/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   u: () => (/* binding */ homePage)
/* harmony export */ });
/* harmony import */ var _seo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(56546);
�webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource0import { buildMetadata } from "./seo";
export const homePage = {
    metadata: buildMetadata({
        title: "ZiniSoft Ltd. Co | AI & Software Systems",
        description: "ZiniSoft Ltd. Co specializes in AI engineering and software system architecture, delivering high-performance, scalable B2B enterprise software applications.",
        path: "/"
    }),
    hero: {
        video: {
            channel: "youtube",
            videoId: "1gyTUHP6ne8"
        },
        slides: [
            {
                id: "image-1",
                className: "image-1",
                align: "center",
                darkText: false,
                badge: "Shaping the Digital Future with AI-First Architecture",
                accent: "Engineering High-Performance",
                titleLines: [
                    "Software Systems & AI Solutions"
                ],
                description: "We partner with enterprises to build sustainable digital infrastructure, integrate deep artificial intelligence, and achieve comprehensive system optimization.",
                buttons: [
                    {
                        label: "Deep AI-First Solutions",
                        mobileLabel: "AI-First Solutions",
                        href: "#deep-ai-engineering",
                        className: "ptf-btn ptf-btn--primary"
                    },
                    {
                        label: "B2B System Architecture",
                        mobileLabel: "B2B Architecture",
                        href: "#system-architecture",
                        className: "ptf-btn ptf-btn--secondary"
                    }
                ]
            },
            {
                id: "image-2",
                className: "image-2",
                align: "center",
                accent: "Swiss",
                titleLines: [
                    "Style",
                    "Interface"
                ],
                description: "Like any great agency, we are only as good as the result we deliver of our recent work.",
                buttons: [
                    {
                        label: "Get Started",
                        href: "/contact",
                        className: "ptf-btn ptf-btn--primary"
                    }
                ]
            },
            {
                id: "image-3",
                className: "image-3",
                align: "start",
                accent: "Crafting",
                titleLines: [
                    "Digital",
                    "Experience"
                ],
                description: "Like any great agency, we are only as good as the result we deliver of our recent work.",
                buttons: [
                    {
                        label: "Get Started",
                        href: "/contact",
                        className: "ptf-btn ptf-btn--primary"
                    }
                ],
                videoButton: {
                    titleLines: [
                        "View our",
                        "story"
                    ]
                }
            }
        ]
    },
    sections: {
        services: {
            title: "Our Services",
            col1Title: "Deep AI Engineering Services",
            col2Title: "High-Performance Software Architecture",
            titleLines: [
                "Our",
                "Services"
            ],
            description: "We help businesses design, build, and maintain software products with focused engineering teams and practical delivery processes."
        },
        portfolio: {
            title: "Latest Works",
            ctaLabel: "All Projects",
            ctaHref: "/case-studies"
        },
        approach: {
            title: "Our Approach",
            backgroundImage: "/assets/img/root/service-bubble.png"
        },
        partners: {
            title: "ZiniSoft Ltd. Co. Partners"
        },
        testimonial: {
            backgroundImage: "/assets/img/about-us-testimonial-background.png",
            quoteImage: "/assets/img/root/quote.png"
        },
        awards: {
            titleLines: [
                "Our",
                "Awards"
            ]
        }
    },
    services: [
        {
            id: 11,
            icon: "lnil lnil-cup",
            titlePart1: "Software",
            titlePart2: "Development",
            descriptions: "Custom web, mobile, and backend systems built around your business workflow."
        },
        {
            id: 12,
            icon: "lnil lnil-website",
            titlePart1: "Web",
            titlePart2: "Applications",
            descriptions: "Responsive, maintainable web apps using modern frontend and backend stacks."
        },
        {
            id: 13,
            icon: "lnil lnil-display-alt",
            titlePart1: "UI/UX",
            titlePart2: "Implementation",
            descriptions: "Practical interface development with attention to usability, speed, and consistency."
        },
        {
            id: 14,
            icon: "lnil lnil-target",
            titlePart1: "Maintenance",
            titlePart2: "Support",
            descriptions: "Ongoing improvement, bug fixing, monitoring, and technical support for live products."
        }
    ],
    portfolio: [
        {
            id: 1,
            img: "/assets/img/portfolio/work-1.png",
            categorie: "Web Application",
            title: "Business Dashboard"
        },
        {
            id: 2,
            img: "/assets/img/portfolio/work-2.png",
            categorie: "Mobile Product",
            title: "Customer App"
        },
        {
            id: 3,
            img: "/assets/img/portfolio/work-3.png",
            categorie: "Ecommerce",
            title: "Online Store"
        },
        {
            id: 4,
            img: "/assets/img/portfolio/work-4.png",
            categorie: "Automation",
            title: "Internal Workflow"
        },
        {
            id: 5,
            img: "/assets/img/portfolio/work-5.png",
            categorie: "Platform",
            title: "SaaS Portal"
        }
    ],
    approach: [
        {
            subTitle: "One",
            title: "Discover",
            descriptions: "We clarify requirements, technical constraints, user flows, and delivery priorities before implementation.",
            delayAnimation: "0"
        },
        {
            subTitle: "Two",
            title: "Design",
            descriptions: "We architect scalable database schemas, high-performance API structures, and intuitive user experiences.",
            delayAnimation: "100"
        },
        {
            subTitle: "Three",
            title: "Build",
            descriptions: "We develop in focused iterations, keeping the codebase maintainable and the delivery path visible.",
            delayAnimation: "200"
        },
        {
            subTitle: "Four",
            title: "Test",
            descriptions: "We run automated unit tests, end-to-end integration audits, and performance checks to guarantee reliability.",
            delayAnimation: "300"
        },
        {
            subTitle: "Five",
            title: "Deploy",
            descriptions: "We configure CI/CD pipelines, containerize applications, and roll out features smoothly across environments.",
            delayAnimation: "400"
        },
        {
            subTitle: "Six",
            title: "Improve",
            descriptions: "We measure telemetry, maintain system uptime, and continuously refine the product so it stays useful.",
            delayAnimation: "500"
        }
    ],
    partners: [
        {
            delayAnimation: "0",
            hoverBg: "#fcf8f4",
            imgHeight: "85px",
            imgName: "image-1",
            title: "Client One"
        },
        {
            delayAnimation: "100",
            hoverBg: "#f3f7fc",
            imgHeight: "78px",
            imgName: "image-2",
            title: "Client Two"
        },
        {
            delayAnimation: "200",
            hoverBg: "#f9fcf3",
            imgHeight: "90px",
            imgName: "image-3",
            title: "Client Three"
        },
        {
            delayAnimation: "300",
            hoverBg: "#f9f9f9",
            imgHeight: "90px",
            imgName: "image-4",
            title: "Client Four"
        },
        {
            delayAnimation: "400",
            hoverBg: "#fdf4fb",
            imgHeight: "62px",
            imgName: "image-5",
            title: "Client Five"
        },
        {
            delayAnimation: "500",
            hoverBg: "#fdf4fb",
            imgHeight: "77px",
            imgName: "image-6",
            title: "Client Six"
        },
        {
            delayAnimation: "500",
            hoverBg: "#fdf4fb",
            imgHeight: "77px",
            imgName: "image-7",
            title: "Client Six"
        }
    ],
    counters: [
        {
            startCount: "0",
            endCount: "10",
            metaText1: "YEARS OF",
            metaText2: "EXPERIENCE",
            animationDelay: "0"
        },
        {
            startCount: "0",
            endCount: "120",
            metaText1: "DELIVERED",
            metaText2: "PROJECTS",
            animationDelay: "100"
        },
        {
            startCount: "0",
            endCount: "35",
            metaText1: "ACTIVE",
            metaText2: "CLIENTS",
            animationDelay: "200"
        },
        {
            startCount: "0",
            endCount: "8",
            metaText1: "TECHNICAL",
            metaText2: "SPECIALTIES",
            animationDelay: "300"
        }
    ],
    testimonials: [
        {
            descriptions: "ZiniSoft helped us move from unclear requirements to a stable product release with a very practical engineering process.",
            name: "Client Representative",
            designation: "Product Owner"
        },
        {
            descriptions: "The team communicates clearly, ships consistently, and understands how to keep software maintainable after launch.",
            name: "Client Representative",
            designation: "Operations Manager"
        }
    ],
    awards: [
        {
            date: "2024",
            img: "logo-4",
            delayAnimation: "0",
            awardList: [
                {
                    title: "Long-term Delivery Partner",
                    subTitle: "Software outsourcing collaboration"
                },
                {
                    title: "Reliable Support Team",
                    subTitle: "Maintenance and production support"
                }
            ]
        },
        {
            date: "2023",
            img: "logo-2",
            delayAnimation: "100",
            awardList: [
                {
                    title: "Product Engineering",
                    subTitle: "Web and mobile application delivery"
                },
                {
                    title: "Business Automation",
                    subTitle: "Internal tool development"
                }
            ]
        }
    ],
    blog: [
        {
            id: 1,
            img: "/assets/img/home/default/post-1.png",
            cat: "Development",
            date: "Jan 15, 2026",
            title: "How to plan a practical software outsourcing project",
            description: "A short guide to aligning scope, communication, timeline, and technical ownership before development starts."
        },
        {
            id: 2,
            img: "/assets/img/home/default/post-2.png",
            cat: "Engineering",
            date: "Jan 22, 2026",
            title: "Keeping web applications maintainable after launch",
            description: "The habits that help teams reduce regressions and keep improving live products with less friction."
        },
        {
            id: 3,
            img: "/assets/img/home/default/post-3.png",
            cat: "Business",
            date: "Jan 29, 2026",
            title: "When custom software is better than manual operations",
            description: "Signals that your workflow is ready for automation and what to prepare before building internal tools."
        }
    ]
};
d%'-O[���(0,_seo__WEBPACK_IMPORTED_MODULE_0__/* .buildMetadata */ .$U)��buffer�source�size�maps�hash
1/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   u: () => (/* binding */ homePage)
/* harmony export */ });
/* harmony import */ var _seo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(56546);

const homePage = {
    metadata: (0,_seo__WEBPACK_IMPORTED_MODULE_0__/* .buildMetadata */ .$U)({
        title: "ZiniSoft Ltd. Co | AI & Software Systems",
        description: "ZiniSoft Ltd. Co specializes in AI engineering and software system architecture, delivering high-performance, scalable B2B enterprise software applications.",
        path: "/"
    }),
    hero: {
        video: {
            channel: "youtube",
            videoId: "1gyTUHP6ne8"
        },
        slides: [
            {
                id: "image-1",
                className: "image-1",
                align: "center",
                darkText: false,
                badge: "Shaping the Digital Future with AI-First Architecture",
                accent: "Engineering High-Performance",
                titleLines: [
                    "Software Systems & AI Solutions"
                ],
                description: "We partner with enterprises to build sustainable digital infrastructure, integrate deep artificial intelligence, and achieve comprehensive system optimization.",
                buttons: [
                    {
                        label: "Deep AI-First Solutions",
                        mobileLabel: "AI-First Solutions",
                        href: "#deep-ai-engineering",
                        className: "ptf-btn ptf-btn--primary"
                    },
                    {
                        label: "B2B System Architecture",
                        mobileLabel: "B2B Architecture",
                        href: "#system-architecture",
                        className: "ptf-btn ptf-btn--secondary"
                    }
                ]
            },
            {
                id: "image-2",
                className: "image-2",
                align: "center",
                accent: "Swiss",
                titleLines: [
                    "Style",
                    "Interface"
                ],
                description: "Like any great agency, we are only as good as the result we deliver of our recent work.",
                buttons: [
                    {
                        label: "Get Started",
                        href: "/contact",
                        className: "ptf-btn ptf-btn--primary"
                    }
                ]
            },
            {
                id: "image-3",
                className: "image-3",
                align: "start",
                accent: "Crafting",
                titleLines: [
                    "Digital",
                    "Experience"
                ],
                description: "Like any great agency, we are only as good as the result we deliver of our recent work.",
                buttons: [
                    {
                        label: "Get Started",
                        href: "/contact",
                        className: "ptf-btn ptf-btn--primary"
                    }
                ],
                videoButton: {
                    titleLines: [
                        "View our",
                        "story"
                    ]
                }
            }
        ]
    },
    sections: {
        services: {
            title: "Our Services",
            col1Title: "Deep AI Engineering Services",
            col2Title: "High-Performance Software Architecture",
            titleLines: [
                "Our",
                "Services"
            ],
            description: "We help businesses design, build, and maintain software products with focused engineering teams and practical delivery processes."
        },
        portfolio: {
            title: "Latest Works",
            ctaLabel: "All Projects",
            ctaHref: "/case-studies"
        },
        approach: {
            title: "Our Approach",
            backgroundImage: "/assets/img/root/service-bubble.png"
        },
        partners: {
            title: "ZiniSoft Ltd. Co. Partners"
        },
        testimonial: {
            backgroundImage: "/assets/img/about-us-testimonial-background.png",
            quoteImage: "/assets/img/root/quote.png"
        },
        awards: {
            titleLines: [
                "Our",
                "Awards"
            ]
        }
    },
    services: [
        {
            id: 11,
            icon: "lnil lnil-cup",
            titlePart1: "Software",
            titlePart2: "Development",
            descriptions: "Custom web, mobile, and backend systems built around your business workflow."
        },
        {
            id: 12,
            icon: "lnil lnil-website",
            titlePart1: "Web",
            titlePart2: "Applications",
            descriptions: "Responsive, maintainable web apps using modern frontend and backend stacks."
        },
        {
            id: 13,
            icon: "lnil lnil-display-alt",
            titlePart1: "UI/UX",
            titlePart2: "Implementation",
            descriptions: "Practical interface development with attention to usability, speed, and consistency."
        },
        {
            id: 14,
            icon: "lnil lnil-target",
            titlePart1: "Maintenance",
            titlePart2: "Support",
            descriptions: "Ongoing improvement, bug fixing, monitoring, and technical support for live products."
        }
    ],
    portfolio: [
        {
            id: 1,
            img: "/assets/img/portfolio/work-1.png",
            categorie: "Web Application",
            title: "Business Dashboard"
        },
        {
            id: 2,
            img: "/assets/img/portfolio/work-2.png",
            categorie: "Mobile Product",
            title: "Customer App"
        },
        {
            id: 3,
            img: "/assets/img/portfolio/work-3.png",
            categorie: "Ecommerce",
            title: "Online Store"
        },
        {
            id: 4,
            img: "/assets/img/portfolio/work-4.png",
            categorie: "Automation",
            title: "Internal Workflow"
        },
        {
            id: 5,
            img: "/assets/img/portfolio/work-5.png",
            categorie: "Platform",
            title: "SaaS Portal"
        }
    ],
    approach: [
        {
            subTitle: "One",
            title: "Discover",
            descriptions: "We clarify requirements, technical constraints, user flows, and delivery priorities before implementation.",
            delayAnimation: "0"
        },
        {
            subTitle: "Two",
            title: "Design",
            descriptions: "We architect scalable database schemas, high-performance API structures, and intuitive user experiences.",
            delayAnimation: "100"
        },
        {
            subTitle: "Three",
            title: "Build",
            descriptions: "We develop in focused iterations, keeping the codebase maintainable and the delivery path visible.",
            delayAnimation: "200"
        },
        {
            subTitle: "Four",
            title: "Test",
            descriptions: "We run automated unit tests, end-to-end integration audits, and performance checks to guarantee reliability.",
            delayAnimation: "300"
        },
        {
            subTitle: "Five",
            title: "Deploy",
            descriptions: "We configure CI/CD pipelines, containerize applications, and roll out features smoothly across environments.",
            delayAnimation: "400"
        },
        {
            subTitle: "Six",
            title: "Improve",
            descriptions: "We measure telemetry, maintain system uptime, and continuously refine the product so it stays useful.",
            delayAnimation: "500"
        }
    ],
    partners: [
        {
            delayAnimation: "0",
            hoverBg: "#fcf8f4",
            imgHeight: "85px",
            imgName: "image-1",
            title: "Client One"
        },
        {
            delayAnimation: "100",
            hoverBg: "#f3f7fc",
            imgHeight: "78px",
            imgName: "image-2",
            title: "Client Two"
        },
        {
            delayAnimation: "200",
            hoverBg: "#f9fcf3",
            imgHeight: "90px",
            imgName: "image-3",
            title: "Client Three"
        },
        {
            delayAnimation: "300",
            hoverBg: "#f9f9f9",
            imgHeight: "90px",
            imgName: "image-4",
            title: "Client Four"
        },
        {
            delayAnimation: "400",
            hoverBg: "#fdf4fb",
            imgHeight: "62px",
            imgName: "image-5",
            title: "Client Five"
        },
        {
            delayAnimation: "500",
            hoverBg: "#fdf4fb",
            imgHeight: "77px",
            imgName: "image-6",
            title: "Client Six"
        },
        {
            delayAnimation: "500",
            hoverBg: "#fdf4fb",
            imgHeight: "77px",
            imgName: "image-7",
            title: "Client Six"
        }
    ],
    counters: [
        {
            startCount: "0",
            endCount: "10",
            metaText1: "YEARS OF",
            metaText2: "EXPERIENCE",
            animationDelay: "0"
        },
        {
            startCount: "0",
            endCount: "120",
            metaText1: "DELIVERED",
            metaText2: "PROJECTS",
            animationDelay: "100"
        },
        {
            startCount: "0",
            endCount: "35",
            metaText1: "ACTIVE",
            metaText2: "CLIENTS",
            animationDelay: "200"
        },
        {
            startCount: "0",
            endCount: "8",
            metaText1: "TECHNICAL",
            metaText2: "SPECIALTIES",
            animationDelay: "300"
        }
    ],
    testimonials: [
        {
            descriptions: "ZiniSoft helped us move from unclear requirements to a stable product release with a very practical engineering process.",
            name: "Client Representative",
            designation: "Product Owner"
        },
        {
            descriptions: "The team communicates clearly, ships consistently, and understands how to keep software maintainable after launch.",
            name: "Client Representative",
            designation: "Operations Manager"
        }
    ],
    awards: [
        {
            date: "2024",
            img: "logo-4",
            delayAnimation: "0",
            awardList: [
                {
                    title: "Long-term Delivery Partner",
                    subTitle: "Software outsourcing collaboration"
                },
                {
                    title: "Reliable Support Team",
                    subTitle: "Maintenance and production support"
                }
            ]
        },
        {
            date: "2023",
            img: "logo-2",
            delayAnimation: "100",
            awardList: [
                {
                    title: "Product Engineering",
                    subTitle: "Web and mobile application delivery"
                },
                {
                    title: "Business Automation",
                    subTitle: "Internal tool development"
                }
            ]
        }
    ],
    blog: [
        {
            id: 1,
            img: "/assets/img/home/default/post-1.png",
            cat: "Development",
            date: "Jan 15, 2026",
            title: "How to plan a practical software outsourcing project",
            description: "A short guide to aligning scope, communication, timeline, and technical ownership before development starts."
        },
        {
            id: 2,
            img: "/assets/img/home/default/post-2.png",
            cat: "Engineering",
            date: "Jan 22, 2026",
            title: "Keeping web applications maintainable after launch",
            description: "The habits that help teams reduce regressions and keep improving live products with less friction."
        },
        {
            id: 3,
            img: "/assets/img/home/default/post-3.png",
            cat: "Business",
            date: "Jan 29, 2026",
            title: "When custom software is better than manual operations",
            description: "Signals that your workflow is ready for automation and what to prepare before building internal tools."
        }
    ]
};
��{"finalSource":true}�map�bufferedMapConcatSourceRawSource�/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   u: () => (/* binding */ homePage)
/* harmony export */ });
/* harmony import */ var _seo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(56546);
ReplaceSourceRawSource0import { buildMetadata } from "./seo";
export const homePage = {
    metadata: buildMetadata({
        title: "ZiniSoft Ltd. Co | AI & Software Systems",
        description: "ZiniSoft Ltd. Co specializes in AI engineering and software system architecture, delivering high-performance, scalable B2B enterprise software applications.",
        path: "/"
    }),
    hero: {
        video: {
            channel: "youtube",
            videoId: "1gyTUHP6ne8"
        },
        slides: [
            {
                id: "image-1",
                className: "image-1",
                align: "center",
                darkText: false,
                badge: "Shaping the Digital Future with AI-First Architecture",
                accent: "Engineering High-Performance",
                titleLines: [
                    "Software Systems & AI Solutions"
                ],
                description: "We partner with enterprises to build sustainable digital infrastructure, integrate deep artificial intelligence, and achieve comprehensive system optimization.",
                buttons: [
                    {
                        label: "Deep AI-First Solutions",
                        mobileLabel: "AI-First Solutions",
                        href: "#deep-ai-engineering",
                        className: "ptf-btn ptf-btn--primary"
                    },
                    {
                        label: "B2B System Architecture",
                        mobileLabel: "B2B Architecture",
                        href: "#system-architecture",
                        className: "ptf-btn ptf-btn--secondary"
                    }
                ]
            },
            {
                id: "image-2",
                className: "image-2",
                align: "center",
                accent: "Swiss",
                titleLines: [
                    "Style",
                    "Interface"
                ],
                description: "Like any great agency, we are only as good as the result we deliver of our recent work.",
                buttons: [
                    {
                        label: "Get Started",
                        href: "/contact",
                        className: "ptf-btn ptf-btn--primary"
                    }
                ]
            },
            {
                id: "image-3",
                className: "image-3",
                align: "start",
                accent: "Crafting",
                titleLines: [
                    "Digital",
                    "Experience"
                ],
                description: "Like any great agency, we are only as good as the result we deliver of our recent work.",
                buttons: [
                    {
                        label: "Get Started",
                        href: "/contact",
                        className: "ptf-btn ptf-btn--primary"
                    }
                ],
                videoButton: {
                    titleLines: [
                        "View our",
                        "story"
                    ]
                }
            }
        ]
    },
    sections: {
        services: {
            title: "Our Services",
            col1Title: "Deep AI Engineering Services",
            col2Title: "High-Performance Software Architecture",
            titleLines: [
                "Our",
                "Services"
            ],
            description: "We help businesses design, build, and maintain software products with focused engineering teams and practical delivery processes."
        },
        portfolio: {
            title: "Latest Works",
            ctaLabel: "All Projects",
            ctaHref: "/case-studies"
        },
        approach: {
            title: "Our Approach",
            backgroundImage: "/assets/img/root/service-bubble.png"
        },
        partners: {
            title: "ZiniSoft Ltd. Co. Partners"
        },
        testimonial: {
            backgroundImage: "/assets/img/about-us-testimonial-background.png",
            quoteImage: "/assets/img/root/quote.png"
        },
        awards: {
            titleLines: [
                "Our",
                "Awards"
            ]
        }
    },
    services: [
        {
            id: 11,
            icon: "lnil lnil-cup",
            titlePart1: "Software",
            titlePart2: "Development",
            descriptions: "Custom web, mobile, and backend systems built around your business workflow."
        },
        {
            id: 12,
            icon: "lnil lnil-website",
            titlePart1: "Web",
            titlePart2: "Applications",
            descriptions: "Responsive, maintainable web apps using modern frontend and backend stacks."
        },
        {
            id: 13,
            icon: "lnil lnil-display-alt",
            titlePart1: "UI/UX",
            titlePart2: "Implementation",
            descriptions: "Practical interface development with attention to usability, speed, and consistency."
        },
        {
            id: 14,
            icon: "lnil lnil-target",
            titlePart1: "Maintenance",
            titlePart2: "Support",
            descriptions: "Ongoing improvement, bug fixing, monitoring, and technical support for live products."
        }
    ],
    portfolio: [
        {
            id: 1,
            img: "/assets/img/portfolio/work-1.png",
            categorie: "Web Application",
            title: "Business Dashboard"
        },
        {
            id: 2,
            img: "/assets/img/portfolio/work-2.png",
            categorie: "Mobile Product",
            title: "Customer App"
        },
        {
            id: 3,
            img: "/assets/img/portfolio/work-3.png",
            categorie: "Ecommerce",
            title: "Online Store"
        },
        {
            id: 4,
            img: "/assets/img/portfolio/work-4.png",
            categorie: "Automation",
            title: "Internal Workflow"
        },
        {
            id: 5,
            img: "/assets/img/portfolio/work-5.png",
            categorie: "Platform",
            title: "SaaS Portal"
        }
    ],
    approach: [
        {
            subTitle: "One",
            title: "Discover",
            descriptions: "We clarify requirements, technical constraints, user flows, and delivery priorities before implementation.",
            delayAnimation: "0"
        },
        {
            subTitle: "Two",
            title: "Design",
            descriptions: "We architect scalable database schemas, high-performance API structures, and intuitive user experiences.",
            delayAnimation: "100"
        },
        {
            subTitle: "Three",
            title: "Build",
            descriptions: "We develop in focused iterations, keeping the codebase maintainable and the delivery path visible.",
            delayAnimation: "200"
        },
        {
            subTitle: "Four",
            title: "Test",
            descriptions: "We run automated unit tests, end-to-end integration audits, and performance checks to guarantee reliability.",
            delayAnimation: "300"
        },
        {
            subTitle: "Five",
            title: "Deploy",
            descriptions: "We configure CI/CD pipelines, containerize applications, and roll out features smoothly across environments.",
            delayAnimation: "400"
        },
        {
            subTitle: "Six",
            title: "Improve",
            descriptions: "We measure telemetry, maintain system uptime, and continuously refine the product so it stays useful.",
            delayAnimation: "500"
        }
    ],
    partners: [
        {
            delayAnimation: "0",
            hoverBg: "#fcf8f4",
            imgHeight: "85px",
            imgName: "image-1",
            title: "Client One"
        },
        {
            delayAnimation: "100",
            hoverBg: "#f3f7fc",
            imgHeight: "78px",
            imgName: "image-2",
            title: "Client Two"
        },
        {
            delayAnimation: "200",
            hoverBg: "#f9fcf3",
            imgHeight: "90px",
            imgName: "image-3",
            title: "Client Three"
        },
        {
            delayAnimation: "300",
            hoverBg: "#f9f9f9",
            imgHeight: "90px",
            imgName: "image-4",
            title: "Client Four"
        },
        {
            delayAnimation: "400",
            hoverBg: "#fdf4fb",
            imgHeight: "62px",
            imgName: "image-5",
            title: "Client Five"
        },
        {
            delayAnimation: "500",
            hoverBg: "#fdf4fb",
            imgHeight: "77px",
            imgName: "image-6",
            title: "Client Six"
        },
        {
            delayAnimation: "500",
            hoverBg: "#fdf4fb",
            imgHeight: "77px",
            imgName: "image-7",
            title: "Client Six"
        }
    ],
    counters: [
        {
            startCount: "0",
            endCount: "10",
            metaText1: "YEARS OF",
            metaText2: "EXPERIENCE",
            animationDelay: "0"
        },
        {
            startCount: "0",
            endCount: "120",
            metaText1: "DELIVERED",
            metaText2: "PROJECTS",
            animationDelay: "100"
        },
        {
            startCount: "0",
            endCount: "35",
            metaText1: "ACTIVE",
            metaText2: "CLIENTS",
            animationDelay: "200"
        },
        {
            startCount: "0",
            endCount: "8",
            metaText1: "TECHNICAL",
            metaText2: "SPECIALTIES",
            animationDelay: "300"
        }
    ],
    testimonials: [
        {
            descriptions: "ZiniSoft helped us move from unclear requirements to a stable product release with a very practical engineering process.",
            name: "Client Representative",
            designation: "Product Owner"
        },
        {
            descriptions: "The team communicates clearly, ships consistently, and understands how to keep software maintainable after launch.",
            name: "Client Representative",
            designation: "Operations Manager"
        }
    ],
    awards: [
        {
            date: "2024",
            img: "logo-4",
            delayAnimation: "0",
            awardList: [
                {
                    title: "Long-term Delivery Partner",
                    subTitle: "Software outsourcing collaboration"
                },
                {
                    title: "Reliable Support Team",
                    subTitle: "Maintenance and production support"
                }
            ]
        },
        {
            date: "2023",
            img: "logo-2",
            delayAnimation: "100",
            awardList: [
                {
                    title: "Product Engineering",
                    subTitle: "Web and mobile application delivery"
                },
                {
                    title: "Business Automation",
                    subTitle: "Internal tool development"
                }
            ]
        }
    ],
    blog: [
        {
            id: 1,
            img: "/assets/img/home/default/post-1.png",
            cat: "Development",
            date: "Jan 15, 2026",
            title: "How to plan a practical software outsourcing project",
            description: "A short guide to aligning scope, communication, timeline, and technical ownership before development starts."
        },
        {
            id: 2,
            img: "/assets/img/home/default/post-2.png",
            cat: "Engineering",
            date: "Jan 22, 2026",
            title: "Keeping web applications maintainable after launch",
            description: "The habits that help teams reduce regressions and keep improving live products with less friction."
        },
        {
            id: 3,
            img: "/assets/img/home/default/post-3.png",
            cat: "Business",
            date: "Jan 29, 2026",
            title: "When custom software is better than manual operations",
            description: "Signals that your workflow is ready for automation and what to prepare before building internal tools."
        }
    ]
};
c037undefined3945undefined7991(0,_seo__WEBPACK_IMPORTED_MODULE_0__/* .buildMetadata */ .$U)undefined


/***/ })��buffer�source�size�maps�hashe1/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   u: () => (/* binding */ homePage)
/* harmony export */ });
/* harmony import */ var _seo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(56546);

const homePage = {
    metadata: (0,_seo__WEBPACK_IMPORTED_MODULE_0__/* .buildMetadata */ .$U)({
        title: "ZiniSoft Ltd. Co | AI & Software Systems",
        description: "ZiniSoft Ltd. Co specializes in AI engineering and software system architecture, delivering high-performance, scalable B2B enterprise software applications.",
        path: "/"
    }),
    hero: {
        video: {
            channel: "youtube",
            videoId: "1gyTUHP6ne8"
        },
        slides: [
            {
                id: "image-1",
                className: "image-1",
                align: "center",
                darkText: false,
                badge: "Shaping the Digital Future with AI-First Architecture",
                accent: "Engineering High-Performance",
                titleLines: [
                    "Software Systems & AI Solutions"
                ],
                description: "We partner with enterprises to build sustainable digital infrastructure, integrate deep artificial intelligence, and achieve comprehensive system optimization.",
                buttons: [
                    {
                        label: "Deep AI-First Solutions",
                        mobileLabel: "AI-First Solutions",
                        href: "#deep-ai-engineering",
                        className: "ptf-btn ptf-btn--primary"
                    },
                    {
                        label: "B2B System Architecture",
                        mobileLabel: "B2B Architecture",
                        href: "#system-architecture",
                        className: "ptf-btn ptf-btn--secondary"
                    }
                ]
            },
            {
                id: "image-2",
                className: "image-2",
                align: "center",
                accent: "Swiss",
                titleLines: [
                    "Style",
                    "Interface"
                ],
                description: "Like any great agency, we are only as good as the result we deliver of our recent work.",
                buttons: [
                    {
                        label: "Get Started",
                        href: "/contact",
                        className: "ptf-btn ptf-btn--primary"
                    }
                ]
            },
            {
                id: "image-3",
                className: "image-3",
                align: "start",
                accent: "Crafting",
                titleLines: [
                    "Digital",
                    "Experience"
                ],
                description: "Like any great agency, we are only as good as the result we deliver of our recent work.",
                buttons: [
                    {
                        label: "Get Started",
                        href: "/contact",
                        className: "ptf-btn ptf-btn--primary"
                    }
                ],
                videoButton: {
                    titleLines: [
                        "View our",
                        "story"
                    ]
                }
            }
        ]
    },
    sections: {
        services: {
            title: "Our Services",
            col1Title: "Deep AI Engineering Services",
            col2Title: "High-Performance Software Architecture",
            titleLines: [
                "Our",
                "Services"
            ],
            description: "We help businesses design, build, and maintain software products with focused engineering teams and practical delivery processes."
        },
        portfolio: {
            title: "Latest Works",
            ctaLabel: "All Projects",
            ctaHref: "/case-studies"
        },
        approach: {
            title: "Our Approach",
            backgroundImage: "/assets/img/root/service-bubble.png"
        },
        partners: {
            title: "ZiniSoft Ltd. Co. Partners"
        },
        testimonial: {
            backgroundImage: "/assets/img/about-us-testimonial-background.png",
            quoteImage: "/assets/img/root/quote.png"
        },
        awards: {
            titleLines: [
                "Our",
                "Awards"
            ]
        }
    },
    services: [
        {
            id: 11,
            icon: "lnil lnil-cup",
            titlePart1: "Software",
            titlePart2: "Development",
            descriptions: "Custom web, mobile, and backend systems built around your business workflow."
        },
        {
            id: 12,
            icon: "lnil lnil-website",
            titlePart1: "Web",
            titlePart2: "Applications",
            descriptions: "Responsive, maintainable web apps using modern frontend and backend stacks."
        },
        {
            id: 13,
            icon: "lnil lnil-display-alt",
            titlePart1: "UI/UX",
            titlePart2: "Implementation",
            descriptions: "Practical interface development with attention to usability, speed, and consistency."
        },
        {
            id: 14,
            icon: "lnil lnil-target",
            titlePart1: "Maintenance",
            titlePart2: "Support",
            descriptions: "Ongoing improvement, bug fixing, monitoring, and technical support for live products."
        }
    ],
    portfolio: [
        {
            id: 1,
            img: "/assets/img/portfolio/work-1.png",
            categorie: "Web Application",
            title: "Business Dashboard"
        },
        {
            id: 2,
            img: "/assets/img/portfolio/work-2.png",
            categorie: "Mobile Product",
            title: "Customer App"
        },
        {
            id: 3,
            img: "/assets/img/portfolio/work-3.png",
            categorie: "Ecommerce",
            title: "Online Store"
        },
        {
            id: 4,
            img: "/assets/img/portfolio/work-4.png",
            categorie: "Automation",
            title: "Internal Workflow"
        },
        {
            id: 5,
            img: "/assets/img/portfolio/work-5.png",
            categorie: "Platform",
            title: "SaaS Portal"
        }
    ],
    approach: [
        {
            subTitle: "One",
            title: "Discover",
            descriptions: "We clarify requirements, technical constraints, user flows, and delivery priorities before implementation.",
            delayAnimation: "0"
        },
        {
            subTitle: "Two",
            title: "Design",
            descriptions: "We architect scalable database schemas, high-performance API structures, and intuitive user experiences.",
            delayAnimation: "100"
        },
        {
            subTitle: "Three",
            title: "Build",
            descriptions: "We develop in focused iterations, keeping the codebase maintainable and the delivery path visible.",
            delayAnimation: "200"
        },
        {
            subTitle: "Four",
            title: "Test",
            descriptions: "We run automated unit tests, end-to-end integration audits, and performance checks to guarantee reliability.",
            delayAnimation: "300"
        },
        {
            subTitle: "Five",
            title: "Deploy",
            descriptions: "We configure CI/CD pipelines, containerize applications, and roll out features smoothly across environments.",
            delayAnimation: "400"
        },
        {
            subTitle: "Six",
            title: "Improve",
            descriptions: "We measure telemetry, maintain system uptime, and continuously refine the product so it stays useful.",
            delayAnimation: "500"
        }
    ],
    partners: [
        {
            delayAnimation: "0",
            hoverBg: "#fcf8f4",
            imgHeight: "85px",
            imgName: "image-1",
            title: "Client One"
        },
        {
            delayAnimation: "100",
            hoverBg: "#f3f7fc",
            imgHeight: "78px",
            imgName: "image-2",
            title: "Client Two"
        },
        {
            delayAnimation: "200",
            hoverBg: "#f9fcf3",
            imgHeight: "90px",
            imgName: "image-3",
            title: "Client Three"
        },
        {
            delayAnimation: "300",
            hoverBg: "#f9f9f9",
            imgHeight: "90px",
            imgName: "image-4",
            title: "Client Four"
        },
        {
            delayAnimation: "400",
            hoverBg: "#fdf4fb",
            imgHeight: "62px",
            imgName: "image-5",
            title: "Client Five"
        },
        {
            delayAnimation: "500",
            hoverBg: "#fdf4fb",
            imgHeight: "77px",
            imgName: "image-6",
            title: "Client Six"
        },
        {
            delayAnimation: "500",
            hoverBg: "#fdf4fb",
            imgHeight: "77px",
            imgName: "image-7",
            title: "Client Six"
        }
    ],
    counters: [
        {
            startCount: "0",
            endCount: "10",
            metaText1: "YEARS OF",
            metaText2: "EXPERIENCE",
            animationDelay: "0"
        },
        {
            startCount: "0",
            endCount: "120",
            metaText1: "DELIVERED",
            metaText2: "PROJECTS",
            animationDelay: "100"
        },
        {
            startCount: "0",
            endCount: "35",
            metaText1: "ACTIVE",
            metaText2: "CLIENTS",
            animationDelay: "200"
        },
        {
            startCount: "0",
            endCount: "8",
            metaText1: "TECHNICAL",
            metaText2: "SPECIALTIES",
            animationDelay: "300"
        }
    ],
    testimonials: [
        {
            descriptions: "ZiniSoft helped us move from unclear requirements to a stable product release with a very practical engineering process.",
            name: "Client Representative",
            designation: "Product Owner"
        },
        {
            descriptions: "The team communicates clearly, ships consistently, and understands how to keep software maintainable after launch.",
            name: "Client Representative",
            designation: "Operations Manager"
        }
    ],
    awards: [
        {
            date: "2024",
            img: "logo-4",
            delayAnimation: "0",
            awardList: [
                {
                    title: "Long-term Delivery Partner",
                    subTitle: "Software outsourcing collaboration"
                },
                {
                    title: "Reliable Support Team",
                    subTitle: "Maintenance and production support"
                }
            ]
        },
        {
            date: "2023",
            img: "logo-2",
            delayAnimation: "100",
            awardList: [
                {
                    title: "Product Engineering",
                    subTitle: "Web and mobile application delivery"
                },
                {
                    title: "Business Automation",
                    subTitle: "Internal tool development"
                }
            ]
        }
    ],
    blog: [
        {
            id: 1,
            img: "/assets/img/home/default/post-1.png",
            cat: "Development",
            date: "Jan 15, 2026",
            title: "How to plan a practical software outsourcing project",
            description: "A short guide to aligning scope, communication, timeline, and technical ownership before development starts."
        },
        {
            id: 2,
            img: "/assets/img/home/default/post-2.png",
            cat: "Engineering",
            date: "Jan 22, 2026",
            title: "Keeping web applications maintainable after launch",
            description: "The habits that help teams reduce regressions and keep improving live products with less friction."
        },
        {
            id: 3,
            img: "/assets/img/home/default/post-3.png",
            cat: "Business",
            date: "Jan 29, 2026",
            title: "When custom software is better than manual operations",
            description: "Signals that your workflow is ready for automation and what to prepare before building internal tools."
        }
    ]
};


/***/ })��{"finalSource":true}�map�bufferedMap	ConcatSourceRawSourceQ/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

��/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   u: () => (/* binding */ homePage)
/* harmony export */ });
/* harmony import */ var _seo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(56546);
ReplaceSourceRawSource0import { buildMetadata } from "./seo";
export const homePage = {
    metadata: buildMetadata({
        title: "ZiniSoft Ltd. Co | AI & Software Systems",
        description: "ZiniSoft Ltd. Co specializes in AI engineering and software system architecture, delivering high-performance, scalable B2B enterprise software applications.",
        path: "/"
    }),
    hero: {
        video: {
            channel: "youtube",
            videoId: "1gyTUHP6ne8"
        },
        slides: [
            {
                id: "image-1",
                className: "image-1",
                align: "center",
                darkText: false,
                badge: "Shaping the Digital Future with AI-First Architecture",
                accent: "Engineering High-Performance",
                titleLines: [
                    "Software Systems & AI Solutions"
                ],
                description: "We partner with enterprises to build sustainable digital infrastructure, integrate deep artificial intelligence, and achieve comprehensive system optimization.",
                buttons: [
                    {
                        label: "Deep AI-First Solutions",
                        mobileLabel: "AI-First Solutions",
                        href: "#deep-ai-engineering",
                        className: "ptf-btn ptf-btn--primary"
                    },
                    {
                        label: "B2B System Architecture",
                        mobileLabel: "B2B Architecture",
                        href: "#system-architecture",
                        className: "ptf-btn ptf-btn--secondary"
                    }
                ]
            },
            {
                id: "image-2",
                className: "image-2",
                align: "center",
                accent: "Swiss",
                titleLines: [
                    "Style",
                    "Interface"
                ],
                description: "Like any great agency, we are only as good as the result we deliver of our recent work.",
                buttons: [
                    {
                        label: "Get Started",
                        href: "/contact",
                        className: "ptf-btn ptf-btn--primary"
                    }
                ]
            },
            {
                id: "image-3",
                className: "image-3",
                align: "start",
                accent: "Crafting",
                titleLines: [
                    "Digital",
                    "Experience"
                ],
                description: "Like any great agency, we are only as good as the result we deliver of our recent work.",
                buttons: [
                    {
                        label: "Get Started",
                        href: "/contact",
                        className: "ptf-btn ptf-btn--primary"
                    }
                ],
                videoButton: {
                    titleLines: [
                        "View our",
                        "story"
                    ]
                }
            }
        ]
    },
    sections: {
        services: {
            title: "Our Services",
            col1Title: "Deep AI Engineering Services",
            col2Title: "High-Performance Software Architecture",
            titleLines: [
                "Our",
                "Services"
            ],
            description: "We help businesses design, build, and maintain software products with focused engineering teams and practical delivery processes."
        },
        portfolio: {
            title: "Latest Works",
            ctaLabel: "All Projects",
            ctaHref: "/case-studies"
        },
        approach: {
            title: "Our Approach",
            backgroundImage: "/assets/img/root/service-bubble.png"
        },
        partners: {
            title: "ZiniSoft Ltd. Co. Partners"
        },
        testimonial: {
            backgroundImage: "/assets/img/about-us-testimonial-background.png",
            quoteImage: "/assets/img/root/quote.png"
        },
        awards: {
            titleLines: [
                "Our",
                "Awards"
            ]
        }
    },
    services: [
        {
            id: 11,
            icon: "lnil lnil-cup",
            titlePart1: "Software",
            titlePart2: "Development",
            descriptions: "Custom web, mobile, and backend systems built around your business workflow."
        },
        {
            id: 12,
            icon: "lnil lnil-website",
            titlePart1: "Web",
            titlePart2: "Applications",
            descriptions: "Responsive, maintainable web apps using modern frontend and backend stacks."
        },
        {
            id: 13,
            icon: "lnil lnil-display-alt",
            titlePart1: "UI/UX",
            titlePart2: "Implementation",
            descriptions: "Practical interface development with attention to usability, speed, and consistency."
        },
        {
            id: 14,
            icon: "lnil lnil-target",
            titlePart1: "Maintenance",
            titlePart2: "Support",
            descriptions: "Ongoing improvement, bug fixing, monitoring, and technical support for live products."
        }
    ],
    portfolio: [
        {
            id: 1,
            img: "/assets/img/portfolio/work-1.png",
            categorie: "Web Application",
            title: "Business Dashboard"
        },
        {
            id: 2,
            img: "/assets/img/portfolio/work-2.png",
            categorie: "Mobile Product",
            title: "Customer App"
        },
        {
            id: 3,
            img: "/assets/img/portfolio/work-3.png",
            categorie: "Ecommerce",
            title: "Online Store"
        },
        {
            id: 4,
            img: "/assets/img/portfolio/work-4.png",
            categorie: "Automation",
            title: "Internal Workflow"
        },
        {
            id: 5,
            img: "/assets/img/portfolio/work-5.png",
            categorie: "Platform",
            title: "SaaS Portal"
        }
    ],
    approach: [
        {
            subTitle: "One",
            title: "Discover",
            descriptions: "We clarify requirements, technical constraints, user flows, and delivery priorities before implementation.",
            delayAnimation: "0"
        },
        {
            subTitle: "Two",
            title: "Design",
            descriptions: "We architect scalable database schemas, high-performance API structures, and intuitive user experiences.",
            delayAnimation: "100"
        },
        {
            subTitle: "Three",
            title: "Build",
            descriptions: "We develop in focused iterations, keeping the codebase maintainable and the delivery path visible.",
            delayAnimation: "200"
        },
        {
            subTitle: "Four",
            title: "Test",
            descriptions: "We run automated unit tests, end-to-end integration audits, and performance checks to guarantee reliability.",
            delayAnimation: "300"
        },
        {
            subTitle: "Five",
            title: "Deploy",
            descriptions: "We configure CI/CD pipelines, containerize applications, and roll out features smoothly across environments.",
            delayAnimation: "400"
        },
        {
            subTitle: "Six",
            title: "Improve",
            descriptions: "We measure telemetry, maintain system uptime, and continuously refine the product so it stays useful.",
            delayAnimation: "500"
        }
    ],
    partners: [
        {
            delayAnimation: "0",
            hoverBg: "#fcf8f4",
            imgHeight: "85px",
            imgName: "image-1",
            title: "Client One"
        },
        {
            delayAnimation: "100",
            hoverBg: "#f3f7fc",
            imgHeight: "78px",
            imgName: "image-2",
            title: "Client Two"
        },
        {
            delayAnimation: "200",
            hoverBg: "#f9fcf3",
            imgHeight: "90px",
            imgName: "image-3",
            title: "Client Three"
        },
        {
            delayAnimation: "300",
            hoverBg: "#f9f9f9",
            imgHeight: "90px",
            imgName: "image-4",
            title: "Client Four"
        },
        {
            delayAnimation: "400",
            hoverBg: "#fdf4fb",
            imgHeight: "62px",
            imgName: "image-5",
            title: "Client Five"
        },
        {
            delayAnimation: "500",
            hoverBg: "#fdf4fb",
            imgHeight: "77px",
            imgName: "image-6",
            title: "Client Six"
        },
        {
            delayAnimation: "500",
            hoverBg: "#fdf4fb",
            imgHeight: "77px",
            imgName: "image-7",
            title: "Client Six"
        }
    ],
    counters: [
        {
            startCount: "0",
            endCount: "10",
            metaText1: "YEARS OF",
            metaText2: "EXPERIENCE",
            animationDelay: "0"
        },
        {
            startCount: "0",
            endCount: "120",
            metaText1: "DELIVERED",
            metaText2: "PROJECTS",
            animationDelay: "100"
        },
        {
            startCount: "0",
            endCount: "35",
            metaText1: "ACTIVE",
            metaText2: "CLIENTS",
            animationDelay: "200"
        },
        {
            startCount: "0",
            endCount: "8",
            metaText1: "TECHNICAL",
            metaText2: "SPECIALTIES",
            animationDelay: "300"
        }
    ],
    testimonials: [
        {
            descriptions: "ZiniSoft helped us move from unclear requirements to a stable product release with a very practical engineering process.",
            name: "Client Representative",
            designation: "Product Owner"
        },
        {
            descriptions: "The team communicates clearly, ships consistently, and understands how to keep software maintainable after launch.",
            name: "Client Representative",
            designation: "Operations Manager"
        }
    ],
    awards: [
        {
            date: "2024",
            img: "logo-4",
            delayAnimation: "0",
            awardList: [
                {
                    title: "Long-term Delivery Partner",
                    subTitle: "Software outsourcing collaboration"
                },
                {
                    title: "Reliable Support Team",
                    subTitle: "Maintenance and production support"
                }
            ]
        },
        {
            date: "2023",
            img: "logo-2",
            delayAnimation: "100",
            awardList: [
                {
                    title: "Product Engineering",
                    subTitle: "Web and mobile application delivery"
                },
                {
                    title: "Business Automation",
                    subTitle: "Internal tool development"
                }
            ]
        }
    ],
    blog: [
        {
            id: 1,
            img: "/assets/img/home/default/post-1.png",
            cat: "Development",
            date: "Jan 15, 2026",
            title: "How to plan a practical software outsourcing project",
            description: "A short guide to aligning scope, communication, timeline, and technical ownership before development starts."
        },
        {
            id: 2,
            img: "/assets/img/home/default/post-2.png",
            cat: "Engineering",
            date: "Jan 22, 2026",
            title: "Keeping web applications maintainable after launch",
            description: "The habits that help teams reduce regressions and keep improving live products with less friction."
        },
        {
            id: 3,
            img: "/assets/img/home/default/post-3.png",
            cat: "Business",
            date: "Jan 29, 2026",
            title: "When custom software is better than manual operations",
            description: "Signals that your workflow is ready for automation and what to prepare before building internal tools."
        }
    ]
};
c037undefined3945undefined7991(0,_seo__WEBPACK_IMPORTED_MODULE_0__/* .buildMetadata */ .$U)undefined	RawSource


/***/ }),

/***/ 20106:
�~�webpack/lib/util/registerExternalSerializer�webpack-sources/ConcatSource��webpack/lib/util/registerExternalSerializer�webpack-sources/RawSourceQ/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

�webpack/lib/util/registerExternalSerializer�webpack-sources/CachedSourcec*�webpack/lib/util/registerExternalSerializer�webpack-sources/ConcatSource��webpack/lib/util/registerExternalSerializer�webpack-sources/RawSource�/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   U2: () => (/* binding */ getServices),
/* harmony export */   aH: () => (/* binding */ getServicesByGroup),
/* harmony export */   dL: () => (/* binding */ getGroupServices),
/* harmony export */   gq: () => (/* binding */ getServiceByIdOrSlug),
/* harmony export */   jl: () => (/* binding */ getMediaById)
/* harmony export */ });
/* unused harmony export normalizeWpService */
�webpack/lib/util/registerExternalSerializer�webpack-sources/ReplaceSource['const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
export const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ export const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ export const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ export const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ export const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ export const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};
K�
�
�
�������#�#��������buffer�source�size�maps�hash)/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   U2: () => (/* binding */ getServices),
/* harmony export */   aH: () => (/* binding */ getServicesByGroup),
/* harmony export */   dL: () => (/* binding */ getGroupServices),
/* harmony export */   gq: () => (/* binding */ getServiceByIdOrSlug),
/* harmony export */   jl: () => (/* binding */ getMediaById)
/* harmony export */ });
/* unused harmony export normalizeWpService */
const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};
��{"finalSource":true}�map�bufferedMapConcatSourceRawSource�/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   U2: () => (/* binding */ getServices),
/* harmony export */   aH: () => (/* binding */ getServicesByGroup),
/* harmony export */   dL: () => (/* binding */ getGroupServices),
/* harmony export */   gq: () => (/* binding */ getServiceByIdOrSlug),
/* harmony export */   jl: () => (/* binding */ getMediaById)
/* harmony export */ });
/* unused harmony export normalizeWpService */
ReplaceSourceRawSource['const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
export const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ export const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ export const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ export const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ export const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ export const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};
f27462752undefined33263332undefined66136619undefined73437349undefined81578163undefined91759181undefined


/***/ })�a)/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   U2: () => (/* binding */ getServices),
/* harmony export */   aH: () => (/* binding */ getServicesByGroup),
/* harmony export */   dL: () => (/* binding */ getGroupServices),
/* harmony export */   gq: () => (/* binding */ getServiceByIdOrSlug),
/* harmony export */   jl: () => (/* binding */ getMediaById)
/* harmony export */ });
/* unused harmony export normalizeWpService */
const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};


/***/ })��	����/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   U2: () => (/* binding */ getServices),
/* harmony export */   aH: () => (/* binding */ getServicesByGroup),
/* harmony export */   dL: () => (/* binding */ getGroupServices),
/* harmony export */   gq: () => (/* binding */ getServiceByIdOrSlug),
/* harmony export */   jl: () => (/* binding */ getMediaById)
/* harmony export */ });
/* unused harmony export normalizeWpService */
�['const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
export const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ export const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ export const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ export const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ export const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ export const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};
f27462752undefined33263332undefined66136619undefined73437349undefined81578163undefined91759181undefined��

};
;c���3["use strict";
exports.id = 960;
exports.ids = [960];
exports.modules = {

/***/ 21203:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   u: () => (/* binding */ homePage)
/* harmony export */ });
/* harmony import */ var _seo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(56546);

const homePage = {
    metadata: (0,_seo__WEBPACK_IMPORTED_MODULE_0__/* .buildMetadata */ .$U)({
        title: "ZiniSoft Ltd. Co | AI & Software Systems",
        description: "ZiniSoft Ltd. Co specializes in AI engineering and software system architecture, delivering high-performance, scalable B2B enterprise software applications.",
        path: "/"
    }),
    hero: {
        video: {
            channel: "youtube",
            videoId: "1gyTUHP6ne8"
        },
        slides: [
            {
                id: "image-1",
                className: "image-1",
                align: "center",
                darkText: false,
                badge: "Shaping the Digital Future with AI-First Architecture",
                accent: "Engineering High-Performance",
                titleLines: [
                    "Software Systems & AI Solutions"
                ],
                description: "We partner with enterprises to build sustainable digital infrastructure, integrate deep artificial intelligence, and achieve comprehensive system optimization.",
                buttons: [
                    {
                        label: "Deep AI-First Solutions",
                        mobileLabel: "AI-First Solutions",
                        href: "#deep-ai-engineering",
                        className: "ptf-btn ptf-btn--primary"
                    },
                    {
                        label: "B2B System Architecture",
                        mobileLabel: "B2B Architecture",
                        href: "#system-architecture",
                        className: "ptf-btn ptf-btn--secondary"
                    }
                ]
            },
            {
                id: "image-2",
                className: "image-2",
                align: "center",
                accent: "Swiss",
                titleLines: [
                    "Style",
                    "Interface"
                ],
                description: "Like any great agency, we are only as good as the result we deliver of our recent work.",
                buttons: [
                    {
                        label: "Get Started",
                        href: "/contact",
                        className: "ptf-btn ptf-btn--primary"
                    }
                ]
            },
            {
                id: "image-3",
                className: "image-3",
                align: "start",
                accent: "Crafting",
                titleLines: [
                    "Digital",
                    "Experience"
                ],
                description: "Like any great agency, we are only as good as the result we deliver of our recent work.",
                buttons: [
                    {
                        label: "Get Started",
                        href: "/contact",
                        className: "ptf-btn ptf-btn--primary"
                    }
                ],
                videoButton: {
                    titleLines: [
                        "View our",
                        "story"
                    ]
                }
            }
        ]
    },
    sections: {
        services: {
            title: "Our Services",
            col1Title: "Deep AI Engineering Services",
            col2Title: "High-Performance Software Architecture",
            titleLines: [
                "Our",
                "Services"
            ],
            description: "We help businesses design, build, and maintain software products with focused engineering teams and practical delivery processes."
        },
        portfolio: {
            title: "Latest Works",
            ctaLabel: "All Projects",
            ctaHref: "/case-studies"
        },
        approach: {
            title: "Our Approach",
            backgroundImage: "/assets/img/root/service-bubble.png"
        },
        partners: {
            title: "ZiniSoft Ltd. Co. Partners"
        },
        testimonial: {
            backgroundImage: "/assets/img/about-us-testimonial-background.png",
            quoteImage: "/assets/img/root/quote.png"
        },
        awards: {
            titleLines: [
                "Our",
                "Awards"
            ]
        }
    },
    services: [
        {
            id: 11,
            icon: "lnil lnil-cup",
            titlePart1: "Software",
            titlePart2: "Development",
            descriptions: "Custom web, mobile, and backend systems built around your business workflow."
        },
        {
            id: 12,
            icon: "lnil lnil-website",
            titlePart1: "Web",
            titlePart2: "Applications",
            descriptions: "Responsive, maintainable web apps using modern frontend and backend stacks."
        },
        {
            id: 13,
            icon: "lnil lnil-display-alt",
            titlePart1: "UI/UX",
            titlePart2: "Implementation",
            descriptions: "Practical interface development with attention to usability, speed, and consistency."
        },
        {
            id: 14,
            icon: "lnil lnil-target",
            titlePart1: "Maintenance",
            titlePart2: "Support",
            descriptions: "Ongoing improvement, bug fixing, monitoring, and technical support for live products."
        }
    ],
    portfolio: [
        {
            id: 1,
            img: "/assets/img/portfolio/work-1.png",
            categorie: "Web Application",
            title: "Business Dashboard"
        },
        {
            id: 2,
            img: "/assets/img/portfolio/work-2.png",
            categorie: "Mobile Product",
            title: "Customer App"
        },
        {
            id: 3,
            img: "/assets/img/portfolio/work-3.png",
            categorie: "Ecommerce",
            title: "Online Store"
        },
        {
            id: 4,
            img: "/assets/img/portfolio/work-4.png",
            categorie: "Automation",
            title: "Internal Workflow"
        },
        {
            id: 5,
            img: "/assets/img/portfolio/work-5.png",
            categorie: "Platform",
            title: "SaaS Portal"
        }
    ],
    approach: [
        {
            subTitle: "One",
            title: "Discover",
            descriptions: "We clarify requirements, technical constraints, user flows, and delivery priorities before implementation.",
            delayAnimation: "0"
        },
        {
            subTitle: "Two",
            title: "Design",
            descriptions: "We architect scalable database schemas, high-performance API structures, and intuitive user experiences.",
            delayAnimation: "100"
        },
        {
            subTitle: "Three",
            title: "Build",
            descriptions: "We develop in focused iterations, keeping the codebase maintainable and the delivery path visible.",
            delayAnimation: "200"
        },
        {
            subTitle: "Four",
            title: "Test",
            descriptions: "We run automated unit tests, end-to-end integration audits, and performance checks to guarantee reliability.",
            delayAnimation: "300"
        },
        {
            subTitle: "Five",
            title: "Deploy",
            descriptions: "We configure CI/CD pipelines, containerize applications, and roll out features smoothly across environments.",
            delayAnimation: "400"
        },
        {
            subTitle: "Six",
            title: "Improve",
            descriptions: "We measure telemetry, maintain system uptime, and continuously refine the product so it stays useful.",
            delayAnimation: "500"
        }
    ],
    partners: [
        {
            delayAnimation: "0",
            hoverBg: "#fcf8f4",
            imgHeight: "85px",
            imgName: "image-1",
            title: "Client One"
        },
        {
            delayAnimation: "100",
            hoverBg: "#f3f7fc",
            imgHeight: "78px",
            imgName: "image-2",
            title: "Client Two"
        },
        {
            delayAnimation: "200",
            hoverBg: "#f9fcf3",
            imgHeight: "90px",
            imgName: "image-3",
            title: "Client Three"
        },
        {
            delayAnimation: "300",
            hoverBg: "#f9f9f9",
            imgHeight: "90px",
            imgName: "image-4",
            title: "Client Four"
        },
        {
            delayAnimation: "400",
            hoverBg: "#fdf4fb",
            imgHeight: "62px",
            imgName: "image-5",
            title: "Client Five"
        },
        {
            delayAnimation: "500",
            hoverBg: "#fdf4fb",
            imgHeight: "77px",
            imgName: "image-6",
            title: "Client Six"
        },
        {
            delayAnimation: "500",
            hoverBg: "#fdf4fb",
            imgHeight: "77px",
            imgName: "image-7",
            title: "Client Six"
        }
    ],
    counters: [
        {
            startCount: "0",
            endCount: "10",
            metaText1: "YEARS OF",
            metaText2: "EXPERIENCE",
            animationDelay: "0"
        },
        {
            startCount: "0",
            endCount: "120",
            metaText1: "DELIVERED",
            metaText2: "PROJECTS",
            animationDelay: "100"
        },
        {
            startCount: "0",
            endCount: "35",
            metaText1: "ACTIVE",
            metaText2: "CLIENTS",
            animationDelay: "200"
        },
        {
            startCount: "0",
            endCount: "8",
            metaText1: "TECHNICAL",
            metaText2: "SPECIALTIES",
            animationDelay: "300"
        }
    ],
    testimonials: [
        {
            descriptions: "ZiniSoft helped us move from unclear requirements to a stable product release with a very practical engineering process.",
            name: "Client Representative",
            designation: "Product Owner"
        },
        {
            descriptions: "The team communicates clearly, ships consistently, and understands how to keep software maintainable after launch.",
            name: "Client Representative",
            designation: "Operations Manager"
        }
    ],
    awards: [
        {
            date: "2024",
            img: "logo-4",
            delayAnimation: "0",
            awardList: [
                {
                    title: "Long-term Delivery Partner",
                    subTitle: "Software outsourcing collaboration"
                },
                {
                    title: "Reliable Support Team",
                    subTitle: "Maintenance and production support"
                }
            ]
        },
        {
            date: "2023",
            img: "logo-2",
            delayAnimation: "100",
            awardList: [
                {
                    title: "Product Engineering",
                    subTitle: "Web and mobile application delivery"
                },
                {
                    title: "Business Automation",
                    subTitle: "Internal tool development"
                }
            ]
        }
    ],
    blog: [
        {
            id: 1,
            img: "/assets/img/home/default/post-1.png",
            cat: "Development",
            date: "Jan 15, 2026",
            title: "How to plan a practical software outsourcing project",
            description: "A short guide to aligning scope, communication, timeline, and technical ownership before development starts."
        },
        {
            id: 2,
            img: "/assets/img/home/default/post-2.png",
            cat: "Engineering",
            date: "Jan 22, 2026",
            title: "Keeping web applications maintainable after launch",
            description: "The habits that help teams reduce regressions and keep improving live products with less friction."
        },
        {
            id: 3,
            img: "/assets/img/home/default/post-3.png",
            cat: "Business",
            date: "Jan 29, 2026",
            title: "When custom software is better than manual operations",
            description: "Signals that your workflow is ready for automation and what to prepare before building internal tools."
        }
    ]
};


/***/ }),

/***/ 20106:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   U2: () => (/* binding */ getServices),
/* harmony export */   aH: () => (/* binding */ getServicesByGroup),
/* harmony export */   dL: () => (/* binding */ getGroupServices),
/* harmony export */   gq: () => (/* binding */ getServiceByIdOrSlug),
/* harmony export */   jl: () => (/* binding */ getMediaById)
/* harmony export */ });
/* unused harmony export normalizeWpService */
const API_BASE = "https://admin.zinisoft.net/wp-json/wp/v2";
const htmlEntities = {
    "&amp;": "&",
    "&#038;": "&",
    "&nbsp;": " ",
    "&hellip;": "...",
    "&#8230;": "...",
    "&#8211;": "-",
    "&#8212;": "-",
    "&#8216;": "'",
    "&#8217;": "'",
    "&#8220;": '"',
    "&#8221;": '"'
};
const decodeHtml = (value = "")=>value.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g, (entity)=>htmlEntities[entity] || entity);
const stripHtml = (html = "")=>html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
const getHtmlTagText = (html = "", tagName = "")=>{
    const match = html.match(new RegExp(`<${tagName}[^>]*>([\\s\\S]*?)<\\/${tagName}>`, "i"));
    return match ? stripHtml(decodeHtml(match[1])) : "";
};
const getFeaturedImage = (item)=>{
    const media = item?._embedded?.["wp:featuredmedia"]?.[0];
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || media?.source_url || item.featured_image_url || "";
};
const getMediaImage = (media)=>{
    const sizes = media?.media_details?.sizes || {};
    return sizes.full?.source_url || sizes.large?.source_url || sizes.medium_large?.source_url || sizes.medium?.source_url || media?.source_url || "";
};
const serviceIcons = {
    37: "lnil lnil-brain",
    38: "lnil lnil-ai",
    39: "lnil lnil-display-alt",
    40: "lnil lnil-bar-chart",
    56: "lnil lnil-cloud-network",
    57: "lnil lnil-database",
    58: "lnil lnil-laptop",
    5982: "lnil lnil-hospital-alt-3",
    5981: "lnil lnil-graduation",
    5991: "lnil lnil-graduation",
    711: "lnil lnil-cart"
};
const iconAliases = {
    "graduation-cap": "graduation",
    "graduation-cap-1": "graduation",
    hierarchy: "hierchy",
    "hierarchy-1": "hierchy",
    "hierchy-1": "hierchy",
    "school-bench-1": "school-bench",
    "calendar-days": "calendar",
    "rocket-5": "rocket"
};
const normalizeLineIcon = (rawIcon = "")=>{
    const raw = decodeHtml(rawIcon.toString()).trim();
    if (!raw) return "";
    const tokens = raw.split(/\s+/);
    const hasRegularIcon = tokens.some((token)=>token === "lnir" || token.startsWith("lnir-") || token.startsWith("lni-") && !token.startsWith("lnil-"));
    const iconFamily = hasRegularIcon ? "lnir" : "lnil";
    const iconToken = tokens.find((token)=>/^(lnil|lnir|lni)-/.test(token)) || tokens.find((token)=>!/^(lnil|lnir|lni)$/.test(token)) || "";
    let iconName = iconToken.replace(/^(lnil|lnir|lni)-/, "");
    iconName = iconAliases[iconName] || iconName;
    if (iconName.startsWith("rocket")) {
        iconName = "rocket";
    }
    return iconName ? `${iconFamily} ${iconFamily}-${iconName}` : "";
};
const getMediaById = async (mediaId)=>{
    if (!mediaId) return "";
    try {
        const response = await fetch(`${API_BASE}/media/${mediaId}`, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return "";
        }
        const media = await response.json();
        return getMediaImage(media);
    } catch (error) {
        console.error(`Error fetching media ${mediaId}:`, error);
        return "";
    }
};
/**
 * Map a single WP service item to the shape used by ServiceOne component.
 */ const normalizeWpService = (item)=>{
    const title = decodeHtml(item.title?.rendered || "");
    const words = title.split(" ");
    // Split title into two parts for the ServiceOne layout
    const midpoint = Math.ceil(words.length / 2);
    const titlePart1 = words.slice(0, midpoint).join(" ");
    const titlePart2 = words.slice(midpoint).join(" ");
    const excerpt = stripHtml(decodeHtml(item.excerpt?.rendered || ""));
    const featuredImage = getFeaturedImage(item);
    const acf = item.acf || {};
    // Try to retrieve custom icon from WordPress ACF (service_icon) or metadata (zini_icon) first
    const rawMetaIcon = decodeHtml((item.acf?.service_icon || item.meta?.zini_icon || "").toString()).trim();
    const icon = normalizeLineIcon(rawMetaIcon) || serviceIcons[item.id] || "lnil lnil-cup";
    return {
        id: item.id,
        slug: item.slug,
        icon,
        titlePart1,
        titlePart2,
        title,
        descriptions: excerpt,
        text: excerpt,
        featured_image_url: featuredImage,
        content: item.content?.rendered || "",
        category: item.meta?.zini_category ? decodeHtml(item.meta.zini_category) : "",
        subtitle: item.meta?.zini_subtitle ? decodeHtml(item.meta.zini_subtitle) : "",
        footerLeft: item.meta?.zini_footer_left ? decodeHtml(item.meta.zini_footer_left) : "",
        footerRight: item.meta?.zini_footer_right ? decodeHtml(item.meta.zini_footer_right) : "View Details",
        groupServices: item["group-services"] || [],
        specializationContent: acf.our_specialization_content || "",
        specializationAttributes: Array.isArray(acf.our_specialization_attributes) ? acf.our_specialization_attributes.map((attribute, index)=>({
                id: `${item.id}-specialization-${index}`,
                title: attribute.title || "",
                percentage: Number(attribute.percentage) || 0
            })).filter((attribute)=>attribute.title) : [],
        skills: Array.isArray(acf.our_skills) ? acf.our_skills.map((skill, index)=>({
                id: `${item.id}-skill-${index}`,
                title: skill.title || "",
                image: skill.image || null
            })).filter((skill)=>skill.title) : [],
        approachContent: acf.our__approach_content || "",
        approach: Array.isArray(acf.our_approach) ? acf.our_approach.map((step, index)=>{
            const content = step.content || "";
            return {
                id: `${item.id}-approach-${index}`,
                content,
                title: step.title || step.question || getHtmlTagText(content, "h6"),
                descriptions: step.description || step.descriptions || step.answer || getHtmlTagText(content, "p"),
                delayAnimation: String(index * 100)
            };
        }).filter((step)=>step.title || step.descriptions) : [],
        faqs: Array.isArray(acf.our_faqs) ? acf.our_faqs.map((faq, index)=>({
                id: `${item.id}-faq-${index}`,
                expand: index === 0 ? "a" : `${item.id}-faq-${index}`,
                title: faq.question || faq.title || "",
                desc: faq.answer || faq.desc || ""
            })).filter((faq)=>faq.title || faq.desc) : []
    };
};
/**
 * Fetch all services from the WP REST API.
 */ const getServices = async ()=>{
    const url = `${API_BASE}/services?_embed=1&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error("Error fetching services:", error);
        return [];
    }
};
/**
 * Fetch services filtered by group-services taxonomy term ID.
 */ const getServicesByGroup = async (groupId)=>{
    if (!groupId) return [];
    const url = `${API_BASE}/services?_embed=1&group-services=${groupId}&per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error(`Services by Group ${groupId} responded with status:`, response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>normalizeWpService(item));
        }
        return [];
    } catch (error) {
        console.error(`Error fetching services for group ${groupId}:`, error);
        return [];
    }
};
/**
 * Fetch a single service by ID or slug.
 */ const getServiceByIdOrSlug = async (idOrSlug)=>{
    if (!idOrSlug) return null;
    const isNumeric = /^\d+$/.test(String(idOrSlug));
    const url = isNumeric ? `${API_BASE}/services/${idOrSlug}?_embed=1` : `${API_BASE}/services?_embed=1&slug=${encodeURIComponent(idOrSlug)}`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            return null;
        }
        const data = await response.json();
        if (isNumeric) {
            return normalizeWpService(data);
        } else {
            if (Array.isArray(data) && data.length > 0) {
                return normalizeWpService(data[0]);
            }
            return null;
        }
    } catch (error) {
        console.error("Error fetching service by ID/slug:", error);
        return null;
    }
};
/**
 * Fetch group-services taxonomy from the WP REST API.
 * Returns array of { id, name, description, slug, count }.
 */ const getGroupServices = async ()=>{
    const url = `${API_BASE}/group-services?per_page=100`;
    try {
        const response = await fetch(url, {
            next: {
                revalidate: 3600
            }
        });
        if (!response.ok) {
            console.error("Group Services API responded with status:", response.status);
            return [];
        }
        const data = await response.json();
        if (Array.isArray(data)) {
            return data.map((item)=>({
                    id: item.id,
                    name: decodeHtml(item.name || ""),
                    description: decodeHtml(item.description || ""),
                    slug: item.slug,
                    count: item.count
                }));
        }
        return [];
    } catch (error) {
        console.error("Error fetching group services:", error);
        return [];
    }
};


/***/ })

};
;�g���`h���W"use strict";
exports.id = 960;
exports.ids = [960];
exports.modules = {

/***/ 21203:
g����g����/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   u: () => (/* binding */ homePage)
/* harmony export */ });
/* harmony import */ var _seo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(56546);
h���0import { buildMetadata } from "./seo";
export const homePage = {
    metadata: buildMetadata({
        title: "ZiniSoft Ltd. Co | AI & Software Systems",
        description: "ZiniSoft Ltd. Co specializes in AI engineering and software system architecture, delivering high-performance, scalable B2B enterprise software applications.",
        path: "/"
    }),
    hero: {
        video: {
            channel: "youtube",
            videoId: "1gyTUHP6ne8"
        },
        slides: [
            {
                id: "image-1",
                className: "image-1",
                align: "center",
                darkText: false,
                badge: "Shaping the Digital Future with AI-First Architecture",
                accent: "Engineering High-Performance",
                titleLines: [
                    "Software Systems & AI Solutions"
                ],
                description: "We partner with enterprises to build sustainable digital infrastructure, integrate deep artificial intelligence, and achieve comprehensive system optimization.",
                buttons: [
                    {
                        label: "Deep AI-First Solutions",
                        mobileLabel: "AI-First Solutions",
                        href: "#deep-ai-engineering",
                        className: "ptf-btn ptf-btn--primary"
                    },
                    {
                        label: "B2B System Architecture",
                        mobileLabel: "B2B Architecture",
                        href: "#system-architecture",
                        className: "ptf-btn ptf-btn--secondary"
                    }
                ]
            },
            {
                id: "image-2",
                className: "image-2",
                align: "center",
                accent: "Swiss",
                titleLines: [
                    "Style",
                    "Interface"
                ],
                description: "Like any great agency, we are only as good as the result we deliver of our recent work.",
                buttons: [
                    {
                        label: "Get Started",
                        href: "/contact",
                        className: "ptf-btn ptf-btn--primary"
                    }
                ]
            },
            {
                id: "image-3",
                className: "image-3",
                align: "start",
                accent: "Crafting",
                titleLines: [
                    "Digital",
                    "Experience"
                ],
                description: "Like any great agency, we are only as good as the result we deliver of our recent work.",
                buttons: [
                    {
                        label: "Get Started",
                        href: "/contact",
                        className: "ptf-btn ptf-btn--primary"
                    }
                ],
                videoButton: {
                    titleLines: [
                        "View our",
                        "story"
                    ]
                }
            }
        ]
    },
    sections: {
        services: {
            title: "Our Services",
            col1Title: "Deep AI Engineering Services",
            col2Title: "High-Performance Software Architecture",
            titleLines: [
                "Our",
                "Services"
            ],
            description: "We help businesses design, build, and maintain software products with focused engineering teams and practical delivery processes."
        },
        portfolio: {
            title: "Latest Works",
            ctaLabel: "All Projects",
            ctaHref: "/case-studies"
        },
        approach: {
            title: "Our Approach",
            backgroundImage: "/assets/img/root/service-bubble.png"
        },
        partners: {
            title: "ZiniSoft Ltd. Co. Partners"
        },
        testimonial: {
            backgroundImage: "/assets/img/about-us-testimonial-background.png",
            quoteImage: "/assets/img/root/quote.png"
        },
        awards: {
            titleLines: [
                "Our",
                "Awards"
            ]
        }
    },
    services: [
        {
            id: 11,
            icon: "lnil lnil-cup",
            titlePart1: "Software",
            titlePart2: "Development",
            descriptions: "Custom web, mobile, and backend systems built around your business workflow."
        },
        {
            id: 12,
            icon: "lnil lnil-website",
            titlePart1: "Web",
            titlePart2: "Applications",
            descriptions: "Responsive, maintainable web apps using modern frontend and backend stacks."
        },
        {
            id: 13,
            icon: "lnil lnil-display-alt",
            titlePart1: "UI/UX",
            titlePart2: "Implementation",
            descriptions: "Practical interface development with attention to usability, speed, and consistency."
        },
        {
            id: 14,
            icon: "lnil lnil-target",
            titlePart1: "Maintenance",
            titlePart2: "Support",
            descriptions: "Ongoing improvement, bug fixing, monitoring, and technical support for live products."
        }
    ],
    portfolio: [
        {
            id: 1,
            img: "/assets/img/portfolio/work-1.png",
            categorie: "Web Application",
            title: "Business Dashboard"
        },
        {
            id: 2,
            img: "/assets/img/portfolio/work-2.png",
            categorie: "Mobile Product",
            title: "Customer App"
        },
        {
            id: 3,
            img: "/assets/img/portfolio/work-3.png",
            categorie: "Ecommerce",
            title: "Online Store"
        },
        {
            id: 4,
            img: "/assets/img/portfolio/work-4.png",
            categorie: "Automation",
            title: "Internal Workflow"
        },
        {
            id: 5,
            img: "/assets/img/portfolio/work-5.png",
            categorie: "Platform",
            title: "SaaS Portal"
        }
    ],
    approach: [
        {
            subTitle: "One",
            title: "Discover",
            descriptions: "We clarify requirements, technical constraints, user flows, and delivery priorities before implementation.",
            delayAnimation: "0"
        },
        {
            subTitle: "Two",
            title: "Design",
            descriptions: "We architect scalable database schemas, high-performance API structures, and intuitive user experiences.",
            delayAnimation: "100"
        },
        {
            subTitle: "Three",
            title: "Build",
            descriptions: "We develop in focused iterations, keeping the codebase maintainable and the delivery path visible.",
            delayAnimation: "200"
        },
        {
            subTitle: "Four",
            title: "Test",
            descriptions: "We run automated unit tests, end-to-end integration audits, and performance checks to guarantee reliability.",
            delayAnimation: "300"
        },
        {
            subTitle: "Five",
            title: "Deploy",
            descriptions: "We configure CI/CD pipelines, containerize applications, and roll out features smoothly across environments.",
            delayAnimation: "400"
        },
        {
            subTitle: "Six",
            title: "Improve",
            descriptions: "We measure telemetry, maintain system uptime, and continuously refine the product so it stays useful.",
            delayAnimation: "500"
        }
    ],
    partners: [
        {
            delayAnimation: "0",
            hoverBg: "#fcf8f4",
            imgHeight: "85px",
            imgName: "image-1",
            title: "Client One"
        },
        {
            delayAnimation: "100",
            hoverBg: "#f3f7fc",
            imgHeight: "78px",
            imgName: "image-2",
            title: "Client Two"
        },
        {
            delayAnimation: "200",
            hoverBg: "#f9fcf3",
            imgHeight: "90px",
            imgName: "image-3",
            title: "Client Three"
        },
        {
            delayAnimation: "300",
            hoverBg: "#f9f9f9",
            imgHeight: "90px",
            imgName: "image-4",
            title: "Client Four"
        },
        {
            delayAnimation: "400",
            hoverBg: "#fdf4fb",
            imgHeight: "62px",
            imgName: "image-5",
            title: "Client Five"
        },
        {
            delayAnimation: "500",
            hoverBg: "#fdf4fb",
            imgHeight: "77px",
            imgName: "image-6",
            title: "Client Six"
        },
        {
            delayAnimation: "500",
            hoverBg: "#fdf4fb",
            imgHeight: "77px",
            imgName: "image-7",
            title: "Client Six"
        }
    ],
    counters: [
        {
            startCount: "0",
            endCount: "10",
            metaText1: "YEARS OF",
            metaText2: "EXPERIENCE",
            animationDelay: "0"
        },
        {
            startCount: "0",
            endCount: "120",
            metaText1: "DELIVERED",
            metaText2: "PROJECTS",
            animationDelay: "100"
        },
        {
            startCount: "0",
            endCount: "35",
            metaText1: "ACTIVE",
            metaText2: "CLIENTS",
            animationDelay: "200"
        },
        {
            startCount: "0",
            endCount: "8",
            metaText1: "TECHNICAL",
            metaText2: "SPECIALTIES",
            animationDelay: "300"
        }
    ],
    testimonials: [
        {
            descriptions: "ZiniSoft helped us move from unclear requirements to a stable product release with a very practical engineering process.",
            name: "Client Representative",
            designation: "Product Owner"
        },
        {
            descriptions: "The team communicates clearly, ships consistently, and understands how to keep software maintainable after launch.",
            name: "Client Representative",
            designation: "Operations Manager"
        }
    ],
    awards: [
        {
            date: "2024",
            img: "logo-4",
            delayAnimation: "0",
            awardList: [
                {
                    title: "Long-term Delivery Partner",
                    subTitle: "Software outsourcing collaboration"
                },
                {
                    title: "Reliable Support Team",
                    subTitle: "Maintenance and production support"
                }
            ]
        },
        {
            date: "2023",
            img: "logo-2",
            delayAnimation: "100",
            awardList: [
                {
                    title: "Product Engineering",
                    subTitle: "Web and mobile application delivery"
                },
                {
                    title: "Business Automation",
                    subTitle: "Internal tool development"
                }
            ]
        }
    ],
    blog: [
        {
            id: 1,
            img: "/assets/img/home/default/post-1.png",
            cat: "Development",
            date: "Jan 15, 2026",
            title: "How to plan a practical software outsourcing project",
            description: "A short guide to aligning scope, communication, timeline, and technical ownership before development starts."
        },
        {
            id: 2,
            img: "/assets/img/home/default/post-2.png",
            cat: "Engineering",
            date: "Jan 22, 2026",
            title: "Keeping web applications maintainable after launch",
            description: "The habits that help teams reduce regressions and keep improving live products with less friction."
        },
        {
            id: 3,
            img: "/assets/img/home/default/post-3.png",
            cat: "Business",
            date: "Jan 29, 2026",
            title: "When custom software is better than manual operations",
            description: "Signals that your workflow is ready for automation and what to prepare before building internal tools."
        }
    ]
};
c037undefined3945undefined7991(0,_seo__WEBPACK_IMPORTED_MODULE_0__/* .buildMetadata */ .$U)undefinedw����w���,

/***/ 20106:
c����c���d���e������f���v����v���

};
;T����5"use strict";(()=>{var e={};e.id=717,e.ids=[717],e.modules={30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},17784:(e,t,r)=>{r.r(t),r.d(t,{headerHooks:()=>er,originalPathname:()=>ea,patchFetch:()=>en,requestAsyncStorage:()=>Y,routeModule:()=>Q,serverHooks:()=>et,staticGenerationAsyncStorage:()=>ee,staticGenerationBailout:()=>ei});var i={};r.r(i),r.d(i,{default:()=>H});var a={};r.r(a),r.d(a,{GET:()=>K});var n=r(95419),s=r(69108),l=r(99678),o=r(79647),c=r(62486);let u={"&amp;":"&","&#038;":"&","&nbsp;":" ","&hellip;":"...","&#8230;":"...","&#8211;":"-","&#8212;":"-","&#8216;":"'","&#8217;":"'","&#8220;":'"',"&#8221;":'"'},d=(e="")=>e.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g,e=>u[e]||e),p=(e="")=>d(e.replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim()),m=(e="")=>e?e.replace(/<img\s+[^>]*>/g,e=>{let t="",r=e.match(/data-srcset="([^"]+)"/);r&&(t=r[1]);let i="",a=e.match(/data-src="([^"]+)"/)||e.match(/data-orig-src="([^"]+)"/);a&&(i=a[1]);let n=e;return n=t?n.includes("srcset=")?n.replace(/srcset="[^"]*"/,`srcset="${t}"`):n.replace("<img",`<img srcset="${t}"`):n.replace(/srcset="data:image\/svg\+xml[^"]*"/g,""),i&&(n=n.includes("src=")?n.replace(/src="[^"]*"/,`src="${i}"`):n.replace("<img",`<img src="${i}"`)),n}):"",g=e=>e?new Intl.DateTimeFormat("en",{month:"short",day:"numeric",year:"numeric"}).format(new Date(e)):"",f=e=>{let t=e?._embedded?.["wp:featuredmedia"]?.[0],r=t?.media_details?.sizes||{};return r.full?.source_url||r.large?.source_url||r.medium_large?.source_url||t?.source_url||"/assets/img/blog/grid/post-1.png"},h=e=>e?._embedded?.["wp:term"]?.[0]?.[0]?.name||"Blog",y=e=>(e?._embedded?.["wp:term"]?.[1]||[]).map(e=>e.name),_=e=>e?._embedded?.author?.[0]?.name||"Admin",w=e=>e?._embedded?.author?.[0]?.avatar_urls?.["96"]||"/assets/img/root/author-avatar.png",b=e=>e?._embedded?.author?.[0]?.description||"",v=(e,t,r=[])=>{(Array.isArray(r)?r:[r]).filter(Boolean).forEach(r=>{e.append(`${t}[]`,String(r))})},$=({page:e=1,perPage:t=6,orderby:r="date",order:i="desc",sticky:a,search:n,searchColumns:s,categories:l,status:o,author:c,exclude:u}={})=>{let d=new URLSearchParams({_embed:"1",page:String(e),per_page:String(t),orderby:r,order:i});return"boolean"==typeof a&&d.set("sticky",String(a)),n&&d.set("search",n),v(d,"search_columns",s),v(d,"categories",l),v(d,"status",o),v(d,"author",c),v(d,"exclude",u),`https://admin.zinisoft.net/wp-json/wp/v2/posts?${d.toString()}`},z=(e,{includeContent:t=!1}={})=>({id:e.id,slug:e.slug,href:`/blog/${e.slug}`,sourceUrl:e.link,img:f(e),alt:p(e.title?.rendered||"Blog image"),cat:h(e),date:g(e.date),title:p(e.title?.rendered||""),description:p(e.excerpt?.rendered||""),descriptions:p(e.excerpt?.rendered||""),categoryIds:e.categories||[],tagIds:e.tags||[],tags:y(e),authorId:e.author,author:_(e),authorAvatar:w(e),authorDescription:b(e),content:t?m(e.content?.rendered||""):""}),A=async(e={})=>{let t=$(e);try{let e=await fetch(t,{next:{revalidate:3600}});if(!e.ok)return{posts:[],totalPages:0,total:0};let r=await e.json();return{posts:Array.isArray(r)?r.map(e=>z(e)):[],totalPages:Number(e.headers.get("x-wp-totalpages")||0),total:Number(e.headers.get("x-wp-total")||0)}}catch(e){return{posts:[],totalPages:0,total:0}}},x=async(e={})=>{let{posts:t}=await A(e);return t},S={"&amp;":"&","&#038;":"&","&nbsp;":" ","&hellip;":"...","&#8230;":"...","&#8211;":"-","&#8212;":"-","&#8216;":"'","&#8217;":"'","&#8220;":'"',"&#8221;":'"'},k=(e="")=>e.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g,e=>S[e]||e),P=(e="")=>e.replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim(),q=(e="",t="")=>{let r=e.match(RegExp(`<${t}[^>]*>([\\s\\S]*?)<\\/${t}>`,"i"));return r?P(k(r[1])):""},D=e=>{let t=e?._embedded?.["wp:featuredmedia"]?.[0],r=t?.media_details?.sizes||{};return r.full?.source_url||r.large?.source_url||r.medium_large?.source_url||t?.source_url||e.featured_image_url||""},j={37:"lnil lnil-brain",38:"lnil lnil-ai",39:"lnil lnil-display-alt",40:"lnil lnil-bar-chart",56:"lnil lnil-cloud-network",57:"lnil lnil-database",58:"lnil lnil-laptop",5982:"lnil lnil-hospital-alt-3",5981:"lnil lnil-graduation",5991:"lnil lnil-graduation",711:"lnil lnil-cart"},F={"graduation-cap":"graduation","graduation-cap-1":"graduation",hierarchy:"hierchy","hierarchy-1":"hierchy","hierchy-1":"hierchy","school-bench-1":"school-bench","calendar-days":"calendar","rocket-5":"rocket"},M=(e="")=>{let t=k(e.toString()).trim();if(!t)return"";let r=t.split(/\s+/),i=r.some(e=>"lnir"===e||e.startsWith("lnir-")||e.startsWith("lni-")&&!e.startsWith("lnil-"))?"lnir":"lnil",a=(r.find(e=>/^(lnil|lnir|lni)-/.test(e))||r.find(e=>!/^(lnil|lnir|lni)$/.test(e))||"").replace(/^(lnil|lnir|lni)-/,"");return(a=F[a]||a).startsWith("rocket")&&(a="rocket"),a?`${i} ${i}-${a}`:""},I=e=>{let t=k(e.title?.rendered||""),r=t.split(" "),i=Math.ceil(r.length/2),a=r.slice(0,i).join(" "),n=r.slice(i).join(" "),s=P(k(e.excerpt?.rendered||"")),l=D(e),o=e.acf||{},c=M(k((e.acf?.service_icon||e.meta?.zini_icon||"").toString()).trim())||j[e.id]||"lnil lnil-cup";return{id:e.id,slug:e.slug,icon:c,titlePart1:a,titlePart2:n,title:t,descriptions:s,text:s,featured_image_url:l,content:e.content?.rendered||"",category:e.meta?.zini_category?k(e.meta.zini_category):"",subtitle:e.meta?.zini_subtitle?k(e.meta.zini_subtitle):"",footerLeft:e.meta?.zini_footer_left?k(e.meta.zini_footer_left):"",footerRight:e.meta?.zini_footer_right?k(e.meta.zini_footer_right):"View Details",groupServices:e["group-services"]||[],specializationContent:o.our_specialization_content||"",specializationAttributes:Array.isArray(o.our_specialization_attributes)?o.our_specialization_attributes.map((t,r)=>({id:`${e.id}-specialization-${r}`,title:t.title||"",percentage:Number(t.percentage)||0})).filter(e=>e.title):[],skills:Array.isArray(o.our_skills)?o.our_skills.map((t,r)=>({id:`${e.id}-skill-${r}`,title:t.title||"",image:t.image||null})).filter(e=>e.title):[],approachContent:o.our__approach_content||"",approach:Array.isArray(o.our_approach)?o.our_approach.map((t,r)=>{let i=t.content||"";return{id:`${e.id}-approach-${r}`,content:i,title:t.title||t.question||q(i,"h6"),descriptions:t.description||t.descriptions||t.answer||q(i,"p"),delayAnimation:String(100*r)}}).filter(e=>e.title||e.descriptions):[],faqs:Array.isArray(o.our_faqs)?o.our_faqs.map((t,r)=>({id:`${e.id}-faq-${r}`,expand:0===r?"a":`${e.id}-faq-${r}`,title:t.question||t.title||"",desc:t.answer||t.desc||""})).filter(e=>e.title||e.desc):[]}},O=async()=>{try{let e=await fetch("https://admin.zinisoft.net/wp-json/wp/v2/services?_embed=1&per_page=100",{next:{revalidate:3600}});if(!e.ok)return console.error("Services API responded with status:",e.status),[];let t=await e.json();if(Array.isArray(t))return t.map(e=>I(e));return[]}catch(e){return console.error("Error fetching services:",e),[]}},R={"&amp;":"&","&#038;":"&","&nbsp;":" ","&hellip;":"...","&#8230;":"...","&#8211;":"-","&#8212;":"-","&#8216;":"'","&#8217;":"'","&#8220;":'"',"&#8221;":'"'},C=(e="")=>e.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g,e=>R[e]||e),N=e=>{let t=e?._embedded?.["wp:featuredmedia"]?.[0],r=t?.media_details?.sizes||{};return r.full?.source_url||r.large?.source_url||r.medium_large?.source_url||t?.source_url||e.featured_image_url||"/assets/img/portfolio/work-2.png"},E=e=>e?new Intl.DateTimeFormat("en",{month:"short",year:"numeric"}).format(new Date(e)):"",U=e=>{for(let t of e?._embedded?.["wp:term"]||[])if(Array.isArray(t)&&t.length>0&&t[0]?.taxonomy==="technology")return t.map(e=>C(e.name)).join(", ");return""},B=(e="")=>e?e.replace(/<img\s+[^>]*>/g,e=>{let t="",r=e.match(/data-srcset="([^"]+)"/);r&&(t=r[1]);let i="",a=e.match(/data-src="([^"]+)"/)||e.match(/data-orig-src="([^"]+)"/);a&&(i=a[1]);let n=e;return n=t?n.includes("srcset=")?n.replace(/srcset="[^"]*"/,`srcset="${t}"`):n.replace("<img",`<img srcset="${t}"`):n.replace(/srcset="data:image\/svg\+xml[^"]*"/g,""),i&&(n=n.includes("src=")?n.replace(/src="[^"]*"/,`src="${i}"`):n.replace("<img",`<img src="${i}"`)),n}):"",L=e=>{let t=N(e),r=U(e);return{id:e.id,slug:e.slug,title:C(e.title?.rendered||""),cat:r||(e.meta?.zini_services?C(e.meta.zini_services):"Design"),date:e.meta?.zini_date?C(e.meta.zini_date):E(e.date),img:t,imgPopup:t,dataId:`work-${e.id}`,client:e.meta?.zini_client?C(e.meta.zini_client):"",team:e.meta?.zini_team?C(e.meta.zini_team):"",services:e.meta?.zini_services?C(e.meta.zini_services):"",technologies:e.technologies||[],content:B(e.content?.rendered||""),excerpt:C(e.excerpt?.rendered||"").replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim()}},T=({page:e=1,perPage:t=6,orderby:r="date",order:i="desc",technologies:a}={})=>{let n=new URLSearchParams({_embed:"1",page:String(e),per_page:String(t)});return r&&n.set("orderby",r),i&&n.set("order",i),a&&n.set("technologies",String(a)),`https://admin.zinisoft.net/wp-json/wp/v2/case-studies?${n.toString()}`},G=async(e={})=>{let t=T(e);try{let e=await fetch(t,{next:{revalidate:3600}});if(!e.ok)return{caseStudies:[],totalPages:0,total:0};let r=await e.json();return{caseStudies:Array.isArray(r)?r.map(e=>L(e)):[],totalPages:Number(e.headers.get("x-wp-totalpages")||0),total:Number(e.headers.get("x-wp-total")||0)}}catch(e){return console.error("Error fetching case studies page:",e),{caseStudies:[],totalPages:0,total:0}}},W=async(e={})=>{let{caseStudies:t}=await G(e);return t};async function H(){let e=c.ep.url,[t,r,i]=await Promise.all([x({perPage:100}).catch(()=>[]),O().catch(()=>[]),W({perPage:100}).catch(()=>[])]),a=["","/about-us","/about-me","/contact","/faq","/pricing","/privacy-policy","/refund-returns","/team","/services","/case-studies","/blogs"].map(t=>({url:`${e}${t}`,lastModified:new Date().toISOString(),changeFrequency:""===t?"daily":"weekly",priority:""===t?1:.8}));return[...a,...t.map(t=>({url:`${e}/blog/${t.slug||t.id}`,lastModified:new Date().toISOString(),changeFrequency:"weekly",priority:.6})),...r.map(t=>({url:`${e}/service/${t.slug||t.id}`,lastModified:new Date().toISOString(),changeFrequency:"weekly",priority:.6})),...i.map(t=>({url:`${e}/case-study/${t.slug||t.id}`,lastModified:new Date().toISOString(),changeFrequency:"weekly",priority:.6}))]}var Z=r(57252);let J={...i},V=J.default,X=J.generateSitemaps;if("function"!=typeof V)throw Error('Default export is missing in "G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js"');async function K(e,t){let r;let{__metadata_id__:i=[],...a}=t.params||{},n=i[0],s=X?await X():null;if(s&&null==(r=s.find(e=>e.id.toString()===n)?.id))return new o.NextResponse("Not Found",{status:404});let l=await V({id:r}),c=(0,Z.resolveRouteData)(l,"sitemap");return new o.NextResponse(c,{headers:{"Content-Type":"application/xml","Cache-Control":"public, max-age=0, must-revalidate"}})}let Q=new n.AppRouteRouteModule({definition:{kind:s.x.APP_ROUTE,page:"/sitemap.xml/route",pathname:"/sitemap.xml",filename:"sitemap",bundlePath:"app/sitemap.xml/route"},resolvedPagePath:"next-metadata-route-loader?page=%2Fsitemap.xml%2Froute&isDynamic=1!G:\\zinisoft\\zinisoft_beta\\zinisoft.net\\frontend-v3\\app\\sitemap.js?__next_metadata_route__",nextConfigOutput:"",userland:a}),{requestAsyncStorage:Y,staticGenerationAsyncStorage:ee,serverHooks:et,headerHooks:er,staticGenerationBailout:ei}=Q,ea="/sitemap.xml/route";function en(){return(0,l.patchFetch)({serverHooks:et,staticGenerationAsyncStorage:ee})}},62486:(e,t,r)=>{r.d(t,{ep:()=>i});let i={name:"ZiniSoft Ltd. Co.",url:"https://zinisoft.net",logo:"https://zinisoft.net/assets/img/root/logo-dark.png",description:"ZiniSoft Ltd. Co specializes in AI engineering and software system architecture, delivering high-performance, scalable B2B enterprise software applications.",socialLinks:["https://www.facebook.com/zinisoft","https://www.linkedin.com/company/zinisoft"]};i.name,i.url,i.name},57252:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{resolveRobots:function(){return a},resolveSitemap:function(){return n},resolveManifest:function(){return s},resolveRouteData:function(){return l}});let i=r(79926);function a(e){let t="";for(let r of Array.isArray(e.rules)?e.rules:[e.rules]){for(let e of(0,i.resolveArray)(r.userAgent||["*"]))t+=`User-Agent: ${e}
`;if(r.allow)for(let e of(0,i.resolveArray)(r.allow))t+=`Allow: ${e}
`;if(r.disallow)for(let e of(0,i.resolveArray)(r.disallow))t+=`Disallow: ${e}
`;r.crawlDelay&&(t+=`Crawl-delay: ${r.crawlDelay}
`),t+="\n"}return e.host&&(t+=`Host: ${e.host}
`),e.sitemap&&(0,i.resolveArray)(e.sitemap).forEach(e=>{t+=`Sitemap: ${e}
`}),t}function n(e){let t="";for(let r of(t+='<?xml version="1.0" encoding="UTF-8"?>\n<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n',e)){if(t+=`<url>
<loc>${r.url}</loc>
`,r.lastModified){let e=r.lastModified instanceof Date?r.lastModified.toISOString():r.lastModified;t+=`<lastmod>${e}</lastmod>
`}r.changeFrequency&&(t+=`<changefreq>${r.changeFrequency}</changefreq>
`),"number"==typeof r.priority&&(t+=`<priority>${r.priority}</priority>
`),t+="</url>\n"}return t+"</urlset>\n"}function s(e){return JSON.stringify(e)}function l(e,t){return"robots"===t?a(e):"sitemap"===t?n(e):"manifest"===t?s(e):""}},79926:(e,t)=>{function r(e){return Array.isArray(e)?e:[e]}function i(e){if(null!=e)return r(e)}Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{resolveAsArrayOrUndefined:function(){return i},resolveArray:function(){return r}})}};var t=require("../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),i=t.X(0,[638,266],()=>r(17784));module.exports=i})();Q����0"use strict";exports.id=960,exports.ids=[960],exports.modules={21203:(e,t,i)=>{i.d(t,{u:()=>r});let r={metadata:(0,i(56546).$U)({title:"ZiniSoft Ltd. Co | AI & Software Systems",description:"ZiniSoft Ltd. Co specializes in AI engineering and software system architecture, delivering high-performance, scalable B2B enterprise software applications.",path:"/"}),hero:{video:{channel:"youtube",videoId:"1gyTUHP6ne8"},slides:[{id:"image-1",className:"image-1",align:"center",darkText:!1,badge:"Shaping the Digital Future with AI-First Architecture",accent:"Engineering High-Performance",titleLines:["Software Systems & AI Solutions"],description:"We partner with enterprises to build sustainable digital infrastructure, integrate deep artificial intelligence, and achieve comprehensive system optimization.",buttons:[{label:"Deep AI-First Solutions",mobileLabel:"AI-First Solutions",href:"#deep-ai-engineering",className:"ptf-btn ptf-btn--primary"},{label:"B2B System Architecture",mobileLabel:"B2B Architecture",href:"#system-architecture",className:"ptf-btn ptf-btn--secondary"}]},{id:"image-2",className:"image-2",align:"center",accent:"Swiss",titleLines:["Style","Interface"],description:"Like any great agency, we are only as good as the result we deliver of our recent work.",buttons:[{label:"Get Started",href:"/contact",className:"ptf-btn ptf-btn--primary"}]},{id:"image-3",className:"image-3",align:"start",accent:"Crafting",titleLines:["Digital","Experience"],description:"Like any great agency, we are only as good as the result we deliver of our recent work.",buttons:[{label:"Get Started",href:"/contact",className:"ptf-btn ptf-btn--primary"}],videoButton:{titleLines:["View our","story"]}}]},sections:{services:{title:"Our Services",col1Title:"Deep AI Engineering Services",col2Title:"High-Performance Software Architecture",titleLines:["Our","Services"],description:"We help businesses design, build, and maintain software products with focused engineering teams and practical delivery processes."},portfolio:{title:"Latest Works",ctaLabel:"All Projects",ctaHref:"/case-studies"},approach:{title:"Our Approach",backgroundImage:"/assets/img/root/service-bubble.png"},partners:{title:"ZiniSoft Ltd. Co. Partners"},testimonial:{backgroundImage:"/assets/img/about-us-testimonial-background.png",quoteImage:"/assets/img/root/quote.png"},awards:{titleLines:["Our","Awards"]}},services:[{id:11,icon:"lnil lnil-cup",titlePart1:"Software",titlePart2:"Development",descriptions:"Custom web, mobile, and backend systems built around your business workflow."},{id:12,icon:"lnil lnil-website",titlePart1:"Web",titlePart2:"Applications",descriptions:"Responsive, maintainable web apps using modern frontend and backend stacks."},{id:13,icon:"lnil lnil-display-alt",titlePart1:"UI/UX",titlePart2:"Implementation",descriptions:"Practical interface development with attention to usability, speed, and consistency."},{id:14,icon:"lnil lnil-target",titlePart1:"Maintenance",titlePart2:"Support",descriptions:"Ongoing improvement, bug fixing, monitoring, and technical support for live products."}],portfolio:[{id:1,img:"/assets/img/portfolio/work-1.png",categorie:"Web Application",title:"Business Dashboard"},{id:2,img:"/assets/img/portfolio/work-2.png",categorie:"Mobile Product",title:"Customer App"},{id:3,img:"/assets/img/portfolio/work-3.png",categorie:"Ecommerce",title:"Online Store"},{id:4,img:"/assets/img/portfolio/work-4.png",categorie:"Automation",title:"Internal Workflow"},{id:5,img:"/assets/img/portfolio/work-5.png",categorie:"Platform",title:"SaaS Portal"}],approach:[{subTitle:"One",title:"Discover",descriptions:"We clarify requirements, technical constraints, user flows, and delivery priorities before implementation.",delayAnimation:"0"},{subTitle:"Two",title:"Design",descriptions:"We architect scalable database schemas, high-performance API structures, and intuitive user experiences.",delayAnimation:"100"},{subTitle:"Three",title:"Build",descriptions:"We develop in focused iterations, keeping the codebase maintainable and the delivery path visible.",delayAnimation:"200"},{subTitle:"Four",title:"Test",descriptions:"We run automated unit tests, end-to-end integration audits, and performance checks to guarantee reliability.",delayAnimation:"300"},{subTitle:"Five",title:"Deploy",descriptions:"We configure CI/CD pipelines, containerize applications, and roll out features smoothly across environments.",delayAnimation:"400"},{subTitle:"Six",title:"Improve",descriptions:"We measure telemetry, maintain system uptime, and continuously refine the product so it stays useful.",delayAnimation:"500"}],partners:[{delayAnimation:"0",hoverBg:"#fcf8f4",imgHeight:"85px",imgName:"image-1",title:"Client One"},{delayAnimation:"100",hoverBg:"#f3f7fc",imgHeight:"78px",imgName:"image-2",title:"Client Two"},{delayAnimation:"200",hoverBg:"#f9fcf3",imgHeight:"90px",imgName:"image-3",title:"Client Three"},{delayAnimation:"300",hoverBg:"#f9f9f9",imgHeight:"90px",imgName:"image-4",title:"Client Four"},{delayAnimation:"400",hoverBg:"#fdf4fb",imgHeight:"62px",imgName:"image-5",title:"Client Five"},{delayAnimation:"500",hoverBg:"#fdf4fb",imgHeight:"77px",imgName:"image-6",title:"Client Six"},{delayAnimation:"500",hoverBg:"#fdf4fb",imgHeight:"77px",imgName:"image-7",title:"Client Six"}],counters:[{startCount:"0",endCount:"10",metaText1:"YEARS OF",metaText2:"EXPERIENCE",animationDelay:"0"},{startCount:"0",endCount:"120",metaText1:"DELIVERED",metaText2:"PROJECTS",animationDelay:"100"},{startCount:"0",endCount:"35",metaText1:"ACTIVE",metaText2:"CLIENTS",animationDelay:"200"},{startCount:"0",endCount:"8",metaText1:"TECHNICAL",metaText2:"SPECIALTIES",animationDelay:"300"}],testimonials:[{descriptions:"ZiniSoft helped us move from unclear requirements to a stable product release with a very practical engineering process.",name:"Client Representative",designation:"Product Owner"},{descriptions:"The team communicates clearly, ships consistently, and understands how to keep software maintainable after launch.",name:"Client Representative",designation:"Operations Manager"}],awards:[{date:"2024",img:"logo-4",delayAnimation:"0",awardList:[{title:"Long-term Delivery Partner",subTitle:"Software outsourcing collaboration"},{title:"Reliable Support Team",subTitle:"Maintenance and production support"}]},{date:"2023",img:"logo-2",delayAnimation:"100",awardList:[{title:"Product Engineering",subTitle:"Web and mobile application delivery"},{title:"Business Automation",subTitle:"Internal tool development"}]}],blog:[{id:1,img:"/assets/img/home/default/post-1.png",cat:"Development",date:"Jan 15, 2026",title:"How to plan a practical software outsourcing project",description:"A short guide to aligning scope, communication, timeline, and technical ownership before development starts."},{id:2,img:"/assets/img/home/default/post-2.png",cat:"Engineering",date:"Jan 22, 2026",title:"Keeping web applications maintainable after launch",description:"The habits that help teams reduce regressions and keep improving live products with less friction."},{id:3,img:"/assets/img/home/default/post-3.png",cat:"Business",date:"Jan 29, 2026",title:"When custom software is better than manual operations",description:"Signals that your workflow is ready for automation and what to prepare before building internal tools."}]}},20106:(e,t,i)=>{i.d(t,{U2:()=>f,aH:()=>h,dL:()=>y,gq:()=>b,jl:()=>m});let r="https://admin.zinisoft.net/wp-json/wp/v2",a={"&amp;":"&","&#038;":"&","&nbsp;":" ","&hellip;":"...","&#8230;":"...","&#8211;":"-","&#8212;":"-","&#8216;":"'","&#8217;":"'","&#8220;":'"',"&#8221;":'"'},n=(e="")=>e.replace(/&amp;|&#038;|&nbsp;|&hellip;|&#8230;|&#8211;|&#8212;|&#8216;|&#8217;|&#8220;|&#8221;/g,e=>a[e]||e),s=(e="")=>e.replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim(),o=(e="",t="")=>{let i=e.match(RegExp(`<${t}[^>]*>([\\s\\S]*?)<\\/${t}>`,"i"));return i?s(n(i[1])):""},l=e=>{let t=e?._embedded?.["wp:featuredmedia"]?.[0],i=t?.media_details?.sizes||{};return i.full?.source_url||i.large?.source_url||i.medium_large?.source_url||t?.source_url||e.featured_image_url||""},c=e=>{let t=e?.media_details?.sizes||{};return t.full?.source_url||t.large?.source_url||t.medium_large?.source_url||t.medium?.source_url||e?.source_url||""},u={37:"lnil lnil-brain",38:"lnil lnil-ai",39:"lnil lnil-display-alt",40:"lnil lnil-bar-chart",56:"lnil lnil-cloud-network",57:"lnil lnil-database",58:"lnil lnil-laptop",5982:"lnil lnil-hospital-alt-3",5981:"lnil lnil-graduation",5991:"lnil lnil-graduation",711:"lnil lnil-cart"},d={"graduation-cap":"graduation","graduation-cap-1":"graduation",hierarchy:"hierchy","hierarchy-1":"hierchy","hierchy-1":"hierchy","school-bench-1":"school-bench","calendar-days":"calendar","rocket-5":"rocket"},p=(e="")=>{let t=n(e.toString()).trim();if(!t)return"";let i=t.split(/\s+/),r=i.some(e=>"lnir"===e||e.startsWith("lnir-")||e.startsWith("lni-")&&!e.startsWith("lnil-"))?"lnir":"lnil",a=(i.find(e=>/^(lnil|lnir|lni)-/.test(e))||i.find(e=>!/^(lnil|lnir|lni)$/.test(e))||"").replace(/^(lnil|lnir|lni)-/,"");return(a=d[a]||a).startsWith("rocket")&&(a="rocket"),a?`${r} ${r}-${a}`:""},m=async e=>{if(!e)return"";try{let t=await fetch(`${r}/media/${e}`,{next:{revalidate:3600}});if(!t.ok)return"";let i=await t.json();return c(i)}catch(t){return console.error(`Error fetching media ${e}:`,t),""}},g=e=>{let t=n(e.title?.rendered||""),i=t.split(" "),r=Math.ceil(i.length/2),a=i.slice(0,r).join(" "),c=i.slice(r).join(" "),d=s(n(e.excerpt?.rendered||"")),m=l(e),g=e.acf||{},f=p(n((e.acf?.service_icon||e.meta?.zini_icon||"").toString()).trim())||u[e.id]||"lnil lnil-cup";return{id:e.id,slug:e.slug,icon:f,titlePart1:a,titlePart2:c,title:t,descriptions:d,text:d,featured_image_url:m,content:e.content?.rendered||"",category:e.meta?.zini_category?n(e.meta.zini_category):"",subtitle:e.meta?.zini_subtitle?n(e.meta.zini_subtitle):"",footerLeft:e.meta?.zini_footer_left?n(e.meta.zini_footer_left):"",footerRight:e.meta?.zini_footer_right?n(e.meta.zini_footer_right):"View Details",groupServices:e["group-services"]||[],specializationContent:g.our_specialization_content||"",specializationAttributes:Array.isArray(g.our_specialization_attributes)?g.our_specialization_attributes.map((t,i)=>({id:`${e.id}-specialization-${i}`,title:t.title||"",percentage:Number(t.percentage)||0})).filter(e=>e.title):[],skills:Array.isArray(g.our_skills)?g.our_skills.map((t,i)=>({id:`${e.id}-skill-${i}`,title:t.title||"",image:t.image||null})).filter(e=>e.title):[],approachContent:g.our__approach_content||"",approach:Array.isArray(g.our_approach)?g.our_approach.map((t,i)=>{let r=t.content||"";return{id:`${e.id}-approach-${i}`,content:r,title:t.title||t.question||o(r,"h6"),descriptions:t.description||t.descriptions||t.answer||o(r,"p"),delayAnimation:String(100*i)}}).filter(e=>e.title||e.descriptions):[],faqs:Array.isArray(g.our_faqs)?g.our_faqs.map((t,i)=>({id:`${e.id}-faq-${i}`,expand:0===i?"a":`${e.id}-faq-${i}`,title:t.question||t.title||"",desc:t.answer||t.desc||""})).filter(e=>e.title||e.desc):[]}},f=async()=>{let e=`${r}/services?_embed=1&per_page=100`;try{let t=await fetch(e,{next:{revalidate:3600}});if(!t.ok)return console.error("Services API responded with status:",t.status),[];let i=await t.json();if(Array.isArray(i))return i.map(e=>g(e));return[]}catch(e){return console.error("Error fetching services:",e),[]}},h=async e=>{if(!e)return[];let t=`${r}/services?_embed=1&group-services=${e}&per_page=100`;try{let i=await fetch(t,{next:{revalidate:3600}});if(!i.ok)return console.error(`Services by Group ${e} responded with status:`,i.status),[];let r=await i.json();if(Array.isArray(r))return r.map(e=>g(e));return[]}catch(t){return console.error(`Error fetching services for group ${e}:`,t),[]}},b=async e=>{if(!e)return null;let t=/^\d+$/.test(String(e)),i=t?`${r}/services/${e}?_embed=1`:`${r}/services?_embed=1&slug=${encodeURIComponent(e)}`;try{let e=await fetch(i,{next:{revalidate:3600}});if(!e.ok)return null;let r=await e.json();if(t)return g(r);if(Array.isArray(r)&&r.length>0)return g(r[0]);return null}catch(e){return console.error("Error fetching service by ID/slug:",e),null}},y=async()=>{let e=`${r}/group-services?per_page=100`;try{let t=await fetch(e,{next:{revalidate:3600}});if(!t.ok)return console.error("Group Services API responded with status:",t.status),[];let i=await t.json();if(Array.isArray(i))return i.map(e=>({id:e.id,name:n(e.name||""),description:n(e.description||""),slug:e.slug,count:e.count}));return[]}catch(e){return console.error("Error fetching group services:",e),[]}}}};

Youez - 2016 - github.com/yon3zu
LinuXploit