@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=Poppins:wght@300;400;600;700;800&display=swap'); :root { /* Dark Green Theme Colors */ --primary-green: #22c55e; --dark-green: #14532d; --darker-green: #052e16; --green-glow: rgba(34, 197, 94, 0.3); --deep-green: #0d2818; --emerald-green: #10b981; --forest-green: #166534; --lime-green: #65a30d; /* Neutral Colors */ --primary-color: #ffffff; --secondary-color: #d1fae5; --text-light: rgba(255, 255, 255, 0.9); --text-muted: rgba(255, 255, 255, 0.6); /* Glassmorphism */ --glass-bg: rgba(255, 255, 255, 0.1); --glass-bg-strong: rgba(255, 255, 255, 0.15); --glass-border: rgba(255, 255, 255, 0.2); --glass-border-hover: rgba(34, 197, 94, 0.4); --glass-shadow: rgba(0, 0, 0, 0.5); --hover-bg: rgba(255, 255, 255, 0.2); /* Layout */ --font-family: 'Inter', 'Poppins', sans-serif; --sidebar-width: 280px; --sidebar-width-collapsed: 85px; --content-padding: 2.5rem; --border-radius: 20px; --border-radius-sm: 12px; } * { box-sizing: border-box; } body, html { height: 100%; margin: 0; padding: 0; font-family: var(--font-family); color: var(--primary-color); overflow: hidden; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* Plant Leaves Background */ .background-animation { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; background-image: linear-gradient(135deg, rgba(5, 46, 22, 0.8) 0%, rgba(13, 40, 24, 0.7) 100%), url('../images/green-leaves-3840x2160-23231.jpg'); background-size: cover; background-position: center center; background-repeat: no-repeat; background-attachment: fixed; animation: subtleMove 60s ease-in-out infinite; } .background-animation::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-image: repeating-linear-gradient(45deg, transparent, transparent 2px, rgba(34, 197, 94, 0.02) 2px, rgba(34, 197, 94, 0.02) 4px), repeating-linear-gradient(-45deg, transparent, transparent 2px, rgba(16, 185, 129, 0.02) 2px, rgba(16, 185, 129, 0.02) 4px); pointer-events: none; opacity: 0.5; } .background-animation::after { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(circle at 20% 50%, rgba(34, 197, 94, 0.05) 0%, transparent 50%), radial-gradient(circle at 80% 80%, rgba(16, 185, 129, 0.05) 0%, transparent 50%), radial-gradient(ellipse at 50% 0%, rgba(5, 46, 22, 0.3) 0%, transparent 70%); pointer-events: none; } /* If user adds plant-leaves-bg.jpg, uncomment this and comment above */ /* .background-animation { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; background-image: linear-gradient(135deg, rgba(5, 46, 22, 0.85) 0%, rgba(20, 83, 45, 0.75) 50%, rgba(13, 40, 24, 0.85) 100%), url('../images/plant-leaves-bg.jpg'); background-color: rgba(5, 46, 22, 0.95); background-size: cover; background-position: center center; background-repeat: no-repeat; background-attachment: fixed; filter: brightness(0.35) saturate(1.3) contrast(1.1); animation: subtleMove 60s ease-in-out infinite; } */ @keyframes subtleMove { 0%, 100% { background-position: center center, 0 0; } 50% { background-position: center 2%, 20px 20px; } } /* Main Container */ .main-container { display: flex; height: 100vh; width: 100vw; position: relative; z-index: 1; } #content { width: calc(100% - var(--sidebar-width)); padding: var(--content-padding); transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); overflow-y: auto; overflow-x: hidden; height: 100vh; position: relative; } #content.full-width { width: calc(100% - var(--sidebar-width-collapsed)); } /* Enhanced Glassmorphism */ .glass-card, .sidebar-nav, .upload-area-glass, .chat-box-glass, .chat-input-glass { background: var(--glass-bg); backdrop-filter: blur(25px) saturate(180%); -webkit-backdrop-filter: blur(25px) saturate(180%); border: 1.5px solid var(--glass-border); border-radius: var(--border-radius); box-shadow: 0 8px 32px var(--glass-shadow), 0 2px 8px rgba(0, 0, 0, 0.3), inset 0 1px 1px rgba(255, 255, 255, 0.1); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .glass-card:hover, .upload-area-glass:hover { border-color: var(--glass-border-hover); box-shadow: 0 12px 48px var(--glass-shadow), 0 4px 16px rgba(34, 197, 94, 0.2), inset 0 1px 1px rgba(255, 255, 255, 0.15); transform: translateY(-2px); } .card-header-glass { background: rgba(255, 255, 255, 0.05); border-bottom: 1.5px solid var(--glass-border); padding: 1.25rem 2rem; border-top-left-radius: var(--border-radius); border-top-right-radius: var(--border-radius); font-weight: 600; color: var(--primary-color); font-size: 1.1rem; letter-spacing: 0.5px; } .card-body-glass { padding: 2rem; } /* Sidebar - Enhanced */ .sidebar-nav { min-width: var(--sidebar-width); max-width: var(--sidebar-width); transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); display: flex; flex-direction: column; overflow-y: auto; overflow-x: hidden; max-height: 100vh; background: rgba(0, 0, 0, 0.3); backdrop-filter: blur(25px) saturate(180%); -webkit-backdrop-filter: blur(25px) saturate(180%); border-right: 2px solid var(--glass-border); box-shadow: 4px 0 24px rgba(0, 0, 0, 0.4); } .sidebar-nav .sidebar-header { padding: 2rem 1.5rem; text-align: center; border-bottom: 2px solid var(--glass-border); background: linear-gradient(135deg, rgba(34, 197, 94, 0.1) 0%, transparent 100%); } .sidebar-nav .sidebar-header h3 { color: var(--primary-green); font-weight: 700; font-size: 1.75rem; margin: 0; text-shadow: 0 0 20px var(--green-glow); letter-spacing: 1px; } .sidebar-nav .sidebar-header h3 i { color: var(--emerald-green); margin-right: 0.5rem; } .sidebar-nav ul.components { padding: 1.5rem 0; flex-grow: 1; margin: 0; list-style: none; } .sidebar-nav ul li { margin: 0.5rem 0; padding: 0 0.5rem; } .sidebar-nav ul li a { padding: 1rem 1.25rem; font-size: 1rem; font-weight: 500; display: flex; align-items: center; color: var(--text-light); text-decoration: none; border-left: 3px solid transparent; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); /* margin: 0 1rem; -- removed */ border-radius: var(--border-radius-sm); position: relative; overflow: hidden; min-width: 0; white-space: nowrap; } .sidebar-nav ul li a::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(34, 197, 94, 0.2), transparent); transition: left 0.5s; } .sidebar-nav ul li a:hover::before { left: 100%; } .sidebar-nav ul li a span { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; flex-grow: 1; /* Allow the span to take available space */ } .sidebar-nav ul li a i { margin-right: 1rem; width: 24px; text-align: center; font-size: 1.2rem; color: var(--emerald-green); transition: all 0.3s; } .sidebar-nav ul li a:hover { color: var(--primary-color); background: var(--hover-bg); border-left-color: var(--primary-green); transform: translateX(5px); box-shadow: 0 4px 12px rgba(34, 197, 94, 0.2); } .sidebar-nav ul li.active > a { color: var(--primary-color); background: linear-gradient(90deg, rgba(34, 197, 94, 0.2), rgba(34, 197, 94, 0.1)); border-left-color: var(--primary-green); box-shadow: inset 0 0 20px rgba(34, 197, 94, 0.15), 0 4px 12px rgba(34, 197, 94, 0.25); font-weight: 600; } .sidebar-nav ul li.active > a i { color: var(--primary-green); text-shadow: 0 0 10px var(--green-glow); } .sidebar-toggler { padding: 1.5rem; text-align: center; border-top: 2px solid var(--glass-border); background: rgba(5, 46, 22, 0.3); } .btn-glass { background: var(--glass-bg); border: 1.5px solid var(--glass-border); color: var(--text-light); border-radius: var(--border-radius-sm); padding: 0.75rem 1.5rem; font-weight: 500; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); cursor: pointer; } .btn-glass:hover { background: var(--hover-bg); color: var(--primary-color); border-color: var(--primary-green); box-shadow: 0 4px 16px rgba(34, 197, 94, 0.3); transform: translateY(-2px); } /* Collapsed Sidebar */ #sidebar.collapsed { min-width: var(--sidebar-width-collapsed); max-width: var(--sidebar-width-collapsed); } #sidebar.collapsed .sidebar-header h3, #sidebar.collapsed ul li a span { display: none; } #sidebar.collapsed ul li a i { margin-right: 0; font-size: 1.5rem; } #sidebar.collapsed ul li a { justify-content: center; padding: 1rem; margin: 0.5rem; } #sidebar.collapsed .sidebar-toggler i { transform: rotate(180deg); } /* Content Tabs */ .content-tab { display: none !important; opacity: 0; transform: translateY(20px); transition: opacity 0.5s ease-out, transform 0.5s ease-out; } .content-tab.active-tab { display: block !important; opacity: 1; transform: translateY(0); } .tab-title { color: var(--primary-color); font-weight: 700; font-size: 2.25rem; margin-bottom: 2rem; text-shadow: 0 2px 10px rgba(0, 0, 0, 0.3); letter-spacing: -0.5px; } /* Upload Area */ .upload-area-glass { height: 400px; border: 3px dashed var(--glass-border); display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; cursor: pointer; transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); background: linear-gradient(135deg, rgba(34, 197, 94, 0.05) 0%, rgba(5, 46, 22, 0.1) 100%); } .upload-area-glass.drag-over { background: linear-gradient(135deg, rgba(34, 197, 94, 0.15) 0%, rgba(34, 197, 94, 0.05) 100%); border-color: #8A9A5B; box-shadow: 0 0 40px rgba(34, 197, 94, 0.4); transform: scale(1.02); } .upload-area-glass .upload-icon { display: flex; justify-content: center; align-items: center; } .upload-area-glass .upload-icon i { font-size: 5rem; color: #8A9A5B; /* margin-bottom: 1.5rem; -- removed */ filter: drop-shadow(0 0 10px rgba(138, 154, 91, 0.4)); } .upload-area-glass p { color: var(--text-light); font-size: 1.1rem; margin: 0.5rem 0; } .upload-area-glass form { height: 100%; width: 100%; display: flex; /* Make the form a flex container too */ flex-direction: column; justify-content: center; align-items: center; } .upload-area-glass .text-muted { color: var(--text-muted); } /* Image Preview */ #image-preview { max-height: 500px; width: 100%; object-fit: cover; border-radius: var(--border-radius-sm); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3); } /* Diagnosis Results */ #disease-name { font-weight: 700; color: var(--primary-green); font-size: 1.75rem; margin-bottom: 1rem; text-shadow: 0 0 15px var(--green-glow); } #health-status { color: var(--text-light); font-size: 1.1rem; line-height: 1.6; } #detailed-symptoms ul, #prevention-methods ul { padding-left: 1.5rem; color: var(--text-light); } #detailed-symptoms li, #prevention-methods li { margin-bottom: 0.75rem; line-height: 1.6; } /* Chat Tab */ .chat-container { display: flex; flex-direction: column; padding-left: 1.5rem; height: 100%; width: 100%; /* Ensure it takes full width */ } .chat-box-glass { flex-grow: 1; padding: 2rem; overflow-y: auto; margin-bottom: 1.5rem; min-height: 400px; max-height: calc(100vh - 250px); } .chat-message { padding: 1rem 1.5rem; border-radius: var(--border-radius-sm); margin-bottom: 1rem; max-width: 75%; line-height: 1.7; font-size: 0.95rem; animation: fadeIn 0.3s ease-out; /* Changed to fadeIn */ background: var(--glass-bg); /* Neutral glassmorphism background */ backdrop-filter: blur(15px); -webkit-backdrop-filter: blur(15px); border: 1px solid var(--glass-border); /* Neutral glassmorphism border */ box-shadow: 0 4px 12px var(--glass-shadow); /* Consistent shadow */ } @keyframes fadeIn { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: translateY(0); } } .chat-message.user { color: white; margin-left: auto; margin-right: 0; /* Ensure right alignment */ border-bottom-right-radius: 4px; border-top-right-radius: var(--border-radius-sm); /* Adjust for consistent corner */ background: var(--glass-bg-strong); /* Slightly stronger glass for user */ border-color: rgba(34, 197, 94, 0.4); /* Greenish border for user */ box-shadow: 0 4px 12px rgba(34, 197, 94, 0.4); /* Greenish shadow for user */ } .chat-message.bot { color: var(--text-light); margin-right: auto; margin-left: 0; /* Ensure left alignment */ border-bottom-left-radius: 4px; border-top-left-radius: var(--border-radius-sm); /* Adjust for consistent corner */ background: var(--glass-bg); /* Revert to base glass-bg */ border-color: var(--glass-border); /* Revert to base glass-border */ white-space: pre-wrap; /* Preserve formatting */ animation: none; /* Remove bot-pulse animation */ } /* Remove bot-pulse keyframes as it's no longer used */ /* Thinking Dots Animation */ @keyframes fadeInOut { 0%, 100% { opacity: 0.3; } 50% { opacity: 1; } } .thinking-dots .dot { opacity: 0.3; animation: fadeInOut 1.4s infinite; display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: var(--text-light); margin: 0 1px; } .thinking-dots .dot:nth-child(1) { animation-delay: 0s; } .thinking-dots .dot:nth-child(2) { animation-delay: 0.2s; } .thinking-dots .dot:nth-child(3) { animation-delay: 0.4s; } .chat-message.bot { color: var(--text-light); margin-right: auto; margin-left: 0; /* Ensure left alignment */ border-bottom-left-radius: 4px; border-top-left-radius: var(--border-radius-sm); /* Adjust for consistent corner */ background: var(--glass-bg); /* Revert to base glass-bg */ border-color: var(--glass-border); /* Revert to base glass-border */ white-space: pre-wrap; /* Preserve formatting */ animation: none; /* Remove bot-pulse animation */ /* New styles for bot message bubbles */ padding: 12px; border-radius: 15px; } .bot-message { white-space: pre-wrap; /* Existing bot-message styles */ } /* Markdown styling within bot messages */ .bot-message h1, .bot-message h2, .bot-message h3, .bot-message h4, .bot-message h5, .bot-message h6 { color: var(--primary-green); margin-top: 1.5em; margin-bottom: 0.5em; font-weight: 700; line-height: 1.2; } .bot-message h3 { font-size: 1.1em; margin-top: 10px; } .bot-message ul { padding-left: 20px; margin-bottom: 1em; } .bot-message ol { padding-left: 20px; margin-bottom: 1em; } .bot-message li { margin-bottom: 0.5em; line-height: 1.6; } .bot-message p { margin-bottom: 8px; line-height: 1.6; } .bot-message a { color: var(--emerald-green); text-decoration: underline; } .bot-message strong { font-weight: 700; color: var(--primary-color); } .bot-message em { font-style: italic; } .bot-message code { background-color: rgba(34, 197, 94, 0.1); color: var(--emerald-green); padding: 0.2em 0.4em; border-radius: 4px; font-family: 'Fira Code', 'Roboto Mono', monospace; font-size: 0.85em; } .bot-message pre { background-color: rgba(0, 0, 0, 0.3); border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 8px; padding: 1em; overflow-x: auto; font-family: 'Fira Code', 'Roboto Mono', monospace; font-size: 0.85em; margin-bottom: 1em; } .bot-message blockquote { border-left: 4px solid var(--primary-green); padding-left: 1em; margin-left: 0; color: var(--text-muted); font-style: italic; } .bot-message hr { border: none; border-top: 1px solid rgba(255, 255, 255, 0.1); margin: 1.5em 0; } /* --- Model Showcase --- */ .showcase-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1.5rem; padding: 1rem 0; } .showcase-btn { background: var(--glass-bg); border: 1.5px solid var(--glass-border); border-radius: var(--border-radius-sm); padding: 1.5rem; color: var(--text-light); font-weight: 600; text-align: center; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; will-change: transform, box-shadow; } .showcase-btn::before { content: ''; position: absolute; top: 50%; left: 50%; width: 0; height: 0; background: var(--green-glow); border-radius: 50%; transform: translate(-50%, -50%); transition: width 0.4s, height 0.4s; opacity: 0; z-index: 0; } .showcase-btn:hover::before, .showcase-btn:focus::before { width: 200%; height: 200%; opacity: 1; } .showcase-btn:hover { transform: translateY(-5px) scale(1.03); border-color: var(--primary-green); color: var(--primary-color); box-shadow: 0 8px 30px rgba(34, 197, 94, 0.3); } .showcase-btn-title { position: relative; z-index: 1; font-size: 1rem; pointer-events: none; /* So it doesn't interfere with the button click */ } /* Showcase Overlay & Card */ .showcase-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 1050; display: flex; justify-content: center; align-items: center; background-color: rgba(0, 0, 0, 0.3); backdrop-filter: blur(0px); -webkit-backdrop-filter: blur(0px); opacity: 0; transition: opacity 0.5s cubic-bezier(0.4, 0, 0.2, 1), backdrop-filter 0.5s cubic-bezier(0.4, 0, 0.2, 1); -webkit-transition: opacity 0.5s cubic-bezier(0.4, 0, 0.2, 1), -webkit-backdrop-filter 0.5s cubic-bezier(0.4, 0, 0.2, 1); } .showcase-overlay.visible { opacity: 1; backdrop-filter: blur(15px); -webkit-backdrop-filter: blur(15px); } .showcase-card { position: fixed; background: rgba(20, 28, 46, 0.95); /* Slightly darker for better text read */ backdrop-filter: blur(40px) saturate(180%); -webkit-backdrop-filter: blur(40px) saturate(180%); border: 1.5px solid var(--glass-border); border-radius: var(--border-radius); box-shadow: 0 16px 70px rgba(0, 0, 0, 0.5); z-index: 1051; overflow: hidden; opacity: 0; will-change: transform, width, height, top, left, opacity; transition: all 0.6s cubic-bezier(0.45, 0, 0.1, 1); /* --- KEY CHANGES FOR LANDSCAPE WIDTH --- */ width: 850px; /* 300px was too small. 850px is wide/landscape. */ max-width: 95vw; /* Ensures it fits on smaller screens if needed */ min-height: 350px; /* Centering logic (optional, ensures it stays center) */ top: 50%; left: 50%; transform: translate(-50%, -50%); display: flex; flex-direction: column; } .showcase-card.expanding { opacity: 1; } .showcase-card.expanded { width: 850px !important; /* Explicitly set fixed width */ height: 700px; /* Explicitly set fixed height */ max-width: 90vw; /* Responsive constraint */ max-height: 90vh; /* Responsive constraint */ top: 50% !important; left: 50% !important; transform: translate(-50%, -50%) !important; margin: 0 !important; /* Remove external offsets */ opacity: 1; } .showcase-content { padding: 3rem; /* Increased padding */ height: 100%; overflow-y: auto; /* Added for scrollability */ opacity: 0; transform: translateY(20px); transition: opacity 0.4s 0.3s ease-out, transform 0.4s 0.3s ease-out; } /* Custom scrollbar for showcase-content */ .showcase-content::-webkit-scrollbar { width: 8px; } .showcase-content::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.05); border-radius: 10px; } .showcase-content::-webkit-scrollbar-thumb { background-color: var(--primary-green); border-radius: 10px; border: 2px solid rgba(255, 255, 255, 0.1); } .showcase-content::-webkit-scrollbar-thumb:hover { background-color: var(--emerald-green); } .showcase-card.expanded .showcase-content { opacity: 1; transform: translateY(0); } .btn-close-glass { position: absolute; top: 20px; right: 20px; width: 40px; height: 40px; background: rgba(255, 255, 255, 0.1); border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 50%; color: white; font-size: 24px; line-height: 38px; text-align: center; cursor: pointer; transition: all 0.3s; z-index: 10; opacity: 0; transform: scale(0.5); transition: opacity 0.3s 0.5s, transform 0.3s 0.5s; } .showcase-card.expanded .btn-close-glass { opacity: 1; transform: scale(1); } .btn-close-glass:hover { background: rgba(255, 0, 0, 0.3); transform: scale(1.1) rotate(90deg); } /* Showcase Content Typography */ .showcase-content h2 { color: var(--primary-green); font-weight: 700; margin-bottom: 0.5rem; text-shadow: 0 0 10px var(--green-glow); font-size: 1.8rem; /* Reset font size for title */ } .showcase-content p, .showcase-content ul li { white-space: normal; /* Ensure text wraps naturally */ }