/* ── CSS Custom Properties ── */
:root {
  --bg: #111216;
  --fg: #e6e6e6;
  --muted: #8b8b8b;
  --panel: #1a1b20;
  --border: #2a2b31;
  --accent: #e6e6e6;
  --font-mono: 'JetBrains Mono', 'Courier New', monospace;
  --font-xs: 0.75rem;
  --font-sm: 0.875rem;
  --font-base: 1rem;
  --font-lg: 1.125rem;
  --font-xl: 1.25rem;
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-6: 1.5rem;
  --space-8: 2rem;
  --space-12: 3rem;
  --radius: 0.375rem;
  --header-blur: rgba(26,27,32,0.7);
}

@media (prefers-color-scheme: light) {
  :root:not([data-theme="dark"]) {
    --bg: #f5f5f0;
    --fg: #1a1a1a;
    --muted: #6b7280;
    --panel: #faf9f6;
    --border: #e5e7eb;
    --accent: #1a1a1a;
    --header-blur: rgba(245,245,240,0.8);
  }
}
[data-theme="light"] {
  --bg: #f5f5f0;
  --fg: #1a1a1a;
  --muted: #6b7280;
  --panel: #faf9f6;
  --border: #e5e7eb;
  --accent: #1a1a1a;
  --header-blur: rgba(245,245,240,0.8);
}

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

/* ── Base ── */
html{scroll-behavior:smooth;font-size:16px}
body{background:var(--bg);color:var(--fg);font-family:var(--font-mono);font-size:var(--font-sm);line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
h1,h2,h3{font-weight:600;line-height:1.2;margin-bottom:var(--space-4)}
h1{font-size:var(--font-lg)}h2{font-size:var(--font-base)}h3{font-size:var(--font-sm)}
p{margin-bottom:var(--space-3)}
a{color:var(--fg);text-decoration:none;transition:color 0.15s}
a:hover{color:var(--accent)}

/* ── Layout ── */
.container{max-width:1024px;margin:0 auto;padding:0 var(--space-4)}
@media(min-width:640px){.container{padding:0 var(--space-6)}}
@media(min-width:1024px){.container{padding:0 var(--space-8)}}

.skip-link{position:absolute;top:-40px;left:0;background:var(--accent);color:var(--bg);padding:8px;z-index:100}
.skip-link:focus{top:0}

/* ── Header ── */
.header{position:sticky;top:0;z-index:100;backdrop-filter:blur(8px);background:var(--header-blur);border-bottom:1px solid var(--border)}
.header-content{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) 0;gap:var(--space-4)}

.logo{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2);border-radius:var(--radius)}
.logo:hover{background:var(--panel)}
.logo-symbol{font-size:var(--font-xs);color:var(--muted)}
.logo-text{font-size:var(--font-xs)}

.nav{display:flex;align-items:center;gap:var(--space-4);margin-left:auto;margin-right:var(--space-4)}
@media(max-width:991px){.nav{display:none}}
.nav-link{font-size:var(--font-sm);color:var(--muted);padding:var(--space-2) var(--space-3);border-radius:var(--radius)}
.nav-link:hover,.nav-link.active{color:var(--fg);background:var(--panel)}

.theme-toggle{background:none;border:1px solid var(--border);color:var(--fg);cursor:pointer;padding:var(--space-2);border-radius:var(--radius);font-size:var(--font-lg);flex-shrink:0;min-width:40px;min-height:40px;display:flex;align-items:center;justify-content:center}
.theme-toggle:hover{background:var(--panel);border-color:var(--accent)}

.mobile-toggle{display:none;background:none;border:none;font-size:1.25rem;color:var(--fg);cursor:pointer;padding:var(--space-2);width:40px;height:40px;align-items:center;justify-content:center;margin-left:auto}
@media(max-width:991px){.mobile-toggle{display:flex}}

.mobile-menu{display:none;position:absolute;top:100%;left:0;right:0;background:var(--bg);border-top:1px solid var(--border);box-shadow:0 4px 6px -1px rgba(0,0,0,0.1)}
.mobile-menu.open{display:block}
.mobile-menu-content{padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-3)}
.mobile-nav-link{color:var(--fg);padding:var(--space-2) 0;border-bottom:1px solid var(--border)}
.mobile-nav-link:last-child{border-bottom:none}
.mobile-nav-link:hover,.mobile-nav-link.active{color:var(--accent)}
.menu-backdrop{position:fixed;inset:0;background:rgba(0,0,0,0.5);backdrop-filter:blur(4px);z-index:99;opacity:0;visibility:hidden;transition:opacity 0.2s}
body.menu-open .menu-backdrop{opacity:1;visibility:visible}

/* ── Main ── */
.main{padding:var(--space-6) 0}
.section{margin-bottom:var(--space-8)}
.section-title{font-size:var(--font-lg);font-weight:600;margin-bottom:var(--space-1)}
.section-subtitle{font-size:var(--font-xs);color:var(--muted)}

/* ── Blog Posts ── */
.blog-posts{display:flex;flex-direction:column;gap:0}
.blog-post{padding:var(--space-3) 0;border-bottom:1px solid var(--border)}
.blog-post:last-child{border-bottom:none}
.blog-post:hover{background:var(--panel);margin:0 calc(-1 * var(--space-4));padding:var(--space-3) var(--space-4);border-radius:var(--radius)}
.blog-post-link{display:block}
.blog-post-meta{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:var(--space-1)}
.blog-post-title{font-size:var(--font-sm);font-weight:500;line-height:1.4}
.blog-post-date{font-size:var(--font-xs);color:var(--muted);white-space:nowrap;margin-left:var(--space-4)}
.blog-post-excerpt{font-size:var(--font-xs);color:var(--muted);line-height:1.4}

/* ── Projects ── */
.project-grid{display:flex;flex-direction:column;gap:0}
.project-card{padding:var(--space-3) 0;border-bottom:1px solid var(--border)}
.project-card:last-child{border-bottom:none}
.project-card:hover{background:var(--panel);margin:0 calc(-1 * var(--space-4));padding:var(--space-3) var(--space-4);border-radius:var(--radius)}
.project-title{font-size:var(--font-sm);font-weight:500;margin-bottom:var(--space-2)}
.project-title a{color:var(--fg)}
.project-title a:hover{color:var(--accent);text-decoration:underline}
.project-title-with-status{display:flex;align-items:baseline;gap:var(--space-2);flex-wrap:wrap}
.project-status{font-size:0.625rem;color:var(--muted);opacity:0.85}
.project-description{font-size:var(--font-xs);color:var(--muted);line-height:1.5}

/* ── Experience ── */
.list{list-style:none}
.list-item{margin-bottom:var(--space-2);line-height:1.5;font-size:var(--font-sm)}
.text-muted{color:var(--muted)}

/* ── Footer ── */
.footer{margin-top:var(--space-12);padding:var(--space-6) 0;border-top:1px solid var(--border)}
.footer-content{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:var(--space-4)}
.footer-links{display:flex;gap:var(--space-6)}
.footer-links a{color:var(--muted);font-size:var(--font-sm)}
.footer-links a:hover{color:var(--fg)}
.footer-credit{color:var(--muted);font-size:var(--font-xs)}
.footer-terminal-hint{font-size:var(--font-xs);color:var(--muted)}
@media(max-width:768px){.footer-content{flex-direction:column;text-align:center}.footer-links{justify-content:center}}

/* ── RSS ── */
.rss-link{margin-top:var(--space-2)}
.rss-link a{font-size:var(--font-xs);color:var(--muted);display:inline-flex;align-items:center;gap:var(--space-1)}
.rss-link a:hover{color:var(--fg)}
.rss-icon{flex-shrink:0}

/* ── OSS ── */
.oss-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-4);margin-bottom:var(--space-6);padding:var(--space-4) 0;border-bottom:1px solid var(--border)}
@media(max-width:479px){.oss-stats{grid-template-columns:repeat(2,1fr)}}
.oss-stat{display:flex;flex-direction:column;gap:var(--space-1)}
.oss-stat-value{font-size:var(--font-xl);font-weight:700;line-height:1;font-variant-numeric:tabular-nums}
.oss-stat-label{font-size:var(--font-xs);color:var(--muted)}
.oss-loading .oss-stat-value{animation:oss-pulse 1.5s ease-in-out infinite}
@keyframes oss-pulse{0%,100%{opacity:1}50%{opacity:0.4}}

/* ── OSS Languages ── */
.oss-languages{margin-bottom:var(--space-6)}
.oss-lang-bar{display:flex;height:6px;border-radius:3px;overflow:hidden;margin-bottom:var(--space-3);gap:2px}
.oss-lang-segment{border-radius:1px}
.oss-lang-legend{display:flex;flex-wrap:wrap;gap:var(--space-3)}
.oss-lang-item{display:inline-flex;align-items:center;gap:var(--space-1);font-size:var(--font-xs);color:var(--muted)}
.oss-lang-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}

/* ── OSS Chart ── */
.oss-chart{margin-bottom:var(--space-6)}
.oss-chart-wrapper{overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:var(--space-1)}
.oss-chart-months{display:flex;margin-bottom:4px;font-size:9px;color:var(--muted)}
.oss-chart-month{flex-shrink:0}
.oss-chart-container{display:flex;gap:4px}
.oss-chart-grid{display:grid;grid-template-rows:repeat(7,11px);grid-auto-flow:column;grid-auto-columns:11px;gap:3px}
.oss-chart-cell{width:11px;height:11px;border-radius:2px;background:var(--border)}
.oss-chart-cell.oss-chart-empty{background:transparent}
.oss-chart-cell[data-level="1"]{background:#0e4429}
.oss-chart-cell[data-level="2"]{background:#006d32}
.oss-chart-cell[data-level="3"]{background:#26a641}
.oss-chart-cell[data-level="4"]{background:#39d353}
[data-theme="light"] .oss-chart-cell{background:#ebedf0}
[data-theme="light"] .oss-chart-cell.oss-chart-empty{background:transparent}
[data-theme="light"] .oss-chart-cell[data-level="1"]{background:#9be9a8}
[data-theme="light"] .oss-chart-cell[data-level="2"]{background:#40c463}
[data-theme="light"] .oss-chart-cell[data-level="3"]{background:#30a14e}
[data-theme="light"] .oss-chart-cell[data-level="4"]{background:#216e39}
.oss-chart-legend{display:flex;align-items:center;justify-content:flex-end;gap:3px;margin-top:var(--space-2);font-size:9px;color:var(--muted)}
.oss-chart-legend-cell{display:inline-block;width:11px;height:11px;border-radius:2px;background:var(--border)}
.oss-chart-legend-cell[data-level="1"]{background:#0e4429}
.oss-chart-days{display:grid;grid-template-rows:repeat(7,11px);gap:3px;flex-shrink:0;width:28px}
.oss-chart-day-label{font-size:9px;color:var(--muted);line-height:11px;text-align:right}
.oss-chart-legend-cell[data-level="2"]{background:#006d32}
.oss-chart-legend-cell[data-level="3"]{background:#26a641}
.oss-chart-legend-cell[data-level="4"]{background:#39d353}
[data-theme="light"] .oss-chart-legend-cell{background:#ebedf0}
[data-theme="light"] .oss-chart-legend-cell[data-level="1"]{background:#9be9a8}
[data-theme="light"] .oss-chart-legend-cell[data-level="2"]{background:#40c463}
[data-theme="light"] .oss-chart-legend-cell[data-level="3"]{background:#30a14e}
[data-theme="light"] .oss-chart-legend-cell[data-level="4"]{background:#216e39}

/* ── OSS Contributions ── */
.oss-contribs-title{font-size:var(--font-sm);font-weight:600;margin-bottom:var(--space-3);color:var(--fg)}
.oss-contribs{display:flex;flex-direction:column;gap:0}
.oss-contrib{display:block;padding:var(--space-3) 0;border-bottom:1px solid var(--border);text-decoration:none}
.oss-contrib:last-child{border-bottom:none}
.oss-contrib:hover{background:var(--panel);margin:0 calc(-1 * var(--space-4));padding:var(--space-3) var(--space-4);border-radius:var(--radius)}
.oss-contrib-repo{display:block;font-size:var(--font-xs);color:var(--muted);margin-bottom:var(--space-1)}
.oss-contrib-meta{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-4)}
.oss-contrib-title{font-size:var(--font-sm);font-weight:500;color:var(--fg);line-height:1.4}
.oss-contrib-date{font-size:var(--font-xs);color:var(--muted);white-space:nowrap;flex-shrink:0}

/* ── Reduced Motion ── */
@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}

/* ── Blog Content ── */
.blog-content{font-size:var(--font-sm);line-height:1.7}
.blog-content h2{font-size:var(--font-base);font-weight:600;margin-top:var(--space-8);margin-bottom:var(--space-3);padding-bottom:var(--space-2);border-bottom:1px solid var(--border)}
.blog-content h3{font-size:var(--font-sm);font-weight:600;margin-top:var(--space-6);margin-bottom:var(--space-2)}
.blog-content p{margin-bottom:var(--space-3)}
.blog-content ul,.blog-content ol{margin-bottom:var(--space-4);padding-left:var(--space-6)}
.blog-content li{margin-bottom:var(--space-1)}
.blog-content strong{font-weight:600;color:var(--fg)}
.blog-content a{text-decoration:underline;text-underline-offset:2px}
.blog-content a:hover{color:var(--accent)}
.blog-content em{font-style:italic;color:var(--fg)}

/* Code */
.blog-content code{font-family:var(--font-mono);font-size:0.8rem;background:var(--panel);padding:0.1em 0.35em;border-radius:3px;border:1px solid var(--border);white-space:nowrap}
.blog-content pre{margin:var(--space-4) 0;padding:var(--space-4);background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);overflow-x:auto;-webkit-overflow-scrolling:touch;font-size:0.75rem;line-height:1.55}
.blog-content pre code{background:none;padding:0;border:none;font-size:inherit;white-space:pre}

/* Blockquote */
.blog-content blockquote{margin:var(--space-4) 0;padding:var(--space-3) var(--space-4);border-left:3px solid var(--accent);background:var(--panel);border-radius:0 var(--radius) var(--radius) 0;font-size:0.8rem;color:var(--muted)}
.blog-content blockquote strong{color:var(--fg)}
.blog-content blockquote p{margin-bottom:0}

/* Table */
.blog-content table{width:100%;margin:var(--space-4) 0;border-collapse:collapse;font-size:0.75rem;overflow-x:auto;display:block;-webkit-overflow-scrolling:touch}
.blog-content th,.blog-content td{padding:var(--space-2) var(--space-3);border:1px solid var(--border);text-align:left}
.blog-content th{background:var(--panel);font-weight:600}
.blog-content tr:nth-child(even){background:var(--panel)}

/* MathJax */
mjx-container[display="true"]{margin:var(--space-4) 0 !important;overflow-x:auto;overflow-y:hidden}

/* Highlight box */
.highlight-box{margin:var(--space-6) 0;padding:var(--space-4);background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);font-size:0.8rem;color:var(--muted)}
.highlight-box strong{color:var(--fg)}
.highlight-box p{margin-bottom:var(--space-2)}
.highlight-box p:last-child{margin-bottom:0}

/* Blog post header */
.blog-post-header{margin-bottom:var(--space-6)}
.blog-post-header .blog-post-title{font-size:var(--font-lg);font-weight:600;line-height:1.3}
@media print{.header,.footer,.theme-toggle{display:none}.main{padding:0}}
