:root{--color-bg: #F5F0E8;--color-bg-2: #EDE7D9;--color-text: #1C1814;--color-text-muted: #7A6F65;--color-accent: #E8735A;--color-accent-hover: #D45E45;--color-code-bg: #EAE4D6;--color-border: rgba(28, 24, 20, .12);--font-size-xs: clamp(.7rem, .65rem + .25vw, .8rem);--font-size-sm: clamp(.85rem, .8rem + .25vw, .95rem);--font-size-base: clamp(1rem, .95rem + .25vw, 1.125rem);--font-size-md: clamp(1.1rem, 1rem + .5vw, 1.35rem);--font-size-lg: clamp(1.35rem, 1.1rem + 1.1vw, 1.875rem);--font-size-xl: clamp(1.75rem, 1.2rem + 2.3vw, 3rem);--font-size-2xl: clamp(2.5rem, 1.8rem + 3vw, 4.5rem);--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-6: 1.5rem;--space-8: 2rem;--space-12: 3rem;--space-16: 4rem;--space-24: 6rem;--font-display: "Fraunces", Georgia, serif;--font-body: "Source Serif 4", Georgia, serif;--font-mono: "JetBrains Mono", "Fira Code", monospace;--radius-sm: 3px;--transition-fast: .15s ease;--transition-base: .25s ease;--layout-max: 1200px;--col-left: 38%;--col-gap: clamp(2rem, 5vw, 5rem);--card-avatar-size: 120px;--card-col-gap: clamp(2rem, 5vw, 4rem)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--color-bg: #1C1814;--color-bg-2: #251F1A;--color-text: #F0EAE0;--color-text-muted: #9A8F85;--color-accent: #E8735A;--color-accent-hover: #F08A73;--color-code-bg: #2A2520;--color-border: rgba(240, 234, 224, .1)}}[data-theme=dark]{--color-bg: #1C1814;--color-bg-2: #251F1A;--color-text: #F0EAE0;--color-text-muted: #9A8F85;--color-accent: #E8735A;--color-accent-hover: #F08A73;--color-code-bg: #2A2520;--color-border: rgba(240, 234, 224, .1)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-behavior:smooth}body{background-color:var(--color-bg);color:var(--color-text);font-family:var(--font-body);font-size:var(--font-size-base);line-height:1.65;min-height:100dvh;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img,video,svg{display:block;max-width:100%}a{color:inherit;text-decoration:none}ul,ol{list-style:none}.site-nav{border-bottom:1px solid var(--color-border);padding:var(--space-4) clamp(var(--space-6),5vw,var(--space-16))}.site-nav__inner{max-width:var(--layout-max);margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:var(--space-4)}.site-nav__home{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);transition:color var(--transition-fast);white-space:nowrap}.site-nav__home:hover{color:var(--color-text)}.site-nav__links{display:flex;align-items:center;gap:var(--space-6);flex-wrap:wrap}.site-nav__controls{display:flex;align-items:center;gap:var(--space-4);flex-shrink:0}.site-nav__lang-switch{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);letter-spacing:.02em;transition:color var(--transition-fast);white-space:nowrap}.site-nav__lang-switch:hover{color:var(--color-accent)}.site-nav__theme-toggle{background:none;border:none;cursor:pointer;font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);padding:0;line-height:1;transition:color var(--transition-fast)}.site-nav__theme-toggle:hover{color:var(--color-accent)}.site-nav__link{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);text-transform:lowercase;letter-spacing:.02em;transition:color var(--transition-fast)}.site-nav__link:hover{color:var(--color-text)}.site-nav__link[aria-current=page]{color:var(--color-accent)}.hub{min-height:100dvh;max-width:var(--layout-max);margin:0 auto;padding:var(--space-16) clamp(var(--space-6),5vw,var(--space-16));display:grid;grid-template-columns:var(--col-left) 1fr;gap:var(--col-gap);align-items:start}.identity{position:sticky;top:var(--space-16)}.identity__name{font-family:var(--font-display);font-size:var(--font-size-2xl);font-weight:900;font-optical-sizing:auto;line-height:1.05;letter-spacing:-.02em;color:var(--color-text);margin-bottom:var(--space-2)}.identity__title{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-accent);text-transform:lowercase;letter-spacing:.04em;margin-bottom:var(--space-8)}.identity__title:before{content:"> ";opacity:.5}.identity__bio{font-size:var(--font-size-base);color:var(--color-text-muted);line-height:1.75;max-width:34ch;margin-bottom:var(--space-12)}.contact{display:flex;flex-direction:column;gap:var(--space-3)}.contact__item{display:inline-flex;align-items:center;gap:var(--space-2);font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);transition:color var(--transition-fast)}.contact__item:hover{color:var(--color-text)}.contact__label{background:var(--color-text-muted);color:var(--color-bg);font-size:.6rem;letter-spacing:.08em;text-transform:uppercase;padding:1px 5px 1px 4px;border-radius:var(--radius-sm);user-select:none;flex-shrink:0}.cards{display:flex;flex-direction:column}.nav-card{display:grid;grid-template-columns:1fr auto;grid-template-rows:auto auto;align-items:center;column-gap:var(--space-4);padding:var(--space-8) 0;border-bottom:1px solid var(--color-border);text-decoration:none;transition:padding-left var(--transition-base)}.nav-card:first-child{border-top:1px solid var(--color-border)}.nav-card:hover{padding-left:var(--space-4)}.nav-card:hover .nav-card__arrow{color:var(--color-accent);transform:translate(4px)}.nav-card:hover .nav-card__title{color:var(--color-accent)}.nav-card__title{font-family:var(--font-display);font-size:var(--font-size-xl);font-weight:700;font-optical-sizing:auto;line-height:1.1;letter-spacing:-.015em;color:var(--color-text);transition:color var(--transition-fast);grid-column:1;grid-row:1}.nav-card__desc{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);letter-spacing:.02em;margin-top:var(--space-1);grid-column:1;grid-row:2}.nav-card__arrow{font-size:var(--font-size-md);color:var(--color-border);grid-column:2;grid-row:1 / 3;align-self:center;transition:color var(--transition-fast),transform var(--transition-base);line-height:1}.colophon{grid-column:1 / -1;padding-top:var(--space-12);border-top:1px solid var(--color-border);font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);opacity:.6;display:flex;justify-content:space-between}.card-page{max-width:var(--layout-max);margin:0 auto;padding:var(--space-12) clamp(var(--space-6),5vw,var(--space-16))}.card-header{display:flex;align-items:center;gap:var(--space-8);padding-bottom:var(--space-12);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-12)}.avatar{flex-shrink:0;width:var(--card-avatar-size);height:var(--card-avatar-size);border-radius:50%;border:2px solid var(--color-accent);background-color:var(--color-bg-2);display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.avatar__initials{font-family:var(--font-display);font-size:var(--font-size-lg);font-weight:700;color:var(--color-text-muted);letter-spacing:-.02em;user-select:none}.avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center top}.card-header__meta{display:flex;flex-direction:column;gap:var(--space-1)}.card-header__name{font-family:var(--font-display);font-size:var(--font-size-xl);font-weight:900;font-optical-sizing:auto;line-height:1.05;letter-spacing:-.02em;color:var(--color-text)}.card-header__title{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-accent);text-transform:lowercase;letter-spacing:.04em}.card-header__title:before{content:"> ";opacity:.5}.card-body{display:grid;grid-template-columns:38% 1fr;gap:var(--card-col-gap);align-items:start;margin-bottom:var(--space-12)}.card-left{display:flex;flex-direction:column;gap:var(--space-8)}.card-bio{font-size:var(--font-size-base);color:var(--color-text-muted);line-height:1.75}.card-skills{display:flex;flex-direction:column;gap:var(--space-8)}.skill-cloud{display:flex;flex-wrap:wrap;gap:var(--space-2);align-content:flex-start}.skill-tag{display:inline-flex;align-items:center;gap:var(--space-2);font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text);background:var(--color-code-bg);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:var(--space-1) var(--space-3);line-height:1.6;white-space:nowrap}.skill-tag__icon{width:.9em;height:.9em;fill:currentColor;flex-shrink:0}.pdf-btn{margin-left:auto;font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-accent);background:transparent;border:1px solid var(--color-accent);border-radius:var(--radius-sm);padding:var(--space-1) var(--space-3);cursor:pointer;letter-spacing:.04em;transition:background .15s,color .15s;align-self:center}.pdf-btn:hover{background:var(--color-accent);color:var(--color-bg)}.learning-band{background:var(--color-bg-2);border-top:1px solid var(--color-border);border-bottom:1px solid var(--color-border);padding:var(--space-8) 0;margin-bottom:var(--space-12)}.learning-band__inner{max-width:var(--layout-max);margin:0 auto;padding:0 clamp(var(--space-6),5vw,var(--space-16));display:flex;align-items:baseline;gap:var(--space-6);flex-wrap:wrap}.learning-band__label{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-accent);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;flex-shrink:0}.learning-band__items{display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:center}.projects-page{max-width:var(--layout-max);margin:0 auto;padding:var(--space-12) clamp(var(--space-6),5vw,var(--space-16))}.projects-page__header{padding-bottom:var(--space-12);border-bottom:1px solid var(--color-border);margin-bottom:0}.projects-page__title{font-family:var(--font-display);font-size:var(--font-size-2xl);font-weight:900;font-optical-sizing:auto;line-height:1.05;letter-spacing:-.02em;color:var(--color-text);margin-bottom:var(--space-2)}.projects-page__subtitle{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted)}.projects-page__subtitle:before{content:"> ";opacity:.5}.project-list{display:flex;flex-direction:column}.project-card{padding:var(--space-10) 0;border-bottom:1px solid var(--color-border);display:grid;grid-template-columns:1fr auto;grid-template-rows:auto auto auto;gap:var(--space-3) var(--space-8);align-items:start}.project-card__name{font-family:var(--font-display);font-size:var(--font-size-xl);font-weight:700;font-optical-sizing:auto;line-height:1.1;letter-spacing:-.015em;color:var(--color-text);grid-column:1;grid-row:1}.project-card__desc{font-size:var(--font-size-base);color:var(--color-text-muted);line-height:1.65;max-width:60ch;grid-column:1;grid-row:2}.project-card__tags{display:flex;flex-wrap:wrap;gap:var(--space-2);grid-column:1;grid-row:3;margin-top:var(--space-1)}.project-card__status{grid-column:2;grid-row:1;font-family:var(--font-mono);font-size:.6rem;letter-spacing:.08em;text-transform:uppercase;padding:1px 5px 1px 4px;border-radius:var(--radius-sm);white-space:nowrap;align-self:start;margin-top:.35em}.project-card__status--active{background:color-mix(in srgb,var(--color-accent) 15%,transparent);color:var(--color-accent);border:1px solid color-mix(in srgb,var(--color-accent) 30%,transparent)}@media(max-width:700px){.project-card{grid-template-columns:1fr;grid-template-rows:auto auto auto auto;gap:var(--space-3)}.project-card__status{grid-column:1;grid-row:4;align-self:auto;margin-top:0;width:fit-content}}.resume-page{max-width:820px;margin:0 auto;padding:var(--space-12) clamp(var(--space-6),5vw,var(--space-16))}.resume-header{padding-bottom:var(--space-10);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-10)}.resume-header__name{font-family:var(--font-display);font-size:var(--font-size-2xl);font-weight:900;font-optical-sizing:auto;line-height:1.05;letter-spacing:-.02em;color:var(--color-text);margin-bottom:var(--space-2)}.resume-header__title{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-accent);text-transform:lowercase;letter-spacing:.04em}.resume-header__title:before{content:"> ";opacity:.5}.resume-section{margin-bottom:var(--space-10)}.resume-section__label{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);letter-spacing:.06em;display:flex;align-items:center;gap:var(--space-2);white-space:nowrap;margin-bottom:var(--space-6)}.resume-section__label:before{content:"──";color:var(--color-border);letter-spacing:-.1em}.resume-section__label:after{content:"";flex:1;height:1px;background:var(--color-border);display:block}.resume-entry{display:grid;grid-template-columns:11rem 1fr;gap:0 var(--space-6);padding-bottom:var(--space-8);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-8)}.resume-entry:last-child{border-bottom:none;padding-bottom:0;margin-bottom:0}.resume-entry__period{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);padding-top:.25em;line-height:1.6}.resume-entry__body{display:flex;flex-direction:column;gap:var(--space-1)}.resume-entry__org{font-family:var(--font-body);font-size:var(--font-size-base);font-weight:600;color:var(--color-text);line-height:1.3}.resume-entry__role{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-accent);text-transform:lowercase;letter-spacing:.03em}.resume-entry__bullets{margin-top:var(--space-3);display:flex;flex-direction:column;gap:var(--space-2)}.resume-entry__bullet{font-size:var(--font-size-sm);color:var(--color-text-muted);line-height:1.6;padding-left:var(--space-4);position:relative}.resume-entry__bullet:before{content:"·";position:absolute;left:0;color:var(--color-accent);font-family:var(--font-mono)}.resume-skills{display:flex;flex-wrap:wrap;gap:var(--space-2)}@media(max-width:600px){.resume-entry{grid-template-columns:1fr;gap:var(--space-2)}.resume-entry__period{padding-top:0}}.stub-page{max-width:var(--layout-max);margin:0 auto;padding:var(--space-16) clamp(var(--space-6),5vw,var(--space-16))}.stub-page__title{font-family:var(--font-display);font-size:var(--font-size-2xl);font-weight:900;font-optical-sizing:auto;line-height:1.05;letter-spacing:-.02em;color:var(--color-text);margin-bottom:var(--space-6)}.stub-page__note{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text-muted)}.stub-page__note:before{content:"— ";opacity:.5}.blog-list-page{max-width:var(--layout-max);margin:0 auto;padding:var(--space-12) clamp(var(--space-6),5vw,var(--space-16))}.blog-list-page__header{padding-bottom:var(--space-12);border-bottom:1px solid var(--color-border);margin-bottom:0}.blog-list-page__title{font-family:var(--font-display);font-size:var(--font-size-2xl);font-weight:900;font-optical-sizing:auto;line-height:1.05;letter-spacing:-.02em;color:var(--color-text);margin-bottom:var(--space-2)}.blog-list-page__subtitle{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted)}.blog-list-page__subtitle:before{content:"> ";opacity:.5}.blog-post-row{display:grid;grid-template-columns:9rem 1fr;gap:0 var(--space-8);padding:var(--space-8) 0;border-bottom:1px solid var(--color-border);text-decoration:none;color:inherit;transition:padding-left var(--transition-base)}.blog-post-row:hover{padding-left:var(--space-3)}.blog-post-row:hover .blog-post-row__title{color:var(--color-accent)}.blog-post-row__date{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);padding-top:.2em;line-height:1.6}.blog-post-row__body{display:flex;flex-direction:column;gap:var(--space-2)}.blog-post-row__title{font-family:var(--font-display);font-size:var(--font-size-lg);font-weight:700;font-optical-sizing:auto;line-height:1.2;letter-spacing:-.01em;color:var(--color-text);transition:color var(--transition-fast)}.blog-post-row__desc{font-size:var(--font-size-sm);color:var(--color-text-muted);line-height:1.6}.blog-post-row__meta{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;margin-top:var(--space-1)}.blog-post-row__reading-time{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);opacity:.7}.tag-pill{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);background:var(--color-code-bg);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:1px var(--space-2);line-height:1.6;white-space:nowrap;text-decoration:none;transition:color var(--transition-fast),border-color var(--transition-fast);cursor:pointer}.tag-pill:hover{color:var(--color-accent);border-color:var(--color-accent)}.post-page{max-width:720px;margin:0 auto;padding:var(--space-12) clamp(var(--space-6),5vw,var(--space-16))}.post-back{display:inline-flex;align-items:center;gap:var(--space-2);font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);margin-bottom:var(--space-10);transition:color var(--transition-fast)}.post-back:hover{color:var(--color-text)}.post-back:before{content:"←"}.post-header{padding-bottom:var(--space-8);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-10)}.post-header__title{font-family:var(--font-display);font-size:var(--font-size-2xl);font-weight:900;font-optical-sizing:auto;line-height:1.05;letter-spacing:-.02em;color:var(--color-text);margin-bottom:var(--space-4)}.post-header__meta{display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap;font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted)}.post-header__meta-sep{opacity:.4}.post-body{line-height:1.75}.post-body h2{font-family:var(--font-display);font-size:var(--font-size-xl);font-weight:700;font-optical-sizing:auto;letter-spacing:-.015em;color:var(--color-text);margin-top:var(--space-12);margin-bottom:var(--space-4);line-height:1.1}.post-body h3{font-family:var(--font-display);font-size:var(--font-size-lg);font-weight:600;font-optical-sizing:auto;color:var(--color-text);margin-top:var(--space-8);margin-bottom:var(--space-3);line-height:1.2}.post-body p{margin-bottom:var(--space-6);color:var(--color-text)}.post-body ul,.post-body ol{padding-left:var(--space-6);margin-bottom:var(--space-6);list-style:revert}.post-body li{margin-bottom:var(--space-2);color:var(--color-text)}.post-body a{color:var(--color-accent);text-decoration:underline;text-underline-offset:2px;transition:color var(--transition-fast)}.post-body a:hover{color:var(--color-accent-hover)}.post-body code{font-family:var(--font-mono);font-size:.875em;background:var(--color-code-bg);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:.1em .35em}.post-body pre{background:var(--color-bg-2);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:var(--space-6);overflow-x:auto;margin-bottom:var(--space-6)}.post-body pre code{background:transparent;border:none;padding:0;font-size:var(--font-size-sm);line-height:1.65}.post-body blockquote{border-left:3px solid var(--color-accent);padding-left:var(--space-6);margin-left:0;margin-bottom:var(--space-6);font-style:italic;color:var(--color-text-muted)}.post-body hr{border:none;border-top:1px solid var(--color-border);margin:var(--space-10) 0}.tag-page{max-width:var(--layout-max);margin:0 auto;padding:var(--space-12) clamp(var(--space-6),5vw,var(--space-16))}.tag-page__header{padding-bottom:var(--space-12);border-bottom:1px solid var(--color-border);margin-bottom:0}.tag-page__label{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);margin-bottom:var(--space-2)}.tag-page__tag{font-family:var(--font-display);font-size:var(--font-size-2xl);font-weight:900;font-optical-sizing:auto;line-height:1.05;letter-spacing:-.02em;color:var(--color-accent)}@media(max-width:700px){.hub{grid-template-columns:1fr;padding:var(--space-8) var(--space-6);gap:var(--space-12)}.identity{position:static}.nav-card:hover{padding-left:var(--space-2)}.colophon{grid-column:1;flex-direction:column;gap:var(--space-2)}.card-header{flex-direction:column;align-items:flex-start;gap:var(--space-6)}.card-body{grid-template-columns:1fr;gap:var(--space-8)}.site-nav__links{gap:var(--space-4)}}@media(min-width:701px)and (max-width:900px){.hub{--col-left: 45%;padding:var(--space-12) var(--space-8)}.card-body{grid-template-columns:44% 1fr}}.about-page{max-width:var(--layout-max);margin:0 auto;padding:var(--space-12) clamp(var(--space-6),5vw,var(--space-16))}.uses-page{max-width:820px;margin:0 auto;padding:var(--space-12) clamp(var(--space-6),5vw,var(--space-16))}.uses-item{display:grid;grid-template-columns:12rem 1fr;gap:0 var(--space-6);padding:var(--space-4) 0;border-bottom:1px solid var(--color-border)}.uses-item:last-child{border-bottom:none}.uses-item__name{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-text);font-weight:500;padding-top:.15em}.uses-item__note{font-size:var(--font-size-sm);color:var(--color-text-muted);line-height:1.6}@media(max-width:600px){.uses-item{grid-template-columns:1fr;gap:var(--space-1)}}.blog-post-row__footer{display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap;margin-top:var(--space-1)}.blog-post-row__tags{display:flex;gap:var(--space-2);flex-wrap:wrap}@media print{@page{margin:1.5cm;size:A4}.site-nav,.pdf-btn,.learning-band{display:none!important}body{font-size:11pt;color:#1c1814;background:#fff}.about-page{max-width:100%;padding:0}.card-header{display:flex;align-items:center;gap:1rem;margin-bottom:1rem;border-bottom:1pt solid #ccc;padding-bottom:.75rem}.card-body{display:block}.card-left{margin-bottom:1rem}.skill-cloud{display:flex;flex-wrap:wrap;gap:.3rem;margin-bottom:1.5rem}.skill-tag{font-size:8pt;border:.5pt solid #aaa;padding:1pt 5pt;background:#f5f5f5;border-radius:2pt}.resume-page{max-width:100%;padding:0}.resume-entry{page-break-inside:avoid;break-inside:avoid}a{color:inherit;text-decoration:none}}
