krushimitravit's picture
Upload 6 files
7b6c3d3 verified
/* ============================================
Farm Geofencing - Nature-Professional Theme
Based on UI/UX Style Guide
============================================ */
/* Import Outfit Font */
@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700&display=swap');
/* ============================================
1. CSS CUSTOM PROPERTIES (COLOR SYSTEM)
============================================ */
:root {
/* Primary Colors */
--color-deep-green: #1a5d3a;
--color-accent-green: #198754;
--color-darker-accent: #143d2e;
/* Neutral Colors */
--color-background: #f8f9fa;
--color-surface: #ffffff;
--color-text-dark: #212529;
--color-text-muted: #6c757d;
--color-border: #dee2e6;
/* Upload Zone */
--color-upload-bg: #fcfcfc;
--color-upload-active: #f0fff4;
/* Shadows */
--shadow-card: 0 10px 40px rgba(0, 0, 0, 0.08);
--shadow-input-focus: 0 0 0 4px rgba(25, 135, 84, 0.1);
/* Border Radius */
--radius-card: 20px;
--radius-button: 8px;
--radius-pill: 50px;
/* Spacing */
--spacing-xs: 0.5rem;
--spacing-sm: 1rem;
--spacing-md: 1.5rem;
--spacing-lg: 2rem;
--spacing-xl: 3rem;
}
/* ============================================
2. GLOBAL STYLES & TYPOGRAPHY
============================================ */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Outfit', sans-serif;
font-weight: 400;
color: var(--color-text-dark);
background-color: var(--color-background);
line-height: 1.6;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: 700;
color: var(--color-text-dark);
margin-bottom: var(--spacing-sm);
}
h1 {
font-size: 2.5rem;
font-weight: 700;
}
h2 {
font-size: 2rem;
font-weight: 600;
}
h3 {
font-size: 1.75rem;
font-weight: 600;
}
h4 {
font-size: 1.5rem;
font-weight: 600;
}
h5 {
font-size: 1.25rem;
font-weight: 600;
}
h6 {
font-size: 1rem;
font-weight: 600;
}
p {
margin-bottom: var(--spacing-sm);
}
/* ============================================
3. CURVED HERO HEADER
============================================ */
.hero-header {
background: var(--color-deep-green);
color: var(--color-surface);
padding: var(--spacing-xl) var(--spacing-lg);
border-bottom-left-radius: 50% 20px;
border-bottom-right-radius: 50% 20px;
margin-bottom: var(--spacing-lg);
box-shadow: var(--shadow-card);
}
.hero-header h1 {
color: var(--color-surface);
margin-bottom: 0;
}
/* ============================================
4. BUTTONS
============================================ */
/* Primary Action Button */
.btn-primary-action {
background-color: var(--color-deep-green);
color: var(--color-surface);
border: none;
border-radius: var(--radius-button);
padding: 0.75rem 1.5rem;
font-family: 'Outfit', sans-serif;
font-weight: 500;
font-size: 1rem;
cursor: pointer;
transition: all 0.3s ease;
display: inline-flex;
align-items: center;
gap: 0.5rem;
}
.btn-primary-action:hover {
background-color: var(--color-darker-accent);
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(26, 93, 58, 0.3);
}
.btn-primary-action:active {
transform: translateY(0);
}
/* Secondary/Pill Button */
.btn-secondary-pill {
background-color: var(--color-surface);
color: var(--color-accent-green);
border: 1px solid var(--color-accent-green);
border-radius: var(--radius-pill);
padding: 0.75rem 1.5rem;
font-family: 'Outfit', sans-serif;
font-weight: 500;
font-size: 1rem;
cursor: pointer;
transition: all 0.3s ease;
display: inline-flex;
align-items: center;
gap: 0.5rem;
}
.btn-secondary-pill:hover {
background-color: var(--color-accent-green);
color: var(--color-surface);
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(25, 135, 84, 0.3);
}
/* Bootstrap Button Overrides */
.btn-success {
background-color: var(--color-accent-green) !important;
border-color: var(--color-accent-green) !important;
border-radius: var(--radius-button) !important;
font-family: 'Outfit', sans-serif !important;
font-weight: 500 !important;
transition: all 0.3s ease !important;
}
.btn-success:hover {
background-color: var(--color-darker-accent) !important;
border-color: var(--color-darker-accent) !important;
transform: translateY(-2px);
}
.btn-danger {
border-radius: var(--radius-button) !important;
font-family: 'Outfit', sans-serif !important;
font-weight: 500 !important;
}
.btn-info,
.btn-warning {
border-radius: var(--radius-button) !important;
font-family: 'Outfit', sans-serif !important;
font-weight: 500 !important;
}
/* ============================================
5. CARDS
============================================ */
.card {
background-color: var(--color-surface);
border-radius: var(--radius-card) !important;
box-shadow: var(--shadow-card);
border: none !important;
padding: var(--spacing-xl);
margin-bottom: var(--spacing-lg);
}
.card-body {
padding: var(--spacing-lg);
}
.control-panel {
background: var(--color-surface) !important;
padding: var(--spacing-lg);
border-radius: var(--radius-card);
box-shadow: var(--shadow-card);
border: none;
}
/* Weather and Event Cards */
.weather-card,
.event-card {
background-color: var(--color-surface);
border-radius: var(--radius-card);
padding: var(--spacing-lg);
box-shadow: var(--shadow-card);
transition: transform 0.3s ease, box-shadow 0.3s ease;
cursor: pointer;
border: 1px solid var(--color-border);
}
.weather-card:hover,
.event-card:hover {
transform: translateY(-5px);
box-shadow: 0 15px 50px rgba(0, 0, 0, 0.12);
}
/* ============================================
6. INPUTS & FORMS
============================================ */
.form-control {
background-color: var(--color-background);
border: 1px solid var(--color-border);
border-radius: var(--radius-button);
padding: 0.75rem 1rem;
font-family: 'Outfit', sans-serif;
font-weight: 400;
font-size: 1rem;
color: var(--color-text-dark);
transition: all 0.3s ease;
}
.form-control:focus {
background-color: var(--color-surface);
border-color: var(--color-accent-green);
box-shadow: var(--shadow-input-focus);
outline: none;
}
.form-label {
font-family: 'Outfit', sans-serif;
font-weight: 500;
color: var(--color-text-dark);
margin-bottom: var(--spacing-xs);
}
.form-check-label {
font-family: 'Outfit', sans-serif;
font-weight: 400;
color: var(--color-text-dark);
}
/* Input Groups */
.input-group .form-control {
border-radius: var(--radius-button);
}
/* ============================================
7. UPLOAD ZONE (if needed)
============================================ */
.upload-zone {
border: 2px dashed var(--color-border);
background-color: var(--color-upload-bg);
border-radius: var(--radius-card);
padding: var(--spacing-xl);
text-align: center;
transition: all 0.3s ease;
cursor: pointer;
}
.upload-zone:hover,
.upload-zone.active {
background-color: var(--color-upload-active);
border-color: var(--color-accent-green);
}
/* ============================================
8. TABLES
============================================ */
.table {
font-family: 'Outfit', sans-serif;
color: var(--color-text-dark);
}
.table thead {
background-color: var(--color-deep-green);
color: var(--color-surface);
font-weight: 600;
}
.table thead th {
border: none;
padding: var(--spacing-sm) var(--spacing-md);
}
.table tbody td {
padding: var(--spacing-sm) var(--spacing-md);
border-color: var(--color-border);
}
.table-bordered {
border: 1px solid var(--color-border);
border-radius: var(--radius-button);
overflow: hidden;
}
/* ============================================
9. TABS
============================================ */
.nav-tabs {
border-bottom: 2px solid var(--color-border);
}
.nav-tabs .nav-link {
font-family: 'Outfit', sans-serif;
font-weight: 500;
color: var(--color-text-muted);
border: none;
border-bottom: 3px solid transparent;
padding: var(--spacing-sm) var(--spacing-md);
transition: all 0.3s ease;
}
.nav-tabs .nav-link:hover {
color: var(--color-accent-green);
border-bottom-color: var(--color-accent-green);
}
.nav-tabs .nav-link.active {
color: var(--color-accent-green);
background-color: transparent;
border-bottom-color: var(--color-accent-green);
font-weight: 600;
}
/* ============================================
10. MODALS
============================================ */
.modal-content {
border-radius: var(--radius-card);
border: none;
box-shadow: var(--shadow-card);
}
.modal-header {
background-color: var(--color-deep-green);
color: var(--color-surface);
border-top-left-radius: var(--radius-card);
border-top-right-radius: var(--radius-card);
border-bottom: none;
padding: var(--spacing-lg);
}
.modal-header .modal-title {
color: var(--color-surface);
font-weight: 600;
}
.modal-header .btn-close {
filter: brightness(0) invert(1);
}
.modal-body {
padding: var(--spacing-lg);
font-family: 'Outfit', sans-serif;
}
/* ============================================
11. MAP CONTAINER
============================================ */
#map {
height: 70vh;
width: 100%;
border-radius: var(--radius-card);
box-shadow: var(--shadow-card);
border: 1px solid var(--color-border);
}
/* ============================================
12. LOADING OVERLAY
============================================ */
.loading-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(255, 255, 255, 0.9);
display: none;
justify-content: center;
align-items: center;
z-index: 9999;
}
.spinner {
width: 50px;
height: 50px;
border: 5px solid var(--color-border);
border-top: 5px solid var(--color-accent-green);
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
/* ============================================
13. UTILITIES
============================================ */
.text-muted {
color: var(--color-text-muted) !important;
font-weight: 300;
}
.bg-surface {
background-color: var(--color-surface);
}
.bg-deep-green {
background-color: var(--color-deep-green);
}
.text-accent {
color: var(--color-accent-green);
}
/* Spacing Utilities */
.mb-custom {
margin-bottom: var(--spacing-lg);
}
.p-custom {
padding: var(--spacing-lg);
}
/* ============================================
14. RESPONSIVE DESIGN
============================================ */
@media (max-width: 768px) {
h1 {
font-size: 2rem;
}
.hero-header {
padding: var(--spacing-lg) var(--spacing-sm);
}
.card {
padding: var(--spacing-lg);
}
.control-panel {
margin-bottom: var(--spacing-md);
}
#map {
height: 50vh;
}
}
@media (max-width: 576px) {
h1 {
font-size: 1.75rem;
}
.btn-primary-action,
.btn-secondary-pill {
width: 100%;
justify-content: center;
}
}
/* ============================================
15. CUSTOM SCROLLBAR
============================================ */
::-webkit-scrollbar {
width: 10px;
height: 10px;
}
::-webkit-scrollbar-track {
background: var(--color-background);
}
::-webkit-scrollbar-thumb {
background: var(--color-accent-green);
border-radius: 5px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--color-deep-green);
}