Spaces:
Sleeping
Sleeping
| :root { | |
| --primary: #8b5cf6; | |
| --secondary: #ec4899; | |
| --accent: #f43f5e; | |
| --orange: #f97316; | |
| --bg-dark: #000000; | |
| --sidebar-bg: rgba(18, 18, 18, 0.4); | |
| --card-bg: rgba(25, 25, 25, 0.5); | |
| --text-main: #ffffff; | |
| --text-dim: rgba(255, 255, 255, 0.6); | |
| --glass-border: rgba(255, 255, 255, 0.08); | |
| --purple-main: #8a4fff; | |
| } | |
| * { | |
| margin: 0; | |
| padding: 0; | |
| box-sizing: border-box; | |
| font-family: 'Outfit', sans-serif; | |
| } | |
| body { | |
| background-color: #000; | |
| color: var(--text-main); | |
| overflow-x: hidden; | |
| min-height: 100vh; | |
| width: 100%; | |
| max-width: 100vw; | |
| } | |
| /* Background - Shared with Landing */ | |
| .liquid-container { | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| width: 100vw; | |
| height: 100vh; | |
| z-index: -1; | |
| overflow: hidden; | |
| background: #000; | |
| } | |
| .liquid-bg { | |
| position: absolute; | |
| width: 200%; | |
| height: 200%; | |
| top: -50%; | |
| left: -50%; | |
| background: radial-gradient(circle at 20% 30%, var(--primary) 0%, transparent 40%), | |
| radial-gradient(circle at 80% 20%, var(--secondary) 0%, transparent 45%), | |
| radial-gradient(circle at 40% 80%, var(--accent) 0%, transparent 50%), | |
| radial-gradient(circle at 90% 90%, var(--orange) 0%, transparent 40%); | |
| filter: blur(100px); | |
| animation: liquidMove 40s linear infinite; | |
| opacity: 0.9; | |
| } | |
| .grain-overlay { | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| opacity: 0.18; | |
| pointer-events: none; | |
| z-index: 1000; | |
| background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E"); | |
| } | |
| @keyframes liquidMove { | |
| 0% { | |
| transform: translate(0, 0) rotate(0deg); | |
| } | |
| 33% { | |
| transform: translate(5%, 5%) rotate(5deg); | |
| } | |
| 66% { | |
| transform: translate(-5%, 8%) rotate(-5deg); | |
| } | |
| 100% { | |
| transform: translate(0, 0) rotate(0deg); | |
| } | |
| } | |
| /* Landing Page Styles */ | |
| #canvas-container { | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| z-index: -1; | |
| } | |
| .hero-content { | |
| position: relative; | |
| z-index: 10; | |
| height: 100vh; | |
| display: flex; | |
| flex-direction: column; | |
| justify-content: center; | |
| align-items: center; | |
| text-align: center; | |
| color: #fff; | |
| padding: 0 1rem; | |
| } | |
| .made-by { | |
| font-size: 0.8rem; | |
| /* default */ | |
| letter-spacing: 0.5em; | |
| /* default */ | |
| opacity: 0.6; | |
| text-transform: uppercase; | |
| } | |
| .made-by.top { | |
| margin-bottom: 2rem; | |
| } | |
| .made-by.bottom { | |
| margin-top: 5rem; | |
| font-size: 0.6rem; | |
| letter-spacing: 0.8em; | |
| opacity: 0.4; | |
| } | |
| .landing-title { | |
| font-size: clamp(3rem, 15vw, 10rem); | |
| line-height: 0.85; | |
| margin-bottom: 2rem; | |
| font-weight: 800; | |
| background: linear-gradient(to bottom, #fff 50%, rgba(255, 255, 255, 0.2)); | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| } | |
| .landing-subtitle { | |
| max-width: 600px; | |
| line-height: 1.6; | |
| opacity: 0.7; | |
| margin-bottom: 3rem; | |
| /* Adjusted for spacing */ | |
| } | |
| .enter-btn { | |
| /* margin-top: 3rem; -- handled by subtitle margin */ | |
| padding: 1.2rem 3rem; | |
| background: rgba(255, 255, 255, 0.1); | |
| backdrop-filter: blur(10px); | |
| border: 1px solid rgba(255, 255, 255, 0.2); | |
| color: #fff; | |
| font-weight: 700; | |
| font-size: 1.1rem; | |
| border-radius: 100px; | |
| cursor: pointer; | |
| transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); | |
| text-decoration: none; | |
| letter-spacing: 0.1em; | |
| display: inline-block; | |
| } | |
| .enter-btn:hover { | |
| background: #fff; | |
| color: #000; | |
| transform: scale(1.05); | |
| box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3); | |
| } | |
| /* Page Layout */ | |
| .dashboard-container { | |
| display: flex; | |
| width: 100vw; | |
| height: 100vh; | |
| position: relative; | |
| z-index: 1; | |
| } | |
| /* Sidebar - Glass Styling */ | |
| .sidebar { | |
| width: 80px; | |
| background: var(--sidebar-bg); | |
| backdrop-filter: blur(20px); | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| padding: 2rem 0; | |
| gap: 2rem; | |
| border-right: 1px solid var(--glass-border); | |
| transition: width 0.3s ease; | |
| } | |
| .nav-icon { | |
| font-size: 1.4rem; | |
| color: var(--text-dim); | |
| cursor: pointer; | |
| transition: all 0.3s ease; | |
| padding: 12px; | |
| border-radius: 16px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| text-decoration: none; | |
| } | |
| .nav-icon:hover, | |
| .nav-icon.active { | |
| color: #fff; | |
| background: var(--purple-main); | |
| box-shadow: 0 0 20px rgba(138, 79, 255, 0.4); | |
| } | |
| /* Main Area */ | |
| .main-wrapper { | |
| flex: 1; | |
| display: flex; | |
| flex-direction: column; | |
| padding: 2rem; | |
| overflow-y: auto; | |
| } | |
| .dashboard-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| margin-bottom: 2rem; | |
| gap: 2rem; | |
| } | |
| .search-bar { | |
| background: rgba(255, 255, 255, 0.05); | |
| backdrop-filter: blur(10px); | |
| border: 1px solid var(--glass-border); | |
| padding: 0.8rem 1.5rem 0.8rem 3rem; | |
| border-radius: 14px; | |
| color: #fff; | |
| width: 300px; | |
| outline: none; | |
| } | |
| .add-btn { | |
| background: var(--purple-main); | |
| color: #fff; | |
| border: none; | |
| padding: 0.8rem 1.8rem; | |
| border-radius: 14px; | |
| font-weight: 700; | |
| cursor: pointer; | |
| transition: transform 0.2s ease; | |
| } | |
| /* Dashboard Grid - Responsive */ | |
| .dashboard-grid { | |
| display: grid; | |
| grid-template-columns: minmax(0, 1.3fr) minmax(0, 0.7fr); | |
| gap: 1.5rem; | |
| width: 100%; | |
| max-width: 100%; | |
| } | |
| .card { | |
| background: var(--card-bg); | |
| backdrop-filter: blur(30px) saturate(160%); | |
| border: 1px solid var(--glass-border); | |
| border-radius: 32px; | |
| padding: 1.8rem; | |
| height: fit-content; | |
| } | |
| /* Video Feed */ | |
| .feed-card { | |
| grid-column: span 1; | |
| background: #000; | |
| border-radius: 32px; | |
| position: relative; | |
| overflow: hidden; | |
| min-height: 450px; | |
| max-height: 70vh; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| /* When overlay is visible, allow content to fit */ | |
| .feed-card.overlay-active { | |
| overflow: visible; | |
| aspect-ratio: unset; | |
| height: auto; | |
| } | |
| /* When video is playing, maintain aspect ratio */ | |
| .feed-card.video-active { | |
| aspect-ratio: 16/9; | |
| overflow: hidden; | |
| } | |
| .feed-card img { | |
| width: 100%; | |
| height: 100%; | |
| object-fit: contain; | |
| position: relative; | |
| z-index: 1; | |
| } | |
| #drop-zone-overlay { | |
| position: absolute; | |
| inset: 0; | |
| display: flex; | |
| flex-direction: column; | |
| justify-content: center; | |
| align-items: center; | |
| background: rgba(0, 0, 0, 0.6); | |
| text-align: center; | |
| padding: 2.5rem 2rem; | |
| z-index: 10; | |
| min-height: 100%; | |
| } | |
| #drop-zone-overlay .mode-btn-wrap { | |
| display: flex; | |
| gap: 1rem; | |
| margin-bottom: 1rem; | |
| z-index: 10; | |
| position: relative; | |
| } | |
| .live-badge { | |
| position: absolute; | |
| top: 20px; | |
| left: 20px; | |
| z-index: 20; | |
| background: rgba(0, 0, 0, 0.7); | |
| backdrop-filter: blur(10px); | |
| padding: 8px 16px; | |
| border-radius: 20px; | |
| font-size: 0.85rem; | |
| font-weight: 600; | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| } | |
| @keyframes pulse { | |
| 0%, | |
| 100% { | |
| opacity: 1; | |
| } | |
| 50% { | |
| opacity: 0.3; | |
| } | |
| } | |
| /* Mobile Optimizations */ | |
| @media (max-width: 1024px) { | |
| .dashboard-grid { | |
| grid-template-columns: 1fr; | |
| } | |
| .sidebar { | |
| width: 70px; | |
| } | |
| .feed-card { | |
| min-height: 400px; | |
| max-height: 60vh; | |
| } | |
| .feed-card.overlay-active { | |
| min-height: 450px; | |
| } | |
| } | |
| @media (max-width: 768px) { | |
| .dashboard-container { | |
| flex-direction: column-reverse; | |
| height: auto; | |
| min-height: 100vh; | |
| } | |
| .sidebar { | |
| width: 100%; | |
| height: 64px; | |
| flex-direction: row; | |
| justify-content: space-around; | |
| padding: 0 1rem; | |
| border-right: none; | |
| border-top: 1px solid var(--glass-border); | |
| position: fixed; | |
| bottom: 0; | |
| left: 0; | |
| z-index: 100; | |
| background: rgba(10, 10, 10, 0.85); | |
| backdrop-filter: blur(20px); | |
| } | |
| .nav-icon { | |
| font-size: 1.1rem; | |
| padding: 10px; | |
| } | |
| .main-wrapper { | |
| padding: 1rem; | |
| padding-bottom: 80px; | |
| overflow-x: hidden; | |
| width: 100%; | |
| } | |
| .dashboard-header { | |
| flex-direction: column; | |
| align-items: flex-start; | |
| gap: 0.75rem; | |
| margin-bottom: 1rem; | |
| } | |
| .dashboard-header h2 { | |
| font-size: 1.3rem; | |
| } | |
| .system-stats { | |
| display: flex; | |
| gap: 0.75rem; | |
| flex-wrap: wrap; | |
| } | |
| .search-bar { | |
| width: 100%; | |
| } | |
| .device-grid { | |
| grid-template-columns: 1fr; | |
| } | |
| .device-tabs { | |
| overflow-x: auto; | |
| padding-bottom: 15px; | |
| } | |
| .dashboard-header .header-actions { | |
| width: 100%; | |
| justify-content: space-between; | |
| } | |
| /* Feed Card - Mobile Fix */ | |
| .feed-card { | |
| min-height: 350px ; | |
| max-height: 50vh ; | |
| height: auto ; | |
| border-radius: 20px; | |
| width: 100%; | |
| } | |
| .feed-card.overlay-active { | |
| min-height: 400px ; | |
| height: auto ; | |
| } | |
| .feed-card.video-active { | |
| aspect-ratio: unset ; | |
| } | |
| .feed-card #processed-stream { | |
| object-fit: contain ; | |
| width: 100% ; | |
| height: auto ; | |
| max-height: 50vh ; | |
| position: relative ; | |
| min-height: 200px ; | |
| } | |
| .feed-card .live-badge { | |
| top: 10px ; | |
| left: 10px ; | |
| font-size: 0.75rem ; | |
| padding: 6px 12px ; | |
| } | |
| #drop-zone-overlay { | |
| padding: 1.5rem 1rem ; | |
| } | |
| /* Drop zone buttons on mobile */ | |
| #drop-zone-overlay { | |
| padding: 1rem ; | |
| } | |
| #drop-zone-overlay h3 { | |
| font-size: 1rem; | |
| } | |
| #drop-zone-overlay .mode-btn-wrap { | |
| flex-direction: column; | |
| gap: 0.6rem; | |
| width: 100%; | |
| max-width: 260px; | |
| } | |
| #drop-zone-overlay .mode-btn-wrap button { | |
| width: 100%; | |
| } | |
| /* Results Panel */ | |
| #results-panel { | |
| max-height: 260px ; | |
| } | |
| .log-row-title { | |
| font-size: 0.8rem ; | |
| } | |
| .log-row-meta { | |
| font-size: 0.72rem ; | |
| } | |
| /* Evidence Cache - 3 cols on mobile */ | |
| .mini-feed-gallery { | |
| grid-template-columns: repeat(3, 1fr) ; | |
| gap: 8px ; | |
| } | |
| /* Cards */ | |
| .card { | |
| border-radius: 20px; | |
| padding: 1.2rem; | |
| width: 100%; | |
| overflow: hidden; | |
| } | |
| .side-panel-wrapper { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 1rem; | |
| width: 100%; | |
| } | |
| .dashboard-grid { | |
| width: 100%; | |
| overflow-x: hidden; | |
| } | |
| } | |
| /* Extra Small Mobile (Portrait Phones) */ | |
| @media (max-width: 480px) { | |
| .feed-card { | |
| min-height: 180px ; | |
| max-height: 45vh ; | |
| } | |
| .feed-card #processed-stream { | |
| min-height: 180px ; | |
| max-height: 45vh ; | |
| } | |
| .dashboard-header h2 { | |
| font-size: 1.1rem ; | |
| } | |
| .system-stats { | |
| font-size: 0.75rem; | |
| } | |
| .stat-item { | |
| font-size: 0.7rem; | |
| } | |
| } | |
| /* === JSON Syntax Highlighting === */ | |
| .json-viewer { | |
| font-family: 'JetBrains Mono', monospace; | |
| font-size: 0.72rem; | |
| line-height: 1.7; | |
| white-space: pre-wrap; | |
| word-break: break-word; | |
| overflow-wrap: break-word; | |
| } | |
| .json-key { | |
| color: #c084fc; | |
| } | |
| .json-str { | |
| color: #86efac; | |
| } | |
| .json-num { | |
| color: #67e8f9; | |
| } | |
| .json-bool { | |
| color: #fbbf24; | |
| } | |
| .json-null { | |
| color: #f87171; | |
| } | |
| .json-url { | |
| color: #38bdf8; | |
| text-decoration: underline; | |
| cursor: pointer; | |
| } | |
| /* JSON Table View */ | |
| .json-table { | |
| width: 100%; | |
| border-collapse: collapse; | |
| font-family: 'JetBrains Mono', monospace; | |
| font-size: 0.75rem; | |
| } | |
| .json-table tr { | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.08); | |
| } | |
| .json-table td { | |
| padding: 0.6rem 0.8rem; | |
| vertical-align: top; | |
| word-break: break-word; | |
| } | |
| .json-table td:first-child { | |
| color: #c084fc; | |
| font-weight: 600; | |
| width: 35%; | |
| min-width: 100px; | |
| } | |
| .json-table td:last-child { | |
| color: #86efac; | |
| width: 65%; | |
| } | |
| /* === Modal Mobile === */ | |
| @media (max-width: 768px) { | |
| #detail-modal>div { | |
| width: 100% ; | |
| max-width: 100% ; | |
| margin: 0 ; | |
| height: 100vh ; | |
| border-radius: 0 ; | |
| padding: 1.2rem ; | |
| overflow-y: auto; | |
| } | |
| .modal-inner-grid { | |
| grid-template-columns: 1fr ; | |
| gap: 1rem ; | |
| overflow: visible ; | |
| } | |
| .modal-main-img-wrap { | |
| max-height: 220px; | |
| min-height: 160px; | |
| } | |
| #modal-thumb { | |
| max-height: 220px; | |
| width: 100%; | |
| } | |
| .modal-plate-box { | |
| padding: 0.8rem ; | |
| } | |
| #modal-plate-text { | |
| font-size: 1.1rem ; | |
| } | |
| .modal-json-box { | |
| max-height: none ; | |
| overflow-y: auto; | |
| } | |
| .json-viewer { | |
| font-size: 0.68rem ; | |
| } | |
| .json-table { | |
| font-size: 0.7rem ; | |
| } | |
| .json-table td { | |
| padding: 0.5rem 0.6rem ; | |
| } | |
| .json-table td:first-child { | |
| width: 40% ; | |
| } | |
| } | |
| /* === Log Row Styles === */ | |
| .log-row { | |
| background: rgba(255, 255, 255, 0.05); | |
| padding: 12px 14px; | |
| border-radius: 10px; | |
| border-left: 4px solid #ef4444; | |
| cursor: pointer; | |
| transition: background 0.2s; | |
| position: relative; | |
| } | |
| .log-row:hover { | |
| background: rgba(255, 255, 255, 0.1); | |
| } | |
| .log-row-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| gap: 0.5rem; | |
| flex-wrap: wrap; | |
| } | |
| .log-row-title { | |
| font-weight: 700; | |
| font-size: 0.85rem; | |
| color: #fff; | |
| } | |
| .log-row-time { | |
| font-size: 0.7rem; | |
| opacity: 0.55; | |
| white-space: nowrap; | |
| } | |
| .log-row-meta { | |
| margin-top: 5px; | |
| font-size: 0.78rem; | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| gap: 0.5rem; | |
| flex-wrap: wrap; | |
| } | |
| .log-row-id { | |
| opacity: 0.6; | |
| font-family: 'JetBrains Mono', monospace; | |
| } | |
| .log-row-plate { | |
| color: #facc15; | |
| font-family: 'JetBrains Mono', monospace; | |
| font-weight: 700; | |
| letter-spacing: 1px; | |
| } | |
| /* Switches & Controls */ | |
| .switch { | |
| width: 48px; | |
| height: 26px; | |
| background: rgba(255, 255, 255, 0.1); | |
| border-radius: 100px; | |
| position: relative; | |
| cursor: pointer; | |
| transition: background 0.3s ease; | |
| } | |
| .switch.on { | |
| background: var(--purple-main); | |
| } | |
| .switch::after { | |
| content: ''; | |
| position: absolute; | |
| top: 3px; | |
| left: 3px; | |
| width: 20px; | |
| height: 20px; | |
| background: white; | |
| border-radius: 50%; | |
| transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); | |
| } | |
| .switch.on::after { | |
| left: 25px; | |
| } | |
| /* Detections Gallery */ | |
| .mini-feed-gallery { | |
| display: grid; | |
| grid-template-columns: repeat(4, 1fr); | |
| gap: 12px; | |
| margin-top: 1.5rem; | |
| } | |
| .mini-thumb { | |
| aspect-ratio: 1/1; | |
| background: #1a1a1a; | |
| border-radius: 12px; | |
| overflow: hidden; | |
| border: 1px solid var(--glass-border); | |
| cursor: pointer; | |
| transition: transform 0.2s ease; | |
| } | |
| .mini-thumb:hover { | |
| transform: scale(1.05); | |
| } | |
| .mini-thumb img { | |
| width: 100%; | |
| height: 100%; | |
| object-fit: cover; | |
| } |