:root {
  /* Theme: Midnight Orchid Garden — Enhanced Edition */
  --theme-midnight-orchid: #1d0a33;
  --theme-amethyst-glow: #6b44b8;
  --theme-electric-violet: #9b6dff;
  --theme-lavender-mist: #e0ceff;
  --theme-moon-petal: #f8f2ff;
  --theme-night-leaf: #0f2416;
  --theme-fern: #5cb868;
  --theme-moss: #a8d46a;
  --theme-sage: #d4edb0;
  --theme-dew: #e3fff2;
  --theme-rose: #ffb7c5;

  --theme-african-violet: #b284be;
  --theme-soft-terracotta: #d9a17e;
  --theme-pastel-green: #90be84;
  --theme-light-steel-blue: #84adbe;

  --portfolio-color-bg-start: var(--theme-midnight-orchid);
  --portfolio-color-bg-mid: #2a5a32;
  --portfolio-color-bg-end: var(--theme-amethyst-glow);
  --portfolio-color-highlight: var(--theme-lavender-mist);
  --portfolio-color-highlight-soft: var(--theme-sage);

  --portfolio-color-surface: color-mix(in oklab, var(--theme-midnight-orchid) 76%, var(--theme-night-leaf) 24%);
  --portfolio-color-surface-soft: color-mix(in oklab, var(--theme-fern) 22%, transparent);
  --portfolio-color-text: #fcf9f0;
  --portfolio-color-text-muted: #d4dbbc;
  --portfolio-color-border: color-mix(in oklab, var(--theme-sage) 42%, transparent);

  --portfolio-color-accent: var(--theme-sage);
  --portfolio-color-accent-hover: var(--theme-moss);
  --portfolio-color-accent-text: #142b14;
  --portfolio-color-accent-text-hover: #0f200e;
  --portfolio-color-link: var(--theme-dew);
  --portfolio-color-nav-text: #1a2a16;
  --portfolio-color-nav-hover: #2d5e2e;
  --portfolio-color-focus-ring: rgba(183, 215, 122, 0.55);
  --portfolio-color-badge-bg: color-mix(in oklab, var(--theme-soft-terracotta) 32%, var(--theme-fern) 15%);
  --portfolio-color-glow: rgba(212, 237, 176, 0.12);
}

/* ─── Light Mode Palette ───
 * A daytime counterpart to the Midnight Orchid Garden.
 * Activated by adding .light-mode to <html>.
 * ──────────────────────────────────────────────────── */
:root.light-mode {
  --portfolio-color-bg-start: #f0e8fa;
  --portfolio-color-bg-mid: #d8edc9;
  --portfolio-color-bg-end: #e6d5f5;
  --portfolio-color-highlight: var(--theme-amethyst-glow);
  --portfolio-color-highlight-soft: var(--theme-soft-terracotta);

  --portfolio-color-surface: color-mix(in oklab, #faf7fc 96%, var(--theme-lavender-mist) 4%);
  --portfolio-color-surface-soft: color-mix(in oklab, var(--theme-fern) 12%, transparent);
  --portfolio-color-text: #1d0a33;
  --portfolio-color-text-muted: #5a4a6b;
  --portfolio-color-border: color-mix(in oklab, var(--theme-amethyst-glow) 14%, transparent);

  --portfolio-color-accent: var(--theme-amethyst-glow);
  --portfolio-color-accent-hover: var(--theme-electric-violet);
  --portfolio-color-accent-text: var(--theme-moon-petal);
  --portfolio-color-accent-text-hover: var(--theme-moon-petal);
  --portfolio-color-link: var(--theme-amethyst-glow);
  --portfolio-color-nav-text: #1d0a33;
  --portfolio-color-nav-hover: var(--theme-amethyst-glow);
  --portfolio-color-focus-ring: rgba(107, 68, 184, 0.4);
  --portfolio-color-badge-bg: color-mix(in oklab, var(--theme-soft-terracotta) 20%, var(--theme-lavender-mist) 15%);
  --portfolio-color-glow: rgba(107, 68, 184, 0.08);
}

/* ─── Smooth theme transition helper ───
 * Added to <html> by JS during toggle, removed after 400 ms.
 * Only transitions the propreties that differ between themes.
 * ─────────────────────────────────────────────────────── */
.theme-transitioning,
.theme-transitioning * {
  transition: background 0.35s ease,
              background-color 0.35s ease,
              color 0.35s ease,
              border-color 0.35s ease,
              box-shadow 0.35s ease !important;
}

/* ─── Smooth scrollbar ─── */
::-webkit-scrollbar {
  width: 8px;
}

::-webkit-scrollbar-track {
  background: color-mix(in oklab, var(--theme-midnight-orchid) 70%, transparent);
}

::-webkit-scrollbar-thumb {
  background: color-mix(in oklab, var(--theme-fern) 55%, transparent);
  border-radius: 4px;
}

::-webkit-scrollbar-thumb:hover {
  background: color-mix(in oklab, var(--theme-moss) 65%, transparent);
}

/* ─── Selection ─── */
::selection {
  background: color-mix(in oklab, var(--theme-fern) 55%, transparent);
  color: var(--portfolio-color-text);
}

@media (max-width: 768px) {
  .portfolio::before {
    opacity: 0.2;
    background-size: clamp(60px, 10vw, 90px) clamp(32px, 5vw, 50px), clamp(90px, 14vw, 130px) clamp(44px, 7vw, 70px);
  }
  .portfolio::after {
    display: none;
  }
}

/* Light mode: pattern should be more subtle so it doesn't compete with light palette */
.light-mode .portfolio::before {
  opacity: 0.18;
}

.light-mode .portfolio::after {
  opacity: 0.02;
}

.portfolio {
  min-height: 100vh;
  line-height: 1.75;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  scrollbar-width: thin;
  scrollbar-color: color-mix(in oklab, var(--theme-fern) 55%, transparent) color-mix(in oklab, var(--theme-midnight-orchid) 70%, transparent);
  /* ── Responsive ambient background ──
   * Gradient positions shift with viewport via clamp().
   * On narrower screens the highlights stay visible; on wider
   * screens they spread organically.
   * ──────────────────────────────────── */
  background:
    radial-gradient(circle at clamp(4%, 6vw, 12%) clamp(8%, 14vw, 20%), color-mix(in oklab, var(--theme-sage) 28%, transparent) 0%, transparent min(40vw, 36%)),
    radial-gradient(circle at clamp(80%, 92vw, 96%) clamp(4%, 8vw, 12%), color-mix(in oklab, var(--theme-rose) 26%, transparent) 0%, transparent min(38vw, 34%)),
    radial-gradient(circle at clamp(40%, 48vw, 56%) clamp(88%, 96vw, 100%), color-mix(in oklab, var(--theme-fern) 30%, transparent) 0%, transparent min(44vw, 40%)),
    linear-gradient(145deg, var(--portfolio-color-bg-start) 0%, var(--portfolio-color-bg-mid) 46%, var(--portfolio-color-bg-end) 100%);
  color: var(--portfolio-color-text);
}

.portfolio h1, .portfolio h2, .portfolio h3, .portfolio h4 {
  letter-spacing: -0.02em;
  line-height: 1.15;
}

.portfolio p {
  line-height: 1.75;
}

/* ── Grain/Noise overlay for depth ──
 * A very subtle film-grain texture over the entire page.
 * Only visible on wider screens where detail matters.
 * ──────────────────────────────────── */
.portfolio::after {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  opacity: 0.035;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  background-size: 256px 256px;
}

/* ── Lattice/diagonal pattern ──
 * Responsive sizes via clamp(); fades near edges so it never
 * overwhelms the content.
 * ─────────────────────────────── */
.portfolio::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  opacity: 0.35;
  background-image:
    radial-gradient(ellipse at center, transparent clamp(32%, 40vw, 42%), color-mix(in oklab, var(--theme-sage) 30%, transparent) clamp(33%, 41vw, 44%) clamp(35%, 44vw, 46%), transparent clamp(36%, 45vw, 47%)),
    radial-gradient(ellipse at center, transparent clamp(38%, 46vw, 48%), color-mix(in oklab, var(--theme-lavender-mist) 20%, transparent) clamp(39%, 47vw, 50%) clamp(41%, 50vw, 52%), transparent clamp(42%, 51vw, 53%));
  background-size: clamp(80px, 13vw, 130px) clamp(44px, 7vw, 72px), clamp(120px, 19vw, 190px) clamp(60px, 10vw, 100px);
  background-position: 0 0, clamp(30px, 5vw, 52px) clamp(18px, 3vw, 30px);
  mask-image: linear-gradient(to bottom, transparent, black 12%, black 88%, transparent);
}

@media (max-width: 768px) {
  .portfolio::before {
    opacity: 0.2;
    background-size: clamp(60px, 10vw, 90px) clamp(32px, 5vw, 50px), clamp(90px, 14vw, 130px) clamp(44px, 7vw, 70px);
  }
  .portfolio::after {
    display: none; /* noise is too heavy on mobile */
  }
}

/* ─── Section surfaces ─── */
.portfolio__surface {
  position: relative;
  overflow: hidden;
  background:
    linear-gradient(145deg, color-mix(in oklab, var(--theme-night-leaf) 52%, transparent), color-mix(in oklab, var(--theme-african-violet) 20%, transparent)),
    radial-gradient(circle at 22% 0%, color-mix(in oklab, var(--theme-sage) 20%, transparent), transparent 38%);
  border-top: 1px solid var(--portfolio-color-border);
  border-bottom: 1px solid var(--portfolio-color-border);
  backdrop-filter: blur(4px);
}

.portfolio__surface--hero {
  min-height: 72vh;
  display: flex;
  align-items: center;
  isolation: isolate;
}

.portfolio__surface--hero::before,
.portfolio__surface--hero::after,
.portfolio__surface--projects::after,
.portfolio__surface--blog::after {
  content: "";
  position: absolute;
  pointer-events: none;
  z-index: 0;
}

.portfolio__surface--hero::before {
  width: min(34vw, 420px);
  aspect-ratio: 1;
  left: -8vw;
  bottom: -9rem;
  border-radius: 48% 52% 44% 56% / 64% 36% 64% 36%;
  background: color-mix(in oklab, var(--theme-fern) 25%, transparent);
  box-shadow: 0 0 100px color-mix(in oklab, var(--theme-sage) 22%, transparent);
  transform: rotate(-18deg);
}

.portfolio__surface--hero::after {
  width: min(30vw, 360px);
  aspect-ratio: 1;
  right: -7vw;
  top: 6rem;
  border-radius: 61% 39% 58% 42% / 38% 62% 38% 62%;
  background: color-mix(in oklab, var(--theme-rose) 22%, transparent);
  box-shadow: 0 0 90px color-mix(in oklab, var(--theme-lavender-mist) 20%, transparent);
  transform: rotate(24deg);
}

.portfolio__hero-content,
.portfolio__section-content {
  position: relative;
  z-index: 1;
}

.portfolio__hero-title {
  text-shadow: 0 8px 32px color-mix(in oklab, black 40%, transparent);
}

.portfolio__hero-label {
  color: var(--theme-dew);
}

/* ─── Garden orbs ─── */
.portfolio__garden-orb {
  position: absolute;
  border-radius: 999px;
  pointer-events: none;
  filter: blur(2px);
  opacity: 0.6;
  z-index: 0;
}

.portfolio__garden-orb--moss {
  width: 8rem;
  height: 8rem;
  left: 10%;
  top: 10%;
  background: radial-gradient(circle, color-mix(in oklab, var(--theme-moss) 75%, transparent), transparent 72%);
}

.portfolio__garden-orb--petal {
  width: 6rem;
  height: 6rem;
  right: 16%;
  bottom: 12%;
  background: radial-gradient(circle, color-mix(in oklab, var(--theme-rose) 65%, transparent), transparent 74%);
}

.portfolio__heading,
.portfolio__text,
.portfolio__link,
.portfolio h1 {
    color: var(--portfolio-color-text);
}

.portfolio :where(p, li) a:not(.btn),
.portfolio__link {
  color: var(--portfolio-color-link);
  text-decoration-thickness: 0.08em;
  text-underline-offset: 0.18em;
  transition: color 0.2s ease;
}

.portfolio a:hover {
  color: var(--portfolio-color-highlight-soft);
}

.portfolio__text--muted {
  color: var(--portfolio-color-text-muted) !important;
}

/* ─── Social tiles ─── */
.portfolio__social-tile {
  background: var(--portfolio-color-surface-soft);
  border: 1px solid var(--portfolio-color-border);
  border-radius: 16px;
  padding: 0.75rem;
  transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
}

@media (hover: hover) {
  .portfolio__social-tile:hover {
    transform: scale(1.06);
    box-shadow: 0 8px 28px color-mix(in oklab, var(--theme-midnight-orchid) 34%, transparent);
    border-color: color-mix(in oklab, var(--theme-sage) 55%, transparent);
  }
}

/* ─── Avatar ─── */
.portfolio__avatar {
  width: min(240px, 75vw);
  aspect-ratio: 1 / 1;
  object-fit: cover;
  border: 2px solid color-mix(in oklab, var(--theme-lavender-mist) 70%, transparent);
  box-shadow: 0 0 30px color-mix(in oklab, var(--theme-lavender-mist) 15%, transparent);
}

/* ─── Cards ─── */
.portfolio__card {
  position: relative;
  overflow: hidden;
  background:
    linear-gradient(145deg, color-mix(in oklab, var(--portfolio-color-surface) 94%, transparent), color-mix(in oklab, var(--theme-night-leaf) 86%, transparent)),
    radial-gradient(circle at 100% 0%, color-mix(in oklab, var(--theme-sage) 16%, transparent), transparent 40%);
  border: 1px solid var(--portfolio-color-border);
  color: var(--portfolio-color-text);
  transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
}

.portfolio__card::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(120deg, transparent, color-mix(in oklab, var(--theme-dew) 14%, transparent), transparent 60%);
  opacity: 0;
  transition: opacity 0.3s ease;
}

.portfolio__card:hover {
  transform: translateY(-6px);
  border-color: color-mix(in oklab, var(--theme-sage) 62%, transparent);
  box-shadow: 0 22px 40px color-mix(in oklab, var(--theme-midnight-orchid) 66%, transparent) !important;
}

.portfolio__card:hover::before {
  opacity: 1;
}

.portfolio__card .card-body,
.portfolio__card .card-title,
.portfolio__card .card-text,
.portfolio__card .btn {
  position: relative;
  z-index: 1;
}

.portfolio__card .text-muted {
  color: var(--portfolio-color-text-muted) !important;
}

.portfolio .portfolio__project-image {
  width: 100%;
  height: 100%;
  min-height: 220px;
  object-fit: cover;
  border-radius: var(--portfolio-card-inner-radius, 0.75rem) 0 0 var(--portfolio-card-inner-radius, 0.75rem);
}

/* ─── Buttons ─── */
.portfolio__button {
  background-color: var(--portfolio-color-accent);
  border: 1px solid var(--portfolio-color-accent);
  color: var(--portfolio-color-accent-text);
  font-weight: 700;
  letter-spacing: 0.01em;
  box-shadow: 0 10px 28px color-mix(in oklab, var(--theme-midnight-orchid) 32%, transparent);
  transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease, color 0.2s ease, transform 0.2s ease;
}

.portfolio__button:hover {
  background-color: var(--portfolio-color-accent-hover);
  border-color: var(--portfolio-color-accent-hover);
  color: var(--portfolio-color-accent-text-hover);
  box-shadow: 0 16px 34px color-mix(in oklab, var(--theme-midnight-orchid) 38%, transparent);
  transform: translateY(-2px);
}

.portfolio__button:focus-visible {
  outline: 3px solid var(--portfolio-color-focus-ring);
  outline-offset: 3px;
}

/* Download button — see bento section below for premium button-in-button pattern */
.portfolio__download-button {
  /* All styling handled by bento section */
}

.portfolio__button--secondary {
  background-color: transparent;
  border-color: var(--portfolio-color-accent);
  color: var(--portfolio-color-link);
}

.portfolio__button--secondary:hover {
  background-color: var(--portfolio-color-accent-hover);
  color: var(--portfolio-color-accent-text-hover);
}

/* ── Read More / action button with arrow ── */
.portfolio__button--read {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.6rem 1.2rem;
  border-radius: 999px;
  background: transparent;
  border: 1.5px solid color-mix(in oklab, var(--portfolio-color-accent) 60%, transparent);
  color: var(--portfolio-color-link);
  font-weight: 600;
  font-size: 0.9rem;
  letter-spacing: 0.01em;
  cursor: pointer;
  text-decoration: none;
  transition: background-color 0.25s ease, border-color 0.25s ease, color 0.25s ease, box-shadow 0.25s ease, transform 0.25s ease;
}

.portfolio__button--read:hover {
  background: color-mix(in oklab, var(--portfolio-color-accent) 16%, transparent);
  border-color: var(--portfolio-color-accent);
  color: var(--portfolio-color-accent-text);
  box-shadow: 0 0 24px color-mix(in oklab, var(--portfolio-color-accent) 22%, transparent);
  transform: translateY(-2px);
}

.portfolio__button-arrow {
  display: inline-block;
  transition: transform 0.25s ease;
  flex-shrink: 0;
}

.portfolio__button--read:hover .portfolio__button-arrow {
  transform: translateX(4px);
}

/* ─── Badges ─── */
.portfolio__badge {
  background-color: var(--portfolio-color-badge-bg);
  border: 1px solid color-mix(in oklab, var(--theme-sage) 32%, transparent);
  color: var(--portfolio-color-text);
  margin: 0.2rem 0.35rem 0.2rem 0;
  padding: 0.45rem 0.7rem;
  transition: background-color 0.2s ease, border-color 0.2s ease;
}

@media (hover: hover) {
  .portfolio__badge:hover {
    background-color: color-mix(in oklab, var(--theme-soft-terracotta) 38%, var(--theme-fern) 18%);
    border-color: color-mix(in oklab, var(--theme-sage) 45%, transparent);
  }
}

/* ─── See-all link (section footers) ───
 * Accent-colored link with underline + arrow hover animation.
 * ─────────────────────────────────────────────────────────── */
.portfolio__see-all {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  position: relative;
  color: var(--portfolio-color-accent);
  font-weight: 600;
  font-size: 1.05rem;
  text-decoration: none;
  transition: color 0.2s ease;
}

.portfolio__see-all::after {
  content: "";
  position: absolute;
  bottom: -2px;
  left: 50%;
  width: 0;
  height: 2px;
  border-radius: 1px;
  background: var(--portfolio-color-accent);
  transition: width 0.25s ease, left 0.25s ease;
  transform: translateX(-50%);
}

.portfolio__see-all:hover::after {
  width: 100%;
}

.portfolio__see-all:hover {
  color: var(--portfolio-color-accent-hover);
}

.portfolio__see-all-arrow {
  display: inline-block;
  transition: transform 0.25s ease;
  flex-shrink: 0;
}

.portfolio__see-all:hover .portfolio__see-all-arrow {
  transform: translateX(4px);
}

/* ─── Social items ─── */
.portfolio__social-item {
  list-style: none;
}

.portfolio__social-link {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.7rem 1rem;
  border-radius: 14px;
  background: color-mix(in oklab, var(--theme-night-leaf) 50%, transparent);
  border: 1px solid color-mix(in oklab, var(--theme-sage) 28%, transparent);
  color: var(--portfolio-color-text);
  text-decoration: none;
  transition: background-color 0.25s ease, border-color 0.25s ease, transform 0.25s ease, box-shadow 0.25s ease;
}

.portfolio__social-link:hover {
  background: color-mix(in oklab, var(--portfolio-color-accent) 18%, transparent);
  border-color: color-mix(in oklab, var(--portfolio-color-accent) 48%, transparent);
  transform: translateY(-2px) scale(1.02);
  box-shadow: 0 6px 20px color-mix(in oklab, var(--theme-midnight-orchid) 30%, transparent);
}

.portfolio__social-icon {
  width: 1.5rem;
  height: 1.5rem;
  flex-shrink: 0;
  transition: transform 0.25s ease;
}

.portfolio__social-link:hover .portfolio__social-icon {
  transform: scale(1.15);
}

.portfolio__social-label {
  flex: 1;
  font-size: 0.925rem;
  font-weight: 500;
  letter-spacing: 0.01em;
}

.portfolio__social-arrow {
  flex-shrink: 0;
  opacity: 0.5;
  transition: opacity 0.25s ease, transform 0.25s ease;
}

.portfolio__social-link:hover .portfolio__social-arrow {
  opacity: 1;
  transform: translateX(3px);
}

/* ─── Interests pill ─── */
.portfolio__interests {
  align-items: center;
  background: color-mix(in oklab, var(--theme-night-leaf) 44%, transparent);
  border: 1px solid color-mix(in oklab, var(--theme-sage) 34%, transparent);
  border-radius: 999px;
  display: inline-flex;
  flex-wrap: wrap;
  gap: 0.2rem;
  padding: 0.75rem 1rem;
}

.portfolio__leaf-bullet {
  color: var(--theme-moss);
  display: inline-block;
  margin-inline-end: 0.25rem;
}

.portfolio__section-title {
  text-shadow: 0 8px 26px color-mix(in oklab, black 32%, transparent);
}

/* ─── Section decorative blobs ─── */
.portfolio__surface--projects,
.portfolio__surface--blog {
  isolation: isolate;
}

.portfolio__surface--projects::after {
  width: min(45vw, 520px);
  aspect-ratio: 1;
  right: -16vw;
  bottom: -18rem;
  border-radius: 42% 58% 38% 62% / 62% 38% 62% 38%;
  background: color-mix(in oklab, var(--theme-fern) 20%, transparent);
  transform: rotate(18deg);
}

.portfolio__surface--blog::after {
  width: min(42vw, 500px);
  aspect-ratio: 1;
  left: -17vw;
  top: -12rem;
  border-radius: 62% 38% 60% 40% / 38% 62% 38% 62%;
  background: color-mix(in oklab, var(--theme-rose) 18%, transparent);
  transform: rotate(-20deg);
}

/* ─── Vines ─── */
.portfolio__vine {
  position: absolute;
  inset-block: 1rem;
  left: clamp(0.75rem, 3vw, 2rem);
  width: 5rem;
  pointer-events: none;
  z-index: 0;
  opacity: 0.48;
  background:
    radial-gradient(ellipse at 18% 12%, color-mix(in oklab, var(--theme-sage) 68%, transparent) 0 14px, transparent 15px),
    radial-gradient(ellipse at 72% 30%, color-mix(in oklab, var(--theme-fern) 58%, transparent) 0 18px, transparent 19px),
    radial-gradient(ellipse at 18% 52%, color-mix(in oklab, var(--theme-moss) 62%, transparent) 0 15px, transparent 16px),
    radial-gradient(ellipse at 70% 72%, color-mix(in oklab, var(--theme-sage) 54%, transparent) 0 17px, transparent 18px),
    linear-gradient(90deg, transparent 47%, color-mix(in oklab, var(--theme-sage) 50%, transparent) 48% 52%, transparent 53%);
  background-repeat: no-repeat;
}

.portfolio__vine--right {
  left: auto;
  right: clamp(0.75rem, 3vw, 2rem);
  transform: scaleX(-1);
}

/* ─── Post cards ─── */
.portfolio__blog-card {
  border-radius: 1.25rem;
  box-shadow: 0 14px 32px color-mix(in oklab, var(--theme-midnight-orchid) 44%, transparent);
}

/* ─── Post grid — responsive masonry-like layout ───
 * First card is featured (spans 2 columns), rest fill naturally.
 * Sizes scale with viewport for maximum visual impact.
 * ────────────────────────────────────────────────────── */
.portfolio__blog-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(1rem, 2.5vw, 2rem);
}

@media (min-width: 640px) {
  .portfolio__blog-grid {
    grid-template-columns: repeat(2, 1fr);
  }
  .portfolio__blog-card-item--featured {
    grid-column: 1 / -1;
  }
  .portfolio__blog-card-item--featured {
    grid-row: auto;
  }
}

@media (min-width: 1024px) {
  .portfolio__blog-grid {
    grid-template-columns: repeat(3, 1fr);
  }
  .portfolio__blog-card-item--featured {
    grid-column: 1 / span 2;
    grid-row: span 2;
  }
}

/* Card sizing: scale with viewport */
.portfolio__blog-card-item {
  display: flex;
}

.portfolio__blog-card-item .portfolio__card {
  width: 100%;
}

/* Featured card gets extra height on desktop */
@media (min-width: 1024px) {
  .portfolio__blog-card-item--featured .portfolio__card {
    min-height: clamp(320px, 40vw, 480px);
  }
}

/* ─── Animations ─── */
@keyframes portfolio-slide-up {
  from { opacity: 0; transform: translateY(16px); }
  to { opacity: 1; transform: translateY(0); }
}

.portfolio__animate-slide-up {
  animation: portfolio-slide-up 500ms ease both;
}

.portfolio img {
  display: block;
  max-width: 100%;
  height: auto;
}

/* ─── Navbar base — see bento section below for premium glass architecture ─── */
.portfolio__navbar {
  /* Reset: bento section below defines all navbar styles */
}

/* Scrolled state handled entirely by GSAP ScrollTrigger */
.portfolio__navbar--scrolled {
  /* Intentionally empty — GSAP animates the navbar directly */
}

.portfolio__navbar .navbar-collapse {
  flex-grow: 0;
}

/* ── Old navbar rules neutralized — premium styles in bento section below ── */
.portfolio__navbar .nav-link,
.portfolio__navbar .navbar-brand,
.portfolio__navbar .nav-link::before,
.portfolio__navbar .nav-link::after,
.portfolio__navbar .navbar-toggler,
.portfolio__navbar .navbar-toggler-icon,
.portfolio__navbar .portfolio__theme-toggle,
.portfolio__navbar .portfolio__download-button {
  /* All handled by bento section below */
}

/* ─── Contact section ─── */
.portfolio__surface--contact {
  isolation: isolate;
}

.portfolio__surface--contact::after {
  content: "";
  position: absolute;
  pointer-events: none;
  z-index: 0;
  width: min(38vw, 460px);
  aspect-ratio: 1;
  left: -14vw;
  bottom: -15rem;
  border-radius: 38% 62% 42% 58% / 58% 42% 58% 42%;
  background: color-mix(in oklab, var(--theme-african-violet) 20%, transparent);
  transform: rotate(-22deg);
}

/* ─── Reading progress bar ─── */
.portfolio__progress-bar {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 3px;
  z-index: 101;
  background: linear-gradient(90deg, var(--theme-sage), var(--theme-moss));
  transform-origin: left center;
  transform: scaleX(0);
  pointer-events: none;
  will-change: transform;
  box-shadow: 0 0 6px color-mix(in oklab, var(--theme-sage) 40%, transparent);
}

/* ── Unpoly page-load progress bar ──
 * Thin animated bar that fills during AJAX navigation.
 * Positioned above everything with high z-index.
 * ──────────────────────────────────────── */
.up-progress-bar {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 2px;
  z-index: 10000;
  background: linear-gradient(90deg, var(--bento-lime), var(--theme-moss));
  transform-origin: left center;
  transform: scaleX(0);
  pointer-events: none;
  will-change: transform;
  box-shadow: 0 0 8px color-mix(in oklab, var(--bento-lime) 50%, transparent);
}

/* Theme toggle — see bento section below for premium fluid rotation styles */
.portfolio__theme-toggle {
  /* All styling handled by bento section */
}

/* Theme toggle — see bento section below for premium styles */
.portfolio__theme-toggle:focus-visible {
  outline: 2px solid var(--bento-lime);
  outline-offset: 2px;
}

/* ─── Universal Scroll-Reveal Animations ─── */
/* Elements with [data-reveal] fade + slide up on scroll. */
/* Uses IntersectionObserver — no GSAP dependency for the reveal itself. */

[data-reveal] {
  opacity: 0;
  transform: translateY(28px);
  will-change: opacity, transform;
  transition:
    opacity 0.7s cubic-bezier(0.32, 0.72, 0, 1),
    transform 0.7s cubic-bezier(0.32, 0.72, 0, 1);
}

[data-reveal].revealed {
  opacity: 1;
  transform: translateY(0);
}

/* Staggered children: [data-reveal="stagger"] animates direct children */
[data-reveal="stagger"] > * {
  opacity: 0;
  transform: translateY(24px);
  transition:
    opacity 0.55s cubic-bezier(0.32, 0.72, 0, 1),
    transform 0.55s cubic-bezier(0.32, 0.72, 0, 1);
}

[data-reveal="stagger"].revealed > * {
  opacity: 1;
  transform: translateY(0);
}

/* Delay cascade for staggered children — up to 10 children */
[data-reveal="stagger"].revealed > *:nth-child(1) { transition-delay: 0s; }
[data-reveal="stagger"].revealed > *:nth-child(2) { transition-delay: 0.07s; }
[data-reveal="stagger"].revealed > *:nth-child(3) { transition-delay: 0.14s; }
[data-reveal="stagger"].revealed > *:nth-child(4) { transition-delay: 0.21s; }
[data-reveal="stagger"].revealed > *:nth-child(5) { transition-delay: 0.28s; }
[data-reveal="stagger"].revealed > *:nth-child(6) { transition-delay: 0.35s; }
[data-reveal="stagger"].revealed > *:nth-child(7) { transition-delay: 0.42s; }
[data-reveal="stagger"].revealed > *:nth-child(8) { transition-delay: 0.49s; }
[data-reveal="stagger"].revealed > *:nth-child(9) { transition-delay: 0.56s; }
[data-reveal="stagger"].revealed > *:nth-child(10) { transition-delay: 0.63s; }

/* Variant: slide from left */
[data-reveal="slide-left"] {
  transform: translateX(-32px);
}
[data-reveal="slide-left"].revealed {
  transform: translateX(0);
}

/* Variant: slide from right */
[data-reveal="slide-right"] {
  transform: translateX(32px);
}
[data-reveal="slide-right"].revealed {
  transform: translateX(0);
}

/* Variant: scale up from slightly smaller */
[data-reveal="scale"] {
  transform: scale(0.95);
}
[data-reveal="scale"].revealed {
  transform: scale(1);
}

/* Variant: fade only (no movement) */
[data-reveal="fade"] {
  transform: none;
}

/* Respect prefers-reduced-motion */
@media (prefers-reduced-motion: reduce) {
  [data-reveal],
  [data-reveal] > * {
    transition: opacity 0.2s ease !important;
    transform: none !important;
  }
}

/* ─── Footer ─── */
/* Footer base — see bento section below for premium styles */
.portfolio__footer {
  /* All styling handled by bento section */
}

/* Footer nav-link — see bento section below */

/* ─── Resume page ─── */
.portfolio__resume-page {
  background:
    linear-gradient(180deg, color-mix(in oklab, var(--portfolio-color-surface) 76%, transparent), color-mix(in oklab, var(--theme-midnight-orchid) 82%, transparent));
}

.portfolio__resume-hero,
.portfolio__resume-section {
  background: color-mix(in oklab, var(--portfolio-color-surface) 88%, transparent);
  border: 1px solid var(--portfolio-color-border);
  border-radius: 24px;
  box-shadow: 0 18px 40px color-mix(in oklab, var(--theme-midnight-orchid) 48%, transparent);
}

.portfolio__resume-hero {
  padding: clamp(1.25rem, 3vw, 2.5rem);
}

.portfolio__resume-section {
  margin-bottom: 1rem;
  padding-left: clamp(1rem, 2vw, 1.5rem);
  padding-right: clamp(1rem, 2vw, 1.5rem);
}

.portfolio__eyebrow {
  color: var(--portfolio-color-highlight-soft);
  font-size: 0.85rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
}

/* ─── Resume contact card ─── */
.portfolio__resume-contact-card {
  background: color-mix(in oklab, var(--theme-midnight-orchid) 88%, black 12%);
  border: 1px solid var(--portfolio-color-border);
  border-radius: 20px;
  padding: 1rem;
}

.portfolio__resume-contact-list {
  gap: 0.65rem;
}

.portfolio__resume-contact-list .portfolio__social-link {
  background: color-mix(in oklab, var(--portfolio-color-accent) 14%, transparent);
  border-color: var(--portfolio-color-border);
}

.portfolio__resume-contact-list .portfolio__social-link:hover {
  background: color-mix(in oklab, var(--portfolio-color-accent) 28%, transparent);
  border-color: color-mix(in oklab, var(--portfolio-color-accent) 50%, transparent);
}

.portfolio__resume-meta,
.portfolio__resume-date {
  color: var(--portfolio-color-text-muted);
}

.portfolio__resume-entry:not(:last-child) {
  border-bottom: 1px solid color-mix(in oklab, var(--portfolio-color-border) 70%, transparent);
  padding-bottom: 1rem;
}

/* ─── Navbar collapse ─── */
.navbar-collapse.collapse:not(.show) {
  display: none;
}

/* Desktop: inline nav */
@media (min-width: 901px) {
  .navbar-collapse.collapse {
    display: flex !important;
    position: static !important;
    background: none !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    opacity: 1 !important;
    visibility: visible !important;
  }
}

/* ─── Responsive ─── */
@media (max-width: 768px) {
  .portfolio__surface {
    padding-top: 1.5rem !important;
    padding-bottom: 1.5rem !important;
  }

  .portfolio__summary {
    margin: 1rem 0 !important;
    font-size: 1rem;
    line-height: 1.6;
  }

  .portfolio__card .card-body {
    padding: 1rem;
  }

  .portfolio .portfolio__project-image {
    aspect-ratio: 16 / 9;
    height: clamp(180px, 45vw, 260px);
    min-height: 0;
    border-radius: var(--portfolio-card-inner-radius, 0.75rem) var(--portfolio-card-inner-radius, 0.75rem) 0 0;
  }

  /* Old responsive navbar rules neutralized — bento section handles mobile nav */
  .portfolio__navbar .navbar-collapse.collapse,
  .portfolio__navbar .navbar-collapse,
  .portfolio__navbar .navbar-collapse.show,
  .portfolio__navbar .navbar-nav,
  .portfolio__navbar .nav-link,
  .portfolio__navbar .portfolio__theme-toggle,
  .portfolio__navbar .portfolio__download-button {
    /* Handled by bento section below */
  }

  .portfolio__resume-hero,
  .portfolio__resume-section {
    border-radius: 18px;
  }

  .portfolio__resume-section h2 {
    font-size: 1.75rem;
  }

  .portfolio__resume-contact-card {
    padding: 0.85rem;
  }

  .portfolio__resume-entry {
    overflow-wrap: anywhere;
  }

}

/* ─── Light mode: component overrides ───
 * Elements that reference direct theme colors (not overridable
 * --portfolio-color-* variables) need explicit light-mode rules.
 * ────────────────────────────────────────────────────────────── */

/* Section surfaces — lighter gradient overlay */
.light-mode .portfolio__surface {
  background:
    linear-gradient(145deg, color-mix(in oklab, var(--theme-lavender-mist) 30%, transparent), color-mix(in oklab, var(--theme-soft-terracotta) 12%, transparent)),
    radial-gradient(circle at 22% 0%, color-mix(in oklab, var(--theme-fern) 14%, transparent), transparent 38%);
}

/* Cards — lighter surface + glow */
.light-mode .portfolio__card {
  background:
    linear-gradient(145deg, color-mix(in oklab, var(--portfolio-color-surface) 94%, transparent), color-mix(in oklab, var(--theme-lavender-mist) 40%, transparent)),
    radial-gradient(circle at 100% 0%, color-mix(in oklab, var(--theme-amethyst-glow) 8%, transparent), transparent 40%);
}

.light-mode .portfolio__card:hover {
  box-shadow: 0 22px 40px color-mix(in oklab, var(--theme-amethyst-glow) 30%, transparent) !important;
}

.light-mode .portfolio__card::before {
  background: linear-gradient(120deg, transparent, color-mix(in oklab, var(--theme-lavender-mist) 18%, transparent), transparent 60%);
}

/* Social links — light palette */
.light-mode .portfolio__social-link {
  background: color-mix(in oklab, var(--theme-lavender-mist) 50%, transparent);
  border-color: color-mix(in oklab, var(--theme-amethyst-glow) 18%, transparent);
}

.light-mode .portfolio__social-link:hover {
  background: color-mix(in oklab, var(--theme-amethyst-glow) 20%, transparent);
  border-color: color-mix(in oklab, var(--theme-amethyst-glow) 40%, transparent);
}

/* Interests pill */
.light-mode .portfolio__interests {
  background: color-mix(in oklab, var(--theme-lavender-mist) 35%, transparent);
  border-color: color-mix(in oklab, var(--theme-amethyst-glow) 20%, transparent);
}

/* Footer */
/* Light mode footer — see bento section below */

/* Scrollbar — light palette */
.light-mode ::-webkit-scrollbar-track {
  background: color-mix(in oklab, var(--theme-lavender-mist) 50%, transparent);
}
.light-mode ::-webkit-scrollbar-thumb {
  background: color-mix(in oklab, var(--theme-amethyst-glow) 35%, transparent);
}
.light-mode ::-webkit-scrollbar-thumb:hover {
  background: color-mix(in oklab, var(--theme-amethyst-glow) 45%, transparent);
}

/* Scrollbar Firefox */
.light-mode .portfolio {
  scrollbar-color: color-mix(in oklab, var(--theme-amethyst-glow) 35%, transparent) color-mix(in oklab, var(--theme-lavender-mist) 50%, transparent);
}

/* Selection */
.light-mode ::selection {
  background: color-mix(in oklab, var(--theme-lavender-mist) 65%, transparent);
  color: #1d0a33;
}

/* Social tile hover — matched to original @media (hover: hover) pattern */
@media (hover: hover) {
  .light-mode .portfolio__social-tile:hover {
    box-shadow: 0 8px 28px color-mix(in oklab, var(--theme-amethyst-glow) 20%, transparent);
    border-color: color-mix(in oklab, var(--theme-amethyst-glow) 35%, transparent);
  }
}

/* Resume sections */
.light-mode .portfolio__resume-hero,
.light-mode .portfolio__resume-section {
  box-shadow: 0 18px 40px color-mix(in oklab, var(--theme-amethyst-glow) 24%, transparent);
}

.light-mode .portfolio__resume-contact-card {
  background: color-mix(in oklab, var(--theme-lavender-mist) 60%, white 40%);
}

.light-mode .portfolio__resume-page {
  background:
    linear-gradient(180deg, color-mix(in oklab, var(--portfolio-color-surface) 76%, transparent), color-mix(in oklab, var(--theme-lavender-mist) 60%, transparent));
}

/* Avatar */
.light-mode .portfolio__avatar {
  border-color: color-mix(in oklab, var(--theme-amethyst-glow) 50%, transparent);
  box-shadow: 0 0 30px color-mix(in oklab, var(--theme-amethyst-glow) 12%, transparent);
}

/* Badges */
.light-mode .portfolio__badge {
  border-color: color-mix(in oklab, var(--theme-amethyst-glow) 20%, transparent);
}

@media (hover: hover) {
  .light-mode .portfolio__badge:hover {
    background-color: color-mix(in oklab, var(--theme-soft-terracotta) 25%, var(--theme-lavender-mist) 20%);
    border-color: color-mix(in oklab, var(--theme-amethyst-glow) 35%, transparent);
  }
}

/* Button shadows */
.light-mode .portfolio__button {
  box-shadow: 0 10px 28px color-mix(in oklab, var(--theme-amethyst-glow) 20%, transparent);
}
.light-mode .portfolio__button:hover {
  box-shadow: 0 16px 34px color-mix(in oklab, var(--theme-amethyst-glow) 28%, transparent);
}

/* Post card shadow */
.light-mode .portfolio__blog-card {
  box-shadow: 0 14px 32px color-mix(in oklab, var(--theme-amethyst-glow) 22%, transparent);
}

/* ─── Print ─── */
@media print {
  .portfolio__navbar,
  footer,
  .portfolio__resume-hero .btn {
    display: none !important;
  }

  .portfolio,
  .portfolio__resume-page,
  .portfolio__resume-hero,
  .portfolio__resume-section {
    background: #ffffff !important;
    color: #111111 !important;
    box-shadow: none !important;
  }

  .portfolio__resume-hero,
  .portfolio__resume-section,
  .portfolio__resume-contact-card {
    border-color: #cccccc !important;
  }

  .portfolio a,
  .portfolio h1,
  .portfolio h2,
  .portfolio__resume-date,
  .portfolio__resume-meta {
    color: #111111 !important;
  }
}

/* ═══════════════════════════════════════════════════════════
   BENTOFOLIO-INSPIRED BENTO REDESIGN
   Dark-first, lime-accented, gapless bento grid system.
   ═══════════════════════════════════════════════════════════ */

:root {
  --bento-page-bg: #0f0f12;
  --bento-card-bg: #19191d;
  --bento-card-bg-soft: #202027;
  --bento-card-border: rgba(255, 255, 255, 0.08);
  --bento-text: #f5f5f0;
  --bento-muted: #a7a7ad;
  --bento-lime: #c8ff4d;
  --bento-radius: 28px;
  --bento-glow: rgba(200, 255, 77, 0.12);
}

:root.light-mode {
  --bento-page-bg: #f3f3ed;
  --bento-card-bg: #ffffff;
  --bento-card-bg-soft: #ededdf;
  --bento-card-border: rgba(15, 15, 18, 0.1);
  --bento-text: #141416;
  --bento-muted: #67676d;
  --bento-lime: #7aa600;
  --bento-glow: rgba(122, 166, 0, 0.08);
}

/* ── Page background ── */
.portfolio {
  background:
    radial-gradient(circle at 16% 8%, color-mix(in oklab, var(--bento-lime) 18%, transparent), transparent 24rem),
    radial-gradient(circle at 92% 0%, rgba(110, 96, 255, 0.16), transparent 28rem),
    var(--bento-page-bg);
  color: var(--bento-text);
}

.portfolio::before,
.portfolio::after,
.portfolio__vine,
.portfolio__garden-orb { display: none !important; }

.light-mode .portfolio {
  background:
    radial-gradient(circle at 16% 8%, color-mix(in oklab, var(--bento-lime) 10%, transparent), transparent 24rem),
    radial-gradient(circle at 92% 0%, rgba(110, 96, 255, 0.06), transparent 28rem),
    var(--bento-page-bg);
}

/* ── Smooth scrollbar ── */
.portfolio::-webkit-scrollbar { width: 8px; }
.portfolio::-webkit-scrollbar-track { background: var(--bento-page-bg); }
.portfolio::-webkit-scrollbar-thumb { background: var(--bento-card-bg-soft); border-radius: 999px; }
.portfolio::-webkit-scrollbar-thumb:hover { background: var(--bento-lime); }

/* ── Selection ── */
.portfolio ::selection {
  background: color-mix(in oklab, var(--bento-lime) 40%, transparent);
  color: var(--bento-text);
}

/* ═══════════════════════════════════════════════════════════
   NAVBAR — Premium Double-Bezel Glass Architecture
   Outer shell (subtle border) + Inner core (frosted glass)
   ═══════════════════════════════════════════════════════════ */

/* ── Outer bezel shell ── */
.portfolio__navbar {
  position: sticky;
  top: 12px;
  z-index: 20;
  width: min(1140px, calc(100% - 24px));
  margin: 12px auto 0;
  border-radius: 999px;
  padding: 3px;
  background: color-mix(in oklab, var(--bento-card-border) 50%, transparent);
  box-shadow:
    0 0 0 1px color-mix(in oklab, var(--bento-lime) 6%, transparent),
    0 24px 80px rgba(0, 0, 0, 0.25),
    0 8px 32px rgba(0, 0, 0, 0.12);
  /* Transitions removed — GSAP ScrollTrigger handles the shrink animation */
}

/* ── Inner core (frosted glass) ── */
.navbar-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  border-radius: 999px;
  padding: 6px 8px 6px 16px;
  background: color-mix(in oklab, var(--bento-card-bg) 78%, transparent);
  backdrop-filter: blur(24px) saturate(1.4);
  -webkit-backdrop-filter: blur(24px) saturate(1.4);
  box-shadow: inset 0 1px 0 color-mix(in oklab, white 6%, transparent);
}

/* ── Brand ── */
.navbar-brand {
  flex-shrink: 0;
  text-decoration: none;
  color: var(--bento-text);
  font-weight: 700;
  font-size: 1rem;
  letter-spacing: -0.02em;
  transition: color 0.4s cubic-bezier(0.32, 0.72, 0, 1);
}

.navbar-brand:hover {
  color: var(--bento-lime);
}

.navbar-brand__text {
  display: inline-block;
  transition: transform 0.4s cubic-bezier(0.32, 0.72, 0, 1);
}

.navbar-brand:hover .navbar-brand__text {
  transform: translateX(2px);
}

/* ── Nav links ── */
.navbar-nav {
  display: flex;
  align-items: center;
  gap: 2px;
  list-style: none;
  margin: 0;
  padding: 0;
}

.nav-link {
  display: flex;
  align-items: center;
  padding: 7px 14px;
  border-radius: 999px;
  font-size: 0.88rem;
  font-weight: 500;
  letter-spacing: 0.01em;
  color: var(--bento-muted);
  text-decoration: none;
  position: relative;
  transition: color 0.4s cubic-bezier(0.32, 0.72, 0, 1),
              background 0.4s cubic-bezier(0.32, 0.72, 0, 1);
}

.nav-link:hover {
  color: var(--bento-text);
  background: color-mix(in oklab, var(--bento-card-bg-soft) 80%, transparent);
}

.nav-link.active {
  color: var(--bento-lime);
  background: color-mix(in oklab, var(--bento-lime) 10%, transparent);
}

/* Underline reveal on hover */
.nav-link::after {
  content: "";
  position: absolute;
  bottom: 4px;
  left: 50%;
  width: 0;
  height: 1.5px;
  border-radius: 1px;
  background: var(--bento-lime);
  transition: width 0.35s cubic-bezier(0.32, 0.72, 0, 1),
              left 0.35s cubic-bezier(0.32, 0.72, 0, 1);
  transform: translateX(-50%);
}

.nav-link:hover::after,
.nav-link.active::after {
  width: 50%;
}

/* ── Hamburger → X morph ── */
.navbar-toggler {
  display: none;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border: none;
  border-radius: 12px;
  background: transparent;
  color: var(--bento-text);
  cursor: pointer;
  flex-shrink: 0;
  transition: background 0.3s cubic-bezier(0.32, 0.72, 0, 1);
}

.navbar-toggler:hover {
  background: color-mix(in oklab, var(--bento-card-bg-soft) 80%, transparent);
}

.navbar-toggler-icon {
  display: flex;
  flex-direction: column;
  gap: 5px;
  width: 18px;
  position: relative;
}

.navbar-toggler-icon span {
  display: block;
  width: 100%;
  height: 1.5px;
  background: var(--bento-text);
  border-radius: 999px;
  transition: transform 0.4s cubic-bezier(0.32, 0.72, 0, 1),
              opacity 0.3s ease;
  transform-origin: center;
}

/* X morph when open */
.navbar-toggler[aria-expanded="true"] .navbar-toggler-icon span:first-child {
  transform: translateY(3.25px) rotate(45deg);
}

.navbar-toggler[aria-expanded="true"] .navbar-toggler-icon span:last-child {
  transform: translateY(-3.25px) rotate(-45deg);
}

/* ── Theme Toggle — fluid rotation ── */
.portfolio__theme-toggle {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  border: 1px solid var(--bento-card-border);
  background: var(--bento-card-bg-soft);
  color: var(--bento-muted);
  cursor: pointer;
  flex-shrink: 0;
  margin-inline: 4px;
  transition: background 0.4s cubic-bezier(0.32, 0.72, 0, 1),
              color 0.4s cubic-bezier(0.32, 0.72, 0, 1),
              border-color 0.4s cubic-bezier(0.32, 0.72, 0, 1),
              transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
  position: relative;
  overflow: hidden;
}

.portfolio__theme-toggle:hover {
  background: color-mix(in oklab, var(--bento-lime) 15%, transparent);
  border-color: color-mix(in oklab, var(--bento-lime) 30%, transparent);
  color: var(--bento-lime);
  transform: rotate(15deg) scale(1.08);
}

.portfolio__theme-toggle:active {
  transform: rotate(180deg) scale(0.92);
  transition-duration: 0.3s;
}

.theme-icon {
  position: absolute;
  transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1),
              opacity 0.3s ease;
}

.theme-icon--sun {
  display: block;
  transform: rotate(0deg) scale(1);
  opacity: 1;
}

.theme-icon--moon {
  display: block;
  transform: rotate(-90deg) scale(0.5);
  opacity: 0;
}

.light-mode .theme-icon--sun {
  transform: rotate(90deg) scale(0.5);
  opacity: 0;
}

.light-mode .theme-icon--moon {
  transform: rotate(0deg) scale(1);
  opacity: 1;
}

/* ── Download CTA — Button-in-Button ── */
.portfolio__download-button {
  display: inline-flex;
  align-items: center;
  gap: 0;
  padding: 0;
  border-radius: 999px;
  background: var(--bento-lime);
  color: var(--bento-page-bg);
  border: none;
  font-weight: 600;
  font-size: 0.82rem;
  letter-spacing: 0.01em;
  text-decoration: none;
  cursor: pointer;
  flex-shrink: 0;
  margin-inline-start: 6px;
  transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1),
              box-shadow 0.4s cubic-bezier(0.32, 0.72, 0, 1);
  box-shadow: 0 4px 16px color-mix(in oklab, var(--bento-lime) 20%, transparent);
}

.btn-label {
  padding: 8px 14px 8px 16px;
  white-space: nowrap;
}

.btn-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: color-mix(in oklab, var(--bento-page-bg) 18%, transparent);
  flex-shrink: 0;
  margin: 3px;
  transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1),
              background 0.3s ease;
}

.portfolio__download-button:hover {
  transform: translateY(-2px) scale(1.02);
  box-shadow: 0 8px 28px color-mix(in oklab, var(--bento-lime) 30%, transparent);
}

.portfolio__download-button:hover .btn-icon {
  transform: translateY(1px) scale(1.1);
  background: color-mix(in oklab, var(--bento-page-bg) 28%, transparent);
}

.portfolio__download-button:active {
  transform: translateY(0) scale(0.98);
  transition-duration: 0.15s;
}

.light-mode .portfolio__download-button {
  background: var(--bento-lime);
  color: var(--bento-page-bg);
}

.light-mode .btn-icon {
  background: color-mix(in oklab, var(--bento-page-bg) 15%, transparent);
}

/* ═══════════════════════════════════════════════════════════
   MOBILE NAV — Full-screen glass overlay with staggered reveal
   ═══════════════════════════════════════════════════════════ */
@media (max-width: 900px) {
  .portfolio__navbar {
    top: 8px;
    width: calc(100% - 16px);
    border-radius: 20px;
    padding: 2px;
  }

  .navbar-inner {
    border-radius: 18px;
    padding: 6px 10px;
  }

  .navbar-toggler {
    display: flex;
  }

  .navbar-collapse {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 999;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    background: color-mix(in oklab, var(--bento-page-bg) 92%, transparent);
    backdrop-filter: blur(32px) saturate(1.6);
    -webkit-backdrop-filter: blur(32px) saturate(1.6);
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.4s cubic-bezier(0.32, 0.72, 0, 1),
                visibility 0.4s;
  }

  .navbar-collapse.show {
    opacity: 1;
    visibility: visible;
  }

  .navbar-nav {
    flex-direction: column;
    align-items: center;
    gap: 8px;
  }

  .nav-link {
    font-size: 1.5rem;
    font-weight: 600;
    letter-spacing: -0.02em;
    padding: 12px 28px;
    color: var(--bento-text);
    opacity: 0;
    transform: translateY(20px);
    transition: opacity 0.4s cubic-bezier(0.32, 0.72, 0, 1),
                transform 0.4s cubic-bezier(0.32, 0.72, 0, 1),
                color 0.3s ease, background 0.3s ease;
  }

  .navbar-collapse.show .nav-link {
    opacity: 1;
    transform: translateY(0);
  }

  /* Staggered reveal */
  .navbar-collapse.show .nav-item:nth-child(1) .nav-link { transition-delay: 0.08s; }
  .navbar-collapse.show .nav-item:nth-child(2) .nav-link { transition-delay: 0.12s; }
  .navbar-collapse.show .nav-item:nth-child(3) .nav-link { transition-delay: 0.16s; }
  .navbar-collapse.show .nav-item:nth-child(4) .nav-link { transition-delay: 0.20s; }
  .navbar-collapse.show .nav-item:nth-child(5) .nav-link { transition-delay: 0.24s; }

  .nav-link::after { display: none; }

  .nav-link:hover, .nav-link.active {
    color: var(--bento-lime);
    background: transparent;
  }

  .nav-item--cta {
    margin-top: 16px;
    opacity: 0;
    transform: translateY(20px);
    transition: opacity 0.4s cubic-bezier(0.32, 0.72, 0, 1) 0.28s,
                transform 0.4s cubic-bezier(0.32, 0.72, 0, 1) 0.28s;
  }

  .navbar-collapse.show .nav-item--cta {
    opacity: 1;
    transform: translateY(0);
  }

  .portfolio__download-button {
    font-size: 1rem;
    margin-inline-start: 0;
  }

  .btn-label {
    padding: 10px 18px 10px 20px;
  }

  .btn-icon {
    width: 36px;
    height: 36px;
  }

  .portfolio__theme-toggle {
    position: absolute;
    top: 20px;
    right: 20px;
    opacity: 0;
    transform: scale(0.8);
    transition: opacity 0.3s ease 0.3s, transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) 0.3s;
  }

  .navbar-collapse.show .portfolio__theme-toggle {
    opacity: 1;
    transform: scale(1);
  }

  /* Close button inside mobile overlay */
  .navbar-collapse::before {
    content: "";
    position: absolute;
    top: 20px;
    left: 20px;
    width: 40px;
    height: 40px;
    border-radius: 12px;
    background: color-mix(in oklab, var(--bento-card-bg-soft) 60%, transparent);
    border: 1px solid var(--bento-card-border);
  }
}

/* ──────────────────────────────
   BENTO SHELL & GRID
   ────────────────────────────── */
.bento-shell {
  width: min(1180px, calc(100% - 32px));
  margin: 32px auto;
  padding-block: 24px;
}

.bento-grid {
  display: grid;
  gap: 20px;
}

.bento-grid--hero {
  grid-template-columns: 1.35fr .75fr;
  grid-template-areas:
    "profile socials"
    "profile stats"
    "skills skills";
}

.bento-grid--projects,
.bento-grid--blog {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  grid-auto-flow: dense;
  perspective: 900px;
}

.bento-grid--contact {
  grid-template-columns: 1fr 1fr;
}

@media (max-width: 900px) {
  .bento-grid--hero {
    grid-template-columns: 1fr;
    grid-template-areas: "profile" "socials" "stats" "skills";
  }
  .bento-grid--projects,
  .bento-grid--blog,
  .bento-grid--contact {
    grid-template-columns: 1fr;
  }
}

/* ──────────────────────────────
   BENTO CARDS
   ────────────────────────────── */
.bento-card {
  position: relative;
  overflow: hidden;
  border: 1px solid var(--bento-card-border);
  border-radius: var(--bento-radius);
  background:
    linear-gradient(145deg, color-mix(in oklab, var(--bento-card-bg) 94%, white 6%), var(--bento-card-bg));
  box-shadow: 0 18px 70px rgba(0, 0, 0, 0.18);
  color: var(--bento-text);
  padding: clamp(22px, 3vw, 36px);
  transition: transform .3s cubic-bezier(.22, 1, .36, 1), border-color .3s ease, box-shadow .3s ease;
}

/* ── Spotlight border tracking ──
 * ::before creates a radial-gradient border glow that follows the cursor.
 * ::after creates a soft inner glow at the cursor position.
 * Both driven by --mouse-x / --mouse-y set via JS on mousemove.
 * Only active on devices with pointer hover (not touch).
 * ───────────────────────────────────────────────────── */
.bento-card {
  --mouse-x: 50%;
  --mouse-y: 50%;
}

.bento-card::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: radial-gradient(
    340px circle at var(--mouse-x) var(--mouse-y),
    color-mix(in oklab, var(--bento-lime) 90%, transparent),
    transparent 55%
  );
  -webkit-mask:
    linear-gradient(#fff 0 0) content-box,
    linear-gradient(#fff 0 0);
  -webkit-mask-composite: xor;
  mask-composite: exclude;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.35s ease;
  z-index: 1;
}

.bento-card::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
  opacity: 0;
  background: radial-gradient(
    420px circle at var(--mouse-x) var(--mouse-y),
    color-mix(in oklab, var(--bento-lime) 7%, transparent),
    transparent 45%
  );
  transition: opacity 0.35s ease;
  z-index: 0;
}

@media (hover: hover) {
  .bento-card:hover {
    transform: translateY(-4px);
    border-color: color-mix(in oklab, var(--bento-lime) 45%, transparent);
    box-shadow:
      0 24px 80px rgba(0, 0, 0, 0.28),
      0 0 0 1px color-mix(in oklab, var(--bento-lime) 12%, transparent),
      0 0 40px color-mix(in oklab, var(--bento-lime) 8%, transparent);
  }

  .bento-card:hover::before,
  .bento-card:hover::after {
    opacity: 1;
  }
}

/* ── Hero profile card ── */
.bento-card--profile {
  grid-area: profile;
  display: grid;
  grid-template-columns: minmax(190px, .55fr) 1fr;
  align-items: center;
  gap: clamp(24px, 4vw, 46px);
  min-height: 520px;
  padding: clamp(28px, 4vw, 48px);
}

.bento-card--socials { grid-area: socials; }
.bento-card--stats { grid-area: stats; display: grid; gap: 18px; }
.bento-card--skills { grid-area: skills; }

/* ── Avatar ── */
.bento-avatar {
  width: 100%;
  max-width: 320px;
  border-radius: 28px;
  border: 0;
  box-shadow: none;
  filter: grayscale(.1) contrast(1.05);
  transition: filter .3s ease, transform .3s ease;
}

.bento-card--profile:hover .bento-avatar {
  filter: grayscale(0) contrast(1.08);
  transform: scale(1.02);
}

/* ── Typography ── */
.bento-title {
  font-size: clamp(3rem, 7vw, 6.8rem);
  line-height: .92;
  letter-spacing: -.07em;
  margin: 0;
  text-shadow: none;
}

.bento-role {
  color: var(--bento-lime);
  font-size: clamp(1.1rem, 2vw, 1.45rem);
  margin-top: 18px;
  font-weight: 500;
}

.bento-summary {
  color: var(--bento-muted);
  max-width: 62ch;
  margin: 18px 0 0;
  line-height: 1.7;
}

.bento-kicker {
  color: var(--bento-muted);
  font-size: .78rem;
  font-weight: 800;
  letter-spacing: .18em;
  text-transform: uppercase;
  margin-bottom: 12px;
}

/* ── Actions ── */
.bento-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-top: 28px;
}

.bento-button {
  display: inline-flex;
  align-items: center;
  min-height: 48px;
  padding: 0 22px;
  border-radius: 999px;
  text-decoration: none;
}

/* ── Social list ── */
.bento-social-list {
  display: grid;
  gap: 10px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.portfolio__social-item { list-style: none; }

.portfolio__social-link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-height: 48px;
  padding: 0 14px;
  border-radius: 16px;
  background: var(--bento-card-bg-soft);
  color: var(--bento-text);
  text-decoration: none;
  transition: background .2s ease, color .2s ease, transform .2s ease;
}

.portfolio__social-link:hover {
  color: var(--bento-page-bg);
  background: var(--bento-lime);
  transform: translateY(-2px);
}

.portfolio__social-icon { width: 20px; height: 20px; }

/* ── Stats ── */
.bento-stat {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 16px;
  padding: 18px;
  border-radius: 20px;
  background: var(--bento-card-bg-soft);
}

.bento-stat strong {
  font-size: clamp(2rem, 4vw, 3.5rem);
  line-height: 1;
  color: var(--bento-lime);
}

.bento-stat span {
  color: var(--bento-muted);
  text-align: right;
}

/* ── Section headings ── */
.bento-section-heading {
  margin-bottom: 24px;
}

.bento-section-heading h2,
.bento-section-heading .portfolio__section-title {
  margin: 0;
  font-size: clamp(2.4rem, 5vw, 4.8rem);
  letter-spacing: -.06em;
}

.bento-section-heading--split {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 18px;
}

/* ── Chips / badges ── */
.bento-chip-cloud {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.bento-chip.portfolio__badge {
  margin: 0;
  border: 1px solid var(--bento-card-border);
  background: var(--bento-card-bg-soft);
  color: var(--bento-text);
  font-size: .82rem;
  padding: .45rem .85rem;
  border-radius: 999px;
  transition: background .2s ease, border-color .2s ease, color .2s ease;
}

.bento-chip.portfolio__badge:hover {
  background: color-mix(in oklab, var(--bento-lime) 14%, var(--bento-card-bg-soft));
  border-color: color-mix(in oklab, var(--bento-lime) 40%, transparent);
}

/* ── Project cards ── */
.bento-project,
.bento-blog {
  min-height: 100%;
  display: flex;
  flex-direction: column;
  gap: 16px;
  transform-style: preserve-3d;
  will-change: transform;
}

.bento-project--featured,
.bento-blog--featured {
  grid-row: span 2;
}

.bento-project__image {
  width: 100%;
  aspect-ratio: 16 / 10;
  min-height: 0;
  border-radius: 22px;
  object-fit: cover;
  transition: transform .4s ease, filter .4s ease;
}

.bento-card:hover .bento-project__image {
  transform: scale(1.03);
  filter: brightness(1.08);
}

.bento-project__body {
  display: flex;
  flex: 1;
  flex-direction: column;
  gap: 14px;
}

.bento-project h3,
/* Override generic card hover lift — GSAP handles tilt + lift for blog cards */
@media (hover: hover) {
  .bento-blog:hover {
    transform: none;
  }
}

.bento-blog h3 {
  margin: 0;
  font-size: clamp(1.5rem, 3vw, 2.4rem);
  letter-spacing: -.04em;
}

.bento-project p,
.bento-blog p {
  color: var(--bento-muted);
  line-height: 1.65;
}

.bento-project .portfolio__button--read,
.bento-blog .portfolio__button--read {
  margin-top: auto;
  align-self: flex-start;
}

/* ──────────────────────────────
   BUTTONS — bento style
   ────────────────────────────── */
.portfolio__button {
  background: var(--bento-lime);
  border-color: var(--bento-lime);
  color: var(--bento-page-bg);
  box-shadow: none;
  font-weight: 600;
  transition: background .25s ease, color .25s ease, border-color .25s ease, transform .2s ease;
}

.portfolio__button:hover {
  background: transparent;
  color: var(--bento-lime);
  border-color: var(--bento-lime);
  transform: translateY(-2px);
}

.light-mode .portfolio__button {
  background: var(--bento-lime);
  color: var(--bento-page-bg);
}

.light-mode .portfolio__button:hover {
  background: transparent;
  color: var(--bento-lime);
}

.portfolio__button--secondary {
  background: transparent;
  color: var(--bento-text);
  border-color: var(--bento-card-border);
}

.portfolio__button--secondary:hover {
  background: var(--bento-lime);
  color: var(--bento-page-bg);
  border-color: var(--bento-lime);
}

.portfolio__button--read {
  background: transparent;
  color: var(--bento-text);
  border-color: var(--bento-card-border);
  border-radius: 999px;
  padding: .6rem 1.2rem;
  font-size: .9rem;
}

.portfolio__button--read:hover {
  background: var(--bento-lime);
  color: var(--bento-page-bg);
  border-color: var(--bento-lime);
}

/* ── See-all link ── */
.portfolio__see-all {
  color: var(--bento-lime);
}

.portfolio__see-all::after {
  background: var(--bento-lime);
}

/* ──────────────────────────────
   CONTACT SECTION
   ────────────────────────────── */
.bento-contact__form {
  display: flex;
  flex-direction: column;
  gap: 18px;
}

.bento-field {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.bento-field label {
  font-size: .85rem;
  font-weight: 600;
  color: var(--bento-muted);
  letter-spacing: .04em;
}

.bento-field input,
.bento-field textarea {
  background: var(--bento-card-bg-soft);
  border: 1px solid var(--bento-card-border);
  border-radius: 14px;
  padding: 14px 16px;
  color: var(--bento-text);
  font-size: .95rem;
  transition: border-color .2s ease, box-shadow .2s ease;
  outline: none;
  font-family: inherit;
}

.bento-field input:focus,
.bento-field textarea:focus {
  border-color: var(--bento-lime);
  box-shadow: 0 0 0 3px color-mix(in oklab, var(--bento-lime) 16%, transparent);
}

.bento-field textarea {
  min-height: 140px;
  resize: vertical;
}

.bento-contact__submit {
  align-self: flex-start;
}

.bento-contact__meta {
  display: flex;
  flex-wrap: wrap;
  gap: 18px;
  margin-top: 18px;
  color: var(--bento-muted);
  font-size: .9rem;
}

.bento-contact__meta a {
  color: var(--bento-lime);
  text-decoration: none;
}

.bento-contact__meta a:hover {
  text-decoration: underline;
}

.bento-contact__success {
  padding: 24px;
  border-radius: 18px;
  background: color-mix(in oklab, var(--bento-lime) 10%, var(--bento-card-bg));
  border: 1px solid color-mix(in oklab, var(--bento-lime) 30%, transparent);
  color: var(--bento-lime);
  text-align: center;
}

/* ──────────────────────────────
   POST & PROJECT PAGE LAYOUT
   Two-column: article + sticky TOC sidebar
   ────────────────────────────── */

/* Post header */
.post-header {
  margin-bottom: 32px;
}

.post-header__back {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  margin-bottom: 20px;
  font-size: 0.92rem;
}

.post-header__back .portfolio__see-all-arrow {
  transition: transform 0.25s ease;
}

.post-header__back:hover .portfolio__see-all-arrow {
  transform: translateX(-4px);
}

.post-header__date {
  color: var(--bento-muted);
  font-size: 0.88rem;
  margin-bottom: 12px;
}

.post-header__title {
  font-size: clamp(2.2rem, 5.5vw, 4rem);
  letter-spacing: -0.06em;
  line-height: 1.05;
  margin: 0 0 16px;
  color: var(--bento-text);
}

.post-header__labels {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

/* Two-column layout: article + sidebar */
.post-layout {
  display: grid;
  grid-template-columns: 1fr 260px;
  gap: 32px;
  align-items: start;
}

/* Article body */
.post-body {
  min-width: 0;
}

.post-body:hover {
  transform: none;
}

.post-body::after {
  display: none;
}

/* Sidebar */
.post-sidebar {
  position: sticky;
  top: 100px;
  max-height: calc(100vh - 120px);
  overflow-y: auto;
  scrollbar-width: none;
}

.post-sidebar::-webkit-scrollbar {
  display: none;
}

/* TOC card */
.post-toc {
  padding: 20px 22px;
}

.post-toc:hover {
  transform: none;
}

.post-toc::after {
  display: none;
}

.post-toc__label {
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--bento-muted);
  margin: 0 0 14px;
}

.post-toc__nav {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.post-toc__link {
  display: block;
  padding: 6px 10px;
  border-radius: 10px;
  font-size: 0.85rem;
  line-height: 1.4;
  color: var(--bento-muted);
  text-decoration: none;
  border-left: 2px solid transparent;
  transition: color 0.2s ease, background 0.2s ease, border-color 0.2s ease;
}

.post-toc__link:hover {
  color: var(--bento-text);
  background: var(--bento-card-bg-soft);
}

.post-toc__link--sub {
  padding-left: 22px;
  font-size: 0.82rem;
}

.post-toc__link--active {
  color: var(--bento-lime);
  border-left-color: var(--bento-lime);
  background: color-mix(in oklab, var(--bento-lime) 8%, transparent);
  font-weight: 500;
}

/* ─── Prose content styling ─── */
.post-body h2 {
  font-size: clamp(1.5rem, 3.2vw, 2.4rem);
  letter-spacing: -0.04em;
  margin-top: 44px;
  margin-bottom: 14px;
  color: var(--bento-text);
}

.post-body h2:first-child {
  margin-top: 0;
}

.post-body h3 {
  font-size: clamp(1.15rem, 2.2vw, 1.6rem);
  letter-spacing: -0.03em;
  margin-top: 32px;
  margin-bottom: 10px;
  color: var(--bento-text);
}

.post-body p {
  color: var(--bento-muted);
  line-height: 1.8;
  margin-bottom: 16px;
}

.post-body strong {
  color: var(--bento-text);
  font-weight: 600;
}

.post-body a {
  color: var(--bento-lime);
  text-decoration-thickness: 1px;
  text-underline-offset: 2px;
  transition: opacity 0.2s ease;
}

.post-body a:hover {
  opacity: 0.8;
}

.post-body ul,
.post-body ol {
  color: var(--bento-muted);
  padding-left: 1.5em;
  margin-bottom: 16px;
}

.post-body li {
  margin-bottom: 6px;
  line-height: 1.7;
}

.post-body li strong {
  color: var(--bento-text);
}

.post-body code {
  background: var(--bento-card-bg-soft);
  border: 1px solid var(--bento-card-border);
  border-radius: 6px;
  padding: 2px 6px;
  font-size: 0.88em;
  color: var(--bento-lime);
}

.post-body pre {
  background: var(--bento-card-bg-soft);
  border: 1px solid var(--bento-card-border);
  border-radius: 16px;
  padding: 20px;
  overflow-x: auto;
  margin: 20px 0;
}

.post-body pre code {
  background: transparent;
  border: 0;
  padding: 0;
  color: var(--bento-text);
}

.post-body blockquote {
  border-left: 3px solid var(--bento-lime);
  margin: 24px 0;
  padding: 12px 20px;
  background: color-mix(in oklab, var(--bento-lime) 6%, transparent);
  border-radius: 0 12px 12px 0;
}

.post-body blockquote p {
  color: var(--bento-text);
  margin-bottom: 0;
}

.post-body table {
  width: 100%;
  border-collapse: collapse;
  margin: 20px 0;
}

.post-body th,
.post-body td {
  padding: 10px 14px;
  border: 1px solid var(--bento-card-border);
  text-align: left;
}

.post-body th {
  background: var(--bento-card-bg-soft);
  font-weight: 600;
  color: var(--bento-text);
}

.post-body td {
  color: var(--bento-muted);
}

.post-body img {
  border-radius: 14px;
  margin: 20px 0;
}

.post-body hr {
  border: 0;
  border-top: 1px solid var(--bento-card-border);
  margin: 32px 0;
}

/* ── Mobile: single column, hide TOC ── */
@media (max-width: 900px) {
  .post-layout {
    grid-template-columns: 1fr;
  }
  .post-sidebar {
    display: none;
  }
  .post-header__title {
    font-size: clamp(1.8rem, 8vw, 2.8rem);
  }
}

/* ── Light mode TOC overrides ── */
.light-mode .post-toc__link {
  color: var(--bento-muted);
}

.light-mode .post-toc__link:hover {
  color: var(--bento-text);
  background: var(--bento-card-bg-soft);
}

.light-mode .post-toc__link--active {
  color: var(--bento-lime);
  border-left-color: var(--bento-lime);
  background: color-mix(in oklab, var(--bento-lime) 10%, transparent);
}

.light-mode .post-body a {
  color: var(--bento-lime);
}

.light-mode .post-body code {
  color: var(--bento-lime);
}

.light-mode .post-body blockquote {
  background: color-mix(in oklab, var(--bento-lime) 8%, transparent);
  border-left-color: var(--bento-lime);
}

/* ── Reading progress bar ── */
.portfolio__progress-bar {
  background: var(--bento-lime) !important;
  box-shadow: 0 0 8px color-mix(in oklab, var(--bento-lime) 40%, transparent) !important;
}

/* ──────────────────────────────
   RESUME PAGE — Premium Bento
   ────────────────────────────── */
.resume-page {
  width: min(1140px, calc(100% - 24px));
  margin: 0 auto;
  padding: 24px 0 48px;
  display: flex;
  flex-direction: column;
  gap: 20px;
}

/* ── Hero ── */
.resume-hero {
  padding: 0 !important;
  overflow: hidden;
}

.resume-hero__grid {
  display: grid;
  grid-template-columns: 1fr 300px;
  min-height: 280px;
}

.resume-hero__main {
  padding: clamp(28px, 4vw, 48px);
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.resume-hero__top {
  display: flex;
  align-items: center;
  gap: clamp(20px, 3vw, 36px);
}

.resume-hero__avatar-wrap {
  flex-shrink: 0;
  width: 140px;
  height: 140px;
  border-radius: 20px;
  overflow: hidden;
  border: 2px solid var(--bento-card-border);
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
  position: relative;
}

.resume-hero__avatar-wrap::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08);
  pointer-events: none;
}

.resume-hero__avatar {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center top;
  filter: grayscale(0.08) contrast(1.04);
  transition: filter 0.4s ease;
}

.resume-hero__avatar-wrap:hover .resume-hero__avatar {
  filter: grayscale(0) contrast(1.08);
}

.resume-hero__text {
  flex: 1;
  min-width: 0;
}

.resume-hero__eyebrow {
  margin-bottom: 8px;
}

.resume-hero__name {
  font-size: clamp(2.2rem, 5vw, 3.8rem);
  letter-spacing: -0.06em;
  line-height: 1.05;
  color: var(--bento-text);
  margin: 0 0 6px;
}

.resume-hero__label {
  font-size: 1.05rem;
  color: var(--bento-muted);
  margin: 0 0 24px;
}

.resume-hero__actions {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}

/* Contact sidebar */
.resume-hero__contact {
  background: var(--bento-card-bg-soft) !important;
  border: none !important;
  border-left: 1px solid var(--bento-card-border) !important;
  border-radius: 0 !important;
  padding: clamp(24px, 3vw, 36px) !important;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.resume-hero__contact .bento-kicker {
  margin-bottom: 16px;
}

.resume-contact-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.resume-contact-list li {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 0.88rem;
  color: var(--bento-muted);
}

.resume-contact-list li svg {
  flex-shrink: 0;
  color: var(--bento-lime);
}

.resume-contact-list li a {
  color: var(--bento-text);
  text-decoration: none;
  transition: color 0.25s ease;
}

.resume-contact-list li a:hover {
  color: var(--bento-lime);
}

/* ── Section layout ── */
.resume-section {
  padding: 0 !important;
  overflow: hidden;
}

.resume-section__grid {
  display: grid;
  grid-template-columns: 180px 1fr;
}

.resume-section__label {
  padding: clamp(24px, 3vw, 36px);
  border-right: 1px solid var(--bento-card-border);
  display: flex;
  align-items: flex-start;
  padding-top: clamp(28px, 3.5vw, 40px);
}

.resume-section__label .bento-kicker {
  font-size: 0.82rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}

.resume-section__content {
  padding: clamp(24px, 3vw, 36px);
  display: flex;
  flex-direction: column;
  gap: 16px;
}

/* ── Entry cards ── */
.resume-entry {
  padding: 20px !important;
  border-radius: 16px !important;
}

.resume-entry__header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 16px;
  margin-bottom: 10px;
}

.resume-entry__title {
  font-size: 1.15rem;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: var(--bento-text);
  margin: 0;
}

.resume-entry__subtitle {
  font-size: 0.9rem;
  color: var(--bento-lime);
  margin: 3px 0 0;
  font-weight: 500;
}

.resume-entry__date {
  font-size: 0.82rem;
  color: var(--bento-muted);
  white-space: nowrap;
  flex-shrink: 0;
  padding-top: 2px;
}

.resume-entry__summary {
  font-size: 0.92rem;
  color: var(--bento-muted);
  line-height: 1.65;
  margin: 0 0 8px;
}

.resume-entry__highlights {
  margin: 8px 0 0;
  padding-left: 1.2em;
  display: flex;
  flex-direction: column;
  gap: 5px;
}

.resume-entry__highlights li {
  font-size: 0.88rem;
  color: var(--bento-muted);
  line-height: 1.6;
}

.resume-entry__courses {
  margin-top: 12px;
}

.resume-entry__courses-label {
  font-size: 0.78rem;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: var(--bento-muted);
  margin: 0 0 8px;
}

/* ── Profile prose ── */
.resume-prose {
  font-size: 0.95rem;
  color: var(--bento-muted);
  line-height: 1.75;
  margin: 0;
}

/* ── Skills grid ── */
.resume-skills-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 12px;
}

.resume-skill-card {
  padding: 18px !important;
  border-radius: 14px !important;
}

.resume-skill-card__title {
  font-size: 0.92rem;
  font-weight: 700;
  color: var(--bento-text);
  margin: 0 0 10px;
  letter-spacing: -0.01em;
}

/* ── Courses grid ── */
.resume-courses-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 10px;
}

.resume-course-card {
  padding: 14px 18px !important;
  border-radius: 12px !important;
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.resume-course-card__name {
  font-size: 0.88rem;
  font-weight: 600;
  color: var(--bento-text);
  margin: 0;
  letter-spacing: -0.01em;
}

.resume-course-card__source {
  font-size: 0.78rem;
  color: var(--bento-lime);
  margin: 0;
}

/* ── Mobile ── */
@media (max-width: 768px) {
  .resume-hero__grid {
    grid-template-columns: 1fr;
  }

  .resume-hero__top {
    flex-direction: column;
    text-align: center;
    align-items: center;
  }

  .resume-hero__avatar-wrap {
    width: 110px;
    height: 110px;
    border-radius: 16px;
  }

  .resume-hero__actions {
    justify-content: center;
  }

  .resume-hero__contact {
    border-left: none !important;
    border-top: 1px solid var(--bento-card-border) !important;
  }

  .resume-section__grid {
    grid-template-columns: 1fr;
  }

  .resume-section__label {
    border-right: none;
    border-bottom: 1px solid var(--bento-card-border);
    padding-bottom: 16px;
  }

  .resume-entry__header {
    flex-direction: column;
    gap: 4px;
  }

  .resume-entry__date {
    padding-top: 0;
  }
}

/* ── Print ── */
@media print {
  .resume-page { padding: 0; gap: 12px; }
  .resume-hero, .resume-section { box-shadow: none !important; border-color: #ddd !important; }
  .resume-hero__grid { grid-template-columns: 1fr 240px; }
  .resume-section__grid { grid-template-columns: 150px 1fr; }
  .bento-chip { border-color: #ccc; background: #f5f5f5; }
  .portfolio__download-button, .portfolio__button--secondary { display: none !important; }
}

/* ═══════════════════════════════════════════════════════════
   FOOTER — Premium Minimal
   ═══════════════════════════════════════════════════════════ */
.portfolio__footer {
  width: min(1140px, calc(100% - 24px));
  margin: 40px auto 24px;
  border-radius: 24px;
  background: color-mix(in oklab, var(--bento-card-bg) 60%, transparent);
  border: 1px solid color-mix(in oklab, var(--bento-card-border) 60%, transparent);
  padding: 0;
  overflow: hidden;
}

.footer-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 18px 28px;
  position: relative;
}

/* Gradient top separator */
.footer-inner::before {
  content: "";
  position: absolute;
  top: 0;
  left: 10%;
  right: 10%;
  height: 1px;
  background: linear-gradient(90deg, transparent, color-mix(in oklab, var(--bento-lime) 20%, transparent), transparent);
}

.footer-left {
  display: flex;
  align-items: center;
  gap: 10px;
}

.footer-brand {
  font-size: 0.82rem;
  font-weight: 600;
  color: var(--bento-text);
  letter-spacing: -0.01em;
}

.footer-dot {
  width: 3px;
  height: 3px;
  border-radius: 50%;
  background: var(--bento-muted);
  opacity: 0.5;
}

.footer-year {
  font-size: 0.78rem;
  color: var(--bento-muted);
  font-variant-numeric: tabular-nums;
}

.footer-right {
  display: flex;
  align-items: center;
}

.footer-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--bento-muted);
  text-decoration: none;
  font-size: 0.82rem;
  font-weight: 500;
  padding: 6px 12px;
  border-radius: 999px;
  transition: color 0.4s cubic-bezier(0.32, 0.72, 0, 1),
              background 0.4s cubic-bezier(0.32, 0.72, 0, 1);
}

.footer-link:hover {
  color: var(--bento-lime);
  background: color-mix(in oklab, var(--bento-lime) 8%, transparent);
}

.footer-link__arrow {
  display: inline-block;
  transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.footer-link:hover .footer-link__arrow {
  transform: translateX(3px);
}

/* Light mode footer */
.light-mode .portfolio__footer {
  background: color-mix(in oklab, var(--bento-card-bg) 80%, transparent);
  border-color: color-mix(in oklab, var(--bento-card-border) 50%, transparent);
}

.light-mode .footer-inner::before {
  background: linear-gradient(90deg, transparent, color-mix(in oklab, var(--bento-lime) 15%, transparent), transparent);
}

.light-mode .footer-link:hover {
  color: var(--bento-lime);
  background: color-mix(in oklab, var(--bento-lime) 10%, transparent);
}

/* ──────────────────────────────
   404 PAGE
   ────────────────────────────── */
.portfolio .py-3,
.portfolio .py-4,
.portfolio .py-5 {
  padding-block: 48px;
}

/* ──────────────────────────────
   RESPONSIVE
   ────────────────────────────── */
@media (max-width: 640px) {
  .bento-shell {
    width: min(100% - 20px, 1180px);
    margin: 14px auto;
  }
  .bento-card {
    border-radius: 22px;
    padding: 20px;
  }
  .bento-title {
    font-size: clamp(2.6rem, 16vw, 4.2rem);
  }
  .bento-project--featured,
  .bento-blog--featured {
    grid-row: auto;
  }
  .bento-section-heading--split {
    align-items: flex-start;
    flex-direction: column;
  }
  .post-header__title {
    font-size: clamp(1.8rem, 8vw, 2.8rem);
  }
}
