I would comment if able.
If your theme variations consist solely of style modifications you can add the variation stylesheets @ inc/css/ and then here is an example of the references to make it all tick.
@ \options\options-core.php:
$fields_list[] = array(
'name' => __('Select a Skin Color', 'mytheme'),
'id' => 'mytheme_skin_color',
'std' => 'default',
'type' => 'images',
'options' => apply_filters( 'mytheme_skin_color', array(
'default' => $directory_uri . '/inc/css/skins/images/default.png'
) )
@ \options\options-customizer.php:
/********** Class for skin color selection option starts *************/
class mytheme_skin_selector extends WP_Customize_Control {
public $type="radio";
images-skin-subcontainer {
display: inline;
}
.images-skin-subcontainer img {
margin-top: 5px;
}
.images-skin-subcontainer img.of-radio-img-selected {
border: 5px solid #5DA7F2;
}
.images-skin-subcontainer img:hover {
cursor: pointer;
//if get mytheme mod background image has a value then we need to set default bg to none
$test_skin = $this->value();
$name="_customize-radio-" . $this->id;
$selected = ( $test_skin == $value ) ? 'of-radio-img-selected' : '';
?>
" name="" link(); checked( $test_skin, $value style="display:none;" />
" class="of-radio-img-img " /
}
/********** Class for skin color selection option ends *************/
// mytheme skin
$wp_customize->add_setting( 'mytheme_options[mytheme_skin_color]', array(
'default' => 'default',
$wp_customize -> add_control( new mytheme_skin_selector( $wp_customize, 'skin_color', array(
'label' => __( 'Skin Color', 'mytheme' ),
'section' => 'mytheme_design_section',
'settings' => 'mytheme_options[mytheme_skin_color]',
'choices' => apply_filters( 'mytheme_skin_color', '' ),
) ) );
Hope this helps either way.