UrbanFlow / frontend /css /vehicles.css
Subh775's picture
RELEASE: URBANFLOW: YOUR VISION PARTNER..
091ea0d
/* =============================================
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 !important;
}
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 !important;
-ms-overflow-style: auto !important;
}
#class-breakdown::-webkit-scrollbar {
display: block !important;
width: 4px !important;
}
#class-breakdown::-webkit-scrollbar-track {
background: #000000 !important;
}
#class-breakdown::-webkit-scrollbar-thumb {
background: #222222 !important;
border-radius: 4px !important;
}
#class-breakdown::-webkit-scrollbar-thumb:hover {
background: #333333 !important;
}
}
/* ---- 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 !important;
}
/* ---- 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 !important;
color: #ffffff !important;
font-size: 8px;
cursor: pointer;
transition: all 0.2s ease;
}
.info-btn:hover,
.info-btn:active {
background: #666666 !important;
}
.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 !important;
color: var(--cocoa-xl) !important;
border-left: 2px solid var(--cocoa-l) !important;
}
.nav-item-inactive {
color: #555555 !important;
}
.nav-item-inactive:hover {
color: #f0ece6 !important;
background-color: #050505 !important;
}
/* ---- Card overrides ---- */
.bg-white {
background-color: #0a0a0a !important;
}
.border-slate-200,
.border-slate-100,
.border-slate-50,
.border-neutral-800,
.border-neutral-900 {
border-color: #2a2a2a !important;
}
.bg-slate-50\/50,
.bg-slate-50,
.bg-slate-900,
.bg-neutral-900 {
background-color: #0c0c0c !important;
}
.text-slate-900,
.text-slate-800,
.text-slate-700,
.text-neutral-900 {
color: #ffffff !important;
}
.text-slate-600,
.text-slate-500,
.text-slate-400,
.text-neutral-500,
.text-neutral-400 {
color: #888888 !important;
}
.shadow-sm {
box-shadow: none !important;
}
/* ---- 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 !important;
border-color: #c89a6c !important;
}
.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) !important;
}
#proc-label {
color: #ffffff !important;
}
/* ---- Disabled rows ---- */
.s-row.disabled {
opacity: 0.65 !important;
}
.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 !important;
opacity: 0.5 !important;
}
/* Force-collapse the dropdown panel when row is locked */
.s-row.disabled .uf-select-dropdown {
display: none !important;
}
.s-row.disabled .info-wrap {
pointer-events: auto !important;
opacity: 1 !important;
}
#btn-start-processing {
font-family: 'Montserrat', sans-serif !important;
}
/* ---- 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 !important;
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 !important;
margin: 0 !important;
padding: 0 !important;
height: 0 !important;
}
/* ---- 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 !important;
}
/* Top mobile nav hidden */
.mobile-nav {
display: none !important;
}
/* Bottom mobile nav hidden */
.mobile-bottom-nav {
display: none !important;
}
/* Main β€” no bottom padding needed */
main {
padding-bottom: 1rem !important;
}
/* 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) !important;
}
/* Run details β€” multi-column grids preserved */
#run-results-content {
grid-template-columns: repeat(3, 1fr) !important;
}
.grid-cols-2 {
grid-template-columns: repeat(2, 1fr) !important;
}
.grid-cols-3 {
grid-template-columns: repeat(3, 1fr) !important;
}
/* Reports grid */
#reports-grid,
#reports-pending {
grid-template-columns: repeat(2, 1fr) !important;
}
/* About grid */
#tab-about .grid.grid-cols-3 {
grid-template-columns: repeat(3, 1fr) !important;
}
/* Post-process cards */
#post-process-cards {
grid-template-columns: repeat(2, 1fr) !important;
}
/* Insights panel */
#insights-panel .grid {
grid-template-columns: repeat(2, 1fr) !important;
}
}
/* =============================================
MOBILE (< 1024px) β€” full mobile overhaul
============================================= */
@media (max-width: 1023px) {
/* --- Hide desktop sidebar --- */
aside.w-60 {
display: none !important;
}
/* --- Hide old top mobile nav bar --- */
.mobile-nav {
display: none !important;
}
/* --- 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 !important;
gap: 12px !important;
display: flex !important;
flex-direction: column !important;
height: 100dvh !important;
}
/* --- 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 !important;
min-height: 0 !important;
padding-bottom: 20px !important;
overscroll-behavior: contain;
-webkit-overflow-scrolling: touch;
overflow-y: auto !important;
}
/* --- About tab specific spacing --- */
#tab-about .space-y-8 {
gap: 16px !important;
}
#tab-about .pt-8 {
padding-top: 16px !important;
}
#tab-overview:not(.hidden) {
display: flex !important;
flex-direction: column !important;
overflow-y: auto !important;
overflow-x: hidden !important;
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
padding-bottom: calc(var(--mob-nav-h) + 24px) !important;
gap: 16px !important;
}
#tab-overview>div:not(#stats-empty-state) {
grid-column: span 1 !important;
min-height: 280px;
flex-shrink: 0;
}
.stats-empty-overlay {
position: fixed !important;
top: 58px;
/* below mobile top bar */
left: 0;
right: 0;
bottom: var(--mob-nav-h);
height: auto !important;
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 !important;
}
/* Hide charts when curtain is up to prevent scroll jank */
#tab-overview.curtain-active {
overflow: hidden !important;
}
/* --- Settings tab β€” tighter layout --- */
#tab-settings>div[class*="grid"] {
display: flex !important;
flex-direction: column !important;
gap: 12px !important;
}
#tab-settings {
overflow-x: hidden !important;
}
/* Collapse chip panel completely when not shown β€” removes gap */
#chip-selector.hidden-chip-container {
display: none !important;
margin: 0 !important;
padding: 0 !important;
height: 0 !important;
}
/* When visible, give it breathing room */
#chip-selector:not(.hidden-chip-container) {
display: flex !important;
flex-wrap: wrap !important;
gap: 8px !important;
margin-top: 12px !important;
padding: 0 !important;
}
/* Ensure all s-row items are uniform flex rows */
.s-row {
display: flex !important;
align-items: center !important;
justify-content: space-between !important;
padding: 14px 0 !important;
border-bottom: 1px solid #1a1a1a !important;
gap: 12px !important;
}
.s-row:last-child {
border-bottom: none !important;
}
/* Never let mobile flex override Tailwind .hidden utility */
.s-row.hidden {
display: none !important;
}
/* The annotated video row overrides β€” it is flex-col on desktop; force flex-row on mobile */
.s-row[data-param="annotated"] {
flex-direction: column !important;
align-items: stretch !important;
}
.s-row[data-param="annotated"]>.flex {
width: 100% !important;
}
.s-stepper {
width: 140px !important;
/* Compact fixed width */
scale: 0.9;
transform-origin: right;
display: inline-flex !important;
}
.toggle-track {
width: 36px !important;
scale: 0.9;
transform-origin: right;
}
@media (max-width: 480px) {
.s-row {
flex-direction: row !important;
align-items: center !important;
justify-content: space-between !important;
/* align toggles on right for discipline */
gap: 12px !important;
padding: 10px 16px !important;
width: 100% !important;
box-sizing: border-box !important;
}
.s-row[data-param="annotated"] {
flex-direction: column !important;
align-items: stretch !important;
padding: 12px 16px !important;
/* matches normal s-row padding */
}
.s-row:not([data-param="annotated"]) {
padding: 12px 16px !important;
}
#tab-run-details .p-8 {
padding: 20px !important;
}
#run-results-content {
grid-template-columns: 1fr !important;
gap: 16px !important;
}
#panel-video .flex,
#panel-perf .flex,
#panel-model .flex,
#panel-infer .flex {
padding-bottom: 8px !important;
}
.s-row .info-wrap {
display: inline-flex !important;
vertical-align: middle;
}
.s-row>div:first-child {
width: auto !important;
max-width: 75% !important;
flex: 1 !important;
}
.toggle-track {
width: 36px !important;
min-width: 36px !important;
height: 20px !important;
flex-shrink: 0 !important;
display: block !important;
position: relative !important;
}
#run-results-card .text-[10px] {
font-size: 9px !important;
letter-spacing: 0.05em !important;
}
.s-row>.s-stepper {
width: 130px !important;
flex-shrink: 0 !important;
display: inline-flex !important;
flex-direction: row !important;
}
.chip-container {
display: grid !important;
grid-template-columns: 1fr 1fr !important;
gap: 6px !important;
margin-top: 12px !important;
padding: 10px !important;
background: rgba(255, 255, 255, 0.03);
border-radius: 8px;
border: 1px solid #1a1a1a;
width: 100% !important;
box-sizing: border-box !important;
}
.chip {
padding: 6px !important;
font-size: 9px !important;
min-height: 32px !important;
border-radius: 6px !important;
justify-content: center !important;
width: 100% !important;
white-space: nowrap !important;
}
.s-stepper {
width: 130px !important;
min-width: 130px !important;
display: inline-flex !important;
flex-direction: row !important;
align-items: center !important;
justify-content: space-between !important;
transform-origin: right !important;
}
.toggle-track {
transform-origin: right !important;
}
}
/* --- Progress bar wrapper β€” remove extra margin to fix huge gap --- */
#progress-bar-wrapper {
width: 100% !important;
max-width: 100% !important;
box-sizing: border-box !important;
margin-top: auto !important;
margin-bottom: 4px !important;
padding: 8px 12px !important;
flex-direction: column !important;
align-items: flex-start !important;
gap: 6px !important;
position: relative;
z-index: 10;
}
#progress-bar-wrapper>div:first-child {
width: 100% !important;
flex: 1 !important;
min-width: 0 !important;
margin-right: 0 !important;
}
#progress-bar-wrapper>div:last-child {
width: 100% !important;
justify-content: space-between !important;
font-size: 10px !important;
}
/* --- 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 !important;
}
/* --- Run details tab --- */
#run-results-content {
grid-template-columns: 1fr !important;
}
#tab-run-details .grid-cols-2,
#tab-run-details .grid-cols-3 {
grid-template-columns: 1fr !important;
}
/* --- Reports grid --- */
#reports-grid,
#reports-pending {
grid-template-columns: 1fr !important;
}
/* --- About tab grid --- */
#tab-about .grid.grid-cols-3 {
grid-template-columns: 1fr !important;
}
/* --- Post-process cards --- */
#post-process-cards {
grid-template-columns: 1fr !important;
}
/* --- Insights panel --- */
#insights-panel .grid {
grid-template-columns: 1fr !important;
}
/* --- Feedback tab --- */
#tab-feedback .grid {
grid-template-columns: 1fr !important;
}
/* --- About tab cards --- */
#tab-about .bg-black.border.rounded-xl {
padding: 20px !important;
}
/* --- 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 !important;
}
/* --- Feedback priority chips grid --- */
#fb-priorities {
grid-template-columns: 1fr !important;
}
/* --- Keyboard shortcut modal --- */
#appModal-shortcutsModal>div {
max-width: 95% !important;
padding: 20px !important;
}
/* --- Privacy / Terms modals --- */
[id^="appModal-"]>div {
max-width: 95% !important;
max-height: 80dvh !important;
overflow-y: auto !important;
}
#tab-overview>div:last-child {
min-height: 300px !important;
padding-bottom: 4px !important;
margin-bottom: 0 !important;
}
/* --- Vehicle Classification Internal Scroll --- */
#tab-overview>div:nth-child(4) {
max-height: 380px !important;
display: flex !important;
flex-direction: column !important;
}
#tab-overview>div:nth-child(4) #class-breakdown {
flex: 1 !important;
overflow-y: auto !important;
min-height: 0 !important;
}
}
/* =============================================
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 !important;
}
}
/* =============================================
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) !important;
}
#fb-priorities {
grid-template-columns: repeat(2, 1fr) !important;
}
#tab-about .grid.grid-cols-3 {
grid-template-columns: repeat(2, 1fr) !important;
}
}
/* =============================================
TOUCH DEVICES β€” remove hover jank
============================================= */
@media (hover: none) and (pointer: coarse) {
.nav-item-inactive:hover {
color: #555555 !important;
background-color: transparent !important;
}
.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;
}
}