/* Modern Police Parking Panel - Redesigned */ /* @font-face { font-family: 'GilroyMedium'; src: url('http://mta/fonts/fonts/Gilroy-Medium.ttf') format('ttf'); font-weight: 500; font-style: normal; font-display: swap; } */ :root { --ui-font: 'GilroyMedium', system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial; /* primary now a smooth linear gradient between #03C9F5 and #305E88 */ --primary: linear-gradient(90deg, #03C9F5 0%, #305E88 100%); /* solid fallback color for uses that require a single color */ --primary-solid: #03C9F5; --primary-hover: #1d4ed8; --secondary: #64748b; --secondary-hover: #475569; --success: #059669; --danger: #dc2626; --warning: #d97706; --info: #02CBF7; --bg-primary: rgba(70,81,97, 0.15); --bg-secondary: #1e293b; --bg-tertiary: #334155; --panel-bg: rgba(32, 39, 50, 0.9); /* #202732 with 90% alpha */ --text-primary: #E2E8E9; --text-secondary: #C4D1D3; --text-muted: #94a3b8; --border-color: rgba(70, 81, 97, 0.1); --border-focus: rgba(37, 99, 235, 0.3); --shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); --radius-sm: 6px; --radius-md: 8px; --radius-lg: 12px; --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); --transition-normal: 200ms cubic-bezier(0.4, 0, 0.2, 1); --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1); } /* Make all text non-selectable by default to prevent accidental selection while interacting Only the reason textarea should remain selectable for user input and copy/paste */ *, *::before, *::after { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } /* Allow text selection only inside the main textarea */ textarea, textarea * { -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; } * { box-sizing: border-box; margin: 0; padding: 0; } html, body { height: 100%; font-family: var(--ui-font); background: transparent; overflow: hidden; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; /* base font-size scales a bit with viewport but stays readable */ font-size: 14px; } /* Hide scrollbars completely */ html::-webkit-scrollbar, body::-webkit-scrollbar, *::-webkit-scrollbar { display: none; width: 0; height: 0; } html, body { -ms-overflow-style: none; scrollbar-width: none; } .container { height: 100vh; display: flex; align-items: center; justify-content: center; padding: 20px; position: relative; } /* Blur background overlay */ .container::before { content: ''; position: fixed; top: 0; left: 0; right: 0; bottom: 0; /* background: rgba(0, 0, 0, 0.3); */ z-index: 1; pointer-events: none; } .panel { position: relative; width: 100%; max-width: min(480px, 92vw); background: var(--panel-bg); border: 1px solid #465161; /* border-radius: var(--radius-lg); */ box-shadow: var(--shadow-xl); overflow: hidden; z-index: 2; /* Entry animation - faster startup */ transform: translateY(10px) scale(0.98); opacity: 0; transition: all var(--transition-fast); } .panel.open { transform: translateY(0) scale(1); opacity: 1; } .panel.closing { transform: translateY(-10px) scale(0.98); opacity: 0; pointer-events: none; } /* Close button */ .close-btn { position: absolute; top: 8px; right: 8px; z-index: 10; display: flex; align-items: center; justify-content: center; width: 16px; height: 16px; background: transparent; border: none; color: var(--text-muted); cursor: pointer; transition: all var(--transition-fast); } .close-btn:hover { color: var(--danger); transform: scale(1.05); } .close-btn:active { transform: scale(0.95); } /* Header */ .panel-header { display: flex; flex-direction: column; /* stack header-row and subtitle */ gap: 6px; padding: 12px 16px; /* reduced padding to make header smaller */ border-bottom: 1px solid #465161; position: relative; } .header-row { display: flex; align-items: center; /* vertically center icon and title */ gap: 8px; /* tighter gap */ } .header-icon svg { width: 18px; height: 18px; } .header-icon { width: 18px; height: 18px; } .header-text { display: flex; flex-direction: column; justify-content: center; } .header-text h1 { font-size: 15px; font-weight: 600; color: var(--text-primary); margin: 0; text-align: left; } .header-text .subtitle, .panel-header > .subtitle { font-size: 12px; color: var(--text-muted); font-weight: 400; margin: 0 0 0 0px; /* align subtitle's left X with the icon (match panel padding-left) */ text-align: left; } /* restore close button to top-right position outside header flow */ .close-btn { position: absolute; top: 10px; right: 10px; } /* Content */ .panel-content { padding: 20px; } .vehicle-info { margin-bottom: 24px; background: rgba(15, 23, 42, 0.4); border: 1px solid rgba(70, 81, 97, 0.2); border-radius: var(--radius-md); padding: 16px; } .info-header { display: flex; align-items: center; gap: 8px; margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid rgba(70, 81, 97, 0.15); } .info-header-icon { color: var(--primary-solid); flex-shrink: 0; } .info-header h3 { font-size: 14px; font-weight: 600; color: var(--text-primary); margin: 0; } .info-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; } .info-item { display: flex; align-items: flex-start; gap: 10px; padding: 12px; background: rgba(30, 41, 59, 0.3); border: 1px solid rgba(70, 81, 97, 0.1); border-radius: var(--radius-sm); transition: all var(--transition-fast); } .info-item:hover { background: rgba(30, 41, 59, 0.5); border-color: rgba(70, 81, 97, 0.2); } .info-item.full-width { grid-column: 1 / -1; } .info-icon { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; background: rgba(3, 201, 245, 0.1); border-radius: var(--radius-sm); color: var(--primary-solid); flex-shrink: 0; margin-top: 2px; } .info-content { flex: 1; min-width: 0; } .info-content label { display: block; font-size: 11px; font-weight: 600; color: var(--text-secondary); margin-bottom: 6px; text-transform: uppercase; letter-spacing: 0.5px; } .input-wrapper { position: relative; } .input-wrapper input { width: 100%; padding: 8px 10px; background: rgba(15, 23, 42, 0.6); border: 1px solid rgba(70, 81, 97, 0.2); border-radius: 4px; color: var(--text-primary); font-size: 13px; font-family: var(--ui-font); font-weight: 500; transition: all var(--transition-fast); } .input-wrapper input::placeholder { color: var(--text-muted); font-weight: 400; } .input-wrapper input:focus { outline: none; border-color: var(--primary-solid); box-shadow: 0 0 0 2px rgba(3, 201, 245, 0.1); } /* Status indicator */ .status-indicator { display: flex; align-items: center; gap: 8px; padding: 6px 10px; background: rgba(5, 150, 105, 0.1); border: 1px solid rgba(5, 150, 105, 0.2); border-radius: 4px; } .status-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--text-muted); animation: pulse 2s infinite; } .status-dot.active { background: var(--success); } .status-text { font-size: 12px; color: var(--success); font-weight: 500; } /* Time display */ .time-display { padding: 6px 10px; background: rgba(70, 81, 97, 0.1); border: 1px solid rgba(70, 81, 97, 0.2); border-radius: 4px; } .time-display span { font-size: 12px; color: var(--text-secondary); font-weight: 500; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } /* Reason section */ .reason-section { margin-bottom: 20px; } .reason-section label { display: block; font-size: 13px; font-weight: 500; color: var(--text-secondary); margin-bottom: 8px; } .required { color: var(--danger); } .textarea-wrapper { position: relative; } .textarea-wrapper textarea { width: 100%; padding: 12px; background: var(--bg-primary); border: 1px solid #465161; color: var(--text-primary); font-size: 14px; font-family: inherit; line-height: 1.5; resize: none; min-height: 100px; transition: all var(--transition-fast); } .textarea-wrapper textarea:focus { outline: none; border-color: var(--border-focus); box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); } .textarea-wrapper textarea::placeholder { color: var(--text-muted); } .char-counter { position: absolute; bottom: 8px; right: 12px; font-size: 11px; color: var(--text-muted); background: var(--bg-primary); padding: 2px 4px; border-radius: 3px; pointer-events: none; } /* Messages */ .message { margin: 16px 0; padding: 12px 16px; border-radius: var(--radius-sm); font-size: 13px; font-weight: 500; opacity: 0; transform: translateY(-10px); transition: all var(--transition-normal); } .message.visible { opacity: 1; transform: translateY(0); } .message.success { background: rgba(5, 150, 105, 0.1); border: 1px solid rgba(5, 150, 105, 0.2); color: var(--success); } .message.error { background: rgba(220, 38, 38, 0.1); border: 1px solid rgba(220, 38, 38, 0.2); color: var(--danger); } .message.warning { background: rgba(217, 119, 6, 0.1); border: 1px solid rgba(217, 119, 6, 0.2); color: var(--warning); } .message.info { background: rgba(70, 81, 91, 0.1); border: 1px solid rgba(70, 81, 91, 0.2); color: var(--info); } /* Actions */ .actions { display: flex; gap: 12px; justify-content: flex-end; margin-top: 24px; } .btn { display: inline-flex; align-items: center; gap: 8px; padding: 10px 20px; border: none; /* border-radius: var(--radius-sm); */ font-size: 14px; font-weight: 500; cursor: pointer; transition: all var(--transition-fast); position: relative; overflow: hidden; } .btn:disabled { opacity: 0.5; cursor: not-allowed; } .btn-secondary { background: var(--bg-tertiary); color: var(--text-secondary); border: 1px solid var(--border-color); } .btn-secondary:hover:not(:disabled) { /* no color change on hover, only glow */ transform: translateY(-1px); box-shadow: 0 8px 24px rgba(70, 81, 91, 0.08), 0 2px 8px rgba(70, 81, 91, 0.04); } .btn-primary { background: var(--primary-solid); color: white; background-image: var(--primary); } .btn-primary:hover:not(:disabled) { /* keep base color/gradient, add glow on hover */ transform: translateY(-1px); box-shadow: 0 10px 36px rgba(3, 201, 245, 0.16), 0 4px 14px rgba(48, 94, 136, 0.08); } .btn:active { transform: translateY(0); } .btn-icon { transition: transform var(--transition-fast); } .btn:hover .btn-icon { transform: scale(1.1); } /* Footer */ .panel-footer { padding: 12px 16px; border-top: 1px solid #465161; text-align: center; } .panel-footer small { font-size: 11px; color: var(--text-muted); font-weight: 400; } .footer-button { width: 100%; display: inline-flex; align-items: center; justify-content: center; gap: 8px; padding: 10px 7px; /* vertical 10px, horizontal 7px as requested */ background: var(--primary-solid); background-image: var(--primary); color: #ffffff; border: 1px solid #465161; cursor: pointer; font-weight: 600; transition: border-color var(--transition-fast), transform var(--transition-fast), box-shadow var(--transition-fast); } .footer-button:hover:not(:disabled) { /* border-color: #02CBF7; transform: translateY(-1px); */ box-shadow: 0 10px 36px rgba(3, 201, 245, 0.12), 0 4px 14px rgba(48, 94, 136, 0.06); } .footer-button .btn-icon { transform: none; } /* Loading state */ .btn.loading { pointer-events: none; } .btn.loading::after { content: ''; position: absolute; width: 16px; height: 16px; border: 2px solid transparent; border-top: 2px solid currentColor; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* Responsive */ @media (max-width: 520px) { .container { padding: 16px; } .panel-header, .panel-content { padding: 20px; } .info-grid { grid-template-columns: 1fr; } .actions { flex-direction: column-reverse; } .btn { width: 100%; justify-content: center; } }