/* * This is a manifest file that'll be compiled into application.css. * * With Propshaft, assets are served efficiently without preprocessing steps. You can still include * application-wide styles in this file, but keep in mind that CSS precedence will follow the standard * cascading order, meaning styles declared later in the document or manifest will override earlier ones, * depending on specificity. * * Consider organizing styles into separate files for maintainability. */ :root { --color-bg: #f4f6f8; --color-surface: #ffffff; --color-surface-strong: #f9fafb; --color-text: #172033; --color-muted: #667085; --color-border: #d8dee8; --color-primary: #1f5eff; --color-primary-dark: #1646bf; --color-danger: #b42318; --color-danger-bg: #fff0ed; --color-warning: #8a5a00; --color-warning-bg: #fff7d6; --color-success: #067647; --color-success-bg: #ecfdf3; --shadow-card: 0 12px 30px rgba(16, 24, 40, 0.08); --radius-lg: 18px; --radius-md: 12px; --radius-sm: 8px; } * { box-sizing: border-box; } body { margin: 0; background: var(--color-bg); color: var(--color-text); font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; line-height: 1.5; } a { color: var(--color-primary); } body > header { background: var(--color-surface); border-bottom: 1px solid var(--color-border); padding: 0.75rem 1rem; } body > header p { margin: 0; } body > header .button_to, .action-row .button_to { display: inline-block; margin: 0; } .page-shell { inline-size: min(1120px, 100%); margin: 0 auto; padding: 1rem; } .page-header, .vehicle-hero { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; margin-block: 1rem 1.25rem; } .page-header h1, .vehicle-hero h1 { margin: 0; font-size: clamp(2rem, 7vw, 3.25rem); line-height: 1; } .vehicle-hero p { margin: 0.35rem 0 0; color: var(--color-muted); } .eyebrow { margin: 0 0 0.35rem; color: var(--color-muted); font-size: 0.78rem; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; } .filter-nav, .action-row { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; } .filter-pill, .button { display: inline-flex; min-block-size: 2.65rem; align-items: center; justify-content: center; border: 1px solid var(--color-border); border-radius: 999px; padding: 0.65rem 1rem; background: var(--color-surface); color: var(--color-text); cursor: pointer; font: inherit; font-weight: 700; text-decoration: none; } .filter-pill--active, .button--primary { border-color: var(--color-primary); background: var(--color-primary); color: #ffffff; } .button--secondary { background: var(--color-surface-strong); } .button--danger { border-color: #fecaca; background: var(--color-danger-bg); color: var(--color-danger); } .back-link { font-weight: 700; text-decoration: none; } .flash, .empty-state { border: 1px solid var(--color-border); border-radius: var(--radius-md); padding: 0.85rem 1rem; background: var(--color-surface); } .flash--notice { border-color: #b7e4c7; background: var(--color-success-bg); color: var(--color-success); } .flash--warning { border-color: #fedf89; background: var(--color-warning-bg); color: var(--color-warning); } .vehicle-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr)); gap: 1rem; margin-block-start: 1rem; } .vehicle-card { overflow: hidden; border: 1px solid var(--color-border); border-radius: var(--radius-lg); background: var(--color-surface); box-shadow: var(--shadow-card); } .vehicle-card--upcoming { border-color: #f6d06f; background: var(--color-warning-bg); } .vehicle-card--overdue { border-color: #fda29b; background: var(--color-danger-bg); } .vehicle-card--inactive { opacity: 0.72; } .vehicle-card__link { display: block; block-size: 100%; padding: 1rem; color: inherit; text-decoration: none; } .vehicle-card__header { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.75rem; } .vehicle-card h2 { margin: 0; font-size: 1.35rem; line-height: 1.15; } .vehicle-card__facts { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.75rem; margin: 1rem 0; } .vehicle-card__facts dt { color: var(--color-muted); font-size: 0.75rem; font-weight: 800; letter-spacing: 0.05em; text-transform: uppercase; } .vehicle-card__facts dd { margin: 0.1rem 0 0; font-size: 1.1rem; font-weight: 800; } .maintenance-summary, .maintenance-current { border-radius: var(--radius-md); padding: 0.75rem; background: rgba(255, 255, 255, 0.65); } .maintenance-summary p, .maintenance-current { margin: 0.2rem 0 0; } .maintenance-summary--overdue strong { color: var(--color-danger); } .maintenance-summary--upcoming strong { color: var(--color-warning); } .alert-stack, .section-alerts { display: grid; gap: 0.75rem; } .alert-card, .mini-alert, .dashboard-section { border: 1px solid var(--color-border); border-radius: var(--radius-lg); background: var(--color-surface); box-shadow: var(--shadow-card); } .alert-card, .mini-alert { padding: 1rem; } .alert-card h2, .mini-alert h3 { margin-block: 0 0.5rem; } .alert-card ul, .mini-alert ul { margin-block: 0; padding-inline-start: 1.25rem; } .alert-card--overdue, .mini-alert--overdue { border-color: #fda29b; background: var(--color-danger-bg); } .alert-card--upcoming, .mini-alert--upcoming { border-color: #fedf89; background: var(--color-warning-bg); } .dashboard-section { margin-block-start: 1rem; overflow: hidden; } .dashboard-section--primary { border-color: #b2ccff; } .dashboard-section > summary { min-block-size: 3.5rem; padding: 1rem; cursor: pointer; font-size: 1.1rem; font-weight: 800; list-style-position: inside; } .dashboard-section > :not(summary) { margin: 0 1rem 1rem; } .table-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; } table { inline-size: 100%; min-inline-size: 42rem; border-collapse: collapse; background: var(--color-surface); } .table-scroll--compact table, .details-table { min-inline-size: 28rem; } th, td { border-bottom: 1px solid var(--color-border); padding: 0.75rem; text-align: left; vertical-align: top; } th { background: var(--color-surface-strong); font-size: 0.78rem; letter-spacing: 0.04em; text-transform: uppercase; } .details-table th { inline-size: 12rem; } .status-badge { display: inline-flex; align-items: center; border-radius: 999px; padding: 0.25rem 0.55rem; background: #eef2f6; color: #344054; font-size: 0.78rem; font-weight: 800; white-space: nowrap; } .status-badge--active, .status-badge--current { background: var(--color-success-bg); color: var(--color-success); } .status-badge--inactive, .status-badge--no_history { background: #eef2f6; color: #475467; } .status-badge--upcoming { background: var(--color-warning-bg); color: var(--color-warning); } .status-badge--overdue { background: var(--color-danger-bg); color: var(--color-danger); } .stacked-form { display: grid; gap: 1rem; } .form-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr)); gap: 1rem; } .field { display: grid; gap: 0.35rem; } label { font-weight: 800; } input, select, textarea { inline-size: 100%; min-block-size: 2.75rem; border: 1px solid var(--color-border); border-radius: var(--radius-sm); padding: 0.65rem 0.75rem; background: #ffffff; color: var(--color-text); font: inherit; } textarea { min-block-size: 7rem; } .form-errors, .field-warning { border: 1px solid #fda29b; border-radius: var(--radius-md); padding: 0.85rem 1rem; background: var(--color-danger-bg); color: var(--color-danger); } @media (max-width: 720px) { body > header { font-size: 0.9rem; } .page-header, .vehicle-hero { display: grid; } .page-header .button, .action-row, .action-row .button_to, .action-row .button { inline-size: 100%; } .filter-nav { display: grid; grid-template-columns: repeat(3, 1fr); } .filter-pill { padding-inline: 0.5rem; } }