diff --git a/miniapp/index.html b/miniapp/index.html index b1f33202..ca6121dd 100644 --- a/miniapp/index.html +++ b/miniapp/index.html @@ -406,6 +406,11 @@ position: relative; } + .subscription-purchase-card { + position: relative; + margin-top: 24px; + } + .subscription-settings-summary { margin-left: auto; display: flex; @@ -1091,6 +1096,352 @@ text-align: right; } + .subscription-purchase-card.hidden { + display: none; + } + + .subscription-purchase-content { + display: flex; + flex-direction: column; + gap: 20px; + } + + .subscription-purchase-loading { + display: grid; + gap: 8px; + } + + .subscription-purchase-loading-line { + height: 12px; + border-radius: 999px; + background: linear-gradient(90deg, rgba(148, 163, 184, 0.15), rgba(148, 163, 184, 0.35), rgba(148, 163, 184, 0.15)); + background-size: 200% 100%; + animation: shimmer 1.6s infinite; + } + + .subscription-purchase-error { + display: flex; + flex-direction: column; + gap: 12px; + padding: 16px; + border-radius: var(--radius); + background: rgba(var(--danger-rgb), 0.08); + border: 1px solid rgba(var(--danger-rgb), 0.2); + color: var(--danger); + } + + .subscription-purchase-error.hidden { + display: none; + } + + .subscription-purchase-retry { + align-self: flex-start; + padding: 8px 16px; + border-radius: var(--radius); + background: var(--primary); + color: #fff; + font-weight: 600; + border: none; + cursor: pointer; + transition: transform 0.2s ease, box-shadow 0.2s ease; + } + + .subscription-purchase-retry:hover { + transform: translateY(-1px); + box-shadow: var(--shadow-sm); + } + + .subscription-purchase-body.hidden { + display: none; + } + + .subscription-purchase-section { + display: flex; + flex-direction: column; + gap: 12px; + } + + .subscription-purchase-section + .subscription-purchase-section { + border-top: 1px solid rgba(148, 163, 184, 0.15); + padding-top: 16px; + } + + .subscription-purchase-section-header { + display: flex; + flex-direction: column; + gap: 4px; + } + + .subscription-purchase-section-title { + font-weight: 700; + font-size: 16px; + } + + .subscription-purchase-section-description { + font-size: 13px; + color: var(--text-secondary); + } + + .subscription-purchase-options { + display: grid; + gap: 10px; + } + + .subscription-purchase-options.condensed { + grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); + } + + .subscription-purchase-toggle { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 4px; + padding: 12px 14px; + border-radius: var(--radius); + border: 1px solid rgba(148, 163, 184, 0.24); + background: rgba(148, 163, 184, 0.08); + color: var(--text-primary); + cursor: pointer; + transition: all 0.25s ease; + } + + .subscription-purchase-toggle:hover { + border-color: rgba(var(--primary-rgb), 0.35); + box-shadow: var(--shadow-sm); + } + + .subscription-purchase-toggle.active { + border-color: rgba(var(--primary-rgb), 0.6); + background: rgba(var(--primary-rgb), 0.12); + box-shadow: var(--shadow-sm); + } + + .subscription-purchase-toggle-title { + font-weight: 600; + font-size: 15px; + } + + .subscription-purchase-toggle-meta { + display: flex; + gap: 8px; + align-items: baseline; + font-size: 13px; + color: var(--text-secondary); + } + + .subscription-purchase-toggle-price { + font-weight: 600; + font-size: 14px; + } + + .subscription-purchase-toggle-original { + text-decoration: line-through; + opacity: 0.6; + font-size: 12px; + } + + .subscription-purchase-toggle-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: 600; + text-transform: uppercase; + letter-spacing: 0.04em; + } + + .subscription-purchase-fixed-value { + font-weight: 600; + font-size: 15px; + } + + .subscription-purchase-note { + font-size: 13px; + color: var(--text-secondary); + } + + .subscription-purchase-summary { + border-top: 1px solid rgba(148, 163, 184, 0.15); + padding-top: 16px; + display: flex; + flex-direction: column; + gap: 12px; + } + + .subscription-purchase-total { + display: flex; + justify-content: space-between; + align-items: baseline; + } + + .subscription-purchase-total-label { + font-size: 14px; + color: var(--text-secondary); + } + + .subscription-purchase-total-values { + display: flex; + flex-direction: column; + align-items: flex-end; + } + + .subscription-purchase-total-current { + font-weight: 700; + font-size: 20px; + } + + .subscription-purchase-total-original { + text-decoration: line-through; + font-size: 13px; + color: var(--text-secondary); + } + + .subscription-purchase-summary-note { + font-size: 13px; + color: var(--text-secondary); + } + + .subscription-purchase-discount { + font-size: 13px; + color: var(--success); + display: flex; + flex-wrap: wrap; + gap: 6px; + } + + .subscription-purchase-discount.hidden, + .subscription-purchase-total-original.hidden, + .subscription-purchase-topup.hidden { + display: none; + } + + .subscription-purchase-actions { + display: flex; + flex-direction: column; + gap: 8px; + } + + .subscription-purchase-actions .btn { + width: 100%; + } + + .subscription-purchase-topup { + background: transparent; + color: var(--primary); + border: 1px solid rgba(var(--primary-rgb), 0.4); + } + + .subscription-purchase-topup:hover { + background: rgba(var(--primary-rgb), 0.08); + } + + .subscription-purchase-inline-hint { + font-size: 12px; + color: var(--text-secondary); + } + + .subscription-purchase-inline-hint.error { + color: var(--danger); + } + + .subscription-purchase-servers-list { + display: grid; + gap: 8px; + } + + .subscription-purchase-servers-empty { + font-size: 13px; + color: var(--text-secondary); + } + + .subscription-purchase-selection-summary { + display: flex; + flex-wrap: wrap; + gap: 6px; + font-size: 12px; + color: var(--text-secondary); + } + + .subscription-purchase-selection-chip { + padding: 4px 8px; + background: rgba(var(--primary-rgb), 0.08); + border-radius: 999px; + } + + .subscription-purchase-stepper { + display: flex; + align-items: center; + gap: 12px; + } + + .subscription-purchase-stepper button { + width: 36px; + height: 36px; + border-radius: 10px; + border: 1px solid rgba(148, 163, 184, 0.35); + background: rgba(148, 163, 184, 0.12); + color: var(--text-primary); + font-size: 20px; + font-weight: 600; + display: inline-flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: transform 0.2s ease, box-shadow 0.2s ease; + } + + .subscription-purchase-stepper button:hover:not(:disabled) { + transform: translateY(-1px); + box-shadow: var(--shadow-sm); + border-color: rgba(var(--primary-rgb), 0.4); + } + + .subscription-purchase-stepper button:disabled { + opacity: 0.4; + cursor: not-allowed; + } + + .subscription-purchase-stepper-value { + min-width: 40px; + text-align: center; + font-weight: 600; + font-size: 16px; + } + + .subscription-purchase-devices-note { + font-size: 12px; + color: var(--text-secondary); + } + + .subscription-purchase-balance { + font-size: 13px; + color: var(--text-secondary); + } + + .subscription-purchase-summary-warning { + font-size: 13px; + color: var(--danger); + } + + .subscription-purchase-summary-warning.hidden { + display: none; + } + + @media (max-width: 360px) { + .subscription-purchase-toggle { + padding: 10px 12px; + } + + .subscription-purchase-stepper button { + width: 32px; + height: 32px; + } + } + /* Promo card */ .promo-card .card-header { gap: 12px; @@ -3350,6 +3701,85 @@
+ + +