/* =====================================================================
   kasapdev — Developer Portfolio · custom layer on top of base.css
   All colors reference base.css tokens so dark + light themes stay in sync.
   ===================================================================== */

/* ===================== NAVBAR ===================== */
.nav {
  position: sticky;
  top: 0;
  z-index: 50;
  transition: background var(--dur-2) var(--ease), border-color var(--dur-2),
    box-shadow var(--dur-2), backdrop-filter var(--dur-2);
  border-bottom: 1px solid transparent;
}
.nav__inner {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  height: 68px;
}
/* Scrolled state — glass blur once past ~60px */
.nav.is-scrolled {
  background: var(--glass);
  -webkit-backdrop-filter: blur(18px) saturate(160%);
  backdrop-filter: blur(18px) saturate(160%);
  border-bottom-color: var(--border);
  box-shadow: var(--shadow-sm);
}
.nav__brand { font-size: 1.1rem; }
.nav__brand:hover { text-decoration: none; }

.nav__links {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin-left: auto;
}
.nav__link {
  position: relative;
  color: var(--text-secondary);
  font-weight: 600;
  font-size: 14px;
  padding: 8px 14px;
  border-radius: var(--radius-md);
  transition: color var(--dur-1), background var(--dur-1);
}
.nav__link:hover { color: var(--text); background: var(--surface-2); text-decoration: none; }
.nav__link::after {
  content: "";
  position: absolute;
  left: 14px; right: 14px; bottom: 4px;
  height: 2px; border-radius: 2px;
  background: var(--gradient-brand);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform var(--dur-2) var(--ease);
}
.nav__link.is-active { color: var(--text); }
.nav__link.is-active::after { transform: scaleX(1); }

.nav__actions { display: flex; align-items: center; gap: var(--space-2); }
.nav__burger { display: none; }

/* Theme-toggle icon swap (core.js sets data-theme on <html>) */
[data-theme-toggle] .icon-moon { display: none; }
[data-theme="light"] [data-theme-toggle] .icon-sun { display: none; }
[data-theme="light"] [data-theme-toggle] .icon-moon { display: inline; }

/* ===================== MOBILE DRAWER ===================== */
.drawer-backdrop {
  position: fixed; inset: 0; z-index: 60;
  background: rgba(4,5,9,.55);
  -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px);
  animation: fadeIn .2s var(--ease);
}
.drawer {
  position: fixed; top: 0; right: 0; bottom: 0; z-index: 70;
  width: min(320px, 84vw);
  display: flex; flex-direction: column; gap: var(--space-4);
  padding: var(--space-5);
  background: var(--surface-solid);
  border-left: 1px solid var(--border-strong);
  box-shadow: var(--shadow-lg);
  transform: translateX(100%);
  transition: transform var(--dur-3) var(--ease);
}
[data-theme="light"] .drawer { background: #fff; }
.drawer.is-open { transform: translateX(0); }
.drawer__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--space-2); }
.drawer__links { display: flex; flex-direction: column; gap: var(--space-1); }
.drawer__link {
  color: var(--text); font-weight: 600; font-size: 1.05rem;
  padding: 12px 14px; border-radius: var(--radius-md);
  transition: background var(--dur-1), color var(--dur-1);
}
.drawer__link:hover { background: var(--surface-2); text-decoration: none; }
.drawer .btn--block { margin-top: auto; }

/* ===================== HERO ===================== */
.hero {
  position: relative;
  min-height: calc(100vh - 68px);
  display: flex;
  align-items: center;
  padding: var(--space-16) 0 var(--space-12);
  overflow: hidden;
}
/* Animated dot-grid + gradient backdrop */
.hero::before {
  content: "";
  position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background-image:
    linear-gradient(var(--border) 1px, transparent 1px),
    linear-gradient(90deg, var(--border) 1px, transparent 1px);
  background-size: 46px 46px;
  -webkit-mask-image: radial-gradient(70% 70% at 50% 40%, #000 0%, transparent 75%);
          mask-image: radial-gradient(70% 70% at 50% 40%, #000 0%, transparent 75%);
  opacity: .6;
}
.hero__glow {
  position: absolute; z-index: -1; pointer-events: none;
  top: -10%; right: -5%;
  width: 60vw; height: 60vw; max-width: 760px; max-height: 760px;
  background: radial-gradient(closest-side, var(--bg-grad-1), transparent 70%);
  filter: blur(20px);
  animation: heroFloat 14s var(--ease) infinite alternate;
}
@keyframes heroFloat {
  from { transform: translate3d(0,0,0) scale(1); }
  to   { transform: translate3d(-3%,4%,0) scale(1.08); }
}
.hero__inner {
  display: grid;
  grid-template-columns: 1.15fr .85fr;
  align-items: center;
  gap: var(--space-12);
}
.hero__copy { max-width: 640px; }
.hero__eyebrow {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 13px; font-weight: 600; color: var(--text-secondary);
  background: var(--surface-2); border: 1px solid var(--border);
  padding: 6px 14px; border-radius: var(--radius-full);
  margin-bottom: var(--space-5);
}
.hero__pulse {
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--success); box-shadow: 0 0 0 0 var(--success);
  animation: pulse 2.2s infinite;
}
@keyframes pulse {
  0%   { box-shadow: 0 0 0 0 rgba(34,197,94,.55); }
  70%  { box-shadow: 0 0 0 9px rgba(34,197,94,0); }
  100% { box-shadow: 0 0 0 0 rgba(34,197,94,0); }
}
.hero__title {
  font-size: clamp(2.4rem, 1.4rem + 4.6vw, 4.6rem);
  line-height: 1.04;
  margin-bottom: var(--space-5);
}
.hero__sub {
  font-size: clamp(1.05rem, .98rem + .4vw, 1.3rem);
  color: var(--text-secondary);
  max-width: 30ch;
  margin-bottom: var(--space-8);
}
.hero__cta { display: flex; gap: var(--space-3); flex-wrap: wrap; }
.hero__cta .btn { padding: 13px 22px; font-size: 15px; }

/* stagger the rise animation */
.hero__eyebrow { animation-delay: .05s; }
.hero__title   { animation-delay: .12s; }
.hero__sub     { animation-delay: .2s; }
.hero__cta     { animation-delay: .28s; }
.hero__code    { animation-delay: .36s; }

/* Floating code card */
.hero__code {
  width: 100%;
  max-width: 420px;
  margin-left: auto;
  padding: 0;
  overflow: hidden;
  box-shadow: var(--shadow-lg);
  animation-name: rise, codeFloat;
  animation-duration: .5s, 7s;
  animation-timing-function: var(--ease), ease-in-out;
  animation-delay: .36s, .9s;
  animation-iteration-count: 1, infinite;
  animation-direction: normal, alternate;
  animation-fill-mode: both, none;
}
@keyframes codeFloat {
  from { transform: translateY(0) rotate(-.4deg); }
  to   { transform: translateY(-12px) rotate(.4deg); }
}
.code__bar {
  display: flex; align-items: center; gap: 10px;
  padding: 12px 16px;
  background: var(--surface-2);
  border-bottom: 1px solid var(--border);
}
.code__dots { display: inline-flex; gap: 6px; }
.code__dots i { width: 11px; height: 11px; border-radius: 50%; background: var(--border-strong); }
.code__dots i:nth-child(1) { background: #ff5f57; }
.code__dots i:nth-child(2) { background: #febc2e; }
.code__dots i:nth-child(3) { background: #28c840; }
.code__file { margin-left: auto; font-size: 12px; color: var(--text-muted); }
.code__body {
  margin: 0; padding: var(--space-5) var(--space-4);
  font-size: 13.5px; line-height: 1.9; color: var(--text-secondary);
  white-space: pre; overflow-x: auto;
}
.code__body .ln { color: var(--text-muted); opacity: .55; margin-right: 12px; user-select: none; }
.code__body .c-kw  { color: var(--accent-pink); }
.code__body .c-fn  { color: var(--brand-400); }
.code__body .c-str { color: var(--success); }
.code__body .c-num { color: var(--accent-cyan); }

/* Scroll-down indicator */
.hero__scroll {
  position: absolute; left: 50%; bottom: var(--space-6);
  transform: translateX(-50%);
  display: flex; flex-direction: column; align-items: center; gap: 8px;
  color: var(--text-muted); font-size: 11px; font-weight: 600;
  letter-spacing: .14em; text-transform: uppercase;
  animation: bounce 2.4s var(--ease) infinite;
}
.hero__scroll:hover { color: var(--text); text-decoration: none; }
.hero__mouse {
  width: 24px; height: 38px; border: 2px solid var(--border-strong);
  border-radius: var(--radius-full); display: flex; justify-content: center; padding-top: 6px;
}
.hero__wheel {
  width: 4px; height: 8px; border-radius: 4px; background: var(--brand-400);
  animation: wheel 1.6s var(--ease) infinite;
}
@keyframes wheel { 0% { opacity: 0; transform: translateY(-4px); } 40% { opacity: 1; } 100% { opacity: 0; transform: translateY(8px); } }
@keyframes bounce { 0%,100% { transform: translateX(-50%) translateY(0); } 50% { transform: translateX(-50%) translateY(7px); } }

/* ===================== SECTIONS (shared) ===================== */
.section { padding: var(--space-20) 0; }
.section__head { max-width: 640px; margin-bottom: var(--space-12); }
.section__kicker {
  display: inline-block;
  font-family: var(--font-mono);
  font-size: 12px; font-weight: 600; letter-spacing: .08em;
  color: var(--brand-400);
  margin-bottom: var(--space-3);
}
.section__title { font-size: clamp(1.8rem, 1.3rem + 1.8vw, 2.6rem); }
.section__lead { color: var(--text-secondary); font-size: 1.08rem; margin: 0; }

/* Scroll-reveal */
.reveal {
  opacity: 0;
  transform: translateY(26px);
  transition: opacity .6s var(--ease), transform .6s var(--ease);
  will-change: opacity, transform;
}
.reveal.visible { opacity: 1; transform: none; }

/* ===================== ABOUT ===================== */
.about__grid {
  display: grid;
  grid-template-columns: 1.1fr .9fr;
  gap: var(--space-12);
  align-items: center;
}
.about__copy p { color: var(--text-secondary); font-size: 1.05rem; }
.about__copy p:last-child { margin-bottom: 0; }
.about__copy strong { color: var(--text); }
.about__stats {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-4);
}
.stat {
  padding: var(--space-6);
  border-radius: var(--radius-xl);
  text-align: center;
  transition: transform var(--dur-2) var(--ease), box-shadow var(--dur-2), border-color var(--dur-2);
}
.stat:hover { transform: translateY(-4px); border-color: var(--border-strong); box-shadow: var(--shadow-md); }
.stat__num { font-size: 2.6rem; font-weight: 800; line-height: 1; letter-spacing: -.03em; }
.stat__label { margin-top: var(--space-2); color: var(--text-muted); font-size: 13px; font-weight: 600; }

/* ===================== PROJECTS ===================== */
.projects {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: var(--space-5);
}
.pcard {
  position: relative;
  display: flex; flex-direction: column;
  padding: var(--space-6);
  border-radius: var(--radius-xl);
  background: var(--surface);
  border: 1px solid var(--border);
  overflow: hidden;
  transition: transform var(--dur-2) var(--ease), box-shadow var(--dur-2),
    border-color var(--dur-2), background var(--dur-2);
}
.pcard::before {
  content: "";
  position: absolute; inset: 0; z-index: 0; opacity: 0; pointer-events: none;
  background: var(--gradient-brand-soft);
  transition: opacity var(--dur-2);
}
.pcard:hover {
  transform: translateY(-6px);
  border-color: var(--border-strong);
  box-shadow: var(--shadow-lg), var(--shadow-glow);
}
.pcard:hover::before { opacity: 1; }
.pcard > * { position: relative; z-index: 1; }

.pcard__icon {
  width: 52px; height: 52px; border-radius: var(--radius-md);
  display: grid; place-items: center;
  background: var(--gradient-brand-soft);
  border: 1px solid var(--border);
  color: var(--brand-400);
  margin-bottom: var(--space-4);
  transition: transform var(--dur-2) var(--ease);
}
.pcard:hover .pcard__icon { transform: scale(1.08) rotate(-3deg); }
.pcard__icon svg { width: 26px; height: 26px; }
.pcard__name { font-size: 1.15rem; font-weight: 700; margin-bottom: var(--space-2); }
.pcard__desc { color: var(--text-secondary); font-size: .95rem; margin-bottom: var(--space-4); flex: 1; }
.pcard__tags { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: var(--space-5); }
.pcard__tags .badge { font-size: 11px; }
.pcard__links { display: flex; gap: var(--space-2); }
.pcard__links .btn { flex: 1; }

.projects__more { display: flex; justify-content: center; margin-top: var(--space-10); }

/* ===================== SKILLS ===================== */
.skills__wrap {
  display: grid;
  grid-template-columns: 1.4fr 1fr;
  gap: var(--space-8);
  align-items: start;
}
.skills {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
  gap: var(--space-3);
}
.skill {
  display: flex; align-items: center; gap: var(--space-3);
  padding: var(--space-4);
  border-radius: var(--radius-md);
  background: var(--surface);
  border: 1px solid var(--border);
  font-weight: 600; font-size: .95rem;
  transition: transform var(--dur-1) var(--ease), border-color var(--dur-1), background var(--dur-1);
}
.skill:hover { transform: translateY(-3px); border-color: var(--border-strong); background: var(--surface-2); }
.skill__ic {
  width: 34px; height: 34px; flex: none; border-radius: 9px;
  display: grid; place-items: center;
  background: var(--surface-3); color: var(--brand-400);
}
.skill__ic svg { width: 18px; height: 18px; }

.focus { padding: var(--space-6); border-radius: var(--radius-xl); }
.focus__title { font-size: 1.05rem; margin-bottom: var(--space-4); }
.focus__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--space-4); }
.focus__list li { display: flex; gap: var(--space-3); align-items: flex-start; }
.focus__ic {
  width: 34px; height: 34px; flex: none; border-radius: 9px;
  display: grid; place-items: center;
  background: var(--gradient-brand-soft); color: var(--brand-400);
  border: 1px solid var(--border);
}
.focus__ic svg { width: 17px; height: 17px; }
.focus__list strong { display: block; font-size: .95rem; }
.focus__list span { color: var(--text-muted); font-size: 13px; }

/* ===================== CONTACT ===================== */
.contact {
  text-align: center;
  max-width: 620px;
  margin: 0 auto;
  padding: var(--space-12) var(--space-8);
  border-radius: var(--radius-2xl);
}
.contact .section__kicker { margin-bottom: var(--space-4); }
.contact__title { font-size: clamp(1.8rem, 1.3rem + 1.8vw, 2.4rem); }
.contact__copy { color: var(--text-secondary); font-size: 1.1rem; max-width: 42ch; margin: 0 auto var(--space-8); }
.contact__cta { display: flex; gap: var(--space-3); justify-content: center; flex-wrap: wrap; }
.contact__cta .btn { padding: 13px 24px; }
.contact__social { display: flex; justify-content: center; gap: var(--space-3); margin-top: var(--space-8); }
.social {
  width: 44px; height: 44px; border-radius: var(--radius-md);
  display: grid; place-items: center;
  background: var(--surface-2); border: 1px solid var(--border);
  color: var(--text-secondary);
  transition: transform var(--dur-1) var(--ease), color var(--dur-1), border-color var(--dur-1);
}
.social:hover { transform: translateY(-3px); color: var(--text); border-color: var(--border-strong); }
.social svg { width: 20px; height: 20px; }

/* ===================== FOOTER + FAB ===================== */
.footer__inner {
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--space-4); flex-wrap: wrap;
}
.footer__inner p { margin: 0; }

.fab {
  position: fixed; right: var(--space-6); bottom: var(--space-6); z-index: 45;
  width: 48px; height: 48px; border-radius: 50%;
  display: grid; place-items: center;
  background: var(--gradient-brand); color: #fff;
  border: none; cursor: pointer;
  box-shadow: var(--shadow-glow);
  opacity: 0; transform: translateY(16px) scale(.9);
  transition: opacity var(--dur-2) var(--ease), transform var(--dur-2) var(--ease);
}
.fab svg { width: 22px; height: 22px; }
.fab.is-visible { opacity: 1; transform: none; }
.fab:hover { transform: translateY(-3px); }

/* ===================== SHORTCUTS MODAL ===================== */
.shortcuts { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--space-1); }
.shortcuts li {
  display: flex; align-items: center; justify-content: space-between;
  padding: 10px 4px; border-bottom: 1px solid var(--border);
  font-size: 14px; color: var(--text-secondary);
}
.shortcuts li:last-child { border-bottom: none; }

/* ===================== RESPONSIVE ===================== */
@media (max-width: 900px) {
  .hero__inner { grid-template-columns: 1fr; gap: var(--space-10); }
  .hero__code { margin: 0 auto; }
  .about__grid { grid-template-columns: 1fr; gap: var(--space-8); }
  .skills__wrap { grid-template-columns: 1fr; gap: var(--space-6); }
}
@media (max-width: 720px) {
  .nav__links { display: none; }
  .nav__burger { display: inline-flex; }
  .section { padding: var(--space-16) 0; }
  .hero { min-height: auto; padding: var(--space-12) 0; }
  .hero__sub { max-width: none; }
  .hero__scroll { display: none; }
}
@media (max-width: 420px) {
  .about__stats { grid-template-columns: 1fr 1fr; gap: var(--space-3); }
  .stat { padding: var(--space-5) var(--space-3); }
  .stat__num { font-size: 2.1rem; }
  .hero__cta .btn, .contact__cta .btn { flex: 1; }
}
