*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--bg: #F5F0E8;--bg-2: #EDE8DF;--card: #FDFCF9;--card-2: #F2EDE3;--ink: #18160E;--body: #2E2B24;--muted: rgba(46, 43, 36, .48);--accent: #1E3A5F;--border: rgba(24, 22, 14, .1);--f-display: "Syne", sans-serif;--f-serif: "DM Serif Display", serif;--f-mono: "Fira Code", monospace}html{scroll-behavior:smooth}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:var(--bg-2)}::-webkit-scrollbar-thumb{background:var(--accent);opacity:.6}::-webkit-scrollbar-thumb:hover{background:var(--ink)}body{background:var(--bg);color:var(--body);font-family:var(--f-display);cursor:none;overflow-x:hidden}.grain{position:fixed;top:-50%;right:-50%;bottom:-50%;left:-50%;width:200%;height:200%;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");opacity:.04;mix-blend-mode:multiply;pointer-events:none;z-index:9000}#cursor{width:8px;height:8px;background:var(--accent);border-radius:50%;position:fixed;top:0;left:0;pointer-events:none;z-index:9999;transform:translate(-50%,-50%);transition:width .25s,height .25s}#cursor-ring{width:34px;height:34px;border:1.5px solid rgba(30,58,95,.28);border-radius:50%;position:fixed;top:0;left:0;pointer-events:none;z-index:9998;transform:translate(-50%,-50%);transition:width .3s,height .3s,border-color .3s}body.on-hover #cursor{width:14px;height:14px}body.on-hover #cursor-ring{width:48px;height:48px;border-color:var(--accent)}nav{position:fixed;top:0;left:0;right:0;z-index:200;display:flex;justify-content:space-between;align-items:center;padding:24px 52px;transition:background .4s,backdrop-filter .4s,border-color .4s}nav.scrolled{background:#f5f0e8eb;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-bottom:1px solid var(--border)}.nav-logo{font-weight:700;font-size:15px;letter-spacing:.01em;color:var(--ink);text-decoration:none}.nav-links{display:flex;gap:36px;list-style:none}.nav-links a{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);text-decoration:none;transition:color .2s}.nav-links a:hover{color:var(--body)}.nav-badge{font-family:var(--f-mono);font-size:10px;letter-spacing:.12em;color:var(--bg);background:var(--ink);padding:7px 14px;display:flex;align-items:center;gap:8px}.pulse-dot{width:6px;height:6px;background:#22c55e;border-radius:50%;animation:pulse 2s infinite}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(1.4)}}.hero{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:120px 52px 80px;position:relative;overflow:hidden}.hero-glow{position:absolute;width:700px;height:500px;border-radius:50%;background:radial-gradient(circle,rgba(30,58,95,.06) 0%,transparent 70%);top:50%;left:50%;transform:translate(-50%,-50%);pointer-events:none}.hero-inner{display:flex;flex-direction:column;align-items:center;text-align:center;max-width:820px}.hero-pill{display:inline-flex;align-items:center;gap:9px;font-family:var(--f-mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--body);background:var(--card);border:1px solid var(--border);padding:8px 18px;border-radius:100px;margin-bottom:44px;opacity:0;animation:fadeUp .6s ease .1s forwards}.hero-name{font-weight:800;font-size:clamp(52px,7vw,100px);line-height:.92;letter-spacing:-.04em;color:var(--ink);margin-bottom:24px;display:flex;flex-wrap:wrap;justify-content:center;gap:.18em}.hero-name span{opacity:0;animation:fadeUp .7s cubic-bezier(.16,1,.3,1) forwards}.hero-name .name-accent{color:var(--accent)}.hero-role{font-family:var(--f-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--accent);margin-bottom:22px;opacity:0;animation:fadeUp .6s ease .68s forwards}.hero-desc{max-width:500px;font-size:15.5px;line-height:1.75;color:var(--muted);margin-bottom:44px;opacity:0;animation:fadeUp .6s ease .82s forwards}.hero-cta{display:flex;align-items:center;gap:16px}.hero-socials{display:flex;align-items:center;gap:20px;margin-top:28px}.hero-social-link{color:var(--muted);transition:color .2s,transform .2s;display:flex;align-items:center}.hero-social-link:hover{color:var(--ink);transform:translateY(-2px)}.btn{display:inline-flex;align-items:center;gap:10px;text-decoration:none;font-family:var(--f-display);font-weight:700;font-size:12.5px;letter-spacing:.08em;text-transform:uppercase;padding:14px 28px;transition:transform .2s,box-shadow .2s,background .2s,border-color .2s,color .2s}.btn{border-radius:8px}.btn-dark{background:var(--ink);color:var(--bg)}.btn-dark:hover{transform:translate(-2px,-2px);box-shadow:4px 4px 0 var(--accent)}.btn-outline{background:transparent;color:var(--body);border:1.5px solid var(--border)}.btn-outline:hover{border-color:var(--body);color:var(--ink)}.btn-yellow{background:var(--ink);color:var(--bg)}.btn-yellow:hover{transform:translate(-2px,-2px);box-shadow:4px 4px 0 var(--accent)}.marquee-wrap{background:var(--card);border-top:1px solid var(--border);border-bottom:1px solid var(--border);padding:16px 0;overflow:hidden}.marquee-track{display:flex;width:fit-content;animation:marquee 30s linear infinite}.marquee-track:hover{animation-play-state:paused}.marquee-item{display:flex;align-items:center;gap:28px;padding:0 28px;font-family:var(--f-mono);font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);white-space:nowrap}.sep{width:4px;height:4px;background:var(--accent);opacity:.5;border-radius:50%;flex-shrink:0}.section{padding:120px 52px}.section-dark{background:var(--bg-2)}.section-tag{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.22em;text-transform:uppercase;color:var(--accent);margin-bottom:16px}.section-heading{font-weight:800;font-size:clamp(34px,4vw,60px);line-height:.95;letter-spacing:-.025em;color:var(--ink)}.section-heading em{font-style:italic;font-family:var(--f-serif);font-weight:400;color:var(--body);opacity:.6}.section-sub{font-size:13.5px;line-height:1.65;color:var(--muted);margin-top:10px}.section-header{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:52px}.arrow-link{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.15em;text-transform:uppercase;color:var(--muted);text-decoration:none;display:inline-flex;align-items:center;gap:10px;padding-bottom:4px;border-bottom:1px solid transparent;transition:color .2s,gap .2s,border-color .2s}.arrow-link:hover{color:var(--body);gap:18px;border-color:var(--body)}.about-section{padding:120px 52px;display:grid;grid-template-columns:1fr 200px;gap:80px;align-items:center;border-top:1px solid var(--border);border-bottom:1px solid var(--border);background:var(--bg-2)}.about-text{display:flex;flex-direction:column;gap:18px}.about-heading{font-weight:800;font-size:clamp(32px,4vw,52px);line-height:1;letter-spacing:-.03em;color:var(--ink)}.about-intro{font-weight:800;font-size:clamp(18px,2vw,22px);line-height:1.4;color:var(--ink);letter-spacing:-.01em}.about-para{font-size:14px;line-height:1.82;color:var(--muted)}.about-highlights{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}.highlight-card{padding:18px 20px;background:var(--card);border:1px solid var(--border);border-radius:12px;transition:border-color .2s,background .2s,transform .3s cubic-bezier(.16,1,.3,1)}.highlight-card:hover{border-color:var(--accent);background:var(--card-2);transform:scale(1.03)}.highlight-title{font-weight:700;font-size:13.5px;color:var(--ink);margin-bottom:5px}.highlight-desc{font-size:12.5px;line-height:1.6;color:var(--muted)}.about-photo{position:relative;border-radius:16px;overflow:hidden}.about-img{width:100%;display:block;border:1px solid var(--border);filter:grayscale(8%);transition:transform .4s cubic-bezier(.16,1,.3,1)}.about-photo:hover .about-img{transform:scale(1.05)}.about-img-placeholder{width:100%;aspect-ratio:3/4;background:var(--card);border:2px dashed var(--border);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px}.about-img-placeholder span{font-weight:800;font-size:72px;color:var(--muted);line-height:1}.about-img-placeholder p{font-family:var(--f-mono);font-size:10px;letter-spacing:.15em;text-transform:uppercase;color:var(--muted)}.feat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.feat-card{display:flex;flex-direction:column;background:var(--card);border:1px solid var(--border);border-radius:14px;overflow:hidden;transition:box-shadow .25s,border-color .25s}.feat-card:hover{box-shadow:0 6px 32px #18160e14;border-color:#18160e2e}.feat-header{display:flex;justify-content:space-between;align-items:center;padding:22px 26px 14px;border-bottom:1px solid var(--border)}.feat-num{font-family:var(--f-mono);font-size:10px;color:var(--muted)}.feat-badge{font-family:var(--f-mono);font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);background:var(--bg-2);border:1px solid var(--border);padding:3px 10px}.feat-body{padding:22px 26px 20px;display:flex;flex-direction:column;gap:12px;flex:1}.feat-subtitle{font-family:var(--f-mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--accent)}.feat-title{font-weight:700;font-size:18px;color:var(--ink);line-height:1.25}.feat-desc{font-size:13px;line-height:1.72;color:var(--body)}.feat-bullets{list-style:none;display:flex;flex-direction:column;gap:6px}.feat-bullets li{font-size:12.5px;color:var(--muted);line-height:1.5;padding-left:14px;position:relative}.feat-bullets li:before{content:"•";position:absolute;left:0;color:var(--accent);font-size:11px;top:1px}.feat-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}.feat-tag{font-family:var(--f-mono);font-size:10px;color:var(--body);background:var(--bg-2);border:1px solid var(--border);padding:3px 10px;border-radius:6px}.feat-footer{padding:16px 26px 22px;border-top:1px solid var(--border);display:flex;justify-content:center;gap:10px}.feat-btn{font-family:var(--f-display);font-weight:600;font-size:12px;letter-spacing:.05em;text-decoration:none;padding:10px 18px;display:inline-flex;align-items:center;gap:6px;border-radius:8px;transition:background .2s,color .2s,border-color .2s}.feat-btn-primary{background:var(--ink);color:var(--bg)}.feat-btn-primary:hover{background:var(--accent)}.feat-btn-dim{background:var(--bg-2);color:var(--muted);border:1px solid var(--border)}.feat-btn-dim:hover{border-color:var(--body);color:var(--body)}.feat-btn-secondary{background:transparent;color:var(--body);border:1.5px solid var(--border)}.feat-btn-secondary:hover{border-color:var(--body);color:var(--ink)}.projects-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:3px}.proj-card{display:flex;flex-direction:column;gap:12px;padding:32px;background:var(--card);border:1px solid var(--border);border-radius:14px;border-top:2px solid transparent;text-decoration:none;color:var(--body);min-height:220px;transition:background .25s,border-top-color .25s,box-shadow .25s}.proj-card:hover{background:var(--card-2);border-top-color:var(--accent);box-shadow:0 4px 24px #18160e0f}.proj-header{display:flex;justify-content:space-between;align-items:center}.proj-num{font-family:var(--f-mono);font-size:10px;color:var(--accent);opacity:.65}.proj-arrow{font-size:16px;color:var(--muted);transition:color .2s,transform .2s}.proj-card:hover .proj-arrow{color:var(--accent);transform:translate(2px,-2px)}.proj-name{font-family:var(--f-mono);font-weight:500;font-size:16px;color:var(--ink)}.proj-desc{font-size:13px;line-height:1.75;color:var(--muted);flex:1}.proj-meta{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:auto}.proj-lang{display:flex;align-items:center;gap:6px;font-family:var(--f-mono);font-size:10.5px;color:var(--muted)}.lang-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}.proj-stars,.proj-time{font-family:var(--f-mono);font-size:10.5px;color:var(--muted)}.proj-topics{display:flex;flex-wrap:wrap;gap:5px}.proj-topic{font-family:var(--f-mono);font-size:9.5px;letter-spacing:.08em;color:var(--accent);background:#1e3a5f0f;border:1px solid rgba(30,58,95,.15);padding:3px 9px}.load-state{display:flex;justify-content:center;padding:80px 0}.loader{display:block;width:28px;height:28px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.err-state{font-family:var(--f-mono);font-size:13px;color:var(--muted);padding:60px 0;text-align:center;line-height:1.8}.err-state code{color:var(--accent);background:#1e3a5f0f;padding:2px 6px}.skill-groups{display:grid;grid-template-columns:1fr 1fr;gap:52px 80px;margin-top:60px}.skill-group--full{grid-column:1 / -1}.skill-group-label{font-family:var(--f-mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--muted);margin-bottom:16px;padding-bottom:10px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px}.skill-group-label:before{content:"";display:block;width:20px;height:1px;background:var(--accent)}.skill-chips{display:flex;flex-wrap:wrap;gap:7px}.skill-chip{display:inline-flex;align-items:center;gap:7px;padding:9px 16px;background:var(--card);border:1px solid var(--border);border-radius:8px;font-size:13px;color:var(--body);transition:background .2s,border-color .2s,color .2s}.skill-chip:hover{background:var(--card-2);border-color:var(--accent);color:var(--ink)}.contact-section{padding:140px 52px;text-align:center;border-top:1px solid var(--border);position:relative;overflow:hidden}.contact-bg-word{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-weight:800;font-size:clamp(90px,18vw,260px);color:transparent;-webkit-text-stroke:1px rgba(30,58,95,.06);white-space:nowrap;pointer-events:none;-webkit-user-select:none;user-select:none}.contact-inner{position:relative;z-index:1}.contact-title{font-weight:800;font-size:clamp(44px,6vw,96px);line-height:.9;letter-spacing:-.03em;color:var(--ink);margin-bottom:48px}.accent-line{color:var(--accent)}.contact-sub{font-size:15px;line-height:1.7;color:var(--muted);max-width:420px;margin:0 auto 32px}.contact-email{display:inline-block;font-family:var(--f-mono);font-size:14px;letter-spacing:.08em;color:var(--body);text-decoration:none;border-bottom:1px solid var(--border);padding-bottom:5px;margin-bottom:48px;transition:color .2s,border-color .2s}.contact-email:hover{color:var(--accent);border-color:var(--accent)}footer{padding:36px 52px;border-top:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;background:var(--bg-2)}.ft-logo{font-weight:700;font-size:14px;letter-spacing:.01em;color:var(--ink)}.ft-copy{font-family:var(--f-mono);font-size:10px;letter-spacing:.1em;color:var(--muted)}.ft-links{display:flex;gap:28px;list-style:none}.ft-links a{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);text-decoration:none;transition:color .2s}.ft-links a:hover{color:var(--body)}.reveal{opacity:0;transform:translateY(32px);transition:opacity .8s ease,transform .8s cubic-bezier(.16,1,.3,1)}.reveal.visible{opacity:1;transform:translateY(0)}.reveal.reveal-d1{transition-delay:.1s}.reveal.reveal-d2{transition-delay:.2s}.reveal.reveal-d3{transition-delay:.3s}.reveal.reveal-d4{transition-delay:.4s}@keyframes fadeUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes marquee{to{transform:translate(-50%)}}@media (max-width: 900px){.feat-grid,.about-section{grid-template-columns:1fr}.about-photo{order:-1;max-width:280px}}@media (max-width: 768px){nav{padding:18px 24px}.nav-links{display:none}.hero{padding:100px 24px 60px}.hero-name{font-size:clamp(44px,12vw,72px)}.section{padding:80px 24px}.about-section{padding:80px 24px;gap:40px}.section-header{flex-direction:column;align-items:flex-start;gap:18px}.feat-grid,.projects-grid,.skill-groups{grid-template-columns:1fr}.skill-group--full{grid-column:auto}.about-highlights{grid-template-columns:1fr}.contact-section{padding:90px 24px}footer{flex-direction:column;gap:18px;padding:28px 24px}}
