@font-face{font-family:Satoshi-Variable;src:url(./Satoshi-Variable-CFg-z2ne.woff2) format("woff2"),url(./Satoshi-Variable-CfACykSx.woff) format("woff");font-display:swap;font-style:normal;font-weight:300 700}*{box-sizing:border-box}body{margin:0;background-color:var(--theme-surface-passive-background-color);color:var(--theme-typography-color-primary);font-family:var(--primitive-font-family-text, "Satoshi-Variable", sans-serif);min-height:100vh}#root{min-height:100vh}:root{--grid-gutter-min: var(--primitive-layout-grid-gutter-min);--grid-col-min: var(--primitive-layout-grid-column-min);--grid-col-max: var(--primitive-layout-grid-column-max);--nav-gap-primary: var(--primitive-layout-grid-nav-gap-primary);--nav-gap-secondary: var(--primitive-layout-grid-nav-gap-secondary);--mobile-gutter-min: var(--primitive-layout-grid-mobile-gutter-min);--mobile-max: var(--primitive-layout-grid-mobile-max)}.page{display:grid;grid-template-columns:minmax(var(--grid-gutter-min),1fr) minmax(var(--grid-col-min),var(--grid-col-max)) minmax(var(--grid-gutter-min),min-content) minmax(var(--grid-col-min),var(--grid-col-max)) minmax(var(--grid-gutter-min),1fr);grid-template-rows:auto auto auto auto;row-gap:0;padding:0;align-content:start}.page-header{grid-column:1 / -1;grid-row:1 / 3;display:grid;grid-template-columns:subgrid;grid-template-rows:subgrid;row-gap:var(--primitive-spacing-md);padding:var(--primitive-spacing-lg) 0 var(--primitive-spacing-md) 0;background-color:var(--theme-surface-emphasis-background-color)}.page-content{grid-column:1 / -1;grid-row:3;display:grid;grid-template-columns:subgrid;grid-template-rows:auto auto;row-gap:var(--primitive-spacing-2xl);padding:var(--primitive-spacing-md) 0;background-color:var(--theme-surface-passive-background-color)}.page-header .nav-toggle{grid-column:4;grid-row:1;justify-self:end}.page-content .nav-secondary{grid-column:4;grid-row:1}.page-content .left{grid-column:2;grid-row:2}.page-content .left:has(.portfolio-page),.page-content .left:has(.resume-page),.page-content .left:has(.case-studies-page),.page-content .left:has(.case-study-detail-page){grid-column:2 / 5}.page-content .right{grid-column:4;grid-row:2}.page-content .content-grid{grid-column:2 / 5;grid-row:2;display:grid;grid-template-columns:subgrid;grid-auto-rows:auto;row-gap:var(--primitive-spacing-2xl);align-content:start;min-height:min-content}.content-row{display:contents}.content-row .col-left{grid-column:1;grid-row:var(--content-row)}.page>.page-footer{grid-column:2 / 5;grid-row:4;padding-top:var(--primitive-spacing-4xl);padding-bottom:var(--primitive-spacing-2xl);display:flex;flex-direction:column;gap:var(--primitive-spacing-xs)}.page-footer__meta{color:var(--theme-typography-color-secondary);margin:0}.page-footer__main{margin:0}.content-row .col-right{grid-column:3;grid-row:var(--content-row);display:flex;flex-direction:column}.content-row .col-span{grid-column:1 / 4;grid-row:var(--content-row)}.content-row .col-right .release-info{flex:1;min-height:0}.masthead,.masthead-nav-group{display:contents}.nav-toggle{display:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;padding:var(--primitive-spacing-xs);border-radius:var(--theme-control-border-radius);color:var(--theme-typography-color-primary);cursor:pointer;line-height:0}.nav-toggle__icon{display:block;width:var(--primitive-spacing-lg);height:var(--primitive-spacing-lg);background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M7.79944 0L10.0556 3.31496L14.0541 3.01208L12.8691 6.84289L15.5989 9.78017L11.865 11.2421L11.2705 15.2078L7.79944 13.2L4.32837 15.2078L3.73391 11.2421L1.52588e-05 9.78017L2.72981 6.84289L1.54479 3.01208L5.54324 3.31496L7.79944 0Z' fill='currentColor'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M7.79944 0L10.0556 3.31496L14.0541 3.01208L12.8691 6.84289L15.5989 9.78017L11.865 11.2421L11.2705 15.2078L7.79944 13.2L4.32837 15.2078L3.73391 11.2421L1.52588e-05 9.78017L2.72981 6.84289L1.54479 3.01208L5.54324 3.31496L7.79944 0Z' fill='currentColor'/%3E%3C/svg%3E");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain}.nav-toggle:hover{background-color:var(--theme-surface-passive-background-color)}.nav-toggle:focus-visible{outline:var(--theme-control-border-width) solid var(--theme-control-emphasis-idle-background-color);outline-offset:var(--primitive-spacing-xxs)}.logo{grid-column:3;grid-row:1;justify-self:center;font-size:var(--theme-typography-body-font-size);font-weight:var(--theme-typography-heading-font-weight);line-height:var(--theme-typography-heading-line-height);color:var(--theme-typography-color-primary);text-transform:uppercase;text-decoration:none;margin:0;white-space:nowrap;letter-spacing:10%}.logo a,.logo a:hover,.logo a:visited,.logo a:focus-visible{color:var(--theme-typography-color-primary);outline:none;text-decoration:none}.logo:focus-visible{outline:var(--theme-control-border-width) solid var(--theme-control-emphasis-idle-background-color);outline-offset:var(--primitive-spacing-xxs);border-radius:var(--theme-surface-border-radius)}.nav-primary{grid-column:4;grid-row:2;justify-self:end;display:flex;gap:var(--nav-gap-primary);align-items:center}.nav-primary a{color:var(--theme-control-passive-color-default);text-decoration:none;font-size:var(--theme-control-passive-font-size);font-weight:var(--theme-control-passive-font-weight);line-height:var(--theme-control-passive-line-height);padding:var(--primitive-spacing-xs) var(--primitive-spacing-sm);border-radius:var(--theme-surface-border-radius);transition:color .2s ease,background-color .2s ease,font-weight .2s ease;white-space:nowrap}.nav-primary a:hover,.nav-primary a:focus-visible{color:var(--theme-typography-color-primary);background-color:var(--theme-surface-passive-background-color);outline:none}.nav-primary a:focus-visible{outline:var(--theme-control-border-width) solid var(--theme-control-emphasis-idle-background-color);outline-offset:var(--primitive-spacing-xxs)}.nav-primary a.active{color:var(--theme-typography-color-primary);font-weight:var(--theme-typography-heading-font-weight);background-color:var(--theme-surface-passive-background-color)}.nav-secondary__item{margin:0;display:contents}.nav-secondary{justify-self:end;display:flex;gap:var(--nav-gap-secondary);align-items:center}.nav-secondary a{color:var(--theme-control-passive-color-default);text-decoration:none;font-size:var(--theme-control-passive-font-size);font-weight:var(--theme-control-passive-font-weight);line-height:var(--theme-control-passive-line-height);padding:var(--primitive-spacing-xs) var(--primitive-spacing-sm);border-radius:var(--theme-surface-border-radius);transition:color .2s ease,background-color .2s ease,font-weight .2s ease;white-space:nowrap}.nav-secondary a:hover,.nav-secondary a:focus-visible{color:var(--theme-typography-color-primary);background-color:var(--theme-surface-passive-background-color);outline:none}.nav-secondary a:focus-visible{outline:var(--theme-control-border-width) solid var(--theme-control-emphasis-idle-background-color);outline-offset:var(--primitive-spacing-xxs)}.nav-secondary a.active{color:var(--theme-typography-color-primary);font-weight:var(--theme-typography-heading-font-weight);background-color:var(--theme-surface-passive-background-color)}.content-filter{display:flex;flex-wrap:wrap;gap:var(--nav-gap-secondary);align-items:center;margin-bottom:var(--primitive-spacing-lg)}.content-filter__button{color:var(--theme-control-passive-color-default);text-decoration:none;font-size:var(--theme-typography-caption-font-size);font-weight:var(--theme-typography-caption-font-weight);line-height:var(--theme-typography-caption-line-height);padding:var(--primitive-spacing-xs) var(--primitive-spacing-sm);border-radius:var(--theme-surface-border-radius);border:none;background:none;cursor:pointer;font-family:inherit;transition:color .2s ease,background-color .2s ease,font-weight .2s ease;white-space:nowrap}.content-filter__button:hover,.content-filter__button:focus-visible{color:var(--theme-control-emphasis-idle-text-color);background-color:var(--theme-control-emphasis-engaged-background-color);outline:none}.content-filter__button:focus-visible{outline:var(--theme-control-border-width) solid var(--theme-control-emphasis-idle-background-color);outline-offset:var(--primitive-spacing-xxs)}.content-filter__button.active,.content-filter__button.active:hover,.content-filter__button.active:focus-visible{color:var(--theme-control-emphasis-idle-text-color);font-weight:var(--theme-typography-heading-font-weight);background-color:var(--theme-control-emphasis-idle-background-color)}.project-list{display:flex;flex-direction:column;gap:var(--primitive-spacing-xl);list-style:none;margin:0;padding:0}.project-card{background-color:var(--theme-surface-passive-background-color);border-radius:var(--theme-surface-border-radius);overflow:hidden}.project-list[data-filtered] .project-card{background-color:var(--theme-surface-emphasis-background-color)}.project-card__header{display:flex;flex-direction:column;gap:var(--primitive-spacing-xs);width:100%;padding:var(--primitive-spacing-md);color:inherit;font-family:inherit;text-align:left}.project-card__title,.project-card__meta{margin:0}.project-card__details{display:flex;flex-direction:column;gap:var(--primitive-spacing-md);padding:0 var(--primitive-spacing-md) var(--primitive-spacing-md)}.project-card__summary{margin:0}.project-card__tags-heading{margin:0;text-transform:uppercase;letter-spacing:.05em}.project-tags{display:flex;flex-wrap:wrap;gap:var(--primitive-spacing-xs);margin:0;padding:0;list-style:none}.project-tag{font-size:var(--theme-typography-caption-font-size);font-weight:var(--theme-typography-caption-font-weight);line-height:var(--theme-typography-caption-line-height);color:var(--theme-typography-color-secondary);padding:var(--primitive-spacing-xs) var(--primitive-spacing-sm);border-radius:var(--theme-surface-border-radius);border:var(--theme-surface-separator-width) solid var(--theme-surface-separator-color);background-color:var(--theme-surface-passive-background-color)}.project-list[data-filtered] .project-tag{background-color:var(--theme-surface-emphasis-background-color)}.project-section__rule{border:none;border-top:var(--theme-surface-separator-width) solid var(--theme-surface-separator-color);margin:0;padding:0}.project-card__endorsements{display:flex;flex-direction:column;gap:var(--primitive-spacing-md)}.resume-page{display:flex;flex-direction:column;gap:var(--primitive-spacing-2xl)}.resume-placeholder{font-size:var(--theme-typography-body-font-size);color:var(--theme-typography-color-secondary);margin:0}.resume-header{display:flex;flex-direction:column;gap:var(--primitive-spacing-xs);margin-bottom:var(--primitive-spacing-2xl)}.resume-header__contact{display:flex;flex-wrap:wrap;gap:var(--primitive-spacing-sm);margin-top:var(--primitive-spacing-xs)}.resume-header__link{font-size:var(--theme-typography-caption-font-size);font-weight:var(--theme-typography-caption-font-weight);line-height:var(--theme-typography-caption-line-height)}.resume-section{display:flex;flex-direction:column;gap:var(--primitive-spacing-md)}.resume-section__title{margin:0 0 var(--primitive-spacing-sm) 0;padding-bottom:var(--primitive-spacing-xs);border-bottom:var(--theme-surface-separator-width) solid var(--theme-surface-separator-color)}.resume-competencies{display:flex;flex-wrap:wrap;gap:var(--primitive-spacing-xs);margin:0;padding-left:var(--primitive-spacing-lg)}.resume-competencies li{list-style-position:inside}.experience-list{display:flex;flex-direction:column;gap:var(--primitive-spacing-xl);margin:0;padding:0;list-style:none}.experience-entry{display:flex;flex-direction:column;gap:var(--primitive-spacing-md);padding:var(--primitive-spacing-md);background-color:var(--theme-surface-passive-background-color);border-radius:var(--theme-surface-border-radius)}.experience-entry__header{display:flex;flex-direction:column;gap:var(--primitive-spacing-xs)}.experience-entry__title,.experience-entry__meta,.experience-entry__date,.experience-entry__overview{margin:0}.experience-entry__list{margin:0;padding-left:var(--primitive-spacing-lg)}.experience-entry__list li{margin-bottom:var(--primitive-spacing-xs)}.experience-entry__list li:last-child{margin-bottom:0}.resume-list{display:flex;flex-direction:column;gap:var(--primitive-spacing-xl);margin:0;padding:0;list-style:none}.resume-list__item{margin:0}.resume-list__item:not(li){display:flex;flex-direction:column;gap:var(--primitive-spacing-xs)}.resume-list__title,.resume-list__meta{margin:0}.skills-block{display:flex;flex-direction:column;gap:var(--primitive-spacing-xl)}.skills-block__category{display:flex;flex-direction:column;gap:var(--primitive-spacing-xs)}.skills-block__category-title{margin:0;text-transform:uppercase;letter-spacing:.05em}.skills-block__tags{display:flex;flex-wrap:wrap;gap:var(--primitive-spacing-xs);margin:0;padding-left:var(--primitive-spacing-lg);list-style-position:inside}.endorsement{display:flex;flex-direction:column;gap:var(--primitive-spacing-sm);margin:0;padding:var(--primitive-spacing-md) 0 var(--primitive-spacing-md) var(--primitive-spacing-md);border-left:var(--theme-control-border-width) solid var(--theme-surface-separator-color);position:relative}.endorsement:before{content:'"';font-size:var(--theme-typography-title-font-size);font-weight:var(--theme-typography-title-font-weight);line-height:1;color:var(--theme-typography-color-secondary);position:absolute;left:var(--primitive-spacing-md);top:var(--primitive-spacing-md)}.endorsement__avatar{flex-shrink:0;width:48px;height:48px;border-radius:50%;overflow:hidden;background-color:var(--theme-surface-passive-background-color);display:flex;align-items:center;justify-content:center}.endorsement__avatar-img{width:100%;height:100%;object-fit:cover}.endorsement__avatar-initials{font-size:var(--theme-typography-caption-font-size);font-weight:var(--theme-typography-heading-font-weight);color:var(--theme-typography-color-secondary)}.endorsement__meta{display:flex;flex-direction:column;gap:var(--primitive-spacing-xxs);min-width:0}.endorsement__name{font-size:var(--theme-typography-body-font-size);font-weight:var(--theme-typography-heading-font-weight)}.endorsement__headline{font-size:var(--theme-typography-caption-font-size);font-weight:var(--theme-typography-caption-font-weight);line-height:var(--theme-typography-caption-line-height);color:var(--theme-typography-color-secondary);margin:0}.endorsement__relationship{font-size:var(--theme-typography-caption-font-size);font-weight:var(--theme-typography-caption-font-weight);color:var(--theme-typography-color-secondary)}.endorsement__quote-block{margin:0;padding:0}.endorsement__quote{font-size:var(--theme-typography-body-font-size);font-weight:var(--theme-typography-body-font-weight);line-height:var(--theme-typography-body-line-height);font-style:italic;color:var(--theme-typography-body-color);margin:0;padding-left:var(--primitive-spacing-lg)}.endorsement__attribution{font-size:var(--theme-typography-caption-font-size);font-weight:var(--theme-typography-caption-font-weight);line-height:var(--theme-typography-caption-line-height);color:var(--theme-typography-color-secondary);margin:0}.endorsement__tags{display:flex;flex-wrap:wrap;gap:var(--primitive-spacing-xs);margin-top:var(--primitive-spacing-sm)}.endorsement__tag{font-size:var(--theme-typography-caption-font-size);font-weight:var(--theme-typography-caption-font-weight);line-height:var(--theme-typography-caption-line-height);color:var(--theme-typography-color-secondary);padding:var(--primitive-spacing-xs) var(--primitive-spacing-sm);border-radius:var(--theme-surface-border-radius);border:var(--theme-surface-separator-width) solid var(--theme-surface-separator-color);background-color:var(--theme-surface-passive-background-color)}.endorsements-page{display:flex;flex-direction:column;gap:var(--primitive-spacing-2xl)}.endorsements-list{display:flex;flex-direction:column;gap:var(--primitive-spacing-xl)}.endorsement-block{display:flex;flex-direction:column;gap:var(--primitive-spacing-md)}.content-row--hero .col-left,.content-row--hero .col-right{min-height:calc(3 * var(--primitive-spacing-2xl))}.page-hero{display:flex;flex-direction:column;gap:var(--primitive-spacing-lg);flex:1}.col-left .page-hero{justify-content:end;text-align:right}.cs-column,.cs-masonry--mobile{display:flex;flex-direction:column;gap:var(--primitive-spacing-2xl)}.content-row--cs-mobile{display:none}.cs-lead-in{display:flex;flex-direction:column;gap:var(--primitive-spacing-md)}div.cs-lead-in__cover{width:100%;aspect-ratio:1;background:#d9d9d9;border-radius:var(--theme-surface-border-radius)}img.cs-lead-in__cover{width:100%;height:auto;display:block;border-radius:var(--theme-surface-border-radius)}.cs-lead-in__category,.cs-lead-in__meta,.cs-lead-in__excerpt{color:var(--theme-typography-color-secondary)}.case-study-detail-header__title{margin:0;align-self:stretch;text-align:right}.case-study-detail-page{display:flex;flex-direction:column;gap:var(--primitive-spacing-2xl)}.case-study-content>h1:first-child{display:none}.case-study-sidebar{display:flex;flex-direction:column;gap:var(--primitive-spacing-xl);position:sticky;top:var(--primitive-spacing-lg);align-items:flex-end;text-align:right}.case-study-toc__title{margin:0 0 var(--primitive-spacing-xs) 0;text-transform:uppercase;letter-spacing:.05em;text-align:right}.case-study-toc{align-self:stretch;display:none}.case-study-toc__list{margin:0;padding:0;list-style:none}.case-study-toc__item{margin:0}.case-study-toc__item--h3{padding-right:var(--primitive-spacing-md)}.case-study-toc__link{display:block;width:100%;text-align:right;padding:var(--primitive-spacing-xs) 0;border:none;background:none;font-family:inherit;font-size:var(--theme-typography-caption-font-size);font-weight:var(--theme-typography-caption-font-weight);line-height:var(--theme-typography-caption-line-height);color:var(--theme-typography-color-secondary);cursor:pointer;transition:color .2s ease}.case-study-toc__link:hover,.case-study-toc__link:focus-visible{color:var(--theme-typography-color-primary);outline:none}.case-study-toc__link:focus-visible{outline:var(--theme-control-border-width) solid var(--theme-control-emphasis-idle-background-color);outline-offset:var(--primitive-spacing-xxs)}.case-study-sidebar-meta{display:flex;flex-direction:column;gap:var(--primitive-spacing-xs);align-items:flex-end;text-align:right}.case-study-sidebar-meta__date,.case-study-sidebar-meta__read{margin:0}.case-study-content{--case-study-measure: 68ch;text-align:left}.case-study-content h1,.case-study-content h2,.case-study-content h3,.case-study-content h4,.case-study-content h5,.case-study-content h6,.case-study-content p,.case-study-content blockquote,.case-study-content ul,.case-study-content ol{max-width:var(--case-study-measure)}.case-study-content p:has(img){max-width:none}.case-study-content img{max-width:100%;height:auto;display:block}.case-study-content h1{font-size:var(--theme-typography-title-font-size);font-weight:var(--theme-typography-title-font-weight);line-height:var(--theme-typography-title-line-height);color:var(--theme-typography-title-color);margin:0}.case-study-content h2{font-size:var(--theme-typography-title-font-size);font-weight:var(--theme-typography-title-font-weight);line-height:var(--theme-typography-title-line-height);color:var(--theme-typography-title-color);margin:var(--primitive-spacing-xl) 0 0 0}.case-study-content h2:first-child{margin-top:0}.case-study-content h3{font-size:var(--theme-typography-heading-font-size);font-weight:var(--theme-typography-heading-font-weight);line-height:var(--theme-typography-heading-line-height);color:var(--theme-typography-heading-color);margin:var(--primitive-spacing-lg) 0 0 0}.case-study-content h3:first-child{margin-top:0}.case-study-content h4,.case-study-content h5,.case-study-content h6{font-size:var(--theme-typography-body-font-size);font-weight:var(--theme-typography-heading-font-weight);line-height:var(--theme-typography-body-line-height);color:var(--theme-typography-heading-color);margin:var(--primitive-spacing-md) 0 0 0;text-transform:uppercase;letter-spacing:.05em}.case-study-content h4:first-child,.case-study-content h5:first-child,.case-study-content h6:first-child{margin-top:0}.case-study-content p,.case-study-content li,.case-study-content blockquote{font-size:var(--theme-typography-body-font-size);font-weight:var(--theme-typography-body-font-weight);line-height:var(--theme-typography-body-line-height);color:var(--theme-typography-body-color);margin:0}.case-study-content blockquote{padding-left:var(--primitive-spacing-lg);border-left:var(--theme-surface-separator-width) solid var(--theme-surface-separator-color)}.case-study-content ul,.case-study-content ol{padding-left:var(--primitive-spacing-lg)}.case-study-content li{margin-bottom:var(--primitive-spacing-xs)}.case-study-content li:last-child{margin-bottom:0}.case-study-content pre,.case-study-content code{font-size:var(--theme-typography-caption-font-size);font-weight:var(--theme-typography-body-font-weight);line-height:var(--theme-typography-body-line-height);color:var(--theme-typography-color-primary);font-family:ui-monospace,monospace;text-align:left}.case-study-content code{padding:.15em .35em;background-color:var(--theme-surface-emphasis-background-color);border-radius:var(--theme-surface-border-radius)}.case-study-content pre{margin:0;padding:var(--primitive-spacing-md);background-color:var(--theme-surface-emphasis-background-color);border-radius:var(--theme-surface-border-radius);overflow-x:auto}.case-study-content pre code{padding:0;background:none}.music-intro h1{margin-bottom:var(--primitive-spacing-lg)}.music-intro p{margin-bottom:0}.release-info__header{display:flex;flex-direction:column;gap:var(--primitive-spacing-xs);margin-bottom:var(--primitive-spacing-md)}.release-info__title{margin:0}.release-info__body{display:flex;flex-direction:column;gap:var(--primitive-spacing-md)}.release-info__description{margin:0}.release-info__section-heading{margin:0;text-transform:uppercase;letter-spacing:.05em}.release-info__tracklist-section{display:flex;flex-direction:column;gap:var(--primitive-spacing-xs)}.release-info__tracklist-toggle{display:flex;align-items:center;justify-content:space-between;gap:var(--primitive-spacing-sm);width:100%;padding:0;border:none;background:none;font-family:inherit;font-size:var(--theme-typography-caption-font-size);font-weight:var(--theme-typography-caption-font-weight);line-height:var(--theme-typography-caption-line-height);color:var(--theme-typography-color-secondary);text-transform:uppercase;letter-spacing:.05em;cursor:pointer;text-align:left;transition:color .2s ease}.release-info__tracklist-toggle:hover,.release-info__tracklist-toggle:focus-visible{color:var(--theme-typography-color-primary);outline:none}.release-info__tracklist-toggle:focus-visible{outline:var(--theme-control-border-width) solid var(--theme-control-emphasis-idle-background-color);outline-offset:var(--primitive-spacing-xxs)}.release-info__tracklist-toggle-icon{flex-shrink:0;font-size:1.2em;line-height:1}.release-info__credits-section{display:flex;flex-direction:column;gap:var(--primitive-spacing-xs)}.release-info__credits-toggle{display:flex;align-items:center;justify-content:space-between;gap:var(--primitive-spacing-sm);width:100%;padding:0;border:none;background:none;font-family:inherit;font-size:var(--theme-typography-caption-font-size);font-weight:var(--theme-typography-caption-font-weight);line-height:var(--theme-typography-caption-line-height);color:var(--theme-typography-color-secondary);text-transform:uppercase;letter-spacing:.05em;cursor:pointer;text-align:left;transition:color .2s ease}.release-info__credits-toggle:hover,.release-info__credits-toggle:focus-visible{color:var(--theme-typography-color-primary);outline:none}.release-info__credits-toggle:focus-visible{outline:var(--theme-control-border-width) solid var(--theme-control-emphasis-idle-background-color);outline-offset:var(--primitive-spacing-xxs)}.release-info__credits-toggle-icon{flex-shrink:0;font-size:1.2em;line-height:1}.release-info__credits[hidden]{display:none}.release-info__credits-text{margin:0}.release-info__tracklist[hidden]{display:none}.release-info__tracklist{display:flex;flex-direction:column;gap:var(--primitive-spacing-xs);list-style:decimal;padding-left:var(--primitive-spacing-lg);margin:0}.release-info__track{display:flex;justify-content:space-between;gap:var(--primitive-spacing-sm);margin:0}.release-info__track-title{flex:1 1 auto;min-width:0}.release-info__track-duration{flex-shrink:0}.release-info__link{display:inline-block;font-size:var(--theme-typography-caption-font-size);font-weight:var(--theme-typography-heading-font-weight);line-height:var(--theme-typography-caption-line-height)}.content-link,.cs-lead-in__title a,.case-study__back,.case-study-content a,.resume-header__link,.release-info__link,a.endorsement__name{color:var(--theme-typography-color-link-default);text-decoration:none;transition:color .2s ease}.content-link:visited,.cs-lead-in__title a:visited,.case-study__back:visited,.case-study-content a:visited,.resume-header__link:visited,.release-info__link:visited,a.endorsement__name:visited{color:var(--theme-typography-color-link-visited)}.content-link:hover,.cs-lead-in__title a:hover,.case-study__back:hover,.case-study-content a:hover,.resume-header__link:hover,.release-info__link:hover,a.endorsement__name:hover{color:var(--theme-typography-color-link-hover)}.content-link:focus-visible,.cs-lead-in__title a:focus-visible,.case-study__back:focus-visible,.case-study-content a:focus-visible,.resume-header__link:focus-visible,.release-info__link:focus-visible,a.endorsement__name:focus-visible{color:var(--theme-typography-color-link-focus);outline:var(--theme-control-border-width) solid var(--theme-control-emphasis-idle-background-color);outline-offset:var(--primitive-spacing-xxs)}.content-link:active,.cs-lead-in__title a:active,.case-study__back:active,.case-study-content a:active,.resume-header__link:active,.release-info__link:active,a.endorsement__name:active{color:var(--theme-typography-color-link-active)}.bandcamp-embed{width:100%;overflow:visible;line-height:0}.bandcamp-embed__iframe{display:block;border:none;width:100%;aspect-ratio:350 / 450;line-height:normal}.bandcamp-embed--track .bandcamp-embed__iframe{aspect-ratio:350 / 450}.left,.right{min-height:0}.left img,.right img{max-width:100%;height:auto;display:block}h1{font-size:var(--theme-typography-title-font-size);font-weight:var(--theme-typography-title-font-weight);line-height:var(--theme-typography-title-line-height);color:var(--theme-typography-title-color);margin:0 0 var(--primitive-spacing-lg) 0}h2{font-size:var(--theme-typography-heading-font-size);font-weight:var(--theme-typography-heading-font-weight);line-height:var(--theme-typography-heading-line-height);color:var(--theme-typography-heading-color);margin:0 0 var(--primitive-spacing-md) 0}p{font-size:var(--theme-typography-body-font-size);font-weight:var(--theme-typography-body-font-weight);line-height:var(--theme-typography-body-line-height);color:var(--theme-typography-body-color);margin:0 0 var(--primitive-spacing-md) 0}p:last-child{margin-bottom:0}.text-hero{font-size:var(--theme-typography-hero-font-size);font-weight:var(--theme-typography-hero-font-weight);line-height:var(--theme-typography-hero-line-height);color:var(--theme-typography-hero-color);margin:0 0 var(--primitive-spacing-lg) 0}.text-title{font-size:var(--theme-typography-title-font-size);font-weight:var(--theme-typography-title-font-weight);line-height:var(--theme-typography-title-line-height);color:var(--theme-typography-title-color);margin:0}.text-heading,.text-intro{font-size:var(--theme-typography-heading-font-size);font-weight:var(--theme-typography-heading-font-weight);line-height:var(--theme-typography-heading-line-height);color:var(--theme-typography-heading-color);margin:0}.text-body{font-size:var(--theme-typography-body-font-size);font-weight:var(--theme-typography-body-font-weight);line-height:var(--theme-typography-body-line-height);color:var(--theme-typography-body-color);margin:0}.text-caption{font-size:var(--theme-typography-caption-font-size);font-weight:var(--theme-typography-caption-font-weight);line-height:var(--theme-typography-caption-line-height);color:var(--theme-typography-color-secondary);margin:0}.text-body-emphasis{font-weight:var(--theme-typography-heading-font-weight)}.content-section{display:flex;flex-direction:column;gap:var(--primitive-spacing-md)}.content-section__title{padding-bottom:var(--primitive-spacing-xs);border-bottom:var(--theme-surface-separator-width) solid var(--theme-surface-separator-color);margin:0 0 var(--primitive-spacing-sm) 0}.content-entry{display:flex;flex-direction:column;gap:var(--primitive-spacing-md);padding:var(--primitive-spacing-md);background-color:var(--theme-surface-passive-background-color);border-radius:var(--theme-surface-border-radius)}.content-entry__header{display:flex;flex-direction:column;gap:var(--primitive-spacing-xs)}.content-meta{margin:0}.content-list{margin:0;padding-left:var(--primitive-spacing-lg)}.content-list li{margin-bottom:var(--primitive-spacing-xs)}.content-list li:last-child{margin-bottom:0}.cta-primary{display:inline-flex;align-items:center;justify-content:center;padding:var(--primitive-spacing-sm) var(--primitive-spacing-md);border-radius:var(--theme-control-border-radius);background-color:var(--theme-control-emphasis-idle-background-color);color:var(--theme-control-emphasis-idle-text-color);text-decoration:none;font-size:var(--theme-control-emphasis-font-size);font-weight:var(--theme-control-emphasis-font-weight);line-height:var(--theme-control-emphasis-line-height)}.cta-primary:hover,.cta-primary:focus-visible{background-color:var(--theme-control-emphasis-engaged-background-color);color:var(--theme-control-emphasis-idle-text-color);outline:none}.cta-primary:focus-visible{outline:var(--theme-control-border-width) solid var(--theme-control-emphasis-idle-background-color);outline-offset:var(--primitive-spacing-xxs)}.home-banner{margin-bottom:var(--primitive-spacing-md)}.home-banner img{width:100%;height:320px;object-fit:cover;display:block}@media (min-width: 901px){.home-banner img{height:400px}}.featured-header{display:flex;flex-direction:column;gap:var(--primitive-spacing-sm);padding-top:var(--primitive-spacing-lg)}.featured-separator{height:1px;background-color:var(--theme-typography-color-secondary);opacity:.25}@media (max-width: 900px){.page{grid-template-columns:1fr;grid-template-rows:auto auto auto;row-gap:0;padding:0}.page-header{grid-row:1;grid-template-columns:minmax(var(--mobile-gutter-min),1fr) minmax(0,var(--mobile-max)) minmax(var(--mobile-gutter-min),1fr);grid-template-rows:auto;row-gap:0;padding:var(--primitive-spacing-md) 0}.page-header .masthead{grid-column:2;grid-row:1;display:flex;flex-direction:row;flex-wrap:nowrap;align-items:flex-start;justify-content:space-between;gap:var(--primitive-spacing-sm)}.page-header .masthead-nav-group{display:flex;flex-direction:row;align-items:flex-start;gap:var(--primitive-spacing-sm);flex-shrink:0}.page-header .logo{grid-column:auto;grid-row:auto;justify-self:start;flex-shrink:1;min-width:0;display:flex;align-items:center;min-height:calc(var(--primitive-spacing-lg) + 2 * var(--primitive-spacing-xs))}.page-header .nav-toggle{grid-column:auto;grid-row:auto;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.page-header .nav-primary{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-start;flex-wrap:nowrap;gap:var(--primitive-spacing-lg);margin:0;padding:0}.page-header .nav-primary:not(:has(.active)){display:none}.page[data-nav-open=true] .page-header .nav-primary{display:flex}.page-header .nav-primary a:not(.active){display:none}.page[data-nav-open=true] .page-header .nav-primary a:not(.active){display:block}.page-header .nav-primary a{background-color:transparent;font-size:var(--theme-control-passive-font-size);font-weight:var(--theme-control-passive-font-weight);line-height:var(--theme-control-passive-line-height);color:var(--theme-typography-color-secondary)}.page-header .nav-primary a:hover,.page-header .nav-primary a:focus-visible{color:var(--theme-typography-color-primary);background-color:var(--theme-surface-passive-background-color)}.page-header .nav-primary a.active{color:var(--theme-typography-color-primary);font-weight:var(--theme-typography-heading-font-weight);background-color:var(--theme-surface-passive-background-color)}.page-content{grid-row:2;grid-template-columns:minmax(var(--mobile-gutter-min),1fr) minmax(0,var(--mobile-max)) minmax(var(--mobile-gutter-min),1fr);grid-template-rows:auto auto auto;row-gap:var(--primitive-spacing-md);padding:var(--primitive-spacing-md) 0}.page-content .nav-secondary{grid-column:2;grid-row:1;justify-self:stretch;flex-wrap:wrap;justify-content:flex-end}.page-content .left{grid-column:2;grid-row:2;justify-self:stretch}.page-content .left:has(.portfolio-page),.page-content .left:has(.resume-page),.page-content .left:has(.case-studies-page),.page-content .left:has(.case-study-detail-page){grid-column:2}.page-content .right{grid-column:2;grid-row:3;justify-self:stretch;margin-top:var(--primitive-spacing-md)}.page-content .content-grid{grid-column:2;grid-row:2;display:flex;flex-direction:column;gap:var(--primitive-spacing-2xl);min-height:min-content}.page>.page-footer{grid-column:1;grid-row:3;padding-left:var(--mobile-gutter-min);padding-right:var(--mobile-gutter-min)}.content-row{display:flex;flex-direction:column;gap:var(--primitive-spacing-md)}.content-row .col-left,.content-row .col-right,.content-row .col-span{grid-column:unset;grid-row:unset}.case-study-sidebar{position:static;padding-top:var(--primitive-spacing-xl);border-top:var(--theme-surface-separator-width) solid var(--theme-surface-separator-color)}.case-study-toc,.content-row--cs-desktop{display:none}.content-row--cs-mobile{display:flex}}
