/* Global safety nets */
html, body { width: 100%; }
body.no-scroll { overflow: hidden; }             /* lock scroll under mobile menu */
img, video { max-width: 100%; height: auto; display: block; }  /* fluid media */
svg { max-width: 100%; height: auto; }

/* Avoid accidental horizontal scroll on narrow screens */
@media (max-width: 1024px) { body { overflow-x: hidden; } }

/* Backdrop filter fallback for older browsers */
@supports not ((-webkit-backdrop-filter: blur(10px)) or (backdrop-filter: blur(10px))) {
  .navbar { background: rgba(255,255,255,0.92); }
  [data-theme="dark"] .navbar { background: rgba(17,24,39,0.92); }
}

.navbar { z-index: 2000; }
.hero::before { pointer-events: none; }

/* Make the fixed navbar feel nicer on iOS safe areas */
:root { --safe-top: env(safe-area-inset-top, 0px); }
.navbar { padding-top: max(0px, var(--safe-top)); }

/* Buttons wrap nicely on small screens */
.btn { white-space: nowrap; }
@media (max-width: 380px) { .btn { white-space: normal; } }

/* Ensure big grids don’t squish too much on tablets */
@media (max-width: 900px) {
  .skills-grid, .projects-grid { grid-template-columns: 1fr; }
}

/* ===== Design tokens ===== */
:root {
  /* Colors (light) */
  --primary-color:#2563EB;
  --accent-color:#22C55E;
  --text-primary:#1F2937;
  --text-secondary:#6B7280;
  --text-muted:#9CA3AF;
  --background:#FFFFFF;
  --background-alt:#F9FAFB;
  --surface:#FFFFFF;
  --border:#E5E7EB;
  --border-light:#F3F4F6;
  --shadow:rgba(0,0,0,.10);
  --shadow-light:rgba(0,0,0,.05);
  --gradient-primary:linear-gradient(135deg,var(--primary-color),#3B82F6);

  /* Helpers for soft blobs */
  --primary-10:rgba(37,99,235,.10);
  --accent-05:rgba(34,197,94,.05);

  /* Type & layout */
  --font-heading:'Sora',sans-serif;
  --font-body:'Inter',sans-serif;

  --space-xs:.5rem; --space-sm:1rem; --space-md:1.5rem; --space-lg:2rem;
  --space-xl:3rem; --space-2xl:4rem; --space-3xl:6rem;

  --radius-sm:.375rem; --radius-md:.5rem; --radius-lg:.75rem; --radius-xl:1rem;

  --container-width:1200px;
  --container-padding:1.5rem;

  --transition-fast:.2s ease; --transition-normal:.3s ease; --transition-slow:.5s ease;

  --z-nav:100; --z-modal:200; --z-tooltip:300;
}

/* System dark */
@media (prefers-color-scheme: dark){
  :root{
    --text-primary:#F9FAFB;
    --text-secondary:#D1D5DB;
    --text-muted:#9CA3AF;
    --background:#111827;
    --background-alt:#1F2937;
    --surface:#1F2937;
    --border:#374151;
    --border-light:#4B5563;
    --shadow:rgba(0,0,0,.30);
    --shadow-light:rgba(0,0,0,.20);
  }
}

/* Explicit overrides if you ever set data-theme on <html> */
[data-theme="light"]{
  --text-primary:#1F2937; --text-secondary:#6B7280; --text-muted:#9CA3AF;
  --background:#FFFFFF; --background-alt:#F9FAFB; --surface:#FFFFFF;
  --border:#E5E7EB; --border-light:#F3F4F6;
  --shadow:rgba(0,0,0,.10); --shadow-light:rgba(0,0,0,.05);
}
[data-theme="dark"]{
  --text-primary:#F9FAFB; --text-secondary:#D1D5DB; --text-muted:#9CA3AF;
  --background:#111827; --background-alt:#1F2937; --surface:#1F2937;
  --border:#374151; --border-light:#4B5563;
  --shadow:rgba(0,0,0,.30); --shadow-light:rgba(0,0,0,.20);
}

/* ===== Reset / Base ===== */
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth;font-size:16px}
body{
  font-family:var(--font-body);
  line-height:1.6;
  color:var(--text-primary);
  background:var(--background);
  transition:color var(--transition-normal),background-color var(--transition-normal);
}
h1,h2,h3,h4,h5,h6{font-family:var(--font-heading);font-weight:600;line-height:1.2;color:var(--text-primary)}
h1{font-size:clamp(2.5rem,5vw,3.5rem);font-weight:700}
h2{font-size:clamp(2rem,4vw,2.5rem)}
h3{font-size:clamp(1.5rem,3vw,1.75rem)}
p{font-size:clamp(1rem,2vw,1.125rem);color:var(--text-secondary)}
a{color:var(--primary-color);text-decoration:none;transition:color var(--transition-fast)}
a:hover{color:var(--accent-color)}
*:focus,button:focus,input:focus,textarea:focus,select:focus,a:focus{outline:2px solid var(--primary-color);outline-offset:2px}

/* Skip link */
.skip-link{position:absolute;top:-40px;left:6px;background:var(--primary-color);color:#fff;padding:8px;border-radius:var(--radius-sm);z-index:var(--z-tooltip);transition:top var(--transition-fast)}
.skip-link:focus{top:6px}

/* Layout helpers */
.container{max-width:var(--container-width);margin:0 auto;padding:0 var(--container-padding)}
.section{padding:var(--space-3xl) 0}
.section-header{text-align:center;margin-bottom:var(--space-2xl)}
.section-title{margin-bottom:var(--space-sm);position:relative}
.section-title::after{content:'';position:absolute;bottom:-8px;left:50%;transform:translateX(-50%);width:60px;height:4px;background:var(--gradient-primary);border-radius:2px}
.section-subtitle{font-size:1.125rem;color:var(--text-muted);max-width:600px;margin:0 auto}

/* ===== Navbar ===== */
.navbar{position:fixed;inset:0 0 auto 0;background:var(--surface);backdrop-filter:blur(10px);border-bottom:1px solid var(--border);z-index:var(--z-nav);transition:all var(--transition-normal)}
.nav-container{max-width:var(--container-width);margin:0 auto;padding:0 var(--container-padding);display:flex;justify-content:space-between;align-items:center;height:70px}
.brand-link{font-family:var(--font-heading);font-size:1.5rem;font-weight:700;color:var(--primary-color)}
.nav-menu{display:flex;align-items:center;gap:var(--space-lg)}
.nav-link{font-weight:500;color:var(--text-primary);position:relative;transition:color var(--transition-fast)}
.nav-link:hover,.nav-link.active{color:var(--primary-color)}
.nav-link::after{content:'';position:absolute;bottom:-4px;left:0;width:0;height:2px;background:var(--primary-color);transition:width var(--transition-fast)}
.nav-link:hover::after,.nav-link.active::after{width:100%}
.theme-toggle{background:none;border:none;color:var(--text-primary);font-size:1.25rem;cursor:pointer;padding:.5rem;border-radius:var(--radius-sm);transition:color var(--transition-fast)}
.theme-toggle:hover{color:var(--primary-color)}
.nav-toggle{display:none;flex-direction:column;gap:4px;background:none;border:none;cursor:pointer;padding:.5rem}
.nav-toggle span{width:25px;height:3px;background:var(--text-primary);transition:all var(--transition-fast)}

/* ===== Hero ===== */
.hero{padding:calc(70px + var(--space-3xl)) 0 var(--space-3xl);background:var(--background-alt);position:relative;overflow:hidden}
.hero::before{
  content:'';position:absolute;inset:0;
  background:
    radial-gradient(circle at 30% 20%, var(--primary-10), transparent 50%),
    radial-gradient(circle at 70% 80%, var(--accent-05), transparent 50%);
  pointer-events:none;
}
.hero-content{display:grid;grid-template-columns:auto 1fr;gap:var(--space-2xl);align-items:center;position:relative;z-index:1}
.hero-image{display:flex;justify-content:center}
.profile-img{width:200px;height:200px;border-radius:50%;object-fit:cover;border:4px solid var(--primary-color);box-shadow:0 20px 40px var(--shadow);transition:transform var(--transition-slow)}
.profile-img:hover{transform:scale(1.05)}
.hero-text{max-width:600px}
.hero-name{margin-bottom:var(--space-sm);background:var(--gradient-primary);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.hero-tagline{font-size:clamp(1.25rem,3vw,1.5rem);font-weight:500;color:var(--text-secondary);margin-bottom:var(--space-md)}
.hero-bio{font-size:1.125rem;margin-bottom:var(--space-lg);line-height:1.7}
.hero-cta{display:flex;gap:var(--space-md);margin-bottom:var(--space-lg)}
.hero-location{display:flex;align-items:center;gap:var(--space-xs);color:var(--text-muted);font-size:.875rem}

/* Buttons */
.btn{display:inline-flex;align-items:center;gap:var(--space-xs);padding:.75rem 1.5rem;border:none;border-radius:var(--radius-lg);font-weight:500;cursor:pointer;transition:all var(--transition-fast);font-family:var(--font-body);font-size:1rem}
.btn-primary{background:var(--gradient-primary);color:#fff;box-shadow:0 4px 12px rgba(37,99,235,.3)}
.btn-primary:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(37,99,235,.4);color:#fff}
.btn-secondary{background:var(--surface);color:var(--text-primary);border:2px solid var(--border)}
.btn-secondary:hover{border-color:var(--primary-color);color:var(--primary-color);transform:translateY(-2px)}

/* ===== About ===== */
.about-content{display:grid;grid-template-columns:2fr 1fr;gap:var(--space-2xl);align-items:start}
.about-text{font-size:1.125rem;line-height:1.7}
.about-text p:not(:last-child){margin-bottom:var(--space-md)}
.about-facts{display:grid;gap:var(--space-lg)}
.fact-item{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md);background:var(--surface);border-radius:var(--radius-lg);box-shadow:0 2px 8px var(--shadow-light);border:1px solid var(--border)}
.fact-item i{font-size:1.5rem;color:var(--primary-color);min-width:24px}
.fact-label{font-size:.875rem;color:var(--text-muted);display:block}
.fact-value{font-weight:600;color:var(--text-primary)}

/* ===== Skills ===== */
.skills{background:var(--background-alt)}
.skills-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:var(--space-lg)}
.skill-category{background:var(--surface);padding:var(--space-lg);border-radius:var(--radius-xl);box-shadow:0 4px 12px var(--shadow-light);border:1px solid var(--border);transition:transform var(--transition-normal)}
.skill-category:hover{transform:translateY(-4px)}
.category-title{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md);color:var(--text-primary)}
.category-title i{color:var(--primary-color);font-size:1.25rem}
.skill-tags{display:flex;flex-wrap:wrap;gap:var(--space-xs)}
.skill-tag{background:var(--background-alt);color:var(--text-secondary);padding:.375rem .75rem;border-radius:var(--radius-sm);font-size:.875rem;font-weight:500;border:1px solid var(--border);transition:all var(--transition-fast)}
.skill-tag:hover{background:var(--primary-color);color:#fff;transform:translateY(-2px)}

/* ===== Projects ===== */
.projects-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(350px,1fr));gap:var(--space-xl)}
.project-card{background:var(--surface);border-radius:var(--radius-xl);box-shadow:0 4px 12px var(--shadow-light);border:1px solid var(--border);overflow:hidden;transition:transform var(--transition-normal)}
.project-card:hover{transform:translateY(-8px)}
.project-image{position:relative;height:200px;overflow:hidden}
.project-image img{width:100%;height:100%;object-fit:cover;transition:transform var(--transition-slow)}
.project-card:hover .project-image img{transform:scale(1.1)}
.project-overlay{position:absolute;inset:0;background:rgba(0,0,0,.8);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity var(--transition-normal)}
.project-card:hover .project-overlay{opacity:1}
.project-links{display:flex;gap:var(--space-md)}
.project-link{display:flex;align-items:center;justify-content:center;width:50px;height:50px;background:#fff;color:var(--text-primary);border-radius:50%;transition:all var(--transition-fast)}
.project-link:hover{background:var(--primary-color);color:#fff;transform:scale(1.1)}
.project-content{padding:var(--space-lg)}
.project-title{margin-bottom:var(--space-sm);color:var(--text-primary)}
.project-description{margin-bottom:var(--space-md);font-size:.875rem}
.project-highlights{list-style:none;margin-bottom:var(--space-md)}
.project-highlights li{font-size:.875rem;color:var(--text-secondary);margin-bottom:var(--space-xs);padding-left:1rem;position:relative}
.project-highlights li::before{content:'✓';position:absolute;left:0;color:var(--accent-color);font-weight:700}
.project-tech{display:flex;flex-wrap:wrap;gap:var(--space-xs)}
.tech-tag{background:var(--background-alt);color:var(--text-secondary);padding:.25rem .5rem;border-radius:var(--radius-sm);font-size:.75rem;font-weight:500;border:1px solid var(--border)}

/* ===== Experience ===== */
.experience{background:var(--background-alt)}
.timeline{position:relative;max-width:800px;margin:0 auto}
.timeline::before{content:'';position:absolute;left:30px;top:0;bottom:0;width:2px;background:var(--border)}
.timeline-item{position:relative;margin-bottom:var(--space-2xl);padding-left:80px}
.timeline-marker{position:absolute;left:22px;top:0;width:16px;height:16px;background:var(--primary-color);border-radius:50%;border:3px solid var(--surface);box-shadow:0 2px 8px var(--shadow)}
.timeline-content{background:var(--surface);padding:var(--space-lg);border-radius:var(--radius-xl);box-shadow:0 4px 12px var(--shadow-light);border:1px solid var(--border)}
.timeline-header{margin-bottom:var(--space-md)}
.timeline-title{color:var(--text-primary);margin-bottom:var(--space-xs)}
.timeline-company{font-weight:600;color:var(--primary-color);display:block;margin-bottom:var(--space-xs)}
.timeline-date,.timeline-location{font-size:.875rem;color:var(--text-muted)}
.timeline-description p{margin-bottom:var(--space-md)}
.timeline-achievements{list-style:none;margin:0}
.timeline-achievements li{margin-bottom:var(--space-sm);padding-left:1rem;position:relative;font-size:.875rem;color:var(--text-secondary)}
.timeline-achievements li::before{content:'▶';position:absolute;left:0;color:var(--accent-color);font-size:.75rem}

/* ===== Contact ===== */
.contact-content{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-2xl);max-width:900px;margin:0 auto}
.contact-info{display:flex;flex-direction:column;gap:var(--space-lg)}
.contact-item{display:flex;align-items:flex-start;gap:var(--space-md)}
.contact-item i{font-size:1.5rem;color:var(--primary-color);margin-top:.25rem;min-width:24px}
.contact-details h3{font-size:1.125rem;margin-bottom:var(--space-xs);color:var(--text-primary)}
.contact-details p{display:flex;align-items:center;gap:var(--space-xs)}
.copy-btn{background:none;border:none;color:var(--text-muted);cursor:pointer;padding:.25rem;border-radius:var(--radius-sm);transition:color var(--transition-fast);font-size:.875rem}
.copy-btn:hover{color:var(--primary-color)}
.social-links{display:flex;gap:var(--space-md);margin-top:var(--space-md)}
.social-link{display:flex;align-items:center;justify-content:center;width:50px;height:50px;background:var(--surface);color:var(--text-primary);border:2px solid var(--border);border-radius:50%;font-size:1.25rem;transition:all var(--transition-fast)}
.social-link:hover{background:var(--primary-color);color:#fff;border-color:var(--primary-color);transform:translateY(-2px)}
.contact-form{background:var(--surface);padding:var(--space-xl);border-radius:var(--radius-xl);box-shadow:0 4px 12px var(--shadow-light);border:1px solid var(--border)}
.form-group{margin-bottom:var(--space-md)}
.form-group label{display:block;margin-bottom:var(--space-xs);font-weight:500;color:var(--text-primary)}
.form-group input,.form-group textarea{width:100%;padding:.75rem;border:2px solid var(--border);border-radius:var(--radius-md);background:var(--background-alt);color:var(--text-primary);font-family:var(--font-body);font-size:1rem;transition:border-color var(--transition-fast)}
.form-group input:focus,.form-group textarea:focus{outline:none;border-color:var(--primary-color)}
.form-group textarea{resize:vertical;min-height:120px}

/* ===== Footer ===== */
.footer{background:var(--surface);border-top:1px solid var(--border);padding:var(--space-lg) 0;position:relative}
.footer-content{display:flex;justify-content:space-between;align-items:center}
.footer-text p{color:var(--text-muted);font-size:.875rem}
.footer-links{display:flex;gap:var(--space-md)}
.footer-link{display:flex;align-items:center;justify-content:center;width:40px;height:40px;color:var(--text-muted);border-radius:50%;transition:all var(--transition-fast)}
.footer-link:hover{color:var(--primary-color);background:var(--background-alt)}
.back-to-top{position:fixed;bottom:2rem;right:2rem;width:50px;height:50px;background:var(--primary-color);color:#fff;border:none;border-radius:50%;font-size:1.25rem;cursor:pointer;opacity:0;transform:translateY(20px);transition:all var(--transition-normal);z-index:var(--z-nav)}
.back-to-top.visible{opacity:1;transform:translateY(0)}
.back-to-top:hover{background:var(--accent-color);transform:translateY(-2px)}

/* ===== Responsive ===== */
@media (max-width:1024px){
  .hero-content{grid-template-columns:1fr;text-align:center;gap:var(--space-xl)}
  .about-content{grid-template-columns:1fr;gap:var(--space-xl)}
  .contact-content{grid-template-columns:1fr;gap:var(--space-xl)}
}
@media (max-width:768px){
  .nav-menu{position:fixed;top:70px;left:0;right:0;background:var(--surface);border-bottom:1px solid var(--border);flex-direction:column;padding:var(--space-lg) 0;transform:translateY(-100%);opacity:0;transition:all var(--transition-normal)}
  .nav-menu.active{transform:translateY(0);opacity:1}
  .nav-toggle{display:flex}
  .nav-toggle.active span:nth-child(1){transform:rotate(45deg) translate(5px,5px)}
  .nav-toggle.active span:nth-child(2){opacity:0}
  .nav-toggle.active span:nth-child(3){transform:rotate(-45deg) translate(7px,-6px)}
  .hero-cta{flex-direction:column;align-items:center}
  .btn{text-align:center;min-width:200px}
  .skills-grid,.projects-grid{grid-template-columns:1fr}
  .timeline{padding-left:0}
  .timeline::before{left:15px}
  .timeline-item{padding-left:50px}
  .timeline-marker{left:7px}
  .footer-content{flex-direction:column;gap:var(--space-md);text-align:center}
}
@media (max-width:480px){
  :root{--container-padding:1rem}
  .section{padding:var(--space-2xl) 0}
  .profile-img{width:150px;height:150px}
  .about-facts{grid-template-columns:1fr}
  .fact-item{text-align:center;flex-direction:column;gap:var(--space-xs)}
  .contact-form{padding:var(--space-lg)}
  .back-to-top{bottom:1rem;right:1rem;width:45px;height:45px}
}

/* ===== Print ===== */
@media print{
  *{-webkit-print-color-adjust:exact;color-adjust:exact}
  body{font-size:12pt;line-height:1.4;color:#000;background:#fff}
  .navbar,.hero-cta,.contact-form,.footer,.back-to-top,.theme-toggle,.project-overlay,.social-links{display:none !important}
  .hero{padding:2rem 0;background:#fff}
  .section{padding:1.5rem 0}
  .container{max-width:100%;padding:0 1rem}
  h1,h2,h3{color:#000;page-break-after:avoid}
  .hero-content{grid-template-columns:1fr;gap:1rem}
  .profile-img{width:120px;height:120px;border:2px solid #000}
  .hero-name{-webkit-text-fill-color:initial}
  .skill-tag,.tech-tag{border:1px solid #000;background:#f5f5f5}
  .project-card,.timeline-content{border:1px solid #ddd;box-shadow:none;margin-bottom:1rem;page-break-inside:avoid}
  .timeline-marker{background:#000;border:2px solid #fff}
  .timeline::before{background:#000}
}
/* ---------- Animation tokens ---------- */
:root{
  --anim-in: 700ms cubic-bezier(0.22,1,0.36,1);
  --anim-out: 300ms ease;
}

/* Subtle hero background motion */
.hero::before{
  animation: blobMove 18s ease-in-out infinite alternate;
}
@keyframes blobMove{
  0%   { transform: translate3d(0,0,0) scale(1);    }
  100% { transform: translate3d(0,-20px,0) scale(1.03); }
}

/* Float avatar a bit */
.profile-img{ will-change: transform; animation: float 8s ease-in-out infinite; }
@keyframes float{
  0%,100%{ transform: translateY(0) }
  50%    { transform: translateY(-8px) }
}

/* Shimmer headline very gently */
.hero-name{ background-size: 200% auto; animation: shimmer 6s linear infinite; }
@keyframes shimmer{
  0%{ background-position: 0% 50% }
  100%{ background-position: 200% 50% }
}

/* Navbar shrink on scroll */
.navbar.scrolled .nav-container{ height: 58px; }
.navbar.scrolled{ box-shadow: 0 10px 30px var(--shadow-light); }

/* Scroll-reveal variants (works with .reveal/.visible already in your CSS) */
.reveal{ opacity:0; transform: translateY(24px); transition: transform var(--anim-in), opacity var(--anim-in); will-change: transform, opacity; }
.reveal.visible{ opacity:1; transform: none; }

.reveal.anim-up     { transform: translateY(24px); }
.reveal.anim-down   { transform: translateY(-24px); }
.reveal.anim-left   { transform: translateX(24px); }
.reveal.anim-right  { transform: translateX(-24px); }
.reveal.anim-zoom   { transform: scale(.96); }
.reveal.anim-fade   { transform: none; }

/* Delay utilities for easy staggering */
.delay-1{ transition-delay: .08s }
.delay-2{ transition-delay: .16s }
.delay-3{ transition-delay: .24s }
.delay-4{ transition-delay: .32s }
.delay-5{ transition-delay: .40s }

/* Stagger helper: when parent has .anim-stagger we’ll assign delays in JS */
.anim-stagger > *{ will-change: transform, opacity; }

/* 3D tilt for project cards */
.project-card{
  --rx: 0deg; --ry: 0deg; --ty: 0px;
  transform: perspective(800px) rotateX(var(--rx)) rotateY(var(--ry)) translateY(var(--ty));
  transition: transform var(--anim-out);
}
.project-card:hover{ --ty: -6px; }

/* Ripple on buttons */
.btn{ position: relative; overflow: hidden; }
.btn .ripple{
  position:absolute; border-radius:50%; pointer-events:none; transform:scale(0);
  background: rgba(255,255,255,.35); animation: ripple 600ms linear;
}
@keyframes ripple{ to{ transform:scale(4); opacity:0; } }

/* Safer motion for users who prefer less */
@media (prefers-reduced-motion: reduce){
  .hero::before, .profile-img, .hero-name{ animation: none !important; }
}
[data-theme="dark"] .btn-secondary { background:#111827; border-color:#374151; }
[data-theme="dark"] .skill-tag,
[data-theme="dark"] .tech-tag { background:#111827; border-color:#374151; color:#D1D5DB; }
[data-theme="dark"] .project-overlay { background: rgba(0,0,0,0.7); } /* a touch softer */
/* ===== High Animation + Gradient Background (Dark) ===== */

/* Palette for gradients (tweak if you like) */
:root{
  --g1: #0ea5e9;  /* sky-500 */
  --g2: #8b5cf6;  /* violet-500 */
  --g3: #22c55e;  /* green-500 */
  --g4: #06b6d4;  /* cyan-500 */
}

/* Big animated, blurred conic gradient backdrop */
body::before{
  content:"";
  position: fixed;
  inset: -20%;
  z-index: -1;
  pointer-events: none;
  background:
    conic-gradient(from 0deg, var(--g1), var(--g2), var(--g3), var(--g4), var(--g1));
  filter: blur(90px) saturate(1.05);
  opacity: .35;                 /* intensity of the glow behind content */
  animation: bgSpin 36s linear infinite;
  will-change: transform, opacity;
}

/* A subtle layer that slowly shifts the gradient */
body::after{
  content:"";
  position: fixed;
  inset: 0;
  z-index: -2;
  pointer-events:none;
  background:
    linear-gradient(120deg, rgba(2,6,23,.95), rgba(2,8,23,.85) 60%, rgba(2,6,23,.95));
}

/* Faster spin in "high" mode */
[data-anim="high"] body::before{ animation-duration: 24s; opacity: .42; }

@keyframes bgSpin{
  to{ transform: rotate(360deg) scale(1.05); }
}

/* Boosted hero background motion */
.hero::before{
  animation: blobMove 14s ease-in-out infinite alternate;
  opacity: .9;
}
@keyframes blobMove{
  0%   { transform: translate3d(-2%, 0, 0) scale(1.00); }
  100% { transform: translate3d(2%, -2%, 0) scale(1.05); }
}

/* Gradient headline text for extra pop */
.hero-name,
.section-title{
  background: linear-gradient(135deg, var(--g2), var(--g1), var(--g4));
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}

/* Stronger float on avatar */
.profile-img{
  animation: floatHigh 7s ease-in-out infinite;
  will-change: transform;
}
@keyframes floatHigh{
  0%,100%{ transform: translateY(0) }
  50%    { transform: translateY(-14px) }
}

/* Spicier card lift & 3D tilt */
.project-card{ --ty: -2px; }
.project-card:hover{ --ty: -10px; }

/* Reveal: higher distance & punchier timing in high mode */
.reveal{
  opacity: 0;
  transform: translateY(32px);
  transition:
    transform 800ms cubic-bezier(.22,1,.36,1),
    opacity   800ms cubic-bezier(.22,1,.36,1);
  will-change: transform, opacity;
}
[data-anim="high"] .reveal{
  transform: translateY(44px);
  transition-duration: 900ms;
}
.reveal.visible{ opacity:1; transform:none; }

/* Directional variants (optional you already added) */
.reveal.anim-left  { transform: translateX(44px); }
.reveal.anim-right { transform: translateX(-44px); }
.reveal.anim-up    { transform: translateY(44px); }
.reveal.anim-down  { transform: translateY(-44px); }
.reveal.anim-zoom  { transform: scale(.92); }

/* Buttons: stronger gradient & hover */
.btn-primary{
  background: linear-gradient(135deg, var(--g2), var(--g1));
  box-shadow: 0 10px 30px rgba(14,165,233,.35);
}
.btn-primary:hover{
  transform: translateY(-3px) scale(1.02);
  box-shadow: 0 16px 40px rgba(14,165,233,.45);
}

/* Navbar: add a vibrant underline on hover */
.nav-link::after{
  background: linear-gradient(90deg, var(--g3), var(--g1));
}

/* Dark tune-ups for chips/tags so they pop over gradients */
[data-theme="dark"] .skill-tag,
[data-theme="dark"] .tech-tag{
  background: rgba(2,6,23,.7);
  border-color: rgba(148,163,184,.25);
  color: #E5E7EB;
}

/* Keep it respectful for users preferring less motion */
@media (prefers-reduced-motion: reduce){
  body::before, .hero::before, .profile-img, .reveal,
  .hero-name, .section-title { animation: none !important; transition: none !important; }
  .reveal { opacity: 1 !important; transform: none !important; }
}
/* === Hero alignment fix === */
.hero-content{
  display: grid;
  grid-template-columns: 280px minmax(0, 1fr);  /* fixed avatar column + flexible text */
  align-items: center;
  gap: clamp(24px, 5vw, 48px);
}

.hero-image{
  width: 280px;
  justify-self: start;
  flex-shrink: 0;          /* never let the image column collapse */
}

.profile-img{
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 1 / 1;     /* keeps the circle perfect */
  object-fit: cover;
}

.hero-text{
  min-width: 0;            /* allows wrapping and prevents overflow into the image */
}

/* Tight, centered layout on tablets/phones */
@media (max-width: 1024px){
  .hero-content{
    grid-template-columns: 1fr;
    text-align: center;
  }
  .hero-image{
    width: 180px;
    justify-self: center;
    margin-bottom: 12px;
  }
  .profile-img{ aspect-ratio: 1 / 1; }
}
/* === Hero spacing / no-overlap === */
.hero-content{
  display: grid;
  grid-template-columns: 320px minmax(0, 1fr);   /* wider fixed column for the avatar */
  column-gap: clamp(32px, 6vw, 112px);            /* more breathing room */
  align-items: center;
}

.hero-image{
  width: 320px;                                   /* keep image width in sync with the column */
  justify-self: start;
  flex-shrink: 0;
}

.profile-img{
  width: 100%;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  display: block;
}

.hero-text{ min-width: 0; padding-left: clamp(8px, 1.2vw, 16px); } /* tiny extra buffer */

/* Stack & center on tablets/phones */
@media (max-width: 1024px){
  .hero-content{ grid-template-columns: 1fr; row-gap: 16px; text-align: center; }
  .hero-image{ width: 200px; justify-self: center; }
  .profile-img{ aspect-ratio: 1 / 1; }
  .hero-text{ padding-left: 0; }
}
/* ===== Vibe theme (hareesh-style) ===== */
html[data-style="vibe"]{
  /* palette */
  --v1:#7c3aed;   /* violet */
  --v2:#06b6d4;   /* cyan   */
  --v3:#60a5fa;   /* blue   */

  /* light text + surfaces */
  --text-primary:#0f172a;   /* slate-900 */
  --text-secondary:#475569; /* slate-600 */
  --text-muted:#64748b;     /* slate-500 */
  --background:#f8fafc;     /* slate-50 */
  --background-alt:#f1f5f9; /* slate-100 */
  --surface:rgba(255,255,255,.86);
  --border:rgba(2,6,23,.08);
  --border-light:rgba(2,6,23,.06);

  /* gradient accents */
  --primary-color:var(--v2);
  --accent-color:var(--v1);
  --gradient-primary:linear-gradient(90deg,var(--v1),var(--v2));
}

/* Soft animated gradient hero background */
html[data-style="vibe"] .hero{
  background:
    radial-gradient(900px 600px at 12% 12%, rgba(99,102,241,.20), transparent 60%),
    radial-gradient(1000px 700px at 82% 80%, rgba(56,189,248,.18), transparent 60%),
    linear-gradient(180deg,#f8fafc 0%,#ecfeff 100%);
}
html[data-style="vibe"] .hero::before{
  background:
    radial-gradient(circle at 30% 20%, rgba(124,58,237,.10), transparent 50%),
    radial-gradient(circle at 70% 80%, rgba(6,182,212,.10), transparent 50%);
  animation: heroDrift 18s ease-in-out infinite alternate;
  opacity:.9;
}
@keyframes heroDrift{
  from{ transform: translate3d(-1%,0,0) scale(1); }
  to  { transform: translate3d(1%,-1%,0) scale(1.02); }
}

/* Gradient headings */
html[data-style="vibe"] .hero-name,
html[data-style="vibe"] .section-title{
  background: linear-gradient(90deg,var(--v1),var(--v2));
  -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent;
}

/* Glassy cards / forms / sections */
html[data-style="vibe"] .project-card,
html[data-style="vibe"] .contact-form,
html[data-style="vibe"] .skill-category,
html[data-style="vibe"] .timeline-content{
  background: var(--surface);
  border: 1px solid var(--border);
  box-shadow: 0 10px 30px rgba(2,6,23,.08);
  backdrop-filter: blur(6px);
}

/* Buttons */
html[data-style="vibe"] .btn-primary{
  background:linear-gradient(135deg,#4f46e5,var(--v2));
  box-shadow:0 12px 30px rgba(6,182,212,.35);
}
html[data-style="vibe"] .btn-primary:hover{
  transform:translateY(-3px) scale(1.02);
  box-shadow:0 16px 40px rgba(6,182,212,.45);
}
html[data-style="vibe"] .btn-secondary{
  background:rgba(255,255,255,.75);
  color:var(--text-primary);
  border:1px solid var(--border);
  backdrop-filter:blur(8px);
}

/* Nav hover underline with gradient */
html[data-style="vibe"] .nav-link::after{
  background:linear-gradient(90deg,var(--v1),var(--v2));
}

/* Increase hero image↔text gap (prevents mingling) */
html[data-style="vibe"] .hero-content{ column-gap: clamp(40px,6vw,96px); }

/* Respect reduced motion */
@media (prefers-reduced-motion: reduce){
  html[data-style="vibe"] .hero::before{ animation:none !important; }
}
/* --- Visibility hotfix for the vibe theme --- */

/* Turn OFF the old dark page glow when vibe is on */
html[data-style="vibe"] body::before,
html[data-style="vibe"] body::after{
  content: none !important;      /* removes those pseudo-elements */
}

/* Ensure strong readable text colors */
html[data-style="vibe"]{
  --text-primary: #0f172a;   /* slate-900 */
  --text-secondary: #334155; /* slate-700 (a bit darker than before for better contrast) */
  --text-muted: #475569;     /* slate-600 */
}
html[data-style="vibe"] body{ color: var(--text-primary); }
html[data-style="vibe"] p,
html[data-style="vibe"] .section-subtitle{ color: var(--text-secondary); }

/* Keep sections light behind text */
html[data-style="vibe"] body{ background: var(--background); }
html[data-style="vibe"] .section{ background: transparent; }

/* If your hero felt heavy, soften its overlay a touch */
html[data-style="vibe"] .hero::before{ opacity: .55; }
/* === Mobile hero responsiveness fix === */

/* Tighten desktop spacing a touch and keep the gap */
.hero-content{
  grid-template-columns: 320px minmax(0,1fr);
  column-gap: clamp(40px, 6vw, 96px);
  align-items: center;
}

/* Phone / small tablet */
@media (max-width: 768px){
  .hero-content{
    grid-template-columns: 1fr;      /* stack image over text */
    gap: 16px;
    text-align: center;
  }
  .hero-image{
    width: 180px;                     /* smaller avatar on phones */
    justify-self: center;
    margin-bottom: 4px;
  }
  .profile-img{ width: 180px; height: 180px; aspect-ratio: 1/1; }

  /* Scaled typography for narrow widths */
  .hero-name{
    /* was min 40px; that was too big for 412px screens */
    font-size: clamp(1.8rem, 9vw, 2.3rem);
    line-height: 1.1;
    word-break: break-word;
  }
  .hero-tagline{ font-size: clamp(1rem, 4.2vw, 1.15rem); }
  .hero-bio{ font-size: 1rem; }

  /* Buttons stack and fit */
  .hero-cta{ flex-direction: column; align-items: center; gap: 12px; }
  .btn{ min-width: unset; width: 100%; max-width: 320px; }
}

/* Extra-small devices */
@media (max-width: 420px){
  .hero-image{ width: 160px; }
  .profile-img{ width: 160px; height: 160px; }
  .hero-name{ font-size: clamp(1.6rem, 10vw, 2rem); }
}

/* Prevent any accidental horizontal scrollbars on mobile */
@media (max-width: 1024px){
  body { overflow-x: hidden; }
}

/* Slightly increase page padding on tiny screens for breathing room */
@media (max-width: 480px){
  .container { padding-inline: 16px; }
}
/* ===== Mobile hero responsiveness: hard override ===== */

/* Default desktop keeps roomy gap */
.hero-content{
  grid-template-columns: 320px minmax(0,1fr);
  column-gap: clamp(40px, 6vw, 96px);
  align-items: center;
}

/* ≤ 768px: stack + center + smaller avatar */
@media (max-width: 768px){
  .hero{ padding: calc(70px + 20px) 0 28px; }
  .hero-content{
    grid-template-columns: 1fr !important;   /* stack image above text */
    gap: 16px !important;
    text-align: center !important;
    align-items: start !important;
  }
  .hero-image{
    width: 180px !important;
    justify-self: center !important;
    margin: 6px auto 2px !important;
    flex-shrink: 0 !important;
  }
  .profile-img{ width: 180px !important; height: 180px !important; aspect-ratio: 1/1; }
  .hero-text{ min-width: 0 !important; padding-left: 0 !important; }
  /* make buttons fluid and stacked */
  .hero-cta{ flex-direction: column !important; gap: 12px !important; align-items: center !important; }
  .btn{ width: 100% !important; max-width: 320px !important; min-width: 0 !important; }
}

/* ≤ 430px: tighter type + smaller avatar to fit iPhone SE width */
@media (max-width: 430px){
  .hero-image{ width: 150px !important; }
  .profile-img{ width: 150px !important; height: 150px !important; }
  /* force smaller heading size so it never clips */
  h1.hero-name{
    font-size: clamp(1.55rem, 9.6vw, 2rem) !important;
    line-height: 1.12 !important;
    word-break: break-word; hyphens: auto;
    margin-top: 2px;
  }
  .hero-tagline{ font-size: clamp(.98rem, 4.2vw, 1.1rem) !important; }
  .hero-bio{ font-size: .98rem !important; }
  .container{ padding-left: 18px !important; padding-right: 18px !important; }
}

/* guard against accidental horizontal scrolling on mobile */
@media (max-width: 1024px){
  html, body { overflow-x: hidden; }
}
/* ===== HERO: hard mobile fix (center, no overflow, no overlap) ===== */

/* Safety: never allow sideways scroll */
@media (max-width: 1024px){
  html, body { overflow-x: hidden !important; }
}

/* Stack and center the hero on small screens */
@media (max-width: 768px){
  .hero{
    padding: calc(70px + 20px) 0 28px !important;
  }
  .hero .container{
    padding-left: 18px !important;
    padding-right: 18px !important;
  }
  .hero-content{
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    justify-content: flex-start !important;
    text-align: center !important;
    gap: 16px !important;
    width: 100% !important;
  }
  .hero-image{
    order: 0 !important;
    width: 170px !important;
    justify-self: center !important;
    margin: 6px auto 2px !important;
    flex-shrink: 0 !important;
  }
  .profile-img{
    width: 170px !important;
    height: 170px !important;
    aspect-ratio: 1/1 !important;
    object-fit: cover !important;
    display: block !important;
  }
  .hero-text{
    order: 1 !important;
    min-width: 0 !important;
    width: 100% !important;
    padding-left: 0 !important;
  }

  /* Make the heading/tagline fit and stay centered */
  h1.hero-name{
    font-size: clamp(1.55rem, 9.6vw, 2rem) !important;
    line-height: 1.15 !important;
    word-break: break-word !important;
    margin-top: 2px !important;
  }
  .hero-tagline{ font-size: clamp(.98rem, 4.2vw, 1.1rem) !important; }
  .hero-bio{ font-size: .98rem !important; max-width: 40ch; margin-inline: auto; }

  /* Buttons: stack and fit width */
  .hero-cta{
    flex-direction: column !important;
    align-items: center !important;
    gap: 12px !important;
  }
  .hero-cta .btn{
    width: min(100%, 320px) !important;
    min-width: 0 !important;
  }

  /* CRITICAL: disable reveal offsets in the hero on mobile
     (prevents text being shifted off-screen before .visible is applied) */
  #hero .reveal{ opacity: 1 !important; transform: none !important; }
  #hero .anim-left, #hero .anim-right, #hero .anim-up, #hero .anim-down, #hero .anim-zoom{
    transform: none !important;
  }
}

/* Extra-small devices (iPhone SE and similar) */
@media (max-width: 430px){
  .hero-image{ width: 150px !important; }
  .profile-img{ width: 150px !important; height: 150px !important; }
  h1.hero-name{ font-size: clamp(1.45rem, 10.2vw, 1.9rem) !important; }
}

/* ===== THEME FIX (put at END of style.css) ===== */

/* 0) Stop any old global gradient layers from dimming content */
body::before, body::after { /* keep your new vibe backgrounds only */
  /* comment these next two if you still use the old global glow */
  /* content: none !important; */
}

/* 1) Vibe LIGHT (applies when NOT dark) */
html[data-style="vibe"]:not([data-theme="dark"]) {
  --v1:#7c3aed; --v2:#06b6d4; --v3:#60a5fa;
  --text-primary:#0f172a; --text-secondary:#334155; --text-muted:#475569;
  --background:#f8fafc; --background-alt:#f1f5f9;
  --surface:rgba(255,255,255,.90);
  --border:rgba(2,6,23,.08); --border-light:rgba(2,6,23,.06);
  --primary-color:var(--v2); --accent-color:var(--v1);
  --gradient-primary:linear-gradient(90deg,var(--v1),var(--v2));
}
html[data-style="vibe"]:not([data-theme="dark"]) body {
  background: var(--background);
  color: var(--text-primary);
}
html[data-style="vibe"]:not([data-theme="dark"]) .hero{
  background:
    radial-gradient(900px 600px at 12% 12%, rgba(99,102,241,.20), transparent 60%),
    radial-gradient(1000px 700px at 82% 80%, rgba(56,189,248,.18), transparent 60%),
    linear-gradient(180deg,#f8fafc 0%,#ecfeff 100%) !important;
}
html[data-style="vibe"]:not([data-theme="dark"]) .hero::before{
  opacity:.55;
  background:
    radial-gradient(circle at 30% 20%, rgba(124,58,237,.12), transparent 50%),
    radial-gradient(circle at 70% 80%, rgba(6,182,212,.12), transparent 50%);
}

/* 2) Vibe DARK (applies when html[data-theme="dark"]) */
html[data-theme="dark"] {
  /* generic dark tokens in case data-style is missing */
  --text-primary:#f8fafc; --text-secondary:#e2e8f0; --text-muted:#94a3b8;
  --background:#0b1220; --background-alt:#0f172a;
  --surface:rgba(15,23,42,.88);
  --border:rgba(148,163,184,.18); --border-light:rgba(148,163,184,.12);
}
html[data-style="vibe"][data-theme="dark"]{
  --v1:#a78bfa; --v2:#22d3ee; --v3:#60a5fa;
  --primary-color:var(--v2); --accent-color:#8b5cf6;
  --gradient-primary:linear-gradient(90deg,#22d3ee,#8b5cf6);
}
html[data-theme="dark"] body{
  background: var(--background) !important;
  color: var(--text-primary) !important;
}
html[data-theme="dark"] .hero{
  background:
    radial-gradient(900px 600px at 12% 12%, rgba(124,58,237,.16), transparent 60%),
    radial-gradient(1000px 700px at 82% 80%, rgba(34,211,238,.12), transparent 60%),
    linear-gradient(180deg,#0b1220 0%, #0e1726 100%) !important;
}
html[data-theme="dark"] .hero::before{
  opacity:.65 !important;
  background:
    radial-gradient(circle at 30% 20%, rgba(139,92,246,.18), transparent 50%),
    radial-gradient(circle at 70% 80%, rgba(34,211,238,.18), transparent 50%) !important;
}

/* 3) Glass surfaces in both themes (use tokens above) */
html[data-style="vibe"] .project-card,
html[data-style="vibe"] .contact-form,
html[data-style="vibe"] .skill-category,
html[data-style="vibe"] .timeline-content{
  background: var(--surface) !important;
  border: 1px solid var(--border) !important;
  backdrop-filter: blur(6px);
}

/* 4) Headings stay gradient in both themes */
html[data-style="vibe"] .hero-name,
html[data-style="vibe"] .section-title{
  background: var(--gradient-primary);
  -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent;
}

/* 5) Make sure nothing blocks clicks on the toggle */
.navbar { z-index: 2000; }
.hero::before { pointer-events: none; }

/* ==== Fix: "Contact Me" (btn-secondary) in DARK mode ==== */
html[data-theme="dark"] .btn-secondary{
  /* higher contrast on dark background */
  background: rgba(255,255,255,0.12);            /* was too faint */
  color: #f1f5f9;                                 /* near-white */
  border: 1px solid rgba(148,163,184,0.38);       /* clearer edge */
  box-shadow: 0 8px 24px rgba(2,6,23,0.55);       /* lift from bg */
  backdrop-filter: blur(6px);
}

html[data-theme="dark"] .btn-secondary:hover{
  background: rgba(255,255,255,0.18);
  border-color: var(--primary-color);
  color: #ffffff;
  transform: translateY(-2px);
  box-shadow: 0 12px 32px rgba(2,6,23,0.65),
              inset 0 0 0 2px rgba(34,211,238,0.25);
}

html[data-theme="dark"] .btn-secondary:focus-visible{
  outline: 2px solid var(--primary-color);
  outline-offset: 2px;
}

/* make sure the envelope icon inherits the text color */
html[data-theme="dark"] .btn-secondary i{ color: currentColor; }

/* ===== Soothing Aurora Background (light/dark aware) ===== */
.hero{
  position: relative;
  overflow: hidden;
  /* mouse target for the parallax glow (updated by JS) */
  --mx: .5;
  --my: .4;
}

/* Base drifting aurora */
.hero::before{
  content: "";
  position: absolute;
  inset: -10% -10% -10% -10%;
  z-index: 0;
  pointer-events: none;
  /* 3 softly colored blobs; colors come from tokens below */
  background:
    radial-gradient(1200px 800px at 12% 14%, rgba(var(--aur1), .20), transparent 60%),
    radial-gradient(1000px 700px at 86% 82%, rgba(var(--aur2), .18), transparent 60%),
    radial-gradient(900px 650px  at 48% 88%, rgba(var(--aur3), .16), transparent 60%);
  filter: blur(48px) saturate(1.05);
  opacity: .9;
  transform: translate3d(0,0,0);
  animation: aurora-pan 28s ease-in-out infinite alternate;
}

/* Soft highlight that follows the cursor */
.hero::after{
  content: "";
  position: absolute;
  inset: -20%;
  z-index: 0;
  pointer-events: none;
  background:
    radial-gradient(560px 380px at calc(var(--mx) * 100%) calc(var(--my) * 100%),
      rgba(255,255,255,.22), transparent 60%);
  mix-blend-mode: overlay;           /* subtle, non-intrusive glow */
  transition: background-position .15s linear;
}

/* Keep content above the aurora layers */
.hero > .container{ position: relative; z-index: 1; }

/* Theme-aware colors (RGB components for lightweight alpha control) */
html[data-theme="light"]{
  --aur1: 124, 58, 237;  /* violet  */
  --aur2:   6,182, 212;  /* cyan    */
  --aur3:  56,189, 248;  /* sky     */
}
html[data-theme="dark"]{
  --aur1: 139, 92, 246;  /* violet  */
  --aur2:  34,211, 238;  /* cyan    */
  --aur3:  20,184, 166;  /* teal    */
}

/* Drift animation */
@keyframes aurora-pan{
  0%   { transform: translateY(-2%) scale(1);   }
  50%  { transform: translateY( 2%) scale(1.03);}
  100% { transform: translateY(-2%) scale(1.01);}
}

/* Accessibility: reduce motion if requested */
@media (prefers-reduced-motion: reduce){
  .hero::before, .hero::after{ animation: none !important; }
}

/* Make sure nothing blocks navbar/theme clicks */
.navbar{ z-index: 2000; }
.hero::before, .hero::after{ pointer-events: none; }

/* ===== AURORA BACKGROUND (soothing, light/dark aware) ===== */
.aurora{
  position: relative;
  overflow: hidden;
  --mx: .5;        /* mouse position X (0..1) set by JS */
  --my: .4;        /* mouse position Y (0..1) set by JS */
  --blur: 48px;
}

/* neutralize any older hero overlays */
.aurora.hero::before{ background: none !important; }

/* drifting gradient layer */
.aurora::before{
  content: "" !important;
  position: absolute; inset: -12% -12% -12% -12%;
  z-index: 0; pointer-events: none;
  background:
    radial-gradient(1200px 800px at 12% 14%, rgba(var(--aur1), .22), transparent 60%),
    radial-gradient(1000px 700px at 86% 82%, rgba(var(--aur2), .18), transparent 60%),
    radial-gradient(900px 650px  at 48% 88%, rgba(var(--aur3), .16), transparent 60%) !important;
  filter: blur(var(--blur)) saturate(1.05);
  opacity: .9;
  transform: translate3d(0,0,0);
  animation: aurora-pan 28s ease-in-out infinite alternate;
  will-change: transform, opacity;
}

/* soft highlight that follows the cursor */
.aurora::after{
  content: "" !important;
  position: absolute; inset: -20%;
  z-index: 0; pointer-events: none;
  background:
    radial-gradient(560px 380px at calc(var(--mx) * 100%) calc(var(--my) * 100%),
      rgba(255,255,255,.22), transparent 60%) !important;
  mix-blend-mode: overlay;
  transition: background-position .15s linear;
}

/* keep real content above the layers */
.aurora > .container{ position: relative; z-index: 1; }

/* theme tokens for the aurora colors (RGB triplets for lightweight alpha) */
html[data-theme="light"]{
  --aur1: 124, 58, 237;  /* violet */
  --aur2:   6,182, 212;  /* cyan   */
  --aur3:  56,189, 248;  /* sky    */
}
html[data-theme="dark"]{
  --aur1: 139, 92, 246;  /* violet */
  --aur2:  34,211, 238;  /* cyan   */
  --aur3:  20,184, 166;  /* teal   */
}

@keyframes aurora-pan{
  0%   { transform: translateY(-2%) scale(1);   }
  50%  { transform: translateY( 2%) scale(1.03);}
  100% { transform: translateY(-2%) scale(1.01);}
}

/* respect reduced motion */
@media (prefers-reduced-motion: reduce){
  .aurora::before, .aurora::after{ animation: none !important; }
}

/* ensure navbar & toggles stay clickable */
.navbar{ z-index: 2000; }
.aurora::before, .aurora::after{ pointer-events: none; }

/* ===== Hamburger + Fullscreen “Aurora” Menu (theme-aware) ===== */
:root{
  --nav-h: 70px;
  --menu-blur: 14px;
  --menu-radius: 24px;
  --menu-speed: 420ms;
  --menu-link-size: clamp(1.25rem, 4vw, 1.75rem);
}

/* Keep navbar above everything; ensure hero layers don't block clicks */
.navbar{ z-index: 2000; }
.hero::before, .hero::after{ pointer-events:none; }

/* Desktop/phone visibility */
@media (min-width: 769px){ .hamburger{ display:none; } }
@media (max-width: 768px){ .nav-menu{ display:none; } }

/* --- Hamburger button (glass, gradient ring, morph to X) --- */
.hamburger{
  display:flex; flex-direction:column; gap:5px;
  width:42px; height:42px; align-items:center; justify-content:center;
  background: linear-gradient(var(--surface), var(--surface)) padding-box,
              linear-gradient(90deg, var(--accent-color), var(--primary-color)) border-box;
  border:2px solid transparent; border-radius:12px;
  box-shadow: 0 6px 18px rgba(2,6,23,.12);
  cursor:pointer;
}
.hamburger span{
  width:22px; height:2px; background: var(--text-primary);
  transition: transform .22s ease, opacity .22s ease, background .22s ease;
  border-radius:2px;
}
.hamburger.active span:nth-child(1){ transform: translateY(7px) rotate(45deg); }
.hamburger.active span:nth-child(2){ opacity:0; }
.hamburger.active span:nth-child(3){ transform: translateY(-7px) rotate(-45deg); }

/* --- Fullscreen overlay with circular reveal from button --- */
.menu-overlay{
  position: fixed; inset: 0; z-index: 1950;
  pointer-events: none; /* off until opened */
  --cx: 100%; --cy: 0px; /* JS sets real origin to the hamburger center */
  clip-path: circle(0 at var(--cx) var(--cy));
  transition: clip-path var(--menu-speed) cubic-bezier(.22,1,.36,1), opacity var(--menu-speed);
  opacity: 0;
}

/* Aurora gradient + glass surface */
.menu-overlay::before{
  content:""; position:absolute; inset:-10%;
  background:
    radial-gradient(1200px 800px at 14% 16%, rgba(var(--aur1), .22), transparent 60%),
    radial-gradient(1000px 700px at 86% 82%, rgba(var(--aur2), .18), transparent 60%),
    radial-gradient(900px 650px  at 48% 88%, rgba(var(--aur3), .16), transparent 60%),
    linear-gradient(180deg, var(--background), var(--background-alt));
  filter: blur(44px) saturate(1.04);
}

.menu-surface{
  position: absolute; inset: clamp(12px, 3vw, 24px);
  background: color-mix(in oklab, var(--surface) 92%, transparent);
  border: 1px solid var(--border);
  border-radius: var(--menu-radius);
  backdrop-filter: blur(var(--menu-blur));
  box-shadow: 0 20px 60px rgba(2,6,23,.25);
  display: grid; place-items: center;
  padding: clamp(24px, 6vw, 48px);
}

/* Menu links */
.menu-link, .menu-theme{
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: var(--menu-link-size);
  line-height: 1.1;
  text-decoration: none;
  color: var(--text-primary);
  padding: 10px 14px;
  border-radius: 12px;
  transition: transform .2s ease, background .2s ease, color .2s ease, opacity .2s ease;
  opacity: 0; transform: translateY(14px);
  background: none; border: 0; cursor: pointer;
  display: inline-flex; align-items: center; gap: 10px;
}
.menu-link:hover, .menu-theme:hover{
  background: linear-gradient(90deg, color-mix(in oklab, var(--accent-color) 18%, transparent),
                                     color-mix(in oklab, var(--primary-color) 18%, transparent));
  color: #fff;
}

/* Staggered entrance */
.menu-overlay.open .menu-link,
.menu-overlay.open .menu-theme{
  opacity: 1; transform: translateY(0);
}
.menu-overlay.open [data-stagger]{
  transition-delay: calc(80ms * (var(--i)));
}

/* Activate overlay */
.menu-overlay.open{
  clip-path: circle(150% at var(--cx) var(--cy));
  opacity: 1; pointer-events: auto;
}

/* Lock background scroll while open */
body.no-scroll{ overflow: hidden; }

/* Theme-aware aurora colors (RGB triplets) */
html[data-theme="light"]{ --aur1:124,58,237; --aur2:6,182,212; --aur3:56,189,248; }
html[data-theme="dark"] { --aur1:139,92,246; --aur2:34,211,238; --aur3:20,184,166; }

/* Respect reduced motion */
@media (prefers-reduced-motion: reduce){
  .menu-overlay{ transition: none; }
  .menu-link, .menu-theme{ transition:none; }
}
/* ===== FIX: Fullscreen hamburger overlay layout & layering ===== */

/* 1) Put the overlay ABOVE the navbar and cover the whole viewport */
.menu-overlay{
  z-index: 5000 !important;                 /* higher than .navbar */
  pointer-events: none;
  position: fixed;
  inset: 0;
  /* ensure the reveal circle can cover any viewport size */
  clip-path: circle(0 at var(--cx) var(--cy));
  opacity: 0;
  transition: clip-path 420ms cubic-bezier(.22,1,.36,1), opacity 420ms;
}

/* Dim + aurora background underneath the glass surface */
.menu-overlay::before{
  content:"";
  position:absolute; inset:-10%;
  background:
    radial-gradient(1200px 800px at 14% 16%, rgba(var(--aur1), .22), transparent 60%),
    radial-gradient(1000px 700px at 86% 82%, rgba(var(--aur2), .18), transparent 60%),
    radial-gradient(900px 650px  at 48% 88%, rgba(var(--aur3), .16), transparent 60%),
    color-mix(in oklab, var(--background) 85%, #000 15%);
  filter: blur(44px) saturate(1.04);
}

/* 2) Center links perfectly: use flex column and full height */
.menu-surface{
  position:absolute; inset: clamp(12px, 3vw, 24px);
  height: calc(100dvh - 2 * clamp(12px, 3vw, 24px)); /* iOS-friendly */
  background: color-mix(in oklab, var(--surface) 92%, transparent);
  border: 1px solid var(--border);
  border-radius: 24px;
  backdrop-filter: blur(14px);
  box-shadow: 0 20px 60px rgba(2,6,23,.25);

  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;                   /* <— vertical center */
  gap: clamp(10px, 2.6vw, 20px);
  padding: max(24px, env(safe-area-inset-top))
           clamp(18px, 3vw, 32px)
           max(24px, env(safe-area-inset-bottom));
}

/* 3) Link look + smooth stagger */
.menu-link, .menu-theme{
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: clamp(1.25rem, 4.6vw, 1.9rem);
  line-height: 1.1;
  text-decoration: none;
  color: var(--text-primary);
  padding: 10px 14px;
  border-radius: 12px;
  background: none;
  border: 0;
  cursor: pointer;
  display: inline-flex; align-items: center; gap: 10px;

  opacity: 0; transform: translateY(14px);
  transition: transform .28s cubic-bezier(.22,1,.36,1),
              opacity   .28s cubic-bezier(.22,1,.36,1),
              background .2s ease, color .2s ease;
}

/* Hover/focus style that matches your vibe (no giant browser outline) */
.menu-link:hover, .menu-theme:hover{
  background:
    linear-gradient(90deg,
      color-mix(in oklab, var(--accent-color) 18%, transparent),
      color-mix(in oklab, var(--primary-color) 18%, transparent));
  color: #fff;
}
.menu-link:focus-visible, .menu-theme:focus-visible{
  outline: none;
  box-shadow: 0 0 0 3px color-mix(in oklab, var(--primary-color) 45%, #fff 0%);
  background:
    linear-gradient(90deg,
      color-mix(in oklab, var(--accent-color) 22%, transparent),
      color-mix(in oklab, var(--primary-color) 22%, transparent));
  color: #fff;
}

/* When opened: enable clicks, expand circle, reveal items with stagger */
.menu-overlay.open{
  pointer-events: auto;
  clip-path: circle(180vmax at var(--cx) var(--cy));  /* guaranteed cover */
  opacity: 1;
}
.menu-overlay.open .menu-link,
.menu-overlay.open .menu-theme{ opacity:1; transform: none; }
.menu-overlay.open [data-stagger]{ transition-delay: calc(80ms * var(--i)); }

/* Theme-aware aurora colors (RGB) */
html[data-theme="light"]{ --aur1:124,58,237; --aur2:6,182,212; --aur3:56,189,248; }
html[data-theme="dark"] { --aur1:139,92,246; --aur2:34,211,238; --aur3:20,184,166; }

/* ===== Fullscreen Menu: layout, style, animation ===== */
:root{
  --menu-radius: 28px;
  --menu-gap: clamp(16px, 3vw, 28px);
  --menu-blur: 16px;
  --menu-speed: 480ms;
}

/* put overlay above everything */
.menu-overlay{ position: fixed; inset: 0; z-index: 6000; pointer-events: none;
  opacity: 0; clip-path: circle(0 at var(--cx, 100%) var(--cy, 0));
  transition: clip-path var(--menu-speed) cubic-bezier(.22,1,.36,1), opacity var(--menu-speed);
}
/* panel (rounded, glass, dark like screenshot) */
.menu-panel{
  position:absolute; inset: clamp(12px,2.2vw,24px);
  border-radius: var(--menu-radius);
  background: color-mix(in oklab, var(--surface) 92%, transparent);
  border: 1px solid var(--border);
  box-shadow: 0 24px 80px rgba(2,6,23,.35);
  backdrop-filter: blur(var(--menu-blur));
  overflow: hidden;
}
html[data-theme="dark"] .menu-panel{
  background: color-mix(in oklab, #0e0f11 88%, transparent);
  border-color: rgba(255,255,255,.06);
}

/* top-right close */
.menu-close{
  position:absolute; top:18px; right:18px;
  width:40px; height:40px; border-radius: 999px;
  background: rgba(255,255,255,.08);
  color: var(--text-primary); border: 1px solid rgba(255,255,255,.2);
  font-size: 22px; line-height: 1; display:grid; place-items:center; cursor:pointer;
}
.menu-close:hover{ background: rgba(255,255,255,.16); }

/* GRID */
.menu-grid{
  display:grid;
  grid-template-columns: 1.2fr minmax(40px, 64px) minmax(320px, .9fr);
  gap: var(--menu-gap);
  padding: clamp(22px, 3vw, 36px);
  min-height: 60dvh;
}
@media (max-width: 900px){
  .menu-grid{ grid-template-columns: 1fr; }
  .menu-mid{ display:none; }
  .menu-right{ order: 2; }
}

/* LEFT links */
.menu-left{ display:grid; align-content:center; gap: clamp(10px, 2vw, 14px); }
.menu-link{
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: clamp(2.2rem, 7vw, 4rem);   /* big like screenshot */
  line-height: 1.05;
  color: var(--text-primary);
  text-decoration: none;
  padding: 2px 6px;
  border-radius: 12px;
  transition: transform .2s ease, opacity .2s ease;
}
.menu-link:hover{ transform: translateX(2px); }         /* no color flip */
.menu-link:focus-visible{ outline: 2px solid var(--primary-color); outline-offset: 4px; }

/* theme button looks like link */
.menu-theme{ background: none; border:0; text-align:left; cursor:pointer; }

/* MIDDLE stars column */
.menu-mid{ display:grid; align-content:center; gap: clamp(22px, 3.4vw, 34px); }
.menu-mid li{ list-style:none; color: var(--text-muted); font-size: clamp(18px, 2.2vw, 22px); }

/* RIGHT aside */
.menu-right{ display:grid; align-content:center; gap: 14px; text-align: right; }
.menu-kicker{ color: var(--text-secondary); font-weight: 600; font-size: clamp(1rem, 1.6vw, 1.1rem); }
.menu-copy{ color: var(--text-secondary); font-size: clamp(1rem, 1.7vw, 1.125rem); }
.menu-media{
  margin-left:auto;
  border-radius: 16px; padding: 10px;
  border: 1px solid rgba(255,255,255,.14);
  background: #d9d9d9; /* placeholder background behind image */
  box-shadow: inset 0 0 0 4px rgba(0,0,0,.08);
}
.menu-media img{ display:block; width: min(420px, 100%); border-radius: 12px; }
.menu-foot{ color: var(--text-muted); margin-top: 6px; }

/* OPEN STATE */
.menu-overlay.open{ pointer-events: auto; opacity: 1;
  clip-path: circle(180vmax at var(--cx) var(--cy));
}
.menu-overlay.open [data-stagger]{ transition: opacity .36s ease, transform .36s ease;
  opacity: 1; transform: none;
  transition-delay: calc(70ms * var(--i));
}
/* default hidden so they can stagger in */
[data-stagger]{ opacity: 0; transform: translateY(10px); }

/* keep navbar clickable when overlay is closed; hero layers never intercept */
.navbar{ z-index: 7000; }
.hero::before, .hero::after{ pointer-events: none; }

/* --- Letter-swap animation (smooth scramble) --- */
.menu-link[data-scramble]{
  --scram-duration: 720ms;
}
.menu-link[data-scramble].scrambling{ pointer-events: none; opacity: .96; }

/* overlay must be above navbar, visible when .open */
.menu-overlay{
  position: fixed; inset: 0;
  z-index: 6000;                 /* above navbar */
  pointer-events: none;
  opacity: 0;
  clip-path: circle(0 at var(--cx, 100%) var(--cy, 0));
  transition: clip-path 480ms cubic-bezier(.22,1,.36,1), opacity 480ms;
}
.menu-overlay.open{
  pointer-events: auto;
  opacity: 1;
  clip-path: circle(180vmax at var(--cx, 100%) var(--cy, 0));
}
/* [hidden] should fully hide the overlay when closed */
.menu-overlay[hidden]{ display: none !important; }

/* lock page scroll while open */
body.no-scroll{ overflow: hidden; }
/* --- Neutralize legacy dropdown menu if present --- */
.mobile-menu { display: none !important; }   /* old class from earlier attempts */

/* --- Fullscreen overlay must cover the viewport and sit on top --- */
#fs-menu.menu-overlay{
  position: fixed !important;
  inset: 0 !important;
  z-index: 6000 !important;
  pointer-events: none;
  opacity: 0;
  clip-path: circle(0 at var(--cx, 100%) var(--cy, 0));
  transition: clip-path 480ms cubic-bezier(.22,1,.36,1), opacity 480ms;
}
#fs-menu.menu-overlay.open{
  pointer-events: auto;
  opacity: 1;
  clip-path: circle(180vmax at var(--cx, 100%) var(--cy, 0));
}
#fs-menu[hidden]{ display: none !important; }

/* Panel fills inside with big rounded look */
#fs-menu .menu-panel{
  position: absolute;
  inset: clamp(12px, 2.2vw, 24px) !important;   /* margin from edges */
  border-radius: 28px;
  background: color-mix(in oklab, var(--surface) 92%, transparent);
  border: 1px solid var(--border);
  box-shadow: 0 24px 80px rgba(2,6,23,.35);
  backdrop-filter: blur(16px);
  overflow: hidden;
}

#fs-menu .menu-grid{
  display: grid;
  grid-template-columns: 1.2fr minmax(40px,64px) minmax(320px,.9fr);
  gap: clamp(16px, 3vw, 28px);
  padding: clamp(22px, 3vw, 36px);
  min-height: 60dvh;                             /* tall, not a thin strip */
}

@media (max-width: 900px){
  #fs-menu .menu-grid{ grid-template-columns: 1fr; }
  #fs-menu .menu-mid{ display: none; }
}

/* Keep navbar clickable when overlay is closed; hero layers don’t intercept */
.navbar{ z-index: 7000; }
.hero::before, .hero::after{ pointer-events: none; }

/* Kill legacy mobile dropdowns that create the thin bar */
.mobile-menu,
.nav-menu.active { display: none !important; }

/* Navbar can stay high, overlay goes higher */
.navbar { z-index: 7000; }

/* Fullscreen overlay: fixed, full viewport, max z-index */
#fs-menu.menu-overlay{
  position: fixed !important;
  inset: 0 !important;
  z-index: 99999 !important;
  pointer-events: none;
  opacity: 0;

  /* circular reveal (with Safari prefixed variant) */
  clip-path: circle(0 at var(--cx, 100%) var(--cy, 0));
  -webkit-clip-path: circle(0 at var(--cx, 100%) var(--cy, 0));
  transition: clip-path 480ms cubic-bezier(.22,1,.36,1), 
              -webkit-clip-path 480ms cubic-bezier(.22,1,.36,1),
              opacity 480ms;
}
#fs-menu.menu-overlay.open{
  pointer-events: auto;
  opacity: 1;
  clip-path: circle(180vmax at var(--cx, 100%) var(--cy, 0));
  -webkit-clip-path: circle(180vmax at var(--cx, 100%) var(--cy, 0));
}
#fs-menu[hidden]{ display: none !important; }

/* Panel and grid keep the big rounded dark look */
#fs-menu .menu-panel{
  position: absolute;
  inset: clamp(12px, 2.2vw, 24px) !important;
  border-radius: 28px;
  background: color-mix(in oklab, var(--surface) 92%, transparent);
  border: 1px solid var(--border);
  box-shadow: 0 24px 80px rgba(2,6,23,.35);
  backdrop-filter: blur(16px);
  overflow: hidden;
}
html[data-theme="dark"] #fs-menu .menu-panel{
  background: color-mix(in oklab, #0e0f11 88%, transparent);
  border-color: rgba(255,255,255,.06);
}

#fs-menu .menu-grid{
  display: grid;
  grid-template-columns: 1.2fr minmax(40px,64px) minmax(320px,.9fr);
  gap: clamp(16px, 3vw, 28px);
  padding: clamp(22px, 3vw, 36px);
  min-height: 60dvh;
}
@media (max-width: 900px){
  #fs-menu .menu-grid{ grid-template-columns: 1fr; }
  #fs-menu .menu-mid{ display: none; }
}

/* Make sure hero decorative layers never block clicks */
.hero::before, .hero::after { pointer-events: none; }

/* --- KILL ANY LEGACY MOBILE MENU RULES (old dropdowns) --- */
.mobile-menu,
.nav-menu.active {
  display: none !important;
}

/* --- FULLSCREEN OVERLAY OUTSIDE <nav> --- */
#fs-menu.menu-overlay{
  position: fixed !important;
  inset: 0 !important;
  z-index: 99999 !important;
  pointer-events: none;
  opacity: 0;

  /* circular reveal (if supported) */
  clip-path: circle(0 at var(--cx, 100%) var(--cy, 0));
  -webkit-clip-path: circle(0 at var(--cx, 100%) var(--cy, 0));
  transition:
    clip-path 480ms cubic-bezier(.22,1,.36,1),
    -webkit-clip-path 480ms cubic-bezier(.22,1,.36,1),
    opacity 480ms;
}
#fs-menu[hidden]{ display: none !important; }

/* OPEN: fallback to NO CLIP so it can't get stuck as a thin bar */
#fs-menu.menu-overlay.open{
  pointer-events: auto;
  opacity: 1;

  /* Comment these two lines back in if you want the circle reveal again
     after everything is working:
     clip-path: circle(180vmax at var(--cx, 100%) var(--cy, 0));
     -webkit-clip-path: circle(180vmax at var(--cx, 100%) var(--cy, 0));
  */
  clip-path: none !important;
  -webkit-clip-path: none !important;
}

/* PANEL must have real height (prevents “thin strip” look) */
#fs-menu .menu-panel{
  position: absolute;
  inset: clamp(12px, 2.2vw, 24px) !important;
  border-radius: 28px;
  background: color-mix(in oklab, var(--surface) 92%, transparent);
  border: 1px solid var(--border);
  box-shadow: 0 24px 80px rgba(2,6,23,.35);
  backdrop-filter: blur(16px);
  overflow: hidden;

  /* guarantee size */
  min-height: calc(100vh - 2 * clamp(12px, 2.2vw, 24px)) !important;
  display: flex;
}
html[data-theme="dark"] #fs-menu .menu-panel{
  background: color-mix(in oklab, #0e0f11 88%, transparent);
  border-color: rgba(255,255,255,.06);
}

/* GRID fills the panel */
#fs-menu .menu-grid{
  flex: 1 1 auto;
  display: grid;
  grid-template-columns: 1.2fr minmax(40px,64px) minmax(320px,.9fr);
  gap: clamp(16px, 3vw, 28px);
  padding: clamp(22px, 3vw, 36px);
  min-height: 100%;               /* inherits panel min-height */
}
@media (max-width: 900px){
  #fs-menu .menu-grid{ grid-template-columns: 1fr; }
  #fs-menu .menu-mid{ display: none; }
}

/* keep hero decoration from intercepting clicks */
.hero::before, .hero::after { pointer-events: none; }

/* Center each diamond inside a row that matches its link's height */
#fs-menu .menu-mid{
  display: flex;
  flex-direction: column;
  gap: 0;                       /* spacing comes from the row heights we set via JS */
}

#fs-menu .menu-mid li{
  list-style: none;
  display: flex;                /* center the diamond */
  align-items: center;
  justify-content: center;
  width: 100%;
  /* size of the diamond itself */
  font-size: clamp(18px, 2.2vw, 22px);
  color: var(--text-muted);
  /* allow smooth visual update when heights change */
  transition: height 120ms ease;
}

/* keep link blocks consistent so measuring is stable */
#fs-menu .menu-left .menu-link{
  margin: 0;
  padding-block: clamp(6px, 1vw, 10px);
  line-height: 1.05;
}
/* === Remove the diamonds column from the fullscreen menu === */
#fs-menu .menu-mid{ display: none !important; }

/* Reflow the grid to two columns (Links | Info) */
#fs-menu .menu-grid{
  grid-template-columns: 1.2fr minmax(320px, .9fr) !important;
}

/* Mobile keeps a single column as before */
@media (max-width: 900px){
  #fs-menu .menu-grid{ grid-template-columns: 1fr !important; }
}
