/** * Yoone Subscriptions 前端样式 * * 混装产品和订阅功能的前端样式 */ /* ========================================================================== 通用样式 ========================================================================== */ .yoone-notice { position: fixed; top: 20px; right: 20px; padding: 15px 20px; border-radius: 5px; color: white; font-weight: bold; z-index: 9999; max-width: 300px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); } .yoone-notice-success { background-color: #4caf50; } .yoone-notice-error { background-color: #f44336; } .yoone-loading { opacity: 0.6; pointer-events: none; } .yoone-loading::after { content: ''; position: absolute; top: 50%; left: 50%; width: 20px; height: 20px; margin: -10px 0 0 -10px; border: 2px solid #ccc; border-top-color: #333; border-radius: 50%; animation: yoone-spin 1s linear infinite; } @keyframes yoone-spin { to { transform: rotate(360deg); } } /* ========================================================================== 混装产品样式 ========================================================================== */ .yoone-bundle-options { margin: 20px 0; padding: 25px; border: 2px solid #e1e1e1; border-radius: 8px; background: linear-gradient(135deg, #f8f9fa 0%, #ffffff 100%); box-shadow: 0 2px 15px rgba(0,0,0,0.05); } .yoone-bundle-options h3 { margin: 0 0 20px 0; color: #2c3e50; font-size: 24px; font-weight: 600; border-bottom: 2px solid #3498db; padding-bottom: 10px; } .yoone-bundle-info { margin-bottom: 25px; } .bundle-description { color: #555; font-size: 16px; line-height: 1.6; margin-bottom: 15px; } .bundle-discount { text-align: center; margin: 15px 0; } .discount-badge { display: inline-block; background: linear-gradient(135deg, #e74c3c, #c0392b); color: white; padding: 8px 16px; border-radius: 25px; font-size: 14px; font-weight: bold; text-transform: uppercase; letter-spacing: 0.5px; box-shadow: 0 2px 10px rgba(231, 76, 60, 0.3); } .yoone-bundle-items { margin: 25px 0; } .bundle-item { display: flex; align-items: center; padding: 20px; margin-bottom: 15px; background: white; border: 1px solid #e9ecef; border-radius: 8px; transition: all 0.3s ease; box-shadow: 0 2px 8px rgba(0,0,0,0.05); } .bundle-item:hover { border-color: #3498db; box-shadow: 0 4px 15px rgba(52, 152, 219, 0.1); transform: translateY(-2px); } .bundle-item .item-image { flex: 0 0 80px; margin-right: 20px; } .bundle-item .item-image img { width: 80px; height: 80px; object-fit: cover; border-radius: 6px; } .bundle-item .item-details { flex: 1; margin-right: 20px; } .bundle-item .item-name { margin: 0 0 8px 0; font-size: 18px; font-weight: 600; color: #2c3e50; } .bundle-item .item-price { margin: 0 0 8px 0; font-weight: bold; color: #e74c3c; font-size: 16px; } .bundle-item .item-description { margin: 0; color: #7f8c8d; font-size: 14px; line-height: 1.4; } .bundle-item .item-quantity { flex: 0 0 120px; margin-right: 20px; } .bundle-item .item-quantity label { display: block; margin-bottom: 5px; font-weight: 600; color: #34495e; font-size: 14px; } .bundle-item .bundle-quantity-input { width: 70px; padding: 8px; border: 2px solid #bdc3c7; border-radius: 4px; text-align: center; font-size: 16px; font-weight: bold; transition: border-color 0.3s ease; } .bundle-item .bundle-quantity-input:focus { outline: none; border-color: #3498db; box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1); } .bundle-item .item-subtotal { flex: 0 0 120px; text-align: right; } .bundle-item .subtotal-label { display: block; font-size: 12px; color: #7f8c8d; margin-bottom: 5px; text-transform: uppercase; letter-spacing: 0.5px; } .bundle-item .subtotal-amount { font-size: 18px; font-weight: bold; color: #27ae60; } .yoone-bundle-summary { background: white; padding: 25px; border-radius: 8px; border: 1px solid #e9ecef; box-shadow: 0 2px 15px rgba(0,0,0,0.05); } .bundle-total .total-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; padding: 8px 0; font-size: 16px; } .bundle-total .total-label { font-weight: 600; color: #2c3e50; } .bundle-total .total-amount { font-weight: bold; color: #27ae60; } .bundle-total .discount { color: #e74c3c !important; } .bundle-total .final-total { border-top: 2px solid #ecf0f1; padding-top: 15px; margin-top: 15px; font-size: 20px; font-weight: bold; } .bundle-total .final-total .total-amount { color: #2c3e50; font-size: 24px; } .bundle-actions { margin-top: 25px; text-align: center; display: flex; gap: 15px; justify-content: center; } .bundle-actions .button { padding: 12px 24px; font-size: 16px; font-weight: 600; border-radius: 6px; transition: all 0.3s ease; text-decoration: none; border: none; cursor: pointer; } .bundle-actions .yoone-calculate-bundle { background: #3498db; color: white; } .bundle-actions .yoone-calculate-bundle:hover { background: #2980b9; transform: translateY(-2px); box-shadow: 0 4px 15px rgba(52, 152, 219, 0.3); } .bundle-actions .yoone-add-bundle-to-cart { background: #27ae60; color: white; } .bundle-actions .yoone-add-bundle-to-cart:hover:not(:disabled) { background: #229954; transform: translateY(-2px); box-shadow: 0 4px 15px rgba(39, 174, 96, 0.3); } .bundle-actions .button:disabled { background: #bdc3c7; color: #7f8c8d; cursor: not-allowed; transform: none; box-shadow: none; } .bundle-quantity-info { margin-top: 20px; padding: 15px; background: #ecf0f1; border-radius: 6px; border-left: 4px solid #3498db; } .bundle-quantity-info p { margin: 5px 0; font-size: 13px; color: #34495e; } .bundle-quantity-error { margin: 15px 0; padding: 15px; background: #fadbd8; border: 1px solid #e74c3c; border-radius: 6px; color: #c0392b; } /* ========================================================================== 订阅选项样式 ========================================================================== */ .yoone-subscription-options { margin: 20px 0; padding: 25px; border: 2px solid #e1e1e1; border-radius: 8px; background: linear-gradient(135deg, #f8f9fa 0%, #ffffff 100%); box-shadow: 0 2px 15px rgba(0,0,0,0.05); } .yoone-subscription-options h3 { margin: 0 0 20px 0; color: #2c3e50; font-size: 24px; font-weight: 600; border-bottom: 2px solid #9b59b6; padding-bottom: 10px; } .subscription-purchase-type { margin-bottom: 20px; } .subscription-purchase-type label { display: block; margin-bottom: 12px; padding: 15px 20px; border: 2px solid #e9ecef; border-radius: 8px; background: white; cursor: pointer; transition: all 0.3s ease; position: relative; font-size: 16px; font-weight: 500; } .subscription-purchase-type label:hover { border-color: #9b59b6; box-shadow: 0 2px 10px rgba(155, 89, 182, 0.1); } .subscription-purchase-type input[type="radio"] { margin-right: 10px; transform: scale(1.2); } .subscription-purchase-type input[type="radio"]:checked + label, .subscription-purchase-type label:has(input[type="radio"]:checked) { border-color: #9b59b6; background: linear-gradient(135deg, #f4f1f7, #ffffff); box-shadow: 0 2px 15px rgba(155, 89, 182, 0.15); } .subscription-purchase-type .price { float: right; font-weight: bold; color: #27ae60; } .subscription-discount { color: #e74c3c; font-weight: bold; font-size: 14px; } .subscription-periods { margin: 20px 0; padding: 20px; background: white; border-radius: 8px; border: 1px solid #e9ecef; } .subscription-periods label { display: block; margin-bottom: 8px; font-weight: 600; color: #2c3e50; font-size: 16px; } .subscription-periods select { width: 100%; padding: 12px 15px; border: 2px solid #bdc3c7; border-radius: 6px; font-size: 16px; background: white; transition: border-color 0.3s ease; } .subscription-periods select:focus { outline: none; border-color: #9b59b6; box-shadow: 0 0 0 3px rgba(155, 89, 182, 0.1); } .subscription-info { margin-top: 20px; padding: 20px; background: white; border: 1px solid #e9ecef; border-radius: 8px; } .subscription-benefits h4 { margin: 0 0 15px 0; color: #2c3e50; font-size: 18px; font-weight: 600; } .subscription-benefits ul { margin: 0; padding-left: 20px; } .subscription-benefits li { margin-bottom: 8px; color: #555; line-height: 1.5; } .subscription-benefits li::marker { color: #27ae60; } .subscription-details { margin: 20px 0; padding: 20px; background: #f8f9fa; border-radius: 6px; border-left: 4px solid #9b59b6; } .subscription-details p { margin: 10px 0; font-size: 16px; } .subscription-details strong { color: #2c3e50; } .subscription-total .billing-cycle { font-size: 14px; color: #7f8c8d; font-weight: normal; } .subscription-management { margin-top: 20px; padding-top: 20px; border-top: 1px solid #e9ecef; } .management-info { font-size: 14px; color: #7f8c8d; line-height: 1.5; } .management-info a { color: #9b59b6; text-decoration: none; font-weight: 600; } .management-info a:hover { text-decoration: underline; } .subscription-trial { margin-top: 20px; padding: 20px; background: linear-gradient(135deg, #d5f4e6, #ffffff); border: 2px solid #27ae60; border-radius: 8px; } .trial-info h4 { margin: 0 0 10px 0; color: #27ae60; font-size: 18px; font-weight: 600; } .trial-info p { margin: 0; color: #27ae60; font-weight: 600; font-size: 16px; } /* ========================================================================== 我的账户订阅样式 ========================================================================== */ .yoone-my-subscriptions { margin: 20px 0; } .yoone-my-subscriptions h2 { color: #2c3e50; font-size: 28px; font-weight: 600; margin-bottom: 25px; border-bottom: 2px solid #3498db; padding-bottom: 10px; } .no-subscriptions { text-align: center; padding: 60px 20px; background: linear-gradient(135deg, #f8f9fa, #ffffff); border-radius: 8px; border: 1px solid #e9ecef; } .no-subscriptions p { font-size: 18px; color: #7f8c8d; margin-bottom: 20px; } .subscription-item { margin-bottom: 30px; padding: 25px; border: 1px solid #e9ecef; border-radius: 8px; background: white; box-shadow: 0 2px 15px rgba(0,0,0,0.05); transition: box-shadow 0.3s ease; } .subscription-item:hover { box-shadow: 0 4px 25px rgba(0,0,0,0.1); } .subscription-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 25px; padding-bottom: 20px; border-bottom: 2px solid #ecf0f1; } .subscription-id h3 { margin: 0 0 8px 0; font-size: 20px; color: #2c3e50; font-weight: 600; } .subscription-status { padding: 4px 12px; border-radius: 20px; font-size: 12px; font-weight: bold; text-transform: uppercase; letter-spacing: 0.5px; } .subscription-status.status-active { background: linear-gradient(135deg, #27ae60, #2ecc71); color: white; box-shadow: 0 2px 8px rgba(39, 174, 96, 0.3); } .subscription-status.status-paused { background: linear-gradient(135deg, #f39c12, #e67e22); color: white; box-shadow: 0 2px 8px rgba(243, 156, 18, 0.3); } .subscription-status.status-cancelled { background: linear-gradient(135deg, #e74c3c, #c0392b); color: white; box-shadow: 0 2px 8px rgba(231, 76, 60, 0.3); } .subscription-status.status-expired { background: linear-gradient(135deg, #95a5a6, #7f8c8d); color: white; box-shadow: 0 2px 8px rgba(149, 165, 166, 0.3); } .subscription-actions { display: flex; gap: 10px; flex-wrap: wrap; } .subscription-actions .button { padding: 8px 16px; font-size: 13px; font-weight: 600; border-radius: 4px; text-decoration: none; border: none; cursor: pointer; transition: all 0.3s ease; } .subscription-pause { background: #f39c12; color: white; } .subscription-pause:hover { background: #e67e22; transform: translateY(-1px); } .subscription-resume { background: #27ae60; color: white; } .subscription-resume:hover { background: #229954; transform: translateY(-1px); } .subscription-cancel { background: #e74c3c; color: white; } .subscription-cancel:hover { background: #c0392b; transform: translateY(-1px); } .subscription-details { background: #3498db; color: white; } .subscription-details:hover { background: #2980b9; transform: translateY(-1px); } .subscription-info { display: grid; grid-template-columns: 1fr 1fr; gap: 25px; margin-bottom: 25px; } .subscription-products h4, .subscription-details-info h4 { margin: 0 0 15px 0; font-size: 16px; color: #2c3e50; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; border-bottom: 1px solid #ecf0f1; padding-bottom: 8px; } .subscription-items { list-style: none; padding: 0; margin: 0; } .subscription-item-row { display: flex; align-items: center; padding: 12px 0; border-bottom: 1px solid #f8f9fa; } .subscription-item-row:last-child { border-bottom: none; } .subscription-item-row .item-image { flex: 0 0 50px; margin-right: 15px; } .subscription-item-row .item-image img { width: 50px; height: 50px; object-fit: cover; border-radius: 4px; } .subscription-item-row .item-details { flex: 1; display: flex; flex-direction: column; } .subscription-item-row .item-name { font-weight: 600; color: #2c3e50; margin-bottom: 4px; font-size: 14px; } .subscription-item-row .item-quantity, .subscription-item-row .item-price { font-size: 12px; color: #7f8c8d; } .subscription-item-row .item-price { font-weight: bold; color: #27ae60; } .detail-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; padding: 8px 0; font-size: 14px; } .detail-label { font-weight: 600; color: #2c3e50; } .detail-value { color: #555; font-weight: 500; } .subscription-management { padding-top: 20px; border-top: 2px solid #ecf0f1; } .subscription-management h4 { margin: 0 0 15px 0; font-size: 16px; color: #2c3e50; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; } .management-actions { display: flex; gap: 12px; flex-wrap: wrap; } .management-actions .button { padding: 10px 18px; font-size: 13px; font-weight: 600; border-radius: 4px; text-decoration: none; border: 1px solid #bdc3c7; background: white; color: #2c3e50; transition: all 0.3s ease; } .management-actions .button:hover { border-color: #3498db; background: #3498db; color: white; transform: translateY(-1px); } /* ========================================================================== 响应式设计 ========================================================================== */ @media (max-width: 768px) { .bundle-item { flex-direction: column; text-align: center; padding: 15px; } .bundle-item .item-image, .bundle-item .item-details, .bundle-item .item-quantity, .bundle-item .item-subtotal { margin: 10px 0; flex: none; } .bundle-actions { flex-direction: column; gap: 10px; } .bundle-actions .button { width: 100%; } .subscription-header { flex-direction: column; align-items: flex-start; gap: 15px; } .subscription-actions { width: 100%; justify-content: flex-start; } .subscription-info { grid-template-columns: 1fr; gap: 20px; } .management-actions { flex-direction: column; } .management-actions .button { width: 100%; text-align: center; } .yoone-bundle-options, .yoone-subscription-options { padding: 15px; margin: 15px 0; } .yoone-bundle-options h3, .yoone-subscription-options h3 { font-size: 20px; } } @media (max-width: 480px) { .subscription-purchase-type .price { float: none; display: block; margin-top: 5px; } .bundle-total .total-row { font-size: 14px; } .bundle-total .final-total { font-size: 18px; } .bundle-total .final-total .total-amount { font-size: 20px; } }