=== Tarot Card Oracle ===

Contributors: chillichalli
Donate link: https://paypal.me/cartouchecards?locale.x=en_US
Tags: tarot, oracle, cartouche, runes, tarot reading, oracle cards, tarot spread, divination
Requires at least: 4.6
Tested up to: 6.9
Stable tag: 1.3.1
Requires PHP: 7.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Create tarot, oracle, cartouche, and rune readings on your WordPress site using your own decks, spreads, and meanings.

== Description ==

Tarot Card Oracle helps you publish interactive readings on your WordPress site using your own deck artwork, your own spreads, and your own interpretations.

If a card needs a different meaning depending on where it lands in a spread, you can do that. Define a unique interpretation for each card in each position.

Ideal for
* Tarot readers and professional practitioners
* Oracle deck creators and writers
* Coaches and creators who want interactive content
* Rune and cartouche style readings

What visitors can do
* Draw cards for a full spread reading
* Draw a daily card
* Draw a random card
* Optionally type a question before drawing
* Shuffle the deck with a realistic animation before selecting cards

What you can build in WordPress admin
* Readings (spreads)
* Positions for each reading
* Cards with your own images and text
* Descriptions that connect one card, one position, and one reading

Premium features
* Validation wizard to spot missing links and configuration problems
* Payment enabled readings
* Email list and marketing integrations, including ActiveCampaign, MailChimp, and Brevo
* Additional layouts and display options

Free version note
Older reviews may mention limits from earlier versions. Those limits were removed in version 1.0.0. If you need payments, integrations, or validation tools, Premium is the right fit.

== Quick start ==

1. Install and activate the plugin
2. Go to Card Oracle, then Demo Data, and install the sample reading
3. Go to Card Oracle, then Dashboard, and copy the shortcode or use the Gutenberg block
4. Paste it into a page and preview

Tip: Start with Demo Data first, then create your own reading using the Wizard.

== Gutenberg block ==

Version 1.1.9 includes a dedicated Card Oracle Reading block.
1. In the block editor, add a new block
2. Search for Card Oracle Reading
3. Choose Daily Card, Random Card, or Full Reading
4. Pick your reading from the dropdown

No IDs needed, and it generates the correct shortcode automatically.

== Videos ==

Overview: [youtube https://youtu.be/1smjZpmUeNE]

More setup videos: https://www.chillichalli.com/tarot-card-oracle-videos/
YouTube channel: https://www.youtube.com/channel/UCa2PDf86FYDSsdYV5dDd0ew

== Installation ==

1. Upload the plugin files to the /wp-content/plugins/ directory, or install through the WordPress Plugins screen
2. Activate the plugin through the Plugins screen in WordPress
3. Go to Card Oracle, then Dashboard
4. Add readings to your posts or pages using either
   * Card Oracle Reading Gutenberg block
   * Shortcodes with reading names or IDs

== Shortcodes ==

Use reading slug for clean, readable embeds
[card-oracle name="past-present-future-demo"]
[card-oracle-daily name="daily-inspiration"]
[card-oracle-random name="celtic-cross"]

Fallback to IDs when needed
[card-oracle id="123"]
[card-oracle-daily id="45"]
[card-oracle-random id="67"]

Optional attributes
[card-oracle name="lover-s-choice" layout="spread" reverse="yes"]

== Frequently Asked Questions ==

= How do I start if I feel overwhelmed =
Start with Demo Data and the videos.
Then use the Wizard to generate the structure for a new reading.
Links are in the Videos section above.

= What is the best way to build a reading =
Use the Wizard.
If you prefer manual setup, follow this order
1. Create a Reading
2. Create Positions and assign them to the Reading
3. Create Cards and assign them to the Reading
4. Create Descriptions for each Card in each Position
5. Embed the Reading using the Gutenberg block or shortcode

= How do I display a reading on my site =
Use the Gutenberg block or copy a shortcode from Card Oracle Dashboard.
You can embed by slug using the name attribute, or by ID.

= Can I use reading names instead of IDs in shortcodes =
Yes. As of version 1.1.9, you can use reading slugs with the name attribute.
The plugin looks for a slug match first, then falls back to the reading title.

= How does the shuffle cards feature work =
Version 1.1.9 includes a shuffle button that animates the deck and randomizes card order before you select cards.
You can shuffle as many times as you want before drawing.

= How does the email system report work =
On the Status tab, click Email system report.
The plugin will try to open your email client with a pre filled message to support@chillichalli.com.
If your email client does not open, it falls back to a copy method.

= Where are settings located =
WordPress Admin, then Settings, then Card Oracle.
You can configure RSS feed checking, cache duration, debug logging, default deck, and default draw count.

= Which payment providers are supported in Premium =
Premium includes payment enabled readings.
If you use payments, ensure you are on the latest Premium version and review the Payment Provider settings screen, as provider availability depends on your Premium build.

== Screenshots ==

1. Front end reading example
2. Front end results example
3. Mobile view example
4. Card Oracle Dashboard overview
5. Add New Reading page
6. Add New Positions page
7. Add New Cards page
8. Add New Descriptions page
9. Validation wizard (Premium)
10. Integrations (Premium)

== Changelog ==

= 1.3.1 =
* Security: Hardening of the reading-email and payment-handling features. We recommend all sites update.
* Fix: The Shuffle Cards "No" setting now saves correctly per reading.
* Fix: Daily and random card shortcodes are now cached per reading, so multiple shortcodes no longer all show the same card.
* Fix: Stability and reliability improvements to reading display and bulk card import.

= 1.3.0 =
* Update: Freemius SDK updated to 2.13.2.
* New: WooCommerce integration — gate a reading behind a WooCommerce product purchase.
* New: Easy Digital Downloads integration — gate a reading behind an EDD purchase.
* New: Native Divi module and Elementor widget for placing a Card Oracle reading.
* New: Per-reading background image and accent color picker.
* New: Per-card audio playback on the reveal page.
* New: Progressive-enhancement AJAX reveal — reading results appear without a full page reload.
* New: Bulk card import (CSV/JSON) on the Wizard tab.
* New: RTL language support via CSS logical properties.
* New: Responsive images (srcset) on the card reveal page.
* New: Per-reading payment-button text override.
* New: "Force HTTPS for images" general setting.
* New: Additional Status-tab diagnostics and a user-facing Clear Cache button.
* Fix: Reverse card descriptions now save correctly.
* Fix: Reading interpretation emails send again after the AJAX reveal.
* Fix: Card front and back no longer display at the same time in the circle, overlapping, and spread layouts.
* Fix: In-admin documentation (User Guide, Help, etc.) now ships with the plugin.

= 1.2.6.1 =
* Fix: Free admin pages no longer fatal with "Call to undefined function card_oracle_normalize_integration_slug()" / "card_oracle_get_brevo_option()". Both helpers were defined only in the premium-only file but called from a non-premium-gated settings callback, which crashed every free admin page load on admin_init. Moved both functions into the non-premium core so they're available regardless of license tier.

= 1.2.6 =
* Fix: Strip the bundled Stripe PHP SDK from the free build. Free users never load the Stripe directory, but it was shipping in the WordPress.org zip and triggering PHP Compatibility Checker warnings on user sites.
* Fix: Defensive line-level patch in the vendored Stripe SDK CurlClient so callbacks receive the original parameter values rather than the post-strtolower values. Silences a Compatibility Checker false-positive flagged on PHP 7.0+.
* Fix: Suppress two intentional PHPCS warnings (admin status diagnostic, vendored SDK) so GitHub Actions CI passes; also exclude the release/ build-artifact directory from local phpcs scans.

= 1.2.5.1 =
* Fix: Wrap Freemius SDK initialization in a Throwable guard so that an upstream failure (API rate limit, missing autoload, PHP fatal in the SDK, or a conflict with another Freemius-powered plugin bundling a different SDK version) no longer locks administrators out of wp-admin. On failure the plugin falls back to a free-mode safe stub and logs the error to the PHP error log.

= 1.2.5 =
* Update: Freemius SDK updated to 2.13.1.

= 1.2.4 =
* New: Per-reading shuffle toggle — admins can disable card shuffling and the shuffle button on individual readings.
* Fix: Elementor Pro Forms and other AJAX plugins no longer blocked by "You do not have sufficient permissions" error when Card Oracle is active.
* Fix: PayPal IPN listener, Stripe handler, and RSS feed registration no longer run during AJAX requests.
* Fix: Missing exit after payment redirect no longer causes unexpected output on AJAX requests.
* Fix: Improved error handling and logging across payment processing, email sending, and admin operations.
* Fix: Circle layout CSS cleaned up — removed dead code in orientation queries and redundant media query rules.

= 1.2.3 =
* Fix: Plugin CSS, JavaScript, and Stripe.js now load only on pages with Card Oracle shortcodes, resolving conflicts with Elementor forms and other AJAX plugins.
* Fix: Removed Elementor frontend hooks that were loading all assets globally when Elementor Pro was active.
* Fix: Malformed RSS feed Content-Type header.
* Fix: Mailchimp API key validation now uses WordPress HTTP API instead of cURL for better host compatibility.
* Fix: Settings saved notification now displays as green success notice.

= 1.2.2 =
* Fix: Card images now display correctly after demo data import by relinking attachments to card posts.
* Fix: Mailchimp subscriber integration no longer errors when email already exists on list.

= 1.2.1 =
* Fix: Demo data images now display correctly after import by loading required WordPress image processing library.
* Fix: Added error handling for image upload failures during demo data import.

= 1.2.0 =
* New: Minimum PHP version updated to 7.4.
* New: Stripe integration upgraded to v3 PaymentIntents API.
* New: Newsletter integration for Stripe and PayPal payments (Premium).
* New: PayPal IPN URL display field in payment settings (Premium).
* New: Markdown documentation viewer with in-admin help system.
* New: Confirmation modal for demo reading removal.
* New: Duplicate reading name warning in wizard.
* New: Orphaned shortcode validation on Validation page.
* New: Card Oracle debug log viewer in Status tab.
* New: Visual selector for question display layout.
* New: Progress modal for Wizard page operations.
* New: Affiliate link field for Powered By badge.
* Enhancement: Modernized admin UI with consistent card styling.
* Enhancement: Improved wizard UI with visual grouping.
* Enhancement: Better presentation examples modal with grid layout.
* Fix: PayPal return URL and IPN endpoint issues (Premium).
* Fix: Stripe payment confirmation errors (Premium).
* Fix: Critical CSRF vulnerability in validation.
* Fix: Apostrophes in questions breaking email and newsletter.
* Fix: Powered By toggle not respecting settings.
* Fix: Various layout and CSS issues across screen sizes.
* Fix: Elementor page builder compatibility.

= 1.1.9 =
* New: Poker Wash Shuffle, realistic wash animation with cards scattering, mixing, and returning to original positions.
* New: Gutenberg block for adding Card Oracle readings, block with dropdown selection.
* New: Shortcode support for reading names, use readable names instead of IDs.
* New: Email system report functionality, Status page tries to email reports directly to support.
* New: Automated MD5 file integrity checking during build process.
* Enhancement: Backwards compatibility maintained for existing ID based shortcodes.
* Enhancement: Improved user experience with name based shortcode parameters.
* Enhancement: Enhanced system report with performance metrics and WordPress configuration data.
* Fix: CSS layout issues, resolved text and image overlap in reading results display.
* Fix: Responsive design improvements across all screen sizes.
* Fix: PHP 8.2 compatibility, resolved deprecated dynamic property warnings.
* Fix: Gutenberg block shortcode execution on frontend pages.
* New: WordPress Settings page, Card Oracle settings page under WP Settings.

= 1.1.8 =
* New: Update Freemius to use composer.
* Fix: Email sender address.

= 1.1.7 =
* New: Update Freemius
* New: Update WordPress version

= 1.1.6 =
* New: Update Freemius to version 2.5.10
* Tweak: Code cleanup
* Fix: Remove unused files

= 1.1.5 =
* New: Update Freemius to version 2.5.6

= 1.1.4 =
* New: Update Freemius to version 2.5.4

= 1.1.3 =
* New: Reading can be set to open in a new browser window or tab
* Tweak: Code cleanup

= 1.1.2 =
* New: Can add all Major and Minor Marseille Tarot Deck cards to Media using Demo Data
* Fix: Reversed card alignment
* Fix: Email button not appearing
* Fix: Toggle switch icons hidden

= 1.1.1 =
* Fix: Code cleanup

= 1.1.0 =
* New: Add Stripe payment options (Premium)

= 1.0.0 =
* New: Removed the limits for readings, positions, and cards for the free version

== Translations ==

* English
* French
* German
* Portuguese
* Spanish

== How to ==

Tarot Card Oracle is built from four core parts
1. Readings, the spread definitions
2. Positions, the slots inside a reading
3. Cards, your deck
4. Descriptions, the meaning of one card in one position for one reading

If something feels missing on the front end, check this order
* Positions are assigned to the Reading
* Cards are assigned to the Reading
* Descriptions are linked to both a Card and a Position

Admin menus
* Dashboard, overview and embed tools
* Readings, define spreads
* Positions, define and assign positions
* Cards, define cards and assign to readings
* Descriptions, define meanings per card and per position
* Demo Data, install sample reading and sample media
* Wizard, create a reading framework quickly
* Status, system info and recent logs
* Orders (Premium), payment enabled reading orders
* Validation (Premium), find and fix configuration gaps

== Security ==

For vulnerability notifications or responsible disclosure, please review SECURITY.md in the repository.

