From 950f84d01244850bb6d5c226984fec863126fad2 Mon Sep 17 00:00:00 2001 From: Egor Date: Fri, 10 Oct 2025 08:13:10 +0300 Subject: [PATCH] Add subscription purchase configurator logic --- miniapp/index.html | 2467 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2467 insertions(+) diff --git a/miniapp/index.html b/miniapp/index.html index b1f33202..d3692401 100644 --- a/miniapp/index.html +++ b/miniapp/index.html @@ -705,6 +705,393 @@ color: #fff; } + /* Purchase Configurator */ + .purchase-card { + position: relative; + } + + .purchase-card .card-header { + align-items: flex-start; + gap: 12px; + } + + .purchase-card .card-title { + text-transform: none; + letter-spacing: 0; + font-size: 18px; + font-weight: 700; + } + + .purchase-card .card-subtitle { + font-size: 13px; + color: var(--text-secondary); + margin-top: 4px; + } + + .purchase-sections { + display: flex; + flex-direction: column; + gap: 20px; + padding-top: 12px; + } + + .purchase-section { + display: flex; + flex-direction: column; + gap: 12px; + } + + .purchase-section + .purchase-section { + padding-top: 4px; + border-top: 1px solid var(--border-color); + } + + .purchase-section-header { + display: flex; + justify-content: space-between; + gap: 12px; + align-items: flex-start; + } + + .purchase-section-title { + font-size: 16px; + font-weight: 700; + color: var(--text-primary); + } + + .purchase-section-subtitle { + font-size: 13px; + color: var(--text-secondary); + margin-top: 2px; + } + + .purchase-section-meta { + font-size: 12px; + color: var(--text-secondary); + font-weight: 600; + } + + .purchase-options { + display: flex; + flex-direction: column; + gap: 10px; + } + + .purchase-option-button { + border: 1px solid var(--border-color); + border-radius: var(--radius); + padding: 12px 14px; + background: var(--bg-primary); + color: var(--text-primary); + display: flex; + justify-content: space-between; + align-items: center; + gap: 16px; + cursor: pointer; + transition: all 0.2s ease; + } + + .purchase-option-button:hover { + border-color: rgba(var(--primary-rgb), 0.4); + box-shadow: var(--shadow-sm); + } + + .purchase-option-button.active { + border-color: var(--primary); + background: rgba(var(--primary-rgb), 0.08); + box-shadow: var(--shadow-sm); + } + + .purchase-option-button.disabled { + opacity: 0.6; + cursor: not-allowed; + box-shadow: none; + } + + .purchase-option-label { + display: flex; + flex-direction: column; + gap: 4px; + } + + .purchase-option-title { + font-size: 15px; + font-weight: 600; + } + + .purchase-option-description { + font-size: 12px; + color: var(--text-secondary); + } + + .purchase-option-prices { + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 2px; + font-weight: 700; + } + + .purchase-option-price { + font-size: 15px; + } + + .purchase-option-old-price { + font-size: 12px; + color: var(--text-secondary); + text-decoration: line-through; + } + + .purchase-option-badge { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 2px 8px; + border-radius: 999px; + background: rgba(var(--primary-rgb), 0.12); + color: var(--primary); + font-size: 11px; + font-weight: 700; + } + + .purchase-server-option { + border: 1px solid var(--border-color); + border-radius: var(--radius); + padding: 12px 14px; + background: var(--bg-primary); + color: var(--text-primary); + display: flex; + justify-content: space-between; + align-items: center; + gap: 12px; + cursor: pointer; + transition: all 0.2s ease; + } + + .purchase-server-option:hover:not(.disabled) { + border-color: rgba(var(--primary-rgb), 0.4); + box-shadow: var(--shadow-sm); + } + + .purchase-server-option.selected { + border-color: var(--primary); + background: rgba(var(--primary-rgb), 0.08); + box-shadow: var(--shadow-sm); + } + + .purchase-server-option.disabled { + opacity: 0.6; + cursor: not-allowed; + box-shadow: none; + } + + .purchase-server-info { + display: flex; + flex-direction: column; + gap: 4px; + font-size: 14px; + } + + .purchase-server-name { + font-weight: 600; + } + + .purchase-server-meta { + font-size: 12px; + color: var(--text-secondary); + } + + .purchase-devices-stepper { + display: flex; + align-items: center; + gap: 12px; + } + + .purchase-devices-stepper button { + width: 40px; + height: 40px; + border-radius: var(--radius); + border: 1px solid var(--border-color); + background: var(--bg-primary); + color: var(--text-primary); + font-size: 20px; + font-weight: 700; + cursor: pointer; + transition: all 0.2s ease; + } + + .purchase-devices-stepper button:hover:not(:disabled) { + border-color: rgba(var(--primary-rgb), 0.4); + box-shadow: var(--shadow-sm); + } + + .purchase-devices-stepper button:disabled { + opacity: 0.5; + cursor: not-allowed; + box-shadow: none; + } + + .purchase-devices-value { + font-size: 20px; + font-weight: 700; + } + + .purchase-devices-note { + font-size: 12px; + color: var(--text-secondary); + } + + .purchase-summary { + display: flex; + flex-direction: column; + gap: 12px; + padding: 16px; + border-radius: var(--radius-lg); + background: var(--bg-secondary); + border: 1px solid var(--border-color); + } + + .purchase-summary-header { + display: flex; + justify-content: space-between; + align-items: center; + } + + .purchase-summary-title { + font-size: 15px; + font-weight: 700; + } + + .purchase-summary-lines { + display: flex; + flex-direction: column; + gap: 8px; + font-size: 13px; + } + + .purchase-summary-line { + display: flex; + justify-content: space-between; + gap: 12px; + } + + .purchase-summary-line strong { + font-weight: 600; + } + + .purchase-summary-total { + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 4px; + } + + .purchase-summary-total .purchase-total-value { + font-size: 20px; + font-weight: 800; + } + + .purchase-summary-total .purchase-old-total { + font-size: 13px; + color: var(--text-secondary); + text-decoration: line-through; + } + + .purchase-summary-total .purchase-discount-chip { + display: inline-flex; + align-items: center; + padding: 2px 8px; + border-radius: 999px; + background: rgba(var(--primary-rgb), 0.12); + color: var(--primary); + font-size: 11px; + font-weight: 700; + } + + .purchase-summary-footnote { + font-size: 12px; + color: var(--text-secondary); + } + + .purchase-balance-warning { + padding: 12px 14px; + border-radius: var(--radius); + border: 1px solid rgba(var(--danger-rgb), 0.2); + background: rgba(var(--danger-rgb), 0.08); + color: var(--danger); + font-size: 13px; + font-weight: 600; + } + + .purchase-actions { + display: flex; + flex-direction: column; + gap: 10px; + } + + .purchase-actions .btn { + width: 100%; + } + + .purchase-loading { + display: flex; + flex-direction: column; + gap: 12px; + } + + .purchase-loading-line { + height: 16px; + border-radius: 999px; + background: linear-gradient(90deg, rgba(0, 0, 0, 0.05), rgba(0,0,0,0.12), rgba(0,0,0,0.05)); + animation: shimmer 1.2s infinite; + } + + :root[data-theme="dark"] .purchase-option-button, + :root[data-theme="dark"] .purchase-server-option, + :root[data-theme="dark"] .purchase-summary { + background: rgba(15, 23, 42, 0.6); + } + + :root[data-theme="dark"] .purchase-summary { + border-color: rgba(148, 163, 184, 0.28); + } + + :root[data-theme="dark"] .purchase-loading-line { + background: linear-gradient(90deg, rgba(255,255,255,0.04), rgba(255,255,255,0.08), rgba(255,255,255,0.04)); + } + + .purchase-empty { + font-size: 13px; + color: var(--text-secondary); + } + + .purchase-error { + font-size: 13px; + color: var(--danger); + padding: 12px 14px; + border-radius: var(--radius); + border: 1px solid rgba(var(--danger-rgb), 0.25); + background: rgba(var(--danger-rgb), 0.08); + } + + .purchase-retry { + align-self: flex-start; + padding: 10px 16px; + border-radius: var(--radius); + border: 1px solid var(--border-color); + background: transparent; + color: var(--text-primary); + font-size: 14px; + font-weight: 600; + cursor: pointer; + transition: all 0.2s ease; + } + + .purchase-retry:hover { + border-color: rgba(var(--primary-rgb), 0.4); + color: var(--primary); + } + .promo-offers { display: flex; flex-direction: column; @@ -3345,6 +3732,105 @@ + + +