/* =============================================================================
   Design Tokens — CSS Custom Properties

   All color, typography, and selection tokens live here.
   Consumed by all CSS Modules via var(--color-*).
   Background layer variables (--bg-*) are set on <body> at runtime by App.tsx.
   ============================================================================= */

/* --------------------------------------------------------------------------
   Light theme palette
   -------------------------------------------------------------------------- */
:root[data-theme='light'] {
  --color-bg: #f6f1e7;
  --color-fg: #0f0d0a;
  --color-mute: #5a5348;
  --color-line: #d9d1bf;
  --color-card: #fbf7ee;
  --color-accent: #8a5a2b;
  --color-chip: #ebe4d3;
  --color-chip-active: #0f0d0a;
  --color-chip-active-fg: #f6f1e7;

  --selection-bg: #8a5a2b;
  --selection-fg: #fbf7ee;
}

/* --------------------------------------------------------------------------
   Dark theme palette
   -------------------------------------------------------------------------- */
:root[data-theme='dark'] {
  --color-bg: #0e0c0a;
  --color-fg: #f5ecdc;
  --color-mute: #b8ad9b;
  --color-line: #332e26;
  --color-card: #1f1b16;
  --color-accent: #e0b684;
  --color-chip: #2a2520;
  --color-chip-active: #f5ecdc;
  --color-chip-active-fg: #0e0c0a;

  --selection-bg: #e0b684;
  --selection-fg: #0e0c0a;
}

/* --------------------------------------------------------------------------
   Typography tokens — theme-agnostic font stacks
   Fraunces: display/headings | Inter: body prose | JetBrains Mono: code/labels
   -------------------------------------------------------------------------- */
:root {
  --font-display: 'Fraunces Variable', serif;
  --font-body: 'Inter Variable', system-ui, sans-serif;
  --font-mono: 'JetBrains Mono Variable', monospace;

  /*
   * Fraunces Variable has an optical-size (opsz) axis that auto-adjusts
   * at display sizes, making it look different from the static Google Fonts
   * version used in the design reference. Pin opsz to 9 (text mode) to match
   * the static font's visual weight and letterform proportions.
   */
  font-optical-sizing: auto;
}

/* Pin Fraunces optical size to match static font rendering from reference */
h1,
h2,
h3,
h4,
h5,
h6,
[class*='heading'],
[class*='title'],
[class*='school'],
[class*='company'],
[class*='year'],
[class*='gpa'],
[class*='logo'] {
  font-optical-sizing: none;
  font-variation-settings: 'opsz' 9;
}

/* --------------------------------------------------------------------------
   Page gutter — single source of truth for left/right section padding.
   Consumers use `padding-inline: var(--page-gutter)` (Header) or
   shorthand `padding: T var(--page-gutter) B` (sections). No per-component
   media queries for L/R values — the token cascades.
   -------------------------------------------------------------------------- */
:root {
  --page-gutter: 48px;
}

@media (max-width: 1023px) {
  :root {
    --page-gutter: 32px;
  }
}

@media (max-width: 640px) {
  :root {
    --page-gutter: 20px;
  }
}

/* --------------------------------------------------------------------------
   Reveal animation tokens — consolidated from section components.
   Single source of truth so future tweaks (duration, easing, distance)
   happen in one place.
   -------------------------------------------------------------------------- */
:root {
  --reveal-distance: 28px;
  --reveal-duration: 0.8s;
  --reveal-easing: cubic-bezier(0.2, 0.7, 0.3, 1);
  --reveal-transition:
    opacity var(--reveal-duration) var(--reveal-easing),
    transform var(--reveal-duration) var(--reveal-easing);
}

/* --------------------------------------------------------------------------
   Section padding tokens — shared across Education, Experience, and Projects.
   Contact has bespoke values and stays literal.
   -------------------------------------------------------------------------- */
:root {
  --section-pad-top-d: 72px;
  --section-pad-bottom-d: 84px;
  --section-pad-top-t: 56px;
  --section-pad-bottom-t: 68px;
  --section-pad-top-m: 40px;
  --section-pad-bottom-m: 52px;
}
/* =============================================================================
   Global CSS — body defaults, selection, background layers

   Import order in entry-client.tsx:
     1. tokens.css  (tokens)
     2. global.css  (this file)
     3. scrollbar.css
     4. animations.css
   ============================================================================= */

/* --------------------------------------------------------------------------
   Box sizing reset
   -------------------------------------------------------------------------- */
*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

/* --------------------------------------------------------------------------
   Body defaults
   -------------------------------------------------------------------------- */
body {
  position: relative;
  background-color: var(--color-bg);
  color: var(--color-fg);
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  /* Background layer CSS variables — values set by App.tsx on mount */
  --bg-warm: 0.35;
  --bg-grain: 0.12;
  --bg-grain-sz: 60px;
  --bg-press: 0.07;
}

/* --------------------------------------------------------------------------
   Text selection — themed via CSS custom properties
   -------------------------------------------------------------------------- */
::selection {
  background-color: var(--selection-bg);
  color: var(--selection-fg);
}

/* --------------------------------------------------------------------------
   Background ambient layers
   Three fixed-position layers stacked behind all content (z-index: 1).
   pointer-events: none ensures they never intercept clicks.

   Layer 1: Warm radial wash (multiply/screen blend)
   Layer 2: Paper grain — SVG fractal noise, tiled
   Layer 3: Letterpress horizontal grooves

   Source: Portfolio.html background layer CSS (verbatim, adapted for [data-theme])
   -------------------------------------------------------------------------- */
.bg-layer {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 1;
}

/* Warm radial wash — light.
   position:absolute so the glow scrolls with the page (not pinned to viewport). */
.bg-layer.warm {
  position: absolute;
  background:
    radial-gradient(120% 80% at 15% 0%, #d9a966 0%, transparent 55%),
    radial-gradient(100% 70% at 95% 100%, #6b3f1a 0%, transparent 60%);
  mix-blend-mode: multiply;
  opacity: var(--bg-warm);
}

/* Warm radial wash — dark */
html[data-theme='dark'] .bg-layer.warm {
  background:
    radial-gradient(120% 80% at 15% 0%, #8a5a2b 0%, transparent 55%),
    radial-gradient(100% 70% at 95% 100%, #e0b684 0%, transparent 60%);
  mix-blend-mode: screen;
  opacity: calc(var(--bg-warm) * 0.7);
}

/* Paper grain — light: fractalNoise, dark tones */
.bg-layer.grain {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.1  0 0 0 0 0.08  0 0 0 0 0.05  0 0 0 1 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
  background-size: var(--bg-grain-sz) var(--bg-grain-sz);
  mix-blend-mode: multiply;
  opacity: var(--bg-grain);
}

/* Paper grain — dark: light tones for screen blend */
html[data-theme='dark'] .bg-layer.grain {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1  0 0 0 0 0.92  0 0 0 0 0.82  0 0 0 1 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
  mix-blend-mode: screen;
  opacity: calc(var(--bg-grain) * 0.55);
}

/* Letterpress horizontal grooves — light */
.bg-layer.press {
  background-image: repeating-linear-gradient(to bottom, transparent 0 3px, #00000020 3px 4px);
  mix-blend-mode: multiply;
  opacity: var(--bg-press);
}

/* Letterpress horizontal grooves — dark */
html[data-theme='dark'] .bg-layer.press {
  background-image: repeating-linear-gradient(to bottom, transparent 0 3px, #ffffff18 3px 4px);
  mix-blend-mode: screen;
  opacity: calc(var(--bg-press) * 0.9);
}

/* Skip-to-content link — visually hidden until focused */
.skip-link {
  position: absolute;
  top: -100%;
  left: 0;
  z-index: 9999;
  padding: 0.5rem 1rem;
  background: var(--color-bg);
  color: var(--color-fg);
  font-family: var(--font-body);
  font-size: 0.875rem;
  text-decoration: none;
  border: 2px solid var(--color-accent);
  border-radius: 4px;
}

.skip-link:focus {
  top: 1rem;
  left: 1rem;
}

/* --------------------------------------------------------------------------
   Ambient cursor glow — follows mouse via --cx/--cy CSS vars (useCursorGlow)
   -------------------------------------------------------------------------- */
.ambientGlow {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  background: radial-gradient(
    600px circle at calc(var(--cx, 0.5) * 100vw) calc(var(--cy, 0.3) * 100vh),
    rgba(138, 90, 43, calc(0.08 * var(--glow-opacity, 0))),
    transparent 65%
  );
  transition: background 0.2s ease-out;
}

[data-theme='dark'] .ambientGlow {
  background: radial-gradient(
    720px circle at calc(var(--cx, 0.5) * 100vw) calc(var(--cy, 0.3) * 100vh),
    rgba(224, 182, 132, calc(0.176 * var(--glow-opacity, 0))),
    transparent 65%
  );
}

@media (pointer: coarse) {
  .ambientGlow {
    display: none;
  }
}
@media (prefers-reduced-motion: reduce) {
  .ambientGlow {
    display: none;
  }
}

/* --------------------------------------------------------------------------
   Mobile bottom padding — clears the fixed BottomTabBar (96px total clearance)
   -------------------------------------------------------------------------- */
@media (max-width: 640px) {
  #main-content {
    padding-bottom: 96px;
  }
}
/* =============================================================================
   Scrollbar
   Debossed cream channel with a raised tobacco thumb.
   Firefox: scrollbar-width/color give a matching thin fallback.
   WebKit: pseudo-elements build the full groove illusion.
   ============================================================================= */

/* Firefox scrollbar */
html {
  scrollbar-width: thin;
  scrollbar-color: #8a5a2b #00000008;
}

/* Webkit scrollbar */
html::-webkit-scrollbar {
  width: 12px;
}

html::-webkit-scrollbar-track {
  background:
    linear-gradient(to right, #00000014 0 1px, transparent 1px 11px, #ffffffaa 11px 12px), #00000008;
  border-radius: 6px;
}

html::-webkit-scrollbar-thumb {
  background: linear-gradient(to right, #b07e4c, #8a5a2b 50%, #6d4520);
  border-radius: 6px;
  border: 2px solid transparent;
  background-clip: padding-box;
  box-shadow: 0 1px 0 #ffffff55 inset;
}

html::-webkit-scrollbar-thumb:hover {
  background: linear-gradient(to right, #c89764, #9a6a36 50%, #7d5528);
  background-clip: padding-box;
  border: 2px solid transparent;
}

/* Dark theme scrollbar */
html[data-theme='dark'] {
  scrollbar-color: #c8a27a #ffffff08;
}

html[data-theme='dark']::-webkit-scrollbar-track {
  background:
    linear-gradient(to right, #ffffff10 0 1px, transparent 1px 11px, #00000055 11px 12px), #ffffff08;
}

html[data-theme='dark']::-webkit-scrollbar-thumb {
  background: linear-gradient(to right, #d9b88c, #c8a27a 50%, #9a7a52);
  background-clip: padding-box;
  border: 2px solid transparent;
  box-shadow: 0 1px 0 #00000055 inset;
}

html[data-theme='dark']::-webkit-scrollbar-thumb:hover {
  background: linear-gradient(to right, #e8cba3, #d6b087 50%, #a8865a);
  background-clip: padding-box;
  border: 2px solid transparent;
}
/* =============================================================================
   Animation Keyframes — global declarations

   All @keyframes live here; components reference by name in their CSS Modules.
   ============================================================================= */

/* Word fade — used for language switch and scroll-reveal animations */
@keyframes wordFade {
  from {
    opacity: 0;
    transform: translateY(6px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Portrait shimmer — skeleton loading state */
@keyframes portraitShimmer {
  0% {
    background-position: -200% 0;
  }
  100% {
    background-position: 200% 0;
  }
}

/* Ink draw — underline trace animation on links */
@keyframes inkDraw {
  from {
    clip-path: inset(0 100% 0 0);
  }
  to {
    clip-path: inset(0 0% 0 0);
  }
}

/* Fade in — general entrance animation */
@keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

/* Slide up — scroll reveal entrance */
@keyframes slideUp {
  from {
    opacity: 0;
    transform: translateY(var(--reveal-distance, 28px));
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Skeleton pulse — portrait loading state base layer */
@keyframes skeletonPulse {
  0%,
  100% {
    opacity: 0.06;
  }
  50% {
    opacity: 0.12;
  }
}

/* Reduced motion: make all global keyframes instant/no-op.
   This catches inline style animations (splitWordsHero, hero desc/buttons,
   experience entries, education text) that reference global wordFade. */
@media (prefers-reduced-motion: reduce) {
  @keyframes wordFade {
    from {
      opacity: 1;
      transform: none;
    }
    to {
      opacity: 1;
      transform: none;
    }
  }
  @keyframes fadeIn {
    from {
      opacity: 1;
    }
    to {
      opacity: 1;
    }
  }
  @keyframes slideUp {
    from {
      opacity: 1;
      transform: none;
    }
    to {
      opacity: 1;
      transform: none;
    }
  }
  @keyframes skeletonPulse {
    0%,
    100% {
      opacity: 1;
    }
  }
  @keyframes portraitShimmer {
    0%,
    100% {
      transform: none;
    }
  }
}
/* fraunces-vietnamese-wght-normal */
@font-face {
  font-family: 'Fraunces Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/fraunces-vietnamese-wght-normal-CnvboYUG.woff2) format('woff2-variations');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

/* fraunces-latin-ext-wght-normal */
@font-face {
  font-family: 'Fraunces Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/fraunces-latin-ext-wght-normal-Ca2vKHc0.woff2) format('woff2-variations');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* fraunces-latin-wght-normal */
@font-face {
  font-family: 'Fraunces Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/fraunces-latin-wght-normal-ukD16Tqj.woff2) format('woff2-variations');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}/* fraunces-vietnamese-wght-italic */
@font-face {
  font-family: 'Fraunces Variable';
  font-style: italic;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/fraunces-vietnamese-wght-italic-BicUS2cM.woff2) format('woff2-variations');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

/* fraunces-latin-ext-wght-italic */
@font-face {
  font-family: 'Fraunces Variable';
  font-style: italic;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/fraunces-latin-ext-wght-italic-BfTTTDIL.woff2) format('woff2-variations');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* fraunces-latin-wght-italic */
@font-face {
  font-family: 'Fraunces Variable';
  font-style: italic;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/fraunces-latin-wght-italic-Py8at3oI.woff2) format('woff2-variations');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}/* inter-cyrillic-ext-wght-normal */
@font-face {
  font-family: 'Inter Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2) format('woff2-variations');
  unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
}

/* inter-cyrillic-wght-normal */
@font-face {
  font-family: 'Inter Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2) format('woff2-variations');
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}

/* inter-greek-ext-wght-normal */
@font-face {
  font-family: 'Inter Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2) format('woff2-variations');
  unicode-range: U+1F00-1FFF;
}

/* inter-greek-wght-normal */
@font-face {
  font-family: 'Inter Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/inter-greek-wght-normal-CkhJZR-_.woff2) format('woff2-variations');
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;
}

/* inter-vietnamese-wght-normal */
@font-face {
  font-family: 'Inter Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2) format('woff2-variations');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

/* inter-latin-ext-wght-normal */
@font-face {
  font-family: 'Inter Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2) format('woff2-variations');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* inter-latin-wght-normal */
@font-face {
  font-family: 'Inter Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/inter-latin-wght-normal-Dx4kXJAl.woff2) format('woff2-variations');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}/* jetbrains-mono-cyrillic-ext-wght-normal */
@font-face {
  font-family: 'JetBrains Mono Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url(data:font/woff2;base64,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) format('woff2-variations');
  unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
}

/* jetbrains-mono-cyrillic-wght-normal */
@font-face {
  font-family: 'JetBrains Mono Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url(/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2) format('woff2-variations');
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}

/* jetbrains-mono-greek-wght-normal */
@font-face {
  font-family: 'JetBrains Mono Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url(/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2) format('woff2-variations');
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;
}

/* jetbrains-mono-vietnamese-wght-normal */
@font-face {
  font-family: 'JetBrains Mono Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url(/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2) format('woff2-variations');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

/* jetbrains-mono-latin-ext-wght-normal */
@font-face {
  font-family: 'JetBrains Mono Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url(/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2) format('woff2-variations');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* jetbrains-mono-latin-wght-normal */
@font-face {
  font-family: 'JetBrains Mono Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url(/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2) format('woff2-variations');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}/* =============================================================================
   AnimatedText -- word-fade and letter-stagger animation styles.

   Keyframes defined locally so CSS Modules name scoping matches.
   ============================================================================= */

@keyframes _wordFade_1hoc2_1 {
  from {
    opacity: 0;
    transform: translateY(6px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Word fade: each word fades in with slight upward translate */
._word_1hoc2_19 {
  display: inline-block;
  margin-right: 0.28em;
  opacity: 0;
  animation: _wordFade_1hoc2_1 0.5s both;
}

/* Letter stagger: each character fades in individually */
._letter_1hoc2_27 {
  display: inline-block;
  white-space: pre;
  opacity: 0;
  animation: _wordFade_1hoc2_1 0.55s cubic-bezier(0.2, 0.7, 0.3, 1) both;
}

/* Reduced motion: show immediately, no animation */
@media (prefers-reduced-motion: reduce) {
  ._word_1hoc2_19,
  ._letter_1hoc2_27 {
    animation: none;
    opacity: 1;
  }
}
/* =============================================================================
   Header — sticky navigation bar

   Responsive breakpoints:
   - Desktop (>=1024): full nav + all social icons
   - Tablet (641-1023): full nav + email icon only
   - Mobile (<=640): no nav, lang + theme toggles only
   ============================================================================= */

._header_1r5re_10 {
  position: sticky;
  top: 0;
  z-index: 20;
  backdrop-filter: blur(22px) saturate(200%);
  -webkit-backdrop-filter: blur(22px) saturate(200%);
  padding: 18px var(--page-gutter);
}

html[data-theme='light'] ._header_1r5re_10 {
  background: rgba(255, 255, 255, 0.48);
  border-bottom: 1px solid rgba(0, 0, 0, 0.08);
}
html[data-theme='dark'] ._header_1r5re_10 {
  background: rgba(0, 0, 0, 0.42);
  border-bottom: 1px solid rgba(255, 255, 255, 0.06);
}

/* --------------------------------------------------------------------------
   Container
   -------------------------------------------------------------------------- */

._container_1r5re_32 {
  max-width: 1240px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}

/* --------------------------------------------------------------------------
   Logo
   -------------------------------------------------------------------------- */

._logo_1r5re_45 {
  font-family: var(--font-display);
  font-size: 18px;
  font-weight: 500;
  line-height: 1;
  letter-spacing: -0.3px;
  color: var(--color-fg);
  text-decoration: none;
}

._dot_1r5re_55 {
  color: var(--color-accent);
}

/* --------------------------------------------------------------------------
   Navigation
   -------------------------------------------------------------------------- */

._nav_1r5re_63 {
  display: flex;
  gap: 28px;
  align-items: center;
}

._navLink_1r5re_69 {
  position: relative;
  font-family: var(--font-mono);
  font-size: 13px;
  color: var(--color-mute);
  text-decoration: none;
  letter-spacing: 0.3px;
  cursor: pointer;
  background: none;
  border: none;
  padding: 0;
}

._navLink_1r5re_69::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: -2px;
  height: 1px;
  background: var(--color-accent);
  pointer-events: none;
  clip-path: inset(0 100% 0 0);
  transition: clip-path 0.5s cubic-bezier(0.78, 0.02, 0.22, 1);
}

@media (prefers-reduced-motion: reduce) {
  ._navLink_1r5re_69::after {
    transition: none;
  }
}
[data-reduced-motion='true'] ._navLink_1r5re_69::after {
  transition: none;
}

._navLink_1r5re_69:hover::after {
  clip-path: inset(0 0 0 0);
}

._navLink_1r5re_69:hover {
  color: var(--color-fg);
}

._navIndex_1r5re_112 {
  color: var(--color-accent);
  margin-right: 6px;
}

/* --------------------------------------------------------------------------
   Controls
   -------------------------------------------------------------------------- */

._controls_1r5re_121 {
  display: flex;
  align-items: center;
  gap: 8px;
}

._iconLink_1r5re_127 {
  width: 32px;
  height: 32px;
  border-radius: 16px;
  border: 1px solid var(--color-line);
  background: transparent;
  color: var(--color-fg);
  display: flex;
  align-items: center;
  justify-content: center;
  text-decoration: none;
  transition:
    background 0.2s,
    border-color 0.2s,
    transform 0.2s;
}

._iconLink_1r5re_127:hover {
  background: var(--color-chip);
  border-color: var(--color-fg);
  transform: translateY(-1px);
}

._separator_1r5re_150 {
  width: 1px;
  height: 18px;
  background: var(--color-line);
  margin: 0 6px;
}

._langPill_1r5re_157 {
  display: flex;
  background: var(--color-chip);
  border-radius: 20px;
  padding: 3px;
  font-family: var(--font-mono);
  font-size: 11px;
}

._langBtn_1r5re_166 {
  border: none;
  padding: 5px 10px;
  border-radius: 18px;
  cursor: pointer;
  background: transparent;
  color: var(--color-mute);
  font-family: inherit;
  font-size: inherit;
  letter-spacing: 0.5px;
  transition:
    background 0.25s,
    color 0.25s;
}

._langBtnActive_1r5re_181 {
  border: none;
  padding: 5px 10px;
  border-radius: 18px;
  cursor: pointer;
  background: var(--color-chip-active);
  color: var(--color-chip-active-fg);
  font-family: inherit;
  font-size: inherit;
  letter-spacing: 0.5px;
  transition:
    background 0.25s,
    color 0.25s;
}

._themeBtn_1r5re_196 {
  width: 32px;
  height: 32px;
  border-radius: 16px;
  border: 1px solid var(--color-line);
  background: transparent;
  color: var(--color-fg);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  transition: background 0.2s;
}

/* Both icons always in DOM (hydration-stable). CSS shows the correct one
   based on the data-theme attribute set by the blocking script pre-paint. */
._sunIcon_1r5re_213 {
  display: flex;
}

._moonIcon_1r5re_217 {
  display: none;
}

html[data-theme='light'] ._sunIcon_1r5re_213 {
  display: none;
}

html[data-theme='light'] ._moonIcon_1r5re_217 {
  display: flex;
}

._themeBtn_1r5re_196:hover {
  background: var(--color-chip);
}

/* --------------------------------------------------------------------------
   Social icon groups (responsive visibility)
   -------------------------------------------------------------------------- */

._socialDesktop_1r5re_237 {
  display: flex;
  gap: 8px;
  align-items: center;
}

._socialTablet_1r5re_243 {
  display: none;
}

/* --------------------------------------------------------------------------
   Tablet (641px - 1023px)
   -------------------------------------------------------------------------- */

@media (min-width: 641px) and (max-width: 1023px) {
  ._navLink_1r5re_69 {
    font-size: 12px;
  }

  ._nav_1r5re_63 {
    gap: 18px;
  }

  ._socialDesktop_1r5re_237 {
    display: none;
  }

  ._socialTablet_1r5re_243 {
    display: flex;
    gap: 12px;
    align-items: center;
  }
}

/* --------------------------------------------------------------------------
   Mobile (<=640px)
   -------------------------------------------------------------------------- */

@media (max-width: 640px) {
  ._header_1r5re_10 {
    padding: 14px var(--page-gutter);
  }

  ._nav_1r5re_63 {
    display: none;
  }

  ._controls_1r5re_121 {
    gap: 6px;
  }

  ._socialDesktop_1r5re_237 {
    display: none;
  }

  ._socialTablet_1r5re_243 {
    display: none;
  }

  ._separator_1r5re_150 {
    display: none;
  }

  ._logo_1r5re_45 {
    font-size: 17px;
  }
}
/* =============================================================================
   PortraitImg -- shimmer skeleton + crossfade image loading.

   Keyframes defined locally so CSS Modules name scoping matches.
   ============================================================================= */

/* Skeleton pulse: opacity 0.55 → 0.85 → 0.55 */
@keyframes _skeletonPulse_wo2f9_1 {
  0%,
  100% {
    opacity: 0.55;
  }
  50% {
    opacity: 0.85;
  }
}

/* Shimmer sweep: translateX(-100%) → translateX(220%) */
@keyframes _portraitShimmer_wo2f9_1 {
  0% {
    transform: translateX(-100%);
  }
  100% {
    transform: translateX(220%);
  }
}

._container_wo2f9_28 {
  position: relative;
  overflow: hidden;
  border-radius: inherit;
  width: 100%;
  height: 100%;
}

/* Skeleton base: gradient pulse */
._skeleton_wo2f9_37 {
  position: absolute;
  inset: 0;
  background: linear-gradient(
    135deg,
    var(--color-chip) 0%,
    var(--color-card) 50%,
    var(--color-chip) 100%
  );
  animation: _skeletonPulse_wo2f9_1 1.6s ease-in-out infinite;
  transition: opacity 0.5s ease-out;
}

/* Shimmer sweep: 40%-width bar that translates across the skeleton */
._shimmerWrap_wo2f9_51 {
  position: absolute;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
}

/* Light theme shimmer: translucent warm-white sweep */
._shimmer_wo2f9_51 {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 40%;
  background: linear-gradient(
    90deg,
    transparent 0%,
    rgba(246, 241, 231, 0.53) 50%,
    transparent 100%
  );
  animation: _portraitShimmer_wo2f9_1 1.8s cubic-bezier(0.4, 0, 0.2, 1) infinite;
  mix-blend-mode: overlay;
}

html[data-theme='dark'] ._shimmer_wo2f9_51 {
  background: linear-gradient(90deg, transparent 0%, rgba(14, 12, 10, 0.53) 50%, transparent 100%);
}

/* Image: transitions from invisible+blurred to visible+sharp */
._image_wo2f9_79 {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition:
    opacity 0.6s ease-out,
    filter 0.6s ease-out;
}

/* Reduced motion: disable all animations */
@media (prefers-reduced-motion: reduce) {
  ._skeleton_wo2f9_37 {
    animation: none;
  }
  ._shimmer_wo2f9_51 {
    animation: none;
    display: none;
  }
  ._image_wo2f9_79 {
    transition: none;
    opacity: 1 !important;
    filter: none !important;
  }
}
/* =============================================================================
   Hero Section — above-the-fold identity with responsive portrait
   Desktop: 2-column (text + rectangular portrait)
   Tablet: 2-column (text + smaller portrait)
   Mobile: single column with circular avatar
   ============================================================================= */

._hero_t8vl4_8 {
  padding: 72px var(--page-gutter) 80px;
}

._outerWrap_t8vl4_12 {
  max-width: 1240px;
  margin: 0 auto;
}

._container_t8vl4_17 {
  display: grid;
  grid-template-columns: 1fr 340px;
  gap: 56px;
  align-items: center;
  margin-top: 24px;
}

._textCol_t8vl4_25 {
  min-width: 0;
}

/* --------------------------------------------------------------------------
   Kicker: "01 . PROFILE"
   -------------------------------------------------------------------------- */
._kicker_t8vl4_32 {
  font-family: var(--font-mono);
  font-size: 11px;
  line-height: 1;
  letter-spacing: 1.5px;
  color: var(--color-mute);
  text-transform: uppercase;
  display: block;
}

._kickerDot_t8vl4_42 {
  color: var(--color-accent);
  margin: 0 4px;
}

/* --------------------------------------------------------------------------
   Title: large display heading with inline role
   -------------------------------------------------------------------------- */
._title_t8vl4_50 {
  font-family: var(--font-display);
  font-size: clamp(48px, 5.6vw, 72px);
  font-weight: 400;
  line-height: 1.04;
  letter-spacing: -1.6px;
  color: var(--color-fg);
  margin: 0;
  text-wrap: pretty;
}

._role_t8vl4_61 {
  color: var(--color-accent);
  font-style: italic;
}

/* --------------------------------------------------------------------------
   Description paragraph
   -------------------------------------------------------------------------- */
._desc_t8vl4_69 {
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 1.55;
  color: var(--color-mute);
  margin-top: 28px;
  margin-bottom: 0;
  max-width: 540px;
  text-wrap: pretty;
}

/* --------------------------------------------------------------------------
   Action buttons row
   -------------------------------------------------------------------------- */
._buttons_t8vl4_83 {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 30px;
}

._btnPrimary_t8vl4_90 {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 16px;
  background: var(--color-fg);
  color: var(--color-bg);
  border-radius: 999px;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 500;
  line-height: normal;
  text-decoration: none;
  border: 1px solid var(--color-fg);
  cursor: pointer;
  transition:
    transform 0.22s,
    background 0.22s,
    border-color 0.22s,
    color 0.22s;
}

._btnPrimary_t8vl4_90:hover {
  transform: translateY(-2px);
}

._btnSecondary_t8vl4_116 {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 16px;
  background: transparent;
  color: var(--color-fg);
  border: 1px solid var(--color-line);
  border-radius: 999px;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 500;
  line-height: normal;
  text-decoration: none;
  cursor: pointer;
  transition:
    transform 0.22s,
    background 0.22s,
    border-color 0.22s,
    color 0.22s;
}

._btnSecondary_t8vl4_116:hover {
  border-color: var(--color-fg);
  transform: translateY(-2px);
}

/* --------------------------------------------------------------------------
   Portrait: rectangular on desktop/tablet
   -------------------------------------------------------------------------- */
/* Outer wrapper: layout only */
._portraitWrap_t8vl4_147 {
  position: relative;
  width: 100%;
  justify-self: stretch;
}

/* Inner frame: visual container with parallax */
._portraitFrame_t8vl4_154 {
  aspect-ratio: 4 / 5;
  border-radius: 2px;
  overflow: hidden;
  position: relative;
  box-shadow: 0 30px 80px rgba(0, 0, 0, 0.2);
  will-change: transform;
}

/* Bottom gradient vignette over portrait, theme-aware */
._portraitGradient_t8vl4_164 {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, transparent 60%, rgba(246, 241, 231, 0.2));
  pointer-events: none;
  border-radius: 2px;
}

html[data-theme='dark'] ._portraitGradient_t8vl4_164 {
  background: linear-gradient(180deg, transparent 60%, rgba(14, 12, 10, 0.2));
}

/* --------------------------------------------------------------------------
   Mobile avatar: circular, hidden on desktop/tablet
   -------------------------------------------------------------------------- */
._mobileAvatarRow_t8vl4_179 {
  display: none;
}

._mobileNameBlock_t8vl4_183 {
  transform: translateY(-4px);
}

._mobileAvatar_t8vl4_179 {
  width: 68px;
  height: 68px;
  border-radius: 999px;
  object-fit: cover;
  border: 1px solid var(--color-line);
  aspect-ratio: 1 / 1;
  flex-shrink: 0;
}

._mobileAvatarName_t8vl4_197 {
  font-family: var(--font-display);
  font-size: 18px;
  font-weight: 500;
  letter-spacing: -0.5px;
  line-height: 1.15;
  color: var(--color-fg);
}

._mobileRole_t8vl4_206 {
  display: block;
  font-family: var(--font-display);
  font-size: 15px;
  font-style: italic;
  font-weight: 400;
  color: var(--color-accent);
  letter-spacing: -0.3px;
  line-height: 1;
}

/* ==========================================================================
   Tablet: 641px - 1023px
   ========================================================================== */
@media (min-width: 641px) and (max-width: 1023px) {
  ._hero_t8vl4_8 {
    padding: 48px var(--page-gutter) 64px;
  }

  ._container_t8vl4_17 {
    grid-template-columns: 1fr 240px;
    gap: 36px;
  }

  ._title_t8vl4_50 {
    font-size: clamp(36px, 5.4vw, 48px);
    letter-spacing: -1.5px;
  }

  ._desc_t8vl4_69 {
    font-size: 14px;
    margin-top: 22px;
  }

  ._buttons_t8vl4_83 {
    gap: 7px;
    margin-top: 22px;
  }
}

/* ==========================================================================
   Mobile: <= 640px
   ========================================================================== */
@media (max-width: 640px) {
  ._hero_t8vl4_8 {
    padding: 36px var(--page-gutter) 56px;
  }

  ._container_t8vl4_17 {
    grid-template-columns: 1fr;
    gap: 24px;
    margin-top: 0;
  }

  ._portraitWrap_t8vl4_147 {
    display: none;
  }

  ._mobileAvatarRow_t8vl4_179 {
    display: flex;
    align-items: center;
    gap: 14px;
    margin-top: 22px;
    margin-bottom: 0;
  }

  ._title_t8vl4_50 {
    display: none;
  }

  ._desc_t8vl4_69 {
    font-size: 14px;
    margin-top: 16px;
  }

  ._buttons_t8vl4_83 {
    gap: 8px;
    margin-top: 22px;
  }

  ._mobileAvatarName_t8vl4_197 {
    font-size: 22px;
  }

  ._mobileRole_t8vl4_206 {
    font-size: 16px;
  }
}
._section_11mzk_1 {
  /* Default empty — consumer-supplied className applies the layout (padding, max-width, border-top). */
}

._kickerRow_11mzk_5 {
  display: flex;
  align-items: baseline;
  gap: 0.5em;
}

._kicker_11mzk_5 {
  /* Fallback only — consumers pass their own styles.kicker via kickerClassName. */
}
/* =============================================================================
   Projects Section — chip filter + 2-column card grid

   Keyframes defined locally so CSS Modules name scoping matches.
   ============================================================================= */

@keyframes _fadeIn_n1854_1 {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

._section_n1854_16 {
  padding: var(--section-pad-top-d) var(--page-gutter) var(--section-pad-bottom-d);
  border-top: 1px solid var(--color-line);
}

._container_n1854_21 {
  max-width: 1240px;
  margin: 0 auto;
}

/* -- Kicker + heading -------------------------------------------------------- */

._kicker_n1854_28 {
  font-family: var(--font-mono);
  font-size: 11px;
  line-height: 1;
  letter-spacing: 1.5px;
  color: var(--color-mute);
  text-transform: uppercase;
  display: block;
}

._kickerDot_n1854_38 {
  color: var(--color-accent);
  margin: 0 4px;
}

/* Kicker + count share one row, baseline-aligned, justified. */
._kickerRow_n1854_44 {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 24px;
}

/* -- Filter row -------------------------------------------------------------- */

._filterRow_n1854_55 {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 32px;
}

._count_n1854_62 {
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--color-mute);
}

._chips_n1854_68 {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

._chip_n1854_68 {
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.5px;
  line-height: normal;
  padding: 6px 14px;
  border-radius: 999px;
  border: 1px solid var(--color-line);
  background: transparent;
  color: var(--color-fg);
  cursor: pointer;
  transition: all 0.2s;
}

._chip_n1854_68:hover {
  background: var(--color-chip);
}

._chipActive_n1854_92 {
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.5px;
  line-height: normal;
  padding: 6px 14px;
  border-radius: 999px;
  border: 1px solid var(--color-fg);
  background: var(--color-fg);
  color: var(--color-bg);
  cursor: pointer;
  transition: all 0.2s;
}

/* Separator between tag chips and Showcased chip */
._separator_n1854_107 {
  width: 1px;
  height: 20px;
  background: var(--color-line);
  align-self: center;
  margin: 0 4px;
}

/* Showcased chip (inactive) */
._chipShowcased_n1854_116 {
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.5px;
  line-height: normal;
  padding: 6px 14px;
  border-radius: 999px;
  border: 1px solid var(--color-accent);
  background: transparent;
  color: var(--color-accent);
  cursor: pointer;
  transition: all 0.2s;
}

._chipShowcased_n1854_116:hover {
  background: var(--color-accent);
  color: var(--color-bg);
}

/* Showcased chip (active) */
._chipShowcasedActive_n1854_136 {
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.5px;
  line-height: normal;
  padding: 6px 14px;
  border-radius: 999px;
  border: 1px solid var(--color-accent);
  background: var(--color-accent);
  color: var(--color-bg);
  cursor: pointer;
  transition: all 0.2s;
}

/* Showcased star badge on project card image */
._showcasedBadge_n1854_151 {
  position: absolute;
  top: 10px;
  right: 10px;
  font-size: 12px;
  color: var(--color-accent);
  background: rgba(0, 0, 0, 0.55);
  width: 24px;
  height: 24px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  pointer-events: none;
}

/* -- Card grid --------------------------------------------------------------- */

._grid_n1854_169 {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 24px;
}

._card_n1854_175 {
  position: relative;
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  align-items: stretch;
  border: 1px solid var(--color-line);
  border-radius: 4px;
  overflow: hidden;
  background: var(--color-card);
  height: 100%;
  transition:
    border-color 0.2s ease,
    box-shadow 0.2s ease,
    transform 0.45s cubic-bezier(0.2, 0.7, 0.3, 1);
}

/* Glare overlay: positioned over card, pointer-events none */
._glare_n1854_192 {
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
  z-index: 2;
}

._card_n1854_175:hover {
  transform: translateY(-3px);
}

/* Light theme shadows */
html[data-theme='light'] ._card_n1854_175 {
  box-shadow: 0 4px 14px rgba(26, 23, 20, 0.04);
}

html[data-theme='light'] ._card_n1854_175:hover {
  border-color: rgba(138, 90, 43, 0.4);
  box-shadow: 0 22px 44px rgba(26, 23, 20, 0.12);
}

/* Dark theme shadows */
html[data-theme='dark'] ._card_n1854_175 {
  box-shadow:
    0 8px 24px rgba(0, 0, 0, 0.35),
    0 1px 0 rgba(245, 236, 220, 0.03) inset;
}

html[data-theme='dark'] ._card_n1854_175:hover {
  border-color: rgba(224, 182, 132, 0.4);
  box-shadow:
    0 28px 60px rgba(0, 0, 0, 0.5),
    0 2px 0 rgba(245, 236, 220, 0.04) inset;
}

/* -- Card image -------------------------------------------------------------- */

._imageWrap_n1854_230 {
  position: relative;
  overflow: hidden;
  background: var(--color-chip);
}

._cardImage_n1854_236 {
  width: 100%;
  height: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  display: block;
  transition: transform 0.6s cubic-bezier(0.2, 0.7, 0.3, 1);
}

._card_n1854_175:hover ._cardImage_n1854_236 {
  transform: scale(1.04);
}

._indexBadge_n1854_249,
._countBadge_n1854_250 {
  position: absolute;
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 1px;
  background: rgba(0, 0, 0, 0.55);
  color: #fff;
  padding: 3px 8px;
  border-radius: 999px;
}

._indexBadge_n1854_249 {
  top: 10px;
  left: 10px;
}

._countBadge_n1854_250 {
  bottom: 10px;
  right: 10px;
}

/* -- Card content ------------------------------------------------------------ */

._cardContent_n1854_273 {
  padding: 20px;
  display: flex;
  flex-direction: column;
  min-width: 0;
}

._cardTitle_n1854_280 {
  font-family: var(--font-display);
  font-size: 22px;
  font-weight: 500;
  line-height: normal;
  color: var(--color-fg);
  letter-spacing: -0.5px;
  margin: 0;
}

._cardYear_n1854_290 {
  font-family: var(--font-mono);
  font-size: 12px;
  color: var(--color-mute);
}

._cardTags_n1854_296 {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin: 10px 0 10px;
}

._tag_n1854_303 {
  font-family: var(--font-mono);
  font-size: 9.5px;
  letter-spacing: 0.5px;
  color: var(--color-mute);
  border: 1px solid var(--color-line);
  background: transparent;
  padding: 1px 7px;
  border-radius: 999px;
}

._cardBlurb_n1854_314 {
  font-family: var(--font-body);
  font-size: 13px;
  line-height: 1.55;
  color: var(--color-mute);
  margin: 0 0 14px;
  flex: 1;
  text-wrap: pretty;
}

._cardLinks_n1854_324 {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  margin-top: auto;
}

._linkPill_n1854_331 {
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: 0.3px;
  line-height: normal;
  color: var(--color-fg);
  text-decoration: none;
  border: 1px solid var(--color-line);
  border-radius: 999px;
  padding: 5px 11px;
  transition: all 0.22s;
}

._linkPill_n1854_331:hover {
  background: var(--color-fg);
  color: var(--color-bg);
  border-color: var(--color-fg);
}

/* -- Empty state ------------------------------------------------------------- */

._empty_n1854_352 {
  text-align: center;
  padding: 80px 24px;
  border: 1px dashed var(--color-line);
  border-radius: 4px;
  animation: _fadeIn_n1854_1 0.4s ease-out;
}

._empty_n1854_352 h3 {
  font-family: var(--font-display);
  font-size: 38px;
  font-weight: 400;
  line-height: normal;
  letter-spacing: -1px;
  color: var(--color-fg);
  margin: 0;
}

._emptyAccent_n1854_370 {
  color: var(--color-accent);
  font-style: italic;
}

._empty_n1854_352 p {
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--color-mute);
  margin: 12px auto 22px;
  max-width: 340px;
}

._clearBtn_n1854_383 {
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.5px;
  line-height: normal;
  padding: 10px 18px;
  border-radius: 999px;
  border: 1px solid var(--color-fg);
  background: var(--color-fg);
  color: var(--color-bg);
  cursor: pointer;
}

._clearBtn_n1854_383:hover {
  opacity: 0.85;
}

/* -- Tablet ------------------------------------------------------------------ */

@media (min-width: 641px) and (max-width: 1023px) {
  ._section_n1854_16 {
    padding: var(--section-pad-top-t) var(--page-gutter) var(--section-pad-bottom-t);
  }
}

/* -- Mobile ------------------------------------------------------------------ */

@media (max-width: 640px) {
  ._section_n1854_16 {
    padding: var(--section-pad-top-m) var(--page-gutter) var(--section-pad-bottom-m);
  }

  ._countRow_n1854_415 {
    margin-bottom: 22px;
  }

  ._filterRow_n1854_55 {
    margin-bottom: 22px;
  }

  ._grid_n1854_169 {
    grid-template-columns: 1fr;
    gap: 16px;
  }

  ._card_n1854_175 {
    grid-template-columns: 1fr;
  }

  ._cardImage_n1854_236 {
    aspect-ratio: 16 / 10;
  }
}

/* ---------------------------------------------------------------------------
   Locale-switch stagger — triggered by key-bump on .filterRow and .grid.
   Bumping the key remounts children, replaying the animation. First mount
   is skipped JS-side via a useEffect guard.
   --------------------------------------------------------------------------- */
@keyframes _localeStagger_n1854_1 {
  from {
    opacity: 0;
    transform: translateY(4px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

._filterRow_n1854_55 ._chip_n1854_68,
._filterRow_n1854_55 ._chipActive_n1854_92,
._filterRow_n1854_55 ._chipShowcased_n1854_116,
._filterRow_n1854_55 ._chipShowcasedActive_n1854_136,
._grid_n1854_169 > * {
  animation: _localeStagger_n1854_1 280ms ease-out both;
  animation-delay: calc(var(--i, 0) * 30ms);
}

@media (prefers-reduced-motion: reduce) {
  ._filterRow_n1854_55 ._chip_n1854_68,
  ._filterRow_n1854_55 ._chipActive_n1854_92,
  ._filterRow_n1854_55 ._chipShowcased_n1854_116,
  ._filterRow_n1854_55 ._chipShowcasedActive_n1854_136,
  ._grid_n1854_169 > * {
    animation: none;
  }
}
[data-reduced-motion='true'] ._filterRow_n1854_55 ._chip_n1854_68,
[data-reduced-motion='true'] ._filterRow_n1854_55 ._chipActive_n1854_92,
[data-reduced-motion='true'] ._filterRow_n1854_55 ._chipShowcased_n1854_116,
[data-reduced-motion='true'] ._filterRow_n1854_55 ._chipShowcasedActive_n1854_136,
[data-reduced-motion='true'] ._grid_n1854_169 > * {
  animation: none;
}
/* =============================================================================
   Experience section — spine timeline + exclusive accordion + company logos
   ============================================================================= */

._section_rbo8r_5 {
  padding: var(--section-pad-top-d) var(--page-gutter) var(--section-pad-bottom-d);
  border-top: 1px solid var(--color-line);
}

._container_rbo8r_10 {
  max-width: 1240px;
  margin: 0 auto;
}

._kicker_rbo8r_15 {
  font-family: var(--font-mono);
  font-size: 11px;
  line-height: 1;
  letter-spacing: 1.5px;
  color: var(--color-mute);
  text-transform: uppercase;
  display: block;
  margin-bottom: 24px; /* tighter rhythm — no subhead between kicker and entries */
}

._kickerDot_rbo8r_26 {
  color: var(--color-accent);
  margin: 0 4px;
}

._heading_rbo8r_31 {
  font-family: var(--font-display);
  font-size: 44px;
  font-weight: 400;
  line-height: normal;
  color: var(--color-fg);
  letter-spacing: -1px;
  margin-top: 14px;
  margin-bottom: 40px;
}

/* --------------------------------------------------------------------------
   Timeline spine
   -------------------------------------------------------------------------- */

._timeline_rbo8r_46 {
  position: relative;
  padding-left: 60px;
}

/* Vertical spine line */
._timeline_rbo8r_46::before {
  content: '';
  position: absolute;
  left: 28px;
  top: 12px;
  bottom: 12px;
  width: 2px;
  background: var(--color-line);
}

/* --------------------------------------------------------------------------
   Entry + dot
   -------------------------------------------------------------------------- */

._entry_rbo8r_66 {
  position: relative;
  border-bottom: 1px solid var(--color-line);
}

._entry_rbo8r_66:last-child {
  border-bottom: none;
}

._dot_rbo8r_75 {
  position: absolute;
  left: -38px; /* 60px padding - offset */
  top: 24px;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  border: 2px solid var(--color-line);
  background: var(--color-bg);
  z-index: 1;
}

._dotActive_rbo8r_87 {
  border-color: var(--color-accent);
}

._dotActive_rbo8r_87::after {
  content: '';
  position: absolute;
  inset: 2px;
  border-radius: 50%;
  background: var(--color-accent);
}

/* --------------------------------------------------------------------------
   Accordion button
   -------------------------------------------------------------------------- */

._accordionBtn_rbo8r_103 {
  display: grid;
  grid-template-columns: 44px 1fr 220px;
  align-items: center;
  gap: 18px;
  width: 100%;
  padding: 18px 14px;
  background: transparent;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  text-align: left;
  color: inherit;
  font: inherit;
  transition: background 0.2s;
}

._accordionBtnOpen_rbo8r_120 {
  background: var(--color-card);
}

._logo_rbo8r_124 {
  width: 36px;
  height: 36px;
  object-fit: contain;
  background: #fff;
  flex-shrink: 0;
  display: block;
}

._meta_rbo8r_133 {
  min-width: 0;
}

._company_rbo8r_137 {
  font-family: var(--font-display);
  font-size: 24px;
  font-weight: 500;
  line-height: normal;
  color: var(--color-fg);
  letter-spacing: -0.5px;
  display: block;
}

._role_rbo8r_147 {
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--color-mute);
  letter-spacing: 0.3px;
  display: block;
  margin-top: 2px;
}

._dateCol_rbo8r_156 {
  text-align: right;
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--color-mute);
  letter-spacing: 0.5px;
}

._duration_rbo8r_164 {
  color: var(--color-accent);
  display: block;
  margin-top: 2px;
}

/* --------------------------------------------------------------------------
   Expanded panel
   -------------------------------------------------------------------------- */

._panel_rbo8r_174 {
  max-height: 0;
  overflow: hidden;
  opacity: 0;
  transition:
    max-height 0.4s cubic-bezier(0.2, 0.7, 0.3, 1),
    opacity 0.3s;
}

._panelOpen_rbo8r_183 {
  max-height: 400px;
  opacity: 1;
}

._panelInner_rbo8r_188 {
  padding: 4px 14px 22px 76px;
}

._bullets_rbo8r_192 {
  list-style: disc;
  padding-left: 18px;
  margin: 0 0 14px;
}

._bullets_rbo8r_192 li {
  font-family: var(--font-body);
  font-size: 14px;
  line-height: 1.6;
  color: var(--color-fg);
  opacity: 0.87;
  margin-bottom: 6px;
  text-wrap: pretty;
}

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

._tag_rbo8r_208 {
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 0.5px;
  color: var(--color-mute);
  border: 1px solid var(--color-line);
  background: transparent;
  padding: 2px 8px;
  border-radius: 999px;
}

/* --------------------------------------------------------------------------
   Tablet (641-1023)
   -------------------------------------------------------------------------- */

@media (min-width: 641px) and (max-width: 1023px) {
  ._section_rbo8r_5 {
    padding: var(--section-pad-top-t) var(--page-gutter) var(--section-pad-bottom-t);
  }
  ._heading_rbo8r_31 {
    font-size: 38px;
  }
  ._company_rbo8r_137 {
    font-size: 20px;
  }
}

/* --------------------------------------------------------------------------
   Mobile (<=640)
   -------------------------------------------------------------------------- */

@media (max-width: 640px) {
  ._section_rbo8r_5 {
    padding: var(--section-pad-top-m) var(--page-gutter) var(--section-pad-bottom-m);
  }
  ._heading_rbo8r_31 {
    font-size: 32px;
    margin-bottom: 28px;
  }
  ._timeline_rbo8r_46 {
    padding-left: 0;
  }
  ._timeline_rbo8r_46::before {
    display: none;
  }
  ._dot_rbo8r_75 {
    display: none;
  }
  ._accordionBtn_rbo8r_103 {
    grid-template-columns: 36px 1fr;
    grid-template-rows: auto auto;
    padding: 16px 12px;
    gap: 10px 12px;
  }
  ._logo_rbo8r_124 {
    width: 32px;
    height: 32px;
    background: #fff;
    display: block;
  }
  ._company_rbo8r_137 {
    font-size: 19px;
  }
  ._dateCol_rbo8r_156 {
    text-align: left;
    grid-column: 1 / -1;
    font-size: 10px;
  }
  ._duration_rbo8r_164 {
    display: inline;
    margin-left: 0.4em;
  }
  ._panelInner_rbo8r_188 {
    padding: 4px 12px 20px 12px;
  }
  ._panelOpen_rbo8r_183 {
    max-height: 600px;
  }
  ._role_rbo8r_147 {
    font-size: 10px;
  }
  ._bullets_rbo8r_192 li {
    font-size: 13px;
  }
}
._section_ib80n_1 {
  padding: var(--section-pad-top-d) var(--page-gutter) var(--section-pad-bottom-d);
  border-top: 1px solid var(--color-line);
}

._container_ib80n_6 {
  max-width: 1240px;
  margin: 0 auto;
}

._kicker_ib80n_11 {
  font-family: var(--font-mono);
  font-size: 11px;
  line-height: 1;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  color: var(--color-mute);
  display: block;
  margin: 0 0 24px; /* tighter rhythm — no subhead between kicker and entries */
}

._kickerDot_ib80n_22 {
  color: var(--color-accent);
  margin: 0 4px;
}

._heading_ib80n_27 {
  font-family: var(--font-display);
  font-size: 44px;
  font-weight: 400;
  line-height: normal;
  color: var(--color-fg);
  letter-spacing: -1px;
  margin-top: 14px;
  margin-bottom: 40px;
}

._entry_ib80n_38 {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 44px;
  align-items: start;
}

._mainCol_ib80n_45 {
  display: flex;
  flex-direction: column;
  padding-top: 2px;
  min-width: 0;
}

._schoolRow_ib80n_52 {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 4px;
}

._logo_ib80n_59 {
  width: 44px;
  height: 44px;
  object-fit: contain;
  flex-shrink: 0;
}

._school_ib80n_52 {
  font-family: var(--font-display);
  font-size: 28px;
  font-weight: 500;
  line-height: normal;
  color: var(--color-fg);
  letter-spacing: -0.5px;
}

._degree_ib80n_75 {
  font-family: var(--font-display);
  font-size: 20px;
  font-weight: 400;
  line-height: normal;
  font-style: italic;
  color: var(--color-mute);
  display: block;
  margin-bottom: 6px;
}

._dateRange_ib80n_86 {
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--color-mute);
  letter-spacing: 0.5px;
  display: block;
  margin-bottom: 2px;
}

._dateOngoing_ib80n_95 {
  color: var(--color-accent);
}

._where_ib80n_99 {
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--color-mute);
  letter-spacing: 0.3px;
  display: block;
}

._mobileYear_ib80n_107 {
  display: none;
}

._mobileOngoing_ib80n_111 {
  color: var(--color-accent);
}

._gpaCol_ib80n_115 {
  text-align: right;
  padding-top: 4px;
  flex-shrink: 0;
}

._gpaLabel_ib80n_121 {
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 1.5px;
  color: var(--color-mute);
  margin-bottom: 4px;
}

._gpaNumber_ib80n_129 {
  font-family: var(--font-display);
  font-size: 44px;
  font-weight: 500;
  letter-spacing: -1.5px;
  line-height: 1;
  color: var(--color-fg);
  display: block;
}

._gpaScale_ib80n_139 {
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--color-mute);
  display: block;
  margin-top: 4px;
}

/* Tablet */
@media (min-width: 641px) and (max-width: 1023px) {
  ._section_ib80n_1 {
    padding: var(--section-pad-top-t) var(--page-gutter) var(--section-pad-bottom-t);
  }
  ._heading_ib80n_27 {
    font-size: 38px;
  }
  ._school_ib80n_52 {
    font-size: 22px;
  }
  ._degree_ib80n_75 {
    font-size: 16px;
  }
  ._gpaNumber_ib80n_129 {
    font-size: 38px;
  }
}

/* Mobile */
@media (max-width: 640px) {
  ._section_ib80n_1 {
    padding: var(--section-pad-top-m) var(--page-gutter) var(--section-pad-bottom-m);
  }
  ._heading_ib80n_27 {
    font-size: 32px;
    margin-bottom: 28px;
  }
  ._entry_ib80n_38 {
    display: flex;
    flex-wrap: wrap;
    gap: 20px 24px;
    justify-content: space-between;
  }
  ._mainCol_ib80n_45 {
    flex: 1 1 220px;
  }
  ._mobileYear_ib80n_107 {
    display: block;
    font-family: var(--font-mono);
    font-size: 10px;
    color: var(--color-mute);
    letter-spacing: 1px;
    margin-top: 10px;
  }
  ._logo_ib80n_59 {
    width: 36px;
    height: 36px;
  }
  ._school_ib80n_52 {
    font-size: 22px;
  }
  ._degree_ib80n_75 {
    font-size: 16px;
  }
  ._gpaNumber_ib80n_129 {
    font-size: 38px;
  }
}
._section_1vxn1_1 {
  padding: 56px var(--page-gutter) 96px;
  border-top: 1px solid var(--color-line);
}

._container_1vxn1_6 {
  max-width: 1240px;
  margin: 0 auto;
}

._kicker_1vxn1_11 {
  font-family: var(--font-mono);
  font-size: 11px;
  line-height: 1;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  color: var(--color-mute);
}

._kickerDot_1vxn1_20 {
  color: var(--color-accent);
  margin: 0 4px;
}

._grid_1vxn1_25 {
  display: grid;
  grid-template-columns: 1fr;
  gap: 56px;
  align-items: start;
  margin-top: 14px;
}

._heading_1vxn1_33 {
  font-family: var(--font-display);
  font-size: 80px;
  font-weight: 400;
  color: var(--color-fg);
  line-height: 1.02;
  letter-spacing: -2.5px;
  margin: 0;
  max-width: 800px;
}

._emailPill_1vxn1_44 {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-top: 32px;
  padding: 10px 16px;
  background: var(--color-fg);
  color: var(--color-bg);
  border: 1px solid var(--color-fg);
  border-radius: 999px;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 500;
  line-height: normal;
  text-decoration: none;
  cursor: pointer;
  transition:
    transform 0.22s,
    background 0.22s,
    border-color 0.22s,
    color 0.22s;
}

._emailPill_1vxn1_44:hover {
  transform: translateY(-2px);
}

._emailIcon_1vxn1_71 {
  width: 13px;
  height: 13px;
  flex-shrink: 0;
}

/* Tablet */
@media (min-width: 641px) and (max-width: 1023px) {
  ._section_1vxn1_1 {
    padding: 56px var(--page-gutter) 96px;
  }
  ._heading_1vxn1_33 {
    font-size: 60px;
  }
  ._grid_1vxn1_25 {
    gap: 56px;
  }
}

/* Mobile */
@media (max-width: 640px) {
  ._section_1vxn1_1 {
    padding: 40px var(--page-gutter) 64px;
  }
  ._heading_1vxn1_33 {
    font-size: clamp(42px, 12vw, 58px);
    letter-spacing: -2.5px;
  }
  ._grid_1vxn1_25 {
    grid-template-columns: 1fr;
    gap: 28px;
  }
  ._emailPill_1vxn1_44 {
    margin-top: 22px;
  }
}
._footer_v6mas_1 {
  border-top: 1px solid var(--color-line);
  padding: 40px var(--page-gutter) 28px;
}

._container_v6mas_6 {
  max-width: 1240px;
  margin: 0 auto;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 24px;
  flex-wrap: wrap;
}

._links_v6mas_16 {
  display: flex;
  gap: 22px;
  flex-wrap: wrap;
  row-gap: 10px;
}

._link_v6mas_16 {
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--color-mute);
  text-decoration: none;
  letter-spacing: 0.5px;
  transition: color 0.2s;
  position: relative;
  padding-bottom: 2px;
}

._link_v6mas_16::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 1px;
  background: var(--color-fg);
  pointer-events: none;
  clip-path: inset(0 100% 0 0);
  transition: clip-path 0.5s cubic-bezier(0.78, 0.02, 0.22, 1);
}

@media (prefers-reduced-motion: reduce) {
  ._link_v6mas_16::after {
    transition: none;
  }
}
[data-reduced-motion='true'] ._link_v6mas_16::after {
  transition: none;
}

._link_v6mas_16:hover::after {
  clip-path: inset(0 0 0 0);
}

._link_v6mas_16:hover {
  color: var(--color-fg);
}

._arrow_v6mas_64 {
  margin-right: 2px;
}

._copyright_v6mas_68 {
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--color-mute);
  letter-spacing: 0.5px;
  opacity: 0.9;
}

/* Mobile */
@media (max-width: 640px) {
  ._footer_v6mas_1 {
    padding: 32px var(--page-gutter) 96px;
  } /* extra bottom clearance for BottomTabBar */
  ._container_v6mas_6 {
    flex-direction: column;
    gap: 14px;
    text-align: center;
  }
  ._links_v6mas_16 {
    justify-content: center;
    gap: 14px;
    row-gap: 10px;
  }
}
/* =============================================================================
   BottomTabBar -- mobile-only fixed bottom navigation
   Hidden on tablet/desktop, pill-shaped bar on mobile (<=640px)
   ============================================================================= */

._tabBar_pzodd_6 {
  display: none;
}

@media (max-width: 640px) {
  ._tabBar_pzodd_6 {
    display: flex;
    position: fixed;
    left: 12px;
    right: 12px;
    bottom: 14px;
    z-index: 30;
    background: var(--color-card);
    border: 1px solid var(--color-line);
    border-radius: 999px;
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.12);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    padding: 8px 6px;
    justify-content: space-around;
    align-items: center;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
}

._tab_pzodd_6 {
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 0.3px;
  color: var(--color-mute);
  background: transparent;
  border: none;
  padding: 7px 10px;
  border-radius: 999px;
  cursor: pointer;
  text-decoration: none;
  transition:
    background 0.2s,
    color 0.2s;
}

._tab_pzodd_6:hover {
  color: var(--color-fg);
}

._tabActive_pzodd_52 {
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 0.3px;
  background: var(--color-fg);
  color: var(--color-bg);
  border: none;
  padding: 7px 10px;
  border-radius: 999px;
  cursor: pointer;
  text-decoration: none;
  transition:
    background 0.2s,
    color 0.2s;
}
