/* CSS Custom Properties - Material Design 3 inspired */ :root { /* Light theme (default) */ --md-sys-color-primary: #1976D2; --md-sys-color-primary-dark: #1565C0; --md-sys-color-on-primary: #FFFFFF; --md-sys-color-surface: #FAFAFA; --md-sys-color-surface-container: #FFFFFF; --md-sys-color-surface-variant: #E3E3E3; --md-sys-color-on-surface: #1C1B1F; --md-sys-color-on-surface-variant: #49454F; --md-sys-color-outline: #79747E; --md-sys-color-outline-variant: #CAC4D0; --md-sys-color-background: #F5F5F5; --md-sys-color-error: #B3261E; --md-sys-color-success: #2E7D32; --md-sys-color-preview-bg: #E8E8E8; --md-sys-color-preview-pattern: #D0D0D0; --md-sys-elevation-1: 0 1px 2px rgba(0,0,0,0.1), 0 1px 3px rgba(0,0,0,0.08); --md-sys-elevation-2: 0 2px 4px rgba(0,0,0,0.1), 0 4px 8px rgba(0,0,0,0.1); --md-sys-elevation-3: 0 4px 8px rgba(0,0,0,0.1), 0 8px 16px rgba(0,0,0,0.1); --md-sys-shape-corner-medium: 12px; --md-sys-shape-corner-large: 16px; --md-sys-typescale-headline-large: 500 2rem/2.5rem 'Roboto', sans-serif; --md-sys-typescale-headline-medium: 500 1.5rem/2rem 'Roboto', sans-serif; --md-sys-typescale-body-large: 400 1rem/1.5rem 'Roboto', sans-serif; --md-sys-typescale-body-medium: 400 0.875rem/1.25rem 'Roboto', sans-serif; --md-sys-typescale-label-large: 500 0.875rem/1.25rem 'Roboto', sans-serif; } /* Dark theme - follows system preference */ @media (prefers-color-scheme: dark) { :root { --md-sys-color-primary: #90CAF9; --md-sys-color-primary-dark: #64B5F6; --md-sys-color-on-primary: #003258; --md-sys-color-surface: #1E1E1E; --md-sys-color-surface-container: #2D2D2D; --md-sys-color-surface-variant: #3D3D3D; --md-sys-color-on-surface: #E6E1E5; --md-sys-color-on-surface-variant: #CAC4D0; --md-sys-color-outline: #938F99; --md-sys-color-outline-variant: #49454F; --md-sys-color-background: #121212; --md-sys-color-error: #F2B8B5; --md-sys-color-success: #81C784; --md-sys-color-preview-bg: #2D2D2D; --md-sys-color-preview-pattern: #3D3D3D; --md-sys-elevation-1: 0 1px 2px rgba(0,0,0,0.3), 0 1px 3px rgba(0,0,0,0.24); --md-sys-elevation-2: 0 2px 4px rgba(0,0,0,0.3), 0 4px 8px rgba(0,0,0,0.3); --md-sys-elevation-3: 0 4px 8px rgba(0,0,0,0.3), 0 8px 16px rgba(0,0,0,0.3); } } /* Reset */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: 16px; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } body { font-family: 'Roboto', sans-serif; background-color: var(--md-sys-color-background); color: var(--md-sys-color-on-surface); min-height: 100vh; line-height: 1.5; } /* App Container */ .app-container { min-height: 100vh; display: flex; flex-direction: column; } /* App Bar */ .app-bar { background-color: var(--md-sys-color-surface); color: var(--md-sys-color-on-surface); padding: 16px 24px; box-shadow: var(--md-sys-elevation-2); position: sticky; top: 0; z-index: 100; border-bottom: 1px solid var(--md-sys-color-outline-variant); } .app-bar-content { max-width: 1200px; margin: 0 auto; display: flex; align-items: center; gap: 12px; } .app-bar h1 { font: var(--md-sys-typescale-headline-medium); font-weight: 500; } .app-bar .material-icons { font-size: 28px; color: var(--md-sys-color-primary); } /* Main Content */ .main-content { flex: 1; padding: 24px; max-width: 1200px; margin: 0 auto; width: 100%; display: grid; grid-template-columns: 1fr 1fr; gap: 24px; align-items: start; } /* Cards */ .card { background-color: var(--md-sys-color-surface); border-radius: var(--md-sys-shape-corner-large); box-shadow: var(--md-sys-elevation-1); overflow: hidden; } .card-header { display: flex; align-items: center; gap: 12px; padding: 20px 24px; border-bottom: 1px solid var(--md-sys-color-outline-variant); background-color: var(--md-sys-color-surface-container); } .card-header h2 { font: var(--md-sys-typescale-headline-medium); font-size: 1.25rem; color: var(--md-sys-color-on-surface); } .card-header .material-icons { color: var(--md-sys-color-primary); font-size: 24px; } /* Form Styles */ .form-card form { padding: 24px; display: flex; flex-direction: column; gap: 20px; } .form-group { display: flex; flex-direction: column; gap: 6px; } .form-label { font: var(--md-sys-typescale-label-large); color: var(--md-sys-color-on-surface-variant); } .form-input, .form-select { font: var(--md-sys-typescale-body-large); padding: 14px 16px; border: 1px solid var(--md-sys-color-outline-variant); border-radius: var(--md-sys-shape-corner-medium); background-color: var(--md-sys-color-surface-container); color: var(--md-sys-color-on-surface); transition: border-color 0.2s, box-shadow 0.2s; width: 100%; } .form-input:focus, .form-select:focus { outline: none; border-color: var(--md-sys-color-primary); box-shadow: 0 0 0 3px rgba(25, 118, 210, 0.15); } .form-input:read-only { background-color: var(--md-sys-color-surface-variant); color: var(--md-sys-color-on-surface-variant); } .form-input::placeholder { color: var(--md-sys-color-outline); } .form-hint { font: var(--md-sys-typescale-body-medium); font-size: 0.75rem; color: var(--md-sys-color-outline); } /* Select Wrapper */ .select-wrapper { position: relative; } .select-wrapper .form-select { appearance: none; padding-right: 44px; cursor: pointer; } .select-wrapper .select-icon { position: absolute; right: 14px; top: 50%; transform: translateY(-50%); color: var(--md-sys-color-outline); pointer-events: none; } /* Form Row */ .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } /* Button Styles */ .btn { font: var(--md-sys-typescale-label-large); padding: 14px 24px; border: none; border-radius: var(--md-sys-shape-corner-medium); cursor: pointer; display: inline-flex; align-items: center; justify-content: center; gap: 8px; transition: all 0.2s; text-transform: none; } .btn-primary { background-color: var(--md-sys-color-primary); color: var(--md-sys-color-on-primary); box-shadow: var(--md-sys-elevation-1); } .btn-primary:hover { background-color: var(--md-sys-color-primary-dark); box-shadow: var(--md-sys-elevation-2); } .btn-primary:active { transform: scale(0.98); } .btn .material-icons { font-size: 20px; } /* Preview Card */ .preview-card { position: sticky; top: 88px; } .preview-container { padding: 24px; display: flex; justify-content: center; background-color: var(--md-sys-color-preview-bg); background-image: linear-gradient(45deg, var(--md-sys-color-preview-pattern) 25%, transparent 25%), linear-gradient(-45deg, var(--md-sys-color-preview-pattern) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, var(--md-sys-color-preview-pattern) 75%), linear-gradient(-45deg, transparent 75%, var(--md-sys-color-preview-pattern) 75%); background-size: 20px 20px; background-position: 0 0, 0 10px, 10px -10px, -10px 0px; } /* Sticker Preview */ .sticker-preview { background-color: var(--md-sys-color-surface-container); padding: 8px; box-shadow: var(--md-sys-elevation-2); } .sticker { width: 280px; border: 2px solid #000; font-family: Arial, sans-serif; font-size: 11px; background: #fff; color: #000; } .sticker-header { background-color: #000; color: #fff; text-align: center; padding: 6px 8px; font-size: 18px; font-weight: bold; letter-spacing: 4px; } .sticker-barcode-row { display: flex; align-items: center; border-bottom: 1px solid #000; padding: 4px 8px; gap: 8px; } .sticker-barcode-row span { font-size: 11px; font-weight: 500; } .sticker-barcode-row svg { height: 30px; flex: 1; } .sticker-body { display: flex; border-bottom: 1px solid #000; } .sticker-info { flex: 1; padding: 6px 8px; font-size: 10px; line-height: 1.4; } .sticker-info .date-row { margin-bottom: 2px; } .sticker-logo { width: 80px; border-left: 1px solid #000; display: flex; align-items: center; justify-content: center; padding: 4px; } .garage-logo .logo-svg { width: 70px; height: 70px; } .sticker-footer { text-align: center; padding: 4px 8px; font-size: 10px; font-weight: 500; border-top: 1px solid #000; } /* Snackbar */ .snackbar { visibility: hidden; min-width: 280px; background-color: var(--md-sys-color-surface-variant); color: var(--md-sys-color-on-surface); text-align: center; border-radius: var(--md-sys-shape-corner-medium); padding: 16px 24px; position: fixed; z-index: 1000; left: 50%; bottom: 30px; transform: translateX(-50%); font: var(--md-sys-typescale-body-medium); box-shadow: var(--md-sys-elevation-3); } @media (prefers-color-scheme: light) { .snackbar { background-color: #323232; color: #fff; } } .snackbar.show { visibility: visible; animation: fadein 0.3s, fadeout 0.3s 2.7s; } .snackbar.success { background-color: var(--md-sys-color-success); color: #fff; } .snackbar.error { background-color: var(--md-sys-color-error); color: #fff; } @keyframes fadein { from { bottom: 0; opacity: 0; } to { bottom: 30px; opacity: 1; } } @keyframes fadeout { from { bottom: 30px; opacity: 1; } to { bottom: 0; opacity: 0; } } /* Responsive Styles */ @media (max-width: 900px) { .main-content { grid-template-columns: 1fr; } .preview-card { position: static; order: -1; } .app-bar h1 { font-size: 1.25rem; } } @media (max-width: 600px) { .app-bar { padding: 12px 16px; } .app-bar h1 { font-size: 1.1rem; } .main-content { padding: 16px; gap: 16px; } .card-header { padding: 16px; } .card-header h2 { font-size: 1.1rem; } .form-card form { padding: 16px; gap: 16px; } .form-row { grid-template-columns: 1fr; } .form-input, .form-select { padding: 12px 14px; } .btn { padding: 12px 20px; width: 100%; } .preview-container { padding: 16px; } .sticker { width: 260px; } } /* Print Styles for PDF Export */ @media print { .app-bar, .form-card, .card-header, .snackbar { display: none !important; } .main-content { display: block; padding: 0; } .preview-card { box-shadow: none; border: none; } .preview-container { background: none; padding: 0; } } /* Loading State */ .btn.loading { pointer-events: none; opacity: 0.7; } .btn.loading .material-icons { animation: spin 1s linear infinite; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }