h3,h4{margin-bottom:var(--space-sm)}code,pre{background-color:var(--color-bg-alt)}h1,h2,ol,p,pre,ul{margin-bottom:var(--space-md)}:root{--color-bg: #121212;--color-bg-alt: #1e1e1e;--color-text: #e0e0e0;--color-text-muted: #a0a0a0;--color-text-faint: #666666;--color-accent: #ff8833;--color-accent-hover: #ffaa66;--color-border: #333333;--color-border-heavy: #444444;--color-link: #ff8833;--color-link-visited: #cc6622;--color-tag-bg: #262626;--color-tag-border: #3a3a3a;--color-code-bg: #181818;--color-code-border: #2f2f2f;--color-code-header: #202020;--color-code-comment: #7b8794;--color-code-string: #9ccc65;--color-code-keyword: #ff8833;--color-code-number: #7cc7ff;--color-code-function: #ffd166;--font-mono: "IBM Plex Mono", "Consolas", "Monaco", monospace;--font-sans: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-size-xs: .75rem;--font-size-sm: .8125rem;--font-size-base: .9375rem;--font-size-md: 1rem;--font-size-lg: 1.25rem;--font-size-xl: 1.5rem;--line-height: 1.6;--space-xs: .25rem;--space-sm: .5rem;--space-md: 1rem;--space-lg: 1.5rem;--space-xl: 2rem;--space-2xl: 3rem;--space-3xl: 4rem;--max-width: 720px }:root[data-theme=light]{--color-bg: #fafaf8;--color-bg-alt: #f0f0ec;--color-text: #1a1a1a;--color-text-muted: #666666;--color-text-faint: #999999;--color-accent: #ff6600;--color-accent-hover: #e55b00;--color-border: #dddddd;--color-border-heavy: #cccccc;--color-link: #ff6600;--color-link-visited: #cc5200;--color-tag-bg: #f5f0eb;--color-tag-border: #e0d6cc;--color-code-bg: #f4f1ec;--color-code-border: #ddd6ca;--color-code-header: #ebe4d8;--color-code-comment: #7a7a74;--color-code-string: #2e7d32;--color-code-keyword: #c75a13;--color-code-number: #0b84c6;--color-code-function: #8f5f00 }*,:after,:before{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{transition:background-color .2s,color .2s;font-family:var(--font-sans);font-size:var(--font-size-base);line-height:var(--line-height);color:var(--color-text);background-color:var(--color-bg)}code,h1,h2,h3,h4,pre{font-family:var(--font-mono)}h1,h2,h3,h4{font-weight:600;line-height:1.3}h1{font-size:var(--font-size-xl)}h2{font-size:var(--font-size-lg)}h3{font-size:var(--font-size-md)}h4{font-size:var(--font-size-base)}p:last-child{margin-bottom:0}a{color:var(--color-link);text-decoration:none;transition:color .15s}.contact-link a:hover,a:hover{color:var(--color-accent-hover)}a:visited{color:var(--color-link-visited)}code{font-size:.875em;padding:.1em .35em;border-radius:2px}pre{font-size:var(--font-size-sm);border:1px solid var(--color-border);padding:var(--space-md);overflow-x:auto}hr{border:none;border-top:1px solid var(--color-border);margin:var(--space-xl) 0}ol,ul{padding-left:var(--space-lg)}li{margin-bottom:var(--space-xs)}.container{max-width:var(--max-width);margin:0 auto;padding:0 var(--space-lg)}::selection{background-color:var(--color-accent);color:#fff}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:var(--color-bg)}::-webkit-scrollbar-thumb{background:var(--color-border-heavy);border-radius:3px}.skills-group__item,.skills-group__title{font-size:var(--font-size-sm);font-family:var(--font-mono)}.skills-grid{display:flex;flex-direction:column;gap:var(--space-lg)}.skills-group__title{font-weight:600;color:var(--color-text-muted);text-transform:lowercase;margin-bottom:var(--space-sm)}.skills-group__items{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.skills-group__item{color:var(--color-text);background-color:var(--color-tag-bg);border:1px solid var(--color-tag-border);padding:.2em .5em;border-radius:2px}.contact-links{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-md)}.contact-link{display:flex;align-items:baseline;gap:var(--space-md);font-size:var(--font-size-base)}.contact-link__label{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text-faint);min-width:5em;text-align:right}.status-bar,.tech-icon:after{font-size:var(--font-size-xs);font-family:var(--font-mono)}.contact-link a{color:var(--color-link)}.github-showcase{display:grid;gap:1rem;margin-top:1rem;padding:1.25rem;border:1px solid var(--color-border);background:linear-gradient(135deg,color-mix(in srgb,var(--color-accent) 12%,transparent),transparent 38%),linear-gradient(180deg,color-mix(in srgb,var(--color-bg-alt) 92%,black 8%),var(--color-bg-alt));text-decoration:none;color:inherit;border-radius:10px;box-shadow:inset 0 1px color-mix(in srgb,white 6%,transparent)}.github-showcase:hover{border-color:var(--color-border-heavy);transform:translateY(-1px)}.github-showcase__header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;flex-wrap:wrap}.github-showcase__eyebrow,.github-showcase__panel-label,.github-showcase__cta,.github-showcase__chip{font-family:var(--font-mono);font-size:var(--font-size-xs)}.github-showcase__eyebrow,.github-showcase__panel-label{color:var(--color-text-faint);text-transform:uppercase;letter-spacing:.08em}.github-showcase__title{margin-top:.2rem;font-family:var(--font-mono);font-size:var(--font-size-lg);color:var(--color-text)}.github-showcase__cta{color:var(--color-accent);border:1px solid color-mix(in srgb,var(--color-accent) 40%,var(--color-border));padding:.3rem .55rem;border-radius:999px;text-transform:lowercase}.github-showcase__grid{display:grid;grid-template-columns:1.4fr 1fr;gap:.85rem}.github-showcase__panel{min-height:112px;padding:.9rem 1rem;border:1px solid var(--color-border);background:color-mix(in srgb,var(--color-bg) 60%,transparent);border-radius:8px}.github-showcase__panel--hero{grid-row:span 2;display:flex;flex-direction:column;justify-content:space-between;background:radial-gradient(circle at top left,color-mix(in srgb,var(--color-accent) 18%,transparent),transparent 42%),color-mix(in srgb,var(--color-bg) 72%,transparent)}.github-showcase__hero-text{max-width:20ch;font-size:clamp(1.15rem,2vw,1.6rem);line-height:1.2;color:var(--color-text)}.github-showcase__list{margin:.75rem 0 0;padding-left:1rem;color:var(--color-text-muted)}.github-showcase__list li{margin-bottom:.4rem}.github-showcase__chips{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem}.github-showcase__chip{padding:.3rem .5rem;border-radius:999px;border:1px solid var(--color-tag-border);background:var(--color-tag-bg);color:var(--color-text-muted)}@media(max-width:600px){.github-showcase__grid{grid-template-columns:1fr}.github-showcase__panel--hero{grid-row:auto}.contact-link{flex-direction:column;gap:var(--space-xs)}.contact-link__label{text-align:left}.header__nav{gap:var(--space-sm)}.container{padding:0 var(--space-md)}.status-bar__inner{gap:var(--space-sm);justify-content:flex-start}}.status-bar{position:fixed;bottom:0;left:0;right:0;background-color:color-mix(in srgb,var(--color-bg-alt) 92%,transparent);border-top:1px solid var(--color-border);padding:.6rem 0;color:var(--color-text-muted);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:100}.status-bar__inner{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:var(--space-md)}.status-bar__item{display:inline-flex;align-items:center;gap:var(--space-xs)}.status-bar__item--muted{color:var(--color-text-faint)}.status-bar__label{color:var(--color-text-faint);text-transform:lowercase}.status-bar__value{display:inline-flex;align-items:center;gap:.35rem}.status-bar__key{background-color:var(--color-bg);border:1px solid var(--color-border-heavy);border-radius:3px;padding:0 .35em;font-weight:500;color:var(--color-text-muted);min-width:1.5em;text-align:center;box-shadow:0 1px 0 var(--color-border-heavy)}.status-bar__sep{width:1px;height:.9rem;background-color:var(--color-border)}main{padding-bottom:calc(2.5rem + var(--space-xl));animation:.4s page-enter}@keyframes page-enter{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}:root[data-theme=dark] .theme-light-only{display:none!important}:root[data-theme=light] .theme-dark-only{display:none!important}.tech-icons-container{display:flex;flex-wrap:wrap;gap:.5rem;padding:1rem;background:var(--color-bg-alt);border:1px solid var(--color-border);margin-top:1rem}.tech-icon{position:relative;display:inline-flex;padding:.25rem;transition:transform .2s,opacity .2s;cursor:default}.tech-icon:hover{transform:translateY(-2px);opacity:.9}.tech-icon:after{content:attr(data-tooltip);position:absolute;top:-30px;left:50%;transform:translate(-50%) translateY(10px);background:var(--color-text);color:var(--color-bg);padding:.25rem .5rem;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;z-index:10}.tech-icon:hover:after{opacity:1;transform:translate(-50%) translateY(0)}.blog-page__body .code-block,.project-page__body .code-block{background-color:var(--color-code-bg);border:1px solid var(--color-code-border);border-radius:8px;padding:0;overflow:hidden}.blog-page__body .code-block__header,.project-page__body .code-block__header{display:flex;align-items:center;gap:.75rem;padding:.5rem .75rem;border-bottom:1px solid var(--color-code-border);background-color:var(--color-code-header);color:var(--color-text-faint);font-size:.75rem}.blog-page__body .code-block__header-dots,.project-page__body .code-block__header-dots{display:inline-flex;gap:.35rem}.blog-page__body .code-block__header-dot,.project-page__body .code-block__header-dot{width:.55rem;height:.55rem;border-radius:999px;background-color:var(--color-border-heavy)}.blog-page__body .code-block__header-dot:first-child,.project-page__body .code-block__header-dot:first-child{background-color:#f7768e}.blog-page__body .code-block__header-dot:nth-child(2),.project-page__body .code-block__header-dot:nth-child(2){background-color:#e0af68}.blog-page__body .code-block__header-dot:nth-child(3),.project-page__body .code-block__header-dot:nth-child(3){background-color:#9ece6a}.blog-page__body .code-block__header-meta,.project-page__body .code-block__header-meta{display:inline-flex;align-items:baseline;gap:.45rem}.blog-page__body .code-block__header-title,.project-page__body .code-block__header-title{color:var(--color-text);font-weight:600;letter-spacing:.01em}.blog-page__body .code-block__header-subtitle,.project-page__body .code-block__header-subtitle{color:var(--color-text-faint);text-transform:uppercase;letter-spacing:.08em;font-size:.68rem}.blog-page__body .code-block__content,.project-page__body .code-block__content{display:block;padding:var(--space-md);background:transparent;white-space:pre;color:var(--color-text);border-radius:0;max-width:100%;overflow:auto}.blog-page__body .code-block__content,.project-page__body .code-block__content{scrollbar-width:thin;scrollbar-color:#343b4e #1b1f2b}.blog-page__body .code-block__content::-webkit-scrollbar,.project-page__body .code-block__content::-webkit-scrollbar{width:6px;height:6px}.blog-page__body .code-block__content::-webkit-scrollbar-track,.project-page__body .code-block__content::-webkit-scrollbar-track{background:#1b1f2b}.blog-page__body .code-block__content::-webkit-scrollbar-thumb,.project-page__body .code-block__content::-webkit-scrollbar-thumb{background:#343b4e;border-radius:999px;border:1px solid #1b1f2b}.blog-page__body .code-block__content::-webkit-scrollbar-thumb:hover,.project-page__body .code-block__content::-webkit-scrollbar-thumb:hover{background:#46506a}.blog-page__body .code-block__content::-webkit-scrollbar-corner,.project-page__body .code-block__content::-webkit-scrollbar-corner{background:#1f2330}.blog-page__body .code-block__line,.project-page__body .code-block__line{display:grid;grid-template-columns:3rem max-content;min-width:100%}.blog-page__body .code-block__line-number,.project-page__body .code-block__line-number{color:var(--color-text-faint);text-align:right;padding:0 .75rem 0 .5rem;-webkit-user-select:none;user-select:none}.blog-page__body .code-block__line-content,.project-page__body .code-block__line-content{display:block;white-space:pre;padding:0 .85rem}.blog-page__body .code-block--editor,.project-page__body .code-block--editor{background-color:#1f2330;border-color:#2a2f3d;border-radius:0}.blog-page__body .code-block--editor .code-block__header,.project-page__body .code-block--editor .code-block__header{background-color:#181c27;border-bottom-color:#2a2f3d}.blog-page__body .code-block--editor .code-block__content,.project-page__body .code-block--editor .code-block__content{padding:.45rem 0;background-color:#1f2330;color:#dce1f0;font-size:14px;line-height:1.45}.blog-page__body .code-block--editor .code-block__line-number,.project-page__body .code-block--editor .code-block__line-number{background-color:#1b1f2b;color:#6d7487;box-shadow:inset -1px 0 #2a2f3d}.blog-page__body .code-block--editor .code-block__line-content,.project-page__body .code-block--editor .code-block__line-content{color:#dce1f0}.blog-page__body .code-block--editor .hljs-comment,.blog-page__body .code-block--editor .hljs-quote,.project-page__body .code-block--editor .hljs-comment,.project-page__body .code-block--editor .hljs-quote{color:#6d7487}.blog-page__body .code-block--editor .hljs-keyword,.project-page__body .code-block--editor .hljs-keyword{color:#f7768e}.blog-page__body .code-block--editor .hljs-number,.blog-page__body .code-block--editor .hljs-title.function_,.blog-page__body .code-block--editor .hljs-function .hljs-title,.project-page__body .code-block--editor .hljs-number,.project-page__body .code-block--editor .hljs-title.function_,.project-page__body .code-block--editor .hljs-function .hljs-title{color:#e0af68}.blog-page__body .code-block--editor .hljs-title,.blog-page__body .code-block--editor .hljs-type,.blog-page__body .code-block--editor .hljs-params,.blog-page__body .code-block--editor .hljs-built_in,.blog-page__body .code-block--editor .hljs-property,.project-page__body .code-block--editor .hljs-title,.project-page__body .code-block--editor .hljs-type,.project-page__body .code-block--editor .hljs-params,.project-page__body .code-block--editor .hljs-built_in,.project-page__body .code-block--editor .hljs-property{color:#7aa2f7}.blog-page__body .code-block--editor .hljs-string,.blog-page__body .code-block--editor .hljs-regexp,.blog-page__body .code-block--editor .hljs-template-string,.project-page__body .code-block--editor .hljs-string,.project-page__body .code-block--editor .hljs-regexp,.project-page__body .code-block--editor .hljs-template-string{color:#9ece6a}.blog-page__body .hljs-comment,.blog-page__body .hljs-quote,.project-page__body .hljs-comment,.project-page__body .hljs-quote{color:var(--color-code-comment)}.blog-page__body .hljs-string,.blog-page__body .hljs-regexp,.blog-page__body .hljs-template-string,.blog-page__body .hljs-meta .hljs-string,.project-page__body .hljs-string,.project-page__body .hljs-regexp,.project-page__body .hljs-template-string,.project-page__body .hljs-meta .hljs-string{color:var(--color-code-string)}.blog-page__body .hljs-keyword,.blog-page__body .hljs-selector-tag,.blog-page__body .hljs-literal,.project-page__body .hljs-keyword,.project-page__body .hljs-selector-tag,.project-page__body .hljs-literal{color:var(--color-code-keyword)}.blog-page__body .hljs-number,.blog-page__body .hljs-symbol,.blog-page__body .hljs-bullet,.blog-page__body .hljs-type,.project-page__body .hljs-number,.project-page__body .hljs-symbol,.project-page__body .hljs-bullet,.project-page__body .hljs-type{color:var(--color-code-number)}.blog-page__body .hljs-title,.blog-page__body .hljs-title.function_,.blog-page__body .hljs-function .hljs-title,.blog-page__body .hljs-attr,.blog-page__body .hljs-property,.blog-page__body .hljs-built_in,.blog-page__body .hljs-title.class_,.project-page__body .hljs-title,.project-page__body .hljs-title.function_,.project-page__body .hljs-function .hljs-title,.project-page__body .hljs-attr,.project-page__body .hljs-property,.project-page__body .hljs-built_in,.project-page__body .hljs-title.class_{color:var(--color-code-function)}.blog-page__body .rich-embed,.project-page__body .rich-embed{margin:var(--space-md) 0;border:1px solid var(--color-border);border-left:3px solid var(--color-accent);border-radius:8px;overflow:hidden;background:var(--color-bg-alt)}.blog-page__body .rich-embed__meta,.project-page__body .rich-embed__meta{display:flex;flex-direction:column;gap:.35rem;padding:.85rem 1rem}.blog-page__body .rich-embed__provider,.project-page__body .rich-embed__provider{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-faint);text-transform:uppercase;letter-spacing:.08em}.blog-page__body .rich-embed__link,.project-page__body .rich-embed__link{color:var(--color-link);word-break:break-word}.blog-page__body .rich-embed__frame,.project-page__body .rich-embed__frame{position:relative;width:100%;aspect-ratio:16 / 9;border-top:1px solid var(--color-border);background:#000}.blog-page__body .rich-embed__frame iframe,.project-page__body .rich-embed__frame iframe{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;border:0}.blog-page__body .markdown-image,.project-page__body .markdown-image{display:block;max-width:100%;height:auto;margin:var(--space-md) auto;border:1px solid var(--color-border);border-radius:8px;background:var(--color-bg-alt)}.boot-loader{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#0a0a0a;display:flex;align-items:flex-start;justify-content:flex-start;padding:2rem;z-index:9999;overflow:hidden}.boot-loader__terminal{font-family:var(--font-mono);font-size:14px;line-height:1.5;color:#b0b0b0;max-width:700px;width:100%}.boot-loader__line{opacity:0;animation:boot-fade-in .05s ease forwards;white-space:pre}.boot-loader__line--ok{color:#b0b0b0}.boot-loader__line--ok .boot-ok{color:#5faf5f}.boot-loader__line--info{color:#878787}.boot-loader__line--accent{color:#f60;font-weight:600}.boot-loader__line--header{color:#e0e0e0;font-weight:600}.boot-loader__line--dim{color:#4a4a4a}.boot-loader__line--loading{color:#87af87}.boot-loader__line--progress{color:#87afaf}.boot-loader__cursor{display:inline-block;width:7px;height:14px;background-color:#f60;animation:boot-blink .6s step-end infinite;vertical-align:text-bottom;margin-left:2px}@keyframes boot-fade-in{0%{opacity:0}to{opacity:1}}@keyframes boot-blink{0%,to{opacity:1}50%{opacity:0}}.boot-loader--fade-out{animation:boot-fade-out .5s ease forwards}@keyframes boot-fade-out{0%{opacity:1}to{opacity:0}}.boot-loader__progress-bar{display:inline-block;margin-left:10px;color:#5faf5f;letter-spacing:1px}.header{padding:var(--space-2xl) 0 var(--space-lg);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-2xl);position:relative}.header__top{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:var(--space-md);margin-bottom:var(--space-md)}.header__controls{display:flex;gap:var(--space-sm);align-items:center;position:relative}.header__prompt{font-family:var(--font-mono);font-size:var(--font-size-md);font-weight:500;color:var(--color-text);display:flex;align-items:center;gap:0}.theme-toggle,.settings-toggle{background:none;border:none;font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text-faint);cursor:pointer;transition:color .15s ease;padding:0}.theme-toggle:hover,.settings-toggle:hover,.header__prompt-user{color:var(--color-accent)}.header__prompt-sep{color:var(--color-text-muted)}.header__prompt-path{color:var(--color-text)}.header__prompt-dollar{color:var(--color-text-muted);margin-right:var(--space-sm)}.header__cursor{display:inline-block;width:8px;height:1.1em;background-color:var(--color-accent);animation:blink 1s step-end infinite;vertical-align:text-bottom}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}.header__nav{display:flex;gap:var(--space-md);flex-wrap:wrap}.header__nav-link{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text-muted);transition:color .15s ease}.header__nav-link:visited{color:var(--color-text-muted)}.header__nav-link:hover,.header__nav-link.active{color:var(--color-accent);text-decoration:underline}.settings-menu{position:absolute;top:100%;right:0;background-color:var(--color-bg);border:1px solid var(--color-border);border-radius:4px;padding:var(--space-sm);min-width:200px;z-index:1000;box-shadow:0 4px 12px #0000001a;margin-top:var(--space-xs)}.settings-menu__item{padding:var(--space-xs) 0;border-bottom:1px solid var(--color-border)}.settings-menu__item:last-child{border-bottom:none}.settings-menu__label{display:flex;align-items:center;gap:var(--space-sm);cursor:pointer;font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text)}.settings-menu__checkbox{margin:0;cursor:pointer}.settings-menu__text{flex:1}.settings-menu__button{background:none;border:none;font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text);cursor:pointer;padding:0;width:100%;text-align:left;transition:color .15s ease}.settings-menu__button:hover{color:var(--color-accent)}@media(max-width:600px){.settings-menu{right:0;left:auto;min-width:200px}.header__controls{gap:var(--space-xs)}}.section{margin-bottom:var(--space-3xl)}.section__heading{font-family:var(--font-mono);font-size:var(--font-size-lg);font-weight:600;padding-left:var(--space-md);border-left:3px solid var(--color-accent);margin-bottom:var(--space-lg);color:var(--color-text)}.section__content{padding-left:0}.project{padding:var(--space-md) 0;border-bottom:1px solid var(--color-border);cursor:pointer;transition:background-color .15s ease;padding-left:var(--space-sm);padding-right:var(--space-sm);margin-left:calc(-1 * var(--space-sm));margin-right:calc(-1 * var(--space-sm));border-radius:2px}.project:hover{background-color:var(--color-bg-alt)}.project:last-child{border-bottom:none}.project__header{display:flex;align-items:baseline;gap:var(--space-sm);margin-bottom:var(--space-xs);flex-wrap:wrap}.project__index{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text-faint);min-width:1.5em}.project__title{font-family:var(--font-mono);font-size:var(--font-size-md);font-weight:600;color:var(--color-accent);text-decoration:none}.project__title:visited{color:var(--color-accent)}.project__title:hover{color:var(--color-accent-hover)}.project__description{color:var(--color-text);font-size:var(--font-size-base);margin-bottom:var(--space-sm);padding-left:0}.project__meta{display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap}.project__tags{display:flex;gap:var(--space-sm);flex-wrap:wrap}.project__tag{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);background-color:var(--color-tag-bg);border:1px solid var(--color-tag-border);padding:.1em .4em;border-radius:2px}.project__detail{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-faint)}.project-page{padding:var(--space-2xl) 0;animation:page-slide-in .3s ease}@keyframes page-slide-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.project-page__back{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text-muted);background:none;border:none;cursor:pointer;padding:var(--space-sm) 0;margin-bottom:var(--space-lg);display:inline-flex;align-items:center;gap:var(--space-sm);transition:color .15s ease}.project-page__back:hover{color:var(--color-accent)}.project-page__title{font-family:var(--font-mono);font-size:var(--font-size-xl);font-weight:600;color:var(--color-text);margin-bottom:var(--space-sm)}.project-page__meta{display:flex;align-items:center;gap:var(--space-md);margin-bottom:var(--space-xl);flex-wrap:wrap}.project-page__tags{display:flex;gap:var(--space-sm);flex-wrap:wrap}.project-page__tag{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);background-color:var(--color-tag-bg);border:1px solid var(--color-tag-border);padding:.1em .4em;border-radius:2px}.project-page__detail{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-faint)}.project-page__body{line-height:1.7}.project-page__body h2{font-family:var(--font-mono);font-size:var(--font-size-lg);font-weight:600;margin-top:var(--space-xl);margin-bottom:var(--space-md);padding-left:var(--space-md);border-left:3px solid var(--color-accent)}.project-page__body h3{font-family:var(--font-mono);font-size:var(--font-size-md);font-weight:600;margin-top:var(--space-lg);margin-bottom:var(--space-sm);color:var(--color-text)}.project-page__body p{margin-bottom:var(--space-md);color:var(--color-text)}.project-page__body ul{padding-left:var(--space-lg);margin-bottom:var(--space-md)}.project-page__body li{margin-bottom:var(--space-xs)}.project-page__body strong{color:var(--color-accent);font-weight:600}.blog-post-card{padding:var(--space-md) 0;border-bottom:1px solid var(--color-border);cursor:pointer;transition:background-color .15s ease;padding-left:var(--space-sm);padding-right:var(--space-sm);margin-left:calc(-1 * var(--space-sm));margin-right:calc(-1 * var(--space-sm));border-radius:2px}.blog-post-card:last-child{border-bottom:none}.blog-post-card:hover{background-color:var(--color-bg-alt)}.blog-post-card__header{display:flex;justify-content:space-between;align-items:baseline;gap:var(--space-sm);margin-bottom:var(--space-xs);flex-wrap:wrap}.blog-post-card__title{font-family:var(--font-mono);font-size:var(--font-size-md);font-weight:600;color:var(--color-accent)}.blog-post-card__date{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text-faint);white-space:nowrap}.blog-post-card__excerpt{color:var(--color-text-muted);font-size:var(--font-size-base);margin-bottom:var(--space-sm)}.blog-post-card__tags{display:flex;gap:var(--space-sm);flex-wrap:wrap}.blog-post-card__tag{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);background-color:var(--color-tag-bg);border:1px solid var(--color-tag-border);padding:.1em .4em;border-radius:2px}.blog-page{padding:var(--space-2xl) 0;animation:page-slide-in .3s ease}.blog-page__back{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text-muted);background:none;border:none;cursor:pointer;padding:var(--space-sm) 0;margin-bottom:var(--space-lg);display:inline-flex;align-items:center;gap:var(--space-sm);transition:color .15s ease}.blog-page__back:hover{color:var(--color-accent)}.blog-page__title{font-family:var(--font-mono);font-size:var(--font-size-xl);font-weight:600;color:var(--color-text);margin-bottom:var(--space-xs)}.blog-page__meta{display:flex;align-items:center;gap:var(--space-md);margin-bottom:var(--space-xl);flex-wrap:wrap;border-bottom:1px solid var(--color-border);padding-bottom:var(--space-md)}.blog-page__date{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text-faint)}.blog-page__tags{display:flex;gap:var(--space-sm);flex-wrap:wrap}.blog-page__tag{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);background-color:var(--color-tag-bg);border:1px solid var(--color-tag-border);padding:.1em .4em;border-radius:2px}.blog-page__body{line-height:1.7}.blog-page__body h2{font-family:var(--font-mono);font-size:var(--font-size-lg);font-weight:600;margin-top:var(--space-xl);margin-bottom:var(--space-md);padding-left:var(--space-md);border-left:3px solid var(--color-accent)}.blog-page__body h3{font-family:var(--font-mono);font-size:var(--font-size-md);font-weight:600;margin-top:var(--space-lg);margin-bottom:var(--space-sm);color:var(--color-text)}.blog-page__body p{margin-bottom:var(--space-md);color:var(--color-text)}.blog-page__body ul{padding-left:var(--space-lg);margin-bottom:var(--space-md)}.blog-page__body li{margin-bottom:var(--space-xs)}.blog-page__body blockquote{border-left:3px solid var(--color-border-heavy);padding-left:var(--space-md);margin-left:0;margin-bottom:var(--space-md);color:var(--color-text-muted);font-style:italic}.blog-page__body strong{color:var(--color-accent);font-weight:600}.blog-page__body code{background-color:var(--color-bg-alt);padding:.2em .4em;border-radius:3px;font-size:.9em}.blog-page__body pre{margin-top:var(--space-md);margin-bottom:var(--space-md);padding:var(--space-md);overflow-x:auto}.footer{border-top:1px solid var(--color-border);padding:var(--space-lg) 0 var(--space-2xl);margin-top:var(--space-xl)}.footer__content{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:var(--space-md)}.footer__links{display:flex;gap:var(--space-md)}.footer__link{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text-muted)}.footer__link:visited{color:var(--color-text-muted)}.footer__link:hover{color:var(--color-accent)}.footer__copy{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-faint)}.scroll-progress{position:fixed;top:0;left:0;width:0%;height:2px;background-color:var(--color-accent);z-index:1000;transition:width .1s linear}
