' . esc_html( $text ) . ''; } return '' . esc_html( $text ) . ''; } public static function feature( string $title, string $description ): string { return '

' . esc_html( $title ) . ' ' . self::badge() . '

' . esc_html( $description ) . '

'; } /** One quiet, contextual link; never a paid control or a public-site promotion. */ public static function context( string $module ): void { if ( \Abientot\Edition::is_pro() || ! current_user_can( 'abientot_manage_settings' ) ) { return; } $messages = array( 'staff' => __( 'Growing your team? Pro adds multiple staff and private employee schedules.', 'abientot' ), 'locations' => __( 'Working across locations? Pro adds separate locations and opening hours.', 'abientot' ), 'services' => __( 'Need more flexible services? Pro adds variants, extras and conditional customer questions.', 'abientot' ), 'payments' => __( 'Want to take payment when customers book? Pro adds Stripe payments and deposits.', 'abientot' ), ); if ( ! isset( $messages[ $module ] ) ) { return; } echo '

' . esc_html( $messages[ $module ] ) . ' ' . esc_html__( 'Explore Abientot Pro', 'abientot' ) . '

'; } /** Source-backed edition comparison. This is information, not paid controls. */ public static function comparison(): void { $groups = array( array( __( 'Your business', 'abientot' ), array( array( __( 'Staff and employee access', 'abientot' ), __( 'One staff profile', 'abientot' ), __( 'Multiple staff and private employee schedules', 'abientot' ) ), array( __( 'Locations', 'abientot' ), __( 'One business location', 'abientot' ), __( 'Multiple locations with separate opening hours', 'abientot' ) ), array( __( 'Service options', 'abientot' ), __( 'Service details, categories, photos and pricing', 'abientot' ), __( 'Also adds variants, extras and conditional customer questions', 'abientot' ) ), ) ), array( __( 'Booking options', 'abientot' ), array( array( __( 'Recurring bookings', 'abientot' ), __( 'Not included', 'abientot' ), __( 'Repeating bookings and customer series', 'abientot' ) ), array( __( 'Group and party bookings', 'abientot' ), __( 'One customer per appointment', 'abientot' ), __( 'Capacity-managed sessions and multiple attendees', 'abientot' ) ), array( __( 'Waitlist', 'abientot' ), __( 'Not included', 'abientot' ), __( 'Customer signup and invitations for available times', 'abientot' ) ), array( __( 'Rooms and equipment', 'abientot' ), __( 'Not included', 'abientot' ), __( 'Shared resources with capacity checks', 'abientot' ) ), array( __( 'Packages and credits', 'abientot' ), __( 'Not included', 'abientot' ), __( 'Booking packages and session credits', 'abientot' ) ), array( __( 'Customer booking links', 'abientot' ), __( 'Contact the business to cancel or reschedule', 'abientot' ), __( 'Private cancellation and rescheduling links', 'abientot' ) ), ) ), array( __( 'Payments and messages', 'abientot' ), array( array( __( 'Customer payments', 'abientot' ), __( 'Pay on site and manual payment records', 'abientot' ), __( 'Also adds Stripe payments, deposits, balances and refunds', 'abientot' ) ), array( __( 'Email notifications', 'abientot' ), __( 'Confirmation and update emails, plus one optional reminder before each appointment', 'abientot' ), __( 'Also adds notification delivery activity', 'abientot' ) ), array( __( 'Preparation and follow-up', 'abientot' ), __( 'Not included', 'abientot' ), __( 'Service-specific instructions and consent-based follow-up', 'abientot' ) ), array( __( 'SMS notifications', 'abientot' ), __( 'Not included', 'abientot' ), __( 'Configured provider and customer opt-in', 'abientot' ) ), ) ), array( __( 'Connections and tools', 'abientot' ), array( array( __( 'External calendars', 'abientot' ), __( 'Calendar file download after booking', 'abientot' ), __( 'Also adds private feeds and Google busy-time protection', 'abientot' ) ), array( __( 'Data tools', 'abientot' ), __( 'CSV exports, settings backup and supported Free-plugin contact imports', 'abientot' ), __( 'Also adds manual customer, service and appointment CSV imports', 'abientot' ) ), ) ), ); ?>

$group ) : ?>