@use '@angular/material' as mat; @layer reset, base, layout, utilities, blocks, exceptions; @include mat.core(); @layer base { html { @include mat.theme( ( color: ( primary: mat.$cyan-palette, tertiary: mat.$azure-palette, theme-type: color-scheme, ), typography: ( Inter, ui-sans-serif, system-ui, sans-serif, ), density: 0, ) ); color-scheme: light; --space-1: 0.25rem; --space-2: 0.5rem; --space-3: 0.75rem; --space-4: 1rem; --space-5: 1.25rem; --space-6: 1.5rem; --space-7: 1.75rem; --space-8: 2rem; --space-10: 2.5rem; --radius-sm: 0.75rem; --radius-md: 0.8125rem; --radius-lg: 1rem; --radius-xl: 1.375rem; --canvas: #f4f6f2; --surface: #ffffff; --surface-raised: #ffffff; --surface-soft: #e9efeb; --surface-accent: #dcefeb; --text: #17211e; --text-muted: #687670; --text-subtle: #8c9994; --accent: #0f766e; --accent-strong: #0a5f59; --accent-contrast: #ffffff; --border: #dce5df; --border-strong: #c7d3cd; --danger: #b42318; --danger-soft: #fee9e7; --shadow: 0 24px 60px rgba(28, 49, 42, 0.09); } html[data-theme='dark'] { color-scheme: dark; --canvas: #101513; --surface: #171d1b; --surface-raised: #1b2320; --surface-soft: #202a26; --surface-accent: #173a36; --text: #f0f5f2; --text-muted: #a7b5af; --text-subtle: #7f8e88; --accent: #63c7bc; --accent-strong: #86d7cf; --accent-contrast: #08201d; --border: #2c3733; --border-strong: #3a4944; --danger: #ffb4ab; --danger-soft: #4a2421; --shadow: 0 24px 60px rgba(0, 0, 0, 0.3); } body { background: var(--canvas, #f4f6f2); color: var(--text, #17211e); font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; text-rendering: optimizeLegibility; transition: background-color 180ms ease, color 180ms ease; } fa-icon { display: inline-flex; align-items: center; justify-content: center; line-height: 1; vertical-align: middle; } } @layer reset { *, *::before, *::after { box-sizing: border-box; } html, body { min-width: 320px; min-height: 100%; margin: 0; overflow-x: hidden; } button, input, textarea { font: inherit; } svg { display: block; } h1, h2, h3, p { margin-top: 0; } } @layer layout { .page-section { animation: page-in 180ms ease-out; } .page-heading { margin-bottom: 1.875rem; } .page-heading h1 { margin-bottom: var(--space-2, 0.5rem); font-size: clamp(2rem, 7vw, 3.2rem); font-weight: 750; letter-spacing: -0.055em; line-height: 1.02; } .page-heading > div > p:last-child { margin-bottom: 0; color: var(--text-muted, #687670); line-height: 1.6; } .page-heading .primary-action { width: 100%; margin-top: var(--space-5, 1.25rem); } .content-region > mat-progress-bar, .refresh-error { margin-bottom: var(--space-4, 1rem); } .form-grid { display: grid; gap: 2px; } .form-grid mat-form-field { width: 100%; } .form-actions { display: flex; flex-direction: column-reverse; gap: var(--space-2, 0.5rem); } .form-actions button { width: 100%; } .card-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; } @media (min-width: 700px) { .page-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--space-7, 1.75rem); } .page-heading .primary-action { width: auto; flex: 0 0 auto; margin-top: 0; } .form-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.125rem; } .full-field { grid-column: span 2; } .form-actions { flex-direction: row; justify-content: flex-end; } .form-actions button { width: auto; } } } @layer utilities { .brand-mark { display: grid; width: 42px; height: 42px; flex: 0 0 42px; place-items: center; border-radius: 14px; background: var(--accent, #0f766e); color: var(--accent-contrast, #ffffff); } .primary-action.mat-mdc-unelevated-button { --mdc-filled-button-container-color: var(--accent, #0f766e); --mdc-filled-button-label-text-color: var(--accent-contrast, #ffffff); min-height: 44px; border-radius: var(--radius-md, 0.8125rem); padding-inline: var(--space-5, 1.25rem); font-weight: 700; } .eyebrow, .context-label, .story-kicker, .property-label { margin-bottom: var(--space-2, 0.5rem); color: var(--accent, #0f766e); font-size: 0.72rem; font-weight: 800; letter-spacing: 0.11em; text-transform: uppercase; } .visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } } @layer blocks { @media (max-width: 959px) { .navigation-item .mdc-button__label { display: flex; width: 100%; height: 100%; min-width: 0; flex-direction: column; align-items: center; justify-content: center; } .navigation-item .mdc-button__label > span { display: block; width: 100%; min-width: 0; overflow-wrap: break-word; font-size: 0.62rem; line-height: 1.05; text-align: center; white-space: normal; } } .busy-fieldset { min-width: 0; margin: 0; padding: 0; border: 0; } .primary-action mat-spinner { display: inline-block; margin-right: var(--space-2, 0.5rem); vertical-align: middle; } .back-action.mat-mdc-button { --mdc-text-button-label-text-color: var(--text-muted, #687670); margin: 0 0 var(--space-5, 1.25rem) -1rem; } .apartment-form, .lease-form, .guarantor-section, .entity-form, .empty-state, .apartment-card, .lease-card, .tenant-card, .feature-card, .settings-card, .skeleton-card { border: 1px solid var(--border, #dce5df); border-radius: var(--radius-xl, 1.375rem); background: var(--surface, #ffffff); } .apartment-form, .apartment-card, .feature-card, .settings-card { box-shadow: 0 1px 0 rgba(255, 255, 255, 0.04); } .apartment-form, .lease-form, .guarantor-section, .entity-form, .apartment-card, .lease-card, .tenant-card, .skeleton-card { padding: var(--space-5, 1.25rem); } .feature-card { padding: 1.375rem; } .empty-state { padding: 2.875rem 1.375rem; text-align: center; } .empty-state h2 { margin-bottom: var(--space-2, 0.5rem); font-size: 1.45rem; } .empty-state > p:not(.eyebrow) { color: var(--text-muted, #687670); } .empty-state .mat-mdc-outlined-button, .api-actions .mat-mdc-outlined-button, .add-guarantor.mat-mdc-outlined-button { --mdc-outlined-button-label-text-color: var(--accent, #0f766e); --mdc-outlined-button-outline-color: var(--border-strong, #c7d3cd); border-radius: var(--radius-sm, 0.75rem); } .skeleton-card { display: grid; align-content: start; gap: 0.875rem; min-height: 220px; } .alert-error, .load-error, .refresh-error { border: 1px solid color-mix(in srgb, var(--danger, #b42318) 28%, transparent); border-radius: var(--radius-lg, 1rem); background: var(--danger-soft, #fee9e7); color: var(--danger, #b42318); } .alert-error { margin-bottom: 1.125rem; padding: 0.8125rem 0.9375rem; font-size: 0.87rem; } .load-error, .refresh-error { padding: var(--space-5, 1.25rem); } .load-error { text-align: center; } .load-error h2, .load-error p, .refresh-error p { margin-bottom: 0.625rem; } .card-actions .mat-mdc-button { --mdc-text-button-label-text-color: var(--accent, #0f766e); } .card-actions .danger-action.mat-mdc-button { --mdc-text-button-label-text-color: var(--danger, #b42318); } .card-actions mat-spinner, .apt-actions mat-spinner { display: inline-block; margin-right: 0.375rem; vertical-align: middle; } .card-error { color: var(--danger, #b42318); font-size: 0.84rem; } .skeleton-line { display: block; width: 100%; height: 14px; border-radius: 999px; background: linear-gradient( 90deg, var(--surface-soft, #e9efeb) 25%, var(--border, #dce5df) 50%, var(--surface-soft, #e9efeb) 75% ); background-size: 200% 100%; animation: skeleton-shimmer 1.4s ease-in-out infinite; } .skeleton-line-short { width: 34%; } .skeleton-line-medium { width: 68%; } .skeleton-line-title { width: 55%; height: 24px; margin-top: 30px; } @media (min-width: 700px) { .apartment-form, .lease-form, .guarantor-section, .entity-form { padding: 1.875rem; } } } @layer exceptions { @media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } .skeleton-line { animation: none; } } } @keyframes page-in { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } } @keyframes skeleton-shimmer { to { background-position-x: -200%; } }