=== VEFmusic ===
Contributors: vimagesericfabre
Author URI: https://v-images.com
Tags: music, band, audio player, gutenberg blocks, events
Requires at least: 6.0
Tested up to: 7.1
Requires PHP: 8.2
Stable tag: 2.15.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Showcase your band online: audio player, albums, shows, an auto-generated press kit, SEO data — native blocks, no shortcode.

== Description ==

VEFmusic is a free plugin for a band's website: an audio player with tracks and albums, a show calendar, an auto-generated press kit for media and journalists, visitor ratings, and automatic SEO structured data — all through native blocks, no shortcode required.

**Press kit generator (EPK) — built in, free**

Generate a professional PDF press kit in one click, built directly from your existing tracks, albums, shows and band bio — no separate document to write and keep up to date by hand.

* Auto-built from your published content: biography, links & social media, albums with covers, upcoming shows
* Add as many custom text sections as you need, each with its own title — rich text (bold, italic, lists, clickable links)
* Choose the order sections appear in, to match how you want to present your band
* Multi-page PDF with fully automatic pagination — a long biography or a long custom section is never cut off
* Optional downloadable zip: PDF + album covers + selected audio previews + extra photos
* Optional contact form gate (off by default), with a log of received requests in the admin

**Content**

* Track, Album and Show post types, with a Genre taxonomy
* Bulk import: select several audio files at once (e.g. a whole album) to create matching draft tracks in one go, with tags read automatically (title, duration, track number, album, genre) — reviewed and confirmed before publishing
* Track: duration, parent album, listening mode (preview, free full listen, or buyers only), audio file (MP3, WAV, FLAC, OGG, M4A)
* Album: release year, front/back cover, collapsible tracklist
* Show: date, venue, address, image, external ticketing link, optional venue link, free-text price note

**Player**

* SVG icons, clickable progress bar, volume, a real-time audio equalizer
* Fully keyboard-accessible, with ARIA labels reflecting the real playback state
* Automatic lightweight MP3 version generated from a FLAC/WAV master file where hosting allows it

**Accessibility**

* Player: keyboard-operable progress bar and volume, ARIA labels reflecting the real playback state, visible keyboard focus
* Visitor rating form: grouped/labeled star options, screen-reader-only labels, live status region on submission
* Lyrics toggle: proper expanded/collapsed state exposed to assistive technology
* Descriptive alt text on show posters and album covers; external links (tickets, venue, social) flagged as opening a new tab
* Random Player block: an in-admin warning flags that autoplaying sound can be an obstacle for visually impaired visitors relying on a screen reader — weigh this before using it on your site

**Blocks**

Six native Gutenberg blocks — Track List, Album, Shows, Next Show, Past Shows, Random Player — with six matching native Divi 5 modules and six matching native Elementor widgets, all sharing the same server-side rendering.

**More**

* Visitor ratings (moderated) for tracks, albums and shows
* Automatic schema.org structured data for search engines
* Anonymous listening statistics — no IP address, cookie or identifier ever stored
* Settings export/import for deploying the same identity/style on a new site

= Selling music? VEFmusic Pro =

VEFmusic itself never sells anything — it stays a pure showcase plugin, forever free. [VEFmusic Pro](https://v-images.com/plugin-vefmusic/) is a separate paid extension (installed in addition to VEFmusic, which it requires) adding a full sales and ticketing layer:

* Sell individual tracks and albums, with secure time-limited download links
* Accept donations
* Merch store — your own products, or print-on-demand via Printful with no separate store plugin
* Internal ticketing with QR-code entry, in addition to the free external ticketing link
* Promo codes
* Preorders / crowdfunding campaigns, with optional funding tiers
* Customer accounts — no WordPress account required, secure passwordless access by email link
* Revenue split tracking between band members
* Sales statistics and accounting export (CSV)
* PayPal and Stripe payment
* Admin-managed refunds, including legally compliant withdrawal/right-of-return handling

Every Pro feature reuses your existing VEFmusic content (tracks, albums, shows) — nothing to set up twice.

== Installation ==

1. Upload the `vefmusic` folder to `/wp-content/plugins/`, or install it through the WordPress admin under Plugins > Add New.
2. Activate the plugin.
3. Go to **VEFmusic > General** to enter your band's identity.
4. Add your tracks, albums and shows, then place the blocks on your pages.

== Frequently Asked Questions ==

= Does this plugin sell anything? =

No. VEFmusic is a showcase plugin only. Selling tracks, albums, merch, tickets, or accepting donations requires the separate VEFmusic Pro extension.

= Do I need Divi or Elementor? =

No. VEFmusic works with the native WordPress block editor (Gutenberg) out of the box. Divi 5 and Elementor support is provided in addition, not required.

= Where are my audio files stored? =

Outside the media library, in a protected location never accessible by direct link — playback always goes through an access check based on the track's listening mode.

= Can I use this plugin for any band, or is it built for a specific one? =

VEFmusic is fully generic: nothing is hard-coded, everything comes from your own settings and content.

== External services ==

This plugin connects to a support service operated by V-IMAGES (v-images.com), the plugin's publisher, only when you explicitly fill in and submit the "Support & feature requests" form (VEFmusic > Help > Support & feature requests tab). It is never contacted automatically or in the background.

When you submit that form, the following is sent: your reply-to email address, the subject and message you typed, your site's URL, the VEFmusic (and, if installed, VEFmusic Pro) version numbers, your WordPress version, your PHP version, and your active theme's name and version. This lets the publisher reply to your request with the relevant technical context, without you having to copy it in by hand.

This service is provided by V-IMAGES (Eric Fabre): [Terms of use](https://v-images.com/cgv-cgu/), [Privacy policy](https://v-images.com/politique-de-cookies-eu/).

== Screenshots ==

1. Track List block on the front end.
2. Album block with cover and tracklist.
3. Shows block, featured mode with countdown.
4. Style settings screen.

== Changelog ==

= 2.15.1 =
* Fixed: Track List / Album — the "Add to cart" button (with the price) now stays pinned to the right edge of the row at any width, even when the waveform is hidden (track not playing) or the comment wraps onto two lines.
* Changed: "Show lyrics" reverted to its position just below the progress bar, inside the track's text column (not a separate full-width centered row as in 2.15.0) — matches the layout confirmed with a beta tester.

= 2.15.0 =
* Added: Shows list — a "Duplicate" action next to Edit/Delete, copying a show as a new draft (venue, links, price, capacity, image...) — the date is intentionally left blank on the copy, so you set it before publishing.
* Added: "Automatic update" checkbox (VEFmusic > General) — manual by default (weekly notification only); check it to have new versions installed automatically again, as before this version.
* Changed: Track List / Album — "Show lyrics" moved below the whole row (play button, title, waveform, volume, price), centered, instead of being mixed in with the title/comment.
* Fixed: the playback waveform no longer sinks to the bottom of the row now that lyrics have moved — it's vertically centered again.
* Fixed: the show date badge (desktop and mobile) was too narrow for month abbreviations longer than 3 letters in some locales.

= 2.14.1 =
* Changed: removed the bundled readme translation export file — the readme is no longer translated going forward, only the plugin's own strings.

= 2.14.0 =
* Changed: Shows block — with "Also show past shows" enabled, the list now shows upcoming shows first (soonest to farthest), then past shows (most recent to oldest), instead of one mixed chronological order where past shows could appear ahead of upcoming ones.
* Added: Shows/Next Show style tabs — new "Title color" setting for the show title, previously only adjustable in size.
* Fixed: last show in the "Shows" block no longer keeps a bottom margin below it.

= 2.13.4 =
* Fixed: Shows block, mobile ("Site du lieu"/"Billets" buttons) — the button group was left-flush instead of centered in the column, even though the buttons were correctly centered relative to each other (their shrink-to-fit container never stretched to the column's full width). `align-self: center` added on the container, scoped to mobile only. Verified with screenshots before/after, and that desktop stays unaffected.

= 2.13.3 =
* Fixed: Shows block, mobile — a real vertical gap between a show's text and its action buttons ("Venue website"/"Tickets"), reported as broken-looking action buttons. Root cause: `.vefm-concert-main` kept its desktop `flex: 1 1 320px` (meant to grow horizontally next to the buttons) after the layout switches to a column on narrow screens, so it grew to fill the available height instead — most visible on a show with a poster and little text. Verified with real markup and screenshots at several widths before and after, on both the affected layout and the unaffected desktop one.

= 2.13.2 =
* Changed: Help tab, Press kit section — the "Albums" (all vs. specific selection), "Audio content" (which tracks get their preview attached) and "Photos" (extra photos beyond the logo/covers) cards weren't documented at all; the "Advanced" card's crowdfunding checkbox was also missing. Caught during a review of this exact section, prompted by a direct question about whether it had really been checked.

= 2.13.1 =
* Changed: Help and About tabs reviewed and brought up to date — several features added over past versions were missing (lyrics, the press kit's weekly download counter, the Divi 5 Visual Builder's live preview) or described inaccurately (VEFmusic Pro's customer accounts, which use an email sign-in link and never require a WordPress account), plus a few additions on the Pro side (right of withdrawal compliance, customer/order search and GDPR deletion/anonymization, anonymous Access statistics).

= 2.13.0 =
* Fixed: Shows/Tracks blocks — corner radius and border defaults no longer fall back to a non-zero size (10px/1px) when nothing is set in Style, so "0" set there is now visually 0.
* Added: Date badge text color, on both the Shows and Next Show sub-tabs (only the background color was adjustable until now).
* Changed: "Padding inside each track" split into two fields (top/bottom and left/right) on the Tracks and Albums sub-tabs — the previous single field could never reproduce the asymmetric default and always forced a square padding once set. Existing sites keep their previous value automatically.
* Added: Album block — title color/size and description text color, previously only adjustable for the track rows.
* Changed: Random Player — now also follows the Tracks sub-tab's text color (already followed background/padding); documented directly on the Tracks sub-tab and in Help, since the Random Player has no Style tab of its own.
* Removed: "Inner spacing" setting on the Next Show sub-tab — it controlled spacing between shows, which never had any visual effect there since this block always displays a single show.
* Added: Diagnostics — new check flagging show descriptions that are exactly 300 characters long, the signature of an old input limit (see 2.12.0) that silently truncated text typed beyond it before saving. Existing truncated text can't be recovered automatically; the check links directly to the affected shows so it can be rewritten by hand.

= 2.11.9 =
* Changed: Shows block — a bit more breathing room between the payment icon and the indicative price (8px instead of 4px), matching what was already used for the venue line.

= 2.11.7 =
* Fixed: French translation — full pass over strings added since 2.10.22 (Press Kit import, .woff2, price display), plus a handful of older gaps found along the way. `.pot` regenerated with the in-house extractor, `.po` merged (existing translations preserved), zero string lost (compared before/after). Fixed 4 existing plural-form entries that used the singular French spelling for the plural (e.g. "%d piste" instead of "%d pistes"), and 2 mismatched translations.

= 2.11.6 =
* Changed: Prices shown to visitors no longer show a superfluous ",00" — "12 €" instead of "12,00 €" (real decimals, e.g. "12,50 €", stay shown as before). New shared `VEFM_Price::format()`, applied consistently across shows, albums, tracks.
* Fixed: Help tab and About tab reviewed and brought up to date — the contact-form mention on the press kit's contact email field was stale (that feature moved to Pro earlier), the Free feature list didn't mention media sections (photos/documents/audio) or the Pro press-kit features at all.

= 2.11.5 =
* Fixed: Press kit — a real, pre-existing bug found while working on this: `class-vefm-ttf-font.php` was never actually loaded anywhere in the plugin, so a custom .ttf font selected for the press kit always silently fell back to Helvetica, even on a perfectly valid file. Fixed.
* Added: Press kit — .woff2 custom fonts now genuinely work (not just accepted at upload): converted on the fly to a standard .ttf, tested against multiple real fonts (glyph-by-glyph comparison, strict checksum validation, and a real generated/verified PDF). Depends on this specific hosting being able to decode Brotli compression (an extension or a `brotli` binary) — a clear, accurate message is shown when a .woff2 is selected, saying whether it will actually work on this site; falls back to Helvetica otherwise, never a crash.

= 2.11.4 =
* Fixed: Shows block — buttons under a ticket-style show card (venue website / internal ticketing) were left-anchored instead of centered on mobile (a stacked-column layout needs `align-items`, not `justify-content`, to center horizontally — only the latter was set).
* Changed: Shows block — the location pin icon is now outlined (matching the clock/payment icons) instead of solid-filled; all three icons enlarged slightly.
* Changed: All prices now show the amount before the € sign (e.g. "12 €"), consistently across the site, admin, and help text.
* Added: Press kit — custom font upload now also accepts .woff2 (previously .ttf only). Note: a .woff2 file can be uploaded and selected, but its compression can't be decoded here, so it currently falls back to Helvetica in the generated PDF — a clear warning is shown when one is selected, and a .ttf file of the same font is needed for it to actually appear in the PDF. Documented in the Help tab.
* Fixed: French translation — a code example used typographic guillemets « » where the actual CSS syntax needs straight quotes (validated by Paul).

= 2.11.3 =
* Fixed: Press kit builder — the form was still capped at WordPress's own default card width (520px), overriding the 2.11.1 fix that only removed VEFmusic's own inline override without replacing it. Now genuinely full-width.

= 2.11.2 =
* Fixed: `VEFM_Settings::get_defaults()` — new public method (the existing `defaults()` stayed private); required by VEFmusic Pro's additional-kits feature, which was hitting a fatal error without it in the first 2.11.1 build. If you already installed that first 2.11.1 build, please update to this one — do not stay on it.

= 2.11.1 =
* Fixed: Random Player — sound now opens together with playback, in the same click, in both playback modes (manual start, and "start on first click anywhere on the page") — previously the sound icon required a separate click after starting playback, and the automatic mode briefly played muted before unmuting.
* Fixed: Press kit admin — the stats/leads sections could show twice when VEFmusic Pro is active (once here, once on the new dedicated Pro screen).
* Added: Press kit builder — Media sections (Photos/Documents/Audio) now mention which folder their files are delivered in inside the zip download.
* Added: Press kit builder — Group identity card now includes the group/band name, logo, and press contact email/phone (previously only tagline/bio), needed for a VEFmusic Pro additional kit to have a fully independent identity.
* Fixed: Press kit builder — a section's column title field could overflow and overlap the neighboring column on narrower screens.
* Changed: Press kit builder — the whole form is now full-width, matching the rest of the tab.
* Changed: Shows block — the clock/payment icons are now tinted with the same accent color as the location pin, instead of a neutral color.
* Changed: Press kit's underlying engine now supports an optional additional-kit identifier internally, with no effect on the default kit — enables VEFmusic Pro's upcoming multiple-kits feature.

= 2.11.0 =
* Added: Press kit — new "Media sections" (photo galleries, document lists, audio file lists, and two-column layouts mixing any of these), reorderable alongside the existing sections.
* Added: Press kit — global style controls (header band background image, section title color, title/text fonts including custom .ttf upload, PDF background color).
* Changed: Press kit's underlying engine (PDF writer, rich text) upgraded — photos in a "Photos" section are now shown directly in the PDF (previously only attached to the zip), and paragraphs support inline images.

= 2.10.22 =
* Fixed: Random Player — on Firefox, unmuting sound after a muted autoplay could stay silently blocked even though the icon showed "unmuted" (Firefox evaluates the permission to play audible sound at the initial play() call, not when the mute flag changes afterwards) — a fresh, audible playback attempt is now forced right after unmuting, with the icon reverted to "muted" if the browser still refuses it (reported by Paul, beta tester).
* Changed: Shows block — the show time is now shown next to a small clock icon instead of a plain dot separator, and is visible again on mobile (previously hidden there to avoid an orphaned dot) (reported by Paul, beta tester).
* Changed: Shows block — the price is now shown next to a payment icon instead of the "Price:" label (still available to screen readers) (reported by Paul, beta tester).

= 2.10.21 =
* Fixed: the ticketing link/button (with VEFmusic Pro) was still shown side by side with the "Venue website" button in one of the two card layouts — now consistently below it, aligned, in both.
* Changed: clarified the "Price" field help text further — once at least one ticket zone exists, leave it empty to avoid showing a price that no longer matches your zones.
* Translations: regenerated .pot with a corrected extractor (the previous one missed several dozen existing strings), fixed two mistranslations ("Venue map" wrongly translated as a generic term).

= 2.10.20 =
* Changed: the ticketing button/link (with VEFmusic Pro) now appears below the "Venue website" button, aligned, instead of side by side.

= 2.10.19 =
* Fixed (with VEFmusic Pro): clarified the "Price" field help text on the show edit screen — once ticket zones are configured, this field no longer sets the actual sale price (each zone has its own).

= 2.10.18 =
* Changed: album cover design (retour Paul) — poster/cover s'adapte mieux en hauteur, prix et bouton d'achat de l'album passent sous l'image plutôt qu'à côté, padding et alignement affinés sur mobile.
* Changed: label "Date badge color" renamed to "Date badge background color" (Shows/Featured Show/Past Shows blocks, all 3 builders) — clearer about what it actually colors.

= 2.10.17 =
* Fixed: real bug found while testing live in Divi 5's Visual Builder — the new "Shows to display" field on the "Concerts" module always showed upcoming shows regardless of the choice made ("Past"/"Both" had no effect). Divi 5 stores the selected option's position (0/1/2) rather than its value for this field type — now handled correctly.

= 2.10.16 =
* Added: character limit on the show description (300 characters) — the field now shows the limit directly, and an existing longer description is trimmed cleanly on display (never cut mid-word).
* Changed: the "Concerts" module in Divi 5 now has a real, visible "Shows to display" field (Upcoming / Past / Both) in its Content tab — previously only reachable through a hidden custom attribute.
* Deprecated: the separate "Past Shows" block/module/widget (Gutenberg, Divi 5, Elementor) — replaced by the "Shows to display" setting above. Kept for pages where it's already placed, but no longer offered for a new placement; use the "Shows" block/module/widget instead.

= 2.10.15 =
* Added: new "Venue map" image field on the show edit page (VEFmusic > Shows) — optional, purely illustrative picture of the venue layout, shown above the ticket zones when internal ticketing (VEFmusic Pro) is used.
* Added: extension point for VEFmusic Pro's internal ticketing settings (zones, pricing, numbered seats) to appear directly on the show edit page, instead of a separate admin screen.

= 2.10.14 =
* Fixed: the Random Player's volume slider always displayed at minimum while the sound was muted, regardless of the actual configured starting volume — it now always reflects the real level, muted or not.

= 2.10.13 =
* Fixed: the Random Player's "play automatically when the page loads" setting had no effect once disabled — clicking anywhere else on the page (not just the player itself) still started playback. Turning the setting off now correctly requires an explicit click on the player itself.

= 2.10.12 =
* Fixed: the track title/details column could compete with the equalizer for the row's free space instead of leaving it to the equalizer alone, as originally intended.
* Fixed: the poster concert card's padding now scales smoothly between a sensible minimum and maximum with the viewport, instead of a single fixed value or an uncapped, unfloored one.
* Changed: the show's action links (venue website / tickets) now lay out in a row instead of stacked, right-aligned as before.
* Changed: the ticket zone's action buttons are now right-aligned instead of left-aligned.
* Changed: removed a fixed max-width on the show's text column.
* Changed: rounder corners softened slightly (Random Player, playlist toolbar) for a less "pill-shaped" look; small mobile alignment tweaks (album header, show actions).

= 2.10.11 =
* Fixed: on some Gutenberg setups, the Random Player block could still stretch to fill the row instead of hugging its own content — added an explicit rule so it never depends on the surrounding theme/layout.

= 2.10.10 =
* Fixed: on mobile, a concert card with a poster had noticeably large bottom padding — now scales down with the viewport instead of staying fixed (desktop/tablet unchanged).
* Fixed: on mobile, the bullet separator shown before a concert's time (normally following the venue on the same line) could appear on its own, orphaned line once the header wraps — hidden only at that width.
* Fixed: the date badge on a concert card wasn't centered when it wrapped onto its own line on mobile.
* Fixed: a track's title/details column had a hard max-width, capping it even when more space was available — now grows to fill the row like the rest of the layout (mobile behavior unchanged).
* Changed: the Random Player block (button, icons, volume slider) now scales with the surrounding font size instead of using fixed pixel sizes, so it stays proportionate on sites with a different base font size.

= 2.10.9 =
* Fixed: on mobile, a concert card in list mode with a poster could squeeze its content into a too-narrow column next to a cropped poster — the same single-column mobile layout already used for the featured "next show" now applies to every concert card with a poster, not just the featured one.
* Fixed: on the featured concert's mobile layout, a longer venue name next to the time could overflow the card horizontally — that row now stacks vertically like everywhere else on mobile.
* Changed: restored the "starts automatically on page load" mention in the Random Player's Help screen description (still the default behavior; the dedicated setting paragraph right below already explains it's now optional and site-wide).

= 2.10.8 =
* Fixed: alignment fix from 2.10.7 confirmed live on all 3 builders (Gutenberg, Divi 5, Elementor) — same shared CSS/markup, same fix everywhere.
* Fixed: the Elementor widget's "autoplay is now site-wide" note was never translated to French — was showing in English within an otherwise French Elementor interface.

= 2.10.7 =
* Fixed: the Random Player block's background could stretch across the full width of the content column on desktop/tablet, with its controls left-aligned in a lot of empty space — the 2.10.0 mobile fix over-corrected this. It's a compact pill again on wide screens, and still wraps onto multiple lines on narrow ones. Verified live on both the Gutenberg and Divi 5 versions.

= 2.10.6 =
* Fixed: the accessibility warning shown in the Random Player block's Gutenberg settings panel still described autoplay as unconditional ("this block starts playing audio automatically...") even though it became an optional site-wide setting in 2.10.2 — now says so directly, and the redundant note underneath was merged into it.

= 2.10.5 =
* Changed: removed a beta tester's name from the 2.10.3 changelog entry — credit belongs in internal notes, not the public changelog. No code change.

= 2.10.4 =
* Fixed: no code change — 2.10.3 was mistakenly tagged on WordPress.org SVN with stale 2.10.2 content (wrong local zip copied into trunk during the manual SVN push), which broke the "Stable Tag" detection. This release simply republishes the real, verified 2.10.3 content under a clean tag number.

= 2.10.3 =
* Fixed: two mobile fixes for the Random Player block had been missed in 2.10.0 — the wrapped track title is now centered (`text-align: center`), and its padding now reuses the `--vefm-track-padding` CSS variable (already shared with Tracks/Album) instead of a hardcoded value, so a site that customized it stays consistent. The stop button's padding also switched to `.5em` to match.

= 2.10.2 =
* Changed: "Play automatically when the page loads" (Random Player) is now a single site-wide setting (VEFmusic > General, next to "Automatic playback of the next track") instead of a per-block setting — simpler to find, and applies uniformly to every Random Player block/module/widget (Gutenberg, Divi 5, Elementor) at once. Behavior and default (on) are unchanged for existing sites.

= 2.10.1 =
* Changed: the "Random Player" feature card on the About tab now mentions that autoplay on page load is optional (the setting itself shipped in 2.10.0 — this only completes its documentation, About tab and Help screen).

= 2.10.0 =
* Added: new "Play automatically when the page loads" setting on the Random Player block (Gutenberg, Divi 5, Elementor) — on by default (same behavior as before), can be turned off so playback only ever starts when the visitor clicks play themselves.
* Fixed: the Random Player block's controls could overflow or get squeezed on narrow (mobile) screens — controls now wrap onto multiple lines instead, and the track title wraps instead of being cut off with an ellipsis.
* Fixed: the Track List/Album playback toolbar (play/pause, volume, shuffle) could overflow or get squeezed on narrow (mobile) screens — same wrapping fix as above.
* Fixed: an album's cover and text (title, description, price) could overflow off-screen on narrow phones if the description was long.
* Fixed: the date badge on the "Next Show" featured layout could show the year and time overlapping on some themes — the badge now sizes itself to its content instead of using a fixed height.

= 2.9.5 =
* Changed: French translation (languages/vefmusic-fr_FR.po/.mo) updated with the fully-validated export from translate.wordpress.org, integrated as-is.

= 2.9.4 =
* Fixed: submitting the optional/required press kit contact form (name/email) triggered a critical error instead of starting the download. The contact notification email used a malformed message string, causing PHP 8+ to reject it outright.

= 2.9.3 =
* Added: anonymous weekly download count for the press kit's full zip (PDF + photos + audio previews), shown at the top of the Press Kit tab — no IP address, cookie or identifier stored; admin test downloads and PDF-only downloads are never counted.

= 2.9.2 =
* Fixed: several block titles and descriptions (Track List, Random Player, Past Shows, Next Show, Shows) were hardcoded in French instead of English in the source code — this was causing GlotPress to flag the plugin as "not properly prepared for localization". Translations are unaffected; only the underlying English source strings changed.

= 2.9.1 =
* Fixed: a press kit paragraph split into two columns, when both columns overflowed onto a new page, spread its continuation across two separate half-empty pages instead of sharing one — text looked cut off even though nothing was actually lost. Both columns now correctly continue on the same page.

= 2.9.0 =
* Added: track audio files (master and light MP3) can now be selected directly from the media library, in addition to the usual upload — handy for webmasters who already have their audio files there. The plugin copies the file into its own protected storage; the media library copy is never touched.
* Added: accessibility warning shown in the Random Player block's editor settings and in the Help screen — autoplaying sound can be an obstacle for visually impaired visitors relying on a screen reader.
* Changed: the "Support request" tab is now "Support & feature requests" — the form and its wording now explicitly invite feature requests, not just problem reports.

= 2.8.6 =
* Fixed: French plurals for count-based messages (e.g. the "In X days" countdown on the featured concert block) were never applied — the number was always shown with its singular wording, even for counts other than 1. Caused by the translation file's plural entries missing their proper structure; the underlying string-extraction tooling has also been corrected so this can't recur for these or future plural strings.

= 2.8.5 =
* Changed: the open_basedir upload fallback introduced in 2.8.4 is now off by default — it works around a real server security setting, so it must be explicitly enabled from the Diagnostics screen (with a clear warning) rather than running automatically.
* Fixed: additional French translation mistakes on the same gender agreement issue ("piste" is feminine) found across the admin and block descriptions.

= 2.8.4 =
* Added: optional "Delete all data on uninstall" setting (off by default) — when enabled, deleting the plugin permanently removes all tracks, albums, concerts, settings, and stored audio files.
* Fixed: track audio uploads still failing on some hosting environments where the destination folder is genuinely writable but the PHP upload temp file itself sits outside an `open_basedir` restriction — a further fallback now completes the upload in that case too.
* Fixed: several French translation mistakes ("un piste" instead of "une piste" throughout the admin, "Ajouter un piste" instead of "Ajouter une piste").

= 2.8.3 =
* Fixed: track audio uploads (master and light MP3) failing with "Unable to save the file on the server" on some hosting environments (notably local development sites like Local by Flywheel) where WordPress can't automatically confirm direct disk access — a safe fallback now completes the upload in that case.

= 2.8.2 =
* Fixed: a track with only a light MP3 version uploaded (no master file) never showed a play button on the site, even though the file was valid and playable — the master file is no longer required.

= 2.8.1 =
* Changed: clearer guidance in the track editor and Help tab — the master file is required for a track to be playable on the site, even when only the light MP3 version will be used for playback.

= 2.8.0 =
* Added: text alignment (left/right/center/justify) in the press kit's rich text fields, chosen per paragraph.
* Added: optional two-column layout for additional press kit paragraphs, chosen when the paragraph is added.

= 2.7.2 =
* Fixed: removed the "Domain Path" plugin header — per WordPress.org's own developer documentation, this header should be omitted for plugins hosted in the official directory, and its presence (pointing to a folder not included in the WordPress.org build) was very likely the cause of GlotPress flagging the plugin as "not properly prepared for localization". No functional change — translation loading is unaffected on any build.

= 2.7.1 =
* Fixed: the WP.org-distributed build no longer calls load_plugin_textdomain() with a hardcoded path to a bundled languages folder — this is unnecessary since WordPress 4.6 (translations are loaded automatically from the language pack) and was causing GlotPress to flag the plugin as "not properly prepared for localization". No change for sites running the plugin outside WordPress.org.

= 2.7.0 =
* Added: press kit PDF pagination fully rewritten — a long biography or custom text section can no longer be silently cut off, however long it runs.
* Added: unlimited custom text sections in the press kit, each with its own editable title (button "Add a paragraph" in VEFmusic > Press kit).
* Added: choose the order sections appear in the press kit PDF (biography, social links, albums, shows, custom sections, and the Pro crowdfunding section).
* Added: clickable links now supported in the press kit's rich text editor (bio and custom sections).
* Changed: the previous single "Free text" field is automatically migrated to the new custom sections system on update — nothing is lost, its title stays fully editable.

= 2.6.2 =
* Added: new Diagnostic entry confirming the Divi 5 live-preview endpoint is registered.

= 2.6.1 =
* Fixed: Divi 5 module preview in the Visual Builder now loads the plugin's own stylesheet, so it displays correctly instead of appearing unstyled.

= 2.6.0 =
* Added: Divi 5 module preview in the Visual Builder now shows the real, live content (same as the front end) instead of a static placeholder message.

= 2.5.4 =
* Fixed: updating or rolling back to a version from the version history could require two clicks to actually install.

= 2.4.0 =
* Added: bulk import for tracks — select several audio files at once (e.g. a whole album), each becomes a draft track with tags read automatically (title, duration, track number, album, genre); review and adjust everything in a table before publishing.
* Added: native track ordering ("Track n°"), usable directly from the bulk import review table.

= 2.3.11 =
* Added: full Accessibility section (see above) documenting the rating form, lyrics toggle and link handling — previously only the player was described.
* Improved: the Random Player now announces the newly playing track to screen readers when it switches automatically.

= 2.3.10 =
* Fixed: "Roll back to this version" button could require two clicks to work.

= 2.3.9 =
* Security: precautionary hardening following a WordPress core vulnerability (CVE-2026-65640, fixed in WP 7.0.4).

= 2.3.8 =
* Added: automatic Duration/Genre pre-fill from audio file tags on upload.

= 2.3.7 =
* Fixed: lyrics panel collapse/expand behavior.

= 2.3.6 =
* Changed: Help/About screens updated for the native Elementor widgets.

= 2.3.5 =
* Fixed: CRITICAL — track upload could silently fail to save on some sites.

= 2.3.4 =
* Added: 6 native Elementor widgets (Track List, Album, Shows, Next Show, Past Shows, Random Player).

= 2.3.3 =
* Fixed: visitor reviews not displaying; broken support-service links; translation completed.

= 2.3.1 =
* Fixed: CRITICAL — tracks uploaded before 2.2.9 could stop playing after an audio storage location change.

= 2.3.0 =
* Added: optional lyrics field; rich text in the press kit bio/free text.

= 2.2.12 =
* Changed: "Tested up to" bumped to WordPress 7.1.

= 2.2.9 – 2.2.11 =
* Code quality and security hardening following a WordPress.org Plugin Check review; minor Help tab corrections.

= 2.2.8 =
* Added: choose which albums appear in the press kit.

= 2.2.5 – 2.2.7 =
* Press kit PDF: WebP logo support, tagline field, layout and pagination improvements.

= 2.2.0 – 2.2.4 =
* Preparation for WordPress.org submission (update mechanism, metadata, code hardening).

= 2.1.0 =
* Added an option to include/exclude crowdfunding elements from the press kit.

= 2.0.0 =
* Initial public release.

== Upgrade Notice ==

= 2.9.1 =
Fixes a press kit bug where a 2-column paragraph could look cut off if both columns overflowed onto a new page — they now correctly share the same page.

= 2.7.2 =
Removes a plugin header that was likely causing a WordPress.org translation-tooling warning. No functional change.

= 2.7.1 =
Fixes a WordPress.org translation-loading compatibility warning (GlotPress). No functional change.

= 2.7.0 =
Press kit: unlimited custom text sections with reordering, clickable links, and a pagination rewrite so long text is never cut off.

= 2.3.5 =
Fixes a critical bug where uploading a track's audio file could silently fail to save.

= 2.0.0 =
Initial public release.
