Spaces:
Sleeping
Sleeping
| /* THEME */ | |
| :root { | |
| --primary: #006266; /* main brand */ | |
| --accent: #009432; | |
| --accent-2: #a3cb38; | |
| --accent-3: #c4e538; | |
| --bg: #121212; | |
| --panel: #ffffff; | |
| --muted: #667085; | |
| --border: #e6e8eb; | |
| } | |
| /* BASE */ | |
| html, | |
| body, | |
| #root { | |
| height: 100%; | |
| margin: 0; | |
| background: var(--bg); | |
| font: 14px/1.3 system-ui, -apple-system, "Segoe UI", Roboto, Arial; | |
| } | |
| body { | |
| overflow: hidden; | |
| } /* panes handle their own scroll */ | |
| /* LAYOUT */ | |
| .shell { | |
| display: flex; | |
| height: 100vh; | |
| overflow: hidden; | |
| } | |
| /* SIDEBAR */ | |
| .sidebar { | |
| flex: 0 0 360px; /* wider: was ~320px */ | |
| max-width: 420px; | |
| min-width: 300px; | |
| height: 100%; | |
| overflow-y: auto; | |
| overflow-x: hidden; | |
| background: #0f1f1d; /* dark teal tint */ | |
| color: #e8f2f0; | |
| padding: 16px 14px; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 14px; | |
| border-right: 1px solid rgba(255, 255, 255, 0.06); | |
| /* hide scrollbar */ | |
| -ms-overflow-style: none; /* IE/old Edge */ | |
| scrollbar-width: none; /* Firefox */ | |
| padding-right: 8px; | |
| } | |
| .sidebar::-webkit-scrollbar { | |
| width: 0; | |
| height: 0; | |
| } | |
| .sidebar::-webkit-scrollbar-track, | |
| .sidebar::-webkit-scrollbar-thumb { | |
| background: transparent; | |
| } | |
| .sidebar:hover { | |
| overscroll-behavior: contain; | |
| } | |
| /* Brand */ | |
| .brand { | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| font-size: small; | |
| } | |
| .logo { | |
| width: 36px; | |
| height: 36px; | |
| border-radius: 10px; | |
| background: linear-gradient(135deg, var(--primary), var(--accent)); | |
| color: #fff; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| font-weight: 700; | |
| } | |
| .title { | |
| font-weight: 700; | |
| letter-spacing: 0.2px; | |
| } | |
| /* Cards & controls */ | |
| .block { | |
| background: rgba(255, 255, 255, 0.04); | |
| padding: 12px; | |
| border-radius: 10px; | |
| } | |
| .label { | |
| display: block; | |
| color: #cfe7e2; | |
| font-size: 12px; | |
| margin-bottom: 6px; | |
| } | |
| .input { | |
| appearance: none; | |
| outline: none; | |
| border: 1px solid rgba(255, 255, 255, 0.15); | |
| background: rgba(255, 255, 255, 0.08); | |
| color: #fff; | |
| padding: 8px 10px; | |
| border-radius: 10px; | |
| } | |
| .input.flex { | |
| flex: 1; | |
| } | |
| .btn { | |
| border: none; | |
| border-radius: 10px; | |
| padding: 8px 12px; | |
| cursor: pointer; | |
| color: #fff; | |
| background: var(--primary); | |
| } | |
| .btn:hover { | |
| filter: brightness(1.05); | |
| } | |
| .btn-ghost { | |
| background: transparent; | |
| color: #cfe7e2; | |
| border: 1px solid rgba(255, 255, 255, 0.18); | |
| } | |
| .btn-ghost:hover { | |
| background: rgba(255, 255, 255, 0.06); | |
| } | |
| /* Selected location card */ | |
| .locationCard { | |
| background: #0a1716; | |
| border: 1px solid rgba(255, 255, 255, 0.08); | |
| padding: 10px; | |
| border-radius: 10px; | |
| } | |
| .locName { | |
| font-weight: 600; | |
| } | |
| .locLL, | |
| .locDetecting { | |
| color: #b9e0d9; | |
| } | |
| .hint { | |
| color: #a9c9c3; | |
| font-size: 12px; | |
| margin-top: 6px; | |
| } | |
| /* Updates */ | |
| .tabs { | |
| display: flex; | |
| gap: 6px; | |
| } | |
| .tab { | |
| flex: 1; | |
| text-align: center; | |
| padding: 8px 10px; | |
| border-radius: 10px; | |
| cursor: pointer; | |
| color: #d7efe9; | |
| background: rgba(255, 255, 255, 0.06); | |
| border: 1px solid rgba(255, 255, 255, 0.08); | |
| } | |
| .tab-active { | |
| background: linear-gradient(135deg, var(--primary), var(--accent)); | |
| color: #fff; | |
| border: none; | |
| } | |
| .updates { | |
| margin-top: 8px; | |
| } | |
| .updateItem { | |
| background: #0a1716; | |
| border: 1px solid rgba(255, 255, 255, 0.08); | |
| padding: 8px 10px; | |
| border-radius: 10px; | |
| } | |
| .muted { | |
| color: var(--muted); | |
| } | |
| /* MAIN (map + chat column) */ | |
| .main { | |
| flex: 1 1 auto; | |
| display: flex; | |
| flex-direction: column; | |
| min-width: 0; | |
| min-height: 0; | |
| overflow: hidden; | |
| } | |
| /* MAP */ | |
| .mapWrap { | |
| position: relative; | |
| flex: 1 1 auto; | |
| min-height: 0; | |
| } | |
| .map { | |
| width: 100%; | |
| height: 100%; | |
| } | |
| /* CHAT — taller to reduce map height a bit */ | |
| .chat { | |
| background: #0f1f1d; | |
| color: #e8f2f0; | |
| border-top: 1px solid rgba(255, 255, 255, 0.06); | |
| display: flex; | |
| flex-direction: column; | |
| height: 340px; /* was 260px */ | |
| } | |
| .chatHdr { | |
| padding: 10px 12px; | |
| font-weight: 600; | |
| color: #cfe7e2; | |
| background: linear-gradient(180deg, #10211f, #0d1b19); | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.06); | |
| } | |
| .chatBody { | |
| flex: 1; | |
| overflow: auto; | |
| padding: 10px 12px; | |
| background: #0f1f1d; | |
| } | |
| .msg { | |
| padding: 8px 10px; | |
| border-radius: 10px; | |
| margin: 6px 0; | |
| max-width: 80%; | |
| } | |
| .msg.user { | |
| background: rgba(0, 148, 50, 0.15); | |
| border: 1px solid rgba(0, 148, 50, 0.35); | |
| margin-left: auto; | |
| } | |
| .msg.assistant { | |
| background: rgba(255, 255, 255, 0.06); | |
| border: 1px solid rgba(255, 255, 255, 0.1); | |
| margin-right: auto; | |
| } | |
| /* Input row (keeps Attach inside the row — no JSX changes) */ | |
| .chatInputRow { | |
| display: flex; | |
| gap: 8px; | |
| padding: 10px 12px; | |
| background: #0b1514; | |
| border-top: 1px solid rgba(255, 255, 255, 0.06); | |
| } | |
| .input-chat { | |
| flex: 1; | |
| appearance: none; | |
| outline: none; | |
| background: #152422; | |
| color: #e8f2f0; | |
| border: 1px solid #2a4642; | |
| border-radius: 10px; | |
| padding: 10px 12px; | |
| } | |
| .input-chat::placeholder { | |
| color: #9fbab5; | |
| } | |
| .chatInputRow .btn { | |
| background: var(--primary); | |
| color: #fff; | |
| border: none; | |
| border-radius: 10px; | |
| padding: 10px 14px; | |
| cursor: pointer; | |
| } | |
| .chatInputRow .btn:hover { | |
| filter: brightness(1.05); | |
| } | |
| /* Optional: Leaflet locate styles kept for future use (no duplicates) */ | |
| .leaflet-control-locate a { | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| width: 28px; | |
| height: 28px; | |
| line-height: 28px; | |
| text-align: center; | |
| background: #fff; | |
| color: #fff; | |
| border-radius: 4px; | |
| text-decoration: none; | |
| box-shadow: 0 1px 4px rgba(0, 0, 0, 0.25); | |
| font-weight: 700; | |
| } | |
| .leaflet-control-locate a:hover { | |
| filter: brightness(1.06); | |
| } | |
| .leaflet-interactive.current-location-marker { | |
| animation: pulse 2s infinite; | |
| } | |
| @keyframes pulse { | |
| 0% { | |
| box-shadow: 0 0 0 0 rgba(66, 133, 244, 0.6); | |
| } | |
| 70% { | |
| box-shadow: 0 0 0 15px rgba(66, 133, 244, 0); | |
| } | |
| 100% { | |
| box-shadow: 0 0 0 0 rgba(66, 133, 244, 0); | |
| } | |
| } | |
| .locate-btn-icon { | |
| width: 14px; | |
| height: 14px; | |
| border: 2px solid #4285f4; | |
| border-radius: 50%; | |
| position: relative; | |
| } | |
| .locate-btn-icon::before, | |
| .locate-btn-icon::after { | |
| content: ""; | |
| position: absolute; | |
| background: #4285f4; | |
| } | |
| .locate-btn-icon::before { | |
| top: 50%; | |
| left: -4px; | |
| width: 22px; | |
| height: 2px; | |
| transform: translateY(-50%); | |
| } | |
| .locate-btn-icon::after { | |
| left: 50%; | |
| top: -4px; | |
| height: 22px; | |
| width: 2px; | |
| transform: translateX(-50%); | |
| } | |
| .msg, | |
| .msg.assistant, | |
| .msg.user { | |
| white-space: pre-wrap; /* preserves \n and wraps long lines */ | |
| } | |
| /* Nearby panel */ | |
| .nearby-panel { | |
| margin: 0.5rem 0 0.75rem; | |
| } | |
| .nearby-panel .panel-header { | |
| display: flex; | |
| align-items: baseline; | |
| justify-content: space-between; | |
| padding: 0 0.25rem 0.25rem 0.25rem; | |
| } | |
| .nearby-panel .panel-title { | |
| font-weight: 600; | |
| } | |
| .nearby-panel .panel-subtitle { | |
| opacity: 0.7; | |
| font-size: 0.85rem; | |
| } | |
| .nearby-list { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 0.5rem; | |
| } | |
| .nearby-card { | |
| display: grid; | |
| grid-template-columns: 1fr auto; | |
| gap: 0.5rem; | |
| padding: 0.5rem; | |
| border-radius: 0.75rem; | |
| background: var(--card-bg, rgba(255, 255, 255, 0.04)); | |
| box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06); | |
| transition: transform 0.25s ease, opacity 0.25s ease, max-height 0.28s ease, | |
| margin 0.28s ease, padding 0.28s ease; | |
| max-height: 160px; | |
| } | |
| .nearby-card.leaving { | |
| opacity: 0; | |
| transform: translateY(-6px) scale(0.98); | |
| max-height: 0; | |
| margin: 0; | |
| padding-top: 0; | |
| padding-bottom: 0; | |
| } | |
| .nearby-main { | |
| display: grid; | |
| grid-template-columns: 56px 1fr; | |
| gap: 0.5rem; | |
| background: transparent; | |
| border: none; | |
| text-align: left; | |
| cursor: pointer; | |
| } | |
| .nearby-thumb { | |
| width: 56px; | |
| height: 56px; | |
| border-radius: 0.5rem; | |
| object-fit: cover; | |
| background: rgba(0, 0, 0, 0.15); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| font-size: 1.25rem; | |
| } | |
| .nearby-thumb.placeholder { | |
| color: rgba(255, 255, 255, 0.8); | |
| } | |
| .nearby-body { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 0.25rem; | |
| } | |
| .nearby-title { | |
| font-weight: 600; | |
| line-height: 1.2; | |
| } | |
| .nearby-emoji { | |
| margin-left: 4px; | |
| opacity: 0.85; | |
| } | |
| .nearby-meta { | |
| font-size: 0.8rem; | |
| opacity: 0.7; | |
| } | |
| .nearby-actions { | |
| display: flex; | |
| gap: 0.25rem; | |
| align-items: center; | |
| justify-content: flex-end; | |
| } | |
| .btn.btn-ghost.btn-active { | |
| font-weight: 600; | |
| } | |