subscription/assets/css/yoone-frontend.css

894 lines
17 KiB
CSS

/**
* 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;
}
}