(function(){
console.log('SH191: IIFE running, shCP=', !!window.shCP);
var CP;
/* ── inject styles ── */
(function injectStyles(){
if (document.getElementById('sh-styles')) return;
var s = document.createElement('style');
s.id = 'sh-styles';
s.textContent = [
/* overlay */
'.sh-modal-ov{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:99999;display:flex;align-items:center;justify-content:center;}',
'.sh-modal{background:#fff;border-radius:16px;width:380px;max-width:94vw;padding:24px;box-shadow:0 8px 32px rgba(0,0,0,.18);max-height:90vh;overflow-y:auto;}',
'.sh-modal-h{display:flex;align-items:center;margin-bottom:20px;}',
'.sh-modal-title{flex:1;font-size:17px;font-weight:600;color:#1a1a1a;}',
'.sh-modal-back{background:none;border:none;cursor:pointer;font-size:20px;color:#666;padding:0 8px 0 0;line-height:1;}',
'.sh-modal-x{background:none;border:none;cursor:pointer;font-size:18px;color:#aaa;padding:0;line-height:1;}',
'.sh-modal-x:hover{color:#333;}',
/* cart sections */
'.sh-cart-section{background:#fff;border-radius:12px;padding:14px 16px;margin-bottom:12px;border:1px solid #f0f0f0;}',
'.sh-cs-filled{display:flex;align-items:center;justify-content:space-between;}',
'.sh-cs-label{font-size:11px;color:#aaa;margin-bottom:2px;text-transform:uppercase;letter-spacing:.5px;}',
'.sh-cs-value{font-size:14px;color:#1a1a1a;font-weight:500;}',
'.sh-cs-edit{background:none;border:none;cursor:pointer;color:#ccc;font-size:15px;padding:4px;flex-shrink:0;}',
'.sh-cs-edit:hover{color:#c62a6a;}',
'.sh-cs-empty{width:100%;padding:14px;border:2px dashed #e8e8e8;border-radius:10px;background:none;cursor:pointer;color:#bbb;font-size:13px;text-align:center;transition:border-color .2s,color .2s;box-sizing:border-box;}',
'.sh-cs-empty:hover{border-color:#c62a6a;color:#c62a6a;}',
/* card list */
'.sh-card-list{display:flex;flex-direction:column;gap:2px;margin-bottom:16px;}',
'.sh-card-row{display:flex;align-items:center;justify-content:space-between;padding:13px 12px;border-radius:12px;cursor:pointer;transition:background .15s;border:1.5px solid transparent;}',
'.sh-card-row:hover{background:#fdf5f8;}',
'.sh-card-row.sh-card-sel{border-color:#c62a6a;background:#fff5f9;}',
'.sh-card-row-left{display:flex;align-items:center;gap:12px;flex:1;min-width:0;}',
'.sh-card-icon{width:38px;height:24px;border-radius:5px;display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:800;flex-shrink:0;letter-spacing:-.3px;}',
'.sh-card-icon.sh-vi{background:#1a1f71;color:#fff;}',
'.sh-card-icon.sh-mc{background:linear-gradient(135deg,#eb001b 40%,#f79e1b 100%);color:#fff;}',
'.sh-card-icon.sh-gn{background:#f0f0f0;color:#888;}',
'.sh-card-info{display:flex;flex-direction:column;min-width:0;}',
'.sh-card-dots{font-size:14px;font-weight:500;color:#1a1a1a;white-space:nowrap;}',
'.sh-card-meta{font-size:11px;color:#aaa;margin-top:1px;}',
'.sh-card-radio{width:20px;height:20px;border-radius:50%;border:2px solid #ddd;flex-shrink:0;transition:border-color .15s,border-width .15s;}',
'.sh-card-row.sh-card-sel .sh-card-radio{border-color:#c62a6a;border-width:6px;}',
/* add card row */
'.sh-add-card-row{border:1.5px dashed #e0e0e0 !important;background:none !important;}',
'.sh-add-card-row:hover{border-color:#c62a6a !important;background:#fff8fb !important;}',
'.sh-add-card-plus{font-size:22px;color:#c62a6a;font-weight:300;flex-shrink:0;}',
/* buttons */
'.sh-btn-primary{width:100%;padding:15px;background:#c62a6a;color:#fff;border:none;border-radius:12px;font-size:15px;font-weight:600;cursor:pointer;transition:background .2s;}',
'.sh-btn-primary:hover{background:#a8235a;}',
'.sh-btn-primary:disabled{background:#e0a0bf;cursor:not-allowed;}',
/* add card form */
'.sh-brand-logos{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:16px;}',
'.sh-brand{padding:4px 8px;border-radius:5px;font-size:10px;font-weight:700;border:1.5px solid #e0e0e0;color:#555;}',
'.sh-brand.bv{color:#1a1f71;border-color:#1a1f71;}',
'.sh-brand.bm{color:#eb001b;border-color:#eb001b;}',
'.sh-brand.ba{color:#2e7d32;border-color:#2e7d32;}',
'.sh-fi{margin-bottom:10px;}',
'.sh-fi input,.sh-fi-row input{width:100%;padding:12px 14px;border:1.5px solid #e8e8e8;border-radius:10px;font-size:14px;box-sizing:border-box;transition:border-color .2s;outline:none;font-family:inherit;}',
'.sh-fi input:focus,.sh-fi-row input:focus{border-color:#c62a6a;}',
'.sh-fi-row{display:flex;gap:10px;margin-bottom:10px;}',
'.sh-fi-row>div{flex:1;}',
'.sh-cvv-wrap{position:relative;}',
'.sh-cvv-wrap input{padding-right:36px;}',
'.sh-cvv-help{position:absolute;right:10px;top:50%;transform:translateY(-50%);background:#e8e8e8;border:none;border-radius:50%;width:20px;height:20px;font-size:11px;cursor:pointer;color:#666;}',
'.sh-modal-err{color:#e33;font-size:12px;margin-bottom:8px;min-height:16px;}',
'.sh-secure-note{text-align:center;font-size:12px;color:#bbb;margin-top:14px;}',
/* form group separator */
'.sh-modal-sep{height:1px;background:#f5f5f5;margin:12px 0;}',
/* profile pay page */
'.sh-pp-card-row{display:flex;align-items:center;gap:12px;padding:14px;border:1.5px solid #f0f0f0;border-radius:12px;margin-bottom:10px;}',
'.sh-pp-selected{border-color:#c62a6a;background:#fff5f9;}',
'.sh-pp-badge{width:38px;height:24px;border-radius:5px;display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:800;flex-shrink:0;}',
'.sh-pp-visa{background:#1a1f71;color:#fff;}',
'.sh-pp-mc{background:linear-gradient(135deg,#eb001b 40%,#f79e1b 100%);color:#fff;}',
'.sh-pp-info{flex:1;display:flex;flex-direction:column;gap:2px;font-size:13px;}',
'.sh-pp-actions{display:flex;align-items:center;gap:8px;flex-shrink:0;}',
'.sh-pp-set-main{font-size:12px;padding:5px 10px;border:1px solid #c62a6a;color:#c62a6a;background:none;border-radius:8px;cursor:pointer;white-space:nowrap;}',
'.sh-pp-del{font-size:12px;padding:5px 10px;border:1px solid #ddd;color:#aaa;background:none;border-radius:8px;cursor:pointer;}',
'.sh-pp-add-btn{margin-top:8px;width:100%;padding:13px;border:2px dashed #e0e0e0;border-radius:10px;background:none;cursor:pointer;color:#bbb;font-size:13px;}'
].join('');
document.head.appendChild(s);
})();
/* ── helpers ── */
function ajax(action, params, cb) {
var fd = new FormData();
fd.append('action', action);
fd.append('nonce', CP.nonce);
for (var k in params) fd.append(k, params[k]);
fetch(CP.ajaxUrl, { method: 'POST', body: fd })
.then(function(r){ return r.json(); })
.then(function(d){ cb(null, d); })
.catch(function(e){ cb(e); });
}
function closeModal(id) {
var el = document.getElementById(id);
if (el) el.remove();
}
function cardIconClass(type) {
return type === 'visa' ? 'sh-vi' : type === 'mc' ? 'sh-mc' : 'sh-gn';
}
function cardLabel(type) {
return type === 'visa' ? 'VISA' : type === 'mc' ? 'MC' : '💳';
}
/* ── render helpers ── */
function renderDeliveryInner(wrap) {
var addr = CP.address;
if (addr && addr.address_1) {
var parts = [addr.address_1, addr.city, addr.postcode].filter(Boolean);
wrap.innerHTML =
'
' +
'
Доставка
' +
'
' + parts.join(', ') + '
' +
'
✎ ' +
'
';
wrap.querySelector('#sh-addr-edit-btn').addEventListener('click', openAddrModal);
} else {
wrap.innerHTML = '+ Добавить адрес доставки ';
wrap.querySelector('#sh-addr-add-btn').addEventListener('click', openAddrModal);
}
}
function renderPaymentInner(wrap) {
var methods = CP.methods || [];
var sel = methods.find(function(m){ return m.id === CP.selected; });
if (sel) {
wrap.innerHTML =
'' +
'
Оплата
' +
'
' + cardLabel(sel.type) + ' •••• ' + sel.last4 + '
' +
'
✎ ' +
'
';
wrap.querySelector('#sh-pay-edit-btn').addEventListener('click', openPayModal);
} else {
wrap.innerHTML = '💳 Выбрать способ оплаты ';
wrap.querySelector('#sh-pay-choose-btn').addEventListener('click', openPayModal);
}
}
function buildCartSections() {
window._shBuildCartSections = buildCartSections;
console.log('SH191: buildCartSections called');
var summary = document.querySelector('.sh-order-summary');
if (!summary) return;
var delivery = document.getElementById('sh-cart-delivery');
var payment = document.getElementById('sh-cart-payment');
if (!delivery) {
delivery = document.createElement('div');
delivery.id = 'sh-cart-delivery';
delivery.className = 'sh-cart-section';
summary.insertBefore(delivery, summary.firstChild);
}
if (!payment) {
payment = document.createElement('div');
payment.id = 'sh-cart-payment';
payment.className = 'sh-cart-section';
summary.insertBefore(payment, summary.children[1] || null);
}
renderDeliveryInner(delivery);
renderPaymentInner(payment);
}
/* ── address modal ── */
function openAddrModal() {
closeModal('sh-addr-modal');
var addr = CP.address || {};
var ov = document.createElement('div');
ov.id = 'sh-addr-modal';
ov.className = 'sh-modal-ov';
ov.innerHTML =
'' +
'
' +
'Адрес доставки ' +
'✕ ' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
Сохранить ' +
'
';
document.body.appendChild(ov);
document.getElementById('sh-addr-close').addEventListener('click', function(){ closeModal('sh-addr-modal'); });
ov.addEventListener('click', function(e){ if (e.target === ov) closeModal('sh-addr-modal'); });
document.getElementById('sh-addr-save').addEventListener('click', function() {
var btn = document.getElementById('sh-addr-save');
var errEl = document.getElementById('sh-addr-err');
var params = {
first_name: (document.getElementById('sh-addr-first').value || '').trim(),
last_name: (document.getElementById('sh-addr-last').value || '').trim(),
address_1: (document.getElementById('sh-addr-1').value || '').trim(),
address_2: (document.getElementById('sh-addr-2').value || '').trim(),
city: (document.getElementById('sh-addr-city').value || '').trim(),
postcode: (document.getElementById('sh-addr-post').value || '').trim(),
phone: (document.getElementById('sh-addr-phone').value || '').trim()
};
var required = ['first_name','last_name','address_1','city','postcode','phone'];
var empty = required.filter(function(f){ return !params[f]; });
if (empty.length) {
errEl.textContent = 'Пожалуйста, заполните все обязательные поля.';
return;
}
errEl.textContent = '';
btn.disabled = true; btn.textContent = '...';
if (!CP.uid) {
try { localStorage.setItem('sh_guest_addr', JSON.stringify(params)); } catch(e) {}
CP.address = params; window.shCP.address = params;
closeModal('sh-addr-modal'); buildCartSections();
return;
}
ajax('sh_save_addr', params, function(err, data) {
if (err || !data.success) {
errEl.textContent = 'Ошибка. Попробуйте снова.';
btn.disabled = false; btn.textContent = 'Сохранить'; return;
}
CP.address = params; window.shCP.address = params;
closeModal('sh-addr-modal'); buildCartSections();
});
});
}
/* ── payment modal (WB style) ── */
function openPayModal() {
closeModal('sh-pay-modal');
var methods = CP.methods || [];
var selId = CP.selected;
/* build card list HTML */
var listHTML = '';
methods.forEach(function(m) {
var isSel = m.id === selId;
var meta = [m.name, m.expiry].filter(Boolean).join(' · ');
listHTML +=
'' +
'
' +
'
' + cardLabel(m.type) + '
' +
'
' +
'•••• ' + m.last4 + ' ' +
(meta ? '' + meta + ' ' : '') +
'
' +
'
' +
'
' +
'
';
});
/* add card row */
listHTML +=
'' +
'
' +
'
💳
' +
'
Привязать карту
' +
'
' +
'
+
' +
'
';
var ov = document.createElement('div');
ov.id = 'sh-pay-modal';
ov.className = 'sh-modal-ov';
ov.innerHTML =
'' +
'
' +
'
' +
'Способ оплаты ' +
'✕ ' +
'
' +
'
' + listHTML + '
' +
'
Выбрать ' +
'
' +
'
' +
'
' +
'← ' +
'Привязка карты ' +
'✕ ' +
'
' +
'
' +
'VISA ' +
'MC ' +
'Maestro ' +
'ArCa ' +
'MIR ' +
'UnionPay ' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
Привязать ' +
'
🛡 Данные карты надёжно защищены
' +
'
' +
'
';
document.body.appendChild(ov);
var listView = document.getElementById('sh-pay-list-view');
var addView = document.getElementById('sh-pay-add-view');
function showAddView() { listView.style.display = 'none'; addView.style.display = 'block'; }
function showListView() { addView.style.display = 'none'; listView.style.display = 'block'; }
document.getElementById('sh-pay-close').addEventListener('click', function(){ closeModal('sh-pay-modal'); });
document.getElementById('sh-add-close').addEventListener('click', function(){ closeModal('sh-pay-modal'); });
document.getElementById('sh-add-back').addEventListener('click', showListView);
ov.addEventListener('click', function(e){ if (e.target === ov) closeModal('sh-pay-modal'); });
document.getElementById('sh-add-card-toggle').addEventListener('click', showAddView);
document.getElementById('sh-card-list').addEventListener('click', function(e) {
var row = e.target.closest('.sh-card-row:not(.sh-add-card-row)');
if (!row) return;
var id = row.getAttribute('data-id');
document.querySelectorAll('#sh-card-list .sh-card-row').forEach(function(r){ r.classList.remove('sh-card-sel'); });
row.classList.add('sh-card-sel');
selId = id;
document.getElementById('sh-choose-btn').disabled = false;
});
document.getElementById('sh-choose-btn').addEventListener('click', function() {
if (!selId) return;
ajax('sh_select_card', { card_id: selId }, function(err, data) {
if (!err && data.success) { CP.selected = selId; window.shCP.selected = selId; closeModal('sh-pay-modal'); buildCartSections(); }
});
});
document.getElementById('sh-card-num-inp').addEventListener('input', function() {
var v = this.value.replace(/\D/g,'').substring(0,16);
this.value = v.replace(/(.{4})/g,'$1 ').trim();
});
document.getElementById('sh-card-exp-inp').addEventListener('input', function() {
var v = this.value.replace(/\D/g,'').substring(0,4);
if (v.length > 2) v = v.substring(0,2) + '/' + v.substring(2);
this.value = v;
});
document.getElementById('sh-save-card-btn').addEventListener('click', function() {
var saveBtn = document.getElementById('sh-save-card-btn');
var rawNum = (document.getElementById('sh-card-num-inp').value || '').replace(/\D/g,'');
var expiry = (document.getElementById('sh-card-exp-inp').value || '').trim();
var name = (document.getElementById('sh-card-name-inp').value || '').trim();
var errEl = document.getElementById('sh-card-err');
if (rawNum.length < 13) { errEl.textContent = 'Введите корректный номер карты.'; return; }
if (!expiry.match(/^\d{2}\/\d{2}$/)) { errEl.textContent = 'Введите дату в формате ММ/ГГ.'; return; }
errEl.textContent = '';
saveBtn.disabled = true; saveBtn.textContent = '...';
var last4 = rawNum.slice(-4);
var type = rawNum[0] === '4' ? 'visa' : 'mc';
ajax('sh_save_card', { last4: last4, type: type, expiry: expiry, name: name }, function(err, data) {
if (err || !data.success) {
errEl.textContent = 'Ошибка. Попробуйте снова.';
saveBtn.disabled = false; saveBtn.textContent = 'Привязать'; return;
}
var newCard = data.data;
CP.methods = CP.methods || []; CP.methods.push(newCard);
CP.selected = newCard.id;
window.shCP.methods = CP.methods; window.shCP.selected = CP.selected;
closeModal('sh-pay-modal'); buildCartSections();
});
});
}
/* ── profile payments page ── */
function initProfilePayPage() {
var wrap = document.getElementById('sh-profile-pay');
if (!wrap) return;
var methods = CP.methods || [];
var selId = CP.selected;
var html = methods.map(function(m) {
var isSel = m.id === selId;
return '' +
'
' + cardLabel(m.type) + '
' +
'
•••• ' + m.last4 + ' ' + (m.name||'') + '
' +
'
' +
(isSel ? '✓ Основная ' :
'Основная ') +
'Удалить ' +
'
';
}).join('');
wrap.innerHTML = html + '+ Добавить карту ';
wrap.addEventListener('click', function(e) {
var s = e.target.closest('.sh-pp-set-main');
var d = e.target.closest('.sh-pp-del');
var a = e.target.closest('#sh-pp-add-btn');
if (s) {
ajax('sh_select_card', { card_id: s.getAttribute('data-id') }, function(err, data) {
if (!err && data.success) { CP.selected = s.getAttribute('data-id'); window.shCP.selected = CP.selected; initProfilePayPage(); }
});
} else if (d) {
var id = d.getAttribute('data-id');
ajax('sh_delete_card', { card_id: id }, function(err, data) {
if (!err && data.success) {
CP.methods = CP.methods.filter(function(m){ return m.id !== id; });
window.shCP.methods = CP.methods;
if (CP.selected === id) { CP.selected = CP.methods.length ? CP.methods[0].id : ''; window.shCP.selected = CP.selected; }
initProfilePayPage();
}
});
} else if (a) { openPayModal(); }
});
}
/* ── init ── */
function init() {
if (!window.shCP) { setTimeout(init, 200); return; }
CP = window.shCP;
if (!CP.uid && !(CP.address && CP.address.address_1)) {
try {
var saved = localStorage.getItem('sh_guest_addr');
if (saved) { CP.address = JSON.parse(saved); window.shCP.address = CP.address; }
} catch(e) {}
}
setTimeout(function(){ buildCartSections(); initProfilePayPage(); }, 300);
}
if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); }
window.addEventListener('load', function(){ if (window._shBuildCartSections) window._shBuildCartSections(); });
document.addEventListener('wc_fragments_refreshed', function(){ setTimeout(function(){ if (window._shBuildCartSections) window._shBuildCartSections(); }, 100); });
})();
Skip to content
Home / Ատրճանակային բույրեր / Կարմիր Շրթներկ
‹ › Ատրճանակային բույրեր
Կարմիր Շրթներկ Артикул 10001
Состав Масло ши, карнаубский воск, витамин E, пчелиный воск
Объем товара 3.5 г
Комплектация 1 штука в упаковке
Срок годности 24 месяца
Страна производства Франция
Характеристики и описание ›
Классическая красная помада с насыщенным пигментом и кремовой текстурой. Обеспечивает стойкое покрытие на весь день, увлажняет и питает губы благодаря натуральным маслам в составе.
↩ Возврат через заявку
❮
❯
×