{"id":347090,"date":"2026-08-09T11:34:48","date_gmt":"2026-08-09T11:34:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ar-product-viewer-for-woocommerce\/"},"modified":"2026-10-23T21:17:27","modified_gmt":"2026-10-23T21:17:27","slug":"devdiggers-ar-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/kk.wordpress.org\/plugins\/devdiggers-ar-for-woocommerce\/","author":20777317,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.0.7","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"DevDiggers AR for WooCommerce","header_author":"DevDiggers","header_description":"It enables augmented reality experience of the products into the store for the android as well as iOS users.","assets_banners_color":"fbfbfc","last_updated":"2026-10-23 21:17:27","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/devdiggers.com\/product\/woocommerce-product-view-in-ar\/","header_author_uri":"https:\/\/devdiggers.com\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":406,"num_ratings":2,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"devdiggers","date":"2026-08-09 11:34:23","revision":3639311},"1.1.0":{"tag":"1.1.0","author":"devdiggers","date":"2026-10-23 21:17:27","revision":3762469}},"upgrade_notice":{"1.1.0":"<p>Adds faster admin navigation without page reloads, a refreshed list-screen layout and minor bug fixes. Recommended for all users.<\/p>","1.0.0":"<p>First public release of DevDiggers AR for WooCommerce.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-128x128.gif":{"filename":"icon-128x128.gif","revision":3639310,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3639310,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500-rtl.png":{"filename":"banner-1544x500-rtl.png","revision":3639310,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3639310,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250-rtl.png":{"filename":"banner-772x250-rtl.png","revision":3639310,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3639310,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3762469,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"meta\":{\"title\":\"DevDiggers AR for WooCommerce demo\",\"description\":\"A furniture store where shoppers rotate products in 3D and place them in their room with AR.\",\"author\":\"devdiggers\",\"categories\":[\"WooCommerce\"]},\"landingPage\":\"\\\/product\\\/mango-velvet-lounge-chair\\\/\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"features\":{\"networking\":true},\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"woocommerce\"},\"options\":{\"activate\":true}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"devdiggers-ar-for-woocommerce\"},\"options\":{\"activate\":true}},{\"step\":\"installTheme\",\"themeData\":{\"resource\":\"wordpress.org\\\/themes\",\"slug\":\"kadence\"},\"options\":{\"activate\":true}},{\"step\":\"setSiteOptions\",\"options\":{\"woocommerce_onboarding_profile\":{\"skipped\":true},\"woocommerce_task_list_hidden\":\"yes\",\"woocommerce_task_list_complete\":\"yes\",\"woocommerce_show_marketplace_suggestions\":\"no\",\"woocommerce_allow_tracking\":\"no\",\"woocommerce_coming_soon\":\"no\",\"_ddwcpvar_enabled\":\"yes\",\"ddfw_setup_wizard_completed_dd-woocommerce-product-view-ar\":true}},{\"step\":\"runPHP\",\"code\":\"<?php\\nrequire '\\\/wordpress\\\/wp-load.php';\\nrequire_once ABSPATH . 'wp-admin\\\/includes\\\/image.php';\\n\\ndelete_transient( '_wc_activation_redirect' );\\ndelete_transient( 'ddfw_activation_redirect_dd-woocommerce-product-view-ar' );\\n\\n$faces = [\\n\\t'admin@localhost.com'         => 'https:\\\/\\\/randomuser.me\\\/api\\\/portraits\\\/men\\\/52.jpg',\\n\\t'amara.okafor@example.com'    => 'https:\\\/\\\/randomuser.me\\\/api\\\/portraits\\\/women\\\/44.jpg',\\n\\t'liam.carter@example.com'     => 'https:\\\/\\\/randomuser.me\\\/api\\\/portraits\\\/men\\\/32.jpg',\\n\\t'sofia.romero@example.com'    => 'https:\\\/\\\/randomuser.me\\\/api\\\/portraits\\\/women\\\/65.jpg',\\n\\t'kenji.watanabe@example.com'  => 'https:\\\/\\\/randomuser.me\\\/api\\\/portraits\\\/men\\\/75.jpg',\\n\\t'priya.sharma@example.com'    => 'https:\\\/\\\/randomuser.me\\\/api\\\/portraits\\\/women\\\/90.jpg',\\n\\t'noah.mueller@example.com'    => 'https:\\\/\\\/randomuser.me\\\/api\\\/portraits\\\/men\\\/46.jpg',\\n\\t'chloe.dubois@example.com'    => 'https:\\\/\\\/randomuser.me\\\/api\\\/portraits\\\/women\\\/24.jpg',\\n];\\nwp_mkdir_p( WPMU_PLUGIN_DIR );\\nfile_put_contents(\\n\\tWPMU_PLUGIN_DIR . '\\\/demo-avatars.php',\\n\\t\\\"<?php\\\\n\\\/\\\/ Live Preview only: show a portrait for each demo person.\\\\nadd_filter( 'pre_get_avatar_data', function ( \\\\$args, \\\\$id ) {\\\\n\\\\t\\\\$faces = \\\" . var_export( $faces, true ) . \\\";\\\\n\\\\t\\\\$email = '';\\\\n\\\\tif ( is_numeric( \\\\$id ) ) { \\\\$u = get_userdata( (int) \\\\$id ); \\\\$email = \\\\$u ? \\\\$u->user_email : ''; }\\\\n\\\\telseif ( is_string( \\\\$id ) ) { \\\\$email = \\\\$id; }\\\\n\\\\telseif ( \\\\$id instanceof WP_User ) { \\\\$email = \\\\$id->user_email; }\\\\n\\\\telseif ( \\\\$id instanceof WP_Comment ) { \\\\$email = \\\\$id->comment_author_email; }\\\\n\\\\t\\\\$email = strtolower( \\\\$email );\\\\n\\\\tif ( isset( \\\\$faces[ \\\\$email ] ) ) { \\\\$args['url'] = \\\\$faces[ \\\\$email ]; \\\\$args['found_avatar'] = true; }\\\\n\\\\treturn \\\\$args;\\\\n}, 10, 2 );\\\\n\\\"\\n);\\n\\nupdate_option( 'blogname', 'Northloft Living' );\\nupdate_option( 'blogdescription', 'Modern furniture you can place in your room before you buy' );\\nupdate_option( 'woocommerce_currency', 'USD' );\\nupdate_option( 'woocommerce_store_address', '88 Mercer Street' );\\nupdate_option( 'woocommerce_store_city', 'New York' );\\nupdate_option( 'woocommerce_default_country', 'US:NY' );\\nupdate_option( 'woocommerce_store_postcode', '10012' );\\nwp_update_user( [ 'ID' => 1, 'display_name' => 'Daniel Reyes', 'first_name' => 'Daniel', 'last_name' => 'Reyes', 'user_email' => 'admin@localhost.com' ] );\\n\\n\\\/\\\/ Plugin configuration (free features only).\\nupdate_option( '_ddwcpvar_enabled', 'yes' );\\nupdate_option( '_ddwcpvar_3dview_enabled', 'yes' );\\nupdate_option( '_ddwcpvar_preload_enabled', 'yes' );\\nupdate_option( '_ddwcpvar_toggle_active_bg', '#1d1d1f' );\\nupdate_option( '_ddwcpvar_toggle_active_color', '#ffffff' );\\n\\nadd_filter( 'upload_mimes', function ( $m ) { $m['glb'] = 'model\\\/gltf-binary'; $m['usdz'] = 'model\\\/vnd.usdz+zip'; return $m; } );\\nfunction demo_attach_file( $name, $bytes, $mime, $title ) {\\n\\tif ( ! $bytes ) { return 0; }\\n\\t$up = wp_upload_bits( $name, null, $bytes );\\n\\tif ( ! empty( $up['error'] ) ) { return 0; }\\n\\treturn wp_insert_attachment( [ 'post_mime_type' => $mime, 'post_title' => $title, 'post_status' => 'inherit' ], $up['file'] );\\n}\\nfunction demo_fetch( $url ) {\\n\\t$r = wp_remote_get( $url, [ 'timeout' => 60 ] );\\n\\treturn ( ! is_wp_error( $r ) && 200 === wp_remote_retrieve_response_code( $r ) ) ? wp_remote_retrieve_body( $r ) : '';\\n}\\n\\n$img_dir    = WP_PLUGIN_DIR . '\\\/woocommerce\\\/assets\\\/images\\\/pattern-placeholders\\\/';\\n$sample_dir = WP_PLUGIN_DIR . '\\\/devdiggers-ar-for-woocommerce\\\/assets\\\/sample\\\/';\\n$khronos    = 'https:\\\/\\\/raw.githubusercontent.com\\\/KhronosGroup\\\/glTF-Sample-Assets\\\/main\\\/Models\\\/';\\n\\\/\\\/ Studio renders of each 3D model (made with model-viewer), so the product photo matches what shoppers spin and place.\\n$renders = [\\n\\t'render-lounge-chair.webp' => 'UklGRsoXAABXRUJQVlA4IL4XAAAwvACdASoIAggCPrVapk6nJbgso9NpQwAWiWdu+Dc7\\\/2K\\\/gTkabz141O+kSfsT0qIPXJe1JDT8X\\\/JdD\\\/2nqH5Pfemcn8N3u\\\/9b+xvvK\\\/KXsAeYn0uf1j0Ef0L\\\/det\\\/6TP+R6f\\\/VKeiB50vrN\\\/5L0wtP8m\\\/+M9z\\\/4V+z46LYFzBViXRn4q0N\\\/PxCAK4otjkRlsciMtjkRlsciMuLLNOxF+MiovxkVF+MiovxkVF+MiovxkVF+MiovxkVF+MiovxkVF+MiovxkVF+MiovxkVF+MiovxkVF+MiovxkVF+MgZG7Ai3jThkB0e2QpX8J7ipXRnE2\\\/n2CIj+jZDlF8BdEIuqIYQIvxkVF+Miovj8FAmpgjiXWRYypAcXOSgTDd8tiXADllZ4S5YVTTPWCw7HzIqL8ZFRfIhze6lC+UOH3LN7Aeer\\\/0XzaymhQpsFIEymMtlhRlsciMtjjn6E9dlkH15bpIPSdF3EIIZClHcVas5xK0YGwb9APD8ZFRfjIntGpD5lKpC1tqTc+03KMSLssitG4PGLEVvAfhqi0WJXdGQAb+yACk7Aw7BjSnARe4UiXED9zvQz1Mj7JlqSDiCfujqyH4ULtrwi89OSuQ2f3pmN+RlsciMtNU0I9UqB5CBB0muiWir7p7WSXa47yJKQ9fpRCenuwlveXI424oUZxuc9vXBWscsY390wtUyxbHIjLY5EZbDexXULfZWcPO9sLP9RI8SItDxnrVIo6svQGly\\\/\\\/BP0vetzbIvalkjkV5CBfqMIKd8aVF+MiotGOS757nskPqg1BSR+CAtTYxWdMNnaWpyY4t8SbVTVZCmajot6DT1M2wREZbG1PdKbu9jCHPY\\\/0VSHUEloPD5Ftrk0Lo3AWx2Lpu+1mfeR\\\/u5uVBLw0qFoQEcGYmGFDToM8Bbw8qdvCCjhHNJQBv7H\\\/jzCgWt+ZbPbDMYV9gd4mIGfUh+s0gqg24dDlskLYrqXLu0PvDYkaoiJJMDyxscnshojd7\\\/WAG\\\/sf9tMjb8DSgv0GY4E2toJFZDbV265P2QAves3vJmDGN9EyGc6Rh98Qk5Vg6wmQ8gfPn+S9KVINuInIpMoc4TGzrt3JSpexfvpnVvJJFSyaBr4JGaiaqsj4IjqvFsyTA4LOxXN3OTnuhmqMKf4CYvxlaLP0Ezuyp4Zt\\\/2MCogYeP9YeDJaaPy+7xD6VvA+JH7TpvmkJD2f7IAOAX7lekdKf+f6yyrLdBpJcLPbtP\\\/v63ul\\\/Dm30iG+oq9sT\\\/IZZRRJvi9YLt1u2P61GKTBP8ARikNo1OyMthemjvAEbokh83U72wjQiODUYMpZWgc2S3sxQRg6nKKZMT5EcaZeeYjFLzRMg+Qz4TjW66RxFnH68RGWxuAFXjI4ura5JxnzokJTKq\\\/GVw0u0cGyMLgaoycP0\\\/FJ5cqEPgkiSTXpnwaVB88QpTW+HYi\\\/GD0uL7kQ1SIJUbYUy2Kv0PN41BcOjYVCwTJhrO2iJkqxxVatF+\\\/FQEEeNzc2PWFVEnRj9ZfAAm1Rc0Z7+eDodrf2QAb+qeNZJjhWmGg7Xa\\\/bsWSWA72GDjFVSx6kMYtkg4\\\/YFaWmIvVtVZ7b3y481ZHxnvFJVTlabwLRD7cloZnDFlTsjLTh8wQ5f2D4Iu6b6yiLlmtO6S4Xc2lvy4OqfNH+ebQCTVJ3XCpXfLXB5HHt0khmH7X9yE8r7caQo+r0E8kkJwOmoELUb9\\\/OyaLMteK7GFP2yz+I9sbDz0Ar06YRrfjIqEjYBhyQeF\\\/LDLtQkuSMpH2pY6Q4VGDxQr1hTekkioTwrmwJimp4sRheZ+lb3dhRSzPO+A5lwH2ORGWxFYz15sITnFIxUQNp\\\/fd8yC6SsxlItyC5Kn4yKi\\\/GH2gPSqw21zk5hI23ma4SVO1QDf2QAb+yAuwSuRkO9ToJi16f67cMCAwvxYi\\\/GRUX4yKjB5i\\\/7BnVb+48j524kQnnEwjFDmbqqHYi\\\/GRUX4yKi\\\/GVhjC6dWV+QJ9TGbvh2IvxkVF+Miov0+yADy8RGWwoAAD+\\\/sol3HmLOcs+nOACSYigAABsplgACrSAAAAAAASO8Eo5VElJ9TvD+Bb8qRqcBWdcMnsctSZ7bb59clc69S0WfzZy6Q2TQVWGbO1rEr+vTAhZKiRRLaWuP8+Vhs\\\/5A1uxVjDuiaxeYhQVKAlteAMS39ERunQZo+DOiXMfHBZuwKMP4Sq1Pk\\\/9SyzcNpNqTfZ2RcNNuazaGJNNBuLtAQRnVpoORBm+lgg+TccWHiJUG+eRECchz5Wo5Tl4b1cfMS1UQPDgsvYnx0DLdQCG51HYA\\\/Tzm3lH\\\/demdCs4la5yEXoN+xDRgOe5yxfn4N6WcpoALikwZgXVnZJw7cBLV\\\/Ng08Wo3BUpBNYOumzG6bVx68ft1Q3OnT7KSoKWTBOO3vbI\\\/4TGsqCat0kHWbTylhjqAMMQurv6Lbw2B67Vq0kxfjGsuXI\\\/js\\\/ZOiwhlQg+ubQkMBTPd0+Y5A1yrfei8jp1tlB2uOaHhO4s1TfPtNmyYxX8X+pOtIe5AgTqX9tdl3LtFkI20Y72QdN\\\/ICufdBvsauM5EPugECNUgw210xqGGmCL2IRAopjSe\\\/1edKiEbaU38mMwG\\\/XH0QFGVTDJEE4GZNkokAGZ4WrQsCN5iUs+sAFKqERBOftJyrp0Cr2a4rvUWKcW1sfUcAAA4Bc+Qv6kQQ6ATE8L8WjWZUviMww0s\\\/oM\\\/yG4hivRpIQk\\\/Avp8Ek5YkTaPR4U+AvQY+cqJfyrqFEMLPgB+95xKY0Xd3mkEoIr1qetQ0N50elQqdIPlQ3UNBb3k22zZ91PxvQiA7EOJkNohbm30\\\/Z8ANWyEK+IZiHHURumZp\\\/mgXUNoJ0gYn83HVfZ19fR4mkZrDNybnZcQ38PyV3uERkdx\\\/E\\\/GzWIC6DS0T4qVdPpyMeimz2d1\\\/mwlMwaVPdXPYWR76XieNbHdxIB+yh9D+Xk\\\/e9HWq4\\\/UFx1Sgh7ZiEFIm00Z\\\/6tW4VduBi05\\\/jn4\\\/cqmYF\\\/+izWkS4ow\\\/5Znlj3kIwbBlS0BVKpP8VuTEbAoxHhPcMvbG+uiwfo0Q7SrvOL\\\/QV\\\/393W77gnTYMhK8TtKfgWi293W\\\/bu7aU16iCObfEGIuZhhJvyk7qCnZWvhHqoVs0fLd3XD+N3gdAAV7QMcuFwGka366ubGZxZN\\\/JcC9p3PM4cA\\\/BTdDF2JUCvp9Cz9b1sqSfZp3OeKNyTy2Ajog7QluN+S4\\\/YiaqB2NjMWHLdQb90d+N1SF1mJkJdXVY9wz32PfAB0eCTJKfL87+1ViyNPYbk231OruuCzrz0IGCixMpEKqHL1Ja9QpyckkwtddhdzstJzvA36aJlXll3i2V0Ibpfgf4lCOpxIsqmeZHKG8ZqtyYQhCnqQ45VUOVfTVUeizrNgGAtzjG+Y\\\/lizg1TT4A0PCwzGdDDZl8A2UEokRB9pEgTFcncFhiDVtR0cT7ODERvEGQHpqHkzl8B2x1ACzptCyrhux801CzAYEvW66ueAu+IepELA6d3Zab6rv8ZXYP8KPKUoy2uz49e+klrIernraoobwpTMSfRBGIz1K4rLXaA34n4OGCmUeikVW7oqcv7w1\\\/eY04\\\/wnBb6A57N3g5PJwzt+l1uOZzwAjroYXQnW8WuoV5hEVdqjI+jWRETD92vx41jmzx8jsNfGeGRfgicyGo7avpVLaY5yqAorCIRLj+ClgVSelj58jsCmrYtBfwqOQGNTibXDaEIEN57kFXNv9AkEor8oUrvYBkqk5fM5tHi2BKPzdM0kmwLo0gFztBOPPhfOTAG+DFNk49w57GsWzze0YjEUnsolT1cEi5v1iQoJc97XULMNMUk3vQLW0KfuAbwwDwKszeUeRoIERSV\\\/Ogw0+PABlGIMRil\\\/3rXfXvByTmt49jTrAVzeDzNx32fMPQPKT\\\/sLCeqyy7ukikU8QDD+Iyl\\\/Moba5dfvrIIP16V7MsosceaCKVVSeIXXGoFo1CZKVA1pmwFa\\\/N0obJ3x4H0AT9MaqgPOSDSklveemwtqMJYCF7Iz2OF28xoMcx9nX37\\\/WFNAEeScM9SZ9rqCdGZQa+Ptqw7leShVeXDHiMyAidKExKHIIf7P\\\/rreUq5sNYjW+fbmBlATsHVklR0ff\\\/fIgVaFqL8s31RMgxjUOh3oiAFnYQHnF9el\\\/L8ei3xKhkLLZBAI3zpkjvhJEQcBE2l5rR3NtKEGihUUKwtxz+MbrRt0mPkDxSRM6PDU3KeibKCdFOTBCkVhwbxsNEXfcMADXhgoiD02Tt4dz9yXkLKHi\\\/r7FfEjjiQnLyR3QhJzIiJZ01BH9qcQ6xPCdbIjmh+\\\/lHu8qza2jiSW+hDp7uCL0HtBo\\\/HroTKJolvgTkDZ2nSSDKQaf9mQOHvtT+oVTEp2dW6CWmD45CABCf6K3iN8OnYPHGJiisEepkXr31quefWatvak+mp455JTa5tHhuSh7bMtUT8oCku3ZNDomhiM91i0IBD3EC0Rqzf7ETvIHUSBzUo6bZeZ9wRczq+Xwk\\\/M2RWiCggazIamBFvVABIe4wgBriNY6\\\/wUSrqxVpSp5BJAJoBENDa+odXRCpP7OXoNXp9uR3WeAW\\\/jAw6mzuMDYA95tvWO1gx+pMl+MmMp8Fe5N0yeX12dLm9nuB7cACRzEkcgMWMTIifAIwV7vqDYhoFP2AajAUA7ORf0pBEcQteS5\\\/B5IqQnYx1RWo1ONgXmrS1DNmGNjAmSON9HE5z1oF2af+i79EJls0fOK6WyON\\\/5kYF3N2KRHyl0UAQy9Vh53bHu6o2fxCT8kyjGjEeIc3FXGXXPaW\\\/5awMuFEhGKeGZ08B8oCYSEugE8glUzTpmCXIATT0DCYipC4NithBaUcjdYwA2bBau\\\/YHRTHkT82GT69J19m\\\/g+EXVWtYBy9ZqeSr2RvBSJ6VzFF6S7vH5d4\\\/Sn33rXYAnj\\\/y01lFiLwiMOVhMRnDXzo7wKwU8m0YRY1fyJUw8undhje6f5F4wlre\\\/laNmjZZ7krGIh6HbES4Z8rwdeWNf3peAmeE5\\\/Fa5tPsY744uuAZO+Nbik13aWp6jiuv2a4d5N2i70qDGBH4L3QQ7kUk484R6CZeyv8DSZzVKCOTKIC4DBBOPGm7LzDokNLYqiStaV8bEjftxmOFe9GSUhiZGcr5xLekiEPb+pn3aHVHLPa2Dmme8fnGcPgrNwrgmlw64Cm4adDCJurqWrhYYtUqNlOaVw7LplhrNfM+4dkZgv+r9YwK6N2vKmuFNegXOnfNIGoAch+ccX1f3qNsIasDfk0LQQHenbQdOmItZc50wy5OQzZ8Q+5N6VNTpxZBLJCn2FFp5BapckAQDjb6pYU2oxtA6pAMSnRcQXRnNPhUJBszHYf3D3PSGotngfnCgg8oBiF+hSbu+5vAcoS1w9jG9UapkN2aIhknGw17Tmkj4CQPFAANjg3avl\\\/6koqw60F0sad9F2Tepm7bMvSIHBzf9Lbeg9\\\/rX0PrgbOLdJVY0q4HbjlCojnujeFQllB8Aq3uHGdCkxFMqYmDy3Bc0OZ0Dm9zU9PhviHpnyRlbwGwYiqJ5Kg1I64KxBVAZyqTTvoNTUr5YRZFnzZ8f171oZqtd5iM00JQR+WWwwOlEYLjTBu8imHtCfLwCtlLFBmYpP\\\/cLhZ0rI49cqNUMmBIfvVAyEcoXhAu7rOd810k+0221roURtS6Jx3U+s6G3JiPwC+TWywjxli8trXSPhmISOepKgnCbD1t1vosbTtVFI2wtvY8iZajDOHlNx4hG\\\/tUwhNwyXMb82IZj2RK9GFaa1jW38Y1V8Ion9G5V5zDS2lX4d7+ZYkbXI3094bmzguCI7+jtvIPg6PlPTiOM2zEGkvBWGZAvr\\\/kOiMJW+umQuMxPlR3Tqyh+WNQdWN1MS4ZrbFAD6AowRqdVf7cWR0AYslqibodVA7QecN2SMr9sQCT2RJQ9rSN+XBAR\\\/GpC0WtXEqqDkXejEtvpTgAnlIQfSw1DtwcUCaa\\\/96ntdgX8Iy3bVX6d79maijGgJjpUeky15M\\\/2Km3ACwCehn\\\/Z82zhXMD8xxjqEXY0p7KpNc7UvIorMyRaJUA1nnDclxhLsR63QECTgt1ymEpl5oLfvy1i+ZWBxLDntucIH3UAobwmKM5iLo481Uj0+8bStuy7Fw1vkyKY6Bkm0j8pOam\\\/biH+L+1ChN0QFiuVhqWfXG7wPgQdSwMZwMwDkvLR7dCrlZZkQ2EvsFvtxtLV3n8l0yWHVTp3CPMfVXZfKIPMo5Tz1pTCh8\\\/Zoz9luz14pF\\\/pn9QDueQiVhtRsEbJTKx5S8rFFZO1oGN48lvFSkGEi5IpSppvq3Zku4NyRSYbEUXpJ7lZzNcdFM19bfvoR+w6IkQ5CY+mKHd5qPGlecvO4Q3vajNE41GisHSdIgvW4EjlNZr3czqF5ljVm9eqlL93F9FN+QgDopSKpt6yohfgvF86LdpSG52pvIZRTFemwNn+EX0MSTHJXXnv4hqrve\\\/vxcJ+v3viIx2ofqvFPpu8ncMilSkB7Xu5Ap+5YRWDVhAEKazj9sLV7se0wMQ1XqchgAfdY4l60hYuIY1t9y3kUrZkd\\\/ihy8Bn4gko3VLEIFdVlQ60JkhuWtMA0859hSx2QA9o5waY\\\/8Zc5PQfgqM52CpolCDjb42E+ac6dU5vYpYMlriDVNuYZ6U5pLsKLjvxm\\\/tHupwxawoTefOvpZmzuE3Arc5uYqkt0yaWAGWAoA9iXNYl5ZTeTGudJ6\\\/l0qRgrWH6pEWiCy\\\/azefXPRi0dQ+uK\\\/NGcIQrqoHWwcHlQVe0YFOIgpN10Te92OFZ+1lkhQM+MCg\\\/nZhlbtMAWfld9sEXTw2Cko+8tJMjikhE1OxP73K\\\/3qg9fuUGrXKBRq5Y9sVi14yRUwMZpeOLJTyaR1RcccHSaLMEiFLT\\\/Pr6ArvTVt\\\/sM7E\\\/crdmPZK6OyfM+O41lZuJCUsdrHjx\\\/OsnkedpBSvp+qBE4CccSW+4Pzr7p1v10vY5u2E8KMzCr+lJjxOAf\\\/9XSXiyVKNhtXnehsCyJABkrIKCb4Mc0t4UCLwJppHIArPz01tNKgO8X5PLqXqYTjDl8Km0LTPeSZOSd4M82f8YHa52mdxK34nTea0fo0FqmEttJNfvdgAKQ4cHdZq4om1mOT8g0EpfqiIsMV0+WbBGmzsHQlAGfzfLafyibMBluaRyZWm7BL54+twxCrhPxnVsQ9s4LhlI1aLy1DYQ42gA9KvjKCUV4ocSDCSypKAJr6vieHyEINEPvryaoLzc80OAWsBJgkOupa9cq0l4x\\\/0mLJX07APWExxcBx68WkRR0lfzEx\\\/6RWTPerwFyK6m3RmvqBG+4KqqJCdX6LB061DeABJhoDTdFi8BlwRVR3XCf1sBElPOjweU+m1cXPXt27TTcBgCAVRshNTz5SfaDZN9fJF6RAqdIPDRGYyMf\\\/h9hAiXJncvdMAyyG+JVCCy84tf7MVJo5r+ylQooXFKCrxlFhkUAcrKXXlphz0YNQTd1dsy1M9Z6KcM0HEPXkslwj0OB1b7rMmIbpICi5ALIw7sfuPw8cqxnHlIwFc5UBevgEMOf375ZJWpBDVb\\\/O6KAr5DsMgbFdV8+G4QA1pkJEJvyxTMiaCJ65bpAIAkOGBXxrRVRO7OtfHmL2povBKQFtFd3bkK7Lw352yug1attNSROUFcn1xKGrQACoGznOjmmlMB7rO3GENVFl6dMk7zRLvjGwRtYYwYfKDBxYTw0Hv0jj30gfJPN2PPKrQD+Nxb91hlepmmgAgPfmF1PIzFwAX0t2AQvRJUnGxVWXb\\\/VwtnWdBtspc3KXzfFF6AhOrvH9ejVBuZsi9CgDkEWZAESK0PbNI0FogGyz4cUA9xX4lpSx0czYZS8iiYWh\\\/ZDRrPY9hSpzNRLQJAxwAeCHxkpMNSe+RjAWMTtWwqB0DYW5eK7N\\\/eDaW8d13qA4uI\\\/xlzkMjm3zHH1pFVIMpzQABmgxHaiyU8ZGDealr9\\\/NNxSOjqm8Oprkg0Z3Zaggg84VDpPghK7\\\/xf4PKuTuxyqEG45ewyfHxV70jnVmMAAHIB4cOax9b0xCC+fiY0Pg0hxxOxUMVQovA7YULk4zYYOpypfhV9yWwIAAC3MNaUhO6N4gGqhuguAAAAAAAAA=',\\n\\t'render-velvet-sofa.webp' => 'UklGRlYUAABXRUJQVlA4IEoUAABwqgCdASoIAggCPrVapk6nJb+spNUpC\\\/AWiWlu4XXuOc3e393F2j1MMyDzXck55xyuqKapfoseNOz+jv7z+jwz\\\/OQB7SIJ2WVUsopAb+yADf2QAb+y0CQpAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+yADf2QAb+x9QcAKpO9IiJoocos31O7yw1quMaq\\\/EnRvCHRcv2SzL7Mrr7YIRXI9oAeeF0\\\/ffrrZwhqU3Xxck\\\/WCkBv7H\\\/jAp\\\/x\\\/+VUmxSWRUmMclq2yIRJGbnknyi16G6RMBFzDZZgEL7cZPAARqaWi\\\/60Z7njGjJxcqzUXInrf2LoNZffDHyS4WC6a6nkRwr1OPg2RVucnyftNyJai5qa4VS4Y+XnlLs60H2TQ2\\\/qy4MfVfUIj4P7YN8MY\\\/XLIjhUUoV7I1fA3+NlsGtC40XjtUSAQxr7aQjbHfafNe1B0xaMfl6t85Y4e0vldHjy3ieizEJuMv5wN4zqF5f8u+DKRVAzhtII7HoESISAjtReW\\\/GXV\\\/fbPe\\\/BGQ2jvmCjrWHlnejTodU1vmtoMZyXcn5XCOIIs+sw2sxPFg+502JZyE81kJvYzXnUfs9YCUJS5gFPrZfyozE5iC\\\/VOTnKN4v8mky2+vB59VAyabCnUDyY0nv+zYNM+4csP8Bl\\\/LMaGZVcVn8bZyeWDYIbWX2h0B7SouKcSyM0DWS04yohjcwJhojnxORGw\\\/AgFPceEAY0LZJoppNaV+FWMXIMDbYOJXEmN\\\/JDsBBxVENdaEGeNv1IoTFgE9ZT5tBrtkSQ1Me7Hu1r9klvBwWdEJ0VmmQebIbVkOh8Ipe8PUuOon2tWwOoppi28DedlaOBtl2g21PTRloMBvARZHidcXa6BtC4lZSwFGYaStFfpqmbQemE56L1cH99aNe83xoJ3PExGeM4LOh++hgQulseDXyYvqV3BMqzxoYSKg+b7ptUqKzIm7VnubsDrAsxcO6kf+IHaUXRhsKX4W\\\/AkqIfx\\\/plnigj4b3UnMDJ0qfckuxXElREF55ZuxkMIF\\\/Lz4wwJ3PqgEo2EWX8GPjwH9siPoRgEIsMAwl4OmmqFSB+t0JyrUCsvTxIP2seBQnnVFuPXaMbileJzFAmnJTyBeG5\\\/U4f8LQ\\\/pPg7d0dvG81atmKr\\\/689Q2\\\/q631WPkR+solYR+twc6rhs54mjh3XTddho1S1ZWfdBKcqu1rUz6AVhpqR6AZFFmdPtc+2TozA5NRCkOIKoTI9dv\\\/k1j8gdh3LRbNgO\\\/qaHKhylZNHEZxtzMSmUyaZ3dP4XK+4ceegHVlohidAs8udbWcYlMqyuhatOy0OpHn2cY+SiE6u4gJQMup7cRhY6Kxh8vN76LpSm5Mo1PkfCcGu4efFSG2HweO0MhSA39kAG\\\/sgLQYLmhoSDzJpdduiDOZaqUjqmn66xuUB61R37OPYyADf2QAb+x\\\/61l\\\/1BAC+GLg3ijYOcCbVSgjEQpAb+yADf2QAy2AHqVOaqIMQdb8x88VFIDf2QAb+yADf2RPj328JaYIp93j5Q8OGZqXfDssqpZRSA39kAHBr6apZRSA39kAG\\\/sgA39kAG\\\/sgA39kAG\\\/sgA39kAG\\\/sgA39kAG\\\/sgA39kAG\\\/sgA39kAG\\\/sgA39kAG\\\/sgA39kAG\\\/sgA39kAG\\\/sgA39kAG\\\/sgA39kAFIAAP75GVBNMTv5n3YgBkAqcAA14IQALcIAAAAAAAAAAAAAAAAAAAAAAAAHywTUbOi5hIOAdwXsjR8ayRjcqRSrW0boQudbjww0WQLt6TjSurylAWpzGbtwgoNaAay9wbUoSlMBe03YAa9oLxsd12tnwasdHOMqfesEi9OoAXGGMwOgyigJy9NkC9pElJh6V5pK5cQNTN9tG6hYGgRbQ5K69ulAYESwqeS5bwdJLcC9pwCAyWmVyxZqVupc64CpQxYqaccGNfx4C7prM4PIPwpO6maThvriQFfH3XLwn4FjRJtfFxW7184QwQzcHQujM3Cfvn4Tpxoa+vOu4eTCvGY6ESl7\\\/ySLnzgiXHN\\\/MVYpZwlCuTlw0IPs\\\/y2EEqWVvCQ+OdDMIO++cNiJz6Y6CeWbSgLC1Ta3SNB+Q3LIeOOkKFcEW+sg3v3LAwzKcY6e\\\/SPwuYUg73YUVnrMeA1aitYdZoLtl2HbapcwkOSQmeAAZKgMBqWI5t4zG2rtrSDjPLV9jojt17hn7dHfsyG13zDTm2cF2LLSkqG8+q+nakBD4yZn9Jun7Sqb8nPkWjFjNySMykKJ\\\/s5s0oedeueKhUM64dHcqE9+o9LrB8Eac\\\/uUqQwKOxlzeFI5CmwqdQWGaA0ZcSopWATZ1oeB0JEmHsMjZ\\\/7WbfagTjV9yrFVuOT7GUAsAJoSo+T2YUEsjWod9fdpyQE58S7gc1pxeA3xzV\\\/L1pEWEJotkJp1FHCg5OI3P0tNTbQicMz1oVvFIrZtFEgbouZb6\\\/2iirOTcYc\\\/Q6dH8xO8Q5VUQSAO6EMAVvxHKKFRqujIk5kSbmw1h\\\/vNoSQpZaSp8LRj9Q7z4QLZ4x8Lva5LpJFgFwYHpBZcpIHxtWzQo3dM4mBdjojuP1bmAmNVFZekZ4+1b0l3sqdNFe+s+ex9lplFdVh3To4wbUtialtrX0MRtKCch1Ezk2CfcT7tcgbZFLvuQfYhbXIyuaBsH3WdnIk4egIsJw2AsNmNPQwhdPiF8UDjnXpDOrRAby0pH8vCwke4IMRQ\\\/mdsA2g1AMTj0o+T\\\/UV0mHiCDNDgyXDA5fIg6g5xsZ0AQyBwqMwLA4hdlJnj3VxvsReBy4dJZq6R7zgmOKr1RN8KDdbNiihjg+s\\\/vdMB55+6pptfTUQFZF1MZ8TFgXd3lQMEgnzyWb9nm25a310uZf381KpkyT0qW1LYXCOljDREJa\\\/Om8jXW8wZyPF\\\/ePUvRALwPmo3Z12iHSkz2m1NAh827S8CUG1ieH6A4vLhssg0Mzb4MaGNxvE3i4oiIklKVdAR0dIOBXopkN32bfODvvIIl7WAX9R9FDri\\\/ay3GLASIna40u43D+OCgRQRP\\\/ghLlmKzwk0\\\/mgNSZxbTpiIh2HEH0aaYTBrWe4or\\\/es2BqD5Wn2H3NuFomEAQXLrVn3ysdj7gT26vDIL8MbCsV0SDjDo732zSChd6z4aDJZ\\\/wyhDmwRLPh45wU2CPIxIy4VLsLY7OKcoA3YqmHU+er2t+uVFkpOfqBwwh6lpXg5rF9+C9D0M6CwazsVtIDiC+mtHUvzRgNuuPmIL\\\/uKeG9nhU1OzbDyJdwxiHq7dJ\\\/ihHRcOM8a7cdml8CGbZMjXtFdVu7S1rCf9N1Dasjs7q5mRchDRmKgwDnLdgGrBNlatIIwZihzbfwH5fYOF8Qc5m6\\\/lMlqmrZaCNgIGfFTeEj8D8YMnXhIcoFBFZuoNzWiJYr7rY4IxpijIU6+VcDpb0uzsjDgcYXOLzshO3c6V2lnPXY4EKpNoWl5uI4iF+82IKsOIesfJOFR01zl19vL+2sRHbNjQiZ\\\/MAQodm2\\\/VBvsc9n2jkVk7tUb\\\/GVTdB6TZHUjF5FAh8ZV6O2XkhbBkgQIe01ojYvKk2pBcvVmtCiGAIb6i\\\/z0daqrJSUrfNm+ZSMf0Q3dUecEuVHD2EwqQyJOIZ\\\/JwepRLtaLOB+mcEq+e2Trsk+LYgBARKizn2ihYb9Jqif9ilB8AMjFcbN+k3SXbvg9dISUVFUseeUO+SRkQ77\\\/7i4M+d2fREiPf6N8aynrEJO3jJnLBbULmoHCBT7k74PqIDBAFWvGh4IjLujqip5TbAI4H9oEWXWVCt4YukxFKzyLPUDZOTXeLcUXjZC7bOy1Ic87Ngjhdyo35hHMZ3z3nbmZc+t0QZK03UVDolpW0Uh3Hd6yv6vMD5m7KQZ4r3P7ci+SlGi1TzMFstjHdxRM8nNCgUDYW8JeUE8QVhzEqQ2r4j0zRJnuepB+ifAEU5FAVr6fkMCO1d+B96Unc1jFxz+NfVDv033sNH7E1bkX2dM1awV9q\\\/nXQJLHjxyugblS0ILXPc1bLHCad47ZzcYEPE7ECqGkXEK7Gn40ReDMqlLdupnP4V9DFDbTacrm48zbNUwWBMUvjGNkXoddjdiV5gmyOSjMWBzKThdm6Bl4FERQYvpQjcO0SnLbB6rxf\\\/PGaiMKVG+\\\/UQ6\\\/oftTgpce3o7D5Xl7KkbrU\\\/Ia8hikUPH+gS34QWbr9tXLLcnjPPvhzaHyA4HL+CMHFD466yfmkfY+FdikpJ532\\\/9+tmvwuM+BaZCqZgIeAjPe6JNdUiTSrbMkbtSAB3MUbz0YdrBX6jDc\\\/b6DbS0K3tfthltXCOH50mmzCj4zz6tZEgJeJBwPo7rRhBau7xZBXCqGdFBSwGoj77fujhGVvcMayjdzL4W4GtzWXKad7vaObSYKGNTKtAP8feGP\\\/XLadS0xqcUwctntvlhI7ZnWbBRY0sGB5QTg6nHPQCXnEARVaDwU6KeaifyfHYCLYX0z8EpO9GRMssOO11llgwMcN+VuLEzYEY4tNZpJA8lAIkFgOehv31bVBAX\\\/sCFtPfpFiSpzbM4T7zTzX5TjRDkKBUyilXIM6gJiAkhMbl+9YNKno5+xX7nsnGMylBbHRRkwwCmGVrOkwwHxzytWSonfwNHWFcArv9ydqnjmQeZxqxCWt3kStykmHhfdvIX9va9odp87FzB0Y8cp2xMPvtVmBYtkElqaoLEWp7UpKVPq+mHu7ZL7N6EcrxiiWCUxS0fKzCIKDnKcgxf8R4yLJOLR7xIlk4Vo4rR+nsCnh88zkoFU2YKtgD3A\\\/UmV7lW951eqT28dUSXyx3YeHbUluo0gGtBl+nKT+wIkWVNML94mBz\\\/\\\/2fkNdKc9CSB94ez66XFpsYvo3Z5ci\\\/w6Q3th0PeUkvmE0iKvP7zvxD3VS6NsKI8mpaxqiuQwCkD\\\/L1WFYUTM737lGGBT1F15Yrtq4Ul0VlwNZRMmW8MTxtVXY81EO632D3PiBv\\\/PkswD7F2\\\/\\\/Oj4DQ2ENUvFdSiTsSLysFw6M6VSrsgwZ37SzCQdXb140MU4Q2vBXnot1fvwyzvDkX6nwQ8S+DLKOsTslgk7SFSkuL3vErBrBn2EWgul7FEyi0cDGak+pVGGPXVx7MpZD27\\\/fJUK\\\/LvNi0ozhUPkm9s4goPHoPDr7h72dz9Wz1pJ5nC38wKEhz0KiLhiG3qQkWCwrKbCuSuSJhZMfbs95cTgOCGoUKdBmFeXaEFcr\\\/UNP3LHF2LvuLTb6mf9qlY2t50eMrIvppSZi+V2FUM2BUznOM78i\\\/gdapdP64tKc+z9qS0F2pyhZrO9WlwVnfcS+xssb\\\/BBvirRvOUP8qkOxA32s3hkqNbvNlUCBqUPiJlF+sHuQtsUvhSOhKB+rroy0bvHSAix2QiGyBHojrzD+0qayYD8weDdbjLfq6iEb+uoh7HgZoC\\\/j6Iif0Kh9LbfNhh4YAFykYE0vkIr+0E03YM0dlZ6II58IlhSdPJVeTNRhif3GMSOnz5TxwrKldh0fj4yYs7oJ1DVxx5lvlAVUmEs758kTsYyeLCVpcTob9l+8X1kxPmXP980hf3fmWqey\\\/LkpI4URYSVH5JS2hZZSqVoDyWZjLnXq1lJePHSsh5VfQiRj0AXYeHpndCUMq8+O8nruRWRaJEAnlzeUBE+NxjGzLvKDh6nvrlEHTYXqISzRL5Esepntz0XlPGjZEXfdy5H46Gn8vQYhPuBG2xIlG1Ap29ZHIJFng8jvf+E\\\/7eDihfQjucTH3y5kNxK6c6KuPvdt9nBiHuYwsNJC9e8vDRDe6uCl1ddOgWGaw\\\/Fn3CR4osJlZmOmj9mUbIk71dnYDpfEAAHSn4qvguNY4Wt5eWbxkuEuJ132B7339lauLBdcnppA3hQlxxj211yFoVzSRMdwMHaWKxolUwQVhOemp0T0lSJY8cFFxXIqtm9A6Pi+OcVfKH5GJCtwnVFaztt17LX0O\\\/pfPNmBE6Hughx0Kb7DXqO6uWOKc0XzbnEvk+pcQ0Y3AQ8FRaOCB2iPcahdsPmnCwqmMRVxEmrZb3lMGe0+7YtUv14F49rKwbzTNRfFD010c6gk80bjLhumT\\\/VTLHl4+8PtB\\\/HstI7a497cXaYVxXwGNcjwf5XIgi9DVAHRgedy3G\\\/Xlm8Y9TCqG2AnF\\\/H8T5NUnYyDRJgXGQeU6d9BZA3QDQjrAX4nuddZf0I1pUVxicJtsF+hQTTZd3oFmhzzYzUi7CBzo3KTUVAflkfp4d10bOEkZ3aHzAhqxURMBqQmlj6yvf98VaAHVf8VnPfYIwNH0nsZekq6vpqApa0uVtLLPa2YGHHY3DQ5cKWl8cS5yX9DeAESaHdk0pxVSfnhiOWjKwgKm5zlP+3zJdmJPc39kVJej0Z3NSJ18LdDvyfChSR9lwtd6epq+9FSAKpHCIBbk0h812mkr+qgcIpq7kdzUAY0k8YHJNukN1CTzj2AvMu0ZWmQ5U10dngKDyssWc2P9Ow54PoXY9wPe3vf9a8P\\\/bARv0l\\\/wfFRmnKXA61cNcyGn0EgAAA1dFj8NV2djAAAE7BLl7cyB4S\\\/8ClIE61k6G5v7p6MB4ijQ65nE0zHMicnG0sShqmoAliFX089W4B19X60CYXy9RsAAGbwU8eTTqczIxMn6QG83ETGAjli0NNNzd9mAv\\\/Mb2oe98IqKcGj+d9dEHp4RfWNs0dEaPb4AAMHuf2aU56ZwxNuUYGsd1L4qlq82O8RSWIyr7JhFhzSvODoaoP76av4qOpOCHmgQwuBfo2AAHngqBgRkDFzXT50zAoAAAAAAAAAAAAAAAAAAAAAAAA',\\n];\\n\\\/\\\/ name, price, photo, description, glb source (local: or url), usdz (bundled sample only).\\n$catalog = [\\n\\t'armchair' => [ 'Mango Velvet Lounge Chair', 549, 'render-lounge-chair.webp', 'Deep-seated lounge chair in sheen velvet on a walnut frame. Tap \\\"View in your space\\\" to place it in your room.', 'local:sample.glb', 'sample.usdz' ],\\n\\t'sofa'     => [ 'Glam Velvet Sofa', 1890, 'render-velvet-sofa.webp', 'Curved sofa in plush midnight velvet on slim black and brass legs.', $khronos . 'GlamVelvetSofa\\\/glTF-Binary\\\/GlamVelvetSofa.glb', '' ],\\n\\t'lamp'     => [ 'Ivory Pattern Table Lamp', 129, 'white-vase-decoration-pattern-ceramic-lamp.jpg', 'Hand-carved ceramic base with a linen shade.', '', '' ],\\n\\t'vase'     => [ 'Sage Ceramic Vase', 48, 'sun-glass-vase-green-ceramic-shelf.jpg', 'Wheel-thrown stoneware vase in a soft sage glaze.', '', '' ],\\n\\t'budvase'  => [ 'Eucalyptus Bud Vase', 36, 'plant-white-leaf-flower-vase-green.jpg', 'Matte white porcelain bud vase.', '', '' ],\\n\\t'carafe'   => [ 'Blown Glass Carafe Set', 64, 'drinkware-liquid-tableware-dishware-bottle-fluid.jpg', 'A one litre carafe with two matching tumblers.', '', '' ],\\n\\t'player'   => [ 'Walnut Record Player', 349, 'music-needle-turntable-black-and-white-white-photography.jpg', 'Belt drive turntable in a walnut plinth.', '', '' ],\\n];\\n$cats = [];\\nforeach ( [ 'Seating', 'Lighting', 'Decor', 'Audio' ] as $c ) { $t = wp_insert_term( $c, 'product_cat' ); $cats[ $c ] = $t['term_id']; }\\n$cat_of = [ 'armchair' => 'Seating', 'sofa' => 'Seating', 'lamp' => 'Lighting', 'vase' => 'Decor', 'budvase' => 'Decor', 'carafe' => 'Decor', 'player' => 'Audio' ];\\n$photos   = [];\\n$products = [];\\nforeach ( $catalog as $key => $p ) {\\n\\t$up     = wp_upload_bits( $p[2], null, isset( $renders[ $p[2] ] ) ? base64_decode( $renders[ $p[2] ] ) : file_get_contents( $img_dir . $p[2] ) );\\n\\t$att_id = wp_insert_attachment( [ 'post_mime_type' => isset( $renders[ $p[2] ] ) ? 'image\\\/webp' : 'image\\\/jpeg', 'post_title' => $p[0], 'post_status' => 'inherit' ], $up['file'] );\\n\\twp_update_attachment_metadata( $att_id, wp_generate_attachment_metadata( $att_id, $up['file'] ) );\\n\\t$prod = new WC_Product_Simple();\\n\\t$prod->set_name( $p[0] );\\n\\t$prod->set_regular_price( $p[1] );\\n\\t$prod->set_short_description( $p[3] );\\n\\t$prod->set_description( $p[3] );\\n\\t$prod->set_image_id( $att_id );\\n\\t$prod->set_category_ids( [ $cats[ $cat_of[ $key ] ] ] );\\n\\t$prod->set_featured( isset( $p[4][0] ) );\\n\\t$prod->set_status( 'publish' );\\n\\t$id = $prod->save();\\n\\t$products[ $key ] = $id;\\n\\t$photos[ $key ]   = wp_get_attachment_url( $att_id );\\n\\tif ( $p[4] ) {\\n\\t\\t$bytes = 0 === strpos( $p[4], 'local:' ) ? file_get_contents( $sample_dir . substr( $p[4], 6 ) ) : demo_fetch( $p[4] );\\n\\t\\t$glb   = demo_attach_file( $key . '.glb', $bytes, 'model\\\/gltf-binary', $p[0] . ' 3D model' );\\n\\t\\tif ( $glb ) { update_post_meta( $id, '_ddwcpvar_android_file', $glb ); }\\n\\t}\\n\\tif ( $p[5] ) {\\n\\t\\t$usdz = demo_attach_file( $key . '.usdz', file_get_contents( $sample_dir . $p[5] ), 'model\\\/vnd.usdz+zip', $p[0] . ' iOS model' );\\n\\t\\tif ( $usdz ) { update_post_meta( $id, '_ddwcpvar_ios_file', $usdz ); }\\n\\t}\\n}\\n\\n$people = [\\n\\t'amara' => [ 'Amara', 'Okafor', 'amara.okafor@example.com', 'Seattle', 'WA', '98101' ],\\n\\t'liam'  => [ 'Liam', 'Carter', 'liam.carter@example.com', 'Denver', 'CO', '80203' ],\\n\\t'sofia' => [ 'Sofia', 'Romero', 'sofia.romero@example.com', 'San Diego', 'CA', '92101' ],\\n\\t'kenji' => [ 'Kenji', 'Watanabe', 'kenji.watanabe@example.com', 'San Francisco', 'CA', '94104' ],\\n\\t'priya' => [ 'Priya', 'Sharma', 'priya.sharma@example.com', 'Austin', 'TX', '78701' ],\\n\\t'noah'  => [ 'Noah', 'Mueller', 'noah.mueller@example.com', 'Chicago', 'IL', '60601' ],\\n\\t'chloe' => [ 'Chloe', 'Dubois', 'chloe.dubois@example.com', 'Boston', 'MA', '02108' ],\\n];\\n$keys = array_keys( $products );\\n$i    = 0;\\nforeach ( $people as $login => $p ) {\\n\\t$uid  = wp_insert_user( [ 'user_login' => $login, 'user_pass' => 'password', 'user_email' => $p[2], 'first_name' => $p[0], 'last_name' => $p[1], 'display_name' => $p[0] . ' ' . $p[1], 'role' => 'customer' ] );\\n\\t$addr = [ 'first_name' => $p[0], 'last_name' => $p[1], 'email' => $p[2], 'city' => $p[3], 'state' => $p[4], 'postcode' => $p[5], 'country' => 'US', 'address_1' => ( 10 + $i * 7 ) . ' Main Street' ];\\n\\tforeach ( [ 0, 1 ] as $n ) {\\n\\t\\t$order = wc_create_order( [ 'customer_id' => $uid ] );\\n\\t\\t$order->add_product( wc_get_product( $products[ $keys[ ( $i * 2 + $n ) % count( $keys ) ] ] ), 1 );\\n\\t\\t$order->set_address( $addr, 'billing' );\\n\\t\\t$order->set_address( $addr, 'shipping' );\\n\\t\\t$order->set_payment_method_title( 'Credit card' );\\n\\t\\t$order->set_date_created( time() - DAY_IN_SECONDS * ( 2 + $i * 4 + $n * 9 ) );\\n\\t\\t$order->calculate_totals();\\n\\t\\t$order->set_status( 0 === $i && 0 === $n ? 'processing' : 'completed' );\\n\\t\\t$order->save();\\n\\t}\\n\\t$i++;\\n}\\n\\n\\\/\\\/ ---- Storefront (Kadence + DevDiggers demo kit) ----\\n\\\/\\\/ ---- DevDiggers Live Preview demo kit (Apple design language on Kadence) ----\\n\\\/**\\n * Inserted by build.py where a seed says \\\/\\\/ @kit. Call, after products and users exist:\\n *   ddwc_demo_kit_style( [ 'accent' => '#0071e3', 'css' => '' ] )  Kadence + global CSS.\\n *   ddwc_demo_kit_home( [...] )                                     Home page, set as front page.\\n *   ddwc_demo_kit_menu( [ 'Shop' => url, ... ] )                    Primary menu.\\n *   ddwc_demo_kit_switcher( $views_php )                            \\\"View as\\\" switcher mu-plugin.\\n *   ddwc_demo_kit_icon( 'chat' )                                    SVG line icon (names in the list below).\\n * Widget classes for the hero showcase: dk-widget, dk-w-head, dk-w-app, dk-w-label, dk-w-title,\\n * dk-w-big, dk-w-row, dk-w-pill, dk-w-avatar, dk-w-bubble, dk-w-note.\\n *\\\/\\n\\nfunction ddwc_demo_kit_icon( $name, $size = 24 ) {\\n\\t$paths = [\\n\\t\\t'admin'    => '<rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"7\\\" height=\\\"9\\\" rx=\\\"1.5\\\"\\\/><rect x=\\\"14\\\" y=\\\"3\\\" width=\\\"7\\\" height=\\\"5\\\" rx=\\\"1.5\\\"\\\/><rect x=\\\"14\\\" y=\\\"12\\\" width=\\\"7\\\" height=\\\"9\\\" rx=\\\"1.5\\\"\\\/><rect x=\\\"3\\\" y=\\\"16\\\" width=\\\"7\\\" height=\\\"5\\\" rx=\\\"1.5\\\"\\\/>',\\n\\t\\t'customer' => '<circle cx=\\\"12\\\" cy=\\\"8\\\" r=\\\"4\\\"\\\/><path d=\\\"M4 21c0-4 3.6-7 8-7s8 3 8 7\\\"\\\/>',\\n\\t\\t'store'    => '<path d=\\\"M3 9l1.5-5h15L21 9\\\"\\\/><path d=\\\"M3 9h18v2a3 3 0 0 1-6 0 3 3 0 0 1-6 0 3 3 0 0 1-6 0z\\\"\\\/><path d=\\\"M5 13v8h14v-8\\\"\\\/><path d=\\\"M10 21v-5h4v5\\\"\\\/>',\\n\\t\\t'product'  => '<path d=\\\"M20.6 13.4 13.4 20.6a2 2 0 0 1-2.8 0L3 13V3h10l7.6 7.6a2 2 0 0 1 0 2.8z\\\"\\\/><circle cx=\\\"7.5\\\" cy=\\\"7.5\\\" r=\\\"1.5\\\"\\\/>',\\n\\t\\t'cart'     => '<circle cx=\\\"9\\\" cy=\\\"20\\\" r=\\\"1.5\\\"\\\/><circle cx=\\\"18\\\" cy=\\\"20\\\" r=\\\"1.5\\\"\\\/><path d=\\\"M2 3h3l2.7 12.4a2 2 0 0 0 2 1.6h8.6a2 2 0 0 0 2-1.5L22 7H6\\\"\\\/>',\\n\\t\\t'chat'     => '<path d=\\\"M21 12a8 8 0 0 1-11.6 7.1L4 20l1-4.6A8 8 0 1 1 21 12z\\\"\\\/>',\\n\\t\\t'wallet'   => '<path d=\\\"M3 7a2 2 0 0 1 2-2h13v4\\\"\\\/><rect x=\\\"3\\\" y=\\\"7\\\" width=\\\"18\\\" height=\\\"13\\\" rx=\\\"2\\\"\\\/><circle cx=\\\"16.5\\\" cy=\\\"13.5\\\" r=\\\"1.3\\\"\\\/>',\\n\\t\\t'star'     => '<path d=\\\"m12 3 2.8 5.7 6.2.9-4.5 4.4 1.1 6.2L12 17.3 6.4 20.2l1.1-6.2L3 9.6l6.2-.9z\\\"\\\/>',\\n\\t\\t'register' => '<rect x=\\\"3\\\" y=\\\"4\\\" width=\\\"18\\\" height=\\\"12\\\" rx=\\\"2\\\"\\\/><path d=\\\"M7 20h10M12 16v4M7 8h4M7 11h2\\\"\\\/>',\\n\\t\\t'link'     => '<path d=\\\"M10 14a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1 1\\\"\\\/><path d=\\\"M14 10a4 4 0 0 0-5.7 0l-3 3a4 4 0 0 0 5.7 5.7l1-1\\\"\\\/>',\\n\\t\\t'cube'     => '<path d=\\\"M12 2 21 7v10l-9 5-9-5V7z\\\"\\\/><path d=\\\"m3 7 9 5 9-5M12 12v10\\\"\\\/>',\\n\\t\\t'ar'       => '<path d=\\\"M3 7V4h3M21 7V4h-3M3 17v3h3M21 17v3h-3\\\"\\\/><rect x=\\\"8\\\" y=\\\"8\\\" width=\\\"8\\\" height=\\\"8\\\" rx=\\\"1.5\\\"\\\/>',\\n\\t\\t'rx'       => '<path d=\\\"M9 3h6v4H9z\\\"\\\/><path d=\\\"M7 5H5v16h14V5h-2\\\"\\\/><path d=\\\"M9 12h6M9 16h4\\\"\\\/>',\\n\\t\\t'phone'    => '<rect x=\\\"6\\\" y=\\\"2\\\" width=\\\"12\\\" height=\\\"20\\\" rx=\\\"3\\\"\\\/><path d=\\\"M11 18h2\\\"\\\/>',\\n\\t\\t'orders'   => '<path d=\\\"M4 7 12 3l8 4v10l-8 4-8-4z\\\"\\\/><path d=\\\"m4 7 8 4 8-4M12 11v10\\\"\\\/>',\\n\\t\\t'calendar' => '<rect x=\\\"3\\\" y=\\\"5\\\" width=\\\"18\\\" height=\\\"16\\\" rx=\\\"2\\\"\\\/><path d=\\\"M3 10h18M8 3v4M16 3v4\\\"\\\/>',\\n\\t\\t'clock'    => '<circle cx=\\\"12\\\" cy=\\\"13\\\" r=\\\"8\\\"\\\/><path d=\\\"M12 9v4l2.5 2.5M9 2h6\\\"\\\/>',\\n\\t\\t'mail'     => '<rect x=\\\"3\\\" y=\\\"5\\\" width=\\\"18\\\" height=\\\"14\\\" rx=\\\"2\\\"\\\/><path d=\\\"m3 7 9 6 9-6\\\"\\\/>',\\n\\t\\t'chart'    => '<path d=\\\"M3 3v18h18\\\"\\\/><path d=\\\"m7 15 4-4 3 3 5-6\\\"\\\/>',\\n\\t\\t'card'     => '<rect x=\\\"2\\\" y=\\\"5\\\" width=\\\"20\\\" height=\\\"14\\\" rx=\\\"2\\\"\\\/><path d=\\\"M2 10h20M6 15h4\\\"\\\/>',\\n\\t\\t'scan'     => '<path d=\\\"M3 7V5a2 2 0 0 1 2-2h2M17 3h2a2 2 0 0 1 2 2v2M21 17v2a2 2 0 0 1-2 2h-2M7 21H5a2 2 0 0 1-2-2v-2M7 8v8M11 8v8M14 8v8M17 8v8\\\"\\\/>',\\n\\t\\t'receipt'  => '<path d=\\\"M5 3h14v18l-3-2-2 2-2-2-2 2-2-2-3 2z\\\"\\\/><path d=\\\"M9 8h6M9 12h6\\\"\\\/>',\\n\\t\\t'heart'    => '<path d=\\\"M12 21s-7-4.4-7-10a4 4 0 0 1 7-2.6A4 4 0 0 1 19 11c0 5.6-7 10-7 10z\\\"\\\/>',\\n\\t\\t'upload'   => '<path d=\\\"M12 16V4M7 9l5-5 5 5\\\"\\\/><path d=\\\"M4 16v3a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-3\\\"\\\/>',\\n\\t\\t'lock'     => '<rect x=\\\"4\\\" y=\\\"11\\\" width=\\\"16\\\" height=\\\"10\\\" rx=\\\"2\\\"\\\/><path d=\\\"M8 11V7a4 4 0 0 1 8 0v4\\\"\\\/>',\\n\\t\\t'shield'   => '<path d=\\\"M12 3 4 6v6c0 4.5 3.4 8 8 9 4.6-1 8-4.5 8-9V6z\\\"\\\/><path d=\\\"m8.5 12 2.5 2.5 4.5-5\\\"\\\/>',\\n\\t\\t'wifi'     => '<path d=\\\"M2 8.8a15 15 0 0 1 20 0M5 12.5a10 10 0 0 1 14 0M8.5 16a5 5 0 0 1 7 0\\\"\\\/><circle cx=\\\"12\\\" cy=\\\"19.5\\\" r=\\\"1\\\"\\\/>',\\n\\t\\t'bell'     => '<path d=\\\"M6 8a6 6 0 0 1 12 0c0 7 3 8 3 8H3s3-1 3-8\\\"\\\/><path d=\\\"M10.3 21a1.9 1.9 0 0 0 3.4 0\\\"\\\/>',\\n\\t\\t'gift'     => '<rect x=\\\"3\\\" y=\\\"8\\\" width=\\\"18\\\" height=\\\"13\\\" rx=\\\"2\\\"\\\/><path d=\\\"M3 12h18M12 8v13M12 8C10 5 7 5 7 7s3 1 5 1c2 0 5 1 5-1s-3-2-5 1\\\"\\\/>',\\n\\t\\t'bolt'     => '<path d=\\\"M13 2 4 14h7l-1 8 9-12h-7z\\\"\\\/>',\\n\\t\\t'ask'      => '<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"9\\\"\\\/><path d=\\\"M9.5 9.5a2.5 2.5 0 1 1 3.5 2.3c-.7.3-1 .9-1 1.7M12 17h.01\\\"\\\/>',\\n\\t\\t'check'    => '<path d=\\\"m5 12 5 5 9-10\\\"\\\/>',\\n\\t\\t'pay'      => '<rect x=\\\"3\\\" y=\\\"6\\\" width=\\\"18\\\" height=\\\"13\\\" rx=\\\"2\\\"\\\/><path d=\\\"M3 10h18M7 15h3\\\"\\\/>',\\n\\t];\\n\\treturn '<svg viewBox=\\\"0 0 24 24\\\" width=\\\"' . (int) $size . '\\\" height=\\\"' . (int) $size . '\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1.7\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" aria-hidden=\\\"true\\\">' . ( $paths[ $name ] ?? $paths['store'] ) . '<\\\/svg>';\\n}\\n\\n\\\/** Product photo URL (for hero_img and tile img). *\\\/\\nfunction ddwc_demo_kit_img( $product_id, $size = 'large' ) {\\n\\treturn wp_get_attachment_image_url( get_post_thumbnail_id( $product_id ), $size );\\n}\\n\\n\\\/**\\n * Brand the store: Apple's neutral system (SF Pro via the system font stack, #1d1d1f \\\/ #6e6e73 \\\/ #f5f5f7)\\n * with one accent colour per brand. Global CSS goes in an mu-plugin so the seed may still use Additional CSS.\\n *\\n * @param array $a accent (hex), css (extra CSS appended after the kit CSS).\\n *\\\/\\nfunction ddwc_demo_kit_style( $a ) {\\n\\t$a      = array_merge( [ 'accent' => '#0071e3', 'css' => '' ], $a );\\n\\t$accent = $a['accent'];\\n\\t$rgb    = sscanf( $accent, '#%02x%02x%02x' );\\n\\t$dark   = vsprintf( '#%02x%02x%02x', array_map( function ( $c ) { return (int) round( $c * 0.84 ); }, $rgb ) );\\n\\t$tint   = vsprintf( 'rgba(%d,%d,%d,.1)', $rgb );\\n\\t$stack  = '-apple-system,BlinkMacSystemFont,\\\"SF Pro Text\\\",\\\"SF Pro Display\\\",\\\"Helvetica Neue\\\",Helvetica,Arial,sans-serif';\\n\\n\\t$colors  = [ $accent, $dark, '#1d1d1f', '#1d1d1f', '#6e6e73', '#86868b', '#d2d2d7', '#f5f5f7', '#ffffff', '#ffffff', '#248a3d', '#0071e3', '#d70015', '#bf4800', '#b25e09' ];\\n\\t$palette = [];\\n\\tforeach ( $colors as $i => $color ) {\\n\\t\\t$palette[] = [ 'color' => $color, 'slug' => 'palette' . ( $i + 1 ), 'name' => 'Palette Color ' . ( $i + 1 ) ];\\n\\t}\\n\\tupdate_option( 'kadence_global_palette', wp_json_encode( [ 'palette' => $palette, 'second-palette' => $palette, 'third-palette' => $palette, 'active' => 'palette' ] ) );\\n\\n\\tset_theme_mod( 'base_font', [ 'family' => $stack, 'google' => false, 'weight' => '400', 'variant' => 'regular', 'size' => [ 'desktop' => 17 ], 'lineHeight' => [ 'desktop' => 1.47 ], 'color' => 'palette4' ] );\\n\\tset_theme_mod( 'heading_font', [ 'family' => $stack, 'google' => false, 'weight' => '600', 'variant' => [ '600' ] ] );\\n\\tforeach ( [ 'h1_font' => [ 48, 1.08 ], 'h2_font' => [ 40, 1.1 ], 'h3_font' => [ 28, 1.14 ], 'h4_font' => [ 21, 1.2 ], 'h5_font' => [ 17, 1.3 ], 'h6_font' => [ 14, 1.4 ] ] as $mod => $size ) {\\n\\t\\tset_theme_mod( $mod, [ 'size' => [ 'desktop' => $size[0] ], 'lineHeight' => [ 'desktop' => $size[1] ], 'family' => 'inherit', 'google' => false, 'weight' => '600', 'variant' => '600', 'color' => 'palette3' ] );\\n\\t}\\n\\tset_theme_mod( 'load_fonts_local', false );\\n\\n\\tset_theme_mod( 'site_background', [ 'desktop' => [ 'color' => 'palette9' ] ] );\\n\\tset_theme_mod( 'content_background', [ 'desktop' => [ 'color' => 'palette9' ] ] );\\n\\tset_theme_mod( 'page_content_style', 'unboxed' );\\n\\tset_theme_mod( 'product_archive_content_style', 'unboxed' );\\n\\tset_theme_mod( 'product_content_style', 'unboxed' );\\n\\tset_theme_mod( 'product_archive_columns', '4' );\\n\\tset_theme_mod( 'buttons_border_radius', [ 'size' => [ 980, 980, 980, 980 ], 'unit' => 'px', 'locked' => true ] );\\n\\tset_theme_mod( 'buttons_typography', [ 'size' => [ 'desktop' => 15 ], 'family' => 'inherit', 'weight' => '400', 'variant' => 'regular', 'letterSpacing' => [ 'desktop' => -0.01 ], 'letterType' => 'em' ] );\\n\\tset_theme_mod( 'buttons_padding', [ 'size' => [ 'desktop' => [ 11, 22, 11, 22 ] ], 'unit' => [ 'desktop' => 'px' ], 'locked' => [ 'desktop' => false ] ] );\\n\\n\\t\\\/\\\/ Header: one slim frosted bar, logo left, menu and bag right.\\n\\tset_theme_mod(\\n\\t\\t'header_desktop_items',\\n\\t\\t[\\n\\t\\t\\t'top'    => [ 'top_left' => [], 'top_left_center' => [], 'top_center' => [], 'top_right_center' => [], 'top_right' => [] ],\\n\\t\\t\\t'main'   => [ 'main_left' => [ 'logo' ], 'main_left_center' => [], 'main_center' => [], 'main_right_center' => [], 'main_right' => [ 'navigation', 'cart' ] ],\\n\\t\\t\\t'bottom' => [ 'bottom_left' => [], 'bottom_left_center' => [], 'bottom_center' => [], 'bottom_right_center' => [], 'bottom_right' => [] ],\\n\\t\\t]\\n\\t);\\n\\tset_theme_mod( 'header_sticky', 'main' );\\n\\tset_theme_mod( 'header_main_height', [ 'size' => [ 'mobile' => 52, 'tablet' => 52, 'desktop' => 52 ], 'unit' => [ 'mobile' => 'px', 'tablet' => 'px', 'desktop' => 'px' ] ] );\\n\\tset_theme_mod( 'header_main_background', [ 'desktop' => [ 'color' => 'rgba(255,255,255,0.8)' ] ] );\\n\\tset_theme_mod( 'header_sticky_background', [ 'desktop' => [ 'color' => 'rgba(255,255,255,0.8)' ] ] );\\n\\tset_theme_mod( 'header_main_bottom_border', [ 'desktop' => [ 'width' => 1, 'unit' => 'px', 'style' => 'solid', 'color' => 'rgba(0,0,0,0.08)' ] ] );\\n\\tset_theme_mod( 'brand_typography', [ 'size' => [ 'desktop' => 19 ], 'family' => 'inherit', 'google' => false, 'weight' => '600', 'variant' => '600', 'letterSpacing' => [ 'desktop' => -0.02 ], 'letterType' => 'em', 'color' => 'palette3' ] );\\n\\tset_theme_mod( 'primary_navigation_typography', [ 'size' => [ 'desktop' => 13 ], 'family' => 'inherit', 'weight' => '400', 'variant' => 'regular' ] );\\n\\tset_theme_mod( 'primary_navigation_color', [ 'color' => 'palette4', 'hover' => 'palette1', 'active' => 'palette3' ] );\\n\\n\\tset_theme_mod( 'page_title_layout', 'above' );\\n\\tset_theme_mod( 'page_title_background', [ 'desktop' => [ 'color' => 'palette8' ] ] );\\n\\tset_theme_mod( 'product_archive_title_background', [ 'desktop' => [ 'color' => 'palette8' ] ] );\\n\\tset_theme_mod( 'footer_html_content', '{copyright} {year} {site-title}. A DevDiggers live demo store.' );\\n\\tset_theme_mod( 'footer_bottom_background', [ 'desktop' => [ 'color' => 'palette8' ] ] );\\n\\n\\t$css = <<<'DDWCCSS'\\n:root{--dk-accent:__A__;--dk-accent-dark:__D__;--dk-tint:__T__;--dk-ink:#1d1d1f;--dk-gray:#6e6e73;--dk-line:#d2d2d7;--dk-fog:#f5f5f7;--dk-ease:cubic-bezier(.25,.1,.25,1)}\\nbody{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;letter-spacing:-.022em;color:var(--dk-ink)}\\nh1,h2,h3,h4{letter-spacing:-.015em}\\na{color:var(--dk-accent)}\\n#masthead .site-main-header-wrap,#masthead .item-is-fixed{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}\\n.main-navigation .primary-menu-container>ul>li.menu-item>a{padding-left:.9em;padding-right:.9em;opacity:.85}\\n.main-navigation .primary-menu-container>ul>li.menu-item>a:hover{opacity:1}\\n.button,button.button,.wp-element-button,input[type=submit],.woocommerce a.button,.woocommerce button.button{background:var(--dk-accent);color:#fff;border:0;box-shadow:none!important;transition:background .2s var(--dk-ease)}\\n.button:hover,.wp-element-button:hover,input[type=submit]:hover,.woocommerce a.button:hover,.woocommerce button.button:hover{background:var(--dk-accent-dark);color:#fff}\\ninput[type=text],input[type=email],input[type=tel],input[type=password],input[type=number],input[type=search],textarea,select{border:1px solid var(--dk-line)!important;border-radius:12px!important;padding:12px 14px!important;background:#fff!important;font-size:17px;transition:border-color .2s,box-shadow .2s}\\ninput:focus,textarea:focus,select:focus{border-color:var(--dk-accent)!important;box-shadow:0 0 0 4px var(--dk-tint)!important;outline:0}\\n.entry-hero .entry-header,.page-title{padding-top:56px;padding-bottom:40px}\\n.entry-hero h1,.page-title h1,.woocommerce-products-header__title{font-size:48px;letter-spacing:-.02em}\\n.woocommerce-store-notice{display:none!important}\\n.woocommerce-message,.woocommerce-info,.woocommerce-error{border:0!important;border-radius:14px;background:var(--dk-fog)!important;color:var(--dk-ink)}\\n\\\/* Product cards, Apple Store style. *\\\/\\nul.products li.product{background:#fff;border-radius:18px;padding:0 0 22px;overflow:hidden;box-shadow:0 2px 12px rgba(0,0,0,.08);transition:box-shadow .3s var(--dk-ease),transform .3s var(--dk-ease)}\\nul.products li.product:hover{box-shadow:0 10px 34px rgba(0,0,0,.14);transform:translateY(-2px)}\\nul.products li.product img{border-radius:0!important;aspect-ratio:1\\\/1;object-fit:cover;margin:0!important}\\nul.products li.product .woocommerce-loop-product__title,ul.products li.product .product-details,ul.products li.product .entry-content-wrap{padding-left:20px;padding-right:20px}\\nul.products li.product .woocommerce-loop-product__title{font-size:17px;font-weight:600;margin-top:16px}\\nul.products li.product .price{color:var(--dk-gray);font-size:15px;font-weight:400}\\nul.products li.product .button{font-size:14px;padding:8px 16px}\\nul.products li.product .onsale{border-radius:980px;background:var(--dk-accent);font-weight:600;font-size:12px}\\n.single-product div.product .product_title{font-size:40px;letter-spacing:-.02em}\\n.single-product div.product .price{font-size:21px;color:var(--dk-ink)}\\n.single-product div.product .woocommerce-product-gallery img{border-radius:24px}\\n\\\/* My account, as a settings sidebar. *\\\/\\n.woocommerce-MyAccount-navigation ul{background:var(--dk-fog);border-radius:18px;padding:8px!important}\\n.woocommerce-MyAccount-navigation ul li{border:0!important}\\n.woocommerce-MyAccount-navigation ul li a{display:block;padding:10px 14px!important;border-radius:10px;color:var(--dk-ink)!important;font-size:15px}\\n.woocommerce-MyAccount-navigation ul li.is-active a{background:#fff;font-weight:600;box-shadow:0 1px 4px rgba(0,0,0,.08)}\\ntable.shop_table{border-radius:18px!important;border-color:var(--dk-line)!important;overflow:hidden}\\n.site-footer{font-size:12px;color:var(--dk-gray)}\\n\\\/* Home page building blocks. *\\\/\\n.dk-wrap{max-width:1180px;margin:0 auto;padding-left:22px;padding-right:22px}\\n.dk-hero{text-align:center;padding-top:72px}\\n.dk-eyebrow{display:inline-block;color:var(--dk-accent);font-size:17px;font-weight:600;letter-spacing:-.01em;margin-bottom:10px}\\n.dk-hero h1{font-size:clamp(44px,7vw,80px);line-height:1.05;letter-spacing:-.025em;margin:0 auto 14px!important;max-width:16ch;text-wrap:balance}\\n.dk-lead{font-size:clamp(19px,2.2vw,24px);line-height:1.38;color:var(--dk-gray);max-width:36em;margin:0 auto 28px!important;text-wrap:pretty;letter-spacing:-.015em}\\n.dk-ctas{display:flex;gap:28px;justify-content:center;align-items:center;flex-wrap:wrap}\\n.dk-btn{display:inline-flex;align-items:center;padding:12px 24px;border-radius:980px;background:var(--dk-accent);color:#fff!important;font-size:17px;text-decoration:none!important;transition:background .2s var(--dk-ease)}\\n.dk-btn:hover{background:var(--dk-accent-dark)}\\n.dk-btn.is-light{background:#fff;color:var(--dk-ink)!important}.dk-btn.is-light:hover{background:#e8e8ed}\\n.dk-more{font-size:17px;color:var(--dk-accent)!important;text-decoration:none!important}\\n.dk-more:after{content:\\\"\\\\203A\\\";display:inline-block;margin-left:6px;font-size:1.2em;line-height:0;transition:transform .2s var(--dk-ease)}\\n.dk-more:hover{text-decoration:underline!important}.dk-more:hover:after{transform:translateX(3px)}\\n.dk-stage{position:relative;margin:56px auto 0;max-width:1180px;border-radius:32px;overflow:hidden;background:var(--dk-fog);aspect-ratio:16\\\/9}\\n.dk-stage>img{width:100%;height:100%;object-fit:cover;display:block}\\n.dk-stage.is-trio{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;background:#fff}\\n.dk-stage.is-trio>img{min-width:0}\\n.dk-stage .dk-widget{position:absolute;right:32px;bottom:32px}\\n.dk-widget{width:330px;max-width:calc(100% - 32px);text-align:left;padding:18px;border-radius:22px;background:rgba(255,255,255,.78);-webkit-backdrop-filter:saturate(180%) blur(24px);backdrop-filter:saturate(180%) blur(24px);box-shadow:0 22px 60px rgba(0,0,0,.18),inset 0 0 0 .5px rgba(255,255,255,.6);color:var(--dk-ink);font-size:15px;line-height:1.35}\\n.dk-w-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}\\n.dk-w-app{flex:none;display:grid;place-items:center;width:34px;height:34px;border-radius:9px;background:var(--dk-accent);color:#fff}\\n.dk-w-app svg{width:19px;height:19px}\\n.dk-w-label{display:block;font-size:12px;font-weight:600;color:var(--dk-gray);letter-spacing:0;text-transform:uppercase}\\n.dk-w-title{display:block;font-size:16px;font-weight:600;letter-spacing:-.02em}\\n.dk-w-big{display:block;font-size:40px;font-weight:600;letter-spacing:-.03em;line-height:1.1;margin:4px 0}\\n.dk-w-row{display:flex;justify-content:space-between;gap:12px;padding:9px 0;border-top:.5px solid rgba(0,0,0,.12);font-size:14px}\\n.dk-w-row span:last-child{color:var(--dk-gray)}\\n.dk-w-row.is-total{font-weight:600}.dk-w-row.is-total span:last-child{color:var(--dk-ink)}\\n.dk-w-pill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:980px;background:var(--dk-tint);color:var(--dk-accent);font-size:13px;font-weight:600}\\n.dk-w-avatar{flex:none;width:34px;height:34px;border-radius:50%;object-fit:cover}\\n.dk-w-bubble{padding:10px 14px;border-radius:18px 18px 18px 6px;background:#e9e9eb;font-size:15px;margin-top:6px}\\n.dk-w-bubble.is-me{border-radius:18px 18px 6px 18px;background:var(--dk-accent);color:#fff;margin-left:30px}\\n.dk-w-note{display:block;font-size:12px;color:var(--dk-gray);margin-top:10px}\\n.dk-cd{display:flex;gap:8px;margin:10px 0 4px}.dk-cd span{flex:1;text-align:center;padding:10px 0 8px;border-radius:12px;background:var(--dk-ink);color:#fff;font-size:22px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.02em}\\n.dk-cd small{display:block;font-size:10px;font-weight:500;color:#a1a1a6;letter-spacing:.04em;text-transform:uppercase;margin-top:3px}\\n.dk-band{background:var(--dk-fog);margin-top:96px;padding:88px 0}\\n.dk-title{text-align:center!important;font-size:clamp(34px,4.6vw,56px);letter-spacing:-.025em;line-height:1.08;margin:0 auto 48px!important;max-width:20ch;text-wrap:balance}\\n.dk-shelf-title{font-size:clamp(28px,3.4vw,40px);letter-spacing:-.02em;line-height:1.1;margin:0 0 28px}\\n.dk-shelf-title span{color:var(--dk-gray)}\\n.dk-features{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}\\n.dk-feature{background:#fff;border-radius:28px;padding:36px 32px 40px}\\n.dk-feature svg{color:var(--dk-accent);width:36px;height:36px}\\n.dk-feature h3{font-size:24px;letter-spacing:-.02em;margin:18px 0 8px}\\n.dk-feature p{margin:0;font-size:17px;color:var(--dk-gray)}\\n.dk-shelf{padding-top:96px}\\n.dk-shelf-head{display:flex;justify-content:space-between;align-items:baseline;gap:16px;flex-wrap:wrap}\\n.dk-tile{margin:96px auto 104px;display:grid;grid-template-columns:1fr 1fr;align-items:center;border-radius:32px;overflow:hidden;background:#000;color:#f5f5f7}\\n.dk-tile-copy{padding:64px}\\n.dk-tile h2{color:#f5f5f7;font-size:clamp(32px,3.8vw,48px);letter-spacing:-.025em;line-height:1.08;margin:0 0 16px}\\n.dk-tile p{color:#a1a1a6;font-size:19px;line-height:1.42}\\n.dk-tile .dk-more{color:#2997ff!important}\\n.dk-tile img{width:100%;height:100%;min-height:440px;max-height:600px;object-fit:cover;display:block}\\n.dk-stats{display:flex;gap:36px;margin:28px 0}.dk-stats b{display:block;font-size:32px;font-weight:600;letter-spacing:-.02em;color:#f5f5f7}.dk-stats span{font-size:14px;color:#a1a1a6}\\n.dk-list{list-style:none;padding:0;margin:24px 0}.dk-list li{display:flex;gap:12px;align-items:center;padding:10px 0;border-top:.5px solid rgba(255,255,255,.16);color:#f5f5f7;font-size:17px}\\n.dk-list li b{display:grid;place-items:center;flex:none;width:26px;height:26px;border-radius:50%;background:#f5f5f7;color:#000;font-size:13px}\\n@media(max-width:900px){.dk-features,.dk-tile{grid-template-columns:1fr}.dk-stage{aspect-ratio:4\\\/5;border-radius:24px}.dk-stage .dk-widget{left:16px;right:16px;bottom:16px;width:auto}.dk-stage.is-trio{grid-template-columns:1fr 1fr}.dk-stage.is-trio>img:nth-child(3){display:none}.dk-tile-copy{padding:40px 28px}.dk-tile img{min-height:300px}.dk-band{padding:64px 0}}\\n@media(prefers-reduced-motion:reduce){*{transition:none!important}}\\nDDWCCSS;\\n\\t$css  = str_replace( [ '__A__', '__D__', '__T__' ], [ $accent, $dark, $tint ], $css ) . $a['css'];\\n\\t$code = \\\"<?php\\\\n\\\/\\\/ Live Preview only: the demo kit's global stylesheet.\\\\nadd_action( 'wp_head', function () { echo '<style id=\\\\\\\"ddwc-demo-kit\\\\\\\">' . \\\" . var_export( $css, true ) . \\\" . '<\\\/style>'; }, 99 );\\\\n\\\";\\n\\twp_mkdir_p( WPMU_PLUGIN_DIR );\\n\\tfile_put_contents( WPMU_PLUGIN_DIR . '\\\/demo-style.php', $code );\\n}\\n\\n\\\/**\\n * Build the home page and make it the front page.\\n *\\n * @param array $h eyebrow, title, lead, ctas [ [label, url], [label, url] ] (first is the filled button),\\n *                 hero_img (url, or three urls for a photo trio), hero_alt, widget (HTML on the hero stage), after_ctas (HTML, e.g. a shortcode),\\n *                 features_title, features [ [title, text, icon] ], shelf_title, shelf_sub, shelf (shortcode),\\n *                 shelf_more [label, url], tile [title, text, cta [label, url], img, alt, extra HTML], script.\\n * @return int Page ID.\\n *\\\/\\nfunction ddwc_demo_kit_home( $h ) {\\n\\t$ctas = '';\\n\\tforeach ( $h['ctas'] as $i => $cta ) {\\n\\t\\t$ctas .= '<a class=\\\"' . ( $i ? 'dk-more' : 'dk-btn' ) . '\\\" href=\\\"' . esc_url( $cta[1] ) . '\\\">' . esc_html( $cta[0] ) . '<\\\/a>';\\n\\t}\\n\\t$features = '';\\n\\tforeach ( $h['features'] as $f ) {\\n\\t\\t$features .= '<div class=\\\"dk-feature\\\">' . ddwc_demo_kit_icon( $f[2], 36 ) . '<h3>' . $f[0] . '<\\\/h3><p>' . $f[1] . '<\\\/p><\\\/div>';\\n\\t}\\n\\t\\\/\\\/ One wide photo, or three product photos side by side (works with portrait shots).\\n\\t$trio = is_array( $h['hero_img'] );\\n\\t$imgs = '';\\n\\tforeach ( (array) $h['hero_img'] as $src ) {\\n\\t\\t$imgs .= '<img src=\\\"' . esc_url( $src ) . '\\\" alt=\\\"' . esc_attr( $h['hero_alt'] ) . '\\\"\\\/>';\\n\\t}\\n\\t$t    = $h['tile'];\\n\\t$more = $h['shelf_more'] ?? [ 'View all products', wc_get_page_permalink( 'shop' ) ];\\n\\t$html = '<!-- wp:html --><section class=\\\"dk-hero dk-wrap\\\"><span class=\\\"dk-eyebrow\\\">' . $h['eyebrow'] . '<\\\/span><h1>' . $h['title'] . '<\\\/h1><p class=\\\"dk-lead\\\">' . $h['lead'] . '<\\\/p><div class=\\\"dk-ctas\\\">' . $ctas . ( $h['after_ctas'] ?? '' ) . '<\\\/div>'\\n\\t\\t. '<div class=\\\"dk-stage' . ( $trio ? ' is-trio' : '' ) . '\\\">' . $imgs . $h['widget'] . '<\\\/div><\\\/section><!-- \\\/wp:html -->'\\n\\t\\t. '<!-- wp:html --><section class=\\\"dk-band\\\"><div class=\\\"dk-wrap\\\"><h2 class=\\\"dk-title\\\">' . $h['features_title'] . '<\\\/h2><div class=\\\"dk-features\\\">' . $features . '<\\\/div><\\\/div><\\\/section><!-- \\\/wp:html -->'\\n\\t\\t. '<!-- wp:html --><section class=\\\"dk-shelf dk-wrap\\\"><div class=\\\"dk-shelf-head\\\"><h2 class=\\\"dk-shelf-title\\\">' . $h['shelf_title'] . ' <span>' . $h['shelf_sub'] . '<\\\/span><\\\/h2><a class=\\\"dk-more\\\" href=\\\"' . esc_url( $more[1] ) . '\\\">' . esc_html( $more[0] ) . '<\\\/a><\\\/div><!-- \\\/wp:html -->'\\n\\t\\t. '<!-- wp:shortcode -->' . $h['shelf'] . '<!-- \\\/wp:shortcode -->'\\n\\t\\t. '<!-- wp:html --><\\\/section><!-- \\\/wp:html -->'\\n\\t\\t. '<!-- wp:html --><section class=\\\"dk-wrap\\\"><div class=\\\"dk-tile\\\"><div class=\\\"dk-tile-copy\\\"><h2>' . $t['title'] . '<\\\/h2><p>' . $t['text'] . '<\\\/p>' . ( $t['extra'] ?? '' ) . '<p><a class=\\\"dk-btn is-light\\\" href=\\\"' . esc_url( $t['cta'][1] ) . '\\\">' . esc_html( $t['cta'][0] ) . '<\\\/a><\\\/p><\\\/div><img src=\\\"' . esc_url( $t['img'] ) . '\\\" alt=\\\"' . esc_attr( $t['alt'] ) . '\\\"\\\/><\\\/div><\\\/section>' . ( $h['script'] ?? '' ) . '<!-- \\\/wp:html -->';\\n\\n\\t$id = wp_insert_post( [ 'post_type' => 'page', 'post_status' => 'publish', 'post_title' => 'Home', 'post_content' => $html ] );\\n\\tforeach ( [ '_kad_post_title' => 'hide', '_kad_post_layout' => 'fullwidth', '_kad_post_content_style' => 'unboxed', '_kad_post_vertical_padding' => 'hide', '_kad_post_feature' => 'hide' ] as $k => $v ) {\\n\\t\\tupdate_post_meta( $id, $k, $v );\\n\\t}\\n\\tupdate_option( 'show_on_front', 'page' );\\n\\tupdate_option( 'page_on_front', $id );\\n\\twp_delete_post( 2, true ); \\\/\\\/ Sample Page.\\n\\twp_delete_post( 1, true ); \\\/\\\/ Hello world.\\n\\tupdate_option( 'permalink_structure', '\\\/%postname%\\\/' );\\n\\tflush_rewrite_rules();\\n\\treturn $id;\\n}\\n\\n\\\/**\\n * Primary menu.\\n *\\n * @param array $items label => url.\\n *\\\/\\nfunction ddwc_demo_kit_menu( $items ) {\\n\\t$menu_id = wp_create_nav_menu( 'Main menu' );\\n\\tif ( is_wp_error( $menu_id ) ) {\\n\\t\\t$menu_id = wp_get_nav_menu_object( 'Main menu' )->term_id;\\n\\t}\\n\\tforeach ( $items as $label => $url ) {\\n\\t\\twp_update_nav_menu_item( $menu_id, 0, [ 'menu-item-title' => $label, 'menu-item-url' => $url, 'menu-item-status' => 'publish', 'menu-item-type' => 'custom' ] );\\n\\t}\\n\\t$locations            = get_theme_mod( 'nav_menu_locations', [] );\\n\\t$locations['primary'] = $menu_id;\\n\\t$locations['mobile']  = $menu_id;\\n\\tset_theme_mod( 'nav_menu_locations', $locations );\\n}\\n\\n\\\/**\\n * Write the \\\"View as\\\" switcher mu-plugin.\\n *\\n * Pass a PHP expression string that returns the views array; each view:\\n *   [ 'label' => 'Store admin', 'hint' => 'Dashboard & settings', 'icon' => 'admin', 'user' => 'admin', 'url' => admin_url(...) ]\\n * user '' logs the visitor out. icon: any ddwc_demo_kit_icon() name.\\n *\\n * @param string $views_php PHP code (no <?php) that returns the array.\\n *\\\/\\nfunction ddwc_demo_kit_switcher( $views_php ) {\\n\\t$icons = [];\\n\\tforeach ( [ 'admin', 'customer', 'store', 'product', 'cart', 'chat', 'wallet', 'star', 'register', 'link', 'cube', 'rx', 'phone', 'orders', 'calendar' ] as $n ) {\\n\\t\\t$icons[ $n ] = ddwc_demo_kit_icon( $n, 18 );\\n\\t}\\n\\t$code = <<<'DDWCKIT'\\n<?php\\n\\\/**\\n * Live Preview only: \\\"View as\\\" switcher so visitors can jump between the store owner's\\n * admin and the shopper's side without any password.\\n *\\\/\\nfunction ddwc_demo_switcher_views() {\\n\\t__VIEWS__\\n}\\n\\nadd_action(\\n\\t'init',\\n\\tfunction () {\\n\\t\\tif ( ! isset( $_GET['ddwc_demo_view'] ) ) { \\\/\\\/ phpcs:ignore WordPress.Security.NonceVerification -- demo site only.\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\t$views = ddwc_demo_switcher_views();\\n\\t\\t$view  = $views[ absint( $_GET['ddwc_demo_view'] ) ] ?? null; \\\/\\\/ phpcs:ignore WordPress.Security.NonceVerification\\n\\t\\tif ( ! $view ) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\twp_clear_auth_cookie();\\n\\t\\twp_set_current_user( 0 );\\n\\t\\t$user = $view['user'] ? get_user_by( 'login', $view['user'] ) : null;\\n\\t\\tif ( $user ) {\\n\\t\\t\\twp_set_current_user( $user->ID );\\n\\t\\t\\twp_set_auth_cookie( $user->ID, true );\\n\\t\\t}\\n\\t\\twp_safe_redirect( $view['url'] );\\n\\t\\texit;\\n\\t},\\n\\t1\\n);\\n\\n\\\/\\\/ Live Preview: keep the storefront clean, the admin bar only appears in wp-admin.\\nadd_filter( 'show_admin_bar', '__return_false' );\\n\\nfunction ddwc_demo_switcher_render() {\\n\\t$icons   = __ICONS__;\\n\\t$views   = ddwc_demo_switcher_views();\\n\\t$current = wp_get_current_user();\\n\\t$here    = untrailingslashit( set_url_scheme( 'http:\\\/\\\/' . ( $_SERVER['HTTP_HOST'] ?? '' ) . ( $_SERVER['REQUEST_URI'] ?? '' ) ) ); \\\/\\\/ phpcs:ignore\\n\\t$items   = '';\\n\\t$label   = '';\\n\\tforeach ( $views as $i => $view ) {\\n\\t\\t$active = untrailingslashit( set_url_scheme( $view['url'] ) ) === $here && ( ! $view['user'] || ( $current->exists() && $current->user_login === $view['user'] ) );\\n\\t\\tif ( $active ) {\\n\\t\\t\\t$label = $view['label'];\\n\\t\\t}\\n\\t\\t$items .= sprintf(\\n\\t\\t\\t'<a href=\\\"%s\\\" class=\\\"ddwc-ds-item%s\\\"><span class=\\\"ddwc-ds-ico\\\">%s<\\\/span><span class=\\\"ddwc-ds-text\\\"><strong>%s<\\\/strong><small>%s<\\\/small><\\\/span><\\\/a>',\\n\\t\\t\\tesc_url( add_query_arg( 'ddwc_demo_view', $i, home_url( '\\\/' ) ) ),\\n\\t\\t\\t$active ? ' is-active' : '',\\n\\t\\t\\t$icons[ $view['icon'] ?? 'store' ] ?? $icons['store'],\\n\\t\\t\\tesc_html( $view['label'] ),\\n\\t\\t\\tesc_html( $view['hint'] ?? '' )\\n\\t\\t);\\n\\t}\\n\\t?>\\n\\t<div id=\\\"ddwc-demo-switcher\\\">\\n\\t\\t<div class=\\\"ddwc-ds-panel\\\" role=\\\"menu\\\">\\n\\t\\t\\t<div class=\\\"ddwc-ds-head\\\">Explore this live demo<\\\/div>\\n\\t\\t\\t<?php echo $items; \\\/\\\/ phpcs:ignore WordPress.Security.EscapeOutput -- escaped above. ?>\\n\\t\\t<\\\/div>\\n\\t\\t<button type=\\\"button\\\" class=\\\"ddwc-ds-toggle\\\" aria-expanded=\\\"false\\\">\\n\\t\\t\\t<span class=\\\"ddwc-ds-dot\\\"><\\\/span>\\n\\t\\t\\t<span>View as<?php echo $label ? ' <b>' . esc_html( $label ) . '<\\\/b>' : ''; ?><\\\/span>\\n\\t\\t\\t<svg viewBox=\\\"0 0 24 24\\\" width=\\\"14\\\" height=\\\"14\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2.2\\\" stroke-linecap=\\\"round\\\" aria-hidden=\\\"true\\\"><path d=\\\"m6 15 6-6 6 6\\\"\\\/><\\\/svg>\\n\\t\\t<\\\/button>\\n\\t<\\\/div>\\n\\t<style>\\n\\t\\t#ddwc-demo-switcher{position:fixed;left:20px;bottom:20px;z-index:999999;font:400 14px\\\/1.3 -apple-system,BlinkMacSystemFont,\\\"SF Pro Text\\\",\\\"Helvetica Neue\\\",Arial,sans-serif;letter-spacing:-.01em;color:#1d1d1f;-webkit-font-smoothing:antialiased}\\n\\t\\t#ddwc-demo-switcher .ddwc-ds-toggle{display:flex;align-items:center;gap:9px;padding:10px 16px;border:0;border-radius:980px;background:rgba(29,29,31,.82);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);color:#f5f5f7;font:inherit;cursor:pointer;box-shadow:0 10px 30px rgba(0,0,0,.24)}\\n\\t\\t#ddwc-demo-switcher .ddwc-ds-toggle b{font-weight:600;color:#fff}\\n\\t\\t#ddwc-demo-switcher .ddwc-ds-toggle svg{transition:transform .25s cubic-bezier(.25,.1,.25,1);opacity:.7}\\n\\t\\t#ddwc-demo-switcher.is-open .ddwc-ds-toggle svg{transform:rotate(180deg)}\\n\\t\\t#ddwc-demo-switcher .ddwc-ds-dot{width:7px;height:7px;border-radius:50%;background:#30d158;box-shadow:0 0 0 3px rgba(48,209,88,.28)}\\n\\t\\t#ddwc-demo-switcher .ddwc-ds-panel{position:absolute;left:0;bottom:calc(100% + 10px);width:300px;max-width:calc(100vw - 40px);padding:6px;border-radius:18px;background:rgba(255,255,255,.82);-webkit-backdrop-filter:saturate(180%) blur(24px);backdrop-filter:saturate(180%) blur(24px);box-shadow:0 24px 70px rgba(0,0,0,.22),inset 0 0 0 .5px rgba(0,0,0,.08);opacity:0;visibility:hidden;transform:translateY(6px) scale(.98);transform-origin:bottom left;transition:opacity .2s,transform .25s cubic-bezier(.25,.1,.25,1),visibility .2s}\\n\\t\\t#ddwc-demo-switcher.is-open .ddwc-ds-panel{opacity:1;visibility:visible;transform:none}\\n\\t\\t#ddwc-demo-switcher .ddwc-ds-head{padding:10px 12px 8px;font-size:12px;font-weight:600;color:#6e6e73}\\n\\t\\t#ddwc-demo-switcher .ddwc-ds-item{display:flex;align-items:center;gap:12px;padding:9px 10px;border-radius:12px;color:#1d1d1f;text-decoration:none}\\n\\t\\t#ddwc-demo-switcher .ddwc-ds-item:hover{background:rgba(0,0,0,.05)}\\n\\t\\t#ddwc-demo-switcher .ddwc-ds-item.is-active{background:rgba(0,113,227,.1)}\\n\\t\\t#ddwc-demo-switcher .ddwc-ds-ico{flex:none;display:grid;place-items:center;width:32px;height:32px;border-radius:9px;background:#e8e8ed;color:#1d1d1f}\\n\\t\\t#ddwc-demo-switcher .ddwc-ds-item.is-active .ddwc-ds-ico{background:#0071e3;color:#fff}\\n\\t\\t#ddwc-demo-switcher .ddwc-ds-text{display:flex;flex-direction:column;min-width:0}\\n\\t\\t#ddwc-demo-switcher .ddwc-ds-text strong{font-weight:600;font-size:14px}\\n\\t\\t#ddwc-demo-switcher .ddwc-ds-text small{font-size:12px;color:#6e6e73}\\n\\t\\t@media (max-width:782px){#ddwc-demo-switcher{left:12px;bottom:auto;top:58px}#ddwc-demo-switcher .ddwc-ds-panel{bottom:auto;top:calc(100% + 10px);transform-origin:top left}}\\n\\t<\\\/style>\\n\\t<script>\\n\\t\\t(function(){var w=document.getElementById('ddwc-demo-switcher');if(!w)return;var b=w.querySelector('.ddwc-ds-toggle');b.addEventListener('click',function(e){e.stopPropagation();var o=w.classList.toggle('is-open');b.setAttribute('aria-expanded',o)});document.addEventListener('click',function(e){if(!w.contains(e.target)){w.classList.remove('is-open');b.setAttribute('aria-expanded','false')}});try{if(!sessionStorage.getItem('ddwcDemoSeen')){w.classList.add('is-open');sessionStorage.setItem('ddwcDemoSeen','1');setTimeout(function(){w.classList.remove('is-open');b.setAttribute('aria-expanded','false')},5000)}}catch(e){}})();\\n\\t<\\\/script>\\n\\t<?php\\n}\\nadd_action( 'wp_footer', 'ddwc_demo_switcher_render' );\\nadd_action( 'admin_footer', 'ddwc_demo_switcher_render' );\\nDDWCKIT;\\n\\twp_mkdir_p( WPMU_PLUGIN_DIR );\\n\\tfile_put_contents( WPMU_PLUGIN_DIR . '\\\/demo-switcher.php', str_replace( [ '__VIEWS__', '__ICONS__' ], [ $views_php, var_export( $icons, true ) ], $code ) );\\n}\\n\\n\\nwp_set_current_user( 1 );\\nddwc_demo_kit_style( [\\n\\t'accent' => '#1d1d1f',\\n\\t\\\/\\\/ Renders sit on #f5f5f7, so show them whole on product cards and in the gallery.\\n\\t'css'    => 'ul.products li.product img,.woocommerce-product-gallery img{background:#f5f5f7}.dk-stage.is-trio{background:#f5f5f7}.dk-stage.is-trio>img{object-fit:contain}',\\n] );\\n\\n$shop    = wc_get_page_permalink( 'shop' );\\n$account = wc_get_page_permalink( 'myaccount' );\\n$chair   = get_permalink( $products['armchair'] );\\n$home_id = ddwc_demo_kit_home( [\\n\\t'eyebrow'        => 'Every hero piece, now in 3D',\\n\\t'title'          => 'See it in your room before it arrives.',\\n\\t'lead'           => 'Spin our sofas, chairs and lamps in 3D right on the product page, then tap View in AR on your phone to place them, true to size, in your own space.',\\n\\t'ctas'           => [ [ 'Try the 3D view', $chair ], [ 'Shop the collection', $shop ] ],\\n\\t'hero_img'       => [ ddwc_demo_kit_img( $products['armchair'] ), ddwc_demo_kit_img( $products['sofa'] ), ddwc_demo_kit_img( $products['vase'] ) ],\\n\\t'hero_alt'       => 'Northloft furniture in 3D',\\n\\t'widget'         => '<div class=\\\"dk-widget\\\"><div class=\\\"dk-w-head\\\"><span class=\\\"dk-w-app\\\">' . ddwc_demo_kit_icon( 'ar' ) . '<\\\/span><span><span class=\\\"dk-w-label\\\">View in your room<\\\/span><span class=\\\"dk-w-title\\\">Mango Velvet Lounge Chair<\\\/span><\\\/span><\\\/div>'\\n\\t\\t. '<div class=\\\"dk-w-row\\\"><span>3D view<\\\/span><span>Drag to rotate<\\\/span><\\\/div><div class=\\\"dk-w-row\\\"><span>AR<\\\/span><span>Placed at real scale<\\\/span><\\\/div><\\\/div>',\\n\\t'features_title' => 'Try it before you buy it.',\\n\\t'features'       => [\\n\\t\\t[ 'Rotate every angle', 'Switch from Photos to 3D View and drag to turn the piece, zoom into the fabric and check the legs.', 'cube' ],\\n\\t\\t[ 'Place it in your room', 'On Android and iPhone, View in AR drops the piece on your floor at its real size. No app to install.', 'ar' ],\\n\\t\\t[ 'Fast on any phone', 'Models load only on the products that have them, with the photo shown while the 3D view gets ready.', 'phone' ],\\n\\t],\\n\\t'shelf_title'    => 'The Northloft collection.',\\n\\t'shelf_sub'      => 'Look for the 3D badge.',\\n\\t'shelf'          => '[products limit=\\\"8\\\" columns=\\\"4\\\" orderby=\\\"date\\\" order=\\\"ASC\\\"]',\\n\\t'tile'           => [\\n\\t\\t'title' => 'Not sure it fits? Put it in your room.',\\n\\t\\t'text'  => 'Open the Glam Velvet Sofa, switch to 3D View and walk around it. On your phone, one tap places it next to your coffee table.',\\n\\t\\t'cta'   => [ 'Open the sofa in 3D', get_permalink( $products['sofa'] ) ],\\n\\t\\t'img'   => ddwc_demo_kit_img( $products['sofa'] ),\\n\\t\\t'alt'   => 'Glam Velvet Sofa',\\n\\t],\\n] );\\nddwc_demo_kit_menu( [ 'Shop' => $shop, 'Seating' => get_term_link( $cats['Seating'], 'product_cat' ), 'My account' => $account ] );\\nupdate_option( 'ddwc_demo_products', [ 'chair' => $products['armchair'], 'sofa' => $products['sofa'] ] );\\n\\nddwc_demo_kit_switcher( <<<'DDWCVIEWS'\\n$p = get_option( 'ddwc_demo_products', [] );\\n\\treturn [\\n\\t\\t[ 'label' => '3D lounge chair', 'hint' => 'Shopper view: rotate it, view in AR', 'icon' => 'cube', 'user' => 'amara', 'url' => get_permalink( $p['chair'] ?? 0 ) ],\\n\\t\\t[ 'label' => '3D velvet sofa', 'hint' => 'A second product with a model', 'icon' => 'product', 'user' => 'amara', 'url' => get_permalink( $p['sofa'] ?? 0 ) ],\\n\\t\\t[ 'label' => 'AR dashboard', 'hint' => 'Store admin: models and coverage', 'icon' => 'admin', 'user' => 'admin', 'url' => admin_url( 'admin.php?page=ddwcpvar-dashboard' ) ],\\n\\t\\t[ 'label' => 'Storefront', 'hint' => 'The shop your customers see', 'icon' => 'store', 'user' => '', 'url' => home_url( '\\\/' ) ],\\n\\t];\\nDDWCVIEWS\\n);\\n\"},{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3639310,"resolution":"1","location":"assets","locale":"","width":1600,"height":1000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3639310,"resolution":"2","location":"assets","locale":"","width":600,"height":1230},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3639310,"resolution":"3","location":"assets","locale":"","width":1600,"height":1000},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3639310,"resolution":"4","location":"assets","locale":"","width":1600,"height":1000},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3639310,"resolution":"5","location":"assets","locale":"","width":1600,"height":1000},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3639310,"resolution":"6","location":"assets","locale":"","width":1600,"height":1000}},"screenshots":{"1":"The 3D product viewer with the Photos \/ 3D View toggle on the WooCommerce product page.","2":"A product placed in a real room with augmented reality on a mobile device.","3":"The dashboard with AR model coverage stats.","4":"The Products screen bulk model manager.","5":"The setup wizard.","6":"Configuration Page with lots of customization options"}},"plugin_section":[],"plugin_tags":[811,147394,147393,251327,286],"plugin_category":[45],"plugin_contributors":[220149],"plugin_business_model":[],"class_list":["post-347090","plugin","type-plugin","status-publish","hentry","plugin_tags-3d-model-viewer","plugin_tags-ar","plugin_tags-augmented-reality","plugin_tags-glb","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-devdiggers","plugin_committers-devdiggers"],"banners":{"banner":"https:\/\/ps.w.org\/devdiggers-ar-for-woocommerce\/assets\/banner-772x250.png?rev=3639310","banner_2x":"https:\/\/ps.w.org\/devdiggers-ar-for-woocommerce\/assets\/banner-1544x500.png?rev=3639310","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/devdiggers-ar-for-woocommerce\/assets\/icon-128x128.gif?rev=3639310","icon_2x":"https:\/\/ps.w.org\/devdiggers-ar-for-woocommerce\/assets\/icon-256x256.gif?rev=3639310","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/devdiggers-ar-for-woocommerce\/assets\/screenshot-1.png?rev=3639310","caption":"The 3D product viewer with the Photos \/ 3D View toggle on the WooCommerce product page."},{"src":"https:\/\/ps.w.org\/devdiggers-ar-for-woocommerce\/assets\/screenshot-2.png?rev=3639310","caption":"A product placed in a real room with augmented reality on a mobile device."},{"src":"https:\/\/ps.w.org\/devdiggers-ar-for-woocommerce\/assets\/screenshot-3.png?rev=3639310","caption":"The dashboard with AR model coverage stats."},{"src":"https:\/\/ps.w.org\/devdiggers-ar-for-woocommerce\/assets\/screenshot-4.png?rev=3639310","caption":"The Products screen bulk model manager."},{"src":"https:\/\/ps.w.org\/devdiggers-ar-for-woocommerce\/assets\/screenshot-5.png?rev=3639310","caption":"The setup wizard."},{"src":"https:\/\/ps.w.org\/devdiggers-ar-for-woocommerce\/assets\/screenshot-6.png?rev=3639310","caption":"Configuration Page with lots of customization options"}],"raw_content":"<!--section=description-->\n<p><strong>AR for WooCommerce<\/strong> adds a 3D product viewer and augmented reality to your WooCommerce product pages. Upload a GLB model for the 3D viewer and Android AR, upload a USDZ model for iOS AR, and shoppers can rotate the product, zoom in, and place it in their own room straight from the product page. No app download, no account, no external service.<\/p>\n\n<p>A product photo only shows one angle. A shopper looking at a chair, a lamp, a pair of shoes or a piece of furniture usually wants to know how big it really is and what the back looks like. Augmented reality answers that on their own phone, in their own space, before they buy. Stores that let people check size and scale up front tend to get fewer \"this was not what I expected\" returns.<\/p>\n\n<h4>Quick Links<\/h4>\n\n<ul>\n<li><a href=\"https:\/\/demo.devdiggers.com\/ar-for-woocommerce\/\">View Free Plugin Demo<\/a><\/li>\n<li><a href=\"https:\/\/demo.devdiggers.com\/woocommerce-product-view-in-ar\/\">View Pro Plugin Demo<\/a><\/li>\n<li><a href=\"https:\/\/docs.devdiggers.com\/woocommerce-product-view-in-ar\/\">Full Documentation<\/a><\/li>\n<li><a href=\"https:\/\/devdiggers.com\/product\/woocommerce-product-view-in-ar\/#free-vs-pro\">Free vs Pro Comparison<\/a><\/li>\n<li><a href=\"https:\/\/devdiggers.com\/product\/woocommerce-product-view-in-ar\/\">Upgrade to Pro<\/a><\/li>\n<\/ul>\n\n<h4>What you get in the free version<\/h4>\n\n<ul>\n<li><strong>3D product viewer<\/strong> on the WooCommerce product page, with a Photos \/ 3D View toggle in the gallery so the viewer sits beside your normal product images.<\/li>\n<li><strong>Native AR on mobile.<\/strong> Scene Viewer opens on Android, AR Quick Look opens on iOS. Both are built into the phone, so there is nothing for your customer to install.<\/li>\n<li><strong>Per-product model uploads.<\/strong> Attach a <code>.glb<\/code> file and a <code>.usdz<\/code> file to any product from the product edit screen.<\/li>\n<li><strong>Simple and variable product support<\/strong>, with one model per product.<\/li>\n<li><strong>View in AR button<\/strong> that appears only on devices that can actually run AR.<\/li>\n<li><strong>Theme matching.<\/strong> Set your own active background and text colours for the Photos \/ 3D toggle so it does not look bolted on.<\/li>\n<li><strong>Preload poster.<\/strong> Show the product image while the 3D model loads, so the gallery never sits empty.<\/li>\n<li><strong>Bulk model manager.<\/strong> A Products screen that filters by model status, shows a badge for what each product has, and removes a model in one click.<\/li>\n<li><strong>Coverage dashboard.<\/strong> See how many products have AR, how many have Android only, iOS only, or both, and which ones are still missing a model.<\/li>\n<li><strong>Setup wizard<\/strong> that turns the feature on and gets you to your first model quickly.<\/li>\n<li><strong>Everything served locally.<\/strong> The 3D viewer and its decoders ship inside the plugin, so your storefront makes no third-party CDN request and sends nothing about your visitors anywhere.<\/li>\n<li><strong>Translation ready.<\/strong><\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>Install the plugin and finish the short setup wizard.<\/li>\n<li>Open a product, upload a <code>.glb<\/code> file for 3D and Android AR, and a <code>.usdz<\/code> file for iOS AR.<\/li>\n<li>Visit the product page. Desktop shoppers get the 3D viewer, phone shoppers get the 3D viewer plus a View in AR button.<\/li>\n<\/ol>\n\n<h4>3D model formats<\/h4>\n\n<p>GLB is the format for the on-page 3D viewer and for Android augmented reality. USDZ is the format Apple's AR Quick Look requires, so it is what powers AR on iPhone and iPad. You can upload one or both. Most 3D tools, including Blender, export GLB directly, and the plugin links a sample GLB and a sample USDZ on its Products screen so you can see exactly what a working file looks like before you upload your own.<\/p>\n\n<h4>Free vs Pro<\/h4>\n\n<p>Nothing in the list above is time limited, usage limited, or locked behind a trial. The free version runs a real 3D and AR experience on every product in your store.<\/p>\n\n<p><a href=\"https:\/\/devdiggers.com\/product\/woocommerce-product-view-in-ar\/\">AR for WooCommerce Pro<\/a> adds:<\/p>\n\n<ul>\n<li>AR and 3D view analytics, with daily trends, views by type and device, top viewed products, and per-product counts over a date range you choose.<\/li>\n<li>Desktop QR hand-off, so a desktop shopper can scan a code and open AR on their phone.<\/li>\n<li>Advanced AR button styling: 12 ready-made badges, custom badge image upload, a coloured text button with your own icon and colours, and a configurable button position.<\/li>\n<li>Photos \/ 3D toggle placement in any corner of the gallery.<\/li>\n<li>Per-variation models, so each variation of a variable product can carry its own GLB and USDZ, swapped live as the shopper changes options.<\/li>\n<li>Auto-rotation, so the model spins gently and shoppers notice it can be moved.<\/li>\n<li>Model dimensions shown as width, height and depth hotspots on the model itself.<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WooCommerce 9.5 or newer.<\/li>\n<li>A GLB model for the 3D viewer and Android AR, and a USDZ model for iOS AR.<\/li>\n<\/ul>\n\n<h4>A note from the founder<\/h4>\n\n<p>Hi, I am Yash Kapoor, founder of DevDiggers. Shoppers rarely doubt the color of a sofa. They doubt whether it fits. I built this plugin so they can see a product in their own room at true scale before they order. My team keeps it updated for every new WooCommerce release, and the developers who wrote it answer the support forum.<\/p>\n\n<p>Have a question? Ask in the support forum or message me directly on <a href=\"https:\/\/www.linkedin.com\/in\/iamyashkapoor\/\">LinkedIn<\/a>.<\/p>\n\n<h3>External services<\/h3>\n\n<p>The plugin's admin screens contact the following external services. None of them is used by the storefront, and no data about your customers or store visitors is sent to any of them.<\/p>\n\n<ol>\n<li><p>DevDiggers extensions catalog. On the admin \"DevDiggers Plugins &gt; Extensions\" screen, the plugin requests the list of DevDiggers plugins from <code>https:\/\/devdiggers.com\/wp-json\/ddwcs\/v1\/plugins<\/code> so it can display them. This is a read-only request and sends no personal data, and the response is cached for 24 hours so it is not repeated on every page load. The catalog entries include an icon image for each listed plugin, which that screen loads from <code>https:\/\/devdiggers.com<\/code>. This happens only while an administrator is viewing the Extensions screen; no other screen, and no storefront page, contacts devdiggers.com.<\/p><\/li>\n<li><p>Newsletter subscription (opt-in). If a logged-in admin enters their email in the DevDiggers newsletter box and submits it, that email address and your site URL are sent to <code>https:\/\/devdiggers.com\/<\/code> (FluentCRM) to create the subscription. This request is only made when you explicitly submit the form.<\/p><\/li>\n<li><p>Gravatar (avatar images). The plugin's admin screens greet the logged-in administrator with their avatar, using the WordPress core function <code>get_avatar_url()<\/code>. WordPress resolves that to Gravatar, so the browser requests the image from <code>https:\/\/secure.gravatar.com\/<\/code> and an MD5 hash of the logged-in administrator's email address is included in the image URL. This happens only while an administrator is viewing one of the plugin's admin screens. No customer or store data is involved, and no storefront page requests an avatar.<\/p><\/li>\n<\/ol>\n\n<p>Services 1 and 2 are provided by DevDiggers (https:\/\/devdiggers.com). Terms: https:\/\/devdiggers.com\/terms-and-conditions\/ - Privacy: https:\/\/devdiggers.com\/privacy-policy\/<\/p>\n\n<p>Service 3 is provided by Automattic (https:\/\/gravatar.com). Terms: https:\/\/automattic.com\/terms\/ - Privacy: https:\/\/automattic.com\/privacy\/<\/p>\n\n<h3>Source code and build tools<\/h3>\n\n<p>The admin and frontend JavaScript and CSS are compiled from the <code>src\/<\/code> folder with webpack and Babel. The complete, human-readable source code (admin, frontend, and all build configuration) is published in our public GitHub repository:<\/p>\n\n<p>https:\/\/github.com\/DevDiggers-Technologies\/ar-for-woocommerce<\/p>\n\n<p>To build the assets from source:<\/p>\n\n<ol>\n<li>Run <code>npm install<\/code> to install the build dependencies listed in <code>package.json<\/code>.<\/li>\n<li>Run <code>npm run build<\/code> to compile the production assets into <code>assets\/js<\/code> and <code>assets\/css<\/code>.<\/li>\n<\/ol>\n\n<p>The build configuration is in <code>webpack.config.js<\/code> and <code>babel.config.js<\/code>.<\/p>\n\n<p>Third-party libraries are bundled with the plugin and served from it. Nothing is loaded from a CDN or any remote host:<\/p>\n\n<ul>\n<li><code>&lt;model-viewer&gt;<\/code> 4.x (<code>assets\/js\/model-viewer.min.js<\/code>) - Google LLC, BSD-3-Clause - https:\/\/github.com\/google\/model-viewer<\/li>\n<li>Draco decoder 1.5.6 (<code>assets\/js\/decoders\/draco\/<\/code>) - Google LLC, Apache-2.0 - https:\/\/github.com\/google\/draco<\/li>\n<li>Basis Universal transcoder (<code>assets\/js\/decoders\/basis\/<\/code>) - Binomial LLC \/ Google LLC, Apache-2.0 - https:\/\/github.com\/BinomialLLC\/basis_universal<\/li>\n<li>Chart.js 4.5.1 (<code>devdiggers-framework\/assets\/js\/chart.js<\/code>) - MIT - https:\/\/github.com\/chartjs\/Chart.js<\/li>\n<li><p>Select2 4.1.0 (<code>devdiggers-framework\/assets\/js\/select2.js<\/code>) - MIT - https:\/\/github.com\/select2\/select2<\/p>\n\n<p> ships with default CDN locations for its Draco and Basis decoders. Those defaults have been blanked out in the bundled copy, and the plugin points the viewer at the local <code>assets\/js\/decoders\/<\/code> copies instead, so a compressed model still renders without any external request.<\/p><\/li>\n<\/ul>\n\n<p>Two of the bundled decoder files are WebAssembly binaries: <code>assets\/js\/decoders\/draco\/draco_decoder.wasm<\/code> and <code>assets\/js\/decoders\/basis\/basis_transcoder.wasm<\/code>. They are the unmodified prebuilt binaries published by their upstream projects, taken from the official releases linked above, and they are not compiled or modified by us. Both are open source under Apache-2.0, and the complete C++ source and build instructions for each are in the upstream repositories listed above, so the binaries can be rebuilt and compared against the copies shipped here.<\/p>\n\n<p>These two files are data read by the browser's own WebAssembly runtime, not code the plugin executes on the server. They are what lets <code>&lt;model-viewer&gt;<\/code> open Draco-compressed geometry and KTX2\/Basis-compressed textures, which is the format most 3D authoring tools export. They are included in the plugin so that no decoder is ever fetched from a third-party CDN at runtime.<\/p>\n\n<p>The sample models in <code>assets\/sample\/<\/code> are demo media, not code. <code>sample.glb<\/code> is the Android \/ desktop sample and <code>sample.usdz<\/code> is the iOS sample, since Apple's AR Quick Look only accepts USDZ. Both are linked from the plugin's admin Products screen so a store owner can see the exact formats to upload.<\/p>\n\n<p>The bundled demo models in <code>assets\/sample\/<\/code> are derived from the \"Sheen Chair\" model in the Khronos glTF Sample Assets collection (\u00a9 2020 Wayfair, LLC, dedicated to the public domain under CC0 1.0 Universal). Textures were downscaled, the mesh was decimated, and the USDZ was generated from the same source. Original: https:\/\/github.com\/KhronosGroup\/glTF-Sample-Assets\/tree\/main\/Models\/SheenChair<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>devdiggers-ar-for-woocommerce<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install the plugin through the <strong>Plugins &gt; Add New<\/strong> screen in WordPress.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu.<\/li>\n<li>Open <strong>DevDiggers Plugins &gt; Product View in AR<\/strong> and complete the setup wizard.<\/li>\n<li>Go to the <strong>Products<\/strong> tab and upload a GLB and\/or USDZ model for each product you want to show in 3D and AR.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20my%20customers%20need%20an%20app%20to%20view%20products%20in%20ar%3F\"><h3>Do my customers need an app to view products in AR?<\/h3><\/dt>\n<dd><p>No. Augmented reality runs in the phone's own browser using the viewer built into the operating system: Scene Viewer on Android and AR Quick Look on iOS. Your customer taps View in AR and the camera opens. Nothing is downloaded and no account is needed.<\/p><\/dd>\n<dt id=\"which%203d%20model%20formats%20does%20the%20plugin%20support%3F\"><h3>Which 3D model formats does the plugin support?<\/h3><\/dt>\n<dd><p>A <code>.glb<\/code> file powers the on-page 3D viewer and augmented reality on Android. A <code>.usdz<\/code> file powers augmented reality on iPhone and iPad, because AR Quick Look accepts nothing else. You can upload one or both per product.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20a%20glb%20or%20usdz%20model%20for%20my%20product%3F\"><h3>Where do I get a GLB or USDZ model for my product?<\/h3><\/dt>\n<dd><p>You supply the files. Most 3D software, Blender included, exports GLB, and USDZ can be generated from the same source model. The plugin's Products screen links a working sample of each format so you can check yours against a known-good file before uploading.<\/p><\/dd>\n<dt id=\"does%20augmented%20reality%20work%20on%20iphone%20and%20android%3F\"><h3>Does augmented reality work on iPhone and Android?<\/h3><\/dt>\n<dd><p>Yes, on both. iOS uses AR Quick Look and needs a USDZ file. Android uses Scene Viewer and needs a GLB file. Upload both and the right one opens on the right device automatically.<\/p><\/dd>\n<dt id=\"why%20is%20there%20no%20ar%20button%20on%20desktop%3F\"><h3>Why is there no AR button on desktop?<\/h3><\/dt>\n<dd><p>Augmented reality needs a camera and a phone's motion sensors, so it is a mobile feature. Desktop visitors still get the full 3D viewer and can rotate and zoom the product. Sending desktop shoppers to their phone with a QR code is part of the Pro version.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20variable%20products%3F\"><h3>Does it work with variable products?<\/h3><\/dt>\n<dd><p>Yes. A variable product shows the model attached to the product itself. Giving each individual variation its own model is available in the Pro version.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20store%20or%20load%20files%20from%20someone%20else%27s%20server%3F\"><h3>Will this slow down my store or load files from someone else's server?<\/h3><\/dt>\n<dd><p>The 3D viewer and its decoders are bundled with the plugin and served from your own site, so the storefront makes no request to any third-party CDN. The 3D model itself only loads for products where you have uploaded one.<\/p><\/dd>\n<dt id=\"is%20any%20customer%20data%20sent%20anywhere%3F\"><h3>Is any customer data sent anywhere?<\/h3><\/dt>\n<dd><p>No. Nothing about your customers or store visitors leaves your site. The only outbound requests are admin-only and are listed in full in the External services section below. View analytics are a Pro feature and record only anonymous product, view-type and device information.<\/p><\/dd>\n<dt id=\"do%20i%20have%20to%20pay%20or%20start%20a%20trial%20to%20use%20the%20free%20version%3F\"><h3>Do I have to pay or start a trial to use the free version?<\/h3><\/dt>\n<dd><p>No. Every feature listed under the free version works permanently, on every product, with no limits and no trial period.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Upgraded to DevDiggers Framework 1.1.0: admin screens now open instantly without a full page reload, with skeleton placeholders while a screen loads.<\/li>\n<li>Improved list screens: the title action buttons, search box, bulk actions and pagination now follow one consistent layout.<\/li>\n<li>Fixed minor PHP warnings and JavaScript errors seen after in-place navigation.<\/li>\n<li>Bug fixes and stability improvements.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial WordPress.org release.<\/li>\n<li>3D product viewer with a Photos \/ 3D View gallery toggle, with configurable colours.<\/li>\n<li>Native augmented reality on Android (Scene Viewer) and iOS (AR Quick Look).<\/li>\n<li>Per-product GLB \/ USDZ uploads.<\/li>\n<li>Bulk model manager with status filters and badges.<\/li>\n<li>Dashboard with AR model coverage stats.<\/li>\n<li>Guided setup wizard.<\/li>\n<\/ul>","raw_excerpt":"Show WooCommerce products in 3D and augmented reality. Shoppers rotate GLB models and view them in AR on Android and iOS, no app needed.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/kk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/347090","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/kk.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/kk.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=347090"}],"author":[{"embeddable":true,"href":"https:\/\/kk.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/devdiggers"}],"wp:attachment":[{"href":"https:\/\/kk.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=347090"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/kk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=347090"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/kk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=347090"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/kk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=347090"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/kk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=347090"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/kk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=347090"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}