/* ========================================================== EuroSAT Land Classifier — Dark Space Theme ========================================================== */ /* ── Variables ─────────────────────────────────────────── */ :root { --bg: #020817; --surface: #0d1526; --card: #131f35; --card-hover: #192841; --border: #1e3050; --border-light: #2a4166; --primary: #6366f1; --primary-glow: rgba(99,102,241,0.25); --secondary: #8b5cf6; --accent: #06b6d4; --accent-dim: rgba(6,182,212,0.15); --text: #e2e8f0; --text-muted: #64748b; --text-dim: #94a3b8; --success: #10b981; --error: #ef4444; --warn: #f59e0b; --font: 'Inter', system-ui, -apple-system, sans-serif; --radius: 14px; --radius-sm: 8px; --radius-xs: 5px; --shadow: 0 8px 32px rgba(0,0,0,0.5); --shadow-sm: 0 2px 12px rgba(0,0,0,0.3); } /* ── Reset ─────────────────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { scroll-behavior: smooth; font-size: 16px; } body { background: var(--bg); color: var(--text); font-family: var(--font); min-height: 100vh; line-height: 1.6; overflow-x: hidden; } img, canvas { display: block; } button { font-family: var(--font); cursor: pointer; } /* ── Star field background ─────────────────────────────── */ body::before { content: ''; position: fixed; inset: 0; background-image: radial-gradient(1px 1px at 20% 30%, rgba(255,255,255,0.15) 0%, transparent 100%), radial-gradient(1px 1px at 80% 10%, rgba(255,255,255,0.1) 0%, transparent 100%), radial-gradient(1px 1px at 60% 70%, rgba(255,255,255,0.1) 0%, transparent 100%), radial-gradient(1px 1px at 40% 80%, rgba(255,255,255,0.08) 0%, transparent 100%), radial-gradient(2px 2px at 70% 45%, rgba(255,255,255,0.06) 0%, transparent 100%), radial-gradient(1px 1px at 15% 60%, rgba(255,255,255,0.07) 0%, transparent 100%), radial-gradient(1px 1px at 90% 85%, rgba(255,255,255,0.08) 0%, transparent 100%); pointer-events: none; z-index: 0; } /* ══════════════════════════════════════════════════════════ HERO HEADER ══════════════════════════════════════════════════════════ */ .hero-header { position: relative; z-index: 1; background: linear-gradient(160deg, #0d1526 0%, #1a1040 50%, #0d1526 100%); border-bottom: 1px solid var(--border); padding: 3.5rem 2rem 3rem; text-align: center; overflow: hidden; } .hero-header::before { content: ''; position: absolute; top: -60%; left: 50%; transform: translateX(-50%); width: 800px; height: 600px; background: radial-gradient(ellipse, rgba(99,102,241,0.12) 0%, rgba(139,92,246,0.06) 40%, transparent 70%); pointer-events: none; } .hero-header::after { content: ''; position: absolute; bottom: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent, rgba(99,102,241,0.5), rgba(139,92,246,0.5), transparent); } .header-content { position: relative; z-index: 1; } .satellite-icon { font-size: 4.5rem; display: inline-block; margin-bottom: 1rem; animation: satellite-float 4s ease-in-out infinite; filter: drop-shadow(0 0 20px rgba(99,102,241,0.4)); } @keyframes satellite-float { 0%, 100% { transform: translateY(0) rotate(-5deg); } 50% { transform: translateY(-12px) rotate(5deg); } } .hero-header h1 { font-size: clamp(1.8rem, 5vw, 3.2rem); font-weight: 800; letter-spacing: -0.03em; line-height: 1.1; margin-bottom: 0.75rem; background: linear-gradient(135deg, #a5b4fc 0%, #c084fc 45%, #67e8f9 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .hero-subtitle { color: var(--text-dim); font-size: 1.05rem; margin-bottom: 1.75rem; max-width: 560px; margin-left: auto; margin-right: auto; } .badge-row { display: flex; justify-content: center; gap: 0.6rem; flex-wrap: wrap; } .badge { background: rgba(99,102,241,0.12); border: 1px solid rgba(99,102,241,0.25); border-radius: 999px; padding: 0.3rem 0.9rem; font-size: 0.8rem; font-weight: 500; color: #a5b4fc; backdrop-filter: blur(4px); } .badge.green { background: rgba(16,185,129,0.1); border-color: rgba(16,185,129,0.25); color: #6ee7b7; } .badge.cyan { background: rgba(6,182,212,0.1); border-color: rgba(6,182,212,0.25); color: #67e8f9; } /* ══════════════════════════════════════════════════════════ MAIN LAYOUT ══════════════════════════════════════════════════════════ */ .main-content { position: relative; z-index: 1; max-width: 1400px; margin: 0 auto; padding: 2rem 1.5rem; } /* ══════════════════════════════════════════════════════════ TABS ══════════════════════════════════════════════════════════ */ .tab-nav { display: flex; gap: 0.4rem; margin-bottom: 1.75rem; background: var(--surface); border: 1px solid var(--border); border-radius: calc(var(--radius) + 2px); padding: 0.35rem; width: fit-content; } .tab-btn { background: transparent; border: none; color: var(--text-muted); font-size: 0.95rem; font-weight: 500; padding: 0.6rem 1.5rem; border-radius: var(--radius-sm); transition: all 0.2s ease; display: flex; align-items: center; gap: 0.4rem; } .tab-btn:hover { color: var(--text); background: var(--card); } .tab-btn.active { background: linear-gradient(135deg, var(--primary), var(--secondary)); color: #fff; box-shadow: 0 2px 16px rgba(99,102,241,0.4); } .tab-content { display: block; animation: fadeIn 0.25s ease; } .tab-content.hidden { display: none; } @keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } /* ══════════════════════════════════════════════════════════ PANELS / CARDS ══════════════════════════════════════════════════════════ */ .panel { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1.75rem; box-shadow: var(--shadow-sm); transition: border-color 0.2s; } .panel:hover { border-color: var(--border-light); } .panel h2 { font-size: 1.15rem; font-weight: 700; color: var(--text); margin-bottom: 0.4rem; display: flex; align-items: center; gap: 0.5rem; } .panel h3 { font-size: 0.78rem; font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 0.85rem; } .panel-desc { color: var(--text-dim); font-size: 0.88rem; margin-bottom: 1.25rem; line-height: 1.5; } /* ══════════════════════════════════════════════════════════ UPLOAD TAB — TWO COLUMN ══════════════════════════════════════════════════════════ */ .two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; align-items: start; } @media (max-width: 860px) { .two-col { grid-template-columns: 1fr; } } /* ── Dropzone (now a