:root{
  --bg-primary:#0b0d11; --bg-secondary:#181d27; --bg-tertiary:#20262f; --bg-card:#161b24;
  --text-primary:#e9ebef; --text-secondary:#9aa1ad; --text-muted:#6a7280;
  --accent-primary:#8b7cf0; --accent-link:#9b8cf5; --accent-link-hover:#b6a9ff;
  --accent-border:#282e37; --accent-border-highlight:#8b7cf0;
  --accent-green:#e0a458; --accent-orange:#ffa657; --accent-purple:#d2a8ff;
  --font-heading:'Space Grotesk',system-ui,-apple-system,sans-serif;
  --font-body:'Inter',-apple-system,BlinkMacSystemFont,sans-serif;
  --font-mono:'JetBrains Mono','Fira Code',monospace;
  --sp-xs:.25rem; --sp-sm:.5rem; --sp-md:1rem; --sp-lg:1.5rem; --sp-xl:2rem; --sp-2xl:3rem; --sp-3xl:4rem;
  --content-max:820px; --transition:150ms ease;
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{font-size:16.5px;scroll-behavior:smooth;background:var(--bg-primary)}
body{font-family:var(--font-body);font-size:1rem;line-height:1.6;color:var(--text-primary);
     background:transparent;min-height:100vh;display:flex;flex-direction:column}
img{max-width:100%;height:auto;display:block}
a{color:var(--accent-link);text-decoration:none;transition:color var(--transition)}
a:hover{color:var(--accent-link-hover)}
::selection{background:var(--text-primary);color:var(--bg-primary)}
code{font-family:var(--font-mono);font-size:.875em;color:#ff7b72;background:#1a1f25;padding:.12em .4em;border-radius:4px}
.container{width:100%;max-width:var(--content-max);margin:0 auto;padding:0 var(--sp-lg)}

/* header */
.site-header{background:var(--bg-secondary);border-bottom:1px solid var(--accent-border);
             padding:var(--sp-md) 0;position:sticky;top:0;z-index:100}
.site-header .container{display:flex;justify-content:center;align-items:center}
.site-nav{display:flex;gap:var(--sp-xl);flex-wrap:wrap;justify-content:center}
.site-nav a{color:var(--text-secondary);font-weight:500;padding:var(--sp-xs) 0;
            border-bottom:2px solid transparent;transition:all var(--transition)}
.site-nav a:hover,.site-nav a.active{color:var(--text-primary);border-bottom-color:var(--accent-primary)}

.site-main{flex:1;padding:var(--sp-2xl) 0}
h1,h2,h3{font-family:var(--font-heading);font-weight:600;line-height:1.3;color:var(--text-primary)}

/* hero */
.bio-top{display:flex;gap:var(--sp-2xl);align-items:flex-start;margin-bottom:var(--sp-xl)}
.bio-photo{flex:0 0 auto}
.bio-content{flex:1 1 auto;min-width:0}
.bio-photo img{width:280px;border-radius:8px}
.bio-content h1{font-size:2.5rem;font-weight:700;margin-bottom:var(--sp-xs)}
.bio-tagline{font-size:1.15rem;color:var(--text-secondary);margin-bottom:var(--sp-lg)}
.bio-content p{color:var(--text-primary);margin-bottom:var(--sp-md)}
.bio-links{margin-top:var(--sp-lg);display:flex;flex-wrap:wrap;gap:var(--sp-sm) var(--sp-md);
           font-family:var(--font-mono);font-size:.9rem}
.bio-links a{color:var(--accent-link)}
.bio-links .sep{color:var(--text-muted)}
@media(max-width:768px){.bio-top{flex-direction:column;align-items:center;text-align:center}
  .bio-content h1{font-size:2rem}.bio-links{justify-content:center}.bio-photo img{width:200px}}

/* sections */
.section{margin-top:var(--sp-3xl)}
.section-title{font-family:var(--font-heading);font-size:1.6rem;margin-bottom:var(--sp-lg);
               padding-bottom:var(--sp-sm);border-bottom:2px solid var(--accent-border-highlight);display:inline-block}

/* project cards */
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--sp-md)}
.card{display:block;background:var(--bg-secondary);border:1px solid var(--accent-border);
      border-radius:6px;padding:var(--sp-md);transition:border-color var(--transition);box-shadow:0 2px 8px rgba(0,0,0,.5)}
.card:hover{border-color:var(--accent-border-highlight)}
.card-title{font-family:var(--font-heading);font-size:1.05rem;font-weight:600;color:var(--text-primary);margin-bottom:var(--sp-xs)}
.card-desc{color:var(--text-secondary);font-size:.9rem;margin-bottom:var(--sp-sm)}
.card-meta{display:flex;flex-wrap:wrap;gap:var(--sp-md);font-size:.8125rem;color:var(--text-muted);font-family:var(--font-mono)}
.card-lang{display:flex;align-items:center;gap:var(--sp-xs)}
.card-lang::before{content:"";width:11px;height:11px;border-radius:50%;background:#8b949e}
.card-lang.python::before{background:#3572a5}
.card-lang.go::before{background:#00add8}
.card-lang.js::before{background:#f1e05a}
.card-role{color:var(--accent-green);font-weight:500}
.card-links{margin-top:var(--sp-sm);font-family:var(--font-mono);font-size:.8125rem}
.card-links a{color:var(--accent-link)}.card-links .sep{color:var(--text-muted);margin:0 .35rem}

/* open-source list (publication style) */
.oss-list{list-style:none}
.oss-item{background:var(--bg-secondary);padding:var(--sp-md);border:1px solid var(--accent-border);border-radius:6px;margin-bottom:var(--sp-sm);box-shadow:0 2px 8px rgba(0,0,0,.5)}
.oss-title{font-family:var(--font-heading);font-size:1.05rem;color:var(--text-primary);font-weight:600;margin-bottom:var(--sp-xs)}
.oss-title .role{font-family:var(--font-mono);font-size:.75rem;color:var(--accent-green);margin-left:var(--sp-sm);font-weight:400}
.oss-desc{font-size:.9rem;color:var(--text-secondary);margin-bottom:var(--sp-xs)}
.oss-meta{font-family:var(--font-mono);font-size:.8125rem;color:var(--text-muted)}
.oss-meta a{color:var(--accent-link)}.oss-meta .sep{margin:0 .35rem;color:var(--text-muted)}
.oss-meta .tag{color:var(--accent-orange)}

/* experience */
.job{padding:var(--sp-md) 0;border-bottom:1px solid var(--accent-border)}
.job:last-child{border-bottom:none}
.job-top{display:flex;justify-content:space-between;flex-wrap:wrap;gap:var(--sp-xs)}
.job-role{font-weight:600;color:var(--text-primary)}
.job-date{font-family:var(--font-mono);font-size:.8125rem;color:var(--text-muted)}
.job-where{color:var(--text-secondary);font-size:.9rem;margin:var(--sp-xs) 0 var(--sp-sm)}
.job ul{list-style:none;padding:0}
.job li{position:relative;padding-left:1.1rem;margin-bottom:var(--sp-xs);color:var(--text-secondary);font-size:.9rem}
.job li::before{content:"–";position:absolute;left:0;color:var(--accent-primary)}

.intro-note{font-size:1.15rem;color:var(--text-secondary);max-width:640px;line-height:1.7;margin-top:var(--sp-md)}

.site-footer{background:var(--bg-secondary);border-top:1px solid var(--accent-border);
             padding:var(--sp-xl) 0;margin-top:var(--sp-3xl);color:var(--text-secondary);font-size:.875rem}
.site-footer .container{display:flex;justify-content:space-between;flex-wrap:wrap;gap:var(--sp-sm)}
.site-footer .footer-links{display:flex;gap:var(--sp-md);font-family:var(--font-mono)}

/* page header (notes / photos) */
.page-header{margin-bottom:var(--sp-xl)}
.page-header h1{font-size:2.2rem;font-weight:700;margin-bottom:var(--sp-sm)}
.page-intro{font-size:1.1rem;color:var(--text-secondary);max-width:640px;line-height:1.7}

/* notes list */
.post-list{list-style:none;padding:0}
.post-item{padding:var(--sp-lg) 0;border-bottom:1px solid var(--accent-border)}
.post-item:last-child{border-bottom:none}
.post-item-title{font-family:var(--font-heading);font-size:1.35rem;margin:0 0 var(--sp-xs)}
.post-item-title a{color:var(--text-primary)}
.post-item-title a:hover{color:var(--accent-link)}
.post-item-meta{font-family:var(--font-mono);font-size:.8125rem;color:var(--text-muted)}
.post-item-meta .reading-time::before{content:"·";margin:0 .5rem}
.post-item-excerpt{margin-top:var(--sp-sm);color:var(--text-secondary)}
.empty-note{color:var(--text-muted);font-style:italic;padding:var(--sp-lg) 0}

/* single note */
.back-link{display:inline-block;margin-bottom:var(--sp-lg);font-family:var(--font-mono);font-size:.85rem}
.post-header .post-meta{font-family:var(--font-mono);font-size:.8125rem;color:var(--text-muted);margin-top:var(--sp-xs)}
.post-content{max-width:720px}
.post-content p{margin-bottom:var(--sp-md);color:var(--text-primary)}
.post-content h2{font-family:var(--font-heading);font-size:1.5rem;margin:var(--sp-xl) 0 var(--sp-sm);border:none;padding:0;display:block}
.post-content h3{font-size:1.2rem;margin:var(--sp-lg) 0 var(--sp-xs)}
.post-content ul,.post-content ol{margin:0 0 var(--sp-md) 1.2rem;color:var(--text-primary)}
.post-content li{margin-bottom:var(--sp-xs)}
.post-content blockquote{border-left:3px solid var(--accent-border-highlight);padding-left:var(--sp-md);
  margin:var(--sp-md) 0;color:var(--text-secondary);font-style:italic}
.post-content pre{background:var(--bg-secondary);border:1px solid var(--accent-border);border-radius:8px;
  padding:var(--sp-md);overflow-x:auto;margin-bottom:var(--sp-md);font-family:var(--font-mono);font-size:.85rem}
.post-content img{border-radius:8px;margin:var(--sp-md) 0}

/* photography */
.masonry-grid{column-count:3;column-gap:var(--sp-md)}
@media(max-width:1024px){.masonry-grid{column-count:2}}
@media(max-width:640px){.masonry-grid{column-count:1}}
.masonry-item{break-inside:avoid;margin-bottom:var(--sp-md);position:relative;overflow:hidden;
  border-radius:8px;cursor:pointer;border:1px solid var(--accent-border)}
.masonry-item img{width:100%;display:block;transition:transform var(--transition)}
.masonry-item:hover img{transform:scale(1.03)}
.masonry-item::after{content:"";position:absolute;inset:0;
  background:linear-gradient(to top,rgba(0,0,0,.55),transparent 55%);opacity:0;transition:opacity var(--transition)}
.masonry-item:hover::after{opacity:1}
.photo-caption{position:absolute;bottom:0;left:0;right:0;padding:var(--sp-md);color:#fff;font-size:.85rem;
  opacity:0;transform:translateY(8px);transition:all var(--transition);z-index:1}
.masonry-item:hover .photo-caption{opacity:1;transform:translateY(0)}
.lightbox{position:fixed;inset:0;background:rgba(0,0,0,.95);display:flex;align-items:center;justify-content:center;
  z-index:1000;opacity:0;visibility:hidden;transition:opacity var(--transition)}
.lightbox.active{opacity:1;visibility:visible}
.lightbox img{max-width:92vw;max-height:92vh;object-fit:contain;border-radius:6px}
.lightbox-close{position:absolute;top:var(--sp-lg);right:var(--sp-lg);width:40px;height:40px;
  background:var(--bg-secondary);border:1px solid var(--accent-border);border-radius:50%;color:var(--text-primary);
  font-size:1.4rem;cursor:pointer;display:flex;align-items:center;justify-content:center}
.lightbox-close:hover{background:var(--text-primary);color:var(--bg-primary)}
.lightbox-nav{position:absolute;top:50%;transform:translateY(-50%);width:46px;height:46px;
  background:var(--bg-secondary);border:1px solid var(--accent-border);border-radius:50%;
  color:var(--text-primary);font-size:1.8rem;line-height:1;cursor:pointer;display:flex;
  align-items:center;justify-content:center;z-index:1001}
.lightbox-nav:hover{background:var(--text-primary);color:var(--bg-primary)}
.lightbox-prev{left:var(--sp-lg)}
.lightbox-next{right:var(--sp-lg)}
@media(max-width:640px){.lightbox-prev{left:6px}.lightbox-next{right:6px}}
