/*
 * Remote Sensing & GIS Blog - Main Stylesheet
 * Premium, Modern, Production-Ready
 */

/* ==========================================================================
   1. CSS Variables & Theme Definitions
   ========================================================================== */
:root {
  /* Color Palette - Earth Observation / Satellite / GIS inspired */
  --color-primary: #1B4965; /* Deep ocean blue */
  --color-primary-light: #2A6F97; /* Water blue */
  --color-secondary: #62B6CB; /* Satellite cyan */
  --color-accent: #BEE9E8; /* Atmosphere teal */
  --color-warm: #CAE9FF; /* Sky blue */
  
  --color-dark: #0B2545; /* Deep space */
  --color-darker: #061427; /* Midnight */
  --color-surface: #F7F9FC; /* Cloud white */
  --color-surface-alt: #EEF2F7;
  
  --color-text: #1A1A2E;
  --color-text-secondary: #4A4A6A;
  --color-text-muted: #8892A4;
  --color-border: #E2E8F0;
  
  /* Status Colors */
  --color-success: #10B981;
  --color-warning: #F59E0B;
  --color-error: #EF4444;

  /* Typography */
  --font-heading: 'Space Grotesk', system-ui, -apple-system, sans-serif;
  --font-body: 'Inter', system-ui, -apple-system, sans-serif;
  
  /* Fluid Font Sizes using clamp() */
  --text-xs: clamp(0.75rem, 0.71rem + 0.18vw, 0.85rem);
  --text-sm: clamp(0.875rem, 0.84rem + 0.18vw, 0.95rem);
  --text-base: clamp(1rem, 0.96rem + 0.18vw, 1.1rem);
  --text-lg: clamp(1.125rem, 1.05rem + 0.36vw, 1.3rem);
  --text-xl: clamp(1.25rem, 1.11rem + 0.73vw, 1.6rem);
  --text-2xl: clamp(1.5rem, 1.29rem + 1.09vw, 2rem);
  --text-3xl: clamp(1.875rem, 1.5rem + 1.8vw, 2.5rem);
  --text-4xl: clamp(2.25rem, 1.74rem + 2.5vw, 3.5rem);
  --text-5xl: clamp(3rem, 2.2rem + 4vw, 5rem);

  /* Spacing Grid (8px base) */
  --space-1: 0.5rem;   /* 8px */
  --space-2: 1rem;     /* 16px */
  --space-3: 1.5rem;   /* 24px */
  --space-4: 2rem;     /* 32px */
  --space-5: 2.5rem;   /* 40px */
  --space-6: 3rem;     /* 48px */
  --space-8: 4rem;     /* 64px */
  --space-10: 5rem;    /* 80px */
  --space-12: 6rem;    /* 96px */
  --space-16: 8rem;    /* 128px */

  /* Shadows */
  --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
  --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
  --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
  --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
  --shadow-hover: 0 20px 25px -5px rgba(0, 0, 0, 0.15), 0 10px 10px -5px rgba(0, 0, 0, 0.08);

  /* Transitions */
  --transition-fast: 0.15s ease;
  --transition-base: 0.3s ease;
  --transition-slow: 0.5s ease;
  
  /* Border Radius */
  --radius-sm: 0.25rem;
  --radius-md: 0.5rem;
  --radius-lg: 1rem;
  --radius-xl: 1.5rem;
  --radius-pill: 9999px;
  
  /* Layout */
  --container-max: 1200px;
  --container-padding: var(--space-2);
}

/* Dark Mode Variables */
body.dark-mode {
  --color-primary: #CAE9FF;
  --color-primary-light: #BEE9E8;
  --color-secondary: #62B6CB;
  --color-accent: #2A6F97;
  --color-warm: #1B4965;
  
  --color-surface: #061427;
  --color-surface-alt: #0B2545;
  
  --color-text: #F7F9FC;
  --color-text-secondary: #E2E8F0;
  --color-text-muted: #8892A4;
  --color-border: #1A1A2E;
  
  --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.5);
  --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.6), 0 2px 4px -1px rgba(0, 0, 0, 0.4);
  --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.6), 0 4px 6px -2px rgba(0, 0, 0, 0.4);
  --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.6), 0 10px 10px -5px rgba(0, 0, 0, 0.4);
  --shadow-hover: 0 20px 25px -5px rgba(0, 0, 0, 0.8), 0 10px 10px -5px rgba(0, 0, 0, 0.6);
}

/* ==========================================================================
   2. Reset & Base Styles
   ========================================================================== */
*, *::before, *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  font-size: 16px;
  scroll-behavior: smooth;
  scroll-padding-top: var(--space-12);
}

body {
  font-family: var(--font-body);
  color: var(--color-text);
  background-color: var(--color-surface);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  transition: background-color var(--transition-base), color var(--transition-base);
}

::selection {
  background-color: var(--color-primary-light);
  color: white;
}

body.dark-mode ::selection {
  background-color: var(--color-secondary);
  color: var(--color-darker);
}

h1, h2, h3, h4, h5, h6 {
  font-family: var(--font-heading);
  line-height: 1.2;
  color: var(--color-text);
  margin-bottom: var(--space-2);
  font-weight: 700;
}

p {
  margin-bottom: var(--space-2);
}

a {
  color: var(--color-primary);
  text-decoration: none;
  transition: color var(--transition-fast);
}

a:hover {
  color: var(--color-primary-light);
}

img {
  max-width: 100%;
  height: auto;
  display: block;
}

ul, ol {
  list-style: none;
}

button, input, select, textarea {
  font-family: inherit;
  font-size: inherit;
}

button {
  cursor: pointer;
  background: none;
  border: none;
}

/* ==========================================================================
   3. Utilities & Layout
   ========================================================================== */
.container {
  width: 100%;
  max-width: var(--container-max);
  margin-inline: auto;
  padding-inline: var(--container-padding);
}

.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.text-gradient {
  background: linear-gradient(135deg, var(--color-primary), var(--color-secondary));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  color: transparent;
}

body.dark-mode .text-gradient {
  background: linear-gradient(135deg, var(--color-secondary), var(--color-accent));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
}

/* Shadows */
.shadow-sm { box-shadow: var(--shadow-sm); }
.shadow-md { box-shadow: var(--shadow-md); }
.shadow-lg { box-shadow: var(--shadow-lg); }

/* Spacing Helpers */
.mt-1 { margin-top: var(--space-1); } .mb-1 { margin-bottom: var(--space-1); }
.mt-2 { margin-top: var(--space-2); } .mb-2 { margin-bottom: var(--space-2); }
.mt-3 { margin-top: var(--space-3); } .mb-3 { margin-bottom: var(--space-3); }
.mt-4 { margin-top: var(--space-4); } .mb-4 { margin-bottom: var(--space-4); }
.mt-6 { margin-top: var(--space-6); } .mb-6 { margin-bottom: var(--space-6); }
.mt-8 { margin-top: var(--space-8); } .mb-8 { margin-bottom: var(--space-8); }
.py-4 { padding-block: var(--space-4); }
.py-8 { padding-block: var(--space-8); }
.py-12 { padding-block: var(--space-12); }

/* Grid/Flex */
.flex { display: flex; }
.flex-col { flex-direction: column; }
.items-center { align-items: center; }
.justify-between { justify-content: space-between; }
.justify-center { justify-content: center; }
.gap-2 { gap: var(--space-2); }
.gap-4 { gap: var(--space-4); }
.gap-6 { gap: var(--space-6); }

.grid { display: grid; }
.grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
.grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }

@media (min-width: 576px) { /* sm */ }
@media (min-width: 768px) { /* md */
  .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (min-width: 992px) { /* lg */
  .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (min-width: 1200px) { /* xl */
  .xl\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

/* ==========================================================================
   4. Animations
   ========================================================================== */
@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes slideIn {
  from { opacity: 0; transform: translateX(-20px); }
  to { opacity: 1; transform: translateX(0); }
}

@keyframes pulse {
  0% { transform: scale(1); }
  50% { transform: scale(1.05); }
  100% { transform: scale(1); }
}

@keyframes float {
  0% { transform: translateY(0); }
  50% { transform: translateY(-10px); }
  100% { transform: translateY(0); }
}

@keyframes shimmer {
  0% { background-position: -1000px 0; }
  100% { background-position: 1000px 0; }
}

.animate-on-scroll {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 0.6s ease-out, transform 0.6s ease-out;
}
.animate-on-scroll.is-visible {
  opacity: 1;
  transform: translateY(0);
}

/* ==========================================================================
   5. Components
   ========================================================================== */

/* Skip Link */
.skip-link {
  position: absolute;
  top: -40px;
  left: 0;
  background: var(--color-primary);
  color: white;
  padding: 8px;
  z-index: 9999;
  transition: top var(--transition-fast);
}
.skip-link:focus {
  top: 0;
}

/* Navbar */
.navbar {
  position: sticky;
  top: 0;
  width: 100%;
  z-index: 1000;
  background: rgba(247, 249, 252, 0.85);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--color-border);
  transition: background var(--transition-base), border var(--transition-base);
}

body.dark-mode .navbar {
  background: rgba(6, 20, 39, 0.85);
}

.nav-container {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 70px;
}

.nav-logo {
  font-family: var(--font-heading);
  font-size: var(--text-xl);
  font-weight: 700;
  color: var(--color-primary);
  display: flex;
  align-items: center;
  gap: var(--space-1);
}

body.dark-mode .nav-logo {
  color: var(--color-warm);
}

.nav-menu-toggle {
  display: none;
}

.nav-hamburger {
  display: none;
  cursor: pointer;
  flex-direction: column;
  gap: 5px;
  padding: 10px;
}

.nav-hamburger span {
  display: block;
  width: 25px;
  height: 2px;
  background: var(--color-text);
  transition: var(--transition-base);
}

.nav-links {
  display: flex;
  gap: var(--space-4);
  align-items: center;
}

.nav-links a {
  color: var(--color-text);
  font-weight: 500;
  position: relative;
}

.nav-links a::after {
  content: '';
  position: absolute;
  bottom: -4px;
  left: 0;
  width: 0;
  height: 2px;
  background: var(--color-primary);
  transition: width var(--transition-base);
}

body.dark-mode .nav-links a::after {
  background: var(--color-secondary);
}

.nav-links a:hover::after {
  width: 100%;
}

.nav-actions {
  display: flex;
  gap: var(--space-2);
  align-items: center;
}

@media (max-width: 768px) {
  .nav-hamburger {
    display: flex;
  }
  .nav-links {
    position: absolute;
    top: 70px;
    left: 0;
    width: 100%;
    background: var(--color-surface);
    flex-direction: column;
    padding: var(--space-4);
    box-shadow: var(--shadow-md);
    transform: translateY(-150%);
    transition: transform var(--transition-base);
    opacity: 0;
  }
  
  body.dark-mode .nav-links {
    background: var(--color-darker);
  }

  .nav-menu-toggle:checked ~ .nav-links {
    transform: translateY(0);
    opacity: 1;
  }
  
  .nav-menu-toggle:checked ~ .nav-hamburger span:nth-child(1) {
    transform: translateY(7px) rotate(45deg);
  }
  .nav-menu-toggle:checked ~ .nav-hamburger span:nth-child(2) {
    opacity: 0;
  }
  .nav-menu-toggle:checked ~ .nav-hamburger span:nth-child(3) {
    transform: translateY(-7px) rotate(-45deg);
  }
}

/* Dark Mode Toggle */
.dark-mode-toggle {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--color-surface-alt);
  color: var(--color-text);
  transition: var(--transition-base);
}

.dark-mode-toggle:hover {
  background: var(--color-border);
}

/* Buttons */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0.75rem 1.5rem;
  border-radius: var(--radius-pill);
  font-weight: 600;
  transition: all var(--transition-base);
  gap: var(--space-1);
}

.btn-primary {
  background: linear-gradient(135deg, var(--color-primary), var(--color-primary-light));
  color: white;
  box-shadow: var(--shadow-md);
}

.btn-primary:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-hover);
  color: white;
}

.btn-secondary {
  background: transparent;
  border: 2px solid var(--color-primary);
  color: var(--color-primary);
}

body.dark-mode .btn-secondary {
  border-color: var(--color-secondary);
  color: var(--color-secondary);
}

.btn-secondary:hover {
  background: var(--color-primary);
  color: white;
}

body.dark-mode .btn-secondary:hover {
  background: var(--color-secondary);
  color: var(--color-darker);
}

.btn-ghost {
  color: var(--color-text-secondary);
}

.btn-ghost:hover {
  background: var(--color-surface-alt);
  color: var(--color-text);
}

/* Hero Section */
.hero {
  position: relative;
  padding: var(--space-12) 0;
  background: var(--color-darker);
  overflow: hidden;
  color: white;
  text-align: center;
}

.hero::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0; bottom: 0;
  background-image: radial-gradient(var(--color-primary-light) 1px, transparent 1px);
  background-size: 30px 30px;
  opacity: 0.15;
  animation: float 20s infinite linear;
}

.hero-content {
  position: relative;
  z-index: 1;
  max-width: 800px;
  margin: 0 auto;
}

.hero h1 {
  font-size: var(--text-5xl);
  color: white;
  margin-bottom: var(--space-3);
  animation: fadeInUp 0.8s ease;
}

.hero p {
  font-size: var(--text-xl);
  color: var(--color-warm);
  margin-bottom: var(--space-4);
  animation: fadeInUp 1s ease;
}

.hero .btn-group {
  display: flex;
  gap: var(--space-2);
  justify-content: center;
  animation: fadeInUp 1.2s ease;
}

/* Cards */
.card {
  background: var(--color-surface);
  border-radius: var(--radius-lg);
  overflow: hidden;
  border: 1px solid var(--color-border);
  transition: transform var(--transition-base), box-shadow var(--transition-base);
  display: flex;
  flex-direction: column;
  height: 100%;
}

body.dark-mode .card {
  background: var(--color-surface-alt);
}

.card:hover {
  transform: translateY(-8px);
  box-shadow: var(--shadow-hover);
}

.card-img-wrapper {
  position: relative;
  aspect-ratio: 16 / 9;
  overflow: hidden;
}

.card-img-wrapper img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--transition-slow);
}

.card:hover .card-img-wrapper img {
  transform: scale(1.05);
}

.card-content {
  padding: var(--space-3);
  flex-grow: 1;
  display: flex;
  flex-direction: column;
}

.card-title {
  font-size: var(--text-xl);
  margin-bottom: var(--space-1);
}

.card-title a {
  color: var(--color-text);
}

.card-title a:hover {
  color: var(--color-primary);
}

body.dark-mode .card-title a:hover {
  color: var(--color-secondary);
}

.card-excerpt {
  color: var(--color-text-secondary);
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
  margin-bottom: var(--space-3);
  flex-grow: 1;
}

.card-meta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  color: var(--color-text-muted);
  font-size: var(--text-sm);
  border-top: 1px solid var(--color-border);
  padding-top: var(--space-2);
}

/* Category Badges */
.badge {
  position: absolute;
  top: var(--space-2);
  left: var(--space-2);
  background: rgba(255, 255, 255, 0.9);
  color: var(--color-primary);
  padding: 4px 12px;
  border-radius: var(--radius-pill);
  font-size: var(--text-xs);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  z-index: 10;
  backdrop-filter: blur(4px);
}

body.dark-mode .badge {
  background: rgba(11, 37, 69, 0.9);
  color: var(--color-secondary);
}

/* Featured Article */
.featured-card {
  position: relative;
  border-radius: var(--radius-xl);
  overflow: hidden;
  min-height: 400px;
  display: flex;
  align-items: flex-end;
}

.featured-img {
  position: absolute;
  top: 0; left: 0; width: 100%; height: 100%;
  object-fit: cover;
  z-index: 0;
}

.featured-overlay {
  position: absolute;
  top: 0; left: 0; width: 100%; height: 100%;
  background: linear-gradient(to top, rgba(6, 20, 39, 0.9) 0%, rgba(6, 20, 39, 0) 100%);
  z-index: 1;
}

.featured-content {
  position: relative;
  z-index: 2;
  padding: var(--space-6);
  color: white;
  max-width: 800px;
}

.featured-title {
  font-size: var(--text-3xl);
  color: white;
  margin-bottom: var(--space-2);
}

/* Categories Grid */
.category-card {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-3);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  transition: all var(--transition-base);
}

body.dark-mode .category-card {
  background: var(--color-surface-alt);
}

.category-card:hover {
  border-color: var(--color-primary);
  transform: translateY(-3px);
  box-shadow: var(--shadow-sm);
}

.category-icon {
  width: 48px;
  height: 48px;
  border-radius: var(--radius-md);
  background: var(--color-surface-alt);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 24px;
  color: var(--color-primary);
}

/* Newsletter Section */
.newsletter {
  background: linear-gradient(135deg, var(--color-dark), var(--color-darker));
  color: white;
  padding: var(--space-8) var(--space-2);
  border-radius: var(--radius-xl);
  text-align: center;
  margin: var(--space-8) 0;
}

.newsletter h2 {
  color: white;
}

.newsletter-form {
  display: flex;
  max-width: 500px;
  margin: var(--space-4) auto 0;
  background: white;
  padding: 4px;
  border-radius: var(--radius-pill);
}

.newsletter-input {
  flex-grow: 1;
  border: none;
  padding: 0 var(--space-3);
  border-radius: var(--radius-pill);
  outline: none;
  color: var(--color-text);
}

/* Footer */
.footer {
  background: var(--color-darker);
  color: var(--color-text-muted);
  padding: var(--space-8) 0 var(--space-4);
  margin-top: var(--space-8);
}

.footer-grid {
  display: grid;
  gap: var(--space-6);
}

@media (min-width: 768px) {
  .footer-grid { grid-template-columns: 2fr 1fr 1fr; }
}

.footer h3 {
  color: white;
  font-size: var(--text-lg);
  margin-bottom: var(--space-3);
}

.footer a {
  color: var(--color-text-muted);
}

.footer a:hover {
  color: var(--color-warm);
}

.footer-social {
  display: flex;
  gap: var(--space-2);
  margin-top: var(--space-3);
}

.social-icon {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.1);
  display: flex;
  align-items: center;
  justify-content: center;
  color: white;
  transition: var(--transition-base);
}

.social-icon:hover {
  background: var(--color-primary);
}

.footer-bottom {
  margin-top: var(--space-8);
  padding-top: var(--space-4);
  border-top: 1px solid rgba(255, 255, 255, 0.1);
  text-align: center;
  font-size: var(--text-sm);
}

/* Breadcrumbs */
.breadcrumbs {
  display: flex;
  align-items: center;
  gap: var(--space-1);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  margin-bottom: var(--space-4);
}

.breadcrumbs a {
  color: var(--color-text-secondary);
}

.breadcrumbs a:hover {
  color: var(--color-primary);
}

.breadcrumbs-separator {
  color: var(--color-border);
}

/* Scroll Progress Bar */
.scroll-progress {
  position: fixed;
  top: 0;
  left: 0;
  height: 3px;
  background: linear-gradient(to right, var(--color-primary), var(--color-secondary));
  z-index: 1001;
  width: 0%;
  transition: width 0.1s ease-out;
}

/* Back to Top Button */
.back-to-top {
  position: fixed;
  bottom: var(--space-4);
  right: var(--space-4);
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: var(--color-primary);
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: var(--shadow-md);
  opacity: 0;
  visibility: hidden;
  transition: var(--transition-base);
  z-index: 99;
}

.back-to-top.visible {
  opacity: 1;
  visibility: visible;
}

.back-to-top:hover {
  background: var(--color-primary-light);
  transform: translateY(-3px);
}

/* Loading/Skeleton States */
.skeleton {
  background: #f6f7f8;
  background-image: linear-gradient(
    to right,
    #f6f7f8 0%,
    #edeef1 20%,
    #f6f7f8 40%,
    #f6f7f8 100%
  );
  background-repeat: no-repeat;
  background-size: 800px 100%;
  animation-duration: 1.5s;
  animation-fill-mode: forwards;
  animation-iteration-count: infinite;
  animation-name: shimmer;
  animation-timing-function: linear;
}

body.dark-mode .skeleton {
  background: #1A1A2E;
  background-image: linear-gradient(
    to right,
    #1A1A2E 0%,
    #2A2A4A 20%,
    #1A1A2E 40%,
    #1A1A2E 100%
  );
}

/* About Preview */
.about-preview {
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
  align-items: center;
}

@media (min-width: 992px) {
  .about-preview {
    flex-direction: row;
  }
}

.about-img-placeholder {
  width: 100%;
  max-width: 400px;
  aspect-ratio: 1;
  background: var(--color-surface-alt);
  border-radius: var(--radius-xl);
  border: 1px dashed var(--color-border);
}
