/**************************************
 * THEME TOKENS
 **************************************/
 @import "https://unpkg.com/open-props/easings.min.css";
:root{ /* Light Theme */
  --ink:#0f172a;
  --muted:#475569;
  --bg:#ffffff;
  --surface:#ffffff;
  --surface-alt:#f8fafc;
  --border:#e5e7eb;
  --accent:#ff8a00;
  --link:#0b3d91;
}
/* Dark overrides */
:root[data-theme="dark"],
html[data-theme="dark"]{
  --ink:#e5e7eb;
  --muted:#a3a3a3;
  --bg:#0b1220;
  --surface:#111827;
  --surface-alt:#0f172a;
  --border:#1f2937;
  --accent:#ff9a1f;
  --link:#60a5fa;
}

/**************************************
 * BASE + HELPERS
 **************************************/
html,body{
  font-family:Inter, system-ui, -apple-system, Segoe UI, Roboto, "Helvetica Neue", Arial, "Noto Sans";
  color:var(--ink); background:var(--bg);
  overflow-x: hidden;
}
.bg-surface{background:var(--surface)!important}
.alt-surface{background:var(--surface-alt)!important}
.link-ink{color:var(--ink)}
.link-ink:hover{color:var(--link)}

/**************************************
 * NAVBAR (unified, no forced-white on active/hover)
 **************************************/
.navbar{background:transparent !important; transition: background .3s ease, box-shadow .3s ease;}
.navbar .navbar-toggler-icon{filter:invert(1)}
.navbar .navbar-toggler{border-color:#ffffff33}
.navbar-brand{
  color: var(--accent);
}

/* Shell */
.custom-navbar{
  background:#0c1a4b;                 /* solid at top */
  border-radius:50px;
  padding:.5rem 1.5rem;
  margin:1rem auto;
  max-width:1100px;
  box-shadow:0 4px 12px rgba(0,0,0,.15);
  transition: background .3s ease, backdrop-filter .3s ease, box-shadow .3s ease, border-color .3s ease;
  position:relative;
}

/* Link base color = readable on dark shell; no forced white on states */
.custom-navbar .nav-link{
  color:#fff;
  font-weight:600;
  position:relative;
  padding:.5rem .75rem;
}

/* Hover/active: keep same color tone; indicator handles emphasis */
.custom-navbar .nav-link:hover,
.custom-navbar .nav-link:focus,
.custom-navbar .nav-link.active{
  color:#fff; /* stays as-is on dark shell */
}

/* Active indicator */
.custom-navbar .nav-link.active::after,
.custom-navbar .nav-link:hover::after{
  content:"";
  position:absolute; left:0; right:0; bottom:0; margin:auto;
  width:60%; height:3px; background:#ff6a00; border-radius:2px;
}

/* Mobile: use color instead of bar for active links */
@media (max-width: 767.98px){
  .custom-navbar .nav-link.active::after{ display: none; }
  .custom-navbar .nav-link.active{ color: var(--accent) !important; }
  .custom-navbar .nav-link:hover::after{
    left:50%; transform:translateX(-50%); right:auto; margin:0; bottom:-2px;
    width:30px; height:2px;
  }
}

/* Glass on scroll (applied by JS with .nav-glass OR .scrolled) */
#topnav.nav-glass .custom-navbar,
.navbar.scrolled .custom-navbar{
  background: rgba(12,26,75,.35);      /* translucent tint */
  border:1px solid rgba(255,255,255,.22);
  box-shadow: 0 12px 30px rgba(2,6,23,.22), inset 0 1px 0 rgba(255,255,255,.18);
  backdrop-filter: saturate(160%) blur(10px);
  -webkit-backdrop-filter: saturate(160%) blur(10px);
}

/* Optional sheen */
#topnav.nav-glass .custom-navbar::before,
.navbar.scrolled .custom-navbar::before{
  content:"";
  position:absolute; inset:0; pointer-events:none; border-radius:inherit;
  background: linear-gradient(135deg, rgba(255,255,255,.28) 0%, rgba(255,255,255,.10) 35%, rgba(255,255,255,0) 65%);
  mix-blend-mode: screen;
}

/* On glass we keep link color readable on the lighter background:
   switch links to var(--ink) but still DO NOT force white on active/hover */
#topnav.nav-glass .custom-navbar .nav-link,
.navbar.scrolled .custom-navbar .nav-link{
  color: var(--ink);
}
#topnav.nav-glass .custom-navbar .nav-link:hover,
#topnav.nav-glass .custom-navbar .nav-link.active,
.navbar.scrolled .custom-navbar .nav-link:hover,
.navbar.scrolled .custom-navbar .nav-link.active{
  color: var(--ink); /* keep same color; indicator shows state */
}

/* Keep buttons and toggler readable on glass */
#topnav.nav-glass .custom-navbar .btn-download,
.navbar.scrolled .custom-navbar .btn-download{
  background:rgba(255,138,0,.92); color:#fff;
}
#topnav.nav-glass .navbar-toggler,
.navbar.scrolled .navbar-toggler{ border-color:#ffffff55; }

/* Fallback if blur unsupported */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){
  #topnav.nav-glass .custom-navbar,
  .navbar.scrolled .custom-navbar{
    background: rgba(12,26,75,.85);
  }
}

/* Theme toggle icon stays visible */
#topnav .theme-toggle{ color:#fff; }
#topnav.nav-glass .theme-toggle,
.navbar.scrolled .theme-toggle{ color: var(--ink); }
/* === Dual bars: ACTIVE (::before) + HOVER (::after) === */
/* === Dual bars: ACTIVE (::before) + HOVER (::after, no travel) === */
.custom-navbar .navbar-nav{ position: relative; }

@media (min-width: 768px){
  /* Hide per-link underline on desktop; keep for mobile */
  .custom-navbar .nav-link::after{ content: none !important; }

  /* ACTIVE bar — smooth slide */
  .custom-navbar .navbar-nav::before{
    content:"";
    position:absolute;
    bottom:0;
    height:3px;
    width:var(--active-w, 0px);
    transform: translateX(var(--active-x, 0px));
    background:#ff6a00;
    border-radius:2px;
    opacity:0;
    transition:
      transform .3s cubic-bezier(.22,1,.36,1),
      width .3s cubic-bezier(.22,1,.36,1),
      opacity .2s ease;
    pointer-events:none;
    z-index:1;
  }
  .custom-navbar .navbar-nav.has-active::before{ opacity:1; }

  /* HOVER bar — **instant jump (no travel)** */
  .custom-navbar .navbar-nav::after{
    content:"";
    position:absolute;
    bottom:0;
    height:3px;
    left: var(--hover-left, 0px);   /* use left/width, not transform */
    width: var(--hover-width, 0px);
    background:#ff9a1f;
    border-radius:2px;
    opacity:0;
    /* ensure no animation on position/size changes */
    transition: opacity .12s linear, left 0s, width 0s, transform 0s;
    transform: none !important;
    pointer-events:none;
    z-index:2; /* sits above active bar */
  }
  .custom-navbar .navbar-nav.has-hover::after{ opacity:1; }
}

@media (max-width: 990.98px){
  .custom-navbar .navbar-nav::before,
  .custom-navbar .navbar-nav::after{ display:none !important; }
}





/**************************************
 * HERO
 **************************************/
#home.hero{ margin-top: 100px; }
.hero{padding:84px 0 36px}
#home p{ font-size: 20px; }
.hi{letter-spacing:.18em; font-weight:700; color:var(--muted); font-size:.9rem}
.name{color:var(--accent); font-weight:800; font-size:1.25rem}
.title-xl{font-size:clamp(2rem, 4vw + .5rem, 3.25rem); font-weight:900; line-height:1.05; color:var(--ink)}
.title-thin{font-weight:800}
.wd-badge{color:#0b3d91}
.subtitle{max-width:56ch; color:var(--muted)}
.circle{width:360px; height:360px; border-radius:50%; object-fit:cover; box-shadow:0 10px 30px rgba(0,0,0,.18)}
.hero .btn-orange{background:var(--accent); color:#fff; border:none; border-radius:8px; padding:.6rem 1rem; font-weight:700}
.hero .btn-orange:hover{filter:brightness(.95)}
.hero .circle{width:300px; height:300px; border-radius:50%; object-fit:cover; box-shadow:0 10px 30px rgba(0,0,0,.18)}

/* Social */
.social a{ color:var(--muted); font-size:1.05rem; margin-right:30px; }
.social a:hover{color:var(--link)}

/**************************************
 * ABOUT
 **************************************/
.split{padding:36px 0 10px}
#about p{font-size:20px; line-height:1.6; color:var(--muted)}

/* Workday Logo (default desktop) */
.workday-logo{
  height:auto;
  width:269px;
  max-width:35vw;
  margin-left: 180px; /* default nudge on large screens */
}

/* Move Workday logo a bit to the right on tablets/smaller screens */
@media (max-width: 991.98px){
  #about .right-content-img .workday-logo{
    margin-left: clamp(24px, 8vw, 80px); /* gentle right push */
    max-width: min(72vw, 320px);
    display: block;
  }
}

/* Extra-small phones */
@media (max-width: 575.98px){
  #about .right-content-img .workday-logo{
    margin-left: clamp(12px, 10vw, 64px);
    max-width: 78vw;
  }
}

/* Right-content (lg+) */
@media (min-width: 992px){
  .right-content{
    margin-left: 80px;
    flex: 0 0 65%;
    max-width: 65%;
  }
  #about .text-center{
    flex: 0 0 35%;
    max-width: 35%;
  }
}

/* Hide left column on smaller screens for a cleaner about layout */
@media (max-width: 991px){
  #about .text-center { display: none !important; }
}

/**************************************
 * TAGLINE
 **************************************/
.tagline-wrap{background:var(--surface-alt); border-top:1px solid var(--border); border-bottom:1px solid var(--border)}
.tagline{font-weight:800; letter-spacing:.01em; color:var(--ink)}
.muted{color:var(--muted)}

/**************************************
 * UTILITIES
 **************************************/
.lead-tight{line-height:1.5}
.max-w-60{max-width:60ch}
.shadow-soft{box-shadow:0 14px 40px rgba(2,6,23,.12)}
.border{border-color:var(--border)!important}

/* Scrollspy active */
.nav-link.active{color:var(--link)!important}

/* Hero + About responsive tweaks */
@media (max-width: 991.98px){
  .hero{padding-top:120px}
  .circle{width:220px; height:220px}
  .right-content{ margin-left: 0; max-width: 100%; flex: 0 0 100%; }
  #about .text-center{ max-width: 100%; flex: 0 0 100%; }
}

/**************************************
 * EXPERIENCE
 **************************************/
.xp-title{
  font-size: clamp(1.75rem, 2.8vw, 2.5rem);
  font-weight: 800;
  color: var(--accent);
  letter-spacing: .01em;
}
.xp-scroller{
  display: flex;
  gap: 2rem;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
  padding: .25rem .5rem 1rem;
  cursor: grab;
  scroll-behavior: smooth;
}
.xp-scroller.is-dragging{ cursor: grabbing; user-select: none; }
.xp-scroller::-webkit-scrollbar{ height: 0; }
.xp-scroller{ scrollbar-width: none; }

.xp-card{
  flex: 0 0 clamp(260px, 28vw, 320px);
  background: var(--surface-alt);
  border: 1px solid var(--border);
  border-radius: 14px;
  box-shadow: 0 6px 20px rgba(2,6,23,.06);
  padding: 2rem 1.5rem;
  text-align: center;
  scroll-snap-align: start;
}
.xp-role{ color: #2c3a5e; font-weight: 800; margin-bottom: 1.5rem; }
.xp-dates{ color: #2c3a5e; font-weight: 800; margin-bottom: 1.25rem; }
.xp-cta{ display: inline-flex; align-items: center; gap: .5rem; font-weight: 800; color: var(--accent); text-decoration: none; }
.xp-cta i{ background: var(--accent); color: #fff; border-radius: 6px; padding: .25rem .35rem; font-size: .9rem; }
.xp-cta:hover{ filter: brightness(.93); }

.xp-progress{ display: flex; justify-content: center; }
.xp-track{ position: relative; width: min(560px, 70%); height: 16px; background: #d9dadd; border-radius: 999px; }
.xp-thumb{
  position: absolute; top: 50%; transform: translateY(-50%); left: 4px;
  width: 22px; height: 22px; background: #0c1a4b; border-radius: 50%;
  box-shadow: 0 2px 6px rgba(0,0,0,.15); cursor: grab; transition: left .2s ease;
}
.xp-thumb.dragging{ cursor: grabbing; transition: none; }

:root[data-theme="dark"] .xp-role{ color: #e3e7f3; }
:root[data-theme="dark"] .xp-dates{ color: #cbd5e1; }
:root[data-theme="dark"] .xp-track{ background:#2b3040; }
:root[data-theme="dark"] .xp-thumb{ background:#1e2a55; }

@media (max-width: 575.98px){ .xp-card{ flex-basis: 85vw; } }

/**************************************
 * CLIENTS CAROUSEL
 **************************************/
.client-carousel { overflow: hidden; position: relative; width: 100%; }
.client-track { display: flex; gap: 3rem; width: max-content; animation: scroll-left 25s linear infinite; }
.client-logo {
  max-height: 64px; width: auto; object-fit: contain; flex-shrink: 0;
  filter: grayscale(100%) contrast(.95) brightness(1.05);
  opacity: .9; transition: transform .2s ease, filter .2s ease;
}
.client-logo:hover { filter: none; opacity: 1; transform: scale(1.05); }
@keyframes scroll-left { 0%{ transform: translateX(0); } 100%{ transform: translateX(-50%); } }
@media (min-width: 992px){ .client-logo{ max-height:72px; } }
:root[data-theme="dark"] .client-logo{ filter: grayscale(100%) brightness(1.15) contrast(.95); }
:root[data-theme="dark"] .client-logo:hover{ filter: none; }

/**************************************
 * SKILLS (Filterable)
 **************************************/
.skills-section{
  background:#fff;
  border-top:1px solid var(--border);
  border-bottom:1px solid var(--border);
}
.skills-filter .btn-skill-filter{
  appearance:none;
  border:1px solid var(--border);
  background:#fff;
  color:var(--ink);
  font-weight:700;
  padding:.55rem 1rem;
  border-radius:999px;
  transition:all .2s ease;
}
.skills-filter .btn-skill-filter:hover{
  transform:translateY(-1px);
  box-shadow:0 6px 18px rgba(2,6,23,.08);
}
.skills-filter .btn-skill-filter.active{
  background:var(--accent);
  color:#fff;
  border-color:var(--accent);
}
.skills-grid{
  display:grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap:1.25rem 1.25rem;
}
.skill-card{
  display:flex;
  align-items:center;
  gap:.75rem;
  padding:1rem 1.1rem;
  border-radius:999px;
  background:#f6f7fb;
  border:1px solid var(--border);
  box-shadow:0 8px 26px rgba(2,6,23,.06);
  font-weight:800;
  color:#283554;
  transition:transform .18s ease, box-shadow .18s ease, background .18s ease;
}
.skill-card:hover{
  transform:translateY(-2px);
  box-shadow:0 12px 32px rgba(2,6,23,.10);
  background:#ffffff;
}
/* collapse filtered-out items so grid repacks */
.skill-card[hidden]{ display:none !important; }
.skill-icon{ width:40px; height:40px; object-fit:contain; }

/* Dark mode for skills */
:root[data-theme="dark"] .skills-section{ background:#0f1424; }
:root[data-theme="dark"] .skills-filter .btn-skill-filter{ background:#0f1424; color:#e5e7eb; border-color:#1f2937; }
:root[data-theme="dark"] .skills-filter .btn-skill-filter.active{ background:var(--accent); color:#fff; border-color:var(--accent); }
:root[data-theme="dark"] .skill-card{ background:#111827; border-color:#1f2937; color:#e5e7eb; }

/**************************************
 * SOFT SKILLS
 **************************************/
.soft-skills-section{
  background:#fff;
  border-top:1px solid var(--border);
  border-bottom:1px solid var(--border);
}
:root[data-theme="dark"] .soft-skills-section{ background:#0f1424; }

.soft-grid{
  display:grid;
  grid-template-columns: repeat( auto-fit, minmax(260px, 1fr) );
  gap:1.25rem 1.25rem;
}
.soft-card{
  position: relative;
  padding:1rem 1rem 1.05rem 1rem;
  border-radius:14px;
  background:var(--surface-alt);
  border:1px solid var(--border);
  box-shadow:0 10px 26px rgba(2,6,23,.06);
  transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease;
  outline: none;
}
.soft-card:hover{
  transform: translateY(-2px);
  box-shadow:0 14px 34px rgba(2,6,23,.10);
  border-color: #e6e8ec;
}
.soft-card:focus-visible{
  border-color: var(--link);
  box-shadow: 0 0 0 2px color-mix(in oklab, var(--link) 45%, transparent);
}
.soft-card.is-active{
  border-color: var(--link);
  box-shadow: 0 0 0 2px color-mix(in oklab, var(--link) 55%, transparent);
}
.soft-title{ margin:0 0 .35rem 0; font-weight:800; color:#283554; }
.soft-copy{ margin:0; color:var(--muted); line-height:1.45; }
:root[data-theme="dark"] .soft-title{ color:#e3e7f3; }
.soft-card::after{
  content:"";
  position:absolute; right:12px; top:12px;
  width:8px; height:8px; border-radius:50%;
  background:var(--accent); opacity:.9;
}

/**************************************
 * ARTICLES — Cards + Carousel
 **************************************/
.article-card{
  aspect-ratio: 1 / 1;
  display: grid;
  grid-template-rows: 55% 1fr auto; /* media / body / actions */
  gap: 1.2rem;
  background: var(--surface-alt);
  border: 1px solid var(--border);
  border-radius: 14px;
  box-shadow: 0 10px 26px rgba(2,6,23,.06);
  padding: .9rem;
  width: 100%;
  transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease;
}
.article-card:hover{
  transform: translateY(-3px);
  box-shadow: 0 16px 36px rgba(2,6,23,.12);
  border-color:#e6e8ec;
}
.article-media{
  position: relative;
  overflow: hidden;
  border-radius: 12px;
  background: linear-gradient(180deg, #eaeef6 0%, #f7f9ff 100%);
  min-height: 120px;
}
.article-img{
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transform: scale(1);
  transition: transform .35s ease;
}
.article-card:hover .article-img{ transform: scale(1.03); }
.article-title{ font-weight: 800; margin: 0 0 .35rem 0; color: #283554; }
.article-excerpt{ margin: 0; color: var(--muted); line-height: 1.45; }
.article-actions{ display: flex; align-items: center; gap: .5rem; }

.btn-read{
  background: var(--accent);
  color: #fff;
  font-weight: 700;
  border-radius: 10px;
  padding: .45rem .8rem;
  border: none;
}
.btn-read:hover{ filter: brightness(.95); color: #fff; }

/* Carousel spacing */
#articlesCarousel .carousel-item{ padding: .25rem; }
#articlesCarousel .row.g-3 > [class*="col-"]{ display: flex; }

/* Hide default Bootstrap in-carousel arrows (we use external ones) */
#articlesCarousel .carousel-control-prev,
#articlesCarousel .carousel-control-next{ display: none !important; }

/* External arrows */
.articles-arrows{
  display: flex;
  justify-content: center;
  gap: .75rem;
  margin-top: 1rem;
}
.arrow-btn{
  --size: 48px;
  width: var(--size);
  height: var(--size);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--surface);
  color: var(--ink);
  border: 1px solid var(--border);
  border-radius: 999px;
  box-shadow: 0 8px 24px rgba(2,6,23,.08);
  transition: transform .15s ease, box-shadow .15s ease, border-color .15s ease, background .15s ease;
}
.arrow-btn:hover{
  transform: translateY(-1px);
  box-shadow: 0 12px 30px rgba(2,6,23,.12);
  border-color: color-mix(in oklab, var(--accent) 40%, var(--border));
}
.arrow-btn:active{
  transform: translateY(0);
  box-shadow: 0 6px 16px rgba(2,6,23,.10);
}
.arrow-btn:focus-visible{
  outline: none;
  border-color: var(--link);
  box-shadow: 0 0 0 3px color-mix(in oklab, var(--link) 35%, transparent);
}
.arrow-btn svg{ display: block; }

/* Modals match theme */
.modal-content.bg-surface{
  background: var(--surface);
  border: 1px solid var(--border);
  color: var(--ink);
}

/* Dark mode tweaks for articles and arrows */
:root[data-theme="dark"] .article-card{ background:#111827; border-color:#1f2937; }
:root[data-theme="dark"] .article-title{ color:#e3e7f3; }
:root[data-theme="dark"] .article-media{ background: linear-gradient(180deg, #0f1424 0%, #141b2a 100%); }
:root[data-theme="dark"] .arrow-btn{
  background: #0f1424;
  border-color: #1f2937;
  color: var(--ink);
  box-shadow: 0 8px 24px rgba(0,0,0,.35);
}
:root[data-theme="dark"] .arrow-btn:hover{
  border-color: color-mix(in oklab, var(--accent) 45%, #1f2937);
  box-shadow: 0 12px 28px rgba(0,0,0,.45);
}
:root[data-theme="dark"] .modal-content.bg-surface{
  background: var(--surface);
  border-color:#1f2937;
  color: var(--ink);
}

/**************************************
 * CONTACT
 **************************************/
.contact-section{
  border-top:1px solid var(--border);
  border-bottom:1px solid var(--border);
}
.fw-600{ font-weight:600; }
.fw-800{ font-weight:800; }

/* Info card */
.contact-info-card .contact-list{ margin:0; }
.contact-item{
  display:flex; gap:.9rem; align-items:flex-start;
  padding:.7rem .25rem; border-bottom:1px dashed var(--border);
}
.contact-item:last-child{ border-bottom:0; }
.ci-icon{
  flex:0 0 38px; height:38px; width:38px; border-radius:50%;
  display:grid; place-items:center;
  background:#0c1a4b; color:#fff;
  box-shadow:0 8px 20px rgba(12,26,75,.18);
}
.ci-body{ line-height:1.25; }
.ci-label{ font-weight:800; color:var(--ink); }
.ci-text, .ci-link{ color:var(--muted); }
.ci-link:hover{ color:var(--link); }

/* Buttons */
.btn-accent{
  background:var(--accent); color:#fff; font-weight:800;
  border:none; border-radius:10px; padding:.6rem 1rem;
}
.btn-accent:hover{ filter:brightness(.95); color:#fff; }

.btn-outline-ink{
  background:transparent; color:var(--ink); font-weight:800;
  border:1px solid var(--border); border-radius:10px; padding:.6rem 1rem;
}
.btn-outline-ink:hover{ color:var(--link); border-color:var(--link); }

/* Form controls */
.contact-card .form-label{ color:var(--ink); }
.form-control{
  background:var(--surface); color:var(--ink);
  border:1px solid var(--border); border-radius:12px;
  padding:.7rem .9rem;
  transition: border-color .15s ease, box-shadow .15s ease, background .15s ease;
}
.form-control::placeholder{ color:color-mix(in oklab, var(--muted) 70%, transparent); }
.form-control:focus{
  border-color: var(--link);
  box-shadow: 0 0 0 3px color-mix(in oklab, var(--link) 25%, transparent);
  background:var(--surface);
}
.form-check-input{ border-color:var(--border); }
.form-check-input:focus{
  box-shadow: 0 0 0 3px color-mix(in oklab, var(--link) 25%, transparent);
  border-color: var(--link);
}
.form-check-input:checked{
  background-color: var(--link);
  border-color: var(--link);
}

/* Validation states */
.was-validated .form-control:invalid,
.form-control.is-invalid{ border-color:#ef4444; }
.was-validated .form-control:valid,
.form-control.is-valid{ border-color:#22c55e; }
.invalid-feedback{ font-size:.85rem; }

/* Alerts */
.contact-alert{
  border-radius:12px; border:1px solid var(--border);
}

/* Dark mode tweaks */
:root[data-theme="dark"] .ci-icon{ background:#1e2a55; }
:root[data-theme="dark"] .btn-outline-ink{ color:var(--ink); border-color:#1f2937; }
:root[data-theme="dark"] .btn-outline-ink:hover{ color:var(--link); border-color:var(--link); }
:root[data-theme="dark"] .form-control{
  background:#111827; border-color:#1f2937; color:var(--ink);
}
:root[data-theme="dark"] .form-control:focus{
  background:#111827; border-color:var(--link);
  box-shadow:0 0 0 3px color-mix(in oklab, var(--link) 25%, transparent);
}
:root[data-theme="dark"] .contact-alert{ border-color:#1f2937; }

/**************************************
 * FOOTER (screenshot style)
 **************************************/
.site-footer{
  background: #51565c;
  border-top: 1px solid #ffffff66;
  color: #e5e7eb;
}
.site-footer .footer-content{
  display: flex;
  align-items: center;
  justify-content: center;
  gap: .5rem;
  padding: .45rem .75rem;
  font-size: .95rem;
  letter-spacing: .01em;
  white-space: nowrap;
}
.site-footer .copy-badge{
  width: 22px; height: 22px;
  display: inline-grid;
  place-items: center;
  border: 2px solid #d1d5db;
  border-radius: 50%;
  line-height: 1;
  font-size: .85rem;
  color: #e5e7eb;
  opacity: .95;
}
.site-footer .year{ color: #e5e7eb; margin-left: .15rem; }
.site-footer .owner{
  color: var(--accent);
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: .02em;
}
.site-footer .rights{ color: #e5e7eb; opacity: .95; }

@media (max-width: 575.98px){
  .site-footer .footer-content{
    font-size: .85rem;
    gap: .3rem;
    flex-wrap: wrap;
    text-align: center;
    padding: .6rem .5rem;
  }
  .site-footer .copy-badge{
    width: 18px; height: 18px; font-size: .75rem;
  }
  .site-footer .owner{
    font-size: .8rem;
  }
}

@media (max-width: 420px){
  .site-footer .footer-content{
    font-size: .8rem;
    gap: .25rem;
    flex-direction: column;
    line-height: 1.3;
  }
  .site-footer .copy-badge{
    width: 16px; height: 16px; font-size: .7rem;
  }
  .site-footer .owner{
    font-size: .75rem;
  }
}

/* Dark footer */
:root[data-theme="dark"] .site-footer,
html[data-theme="dark"] .site-footer{
  background: #3f454c;
  border-top-color: #ffffff33;
  color: #e5e7eb;
}
:root[data-theme="dark"] .site-footer .copy-badge{
  border-color: #cbd5e1;
  color: #e5e7eb;
}

/**************************************
 * FLOATING GALLERY BUTTON
 **************************************/
.gallery-float-btn{
  position: fixed;
  bottom: 20px;
  right: 20px;
  width: 60px;
  height: 60px;
  background: var(--accent);
  color: #fff;
  border: none;
  border-radius: 50%;
  box-shadow: 0 4px 20px rgba(0,0,0,.15);
  font-size: 1.2rem;
  cursor: pointer;
  z-index: 1000;
  transition: transform .2s ease, box-shadow .2s ease;
}
.gallery-float-btn:hover{
  transform: translateY(-2px);
  box-shadow: 0 6px 25px rgba(0,0,0,.2);
  color: #fff;
}

/**************************************
 * GALLERY MODAL
 **************************************/
/* Fixed size modal */
#galleryModal .modal-dialog{
  max-width: 90vw;
  width: 1200px;
  height: 80vh;
  margin: 2rem auto;
}
#galleryModal .modal-content{
  height: 100%;
  display: flex;
  flex-direction: column;
}
#galleryModal .modal-body{
  flex: 1;
  overflow-y: auto;
  padding: 1.5rem;
}

.gallery-filter .btn-gallery-filter{
  background: var(--surface);
  border: 1px solid var(--border);
  color: var(--ink);
  font-weight: 600;
  padding: .5rem 1rem;
  border-radius: 25px;
  transition: all .2s ease;
}
.gallery-filter .btn-gallery-filter:hover{
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(0,0,0,.1);
}
.gallery-filter .btn-gallery-filter.active{
  background: var(--accent);
  color: #fff;
  border-color: var(--accent);
}

.gallery-grid{
  columns: 280px;
  column-gap: 1rem;
  min-height: 400px;
}
.gallery-item{
  border-radius: 12px;
  overflow: hidden;
  box-shadow: 0 4px 15px rgba(0,0,0,.1);
  transition: transform .2s ease, box-shadow .2s ease;
  break-inside: avoid;
  margin-bottom: 1rem;
  display: inline-block;
  width: 100%;
}
.gallery-item:hover{
  transform: translateY(-3px);
  box-shadow: 0 8px 25px rgba(0,0,0,.15);
}
.gallery-img{
  width: 100%;
  height: auto;
  display: block;
  vertical-align: top;
}
.gallery-item[hidden]{
  display: none !important;
}

/* Gallery overlay for academic items */
.gallery-overlay{
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  background: linear-gradient(transparent, rgba(0,0,0,.8));
  color: #fff;
  padding: 1rem;
  transform: translateY(100%);
  transition: transform .3s ease;
}
.gallery-item:hover .gallery-overlay{
  transform: translateY(0);
}
.gallery-overlay h6{
  margin: 0 0 .25rem 0;
  font-weight: 700;
  font-size: .9rem;
}
.gallery-overlay p{
  margin: 0;
  font-size: .8rem;
  opacity: .9;
}
.gallery-item{
  position: relative;
  overflow: hidden;
}

@media (max-width: 767.98px){
  .gallery-float-btn{
    width: 50px;
    height: 50px;
    bottom: 15px;
    right: 15px;
    font-size: 1rem;
  }
  #galleryModal .modal-dialog{
    max-width: 95vw;
    width: 95vw;
    height: 85vh;
    margin: 1rem auto;
  }
  #galleryModal .modal-body{
    padding: 1rem;
  }
  .gallery-grid{
    columns: 200px;
    column-gap: .75rem;
  }
  .gallery-item{
    margin-bottom: .75rem;
  }
}

/**************************************
 * GALLERY AUTO-SCROLL
 **************************************/
.gallery-scroll {
  overflow: hidden;
  position: relative;
  width: 100%;
}
.gallery-track {
  display: flex;
  gap: 1rem;
  width: max-content;
  animation: scroll-gallery 20s linear infinite;
}
.gallery-scroll-img {
  height: 200px;
  width: auto;
  object-fit: cover;
  border-radius: 8px;
  box-shadow: 0 4px 15px rgba(0,0,0,.1);
  transition: transform .2s ease;
}
.gallery-scroll-img:hover {
  transform: scale(1.05);
}
@keyframes scroll-gallery {
  0% { transform: translateX(0); }
  100% { transform: translateX(-50%); }
}
:root[data-theme="dark"] .gallery-scroll-img {
  box-shadow: 0 4px 15px rgba(0,0,0,.3);
}

/**************************************
 * SCROLL TO TOP BUTTON
 **************************************/
.scroll-top-btn{
  position: fixed;
  bottom: 90px;
  right: 20px;
  width: 60px;
  height: 60px;
  background: var(--surface);
  color: var(--ink);
  border: 1px solid var(--border);
  border-radius: 50%;
  box-shadow: 0 4px 15px rgba(0,0,0,.1);
  font-size: 1.2rem;
  cursor: pointer;
  z-index: 1000;
  opacity: 0;
  visibility: hidden;
  transform: translateY(-20px);
  transition: all .3s ease;
}
.scroll-top-btn.show{
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}
.scroll-top-btn:hover{
  transform: translateY(-2px);
  box-shadow: 0 6px 20px rgba(0,0,0,.15);
  color: var(--accent);
}

@media (max-width: 767.98px){
  .scroll-top-btn{
    width: 50px;
    height: 50px;
    bottom: 80px;
    right: 15px;
    font-size: 1rem;
  }
}
/**************************************
 * SCROLL REVEAL (drop-in from top)
 * - No HTML changes required.
 * - JS adds .will-drop to targets and .is-visible when in view.
 * - Tune animation via vars below.
 **************************************/
:root{
  --drop-distance: 20px;          /* how far items start above */
  --drop-duration: .6s;           /* animation length */
  --drop-ease: cubic-bezier(.22,1,.36,1); /* snappy ease-out */
}

.will-drop{
  opacity: 0;
  transform: translateY(calc(-1 * var(--drop-distance)));
  will-change: transform, opacity;
}
.will-drop.is-visible{
  opacity: 1;
  transform: none;
  animation: dropIn var(--drop-duration) var(--drop-ease) both;
  animation-delay: var(--drop-delay, 0ms);
}

@keyframes dropIn{
  from{ opacity:0; transform: translateY(calc(-1 * var(--drop-distance))); }
  to  { opacity:1; transform: none; }
}

/* Respect users who prefer reduced motion */
@media (prefers-reduced-motion: reduce){
  .will-drop,
  .will-drop.is-visible{
    opacity: 1 !important;
    transform: none !important;
    animation: none !important;
    transition: none !important;
  }
}
/* === Theme toggle (button + icon) === */
.theme-toggle{
  background: transparent;
  border: 0;
  padding: .35rem .5rem;
  border-radius: 999px;
  line-height: 0;
  cursor: pointer;
  color: #fff; /* navbar is dark → keep icon white */
}
.theme-toggle:focus-visible{
  outline: 2px solid var(--link);
  outline-offset: 2px;
}

/* keep it white in both top + glass states */
#topnav .theme-toggle{ color:#fff; }

/* icon color vars (you can tweak if needed) */
:root{
  --icon-fill: #ffffff;
  --icon-fill-hover: #ffffff;
}
:root[data-theme="dark"]{
  --icon-fill: #e5e7eb;
  --icon-fill-hover: #ffffff;
}

/* sun/moon animation pieces */
.sun-and-moon > :is(.moon, .sun, .sun-beams){ transform-origin: center; }
.sun-and-moon > :is(.moon, .sun){ fill: var(--icon-fill); }
.theme-toggle:is(:hover, :focus-visible) > .sun-and-moon > :is(.moon, .sun){ fill: var(--icon-fill-hover); }
.sun-and-moon > .sun-beams{ stroke: var(--icon-fill); stroke-width: 2px; }
.theme-toggle:is(:hover, :focus-visible) .sun-and-moon > .sun-beams{ stroke: var(--icon-fill-hover); }

[data-theme="dark"] .sun-and-moon > .sun{ transform: scale(1.75); }
[data-theme="dark"] .sun-and-moon > .sun-beams{ opacity: 0; }
[data-theme="dark"] .sun-and-moon > .moon > circle{ transform: translateX(-7px); }
@supports (cx: 1){
  [data-theme="dark"] .sun-and-moon > .moon > circle{ cx: 17; transform: translateX(0); }
}

/* motion (respects reduced-motion) */
@media (prefers-reduced-motion: no-preference){
  .sun-and-moon > .sun{ transition: transform .5s var(--ease-elastic-3); }
  .sun-and-moon > .sun-beams{ transition: transform .5s var(--ease-elastic-4), opacity .5s var(--ease-3); }
  .sun-and-moon .moon > circle{ transition: transform .25s var(--ease-out-5); }
  @supports (cx: 1){
    .sun-and-moon .moon > circle{ transition: cx .25s var(--ease-out-5); }
  }
  [data-theme="dark"] .sun-and-moon > .sun{
    transition-timing-function: var(--ease-3);
    transition-duration: .25s;
    transform: scale(1.75);
  }
  [data-theme="dark"] .sun-and-moon > .sun-beams{
    transition-duration: .15s;
    transform: rotateZ(-25deg);
  }
  [data-theme="dark"] .sun-and-moon > .moon > circle{
    transition-duration: .5s;
    transition-delay: .25s;
  }
}
/**************************************
 * THEME TOKENS
 **************************************/
:root{
  --ink:#0f172a;
  --muted:#475569;
  --bg:#ffffff;
  --surface:#ffffff;
  --surface-alt:#f8fafc;
  --border:#e5e7eb;
  --accent:#ff8a00;
  --link:#0b3d91;

  /* Preloader timing (tweakable) */
  --pre-draw-ms: 6000ms;
  --pre-fill-ms: 900ms;
  --pre-reveal-ms: 500ms;

  --pre-min-ms: 11000ms; 
}

:root[data-theme="dark"],
html[data-theme="dark"]{
  --ink:#e5e7eb;
  --muted:#a3a3a3;
  --bg:#0b1220;
  --surface:#111827;
  --surface-alt:#0f172a;
  --border:#1f2937;
  --accent:#ff9a1f;
  --link:#60a5fa;
}

/**************************************
 * BASE
 **************************************/
html,body{
  font-family:Inter, system-ui, -apple-system, Segoe UI, Roboto, "Helvetica Neue", Arial, "Noto Sans";
  color:var(--ink);
  background:var(--bg);
}
/**************************************
 * PRELOADER — background grid + cursive handwriting
 **************************************/
.preloader{
  position: fixed; inset: 0; z-index: 9999;
  /* === GRID BACKGROUND (from your snippet) === */
  --grid-size: clamp(32px, 6vw, 55px);           /* tweak square size here */
  --grid-line: color-mix(in oklab, var(--ink) 14%, transparent);
  --grid-bg: color-mix(in oklab, var(--surface-alt) 88%, var(--bg));
  background-color: var(--grid-bg);
  background-image:
    linear-gradient(0deg,
      transparent 24%, var(--grid-line) 25%, var(--grid-line) 26%,
      transparent 27%, transparent 74%, var(--grid-line) 75%, var(--grid-line) 76%, transparent 77%, transparent),
    linear-gradient(90deg,
      transparent 24%, var(--grid-line) 25%, var(--grid-line) 26%,
      transparent 27%, transparent 74%, var(--grid-line) 75%, var(--grid-line) 76%, transparent 77%, transparent);
  background-size: var(--grid-size) var(--grid-size);
  /* ========================================== */

  display: grid; place-items: center;
  transition: opacity .4s ease, visibility .4s ease;
}

:root[data-theme="dark"] .preloader{
  /* slightly stronger lines in dark */
  --grid-line: color-mix(in oklab, var(--ink) 20%, transparent);
  --grid-bg: color-mix(in oklab, var(--bg) 92%, var(--surface-alt));
}

/* keep the rest of your preloader styles as-is */
.preloader__inner{ width:min(92vw,1100px); aspect-ratio:4/1; display:grid; place-items:center; }
.signature{ width:100%; height:auto; }
.preloader-sub{ margin-top:.5rem; color:var(--muted); font-weight:600; }
.sig{
  font-family:"Great Vibes", cursive;
  font-size:clamp(40px, 10vw, 120px);
  letter-spacing:.02em;
  dominant-baseline:middle;
  fill:transparent;
  color:var(--accent);
}
.sig--stroke{
  stroke:currentColor; stroke-width:2.4; stroke-linecap:round; stroke-linejoin:round;
  stroke-dasharray:1800; stroke-dashoffset:1800;
  animation:
    preloader-draw var(--pre-draw-ms) linear forwards,
    preloader-fade-stroke .4s ease forwards calc(var(--pre-draw-ms) + var(--pre-fill-ms));
}
.sig--fill{ fill:currentColor; }
.reveal-rect{
  transform-origin:left center; transform:scaleX(0);
  animation: preloader-reveal var(--pre-reveal-ms) linear forwards;
}
.preloader.preloader--hide{ opacity:0; visibility:hidden; pointer-events:none; }
@keyframes preloader-draw{ to{ stroke-dashoffset:0; } }
@keyframes preloader-reveal{ to{ transform:scaleX(1); } }
@keyframes preloader-fade-stroke{ to{ opacity:.1; } }


/**************************************
 * NAVBAR (glassy on scroll)
 **************************************/
.navbar{ background:transparent !important; transition: background .3s ease, box-shadow .3s ease; }
.navbar .navbar-toggler-icon{ filter:invert(1) }
.navbar .navbar-toggler{ border-color:#ffffff33 }

.custom-navbar{
  background:#0c1a4b;
  border-radius:50px;
  padding:.5rem 1.5rem;
  margin:1rem auto;
  max-width:1100px;
  box-shadow:0 4px 12px rgba(0,0,0,.15);
  transition: background .3s ease, backdrop-filter .3s ease, box-shadow .3s ease;
}
.custom-navbar .nav-link{
  color:#fff; font-weight:600; position:relative; padding:.5rem .75rem;
}
/* Keep text white, but let underline show */
.custom-navbar .nav-link.active,
.custom-navbar .nav-link:hover {
  color:#fff;
}

/* Animated orange bar */
.custom-navbar .navbar-nav {
  position: relative;
}
.custom-navbar .navbar-nav::after {
  content: "";
  position: absolute;
  bottom: 0;
  height: 3px;
  background: #ff6a00;
  border-radius: 2px;
  transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
  opacity: 0;
}
.custom-navbar .navbar-nav.has-active::after {
  opacity: 1;
}

/* Hover effect for non-active links */
.custom-navbar .nav-link:hover:not(.active)::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0; margin: auto;
  width: 60%; height: 3px;
  background: #ff6a00;
  border-radius: 2px;
  opacity: 0.4;
}

/* Mobile adjustments */
@media (max-width: 767.98px){
  .custom-navbar .navbar-nav::after {
    height: 2px;
    bottom: -2px;
  }
  .custom-navbar .nav-link:hover:not(.active)::after {
    left: 50%;
    transform: translateX(-50%);
    right: auto;
    margin: 0;
    width: 30px;
    height: 2px;
    bottom: -2px;
  }
}
.btn-download{
  background:#ff6a00; color:#fff; font-weight:700; border-radius:25px; padding:.45rem 1rem;
}
.btn-download:hover{ background:#e65c00; color:#fff }

/* Glass effect once scrolled */
.navbar.scrolled .custom-navbar{
  background: color-mix(in oklab, var(--surface) 30%, transparent);
  backdrop-filter: blur(12px) saturate(140%);
  box-shadow: 0 8px 24px rgba(2,6,23,.18);
  border: 1px solid color-mix(in oklab, var(--border) 60%, transparent);
}

/**************************************
 * THEME TOGGLE (Sun–Moon)
 **************************************/
.theme-toggle{
  appearance:none; border:0; background:transparent; cursor:pointer;
  width:40px; height:40px; display:grid; place-items:center; border-radius:10px;
  color:#fff;
}
.theme-toggle:focus-visible{
  outline: none;
  box-shadow: 0 0 0 3px color-mix(in oklab, var(--link) 35%, transparent);
}
.sun-and-moon > :is(.moon, .sun, .sun-beams){ transform-origin:center; }
.sun-and-moon > :is(.moon, .sun){ fill: currentColor; }
.theme-toggle:is(:hover, :focus-visible) > .sun-and-moon > :is(.moon, .sun){ color: #ffd699; }
.sun-and-moon > .sun-beams{ stroke: currentColor; stroke-width:2px; }
.theme-toggle:is(:hover, :focus-visible) .sun-and-moon > .sun-beams{ color: #ffd699; }

[data-theme="dark"] .sun-and-moon > .sun{ transform: scale(1.75); }
[data-theme="dark"] .sun-and-moon > .sun-beams{ opacity: 0; }
[data-theme="dark"] .sun-and-moon > .moon > circle{ transform: translateX(-7px); }
@supports (cx: 1){
  [data-theme="dark"] .sun-and-moon > .moon > circle{ cx: 17; transform: translateX(0); }
}
@media (prefers-reduced-motion: no-preference){
  .sun-and-moon > .sun{ transition: transform .5s var(--ease-elastic-3); }
  .sun-and-moon > .sun-beams{ transition: transform .5s var(--ease-elastic-4), opacity .5s var(--ease-3); }
  .sun-and-moon .moon > circle{ transition: transform .25s var(--ease-out-5); }
  @supports (cx: 1){
    .sun-and-moon .moon > circle{ transition: cx .25s var(--ease-out-5); }
  }
  [data-theme="dark"] .sun-and-moon > .sun{
    transition-timing-function: var(--ease-3);
    transition-duration: .25s; transform: scale(1.75);
  }
  [data-theme="dark"] .sun-and-moon > .sun-beams{
    transition-duration: .15s; transform: rotateZ(-25deg);
  }
  [data-theme="dark"] .sun-and-moon > .moon > circle{
    transition-duration: .5s; transition-delay: .25s;
  }
}

/**************************************
 * ABOUT — Workday logo nudge on small screens
 **************************************/
.workday-logo{height:auto; width:269px; max-width:35vw; margin-left: 180px;}
@media (max-width: 991.98px){
  #about .right-content-img .workday-logo{
    margin-left: clamp(16px, 8vw, 48px);
    max-width: 78vw;
    display:block;
  }
}

/**************************************
 * DROP-IN ANIMATION (text from top)
 **************************************/
.drop-in{
  opacity: 0; transform: translateY(-18px);
  transition: opacity .6s ease, transform .6s ease;
}
.drop-in.is-in{
  opacity: 1; transform: translateY(0);
}
/* Kill drop-in/reveal animations inside Bootstrap modals */
.modal .will-drop,
.modal .will-drop.is-visible,
.modal .drop-in,
.modal .drop-in.is-in {
  opacity: 1 !important;
  transform: none !important;
  animation: none !important;
  transition: none !important;
}

/* Fixed thumb size via CSS var (change once, everywhere) */
:root { --xp-thumb: 22px; }

/* Progress track (keep your width/height, add padding to match JS PADDING_X) */
.xp-track {
  position: relative;
  width: min(560px, 70%);
  height: 16px;
  background: #d9dadd;
  border-radius: 999px;
  padding: 0 4px; /* <-- must match PADDING_X in JS */
}

/* Circular knob that never stretches */
.xp-thumb{
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  left: 4px;
  width: var(--xp-thumb);
  height: var(--xp-thumb);
  background: #0c1a4b;
  border-radius: 50%;
  box-shadow: 0 2px 6px rgba(0,0,0,.15);
  cursor: grab;
  transition: left .2s ease;
}
.xp-thumb.dragging{ cursor: grabbing; transition: none; }

/* Optional: dark theme */
:root[data-theme="dark"] .xp-track{ background:#2b3040; }
:root[data-theme="dark"] .xp-thumb{ background:#1e2a55; }
