/* ===== ProfilePage Styles ===== */ .profile-page { height: 100%; display: flex; flex-direction: column; overflow: hidden; background: var(--color-bg-primary); } /* ----- Header Area ----- */ .profile-header { padding: var(--space-3xl) var(--space-4xl) var(--space-xl); background: var(--color-bg-secondary); border-bottom: 1px solid var(--color-border-light); } .profile-user-card { display: flex; align-items: center; gap: var(--space-xl); max-width: 900px; } .profile-avatar { width: 72px; height: 72px; border-radius: 50%; display: flex; align-items: center; justify-content: center; flex-shrink: 0; box-shadow: var(--shadow-md); } .profile-avatar span { font-size: 28px; font-weight: 700; color: white; line-height: 1; } .profile-user-info { display: flex; flex-direction: column; gap: var(--space-sm); } .profile-username-row { display: flex; align-items: center; gap: var(--space-md); } .profile-username { font-size: var(--text-xl); font-weight: 700; color: var(--color-text-primary); line-height: 1.3; } .profile-level-badge { display: inline-flex; align-items: center; padding: 2px 12px; border-radius: var(--radius-full); font-size: var(--text-xs); font-weight: 600; color: white; letter-spacing: 0.02em; } .profile-expire { display: flex; align-items: center; gap: var(--space-xs); font-size: var(--text-sm); color: var(--color-text-secondary); } .profile-expire-icon { display: flex; align-items: center; } /* ----- Body Layout ----- */ .profile-body { display: flex; flex: 1; overflow: hidden; } /* ----- Left Tabs ----- */ .profile-tabs { width: 200px; flex-shrink: 0; background: var(--color-bg-secondary); border-right: 1px solid var(--color-border-light); padding: var(--space-lg) 0; display: flex; flex-direction: column; gap: var(--space-xs); overflow-y: auto; } .profile-tab { display: flex; align-items: center; gap: var(--space-md); padding: var(--space-md) var(--space-xl); font-size: var(--text-base); font-weight: 500; color: var(--color-text-secondary); border: none; background: none; cursor: pointer; transition: all var(--transition-fast); border-left: 2px solid transparent; text-align: left; width: 100%; } .profile-tab:hover { background: var(--color-bg-hover); color: var(--color-text-primary); } .profile-tab.active { background: var(--color-accent-subtle); color: var(--color-accent); font-weight: 600; border-left-color: var(--color-accent); } .profile-tab-icon { display: flex; align-items: center; flex-shrink: 0; width: 20px; height: 20px; justify-content: center; } .profile-tab-label { white-space: nowrap; } /* ----- Right Content ----- */ .profile-content { flex: 1; overflow-y: auto; padding: var(--space-3xl); background: var(--color-bg-primary); } /* ----- Section ----- */ .profile-section { background: var(--color-bg-secondary); border-radius: var(--radius-lg); padding: var(--space-2xl); margin-bottom: var(--space-xl); box-shadow: var(--shadow-xs); border: 1px solid var(--color-border-light); } .section-title { display: flex; align-items: center; gap: var(--space-sm); font-size: var(--text-md); font-weight: 600; color: var(--color-text-primary); margin-bottom: var(--space-xl); } .section-icon { display: flex; align-items: center; color: var(--color-accent); } /* ----- Form ----- */ .form-grid { display: flex; flex-direction: column; gap: var(--space-lg); } .form-item { display: flex; flex-direction: column; gap: var(--space-xs); } .form-label-small { font-size: var(--text-sm); font-weight: 500; color: var(--color-text-secondary); } .form-input { height: 40px; padding: 0 var(--space-md); border: 1px solid var(--color-border); border-radius: var(--radius-sm); font-size: var(--text-base); color: var(--color-text-primary); background: var(--color-bg-primary); transition: border-color var(--transition-fast); outline: none; width: 100%; max-width: 400px; } .form-input:focus { border-color: var(--color-accent); box-shadow: 0 0 0 3px var(--color-accent-light); } .form-input::placeholder { color: var(--color-text-disabled); } .form-item-btn { align-self: flex-start; } /* ----- Buttons ----- */ .btn-primary { display: inline-flex; align-items: center; gap: var(--space-xs); padding: var(--space-sm) var(--space-xl); height: 36px; background: var(--color-accent); color: white; border: none; border-radius: var(--radius-sm); font-size: var(--text-sm); font-weight: 600; cursor: pointer; transition: all var(--transition-fast); } .btn-primary:hover { background: var(--color-accent-hover); } .btn-secondary { display: inline-flex; align-items: center; gap: var(--space-xs); padding: var(--space-sm) var(--space-xl); height: 36px; background: var(--color-bg-secondary); color: var(--color-text-primary); border: 1px solid var(--color-border); border-radius: var(--radius-sm); font-size: var(--text-sm); font-weight: 500; cursor: pointer; transition: all var(--transition-fast); } .btn-secondary:hover { background: var(--color-bg-hover); border-color: var(--color-border-hover); } /* ----- Bind ----- */ .bind-container { display: flex; flex-direction: column; gap: var(--space-lg); } .bind-type-toggle { display: flex; gap: var(--space-xs); } .bind-type-btn { display: flex; align-items: center; gap: var(--space-xs); padding: var(--space-sm) var(--space-lg); border: 1px solid var(--color-border); border-radius: var(--radius-sm); font-size: var(--text-sm); font-weight: 500; color: var(--color-text-secondary); background: var(--color-bg-secondary); cursor: pointer; transition: all var(--transition-fast); } .bind-type-btn:hover { background: var(--color-bg-hover); } .bind-type-btn.active { border-color: var(--color-accent); color: var(--color-accent); background: var(--color-accent-subtle); } .bind-input-row { display: flex; gap: var(--space-lg); align-items: flex-end; } /* ----- Simple Table ----- */ .simple-table-wrapper { overflow-x: auto; } .simple-table { width: 100%; border-collapse: collapse; font-size: var(--text-sm); } .simple-table th { text-align: left; padding: var(--space-md) var(--space-lg); font-weight: 600; font-size: var(--text-xs); color: var(--color-text-tertiary); text-transform: uppercase; letter-spacing: 0.05em; border-bottom: 1px solid var(--color-border); white-space: nowrap; } .simple-table td { padding: var(--space-md) var(--space-lg); color: var(--color-text-primary); border-bottom: 1px solid var(--color-border-light); white-space: nowrap; } .simple-table tbody tr:hover { background: var(--color-bg-hover); } .td-muted { color: var(--color-text-tertiary); } .td-mono { font-family: var(--font-mono); font-size: var(--text-xs); color: var(--color-text-secondary); } .td-price { font-family: var(--font-mono); font-weight: 600; color: var(--color-text-primary); } .td-empty { text-align: center; color: var(--color-text-tertiary); padding: var(--space-4xl) var(--space-lg) !important; font-size: var(--text-base); } /* ----- Status Dot ----- */ .status-dot { display: inline-block; width: 6px; height: 6px; border-radius: 50%; margin-right: var(--space-xs); vertical-align: middle; } /* ----- Filter Tabs ----- */ .tab-panel-content { display: flex; flex-direction: column; gap: var(--space-xl); } .filter-tabs { display: flex; gap: var(--space-xs); background: var(--color-bg-secondary); padding: var(--space-xs); border-radius: var(--radius-md); border: 1px solid var(--color-border-light); width: fit-content; } .filter-tab { padding: var(--space-sm) var(--space-lg); font-size: var(--text-sm); font-weight: 500; color: var(--color-text-secondary); border: none; background: none; border-radius: var(--radius-sm); cursor: pointer; transition: all var(--transition-fast); white-space: nowrap; } .filter-tab:hover { color: var(--color-text-primary); background: var(--color-bg-hover); } .filter-tab.active { color: var(--color-accent); background: var(--color-accent-subtle); font-weight: 600; } /* ----- Order Type Tag ----- */ .order-type-tag { display: inline-block; padding: 1px 8px; border-radius: var(--radius-full); font-size: var(--text-xs); font-weight: 500; background: var(--color-bg-tertiary); color: var(--color-text-secondary); } /* ----- Membership Card ----- */ .membership-card { background: var(--color-bg-secondary); border-radius: var(--radius-xl); padding: var(--space-3xl); box-shadow: var(--shadow-sm); border: 1px solid var(--color-border-light); display: flex; flex-direction: column; gap: var(--space-2xl); } .membership-card-header { display: flex; align-items: center; gap: var(--space-xl); } .membership-card-icon { width: 64px; height: 64px; border-radius: var(--radius-lg); background: linear-gradient(135deg, var(--color-accent), #8185F5); display: flex; align-items: center; justify-content: center; color: white; box-shadow: var(--shadow-md); } .membership-card-title { display: flex; align-items: center; gap: var(--space-md); } .membership-card-title h2 { font-size: var(--text-2xl); font-weight: 700; color: var(--color-text-primary); } .membership-level-tag { padding: 2px 10px; border-radius: var(--radius-full); background: var(--color-accent-light); color: var(--color-accent); font-size: var(--text-xs); font-weight: 700; } .membership-stats { display: flex; gap: var(--space-2xl); padding: var(--space-xl); background: var(--color-bg-primary); border-radius: var(--radius-md); } .membership-stat { display: flex; flex-direction: column; gap: var(--space-xs); } .stat-label { font-size: var(--text-xs); color: var(--color-text-tertiary); text-transform: uppercase; letter-spacing: 0.05em; } .stat-value { font-size: var(--text-lg); font-weight: 700; color: var(--color-text-primary); font-family: var(--font-mono); } .membership-features { display: flex; flex-direction: column; gap: var(--space-md); } .features-title { font-size: var(--text-md); font-weight: 600; color: var(--color-text-primary); } .features-list { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-md); list-style: none; } .feature-item { display: flex; align-items: center; gap: var(--space-sm); font-size: var(--text-base); color: var(--color-text-secondary); } .feature-check { display: flex; align-items: center; color: var(--color-success); flex-shrink: 0; } .membership-auto-renew { display: flex; align-items: center; justify-content: space-between; padding: var(--space-lg) var(--space-xl); background: var(--color-bg-primary); border-radius: var(--radius-md); } .auto-renew-label { font-size: var(--text-base); font-weight: 500; color: var(--color-text-primary); } /* ----- Toggle Switch ----- */ .toggle-switch { position: relative; display: inline-block; width: 44px; height: 24px; cursor: pointer; } .toggle-switch input { position: absolute; opacity: 0; width: 0; height: 0; } .toggle-slider { position: absolute; inset: 0; background: var(--color-border-hover); border-radius: var(--radius-full); transition: all var(--transition-fast); } .toggle-slider::before { content: ''; position: absolute; width: 18px; height: 18px; left: 3px; bottom: 3px; background: white; border-radius: 50%; transition: all var(--transition-fast); box-shadow: var(--shadow-xs); } .toggle-switch input:checked + .toggle-slider { background: var(--color-accent); } .toggle-switch input:checked + .toggle-slider::before { transform: translateX(20px); } /* ----- Membership Actions ----- */ .membership-actions { display: flex; gap: var(--space-md); } .membership-empty { text-align: center; padding: var(--space-4xl); display: flex; flex-direction: column; align-items: center; gap: var(--space-xl); } .membership-empty p { font-size: var(--text-base); color: var(--color-text-secondary); } /* ----- Coupon List ----- */ .coupon-list { display: flex; flex-direction: column; gap: var(--space-md); } .coupon-item { display: flex; align-items: center; justify-content: space-between; padding: var(--space-xl); background: var(--color-bg-secondary); border-radius: var(--radius-lg); border: 1px solid var(--color-border-light); transition: all var(--transition-fast); } .coupon-item:hover { border-color: var(--color-border-hover); box-shadow: var(--shadow-sm); } .coupon-item.coupon-disabled { opacity: 0.55; } .coupon-left { display: flex; flex-direction: column; gap: var(--space-xs); } .coupon-code { font-family: var(--font-mono); font-size: var(--text-lg); font-weight: 700; color: var(--color-accent); letter-spacing: 0.05em; } .coupon-item.coupon-disabled .coupon-code { color: var(--color-text-tertiary); } .coupon-desc { font-size: var(--text-base); color: var(--color-text-secondary); font-weight: 500; } .coupon-date { font-size: var(--text-xs); color: var(--color-text-tertiary); } .coupon-right { display: flex; flex-direction: column; align-items: center; gap: var(--space-sm); flex-shrink: 0; } .coupon-status { display: inline-block; padding: 2px 10px; border-radius: var(--radius-full); font-size: var(--text-xs); font-weight: 600; } .btn-coupon-use { padding: var(--space-xs) var(--space-lg); font-size: var(--text-xs); font-weight: 600; color: var(--color-accent); background: var(--color-accent-subtle); border-radius: var(--radius-sm); cursor: pointer; transition: all var(--transition-fast); } .btn-coupon-use:hover { background: var(--color-accent-light); } /* ----- Apps Grid ----- */ .apps-grid { display: flex; flex-direction: column; gap: var(--space-md); } .app-card { display: flex; flex-direction: column; gap: var(--space-md); padding: var(--space-xl); background: var(--color-bg-secondary); border-radius: var(--radius-lg); border: 1px solid var(--color-border-light); transition: all var(--transition-fast); } .app-card:hover { border-color: var(--color-border-hover); box-shadow: var(--shadow-sm); } .app-card-header { display: flex; align-items: center; gap: var(--space-md); } .app-card-icon { width: 44px; height: 44px; border-radius: var(--radius-md); background: var(--color-bg-tertiary); display: flex; align-items: center; justify-content: center; font-size: 20px; flex-shrink: 0; } .app-card-info { display: flex; flex-direction: column; gap: var(--space-xs); } .app-card-name { font-size: var(--text-md); font-weight: 600; color: var(--color-text-primary); } .app-card-meta { display: flex; gap: var(--space-sm); } .app-type-tag, .app-source-tag { display: inline-block; padding: 1px 8px; border-radius: var(--radius-full); font-size: 11px; font-weight: 500; } .app-type-tag { background: var(--color-accent-light); color: var(--color-accent); } .app-source-tag { background: var(--color-bg-tertiary); color: var(--color-text-tertiary); } .app-card-desc { font-size: var(--text-sm); color: var(--color-text-secondary); line-height: 1.6; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .app-card-footer { display: flex; align-items: center; gap: var(--space-xs); font-size: var(--text-xs); color: var(--color-text-tertiary); } .app-card-footer svg { flex-shrink: 0; } .app-purchase-date { display: flex; align-items: center; gap: var(--space-xs); } /* ----- API Keys ----- */ .apikey-header { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-xl); background: var(--color-bg-secondary); padding: var(--space-2xl); border-radius: var(--radius-lg); border: 1px solid var(--color-border-light); } .apikey-info h3 { font-size: var(--text-md); font-weight: 600; color: var(--color-text-primary); margin-bottom: var(--space-xs); } .apikey-desc { font-size: var(--text-sm); color: var(--color-text-secondary); } .apikey-list { background: var(--color-bg-secondary); border-radius: var(--radius-lg); border: 1px solid var(--color-border-light); overflow: hidden; } .apikey-list-header { display: grid; grid-template-columns: 1fr 200px 100px 140px; padding: var(--space-md) var(--space-xl); font-size: var(--text-xs); font-weight: 600; color: var(--color-text-tertiary); text-transform: uppercase; letter-spacing: 0.05em; background: var(--color-bg-tertiary); } .apikey-row { display: grid; grid-template-columns: 1fr 200px 100px 140px; padding: var(--space-lg) var(--space-xl); font-size: var(--text-sm); align-items: center; border-bottom: 1px solid var(--color-border-light); transition: background var(--transition-fast); } .apikey-row:last-child { border-bottom: none; } .apikey-row:hover { background: var(--color-bg-hover); } .apikey-prefix-col { display: flex; flex-direction: column; gap: var(--space-sm); } .apikey-prefix { font-family: var(--font-mono); font-size: var(--text-sm); color: var(--color-text-primary); font-weight: 500; } .apikey-full-reveal { padding: var(--space-sm) var(--space-md); background: var(--color-warning-light); border-radius: var(--radius-sm); border: 1px solid var(--color-warning); } .apikey-full-reveal code { font-family: var(--font-mono); font-size: var(--text-xs); color: var(--color-text-primary); word-break: break-all; } .apikey-date { color: var(--color-text-tertiary); font-size: var(--text-sm); } .apikey-status { display: inline-block; padding: 2px 10px; border-radius: var(--radius-full); font-size: var(--text-xs); font-weight: 600; } .apikey-status.active { background: var(--color-success-light); color: var(--color-success); } .apikey-status.disabled { background: var(--color-bg-tertiary); color: var(--color-text-tertiary); } .apikey-actions { display: flex; gap: var(--space-sm); } .apikey-action-btn { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; padding: 0; border: 1px solid var(--color-border); border-radius: var(--radius-sm); background: var(--color-bg-secondary); color: var(--color-text-secondary); cursor: pointer; transition: all var(--transition-fast); font-size: var(--text-xs); font-weight: 500; } .apikey-action-btn:hover { background: var(--color-bg-hover); border-color: var(--color-border-hover); color: var(--color-text-primary); } .apikey-action-btn.danger { color: var(--color-error); } .apikey-action-btn.danger:hover { background: var(--color-error-light); border-color: var(--color-error); } /* ----- Empty State ----- */ .content-empty { text-align: center; padding: var(--space-5xl); color: var(--color-text-tertiary); font-size: var(--text-base); } /* ----- Responsive ----- */ @media (max-width: 768px) { .profile-header { padding: var(--space-xl) var(--space-lg); } .profile-body { flex-direction: column; } .profile-tabs { width: 100%; flex-direction: row; overflow-x: auto; padding: var(--space-sm); gap: 0; border-right: none; border-bottom: 1px solid var(--color-border-light); } .profile-tab { border-left: none; border-bottom: 2px solid transparent; padding: var(--space-sm) var(--space-md); white-space: nowrap; font-size: var(--text-sm); } .profile-tab.active { border-left-color: transparent; border-bottom-color: var(--color-accent); } .profile-content { padding: var(--space-lg); } .features-list { grid-template-columns: 1fr; } .membership-stats { flex-direction: column; gap: var(--space-md); } .apikey-list-header, .apikey-row { grid-template-columns: 1fr 120px 80px 120px; padding: var(--space-md); font-size: var(--text-xs); } .apikey-header { flex-direction: column; } } @media (max-width: 480px) { .profile-avatar { width: 56px; height: 56px; } .profile-username { font-size: var(--text-lg); } .bind-input-row { flex-direction: column; } .coupon-item { flex-direction: column; align-items: flex-start; gap: var(--space-md); } .coupon-right { flex-direction: row; } } /* ----- Form Message (success/error) ----- */ .form-message { padding: var(--space-sm) var(--space-md); border-radius: var(--radius-md); font-size: var(--text-sm); margin-bottom: var(--space-md); } .form-message.success { color: var(--color-success); background: var(--color-success-light); border: 1px solid var(--color-success); } .form-message.error { color: var(--color-error); background: var(--color-error-light); border: 1px solid var(--color-error); }