“Raining Grace II”

Sold
$3,780.00
This product is unavailable

Original acrylic on 36x48” gallery wrapped canvas with gold floating frame. Total measurement with frame - 38x50”

——

Painting is wired and ready to hang.

Due to the difference in screen displays (and the fact that everyone sees color differently), colors may vary a bit.

*Free shipping within the Continental US.

For international orders, you will receive an invoice with the cost of shipping after completing your purchase.

Frames displayed are not included, but custom framing is available by request for an additional cost.

const variantSelects = (document.querySelector('variant-selects')) ? document.querySelector('variant-selects') : document.querySelector('variant-radios'); const pickerType = (variantSelects.querySelectorAll('fieldset').length > 0) ? 'radios' : 'selects'; const fieldsets = (pickerType == 'radios') ? Array.from(variantSelects.querySelectorAll('fieldset')) : Array.from(variantSelects.querySelectorAll('.product-form__input--dropdown')); const productJson = JSON.parse(variantSelects.querySelector('[type="application/json"]').textContent); let selectedOptions = []; variantSelects.addEventListener('change', rebuildOptions); this.rebuildOptions(); function validCombo(inputValue, optionLevel) { for(let i = 0; i < productJson.length; i++) { if(optionLevel == 1){ if (productJson[i].option1 == selectedOptions[0] && productJson[i].option2 == inputValue) { return true; } } else { if (productJson[i].option1 == selectedOptions[0] && productJson[i].option2 == selectedOptions[1] && productJson[i].option3 == inputValue) { return true; } } } } function rebuildOptions() { selectedOptions = fieldsets.map((fieldset) => { return (pickerType == 'radios') ? Array.from(fieldset.querySelectorAll('input')).find((radio) => radio.checked).value : Array.from(fieldset.querySelectorAll('select'), (select) => select.value); }); for(let optionLevel = 1, n = fieldsets.length; optionLevel < n; optionLevel++) { const inputs = (pickerType == 'radios') ? fieldsets[optionLevel].querySelectorAll('input') : fieldsets[optionLevel].querySelectorAll('option'); inputs.forEach(input => { input.disabled = (validCombo(input.value,optionLevel)) ? false : true; if(pickerType == 'radios'){ const label = fieldsets[optionLevel].querySelector(`label[for="${input.id}"]`); label.style.display = (input.disabled) ? "none" : ""; //Hide the option, or comment this line out and use the following lines to style it.. //label.style.opacity = (input.disabled) ? 0.5 : 1; //label.style.borderStyle = (input.disabled) ? "dashed" : "solid"; //label.style.textDecoration = (input.disabled) ? "none" : ""; } else { input.hidden = (validCombo(input.value,optionLevel)) ? false : true; } }); } for (let optionLevel = 1, fieldsetsLength = fieldsets.length, change = false; optionLevel < fieldsetsLength && !change; optionLevel++) { if(pickerType == 'radios'){ if(fieldsets[optionLevel].querySelector('input:checked').disabled === true) { change = (fieldsets[optionLevel].querySelector('input:not(:disabled)').checked = true); } } else { if(fieldsets[optionLevel].querySelector('option:checked').disabled === true) { change = (fieldsets[optionLevel].querySelector('option:not(:disabled)').selected = "selected"); } } if(change) variantSelects.dispatchEvent(new Event('change', { bubbles: true })); } }