PlanTempusApp/PlanTempus.Application/wwwroot/css/account.css
Janus C. H. Knudsen 5e2cab9bd5 Refactor CSS using nested selectors and media queries
Improves CSS organization by adopting PostCSS nesting syntax
Enhances responsiveness with refined media query implementations
Reduces code repetition and improves maintainability of stylesheets

Modernizes CSS structure across multiple component stylesheets
2026-01-14 16:31:28 +01:00

323 lines
6.8 KiB
CSS

/**
* Account Styles - Subscription & Billing Management
*
* For logged-in users to manage their subscription plan,
* payment method, and view invoice history.
*
* Reuses: swp-btn, swp-plan-card, swp-plan-badge, swp-plan-action (components.css)
*/
/* ===========================================
SECTION STYLING
=========================================== */
swp-account-section {
display: block;
margin-bottom: var(--section-gap);
}
swp-account-section-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: var(--section-gap);
}
swp-account-section-title {
display: flex;
align-items: center;
gap: var(--spacing-3);
font-size: var(--font-size-lg);
font-weight: var(--font-weight-semibold);
color: var(--color-text);
& i {
font-size: 22px;
color: var(--color-teal);
}
}
/* ===========================================
PLAN GRID
=========================================== */
swp-plan-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--card-gap);
@media (max-width: 1024px) {
grid-template-columns: 1fr;
}
}
/* Plan card/badge/action styles in components.css */
/* ===========================================
BILLING GRID (2 columns)
=========================================== */
swp-billing-grid {
display: grid;
grid-template-columns: 380px 1fr;
gap: var(--card-gap);
@media (max-width: 1024px) {
grid-template-columns: 1fr;
}
}
/* ===========================================
PAYMENT CARD
=========================================== */
swp-payment-card {
display: flex;
flex-direction: column;
gap: var(--card-padding);
background: var(--color-surface);
border-radius: var(--radius-lg);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
padding: var(--card-padding);
@media (max-width: 768px) {
padding: var(--spacing-5);
}
}
swp-payment-method {
display: flex;
align-items: center;
gap: var(--spacing-4);
padding: var(--card-padding);
background: var(--color-background-alt);
border-radius: var(--radius-md);
}
swp-payment-icon {
width: 48px;
height: 32px;
background: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: var(--radius-sm);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
& i {
font-size: 24px;
color: var(--color-blue);
}
}
swp-payment-info {
flex: 1;
min-width: 0;
}
swp-payment-type {
display: block;
font-size: var(--font-size-base);
font-weight: var(--font-weight-semibold);
color: var(--color-text);
margin-bottom: 2px;
}
swp-payment-number {
display: block;
font-size: var(--font-size-sm);
color: var(--color-text-secondary);
font-family: var(--font-mono);
}
swp-payment-detail {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--spacing-4) 0;
border-bottom: 1px solid var(--color-border);
&:last-of-type {
border-bottom: none;
}
}
swp-payment-label {
font-size: var(--font-size-sm);
color: var(--color-text-secondary);
}
swp-payment-value {
font-size: var(--font-size-base);
font-weight: var(--font-weight-medium);
color: var(--color-text);
&.highlight {
color: var(--color-teal);
}
}
/* ===========================================
INVOICES CARD
=========================================== */
swp-invoices-card {
display: block;
background: var(--color-surface);
border-radius: var(--radius-lg);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
overflow: hidden;
}
swp-invoices-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--card-padding);
border-bottom: 1px solid var(--color-border);
}
swp-invoices-title {
font-size: var(--font-size-base);
font-weight: var(--font-weight-semibold);
color: var(--color-text);
}
/* ===========================================
INVOICE TABLE (Grid + Subgrid)
=========================================== */
swp-invoice-table {
display: grid;
grid-template-columns: 100px minmax(120px, 1fr) 100px 100px 80px;
@media (max-width: 768px) {
grid-template-columns: 80px minmax(100px, 1fr) 80px 80px 70px;
}
}
swp-invoice-table-header {
display: grid;
grid-column: 1 / -1;
grid-template-columns: subgrid;
background: var(--color-background-alt);
swp-invoice-cell {
font-size: var(--font-size-xs);
font-weight: var(--font-weight-semibold);
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--color-text-secondary);
padding-top: var(--spacing-4);
padding-bottom: var(--spacing-4);
}
}
swp-invoice-table-body {
display: grid;
grid-column: 1 / -1;
grid-template-columns: subgrid;
swp-invoice-row:hover {
background: var(--color-background-hover);
}
}
swp-invoice-row {
display: grid;
grid-column: 1 / -1;
grid-template-columns: subgrid;
align-items: center;
border-bottom: 1px solid var(--color-border);
transition: background var(--transition-fast);
&:last-child {
border-bottom: none;
}
}
swp-invoice-cell {
padding: var(--spacing-4) var(--spacing-4);
font-size: var(--font-size-sm);
color: var(--color-text);
&:first-child {
padding-left: var(--card-padding);
}
&:last-child {
padding-right: var(--card-padding);
}
&.mono {
font-family: var(--font-mono);
font-size: var(--font-size-xs);
}
@media (max-width: 768px) {
padding: var(--spacing-3) var(--spacing-3);
&:first-child {
padding-left: var(--spacing-5);
}
&:last-child {
padding-right: var(--spacing-5);
}
}
}
/* ===========================================
INVOICE STATUS BADGES
=========================================== */
swp-invoice-status {
display: inline-flex;
align-items: center;
gap: var(--spacing-2);
padding: var(--spacing-1) var(--spacing-3);
font-size: var(--font-size-xs);
font-weight: var(--font-weight-medium);
border-radius: var(--radius-sm);
& i {
font-size: 14px;
}
&.paid {
background: var(--bg-green-strong);
color: var(--color-green);
}
&.pending {
background: var(--bg-amber-strong);
color: var(--color-amber);
}
&.overdue {
background: var(--bg-red-strong);
color: var(--color-red);
}
}
/* ===========================================
DOWNLOAD BUTTON
=========================================== */
swp-download-btn {
display: inline-flex;
align-items: center;
gap: var(--spacing-2);
padding: var(--spacing-2) var(--spacing-3);
font-size: var(--font-size-xs);
font-weight: var(--font-weight-medium);
color: var(--color-teal);
background: transparent;
border: 1px solid var(--color-teal);
border-radius: var(--radius-sm);
cursor: pointer;
transition: all var(--transition-fast);
& i {
font-size: 14px;
}
&:hover {
background: var(--bg-teal-medium);
}
}
/* Button styles in components.css */