.container { max-width: 1200px; margin: 0 auto; } .header { margin-bottom: var(--spacing-xl); } .title { font-size: 28px; font-weight: 700; color: var(--text-primary); margin-bottom: var(--spacing-sm); } .subtitle { font-size: 14px; color: var(--text-secondary); } /* Loading */ .loading { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 400px; color: var(--text-secondary); } .spinner { width: 40px; height: 40px; border: 3px solid var(--border-color); border-top-color: var(--primary-color); border-radius: 50%; animation: spin 1s linear infinite; margin-bottom: var(--spacing-md); } @keyframes spin { to { transform: rotate(360deg); } } /* Empty State */ .empty { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: var(--spacing-xl) * 2; text-align: center; } .emptyIcon { font-size: 64px; margin-bottom: var(--spacing-lg); } .emptyTitle { font-size: 20px; font-weight: 600; color: var(--text-primary); margin-bottom: var(--spacing-sm); } .emptyText { font-size: 14px; color: var(--text-secondary); margin-bottom: var(--spacing-xl); max-width: 400px; } .emptyActions { display: flex; gap: var(--spacing-md); } /* Buttons */ .primaryButton { display: inline-flex; align-items: center; justify-content: center; padding: var(--spacing-sm) var(--spacing-lg); background-color: var(--primary-color); color: white; border: none; border-radius: var(--radius-md); font-size: 14px; font-weight: 500; cursor: pointer; transition: background-color 0.2s; } .primaryButton:hover { background-color: var(--primary-light); } .secondaryButton { display: inline-flex; align-items: center; justify-content: center; padding: var(--spacing-sm) var(--spacing-lg); background-color: transparent; color: var(--primary-color); border: 1px solid var(--primary-color); border-radius: var(--radius-md); font-size: 14px; font-weight: 500; cursor: pointer; transition: all 0.2s; } .secondaryButton:hover { background-color: var(--primary-color); color: white; } /* Grid */ .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: var(--spacing-lg); } /* Card */ .card { background-color: var(--surface-color); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); overflow: hidden; transition: box-shadow 0.2s; } .card:hover { box-shadow: var(--shadow-md); } .cardHeader { display: flex; align-items: center; justify-content: space-between; padding: var(--spacing-md) var(--spacing-lg); background-color: var(--background-color); border-bottom: 1px solid var(--border-color); } .cardTitle { font-size: 16px; font-weight: 600; color: var(--text-primary); } .threshold { font-size: 12px; font-weight: 500; padding: var(--spacing-xs) var(--spacing-sm); background-color: var(--primary-color); color: white; border-radius: var(--radius-full); } .cardBody { padding: var(--spacing-lg); } .infoRow { display: flex; justify-content: space-between; align-items: center; padding: var(--spacing-sm) 0; border-bottom: 1px solid var(--border-color); } .infoRow:last-child { border-bottom: none; } .infoLabel { font-size: 13px; color: var(--text-secondary); } .infoValue { font-size: 13px; color: var(--text-primary); font-family: monospace; } .cardFooter { padding: var(--spacing-md) var(--spacing-lg); border-top: 1px solid var(--border-color); display: flex; justify-content: flex-end; } .actionButton { padding: var(--spacing-sm) var(--spacing-md); background-color: transparent; color: var(--primary-color); border: 1px solid var(--border-color); border-radius: var(--radius-md); font-size: 13px; font-weight: 500; cursor: pointer; transition: all 0.2s; } .actionButton:hover { border-color: var(--primary-color); background-color: rgba(0, 90, 156, 0.05); } .transferButton { color: #28a745; margin-right: var(--spacing-sm); } .transferButton:hover { border-color: #28a745; background-color: rgba(40, 167, 69, 0.05); } .dangerButton { color: #dc3545; margin-left: var(--spacing-sm); } .dangerButton:hover { border-color: #dc3545; background-color: rgba(220, 53, 69, 0.05); } /* Address Section */ .addressSection { display: flex; align-items: center; gap: var(--spacing-md); padding: var(--spacing-md); margin-bottom: var(--spacing-md); background-color: var(--background-color); border-radius: var(--radius-md); cursor: pointer; transition: background-color 0.2s; } .addressSection:hover { background-color: rgba(0, 90, 156, 0.05); } .qrPreview { flex-shrink: 0; padding: var(--spacing-xs); background: white; border-radius: var(--radius-sm); } .addressInfo { display: flex; flex-direction: column; gap: 4px; overflow: hidden; } .addressLabel { font-size: 11px; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.5px; } .addressValue { font-size: 13px; color: var(--text-primary); font-family: monospace; } .addressHint { font-size: 11px; color: var(--primary-color); } /* Modal */ .modalOverlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.5); display: flex; align-items: center; justify-content: center; z-index: 1000; } .modal { background-color: var(--surface-color); border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); max-width: 400px; width: 90%; overflow: hidden; } .modalHeader { display: flex; align-items: center; justify-content: space-between; padding: var(--spacing-md) var(--spacing-lg); border-bottom: 1px solid var(--border-color); } .modalTitle { font-size: 18px; font-weight: 600; color: var(--text-primary); } .modalClose { background: none; border: none; font-size: 24px; color: var(--text-secondary); cursor: pointer; padding: 0; line-height: 1; } .modalClose:hover { color: var(--text-primary); } .modalBody { padding: var(--spacing-lg); display: flex; flex-direction: column; align-items: center; } .qrContainer { padding: var(--spacing-md); background: white; border-radius: var(--radius-md); margin-bottom: var(--spacing-lg); } .fullAddress { text-align: center; margin-bottom: var(--spacing-lg); } .addressLabelLarge { display: block; font-size: 12px; color: var(--text-secondary); margin-bottom: var(--spacing-sm); } .addressValueLarge { display: block; font-size: 14px; color: var(--text-primary); font-family: monospace; word-break: break-all; background-color: var(--background-color); padding: var(--spacing-sm) var(--spacing-md); border-radius: var(--radius-sm); } .modalActions { display: flex; gap: var(--spacing-md); width: 100%; } .modalActions .primaryButton, .modalActions .secondaryButton { flex: 1; text-align: center; text-decoration: none; } /* Balance Section */ .balanceSection { display: flex; justify-content: space-between; align-items: center; padding: var(--spacing-md); margin-bottom: var(--spacing-md); background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: var(--radius-md); } .balanceLabel { font-size: 12px; color: rgba(255, 255, 255, 0.85); font-weight: 500; } .balanceValue { font-size: 18px; font-weight: 700; color: white; font-family: monospace; } .balanceLoading { font-size: 14px; font-weight: 400; color: rgba(255, 255, 255, 0.7); font-style: italic; }