overview / styles.css
Yacine Jernite
fix sticky nav auto minimize
4884b2f
/* ============================================
ML & Society Team Website - Custom Styles
============================================ */
/* ============================================
Base Styles & Layout
============================================ */
/* Prevent horizontal overflow */
html, body {
overflow-x: hidden;
width: 100%;
}
/* Smooth scrolling for the entire page */
html {
scroll-behavior: smooth;
}
/* Apply fonts to base elements */
body {
font-family: 'Source Sans Pro', sans-serif;
--header-height: 100px; /* Two-line navigation menu - desktop */
/* Typography scale - consistent font sizes */
--text-xs: 0.75rem; /* 12px */
--text-sm: 0.875rem; /* 14px */
--text-base: 1rem; /* 16px */
--text-lg: 1.125rem; /* 18px */
--text-xl: 1.25rem; /* 20px */
--text-2xl: 1.5rem; /* 24px */
--text-3xl: 1.875rem; /* 30px */
--text-4xl: 2.25rem; /* 36px */
/* Line heights for readability */
--leading-tight: 1.25;
--leading-normal: 1.5;
--leading-relaxed: 1.625;
--leading-loose: 1.75;
}
/* Ensure all major containers respect viewport width */
#main-layout, #main-content {
max-width: 100vw;
}
/* ============================================
Typography
============================================ */
h1, h2, h3, h4, h5, h6 {
font-family: 'Montserrat', sans-serif;
line-height: var(--leading-tight);
text-shadow: 0 1px 2px rgba(255, 255, 255, 0.8);
}
/* Body text readability */
p {
line-height: var(--leading-relaxed);
}
/* Improve readability of long-form content */
.prose p {
line-height: var(--leading-loose);
margin-bottom: 1em;
}
/* ============================================
Responsive Design - Mobile
============================================ */
/* Ensure minimum readable font size on mobile */
@media (max-width: 767px) {
body {
font-size: 14px; /* Minimum 14px on mobile */
}
/* Adjust heading sizes for mobile */
h1 {
font-size: var(--text-2xl);
}
h2 {
font-size: var(--text-xl);
}
h3 {
font-size: var(--text-lg);
}
}
/* Responsive header height */
@media (max-width: 1023px) {
body {
--header-height: 80px; /* Tablet */
}
}
@media (max-width: 767px) {
body {
--header-height: 70px; /* Mobile */
}
}
/* Mobile menu */
@media (max-width: 1023px) {
.mobile-menu-hidden {
display: none;
}
}
/* Mobile search sidebar - full screen on mobile */
@media (max-width: 767px) {
#search-sidebar {
width: 100vw !important;
right: 0;
}
#search-sidebar > div {
padding: 1rem;
}
/* Adjust search results height for mobile */
#search-results {
height: calc(100vh - 180px) !important;
}
}
/* ============================================
Navigation
============================================ */
/* Navigation overflow handling */
@media (min-width: 769px) {
.nav-line-scroll {
overflow-x: auto;
overflow-y: hidden;
white-space: nowrap;
}
.nav-line-scroll::-webkit-scrollbar {
height: 4px;
}
.nav-line-scroll::-webkit-scrollbar-track {
background: #f1f1f1;
}
.nav-line-scroll::-webkit-scrollbar-thumb {
background: #888;
border-radius: 2px;
}
}
/* Sticky Page Navigation */
.page-navigation {
transition: all 0.3s ease;
}
#nav-container {
transition: all 0.3s ease;
}
#nav-items {
transition: all 0.3s ease;
}
#nav-toggle {
transition: all 0.2s ease;
}
/* Navigation link active state transitions */
.page-navigation a {
transition: all 0.3s ease;
position: relative;
}
/* Subtle entrance animation for sticky nav */
@keyframes slideDown {
from {
opacity: 0.8;
transform: translateY(-10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.page-navigation.sticky-nav #nav-container {
animation: slideDown 0.3s ease-out;
}
.page-navigation.sticky-nav {
position: fixed;
top: var(--header-height);
left: 0;
right: 0;
z-index: 30;
padding: 0.5rem 0;
}
.page-navigation.sticky-nav #nav-container {
background: rgba(240, 247, 248, 0.3);
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
padding: 0.75rem 1.5rem;
box-shadow: 0 6px 12px -2px rgba(0, 0, 0, 0.12);
border-bottom: 1px solid rgba(0, 0, 0, 0.06);
}
/* Add breathing room between sticky nav and content */
.page-navigation.sticky-nav ~ section:first-of-type,
.page-navigation.sticky-nav ~ div:first-of-type {
margin-top: 0;
}
/* Navigation collapse/expand */
#nav-items.nav-collapsed {
max-height: 0;
opacity: 0;
margin: 0;
padding: 0;
width: 0;
}
/* Compact container when collapsed - just the hamburger icon */
.nav-container-collapsed {
padding: 0.5rem !important;
width: auto !important;
max-width: fit-content !important;
margin-left: auto !important;
margin-right: 1.5rem !important;
}
/* Also make the parent section compact when collapsed */
.page-navigation.sticky-nav:has(.nav-container-collapsed) {
padding: 0.25rem 0;
}
.page-navigation.sticky-nav .nav-container-collapsed {
margin: 0 1.5rem 0 auto;
}
/* Mobile adjustments for sticky nav */
@media (max-width: 767px) {
.page-navigation.sticky-nav {
top: var(--header-height);
padding: 0.25rem 0;
}
.page-navigation.sticky-nav #nav-container {
padding: 0.5rem 1rem;
}
.page-navigation.sticky-nav ~ section:first-of-type,
.page-navigation.sticky-nav ~ div:first-of-type {
margin-top: 0.5rem;
}
/* Auto-collapse navigation on mobile when sticky for better UX */
.page-navigation.sticky-nav #nav-items {
font-size: 0.875rem; /* Slightly smaller text */
}
/* Ensure hamburger is more prominent on mobile */
.page-navigation.sticky-nav #nav-toggle {
padding: 0.5rem;
}
}
/* ============================================
Visual Effects
============================================ */
/* Frosted glass effect */
.backdrop-blur-md {
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
}
.backdrop-blur-sm {
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
}
.drop-shadow-lg {
filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.3));
}
/* ============================================
Text Utilities
============================================ */
.line-clamp-2 {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.line-clamp-3 {
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}
/* ============================================
Scrollbar Styles
============================================ */
.scrollbar-hide {
-ms-overflow-style: none;
scrollbar-width: none;
}
.scrollbar-hide::-webkit-scrollbar {
display: none;
}
/* Custom scrollbar for research area card descriptions */
.overflow-y-auto::-webkit-scrollbar {
width: 4px;
}
.overflow-y-auto::-webkit-scrollbar-track {
background: transparent;
}
.overflow-y-auto::-webkit-scrollbar-thumb {
background: #cbd5e0;
border-radius: 2px;
}
.overflow-y-auto::-webkit-scrollbar-thumb:hover {
background: #a0aec0;
}
/* Search results scrolling */
#search-results {
scrollbar-width: thin;
scrollbar-color: #cbd5e0 #f7fafc;
}
#search-results::-webkit-scrollbar {
width: 6px;
}
#search-results::-webkit-scrollbar-track {
background: #f7fafc;
}
#search-results::-webkit-scrollbar-thumb {
background: #cbd5e0;
border-radius: 3px;
}
#search-results::-webkit-scrollbar-thumb:hover {
background: #a0aec0;
}
/* ============================================
Accessibility
============================================ */
/* Screen reader only utility */
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
.sr-only:focus {
position: static;
width: auto;
height: auto;
padding: inherit;
margin: inherit;
overflow: visible;
clip: auto;
white-space: normal;
}
/* ============================================
Carousel
============================================ */
/* Carousel arrow styling */
.carousel-arrow {
transition: opacity 0.2s, transform 0.2s;
}
.carousel-arrow:hover {
transform: scale(1.1);
}
.carousel-arrow:active {
transform: scale(0.95);
}
/* Mobile carousel improvements */
@media (max-width: 767px) {
/* Hide carousel navigation arrows on mobile */
.carousel-arrow {
display: none;
}
/* Smooth touch scrolling for carousels */
.carousel-scroll {
-webkit-overflow-scrolling: touch;
scroll-behavior: smooth;
}
/* Add padding to carousel for better touch targets */
.carousel-scroll > * {
scroll-snap-align: start;
}
}
/* ============================================
Background Images
============================================ */
/* Overall background styling */
#overall-background {
background-attachment: fixed;
}
#overall-background img {
object-fit: cover;
object-position: left top;
}
#page-background {
overflow: hidden;
}
#page-background img {
height: 100%;
width: auto;
min-width: 100%;
object-fit: cover;
object-position: left top;
}
/* Semi-transparent overlays for header and search sidebar */
header, #search-sidebar {
background: rgba(255, 255, 255, 0.8);
}
/* Ensure content is readable over background */
header *, #search-sidebar * {
position: relative;
z-index: 1;
}