Spaces:
Running
Running
| /* ============================================= | |
| UrbanFlow β vehicles.css (Mobile-First) | |
| Desktop layout preserved exactly. | |
| Mobile: bottom nav, touch targets, stacked cards. | |
| ============================================= */ | |
| :root { | |
| --cocoa: #8b5e3c; | |
| --cocoa-l: #c89a6c; | |
| --cocoa-xl: #d4b08a; | |
| --mob-nav-h: 68px; | |
| /* bottom nav height on mobile */ | |
| } | |
| *, | |
| *::before, | |
| *::after { | |
| box-sizing: border-box; | |
| } | |
| .hidden { | |
| display: none ; | |
| } | |
| html { | |
| overflow: hidden; | |
| height: 100%; | |
| } | |
| body { | |
| font-family: 'Montserrat', sans-serif; | |
| background-color: #000000; | |
| color: #f0ece6; | |
| -webkit-tap-highlight-color: transparent; | |
| overscroll-behavior: none; | |
| } | |
| .mono-font { | |
| font-family: 'JetBrains Mono', monospace; | |
| } | |
| /* ---- Scrollbar: hide globally on mobile, keep #class-breakdown visible ---- */ | |
| @media (max-width: 1023px) { | |
| * { | |
| scrollbar-width: none; | |
| -ms-overflow-style: none; | |
| } | |
| *::-webkit-scrollbar { | |
| display: none; | |
| } | |
| /* Vehicle Classification section keeps its scrollbar on mobile */ | |
| #class-breakdown { | |
| scrollbar-width: thin ; | |
| -ms-overflow-style: auto ; | |
| } | |
| #class-breakdown::-webkit-scrollbar { | |
| display: block ; | |
| width: 4px ; | |
| } | |
| #class-breakdown::-webkit-scrollbar-track { | |
| background: #000000 ; | |
| } | |
| #class-breakdown::-webkit-scrollbar-thumb { | |
| background: #222222 ; | |
| border-radius: 4px ; | |
| } | |
| #class-breakdown::-webkit-scrollbar-thumb:hover { | |
| background: #333333 ; | |
| } | |
| } | |
| /* ---- Notification Glow ---- */ | |
| @keyframes glow-green { | |
| 0% { | |
| color: #f0ece6; | |
| filter: drop-shadow(0 0 0px #4ade80); | |
| } | |
| 50% { | |
| color: #4ade80; | |
| filter: drop-shadow(0 0 8px #4ade80); | |
| } | |
| 100% { | |
| color: #f0ece6; | |
| filter: drop-shadow(0 0 0px #4ade80); | |
| } | |
| } | |
| .notify-glow i { | |
| animation: glow-green 1.5s infinite ease-in-out ; | |
| } | |
| /* ---- Info tooltip ---- */ | |
| .info-wrap { | |
| position: relative; | |
| display: inline-flex; | |
| align-items: center; | |
| margin-left: 6px; | |
| } | |
| .info-btn { | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| width: 18px; | |
| /* slightly larger for touch */ | |
| height: 18px; | |
| border-radius: 50%; | |
| background: #444444 ; | |
| color: #ffffff ; | |
| font-size: 8px; | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| } | |
| .info-btn:hover, | |
| .info-btn:active { | |
| background: #666666 ; | |
| } | |
| .info-tip { | |
| display: none; | |
| position: fixed; | |
| z-index: 9999; | |
| background: #0a0a0a; | |
| color: #aaaaaa; | |
| font-size: 10px; | |
| font-weight: 500; | |
| line-height: 1.4; | |
| padding: 8px 12px; | |
| border-radius: 6px; | |
| max-width: 240px; | |
| box-shadow: 0 10px 30px rgba(0, 0, 0, 0.8); | |
| border: 1px solid #222222; | |
| pointer-events: none; | |
| text-transform: none; | |
| letter-spacing: normal; | |
| } | |
| /* ---- Mobile Top Bar ---- */ | |
| .mobile-top-bar { | |
| display: none; | |
| } | |
| @media (max-width: 1023px) { | |
| .mobile-top-bar { | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| height: 58px; | |
| background: #000000; | |
| border-bottom: 1px solid #1a1a1a; | |
| z-index: 35; | |
| flex-shrink: 0; | |
| } | |
| #legal-menu { | |
| animation: menuFadeIn 0.2s ease-out forwards; | |
| transform-origin: top right; | |
| } | |
| @keyframes menuFadeIn { | |
| from { | |
| opacity: 0; | |
| transform: translateY(-10px) scale(0.95); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0) scale(1); | |
| } | |
| } | |
| } | |
| /* ---- Sidebar nav states ---- */ | |
| .nav-item-active { | |
| background-color: #111111 ; | |
| color: var(--cocoa-xl) ; | |
| border-left: 2px solid var(--cocoa-l) ; | |
| } | |
| .nav-item-inactive { | |
| color: #555555 ; | |
| } | |
| .nav-item-inactive:hover { | |
| color: #f0ece6 ; | |
| background-color: #050505 ; | |
| } | |
| /* ---- Card overrides ---- */ | |
| .bg-white { | |
| background-color: #0a0a0a ; | |
| } | |
| .border-slate-200, | |
| .border-slate-100, | |
| .border-slate-50, | |
| .border-neutral-800, | |
| .border-neutral-900 { | |
| border-color: #2a2a2a ; | |
| } | |
| .bg-slate-50\/50, | |
| .bg-slate-50, | |
| .bg-slate-900, | |
| .bg-neutral-900 { | |
| background-color: #0c0c0c ; | |
| } | |
| .text-slate-900, | |
| .text-slate-800, | |
| .text-slate-700, | |
| .text-neutral-900 { | |
| color: #ffffff ; | |
| } | |
| .text-slate-600, | |
| .text-slate-500, | |
| .text-slate-400, | |
| .text-neutral-500, | |
| .text-neutral-400 { | |
| color: #888888 ; | |
| } | |
| .shadow-sm { | |
| box-shadow: none ; | |
| } | |
| /* ---- Toggle control ---- */ | |
| .toggle-track { | |
| width: 36px; | |
| /* slightly wider for touch */ | |
| height: 20px; | |
| border-radius: 999px; | |
| background: #1a1a1a; | |
| border: 1px solid #333; | |
| position: relative; | |
| cursor: pointer; | |
| flex-shrink: 0; | |
| transition: background 0.2s ease; | |
| } | |
| .toggle-track.active { | |
| background: #c89a6c ; | |
| border-color: #c89a6c ; | |
| } | |
| .toggle-thumb { | |
| width: 16px; | |
| height: 16px; | |
| border-radius: 50%; | |
| background: #555555; | |
| position: absolute; | |
| top: 2px; | |
| left: 2px; | |
| transition: all 0.2s ease; | |
| } | |
| .toggle-track.active .toggle-thumb { | |
| transform: translateX(16px); | |
| background: #ffffff; | |
| /* pure white for contrast on gold track */ | |
| } | |
| /* ---- Custom select ---- */ | |
| .custom-select { | |
| appearance: none; | |
| background-color: #111111; | |
| border: 1px solid #222222; | |
| border-radius: 6px; | |
| padding: 4px 24px 4px 10px; | |
| font-size: 11px; | |
| font-weight: 600; | |
| color: #ffffff; | |
| outline: none; | |
| background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='%23666666'%3E%3Cpath fill-rule='evenodd' d='M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z'/%3E%3C/svg%3E"); | |
| background-repeat: no-repeat; | |
| background-position: right 8px center; | |
| background-size: 12px; | |
| } | |
| /* ---- Stepper ---- */ | |
| .s-stepper { | |
| display: inline-flex; | |
| border: 1px solid #222222; | |
| border-radius: 6px; | |
| background: #111111; | |
| overflow: hidden; | |
| flex-shrink: 0; | |
| } | |
| .s-stepper button { | |
| padding: 8px 12px; | |
| /* larger touch target than original 4px 8px */ | |
| color: #666666; | |
| font-size: 14px; | |
| min-width: 36px; | |
| min-height: 36px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .s-stepper button:hover, | |
| .s-stepper button:active { | |
| background: #1a1a1a; | |
| color: #ffffff; | |
| } | |
| .s-stepper .s-val { | |
| min-width: 44px; | |
| text-align: center; | |
| font-family: 'JetBrains Mono', monospace; | |
| font-size: 12px; | |
| font-weight: 700; | |
| color: #ffffff; | |
| padding: 4px 0; | |
| border-left: 1px solid #222222; | |
| border-right: 1px solid #222222; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| /* ---- Settings row ---- */ | |
| .s-row { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| padding: 14px 0; | |
| /* slightly more vertical padding */ | |
| border-bottom: 1px solid #1a1a1a; | |
| gap: 12px; | |
| } | |
| .s-row:last-child { | |
| border-bottom: none; | |
| } | |
| .s-row>div:first-child { | |
| flex: 1; | |
| min-width: 0; | |
| } | |
| /* ---- Progress bar ---- */ | |
| #proc-bar { | |
| background-color: var(--cocoa-l) ; | |
| } | |
| #proc-label { | |
| color: #ffffff ; | |
| } | |
| /* ---- Disabled rows ---- */ | |
| .s-row.disabled { | |
| opacity: 0.65 ; | |
| } | |
| .s-row.disabled .s-stepper, | |
| .s-row.disabled .custom-select, | |
| .s-row.disabled .toggle-track, | |
| .s-row.disabled .chip-container, | |
| .s-row.disabled .uf-select-wrap, | |
| .s-row.disabled .uf-select-trigger { | |
| pointer-events: none ; | |
| opacity: 0.5 ; | |
| } | |
| /* Force-collapse the dropdown panel when row is locked */ | |
| .s-row.disabled .uf-select-dropdown { | |
| display: none ; | |
| } | |
| .s-row.disabled .info-wrap { | |
| pointer-events: auto ; | |
| opacity: 1 ; | |
| } | |
| #btn-start-processing { | |
| font-family: 'Montserrat', sans-serif ; | |
| } | |
| /* ---- Chips ---- */ | |
| .chip-container { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 8px; | |
| margin-top: 12px; | |
| padding-top: 12px; | |
| border-top: 1px solid #1a1a1a; | |
| transition: all 0.3s ease; | |
| } | |
| .chip { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| padding: 8px 14px; | |
| /* larger than original 6px 14px */ | |
| border-radius: 9999px; | |
| font-size: 10px; | |
| font-weight: 700; | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| user-select: none; | |
| border: 1px solid #333333; | |
| background: rgba(255, 255, 255, 0.03); | |
| color: #888888; | |
| min-height: 36px; | |
| } | |
| .chip.active { | |
| background: var(--cocoa-l); | |
| color: #000000; | |
| border-color: var(--cocoa-l); | |
| } | |
| .chip.frozen { | |
| background: rgba(255, 255, 255, 0.4); | |
| color: #000000; | |
| border-color: transparent; | |
| cursor: default ; | |
| pointer-events: none; | |
| } | |
| .chip:hover { | |
| border-color: #666666; | |
| } | |
| .chip.active:hover { | |
| background: var(--cocoa-xl); | |
| } | |
| .chip i { | |
| font-size: 9px; | |
| } | |
| .hidden-chip-container { | |
| display: none ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| height: 0 ; | |
| } | |
| /* ---- Toast ---- */ | |
| #toast-container { | |
| position: fixed; | |
| bottom: calc(var(--mob-nav-h) + 12px); | |
| /* above bottom nav on mobile */ | |
| left: 50%; | |
| transform: translateX(-50%); | |
| z-index: 10000; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 8px; | |
| pointer-events: none; | |
| width: 90%; | |
| max-width: 360px; | |
| } | |
| .toast { | |
| background: #111; | |
| border: 1px solid #2a2a2a; | |
| color: #f0ece6; | |
| font-size: 11px; | |
| font-weight: 600; | |
| padding: 12px 18px; | |
| border-radius: 10px; | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| pointer-events: auto; | |
| animation: toastIn 0.3s ease-out; | |
| width: 100%; | |
| } | |
| .toast.toast-out { | |
| animation: toastOut 0.3s ease-in forwards; | |
| } | |
| .toast-success { | |
| border-color: #166534; | |
| } | |
| .toast-success i { | |
| color: #22c55e; | |
| } | |
| .toast-error { | |
| border-color: #7f1d1d; | |
| } | |
| .toast-error i { | |
| color: #ef4444; | |
| } | |
| .toast-info i { | |
| color: var(--cocoa-l); | |
| } | |
| @keyframes toastIn { | |
| from { | |
| opacity: 0; | |
| transform: translateY(20px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| @keyframes toastOut { | |
| from { | |
| opacity: 1; | |
| } | |
| to { | |
| opacity: 0; | |
| transform: translateY(20px); | |
| } | |
| } | |
| /* ---- Stats empty overlay ---- */ | |
| .stats-empty-overlay { | |
| position: absolute; | |
| inset: 0; | |
| z-index: 50; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| background: rgba(10, 10, 10, 0.85); | |
| backdrop-filter: blur(8px); | |
| border-radius: 12px; | |
| } | |
| /* ---- Feedback form ---- */ | |
| .fb-textarea { | |
| background: #111; | |
| border: 1px solid #2a2a2a; | |
| border-radius: 8px; | |
| color: #f0ece6; | |
| font-size: 12px; | |
| padding: 12px; | |
| width: 100%; | |
| min-height: 120px; | |
| resize: vertical; | |
| font-family: 'Inter', sans-serif; | |
| } | |
| .fb-textarea:focus { | |
| outline: none; | |
| border-color: var(--cocoa-l); | |
| } | |
| .fb-select { | |
| background: #111; | |
| border: 1px solid #2a2a2a; | |
| border-radius: 8px; | |
| color: #f0ece6; | |
| font-size: 11px; | |
| padding: 10px 12px; | |
| /* taller for touch */ | |
| width: 100%; | |
| font-family: 'Inter', sans-serif; | |
| min-height: 44px; | |
| } | |
| .fb-select:focus { | |
| outline: none; | |
| border-color: var(--cocoa-l); | |
| } | |
| .fb-stars { | |
| display: flex; | |
| gap: 8px; | |
| } | |
| .fb-star { | |
| font-size: 28px; | |
| /* larger for mobile tapping */ | |
| color: #333; | |
| cursor: pointer; | |
| transition: color 0.15s; | |
| min-width: 36px; | |
| min-height: 36px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .fb-star.active, | |
| .fb-star:hover { | |
| color: var(--cocoa-l); | |
| } | |
| .fb-chip { | |
| background: #050505; | |
| border: 1px solid #222; | |
| border-radius: 8px; | |
| color: #666; | |
| font-size: 10px; | |
| font-weight: 700; | |
| padding: 14px 12px; | |
| /* taller for touch */ | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| text-align: center; | |
| text-transform: uppercase; | |
| min-height: 44px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .fb-chip:hover { | |
| border-color: #444; | |
| color: #999; | |
| } | |
| .fb-chip.active { | |
| border-color: var(--cocoa-l); | |
| background: #111; | |
| color: #fff; | |
| box-shadow: 0 0 15px rgba(200, 154, 108, 0.15); | |
| } | |
| .fb-emoji-btn { | |
| background: #111; | |
| border: 1px solid #2a2a2a; | |
| border-radius: 8px; | |
| color: #555; | |
| flex: 1; | |
| text-align: center; | |
| padding: 12px 4px; | |
| /* taller */ | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| min-height: 64px; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .fb-emoji-btn:hover { | |
| border-color: #444; | |
| color: #888; | |
| } | |
| .fb-emoji-btn.active { | |
| border-color: var(--cocoa-l); | |
| background: #1a1a1a; | |
| color: var(--cocoa-l); | |
| box-shadow: 0 0 15px rgba(200, 154, 108, 0.15); | |
| } | |
| /* ============================================= | |
| DESKTOP (β₯1024px) β original layout intact | |
| ============================================= */ | |
| @media (min-width: 1024px) { | |
| /* Sidebar visible */ | |
| aside.w-60 { | |
| display: flex ; | |
| } | |
| /* Top mobile nav hidden */ | |
| .mobile-nav { | |
| display: none ; | |
| } | |
| /* Bottom mobile nav hidden */ | |
| .mobile-bottom-nav { | |
| display: none ; | |
| } | |
| /* Main β no bottom padding needed */ | |
| main { | |
| padding-bottom: 1rem ; | |
| } | |
| /* Toast β desktop position: bottom-right */ | |
| #toast-container { | |
| bottom: 20px; | |
| left: unset; | |
| right: 20px; | |
| transform: none; | |
| width: auto; | |
| align-items: flex-end; | |
| } | |
| /* Settings β 2 column grid */ | |
| #tab-settings .grid { | |
| grid-template-columns: repeat(2, 1fr) ; | |
| } | |
| /* Run details β multi-column grids preserved */ | |
| #run-results-content { | |
| grid-template-columns: repeat(3, 1fr) ; | |
| } | |
| .grid-cols-2 { | |
| grid-template-columns: repeat(2, 1fr) ; | |
| } | |
| .grid-cols-3 { | |
| grid-template-columns: repeat(3, 1fr) ; | |
| } | |
| /* Reports grid */ | |
| #reports-grid, | |
| #reports-pending { | |
| grid-template-columns: repeat(2, 1fr) ; | |
| } | |
| /* About grid */ | |
| #tab-about .grid.grid-cols-3 { | |
| grid-template-columns: repeat(3, 1fr) ; | |
| } | |
| /* Post-process cards */ | |
| #post-process-cards { | |
| grid-template-columns: repeat(2, 1fr) ; | |
| } | |
| /* Insights panel */ | |
| #insights-panel .grid { | |
| grid-template-columns: repeat(2, 1fr) ; | |
| } | |
| } | |
| /* ============================================= | |
| MOBILE (< 1024px) β full mobile overhaul | |
| ============================================= */ | |
| @media (max-width: 1023px) { | |
| /* --- Hide desktop sidebar --- */ | |
| aside.w-60 { | |
| display: none ; | |
| } | |
| /* --- Hide old top mobile nav bar --- */ | |
| .mobile-nav { | |
| display: none ; | |
| } | |
| /* --- Body layout --- */ | |
| body { | |
| height: 100dvh; | |
| /* dynamic viewport height β accounts for mobile browser chrome */ | |
| overflow: hidden; | |
| } | |
| /* --- Main content β room for top and bottom nav --- */ | |
| main { | |
| padding: 70px 12px calc(var(--mob-nav-h) + 8px) 12px ; | |
| gap: 12px ; | |
| display: flex ; | |
| flex-direction: column ; | |
| height: 100dvh ; | |
| } | |
| /* --- Tab Scrolling Fixes β force flex-1 to push progress bar down --- */ | |
| #tab-about, | |
| #tab-overview, | |
| #tab-run-details, | |
| #tab-reports, | |
| #tab-settings, | |
| #tab-help, | |
| #tab-feedback { | |
| flex: 1 ; | |
| min-height: 0 ; | |
| padding-bottom: 20px ; | |
| overscroll-behavior: contain; | |
| -webkit-overflow-scrolling: touch; | |
| overflow-y: auto ; | |
| } | |
| /* --- About tab specific spacing --- */ | |
| #tab-about .space-y-8 { | |
| gap: 16px ; | |
| } | |
| #tab-about .pt-8 { | |
| padding-top: 16px ; | |
| } | |
| #tab-overview:not(.hidden) { | |
| display: flex ; | |
| flex-direction: column ; | |
| overflow-y: auto ; | |
| overflow-x: hidden ; | |
| -webkit-overflow-scrolling: touch; | |
| overscroll-behavior: contain; | |
| padding-bottom: calc(var(--mob-nav-h) + 24px) ; | |
| gap: 16px ; | |
| } | |
| #tab-overview>div:not(#stats-empty-state) { | |
| grid-column: span 1 ; | |
| min-height: 280px; | |
| flex-shrink: 0; | |
| } | |
| .stats-empty-overlay { | |
| position: fixed ; | |
| top: 58px; | |
| /* below mobile top bar */ | |
| left: 0; | |
| right: 0; | |
| bottom: var(--mob-nav-h); | |
| height: auto ; | |
| z-index: 100; | |
| background: rgba(0, 0, 0, 0.98); | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| /* CRITICAL: hide overlay when its parent tab is hidden */ | |
| #tab-overview.hidden .stats-empty-overlay { | |
| display: none ; | |
| } | |
| /* Hide charts when curtain is up to prevent scroll jank */ | |
| #tab-overview.curtain-active { | |
| overflow: hidden ; | |
| } | |
| /* --- Settings tab β tighter layout --- */ | |
| #tab-settings>div[class*="grid"] { | |
| display: flex ; | |
| flex-direction: column ; | |
| gap: 12px ; | |
| } | |
| #tab-settings { | |
| overflow-x: hidden ; | |
| } | |
| /* Collapse chip panel completely when not shown β removes gap */ | |
| #chip-selector.hidden-chip-container { | |
| display: none ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| height: 0 ; | |
| } | |
| /* When visible, give it breathing room */ | |
| #chip-selector:not(.hidden-chip-container) { | |
| display: flex ; | |
| flex-wrap: wrap ; | |
| gap: 8px ; | |
| margin-top: 12px ; | |
| padding: 0 ; | |
| } | |
| /* Ensure all s-row items are uniform flex rows */ | |
| .s-row { | |
| display: flex ; | |
| align-items: center ; | |
| justify-content: space-between ; | |
| padding: 14px 0 ; | |
| border-bottom: 1px solid #1a1a1a ; | |
| gap: 12px ; | |
| } | |
| .s-row:last-child { | |
| border-bottom: none ; | |
| } | |
| /* Never let mobile flex override Tailwind .hidden utility */ | |
| .s-row.hidden { | |
| display: none ; | |
| } | |
| /* The annotated video row overrides β it is flex-col on desktop; force flex-row on mobile */ | |
| .s-row[data-param="annotated"] { | |
| flex-direction: column ; | |
| align-items: stretch ; | |
| } | |
| .s-row[data-param="annotated"]>.flex { | |
| width: 100% ; | |
| } | |
| .s-stepper { | |
| width: 140px ; | |
| /* Compact fixed width */ | |
| scale: 0.9; | |
| transform-origin: right; | |
| display: inline-flex ; | |
| } | |
| .toggle-track { | |
| width: 36px ; | |
| scale: 0.9; | |
| transform-origin: right; | |
| } | |
| @media (max-width: 480px) { | |
| .s-row { | |
| flex-direction: row ; | |
| align-items: center ; | |
| justify-content: space-between ; | |
| /* align toggles on right for discipline */ | |
| gap: 12px ; | |
| padding: 10px 16px ; | |
| width: 100% ; | |
| box-sizing: border-box ; | |
| } | |
| .s-row[data-param="annotated"] { | |
| flex-direction: column ; | |
| align-items: stretch ; | |
| padding: 12px 16px ; | |
| /* matches normal s-row padding */ | |
| } | |
| .s-row:not([data-param="annotated"]) { | |
| padding: 12px 16px ; | |
| } | |
| #tab-run-details .p-8 { | |
| padding: 20px ; | |
| } | |
| #run-results-content { | |
| grid-template-columns: 1fr ; | |
| gap: 16px ; | |
| } | |
| #panel-video .flex, | |
| #panel-perf .flex, | |
| #panel-model .flex, | |
| #panel-infer .flex { | |
| padding-bottom: 8px ; | |
| } | |
| .s-row .info-wrap { | |
| display: inline-flex ; | |
| vertical-align: middle; | |
| } | |
| .s-row>div:first-child { | |
| width: auto ; | |
| max-width: 75% ; | |
| flex: 1 ; | |
| } | |
| .toggle-track { | |
| width: 36px ; | |
| min-width: 36px ; | |
| height: 20px ; | |
| flex-shrink: 0 ; | |
| display: block ; | |
| position: relative ; | |
| } | |
| #run-results-card .text-[10px] { | |
| font-size: 9px ; | |
| letter-spacing: 0.05em ; | |
| } | |
| .s-row>.s-stepper { | |
| width: 130px ; | |
| flex-shrink: 0 ; | |
| display: inline-flex ; | |
| flex-direction: row ; | |
| } | |
| .chip-container { | |
| display: grid ; | |
| grid-template-columns: 1fr 1fr ; | |
| gap: 6px ; | |
| margin-top: 12px ; | |
| padding: 10px ; | |
| background: rgba(255, 255, 255, 0.03); | |
| border-radius: 8px; | |
| border: 1px solid #1a1a1a; | |
| width: 100% ; | |
| box-sizing: border-box ; | |
| } | |
| .chip { | |
| padding: 6px ; | |
| font-size: 9px ; | |
| min-height: 32px ; | |
| border-radius: 6px ; | |
| justify-content: center ; | |
| width: 100% ; | |
| white-space: nowrap ; | |
| } | |
| .s-stepper { | |
| width: 130px ; | |
| min-width: 130px ; | |
| display: inline-flex ; | |
| flex-direction: row ; | |
| align-items: center ; | |
| justify-content: space-between ; | |
| transform-origin: right ; | |
| } | |
| .toggle-track { | |
| transform-origin: right ; | |
| } | |
| } | |
| /* --- Progress bar wrapper β remove extra margin to fix huge gap --- */ | |
| #progress-bar-wrapper { | |
| width: 100% ; | |
| max-width: 100% ; | |
| box-sizing: border-box ; | |
| margin-top: auto ; | |
| margin-bottom: 4px ; | |
| padding: 8px 12px ; | |
| flex-direction: column ; | |
| align-items: flex-start ; | |
| gap: 6px ; | |
| position: relative; | |
| z-index: 10; | |
| } | |
| #progress-bar-wrapper>div:first-child { | |
| width: 100% ; | |
| flex: 1 ; | |
| min-width: 0 ; | |
| margin-right: 0 ; | |
| } | |
| #progress-bar-wrapper>div:last-child { | |
| width: 100% ; | |
| justify-content: space-between ; | |
| font-size: 10px ; | |
| } | |
| /* --- All other grids collapse to single column --- */ | |
| .grid-cols-3, | |
| .grid-cols-2, | |
| .lg\:grid-cols-2, | |
| .xl\:grid-cols-3 { | |
| grid-template-columns: 1fr ; | |
| } | |
| /* --- Run details tab --- */ | |
| #run-results-content { | |
| grid-template-columns: 1fr ; | |
| } | |
| #tab-run-details .grid-cols-2, | |
| #tab-run-details .grid-cols-3 { | |
| grid-template-columns: 1fr ; | |
| } | |
| /* --- Reports grid --- */ | |
| #reports-grid, | |
| #reports-pending { | |
| grid-template-columns: 1fr ; | |
| } | |
| /* --- About tab grid --- */ | |
| #tab-about .grid.grid-cols-3 { | |
| grid-template-columns: 1fr ; | |
| } | |
| /* --- Post-process cards --- */ | |
| #post-process-cards { | |
| grid-template-columns: 1fr ; | |
| } | |
| /* --- Insights panel --- */ | |
| #insights-panel .grid { | |
| grid-template-columns: 1fr ; | |
| } | |
| /* --- Feedback tab --- */ | |
| #tab-feedback .grid { | |
| grid-template-columns: 1fr ; | |
| } | |
| /* --- About tab cards --- */ | |
| #tab-about .bg-black.border.rounded-xl { | |
| padding: 20px ; | |
| } | |
| /* --- Stepper β ensure full tap area --- */ | |
| .s-stepper button { | |
| padding: 10px 14px; | |
| min-width: 40px; | |
| min-height: 40px; | |
| } | |
| /* --- s-row label text β allow wrap --- */ | |
| .s-row>div:first-child .text-xs { | |
| font-size: 11px; | |
| } | |
| /* --- Help accordion buttons --- */ | |
| #tab-help button.w-full { | |
| min-height: 52px; | |
| padding: 14px 16px ; | |
| } | |
| /* --- Feedback priority chips grid --- */ | |
| #fb-priorities { | |
| grid-template-columns: 1fr ; | |
| } | |
| /* --- Keyboard shortcut modal --- */ | |
| #appModal-shortcutsModal>div { | |
| max-width: 95% ; | |
| padding: 20px ; | |
| } | |
| /* --- Privacy / Terms modals --- */ | |
| [id^="appModal-"]>div { | |
| max-width: 95% ; | |
| max-height: 80dvh ; | |
| overflow-y: auto ; | |
| } | |
| #tab-overview>div:last-child { | |
| min-height: 300px ; | |
| padding-bottom: 4px ; | |
| margin-bottom: 0 ; | |
| } | |
| /* --- Vehicle Classification Internal Scroll --- */ | |
| #tab-overview>div:nth-child(4) { | |
| max-height: 380px ; | |
| display: flex ; | |
| flex-direction: column ; | |
| } | |
| #tab-overview>div:nth-child(4) #class-breakdown { | |
| flex: 1 ; | |
| overflow-y: auto ; | |
| min-height: 0 ; | |
| } | |
| } | |
| /* ============================================= | |
| BOTTOM NAVIGATION BAR β mobile only | |
| ============================================= */ | |
| .mobile-bottom-nav { | |
| display: none; | |
| /* hidden by default, shown on mobile */ | |
| position: fixed; | |
| bottom: 0; | |
| left: 0; | |
| right: 0; | |
| height: 68px; | |
| background: #000000; | |
| border-top: 1px solid #1a1a1a; | |
| z-index: 40; | |
| align-items: stretch; | |
| } | |
| .mob-nav-item { | |
| flex: 1; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 3px; | |
| cursor: pointer; | |
| color: #444444; | |
| font-size: 0; | |
| font-weight: 700; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| transition: color 0.15s ease; | |
| border: none; | |
| background: none; | |
| padding: 8px 2px; | |
| -webkit-tap-highlight-color: transparent; | |
| } | |
| .mob-nav-item i { | |
| font-size: 22px; | |
| transition: color 0.15s ease; | |
| } | |
| .mob-nav-item.active { | |
| color: var(--cocoa-l); | |
| } | |
| .mob-nav-item.active i { | |
| color: var(--cocoa-l); | |
| } | |
| .mob-nav-item:active { | |
| color: var(--cocoa-xl); | |
| } | |
| /* Show bottom nav only on mobile */ | |
| @media (max-width: 1023px) { | |
| .mobile-bottom-nav { | |
| display: flex ; | |
| } | |
| } | |
| /* ============================================= | |
| MEDIUM TABLET (640pxβ1023px) adjustments | |
| ============================================= */ | |
| @media (min-width: 640px) and (max-width: 1023px) { | |
| /* 2-column grids on tablet where it fits */ | |
| #tab-overview>div { | |
| min-height: 280px; | |
| } | |
| #reports-grid, | |
| #reports-pending { | |
| grid-template-columns: repeat(2, 1fr) ; | |
| } | |
| #fb-priorities { | |
| grid-template-columns: repeat(2, 1fr) ; | |
| } | |
| #tab-about .grid.grid-cols-3 { | |
| grid-template-columns: repeat(2, 1fr) ; | |
| } | |
| } | |
| /* ============================================= | |
| TOUCH DEVICES β remove hover jank | |
| ============================================= */ | |
| @media (hover: none) and (pointer: coarse) { | |
| .nav-item-inactive:hover { | |
| color: #555555 ; | |
| background-color: transparent ; | |
| } | |
| .chip:hover { | |
| border-color: #333333; | |
| } | |
| .chip.active:hover { | |
| background: var(--cocoa-l); | |
| } | |
| .s-stepper button:hover { | |
| background: transparent; | |
| color: #666666; | |
| } | |
| /* Make all interactive elements minimum 44px tall */ | |
| button, | |
| .fb-emoji-btn, | |
| .mob-nav-item { | |
| min-height: 44px; | |
| } | |
| } | |
| /* ============================================================ | |
| Custom Select Dropdown (uf-select) | |
| Replaces native <select> to prevent OS picker sheet on mobile | |
| ============================================================ */ | |
| .uf-select-wrap { | |
| position: relative; | |
| display: inline-block; | |
| min-width: 110px; | |
| } | |
| .uf-select-wrap.w-full { | |
| display: block; | |
| width: 100%; | |
| } | |
| .uf-select-trigger { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 6px; | |
| padding: 5px 10px; | |
| background: #111111; | |
| border: 1px solid #222222; | |
| border-radius: 6px; | |
| font-size: 11px; | |
| font-weight: 600; | |
| color: #ffffff; | |
| cursor: pointer; | |
| user-select: none; | |
| -webkit-tap-highlight-color: transparent; | |
| transition: border-color 0.15s; | |
| white-space: nowrap; | |
| } | |
| .uf-select-trigger:hover, | |
| .uf-select-trigger:active { | |
| border-color: #444444; | |
| } | |
| .uf-select-arrow { | |
| font-size: 9px; | |
| color: #666666; | |
| transition: transform 0.2s ease; | |
| flex-shrink: 0; | |
| } | |
| .uf-select-arrow-open { | |
| transform: rotate(180deg); | |
| } | |
| /* Dropdown panel β opens downward by default */ | |
| .uf-select-dropdown { | |
| position: absolute; | |
| top: calc(100% + 4px); | |
| left: 0; | |
| min-width: 100%; | |
| background: #111111; | |
| border: 1px solid #2a2a2a; | |
| border-radius: 8px; | |
| z-index: 9999; | |
| box-shadow: 0 8px 32px rgba(0,0,0,0.8); | |
| overflow: hidden; | |
| max-height: 240px; | |
| overflow-y: auto; | |
| } | |
| /* Upward variant β anchors above trigger, for bottom-of-screen selects */ | |
| .uf-select-dropdown-up { | |
| top: auto; | |
| bottom: calc(100% + 4px); | |
| } | |
| .uf-select-option { | |
| padding: 10px 14px; | |
| font-size: 11px; | |
| font-weight: 600; | |
| color: #aaaaaa; | |
| cursor: pointer; | |
| transition: background 0.1s, color 0.1s; | |
| -webkit-tap-highlight-color: transparent; | |
| } | |
| .uf-select-option:hover, | |
| .uf-select-option:active { | |
| background: #1a1a1a; | |
| color: #ffffff; | |
| } | |
| .uf-select-option-active { | |
| color: var(--cocoa-l); | |
| background: #0a0a0a; | |
| } | |
| /* Hide scrollbar inside dropdown β options fit within max-height */ | |
| .uf-select-dropdown::-webkit-scrollbar { | |
| width: 0; | |
| height: 0; | |
| } | |
| /* Desktop: Vehicle Classification thin grey scrollbar (matches reference) */ | |
| @media (min-width: 1024px) { | |
| #class-breakdown::-webkit-scrollbar { | |
| width: 4px; | |
| } | |
| #class-breakdown::-webkit-scrollbar-track { | |
| background: #000000; | |
| } | |
| #class-breakdown::-webkit-scrollbar-thumb { | |
| background: #333333; | |
| border-radius: 4px; | |
| } | |
| #class-breakdown::-webkit-scrollbar-thumb:hover { | |
| background: #444444; | |
| } | |
| } | |