{"id":384290,"date":"2026-10-12T02:38:19","date_gmt":"2026-10-12T02:38:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/cartessia-accessible-product-blocks-for-woocommerce\/"},"modified":"2026-10-12T02:37:55","modified_gmt":"2026-10-12T02:37:55","slug":"cartessia","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/cartessia\/","author":23382822,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.3","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Cartessia \u2014 Accessible Product Blocks for WooCommerce","header_author":"Rayetun","header_description":"Accessible-by-default WooCommerce blocks \u2014 variation swatches, quick view, live product customizer, delivery date picker, and wishlist \u2014 built on the Interactivity API to WCAG 2.2 AA.","assets_banners_color":"415f63","last_updated":"2026-10-12 02:37:55","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/wise.com\/pay\/me\/mdrayhanu2","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/cartessia\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":51,"num_ratings":0,"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":"rayetun","date":"2026-10-12 02:37:55","revision":3740379}},"upgrade_notice":{"1.0.0":"<p>First public release of Cartessia \u2014 five accessible WooCommerce blocks (variation swatches, quick view, product customizer, delivery date picker, and wishlist).<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3740379,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3740379,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3740379,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3740379,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3740379,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"cartessia\/swatches":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"cartessia\/swatches","version":"1.0.0","title":"Variation Swatches","category":"cartessia","icon":"art","description":"Accessible colour, image, and button swatches that replace the variation dropdowns on a variable product. Real radio-group semantics, full keyboard support, and a visible text label beside every colour. Built to WCAG 2.2 AA.","keywords":["woocommerce","swatches","variation","attribute","color"],"textdomain":"cartessia","usesContext":["postId"],"attributes":{"productId":{"type":"number","default":0},"preset":{"type":"string","default":"rounded"},"size":{"type":"string","default":"medium"},"showLabels":{"type":"boolean","default":true}},"supports":{"html":false,"align":["wide","full"],"spacing":{"margin":true,"padding":true}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"cartessia\/delivery-date":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"cartessia\/delivery-date","version":"1.0.0","title":"Delivery Date Picker","category":"cartessia","icon":"calendar-alt","description":"A fully keyboard- and screen-reader-accessible delivery date picker: a role=grid calendar with disabled-date rules, plus a native date input fallback. The chosen date is saved to the order. Built to WCAG 2.2 AA.","keywords":["woocommerce","delivery","date","calendar","shipping"],"textdomain":"cartessia","usesContext":["postId"],"attributes":{"productId":{"type":"number","default":0},"preset":{"type":"string","default":"popover"},"fieldLabel":{"type":"string","default":"Delivery date"},"minLeadDays":{"type":"number","default":2},"maxDays":{"type":"number","default":60},"disabledWeekdays":{"type":"array","default":[0]},"buttonText":{"type":"string","default":""}},"supports":{"html":false,"spacing":{"margin":true,"padding":true}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"cartessia\/customizer":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"cartessia\/customizer","version":"1.0.0","title":"Product Customizer","category":"cartessia","icon":"edit","description":"Let shoppers personalise a product \u2014 custom text\/engraving and priced options \u2014 with a running total that updates live and is announced to screen readers. Built to WCAG 2.2 AA.","keywords":["woocommerce","product add-ons","personalization","engraving","options"],"textdomain":"cartessia","usesContext":["postId"],"attributes":{"productId":{"type":"number","default":0},"textEnabled":{"type":"boolean","default":true},"textLabel":{"type":"string","default":"Personalization"},"textPlaceholder":{"type":"string","default":""},"textPrice":{"type":"number","default":0},"textMaxLength":{"type":"number","default":50},"optionsEnabled":{"type":"boolean","default":false},"optionsLabel":{"type":"string","default":"Options"},"options":{"type":"array","default":[]},"buttonText":{"type":"string","default":""}},"supports":{"html":false,"spacing":{"margin":true,"padding":true}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"cartessia\/quick-view":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"cartessia\/quick-view","version":"1.0.0","title":"Quick View","category":"cartessia","icon":"visibility","description":"An accessible Quick View button that opens a product preview in a focus-trapped dialog \u2014 variation swatches and add-to-cart work inside the modal. Built to WCAG 2.2 AA.","keywords":["woocommerce","quick view","product","modal","preview"],"textdomain":"cartessia","usesContext":["postId"],"attributes":{"productId":{"type":"number","default":0},"preset":{"type":"string","default":"centered"},"buttonText":{"type":"string","default":""},"imageSize":{"type":"string","default":"woocommerce_single"},"showPrice":{"type":"boolean","default":true},"showDescription":{"type":"boolean","default":true},"showViewLink":{"type":"boolean","default":true},"accentColor":{"type":"string","default":""},"closeColor":{"type":"string","default":""}},"supports":{"html":false,"spacing":{"margin":true,"padding":true}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"cartessia\/wishlist":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"cartessia\/wishlist","version":"1.0.0","title":"Wishlist Button","category":"cartessia","icon":"heart","description":"An accessible add\/remove wishlist toggle (aria-pressed) for a product. State is shared live across every toggle on the page; guests are stored in the browser, logged-in customers on their account. Built to WCAG 2.2 AA.","keywords":["woocommerce","wishlist","save","favorite","favourite"],"textdomain":"cartessia","usesContext":["postId"],"attributes":{"productId":{"type":"number","default":0},"preset":{"type":"string","default":"heart"},"addLabel":{"type":"string","default":""},"removeLabel":{"type":"string","default":""}},"supports":{"html":false,"spacing":{"margin":true,"padding":true}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"},"cartessia\/wishlist-items":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"cartessia\/wishlist-items","version":"1.0.0","title":"Wishlist","category":"cartessia","icon":"list-view","description":"Shows the products a shopper has saved to their wishlist, with a link and an accessible remove button for each. Renders client-side from the shared wishlist state, so it stays cache-safe. Built to WCAG 2.2 AA.","keywords":["woocommerce","wishlist","saved","favorites","favourites"],"textdomain":"cartessia","attributes":{"columns":{"type":"number","default":3}},"supports":{"html":false,"align":["wide"],"spacing":{"margin":true,"padding":true}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/render.php"}},"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3740379,"resolution":"1","location":"assets","locale":"","width":1280,"height":960},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3740379,"resolution":"10","location":"assets","locale":"","width":1280,"height":960},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3740379,"resolution":"2","location":"assets","locale":"","width":1280,"height":960},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3740379,"resolution":"3","location":"assets","locale":"","width":1280,"height":960},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3740379,"resolution":"4","location":"assets","locale":"","width":1280,"height":960},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3740379,"resolution":"5","location":"assets","locale":"","width":1280,"height":960},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3740379,"resolution":"6","location":"assets","locale":"","width":1280,"height":960},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3740379,"resolution":"7","location":"assets","locale":"","width":1280,"height":960},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3740379,"resolution":"8","location":"assets","locale":"","width":1280,"height":960},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3740379,"resolution":"9","location":"assets","locale":"","width":1280,"height":960}},"screenshots":{"1":"Variation Swatches on a product \u2014 accessible colour, image, and button styles, each with a name.","2":"Swatch settings on the attribute term screen \u2014 the Swatch colour picker and Swatch image media field.","3":"Quick View \u2014 the Centered modal preset with working add-to-cart and swatches inside.","4":"Quick View design presets \u2014 Side and Compact.","5":"Live Product Customizer \u2014 a custom-text field and priced options with the live total announced.","6":"Accessible Delivery Date Picker \u2014 the Calendar preset with disabled dates and keyboard focus.","7":"Delivery Date Picker design presets \u2014 Dropdown and Popover.","8":"Wishlist button states \u2014 Heart, Outline, and Text presets, with the saved (\"Remove\") state.","9":"Wishlist block \u2014 saved products in an accessible grid with a remove button on each.","10":"Block settings in the editor \u2014 pick a design preset and options for each block."}},"plugin_section":[],"plugin_tags":[1953,19156,130912,1666,286],"plugin_category":[34,45],"plugin_contributors":[263109],"plugin_business_model":[],"class_list":["post-384290","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-quick-view","plugin_tags-variation-swatches","plugin_tags-wishlist","plugin_tags-woocommerce","plugin_category-accessibility","plugin_category-ecommerce","plugin_contributors-rayetun","plugin_committers-rayetun"],"banners":{"banner":"https:\/\/ps.w.org\/cartessia\/assets\/banner-772x250.png?rev=3740379","banner_2x":"https:\/\/ps.w.org\/cartessia\/assets\/banner-1544x500.png?rev=3740379","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/cartessia\/assets\/icon.svg?rev=3740379","icon":"https:\/\/ps.w.org\/cartessia\/assets\/icon.svg?rev=3740379","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/cartessia\/assets\/screenshot-1.png?rev=3740379","caption":"Variation Swatches on a product \u2014 accessible colour, image, and button styles, each with a name."},{"src":"https:\/\/ps.w.org\/cartessia\/assets\/screenshot-2.png?rev=3740379","caption":"Swatch settings on the attribute term screen \u2014 the Swatch colour picker and Swatch image media field."},{"src":"https:\/\/ps.w.org\/cartessia\/assets\/screenshot-3.png?rev=3740379","caption":"Quick View \u2014 the Centered modal preset with working add-to-cart and swatches inside."},{"src":"https:\/\/ps.w.org\/cartessia\/assets\/screenshot-4.png?rev=3740379","caption":"Quick View design presets \u2014 Side and Compact."},{"src":"https:\/\/ps.w.org\/cartessia\/assets\/screenshot-5.png?rev=3740379","caption":"Live Product Customizer \u2014 a custom-text field and priced options with the live total announced."},{"src":"https:\/\/ps.w.org\/cartessia\/assets\/screenshot-6.png?rev=3740379","caption":"Accessible Delivery Date Picker \u2014 the Calendar preset with disabled dates and keyboard focus."},{"src":"https:\/\/ps.w.org\/cartessia\/assets\/screenshot-7.png?rev=3740379","caption":"Delivery Date Picker design presets \u2014 Dropdown and Popover."},{"src":"https:\/\/ps.w.org\/cartessia\/assets\/screenshot-8.png?rev=3740379","caption":"Wishlist button states \u2014 Heart, Outline, and Text presets, with the saved (\"Remove\") state."},{"src":"https:\/\/ps.w.org\/cartessia\/assets\/screenshot-9.png?rev=3740379","caption":"Wishlist block \u2014 saved products in an accessible grid with a remove button on each."},{"src":"https:\/\/ps.w.org\/cartessia\/assets\/screenshot-10.png?rev=3740379","caption":"Block settings in the editor \u2014 pick a design preset and options for each block."}],"raw_content":"<!--section=description-->\n<p>\ud83d\udecd\ufe0f <strong>Cartessia<\/strong> adds the interactive <strong>WooCommerce<\/strong> blocks shoppers expect \u2014 <strong>variation swatches<\/strong>, a <strong>product quick view<\/strong>, a <strong>live product customizer<\/strong>, a <strong>delivery date picker<\/strong>, and a <strong>wishlist<\/strong> \u2014 and builds every one of them to be <strong>keyboard-operable and screen-reader-correct against WCAG 2.2 Level AA<\/strong> out of the box.<\/p>\n\n<p>Most third-party swatch, quick-view, and wishlist plugins quietly break keyboard support and mislead screen readers \u2014 colour swatches with no name, modals that trap or lose focus, \"Add to wishlist\" toggles that say nothing when saved. Cartessia is the opposite: <strong>accessible is the definition of done, not a paid tier<\/strong>. Each block ships several <strong>design presets<\/strong>, so it looks right with zero custom CSS, and inherits your theme's colours and typography.<\/p>\n\n<p>Cartessia is built the modern WordPress way \u2014 the <strong>Interactivity API<\/strong>, <strong>Block API v3<\/strong> (<code>block.json<\/code>), and <strong>server-side rendering<\/strong>. No jQuery, no framework runtime on your shop pages, and each block's script loads only where it's used. Every block renders on the server and is only <em>enhanced<\/em> by a little JavaScript, so it holds up for screen readers, search engines, and slow connections.<\/p>\n\n<h4>\ud83e\uddf1 The Blocks<\/h4>\n\n<ul>\n<li>\ud83c\udfa8 <strong>Variation Swatches<\/strong> \u2014 turn WooCommerce variation dropdowns into <strong>colour, image, and button swatches<\/strong>. A real radio-group (arrow-key navigable, selection announced), never colour alone \u2014 every swatch keeps an accessible name. It drives WooCommerce's own variation form, so add-to-cart, price, and stock stay correct, and a <strong>no-JS fallback<\/strong> keeps the native dropdowns working.<\/li>\n<li>\ud83e\ude9f <strong>Quick View<\/strong> \u2014 open product details in an <strong>accessible modal<\/strong> without leaving the page. Built on the native <code>&lt;dialog&gt;<\/code> element: focus moved in and <strong>returned<\/strong> to the trigger, Escape always closes, background made inert \u2014 no focus-trap hacks. Swatches work inside the modal and add-to-cart goes through the WooCommerce <strong>Store API<\/strong>. Three presets: <strong>Centered, Side, Compact<\/strong>.<\/li>\n<li>\ud83e\uddf0 <strong>Live Product Customizer<\/strong> \u2014 let customers <strong>personalise a product<\/strong> with a custom-text field and priced add-on options, with the <strong>live total announced to screen readers<\/strong>. Prices are <strong>server-authoritative<\/strong> (HMAC-signed), so the browser can't tamper with them, and the customer's choices carry through to the <strong>cart, checkout, and the order<\/strong> (and its emails).<\/li>\n<li>\ud83d\udcc5 <strong>Accessible Delivery Date Picker<\/strong> \u2014 let customers choose a <strong>delivery date<\/strong> on the product page. A real <strong>ARIA grid calendar<\/strong> with full keyboard support, disabled dates announced, and locale-aware month and weekday names plus your site's start-of-week \u2014 with a native <code>&lt;input type=\"date\"&gt;<\/code> fallback. Your rules (<strong>minimum lead time, booking window, disabled weekdays<\/strong>) are enforced <strong>on the server<\/strong>, and the chosen date is saved to the cart and the order. Three presets: <strong>Calendar, Dropdown, Popover<\/strong>.<\/li>\n<li>\ud83d\udc97 <strong>Wishlist<\/strong> \u2014 a <strong>save-for-later<\/strong> toggle for any product. It uses <code>aria-pressed<\/code> and changes its name to \"Remove \u2026\" when saved (<strong>never colour alone<\/strong>). <strong>Guests<\/strong> are saved in their browser; <strong>logged-in customers<\/strong> are saved to their account and follow them across devices. A companion <strong>Wishlist<\/strong> display block lists saved products with a remove button on each. Three presets: <strong>Heart, Outline, Text<\/strong>.<\/li>\n<\/ul>\n\n<p>Every block on a page shares one Interactivity API store, so selecting a swatch or saving to the wishlist updates everywhere live, without a reload.<\/p>\n\n<h4>\u267f Accessible By Default<\/h4>\n\n<ul>\n<li>\u2328\ufe0f <strong>Full keyboard operation<\/strong> \u2014 every control is a real button, radio, or grid cell, reachable and operable without a mouse<\/li>\n<li>\ud83d\udd0a <strong>Screen-reader correct<\/strong> \u2014 selections, totals, chosen dates, and saved state are announced; decorative icons are hidden<\/li>\n<li>\ud83c\udfaf <strong>Target sizes<\/strong> \u2014 interactive controls meet the WCAG 2.2 <strong>24\u00d724px<\/strong> minimum<\/li>\n<li>\ud83c\udf17 <strong>Respects the visitor<\/strong> \u2014 honours <code>prefers-color-scheme<\/code> (dark mode) and <code>prefers-reduced-motion<\/code><\/li>\n<li>\ud83d\udc41\ufe0f <strong>Visible focus<\/strong> \u2014 a clear focus ring on every interactive element<\/li>\n<li>\ud83c\udf10 <strong>RTL<\/strong> \u2014 full right-to-left layout support<\/li>\n<\/ul>\n\n<h4>\ud83d\udd12 Trustworthy Commerce<\/h4>\n\n<ul>\n<li>\ud83e\uddfe <strong>Server-authoritative pricing<\/strong> \u2014 custom-option prices and delivery rules are <strong>HMAC-signed<\/strong>; the server re-validates every add-to-cart, so a customer can't forge a price or bypass a delivery rule from the browser<\/li>\n<li>\ud83c\udfec <strong>HPOS-safe<\/strong> \u2014 reads and writes everything through <strong>WooCommerce CRUD<\/strong> and declares High-Performance Order Storage compatibility; it never touches order tables directly<\/li>\n<li>\u26a1 <strong>Cache-friendly<\/strong> \u2014 personalised state (like wishlist membership) hydrates in the browser, so nothing user-specific is baked into cached HTML<\/li>\n<li>\ud83d\udeab <strong>No data collection<\/strong> \u2014 no telemetry, no phone-home, no account, no external services<\/li>\n<\/ul>\n\n<h4>\ud83d\udeab What Cartessia Will Not Do<\/h4>\n\n<ul>\n<li>\u274c <strong>No accessibility overlay<\/strong> \u2014 no floating widget, no \"profiles\". Cartessia builds correct markup instead of layering a widget over broken markup<\/li>\n<li>\u274c <strong>No fake urgency<\/strong> \u2014 no invented \"12 people are viewing this\" or countdown scarcity in the free blocks<\/li>\n<li>\u274c <strong>No jQuery bloat<\/strong> \u2014 built on core APIs, with per-block scripts that load only where used<\/li>\n<li>\u274c <strong>No lock-in<\/strong> \u2014 deactivate and your products, orders, and media are untouched<\/li>\n<\/ul>\n\n<p>Want accessible blocks for the <em>rest<\/em> of your site \u2014 modals, sliders, tables, mega menus, and a full accessibility toolkit? See the sibling plugin <strong>Rayetun Accessible Blocks &amp; Accessibility Toolkit<\/strong>.<\/p>\n\n<h3>Development<\/h3>\n\n<p>Cartessia is open source and built with the official <a href=\"https:\/\/www.npmjs.com\/package\/@wordpress\/scripts\">@wordpress\/scripts<\/a> toolchain. The complete, unminified source for every block ships in the plugin's <code>src\/<\/code> directory; the files in <code>build\/<\/code> are compiled from it. Nothing is obfuscated.<\/p>\n\n<p>To build from source:<\/p>\n\n<pre><code>npm install &amp;&amp; npm run build\n<\/code><\/pre>\n\n<p>That regenerates everything in <code>build\/<\/code>. No build step is needed to <em>use<\/em> the plugin \u2014 the compiled output is included.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Make sure <strong>WooCommerce<\/strong> is installed and active \u2014 Cartessia lists it as a required plugin.<\/li>\n<li>Upload the <code>cartessia<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install via <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Activate <strong>Cartessia<\/strong> through the <strong>Plugins<\/strong> screen.<\/li>\n<li>Add any Cartessia block from the block inserter \u2014 look for the <strong>Cartessia<\/strong> category \u2014 on a product page, shop template, or any post or page.<\/li>\n<li>For colour and image swatches, set them once per attribute value at <strong>Products \u2192 Attributes \u2192 (your attribute) \u2192 Configure terms<\/strong>, then edit a term (e.g. <em>Black<\/em>, <em>Sky<\/em>) and use the <strong>Swatch colour<\/strong> \/ <strong>Swatch image<\/strong> fields.<\/li>\n<\/ol>\n\n<p>No configuration is required to get started.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"%F0%9F%9B%92%20does%20cartessia%20require%20woocommerce%3F\"><h3>\ud83d\uded2 Does Cartessia require WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Cartessia is declared as dependent on WooCommerce. If WooCommerce is not active, Cartessia's blocks stay hidden and it never causes a fatal error.<\/p><\/dd>\n<dt id=\"%E2%99%BF%20is%20it%20really%20accessible%2C%20and%20to%20which%20wcag%20version%3F\"><h3>\u267f Is it really accessible, and to which WCAG version?<\/h3><\/dt>\n<dd><p>Yes \u2014 <strong>WCAG 2.2 Level AA<\/strong> is the target for every block: keyboard operation, focus management, screen-reader announcements, visible focus, and 24\u00d724px target sizes. Automated checks are a floor, not a certificate, so each block is also exercised with a real screen reader. No plugin can make an entire <em>site<\/em> compliant \u2014 your content and design decide most of that \u2014 but Cartessia owns the part a plugin can: correct, accessible interactive components.<\/p><\/dd>\n<dt id=\"%F0%9F%8E%A8%20how%20do%20i%20set%20swatch%20colours%20and%20images%3F\"><h3>\ud83c\udfa8 How do I set swatch colours and images?<\/h3><\/dt>\n<dd><p>Swatches read from the <strong>attribute term<\/strong>, not the product. Go to <strong>Products \u2192 Attributes<\/strong>, click <strong>Configure terms<\/strong> next to your attribute (e.g. <em>Color<\/em>), then <strong>Edit<\/strong> a term such as <em>Black<\/em> or <em>Sky<\/em>. You'll find a <strong>Swatch colour<\/strong> picker and a <strong>Swatch image<\/strong> media field there. An image takes precedence over a colour; leave both empty for a text\/button swatch.<\/p><\/dd>\n<dt id=\"%F0%9F%A7%A9%20which%20products%20does%20each%20block%20work%20with%3F\"><h3>\ud83e\udde9 Which products does each block work with?<\/h3><\/dt>\n<dd><p>Variation Swatches and Quick View are for <strong>variable products<\/strong> (they use your global product attributes). The Live Product Customizer and Delivery Date Picker are for <strong>simple products<\/strong>. The Wishlist works with any product.<\/p><\/dd>\n<dt id=\"%F0%9F%94%92%20can%20a%20customer%20fake%20the%20price%20of%20a%20custom%20option%20or%20bypass%20a%20delivery%20rule%3F\"><h3>\ud83d\udd12 Can a customer fake the price of a custom option or bypass a delivery rule?<\/h3><\/dt>\n<dd><p>No. Option prices and delivery rules are <strong>HMAC-signed<\/strong> and re-validated on the server on every add-to-cart, so values tampered with in the browser are rejected. The server is always the source of truth for price.<\/p><\/dd>\n<dt id=\"%E2%9A%A1%20is%20it%20fast%3F%20what%20is%20it%20built%20on%3F\"><h3>\u26a1 Is it fast? What is it built on?<\/h3><\/dt>\n<dd><p>Built on official core APIs \u2014 the <strong>Interactivity API<\/strong>, <strong>Block API v3<\/strong> (<code>block.json<\/code>), and <strong>server-side rendering<\/strong>. There's no jQuery and no extra framework runtime on your visitors' pages, and each block's script loads only where it's used. Because every block is rendered on the server and only enhanced by JavaScript, it works even before that script loads.<\/p><\/dd>\n<dt id=\"%F0%9F%8C%97%20does%20it%20support%20dark%20mode%20and%20reduced%20motion%3F\"><h3>\ud83c\udf17 Does it support dark mode and reduced motion?<\/h3><\/dt>\n<dd><p>Yes. Blocks honour the visitor's <code>prefers-color-scheme<\/code> (dark mode) and skip non-essential animation for anyone who requests <code>prefers-reduced-motion<\/code>.<\/p><\/dd>\n<dt id=\"%F0%9F%92%BE%20where%20is%20wishlist%20data%20stored%3F\"><h3>\ud83d\udcbe Where is wishlist data stored?<\/h3><\/dt>\n<dd><p>For <strong>guests<\/strong>, in their own browser (localStorage) \u2014 nothing is sent anywhere. For <strong>logged-in customers<\/strong>, in their WordPress user account, so a wishlist follows them across devices. The two merge when a guest logs in.<\/p><\/dd>\n<dt id=\"%F0%9F%8F%AC%20is%20it%20compatible%20with%20high-performance%20order%20storage%20%28hpos%29%3F\"><h3>\ud83c\udfec Is it compatible with High-Performance Order Storage (HPOS)?<\/h3><\/dt>\n<dd><p>Yes. Cartessia reads and writes all order data through WooCommerce CRUD and declares HPOS compatibility.<\/p><\/dd>\n<dt id=\"%F0%9F%93%A4%20does%20cartessia%20send%20my%20data%20anywhere%3F\"><h3>\ud83d\udce4 Does Cartessia send my data anywhere?<\/h3><\/dt>\n<dd><p>No. There is no telemetry, no phone-home, no account, and no external services. Everything runs on your own site.<\/p><\/dd>\n<dt id=\"%E2%99%BB%EF%B8%8F%20what%20happens%20if%20i%20uninstall%20cartessia%3F\"><h3>\u267b\ufe0f What happens if I uninstall Cartessia?<\/h3><\/dt>\n<dd><p>Cartessia's blocks stop rendering and its options are removed cleanly. Your products, orders, media, and attribute terms are your own WooCommerce data and are never touched.<\/p><\/dd>\n<dt id=\"%F0%9F%92%AC%20where%20do%20i%20get%20support%3F\"><h3>\ud83d\udcac Where do I get support?<\/h3><\/dt>\n<dd><p>Post in the <a href=\"https:\/\/wordpress.org\/support\/plugin\/cartessia\/\">WordPress.org support forum<\/a>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>\ud83c\udf89 1.0.0<\/h4>\n\n<ul>\n<li>Initial release \u2014 five accessible WooCommerce blocks, each to WCAG 2.2 AA with multiple design presets:<\/li>\n<li>New: \ud83c\udfa8 <strong>Variation Swatches<\/strong> \u2014 colour\/image\/button swatches with real radio-group semantics, roving-tabindex keyboard support, accessible names (never colour alone), and a no-JS fallback. Colours and images set per attribute term.<\/li>\n<li>New: \ud83e\ude9f <strong>Quick View<\/strong> \u2014 an accessible product modal on the native <code>&lt;dialog&gt;<\/code> element (focus moved in and returned, Escape to close, background inert), with in-modal swatches and Store API add-to-cart. Presets: Centered, Side, Compact.<\/li>\n<li>New: \ud83e\uddf0 <strong>Live Product Customizer<\/strong> \u2014 custom-text and priced add-on options with a screen-reader-announced live total; HMAC-signed, server-authoritative pricing; choices carried into cart, checkout, and the order.<\/li>\n<li>New: \ud83d\udcc5 <strong>Accessible Delivery Date Picker<\/strong> \u2014 an ARIA-grid calendar with a native date-input fallback, full keyboard support, announced disabled dates, locale-aware month\/weekday names and start-of-week, and server-enforced lead-time\/window\/disabled-weekday rules saved to the order. Presets: Calendar, Dropdown, Popover.<\/li>\n<li>New: \ud83d\udc97 <strong>Wishlist<\/strong> \u2014 an <code>aria-pressed<\/code> save toggle (name changes to \"Remove \u2026\" when saved) with guest (localStorage) and logged-in (user account) storage, plus a companion Wishlist display block. Presets: Heart, Outline, Text.<\/li>\n<li>Built on the WordPress Interactivity API, Block API v3, and server-side rendering. HPOS-safe (WooCommerce CRUD only), cache-friendly, RTL-ready, dark-mode and reduced-motion aware. No telemetry and no external services.<\/li>\n<\/ul>","raw_excerpt":"Accessible WooCommerce blocks \u2014 variation swatches, quick view, product customizer, delivery date picker, and wishlist. WCAG 2.2 AA, no overlay.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/384290","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=384290"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rayetun"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=384290"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=384290"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=384290"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=384290"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=384290"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=384290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}