giyos1212's picture
Upload 72 files
98b6d67 verified
/* static/dispatcher/style.css - TO'LIQ TAYYOR VERSIYA */
/* ==================== GLOBAL STYLES ==================== */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
min-height: 100vh;
}
/* ==================== NAVBAR ==================== */
.bg-gradient-primary {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important;
}
.navbar-brand {
font-size: 1.25rem;
letter-spacing: 0.5px;
}
@keyframes pulse {
0%,
100% {
opacity: 1;
transform: scale(1);
}
50% {
opacity: 0.8;
transform: scale(1.05);
}
}
.pulse-badge {
animation: pulse 2s infinite;
}
/* ==================== STATS CARDS ==================== */
.stats-card {
background: white;
border-radius: 12px;
padding: 20px;
display: flex;
align-items: center;
gap: 15px;
transition: all 0.3s ease;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
border: 1px solid rgba(0, 0, 0, 0.05);
cursor: pointer;
}
.stats-card:hover {
transform: translateY(-5px);
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
}
.stats-icon {
width: 60px;
height: 60px;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.75rem;
color: white;
}
.stats-card-danger .stats-icon {
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
}
.stats-card-warning .stats-icon {
background: linear-gradient(135deg, #ffd89b 0%, #ffa41b 100%);
}
.stats-card-success .stats-icon {
background: linear-gradient(135deg, #a8edea 0%, #44a08d 100%);
}
.stats-card-info .stats-icon {
background: linear-gradient(135deg, #a1c4fd 0%, #4b79e4 100%);
}
.stats-content h3 {
font-size: 2rem;
font-weight: 700;
color: #2d3748;
}
.stats-content p {
font-size: 0.875rem;
color: #718096;
margin: 0;
}
/* ==================== CARDS ==================== */
.card {
border-radius: 12px !important;
border: none !important;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08) !important;
}
.card-header {
background: white !important;
border-bottom: 1px solid rgba(0, 0, 0, 0.05) !important;
padding: 1rem 1.25rem !important;
}
.card-header h5,
.card-header h6 {
margin: 0;
font-weight: 600;
color: #2d3748;
}
/* ==================== CASES LIST ==================== */
.cases-scroll-container {
max-height: calc(100vh - 350px);
overflow-y: auto;
overflow-x: hidden;
}
.cases-scroll-container::-webkit-scrollbar {
width: 6px;
}
.cases-scroll-container::-webkit-scrollbar-track {
background: #f1f1f1;
}
.cases-scroll-container::-webkit-scrollbar-thumb {
background: #cbd5e0;
border-radius: 10px;
}
.cases-scroll-container::-webkit-scrollbar-thumb:hover {
background: #a0aec0;
}
.case-card {
padding: 1rem 1.25rem;
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
transition: all 0.2s ease;
cursor: pointer;
background: white;
}
.case-card:hover {
background: #f7fafc;
transform: translateX(5px);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
}
.case-card:last-child {
border-bottom: none;
}
.case-card h6 {
font-size: 1rem;
font-weight: 600;
color: #2d3748;
margin-bottom: 0.5rem;
}
.case-card .badge {
font-size: 0.75rem;
padding: 0.35rem 0.65rem;
font-weight: 500;
}
.badge-risk-qizil {
animation: glow-red 2s infinite;
}
.badge-risk-sariq {
animation: glow-yellow 2s infinite;
}
.badge-risk-yashil {
animation: glow-green 2s infinite;
}
@keyframes glow-red {
0%,
100% {
box-shadow: 0 0 5px rgba(220, 53, 69, 0.5);
}
50% {
box-shadow: 0 0 15px rgba(220, 53, 69, 0.8);
}
}
@keyframes glow-yellow {
0%,
100% {
box-shadow: 0 0 5px rgba(255, 193, 7, 0.5);
}
50% {
box-shadow: 0 0 15px rgba(255, 193, 7, 0.8);
}
}
@keyframes glow-green {
0%,
100% {
box-shadow: 0 0 5px rgba(40, 167, 69, 0.5);
}
50% {
box-shadow: 0 0 15px rgba(40, 167, 69, 0.8);
}
}
/* ==================== MAP STYLES ==================== */
#clinic-map {
height: calc(100vh - 350px);
min-height: 400px;
border-radius: 0 0 12px 12px;
z-index: 1;
}
.sticky-map {
position: sticky;
top: 100px;
}
.custom-clinic-marker {
background: transparent !important;
border: none !important;
}
.clinic-marker-icon {
animation: marker-bounce 2s ease-in-out infinite;
}
@keyframes marker-bounce {
0%,
100% {
transform: rotate(-45deg) translateY(0);
}
50% {
transform: rotate(-45deg) translateY(-5px);
}
}
.marker-cluster-wrapper {
background: transparent !important;
border: none !important;
}
.marker-cluster-custom {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-radius: 50%;
border: 3px solid white;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3);
color: white;
display: flex;
align-items: center;
justify-content: center;
font-weight: 700;
font-size: 14px;
width: 100%;
height: 100%;
}
.marker-cluster-small {
width: 40px;
height: 40px;
}
.marker-cluster-medium {
width: 50px;
height: 50px;
font-size: 16px;
}
.marker-cluster-large {
width: 60px;
height: 60px;
font-size: 18px;
}
.leaflet-popup-content-wrapper {
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
padding: 0;
}
.leaflet-popup-content {
margin: 0;
padding: 0;
}
.clinic-popup {
padding: 15px;
min-width: 220px;
}
.clinic-popup h6 {
font-size: 0.95rem;
font-weight: 600;
color: #2d3748;
}
.clinic-popup hr {
margin: 8px 0;
opacity: 0.2;
}
.custom-popup .leaflet-popup-tip {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.leaflet-control-zoom {
border: none !important;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15) !important;
border-radius: 8px !important;
overflow: hidden;
}
.leaflet-control-zoom a {
border: none !important;
font-size: 18px !important;
width: 34px !important;
height: 34px !important;
line-height: 34px !important;
background: white !important;
color: #4a5568 !important;
}
.leaflet-control-zoom a:hover {
background: #f7fafc !important;
}
/* ==================== BRIGADE MARKERS ==================== */
.brigade-marker {
background: transparent !important;
border: none !important;
}
.brigade-marker-icon {
cursor: pointer;
transition: all 0.3s ease;
}
.brigade-marker-icon:hover {
transform: scale(1.15);
}
@keyframes brigade-pulse {
0%,
100% {
box-shadow: 0 3px 12px rgba(0, 0, 0, 0.4), 0 0 0 0 rgba(220, 53, 69, 0.7);
}
50% {
box-shadow: 0 3px 12px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(220, 53, 69, 0);
}
}
.brigade-popup {
padding: 12px;
min-width: 200px;
}
.brigade-popup h6 {
font-size: 0.95rem;
font-weight: 600;
color: #2d3748;
margin-bottom: 8px;
}
.brigade-popup hr {
margin: 8px 0;
opacity: 0.2;
}
.brigade-popup .badge {
font-size: 0.7rem;
padding: 0.25rem 0.5rem;
}
.leaflet-marker-icon {
transition: all 1s linear !important;
}
/* ==================== CLINIC MODAL ==================== */
#clinicModal .modal-content {
border-radius: 20px;
border: none;
overflow: hidden;
}
#clinicModal .modal-header {
padding: 1.5rem;
}
#clinicModal .modal-title {
font-size: 1.25rem;
}
#clinicModal .modal-body {
padding: 1.5rem;
}
#clinicModal img.img-fluid {
border-radius: 12px;
border: 1px solid rgba(0, 0, 0, 0.1);
}
#clinicModal .card {
border: 1px solid rgba(0, 0, 0, 0.1) !important;
transition: all 0.3s ease;
}
#clinicModal .card:hover {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;
transform: translateY(-3px);
}
#clinicModal img.rounded-circle {
border: 2px solid #e2e8f0;
object-fit: cover;
}
#clinicModal .list-group-item {
border-left: 3px solid #667eea;
transition: all 0.2s ease;
}
#clinicModal .list-group-item:hover {
background-color: #f7fafc;
padding-left: 20px;
}
#clinicModal .alert-info {
background: linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%);
border: none;
border-left: 4px solid #2196f3;
}
/* ==================== BUTTONS ==================== */
.btn-group .btn {
font-size: 0.875rem;
padding: 0.375rem 0.75rem;
border-radius: 8px;
transition: all 0.2s ease;
}
.btn-group .btn:hover {
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
}
.btn-group .btn.active {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
}
/* ==================== ANIMATIONS ==================== */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.case-card {
animation: fadeIn 0.4s ease-in-out;
}
/* ==================== RESPONSIVE DESIGN ==================== */
@media (max-width: 992px) {
#clinic-map {
height: 400px;
}
.sticky-map {
position: relative;
top: 0;
}
.cases-scroll-container {
max-height: 500px;
}
.stats-card {
padding: 15px;
}
.stats-icon {
width: 50px;
height: 50px;
font-size: 1.5rem;
}
.stats-content h3 {
font-size: 1.5rem;
}
}
@media (max-width: 768px) {
.navbar-brand {
font-size: 1rem;
}
.btn-group .btn {
font-size: 0.75rem;
padding: 0.25rem 0.5rem;
}
#clinic-map {
height: 300px;
}
.case-card {
padding: 0.75rem 1rem;
}
}
@media (max-width: 576px) {
.stats-card {
margin-bottom: 10px;
}
#clinicModal .modal-dialog {
margin: 10px;
}
#clinicModal .modal-body {
padding: 1rem;
}
}
/* ==================== PRINT STYLES ==================== */
@media print {
#clinic-map,
.btn-group,
.navbar {
display: none !important;
}
.case-card {
page-break-inside: avoid;
}
body {
background: white;
}
}