@font-face{font-family:GeistMono;src:url(/assets/66f30814ff6d7cdf.p-bOGSM49p.woff2) format("woff2");font-display:swap;font-weight:100 900}:root{--bg: #0b0c0e;--bg-elev: #101115;--card: #15161a;--card-hover: #1a1c21;--border: #23252b;--border-soft: #1d1f24;--text: #ececee;--sub: #9a9da4;--faint: #6c6f76;--accent: #ffffff;--accent-soft: rgba(255, 255, 255, .08);--accent-border: rgba(255, 255, 255, .22);--mono: "GeistMono", ui-monospace, SFMono-Regular, monospace;--sans: "GeistMono", ui-monospace, SFMono-Regular, monospace;--surface-1: rgba(255, 255, 255, .05);--surface-2: rgba(255, 255, 255, .08);--surface-border: rgba(255, 255, 255, .1);--surface-border-hover: rgba(255, 255, 255, .2);--input-bg: #22242c;--on-accent: #0b0c0e;--overlay-bg: rgba(0, 0, 0, .55);--modal-bg: rgba(11, 12, 14, .45);--contrib-0: rgba(255, 255, 255, .06);--contrib-1: rgba(255, 255, 255, .2);--contrib-2: rgba(255, 255, 255, .42);--contrib-3: rgba(255, 255, 255, .68);--contrib-4: rgba(255, 255, 255, .95);--shadow-float: rgba(0, 0, 0, .45)}:root[data-theme=light]{--bg: #f7f4ee;--bg-elev: #fdfaf3;--card: #fdfaf3;--card-hover: #f0ece2;--border: #e0d9cc;--border-soft: #ebe6da;--text: #0c0d0f;--sub: #3e414a;--faint: #7c7f8a;--accent: #0c0d0f;--accent-soft: rgba(12, 13, 15, .07);--accent-border: rgba(12, 13, 15, .22);--surface-1: rgba(0, 0, 0, .04);--surface-2: rgba(0, 0, 0, .07);--surface-border: rgba(0, 0, 0, .08);--surface-border-hover: rgba(0, 0, 0, .18);--input-bg: #edeae2;--on-accent: #fdfaf3;--overlay-bg: rgba(0, 0, 0, .35);--modal-bg: rgba(253, 250, 243, .55);--contrib-0: rgba(12, 13, 15, .07);--contrib-1: rgba(12, 13, 15, .2);--contrib-2: rgba(12, 13, 15, .42);--contrib-3: rgba(12, 13, 15, .65);--contrib-4: rgba(12, 13, 15, .9);--shadow-float: rgba(0, 0, 0, .12)}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);font-family:var(--sans);line-height:1.2;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}input,textarea{font-family:inherit}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:999px;border:2px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background:var(--faint)}.mono{font-family:var(--mono)}:root{--content-lh: 1.4}.content{line-height:var(--content-lh)}.label{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint)}.testimonial-wrapper{scrollbar-width:none;-ms-overflow-style:none}.testimonial-wrapper::-webkit-scrollbar{display:none}.modal-backdrop{position:fixed;inset:0 0 0 272px;z-index:1000;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px)}@media (max-width: 760px){.modal-backdrop{left:0}}@keyframes bounceDown{0%,to{transform:translateY(0)}50%{transform:translateY(4px)}}.bounce-down{animation:bounceDown 1.2s ease-in-out infinite}@keyframes fadeUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.fade-up{animation:fadeUp .45s ease both}@keyframes blink{0%,to{opacity:.25}50%{opacity:1}}.typing-cursor{display:inline-block;width:2px;height:1em;background:var(--accent);margin-left:2px;vertical-align:text-bottom;animation:blink .9s steps(1) infinite}.typing-dot{width:6px;height:6px;border-radius:50%;background:var(--sub);display:inline-block;animation:blink 1.2s infinite both}.contact-label{font-size:13px;font-weight:600;letter-spacing:.03em;color:var(--sub)}.contact-input{display:block;width:100%;margin-top:6px;padding:8px 10px;border-radius:8px;border:1px solid var(--border);background:transparent;color:var(--text);font-family:var(--sans);font-size:13.5px;outline:none;transition:border-color .15s}.contact-input:focus{border-color:var(--accent-border)}.contact-input::placeholder{color:var(--faint)}.projects-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:20px;margin-bottom:28px}.project-card{background:var(--card);border:1px solid var(--border);border-radius:16px;overflow:hidden;display:flex;flex-direction:column;height:100%;transition:border-color .18s ease,transform .18s ease,box-shadow .18s ease}.project-card:hover{border-color:var(--accent-border);transform:translateY(-3px);box-shadow:0 10px 28px #0000001f}.project-card .project-banner{aspect-ratio:8 / 3;background:var(--surface-1);border-bottom:1px solid var(--border-soft);overflow:hidden;flex-shrink:0}.project-card .project-banner img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .3s ease}.project-card:hover .project-banner img{transform:scale(1.04)}@media (max-width: 640px){.projects-grid{grid-template-columns:1fr}}.global-footer{position:fixed;bottom:0;left:272px;right:0;height:72px;z-index:20;pointer-events:none;background:linear-gradient(to bottom,transparent,var(--bg) 52%);display:flex;align-items:flex-end;justify-content:center;padding-bottom:10px}.mobile-topbar{display:none}.desktop-theme-toggle{display:block}@media (max-width: 760px){.mobile-topbar{display:flex}.desktop-theme-toggle{display:none}#main-content{padding-top:56px}.global-footer{left:0}.sidebar{position:fixed;z-index:50;transform:translate(-100%);transition:transform .25s ease;box-shadow:0 0 40px #00000080}.sidebar.open{transform:translate(0)}}@media (max-width: 640px){:root{--content-lh: 1.45}body{font-size:13px}h1{font-size:clamp(22px,7vw,30px)!important}h2{font-size:clamp(18px,6vw,26px)!important}h3{font-size:13px!important}.content{font-size:14px!important}.tech-badge{font-size:11px!important;padding:3px 7px!important;gap:4px!important;border-radius:6px!important}.tech-badge img{width:12px!important;height:12px!important}.skill-item{font-size:13px!important}.chat-textarea{font-size:14px!important}.focus-grid{grid-template-columns:1fr!important}}.blog-body{font-size:15.5px;line-height:1.72;color:var(--text)}.blog-p{margin:0 0 18px}.blog-h2{font-size:clamp(19px,2.4vw,22px);font-weight:700;letter-spacing:-.01em;line-height:1.3;color:var(--text);margin:36px 0 12px}.blog-h3{font-size:clamp(16px,2vw,18px);font-weight:650;color:var(--text);margin:28px 0 8px}.blog-ul,.blog-ol{margin:0 0 18px;padding-left:24px;display:flex;flex-direction:column;gap:6px}.blog-li{padding-left:4px}.blog-quote{margin:24px 0;padding:4px 0 4px 20px;border-left:3px solid var(--accent);font-size:clamp(16px,2vw,18px);line-height:1.5;font-style:italic;color:var(--sub)}.blog-quote .blog-p{margin:0}.blog-link{color:var(--text);text-decoration:underline;text-decoration-color:var(--accent-border);text-underline-offset:3px}.blog-link:hover{color:var(--accent)}.blog-hr{border:none;text-align:center;margin:40px 0}.blog-hr:before{content:"· · ·";letter-spacing:.5em;color:var(--faint);font-size:18px}.blog-figure{margin:32px 0}.blog-figure img{width:100%;border-radius:12px;border:1px solid var(--border);display:block}.blog-figure figcaption{margin-top:10px;text-align:center;font-size:13px;color:var(--faint);font-family:var(--mono)}.detail-banner{overflow:hidden;border-radius:14px;background:var(--surface-1);margin-left:-12px;margin-right:-12px}@media (max-width: 640px){.detail-banner{margin-left:calc(10px - clamp(20px,5vw,48px));margin-right:calc(10px - clamp(20px,5vw,48px));border-radius:12px}}.blog-pre{background:var(--surface-1);border:1px solid var(--border);border-radius:12px;padding:14px 16px;overflow-x:auto;margin:22px 0}.blog-pre code{font-family:var(--mono);font-size:13px;line-height:1.6;color:var(--text);white-space:pre}.blog-code-inline{font-family:var(--mono);font-size:.86em;background:var(--surface-1);border:1px solid var(--border);border-radius:5px;padding:1px 6px;color:var(--text)}:root{--code-comment: #7d8590;--code-keyword: #c792ea;--code-string: #a5d6a7;--code-number: #f0b26b;--code-title: #82aaff;--code-builtin: #89ddff;--code-attr: #e2b93d;--code-meta: #f07178}:root[data-theme=light]{--code-comment: #8a8577;--code-keyword: #9a2fa5;--code-string: #2e7d32;--code-number: #b45309;--code-title: #1a5cc8;--code-builtin: #0e7490;--code-attr: #9a6700;--code-meta: #c43e4b}.blog-pre .hljs-comment,.blog-pre .hljs-quote{color:var(--code-comment);font-style:italic}.blog-pre .hljs-keyword,.blog-pre .hljs-selector-tag,.blog-pre .hljs-literal,.blog-pre .hljs-doctag{color:var(--code-keyword)}.blog-pre .hljs-string,.blog-pre .hljs-regexp,.blog-pre .hljs-addition{color:var(--code-string)}.blog-pre .hljs-number,.blog-pre .hljs-symbol,.blog-pre .hljs-bullet{color:var(--code-number)}.blog-pre .hljs-title,.blog-pre .hljs-title.function_,.blog-pre .hljs-title.class_,.blog-pre .hljs-section,.blog-pre .hljs-name{color:var(--code-title)}.blog-pre .hljs-built_in,.blog-pre .hljs-type,.blog-pre .hljs-class{color:var(--code-builtin)}.blog-pre .hljs-attr,.blog-pre .hljs-attribute,.blog-pre .hljs-variable,.blog-pre .hljs-template-variable,.blog-pre .hljs-selector-attr,.blog-pre .hljs-selector-class,.blog-pre .hljs-selector-id{color:var(--code-attr)}.blog-pre .hljs-meta,.blog-pre .hljs-deletion,.blog-pre .hljs-subst{color:var(--code-meta)}.blog-pre .hljs-emphasis{font-style:italic}.blog-pre .hljs-strong{font-weight:650}
