html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:"";content:none}table{border-collapse:collapse;border-spacing:0}:root{--default-text-strong:oklch(0.000 0.000 0.0);--default-text:oklch(0.215 0.002 17.3);--default-text-medium:oklch(0.321 0.000 0.0);--default-text-weak:oklch(0.464 0.000 0.0);--default-text-strong-inverse:oklch(1.000 0.000 0.0);--default-text-inverse:oklch(0.923 0.001 17.2);--default-text-medium-inverse:oklch(0.680 0.005 17.3);--default-text-weak-inverse:oklch(0.719 0.000 0.0);--default-surface:oklch(1.000 0.000 0.0);--default-surface-secondary:oklch(0.000 0.000 0.0);--default-surface-medium:oklch(0.923 0.001 17.2);--default-surface-weak:oklch(0.949 0.000 0.0);--default-surface-strong-inverse:oklch(0.923 0.001 17.2);--default-surface-inverse:oklch(0.248 0.000 0.0);--default-surface-medium-inverse:oklch(0.000 0.000 0.0);--default-surface-weak-inverse:oklch(0.215 0.002 17.3);--default-border:oklch(0.538 0.000 0.0);--default-border-weak:oklch(0.851 0.000 0.0);--default-border-strong:oklch(0.215 0.002 17.3);--default-border-inverse:oklch(1.000 0.000 0.0);--default-border-weak-inverse:oklch(0.000 0.000 0.0);--default-border-strong-inverse:oklch(0.000 0.000 0.0);--default-background:oklch(1.000 0.000 0.0);--default-background-strong:oklch(0.923 0.001 17.2);--default-background-weak:oklch(0.962 0.001 17.2);--default-background-inverse:oklch(0.000 0.000 0.0);--default-background-strong-inverse:oklch(0.000 0.000 0.0);--default-background-weak-inverse:oklch(0.215 0.002 17.3);--action-background:oklch(0.546 0.147 146.3);--action-background-hover:oklch(0.000 0.000 0.0);--action-background-active:oklch(0.000 0.000 0.0);--action-background-hover-inverse:oklch(1.000 0.000 0.0);--action-background-weak-hover:var(--default-surface-weak);--action-link:oklch(0.397 0.127 144.4);--action-link-hover:oklch(0.397 0.127 144.4);--action-link-visited:oklch(0.397 0.127 144.4);--action-link-inverse:oklch(1.000 0.000 0.0);--action-link-inverse-hover:oklch(1.000 0.000 0.0);--action-link-inverse-visited:oklch(1.000 0.000 0.0);--action-text-strong:oklch(0.000 0.000 0.0);--action-text:oklch(1.000 0.000 0.0);--action-text-medium:oklch(0.000 0.000 0.0);--action-text-weak:oklch(0.000 0.000 0.0);--action-text-inverse:oklch(0.546 0.147 146.3);--action-border:oklch(0.546 0.147 146.3);--action-border-weak:oklch(0.877 0.092 149.3);--success-text:oklch(0.478 0.127 146.5);--success-background:oklch(0.890 0.084 150.4);--warning-text:oklch(0.501 0.135 48.8);--warning-background:oklch(0.940 0.038 61.0);--danger-text:oklch(0.439 0.180 29.2);--danger-background:oklch(0.815 0.104 19.6)}html[data-theme=light]{--default-text-strong:oklch(0.000 0.000 0.0);--default-text:oklch(0.215 0.002 17.3);--default-text-medium:oklch(0.321 0.000 0.0);--default-text-weak:oklch(0.464 0.000 0.0);--default-text-strong-inverse:oklch(1.000 0.000 0.0);--default-text-inverse:oklch(0.923 0.001 17.2);--default-text-medium-inverse:oklch(0.680 0.005 17.3);--default-text-weak-inverse:oklch(0.719 0.000 0.0);--default-surface:oklch(1.000 0.000 0.0);--default-surface-secondary:oklch(0.000 0.000 0.0);--default-surface-medium:oklch(0.923 0.001 17.2);--default-surface-weak:oklch(0.949 0.000 0.0);--default-surface-strong-inverse:oklch(0.923 0.001 17.2);--default-surface-inverse:oklch(0.248 0.000 0.0);--default-surface-medium-inverse:oklch(0.000 0.000 0.0);--default-surface-weak-inverse:oklch(0.215 0.002 17.3);--default-border:oklch(0.538 0.000 0.0);--default-border-weak:oklch(0.851 0.000 0.0);--default-border-strong:oklch(0.215 0.002 17.3);--default-border-inverse:oklch(1.000 0.000 0.0);--default-border-weak-inverse:oklch(0.000 0.000 0.0);--default-border-strong-inverse:oklch(0.000 0.000 0.0);--default-background:oklch(1.000 0.000 0.0);--default-background-strong:oklch(0.923 0.001 17.2);--default-background-weak:oklch(0.962 0.001 17.2);--default-background-inverse:oklch(0.000 0.000 0.0);--default-background-strong-inverse:oklch(0.000 0.000 0.0);--default-background-weak-inverse:oklch(0.215 0.002 17.3);--action-background:oklch(0.546 0.147 146.3);--action-background-hover:oklch(0.000 0.000 0.0);--action-background-active:oklch(0.000 0.000 0.0);--action-background-hover-inverse:oklch(1.000 0.000 0.0);--action-background-weak-hover:var(--default-surface-weak);--action-link:oklch(0.397 0.127 144.4);--action-link-hover:oklch(0.397 0.127 144.4);--action-link-visited:oklch(0.397 0.127 144.4);--action-link-inverse:oklch(1.000 0.000 0.0);--action-link-inverse-hover:oklch(1.000 0.000 0.0);--action-link-inverse-visited:oklch(1.000 0.000 0.0);--action-text-strong:oklch(0.000 0.000 0.0);--action-text:oklch(1.000 0.000 0.0);--action-text-medium:oklch(0.000 0.000 0.0);--action-text-weak:oklch(0.000 0.000 0.0);--action-text-inverse:oklch(0.546 0.147 146.3);--action-border:oklch(0.546 0.147 146.3);--action-border-weak:oklch(0.877 0.092 149.3);--success-text:oklch(0.478 0.127 146.5);--success-background:oklch(0.890 0.084 150.4);--warning-text:oklch(0.501 0.135 48.8);--warning-background:oklch(0.940 0.038 61.0);--danger-text:oklch(0.439 0.180 29.2);--danger-background:oklch(0.815 0.104 19.6)}@media(prefers-color-scheme:dark){:root{--default-text-strong:oklch(1.000 0.000 0.0);--default-text:oklch(0.864 0.000 0.0);--default-text-medium:oklch(0.845 0.000 0.0);--default-text-weak:oklch(0.811 0.000 0.0);--default-surface:oklch(0.321 0.000 0.0);--default-surface-weak:oklch(0.366 0.003 17.3);--default-border:oklch(0.798 0.000 0.0);--default-border-weak:oklch(0.538 0.000 0.0);--default-border-strong:oklch(1.000 0.000 0.0);--default-background:oklch(0.321 0.000 0.0);--default-background-weak:oklch(0.366 0.003 17.3);--action-link:oklch(88% 0.09 230);--action-link-hover:oklch(88% 0.09 262);--action-link-visited:oklch(88% 0.09 294);--action-text-inverse:oklch(88% 0.09 230);--action-border:oklch(0.546 0.147 146.3);--action-border-weak:oklch(0.815 0.055 254.5);--success-text:oklch(0.870 0.073 148.5);--success-text-strong:oklch(0.383 0.116 144.4);--success-background:oklch(0.329 0.082 146.9);--warning-text:oklch(0.880 0.079 60.3);--warning-text-strong:oklch(0.434 0.123 45.6);--warning-background:oklch(0.335 0.086 52.1);--danger-text:oklch(0.389 0.134 26.1);--danger-text-strong:oklch(0.799 0.081 19.0);--danger-background:oklch(0.815 0.104 19.6)}}html[data-theme=dark]{--default-text-strong:oklch(1.000 0.000 0.0);--default-text:oklch(0.864 0.000 0.0);--default-text-medium:oklch(0.845 0.000 0.0);--default-text-weak:oklch(0.811 0.000 0.0);--default-surface:oklch(0.321 0.000 0.0);--default-surface-weak:oklch(0.366 0.003 17.3);--default-border:oklch(0.798 0.000 0.0);--default-border-weak:oklch(0.538 0.000 0.0);--default-border-strong:oklch(1.000 0.000 0.0);--default-background:oklch(0.321 0.000 0.0);--default-background-weak:oklch(0.366 0.003 17.3);--action-link:oklch(88% 0.09 230);--action-link-hover:oklch(88% 0.09 262);--action-link-visited:oklch(88% 0.09 294);--action-text-inverse:oklch(88% 0.09 230);--action-border:oklch(0.546 0.147 146.3);--action-border-weak:oklch(0.815 0.055 254.5);--success-text:oklch(0.870 0.073 148.5);--success-text-strong:oklch(0.383 0.116 144.4);--success-background:oklch(0.329 0.082 146.9);--warning-text:oklch(0.880 0.079 60.3);--warning-text-strong:oklch(0.434 0.123 45.6);--warning-background:oklch(0.335 0.086 52.1);--danger-text:oklch(0.389 0.134 26.1);--danger-text-strong:oklch(0.799 0.081 19.0);--danger-background:oklch(0.815 0.104 19.6)}:root{--color-christmas:oklch(0.592 0.233 27.0);--color-neon:oklch(0.543 0.133 244.9);--color-social-twitter:oklch(0.543 0.133 244.9);--color-social-micro:oklch(0.770 0.166 62.7);--color-social-mastodon:oklch(0.593 0.224 276.8);--light:0.81;--color-rating-good:oklch(0.442 0.150 142.5);--color-rating-ok:oklch(0.818 0.178 109.8);--color-rating-bad:oklch(0.398 0.163 29.2);--font-body:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans,
      Ubuntu, Cantarell, "Helvetica Neue", sans-serif;--font-heading:"Montserrat", sans-serif;--global-body-font-size-xxxxlarge:2.625rem;--global-body-font-size-xxxlarge:2.5rem;--global-body-font-size-xxlarge:2rem;--global-body-font-size-xlarge:1.5rem;--global-body-font-size-large:1.125rem;--global-body-font-size:1rem;--global-body-font-size-small:0.875rem;--global-body-font-size-xsmall:0.75rem;--global-body-font-size-micro:0.625rem;--breakpoint-modern:375px;--breakpoint-phablet:504px;--breakpoint-tablet:768px;--breakpoint-desktop:980px;--breakpoint-desktop-plus:1170px;--page-thin:725px;--section-top:40px;--section-bottom:32px;--section-sep:40px;--page-top:16px;--page-bottom:56px;--global-header-height:64px;--grid-gutter:16px;--border-radius-clickable:6px;--text-color-code:oklch(0.398 0.163 29.2)}@font-face{font-family:montserrat;font-style:normal;font-weight:400;src:url(../fonts/montserrat-v10-latin-regular.woff2)format("woff2");font-display:swap}@font-face{font-family:montserrat;font-style:normal;font-weight:600;src:url(../fonts/montserrat-v10-latin-600.woff2)format("woff2");font-display:swap}@font-face{font-family:montserrat;font-style:normal;font-weight:700;src:url(../fonts/montserrat-v10-latin-700.woff2)format("woff2");font-display:swap}@font-face{font-family:montserrat;font-style:normal;font-weight:200;src:url(../fonts/montserrat-v15-latin-200.woff2)format("woff2");font-display:swap}p{max-width:var(--page-thin)}p:not(:last-child){margin-bottom:16px}.fonts-loaded h1,.fonts-loaded h2,.fonts-loaded h3,.fonts-loaded h4,.fonts-loaded h5,.fonts-loaded h6{font-family:var(--font-heading)}figure{display:block;min-width:100%}figure.thumb{max-width:25%;float:left;margin:0 24px 8px 0}.article__content>figure.thumb:not(:last-child){margin:0 24px 8px 0}figure.large{max-width:75%;margin:0 auto;display:block}html{box-sizing:border-box}.no-scroll{position:fixed}*,*::after,*::before{box-sizing:inherit}a{color:var(--action-link);transition:color .2s ease,text-decoration .2s ease}a:hover{color:var(--action-link-hover)}a:visited{color:var(--action-link-visited)}img{max-width:100%;height:auto}body{font-family:var(--font-body);font-size:var(--global-body-font-size);font-weight:400;line-height:1.4;color:var(--default-text);background-color:var(--default-surface)}.menu-open{pointer-events:none;overflow:hidden}.logo--afterhours{fill:#fff;filter:drop-shadow(0 0 5px var(--color-neon));transform:rotate(-15deg)}.highlight{font-size:var(--global-body-font-size-small)}p:empty{display:none}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}code{max-width:85vw}body{display:flex;flex-direction:column;width:100%;min-height:100vh}body[data-reg-document-modal=active]{position:fixed}.global-header,.global-footer{flex:none}main{display:block;flex:1 0 auto}.container{max-width:980px;margin:0 auto;padding:32px 16px}@media all and (min-width:980px){.container{padding:32px 0}}.container--home{padding:0;max-width:none}.container--aside{display:grid;gap:60px;grid-template-areas:"main" "aside"}@media all and (min-width:768px){.container--aside{grid-template-columns:2fr 1fr;grid-template-areas:"main aside"}}.container--apps{display:grid;grid-template-columns:repeat(auto-fit,minmax(80px,168px));grid-gap:60px 24px}.bb-concerts-articles{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));grid-gap:60px 32px}.page-header__title{margin-bottom:8px}.page-header__desc{margin-bottom:16px}@media all and (min-width:980px){.aside{grid-column:2/3}}.aside{grid-row:1;margin-top:48px;display:grid;grid-gap:24px;grid-template-rows:min-content}@media all and (min-width:980px){.aside{margin-top:0}}.badge{font-family:var(--font-body);font-size:var(--global-body-font-size-xsmall);font-weight:700;text-transform:uppercase;display:flex;flex:0 0 content;padding:.25em .5em;justify-content:center;align-items:center;align-self:baseline;border-radius:2px;gap:4px}.badge svg{width:1em;height:1em}.badge:has(svg){padding:.25em .75em;gap:.5em}.badge.badge--secondary{border:1px solid #000}.badge.badge--success{background-color:var(--success-background);color:var(--success-text)}.badge.badge--success.badge--secondary{background:0 0;border-color:var(--success-text)}.badge.badge--warning{background-color:var(--warning-background);color:var(--warning-text);border:1px solid var(--warning-text)}.badge.badge--warning.badge--secondary{background:0 0;border-color:var(--warning-text)}.article-stub .taglist__tag .badge{margin:0}.taglist__tag:first-child .badge{border-radius:2px 0 0 2px}.taglist__tag:only-child .badge{border-radius:2px}.taglist__tag+.taglist__tag .badge{border-left:none;border-radius:0 2px 2px 0}.bb-button,.bb-ratings__sort button{-webkit-appearance:none;appearance:none;background:0 0;border:0;border-radius:.5em;font-size:var(--global-body-font-size);display:inline-flex;justify-content:center;align-items:center;padding:.75em 2em;transition:background-color .25s ease;background-color:var(--action-background);color:var(--action-text);width:100%;text-decoration:none;min-height:2.5em;max-width:478px}@media all and (min-width:768px){.bb-button,.bb-ratings__sort button{width:min-content}}.bb-button:hover,.bb-ratings__sort button:hover{background-color:var(--action-background-hover)}.bb-ratings__sort button{min-height:1.25em;font-size:var(--global-body-font-size-xsmall);font-weight:500;padding:.5em 1em;white-space:nowrap}.bb-showmodal{font-weight:600;font-size:1em;appearance:none;background:0 0;border:0;color:var(--action-text-inverse);display:flex;align-items:center;gap:.5em;height:2.5em;padding:0 1em;border-radius:4px}.bb-showmodal svg{width:1em;height:1em;stroke:currentColor}.bb-showmodal:hover{background-color:var(--action-background-weak-hover)}.bb-button--link{appearance:none;-webkit-appearance:none;border:0;background:0 0;font:inherit;padding:0;text-decoration:underline;color:inherit;margin:0;cursor:pointer}body:has(.bb-dialog:not([aria-hidden=true])){overflow:hidden}.bb-dialog,.bb-dialog__overlay{position:fixed;top:0;right:0;bottom:0;left:0}.bb-dialog{z-index:2;display:flex}.bb-dialog[aria-hidden=true]{display:none}.bb-dialog__overlay{background-color:hsla(0,0%,0%,.65)}.bb-dialog__wrapper{margin:auto;z-index:2;position:relative;background-color:var(--default-surface-weak);padding:3em 1.5em 1.5em;color:var(--default-text);border-radius:1em;overflow:hidden;max-width:90vw;max-height:80vh}.bb-dialog__wrapper ul+h2{margin-top:24px}.bb-dialog__content{padding:0 24px 32px;overflow:auto;max-height:30em;scrollbar-color:var(--default-text)var(--default-surface-weak);scrollbar-width:thin}.bb-dialog__content h2{font-size:var(--global-body-font-size-large);line-height:1.25;font-weight:700}@media all and (min-width:980px){.bb-dialog__content h2{font-size:var(--global-body-font-size-xlarge);line-height:1.5}}@media all and (min-width:980px){.bb-dialog__content h2{font-size:var(--global-body-font-size);font-weight:700;line-height:1.25}}@media all and (min-width:980px) and (min-width:980px){.bb-dialog__content h2{font-size:var(--global-body-font-size-large);line-height:1.1}}.bb-dialog__content h3{font-size:var(--global-body-font-size);font-weight:700;line-height:1.25}@media all and (min-width:980px){.bb-dialog__content h3{font-size:var(--global-body-font-size-large);line-height:1.1}}.bb-dialog__content ::-webkit-scrollbar-track{background-color:var(--default-surface-weak)}.bb-dialog__content ::-webkit-scrollbar{width:.35em}.bb-dialog__content ::-webkit-scrollbar-track{box-shadow:inset 0 0 4px var(--default-surface-weak)}.bb-dialog__content ::-webkit-scrollbar-thumb{background-color:var(--default-text);border-radius:2px}.bb-dialog__title{font-size:var(--global-body-font-size-xlarge);line-height:1.25;font-weight:700}@media all and (min-width:980px){.bb-dialog__title{font-size:var(--global-body-font-size-xxxlarge)}}@media all and (min-width:980px){.bb-dialog__title{font-size:var(--global-body-font-size-large);line-height:1.25;font-weight:700}}@media all and (min-width:980px) and (min-width:980px){.bb-dialog__title{font-size:var(--global-body-font-size-xlarge);line-height:1.5}}.bb-dialog__close{position:absolute;right:0;top:0;-webkit-appearance:none;appearance:none;width:40px;height:40px;display:flex;justify-content:center;align-items:center;border:0;background:0 0;padding:0}.bb-dialog__close svg{width:20px;height:20px;stroke:var(--default-text)}.bb-dialog__close:hover{background-color:var(--action-background-hover)}.bb-dialog__close:hover svg{stroke:var(--default-text-inverse)}.section{max-width:980px;margin:0 auto;padding:0 16px;width:100%}@media all and (min-width:1186px){.section{padding:0}}.section+.section{margin-top:var(--section-sep)}.section:last-child{margin-bottom:var(--section-bottom)}.intro--home+.home-work{margin-top:0}.section-wrapper{max-width:980px;margin:0 auto;padding:0}@media all and (min-width:980px){.section-wrapper{display:grid;grid-gap:40px;grid-template-columns:3fr 1fr}}.section--full{max-width:none;padding:var(--section-top)0 var(--section-bottom);background-color:var(--default-surface-weak)}main>.section--full{margin:0}.section--full:last-child{margin-bottom:0;padding-bottom:0}.section--full:last-child .section__container{padding-bottom:var(--section-bottom)}.section--full+.section--full{margin-top:0}.section__container{padding:0 16px;max-width:980px;margin:0 auto;width:100%}@media only screen and (max-device-width:504px) and (orientation:landscape){.section__container{padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}}@media all and (min-width:1186px){.section__container{padding:0}}.intro .section__container{padding:0}.section__title+.section__title--sub{margin-top:16px}.intro--home .section__title+.section__title--sub{margin:0}.section__title--sub a{text-decoration:underline}.section__title+.section__content,.section__title--sub+.section__content,.section__header+.section__content{margin-top:32px}.content-article--focus .section__content{max-width:75ch}@media all and (min-width:980px){.content-article--focus .section__content{max-width:35em}}.section__footer{margin-top:24px;font-size:var(--global-body-font-size-xsmall);line-height:1;grid-column:1/3;color:var(--default-text-inverse)}.section__footer a,.section__footer a:visited{color:var(--default-text-inverse);text-decoration:underline}.section--aside .section__header+.section__content{margin-top:24px}.section--aside+.section--aside{margin-top:56px}.global-header{position:sticky;top:-1px;background-color:var(--default-surface);height:64px;display:flex;flex-direction:column;align-items:stretch;transition:height 1s ease,background-position 1s ease;z-index:90}.body-blog .global-header,.body-micro .global-header{background-color:var(--default-surface-weak-inverse);background-image:url(../svg/afterhours-bg.svg);background-repeat:repeat-x;background-size:auto 113px;background-position:50% 8px;height:148px}.body-blog .global-header .global-header__title,.body-micro .global-header .global-header__title{display:none}.body-blog .global-header.is-sticky,.body-micro .global-header.is-sticky{height:80px;background-position:50% -58px}.global-header .container{display:flex;justify-content:space-between;width:100%;padding:0 16px;transition:height 1s ease;position:relative}.is-sticky .global-header .container{height:40px}@media only screen and (max-device-width:504px) and (orientation:landscape){.global-header .container{padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}}@media all and (min-width:768px){.global-header .container{display:flex;justify-content:space-between}}@media all and (min-width:1186px){.global-header .container{padding:0}}.body-blog .global-header .container .body-micro .global-header .container{position:relative;padding:0 16px 80px;transition:padding 1s ease;padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}@media all and (min-width:1186px){.body-blog .global-header .container .body-micro .global-header .container{padding:0 0 80px}}.global-header.is-sticky{height:40px}.body-blog .global-header.is-sticky .container,.body-micro .global-header.is-sticky .container{padding:0 16px 40px}.logo svg{max-width:100%;max-height:100%}.logo .bb-logo-block--left{fill:var(--default-text-weak)}.logo .bb-logo-block--right{fill:var(--default-background)}.logo .bb-logo-block--shadow{fill:var(--default-border)}.hide .logo svg{visibility:hidden}.global-header__logo{height:64px;position:relative;display:flex;align-items:center;text-decoration:none;z-index:200;transition:height 1s ease;gap:12px;width:auto}.is-sticky .global-header__logo{height:40px;gap:8px}.global-header__logo svg{flex:0 0 52px;width:52px;height:52px;transition:transform 1s ease,flex 1s ease;transform:scale3d(1,1,1);transform-origin:left center}.is-sticky .global-header__logo svg{transform:scale3d(.6153846154,.6153846154,.6153846154);transform-origin:left center;flex:0 0 32px}.global-header__title{font-family:var(--font-heading);font-size:var(--global-body-font-size-xlarge);text-transform:uppercase;color:var(--default-text);font-weight:900;transition:font-size 1s ease,margin-left 1s ease}.global-header__title span{color:var(--default-text-weak)}.is-sticky .global-header__title{font-size:var(--global-body-font-size-large)}.global-header__menu{height:64px;display:flex;align-items:center;transition:height 1s ease}.is-sticky .global-header__menu{height:40px}.hidden{display:none}.global-menu__trigger{cursor:pointer;width:auto;padding:0;background:0 0;color:var(--default-text);display:flex;gap:4px;z-index:110}.menu-open .global-menu__trigger{color:var(--default-text-inverse)}.body-blog .global-menu__trigger,.body-micro .global-menu__trigger{color:var(--default-text-inverse)}@media all and (min-width:768px){.global-menu__trigger{display:none}}.global-menu__trigger svg{width:16px;stroke:var(--default-border)}.menu-open .global-menu__trigger svg{stroke:var(--default-text-inverse)}.menu-open.body-blog .global-menu__trigger svg,.menu-open.body-micro .global-menu__trigger svg{stroke:var(--default-border)}.body-blog .global-menu__trigger svg,.body-micro .global-menu__trigger svg{stroke:var(--default-border)}.global-menu__trigger .global-menu__close{display:none}.menu-open .global-menu__trigger .global-menu__close{display:block}.global-menu__trigger .global-menu__hamburger{display:block}.menu-open .global-menu__trigger .global-menu__hamburger{display:none}.menu-open .global-menu__trigger{pointer-events:initial;margin-left:auto}.body-blog.menu-open .global-menu__trigger,.body-micro.menu-open .global-menu__trigger{color:var(--default-text)}.global-menu__trigger:hover{background:0 0}.body-blog .bb-logo-block--left,.body-micro .bb-logo-block--left{fill:none;stroke:var(--default-text-weak);stroke-width:2}.body-blog .bb-logo-block--right,.body-micro .bb-logo-block--right{fill:none;stroke:var(--default-text-medium-inverse);stroke-width:2}@media(prefers-color-scheme:dark){.body-blog .bb-logo-block--right,.body-micro .bb-logo-block--right{fill:none}}.body-blog .bb-logo-block--shadow,.body-micro .bb-logo-block--shadow{fill:none}.body-blog .logo--afterhours,.body-micro .logo--afterhours{width:130px;position:absolute;left:60px;top:20px;opacity:1;transition:opacity .7s ease,top .7s ease;animation:flicker 1s linear}.body-blog .is-sticky .logo--afterhours,.body-micro .is-sticky .logo--afterhours{opacity:0;top:40px}@keyframes flicker{0%,19.999%,22%,62.999%,64%,64.999%,70%,100%{opacity:.99}20%,21.999%,63%,63.999%,65%,69.999%{opacity:.4}}.body-blog .header__title--sub,.body-micro .header__title--sub{color:var(--default-text-weak-inverse);font-size:var(--global-body-font-size-xsmall);font-weight:400;line-height:1;position:absolute;right:118px;top:148px;transform:translateY(-21px)translateZ(0);opacity:1;transition:opacity .7s ease,top .7s ease}@media all and (min-width:768px){.body-blog .header__title--sub,.body-micro .header__title--sub{left:118px}}.body-blog .is-sticky .header__title--sub,.body-micro .is-sticky .header__title--sub{opacity:0;top:168px}.global-menu{display:none;position:fixed;top:0;bottom:0;left:0;right:0;z-index:100;background-color:var(--default-surface-secondary);justify-content:center;align-items:center;flex-direction:column}@media all and (min-width:768px){.global-menu{position:static;display:flex;background-color:initial}}.menu-open .global-menu{pointer-events:initial}.global-menu ul{list-style-type:none;display:flex;flex-direction:column;justify-content:space-between;align-items:center;width:100%;padding:0}@media all and (min-width:768px){.global-menu ul{flex-direction:row}}.global-menu ul li+li{margin-top:0}.global-menu li{width:100%}.global-menu li:not(:last-child){margin-bottom:24px}@media all and (min-width:768px){.global-menu li:not(:last-child){margin:0 24px 0 0}}.global-menu a{font-weight:700;font-size:var(--global-body-font-size-xlarge);display:block;text-align:center;text-decoration:none;transition:font-size 1s ease;color:var(--default-text-inverse)}@media all and (min-width:768px){.global-menu a{font-size:var(--global-body-font-size-large);font-weight:400;color:var(--default-text)}.is-sticky .global-menu a{font-size:var(--global-body-font-size)}}.global-menu a:hover{color:var(--action-link-hover);text-decoration:underline}.fonts-loaded .global-menu{font-family:var(--font-heading)}.active .global-menu,.menu-trigger:checked~.global-menu{display:flex}@media all and (min-width:768px){.body-blog .global-menu,.body-micro .global-menu{background:rgba(0,0,0,.5);padding:.5em 1em;border-radius:6px}}@media all and (min-width:768px){.body-blog .global-menu a,.body-micro .global-menu a{color:var(--action-text)}}.body-blog .global-menu a:hover::after,.body-micro .global-menu a:hover::after{background-color:var(--default-background-inverse)}.global-menu__themer{background:0 0;border:none;font-weight:700;font-size:1.5rem;display:block;text-align:center;width:100%;white-space:nowrap}@media all and (min-width:768px){.global-menu__themer span{display:none}}@media all and (min-width:768px){.global-menu__themer:hover .themer__label-icon{transform:translateY(-3px)scale(1.25)}}html[data-theme=dark] .themer__label{color:var(--default-text-inverse)}html[data-theme=light] .themer__label{color:var(--default-text)}html[data-theme=light] .menu-open .themer__label{color:var(--default-text-inverse)}html[data-theme=dark] .menu-open .themer__label{color:var(--default-text)}@media all and (min-width:768px){html .themer__label-icon{display:inline-block;vertical-align:middle;transform-origin:center center;transition:transform .5s cubic-bezier(.34,1.56,.64,1)}}ol{list-style:decimal}.list--featured{padding-left:0}.list--featured>li{font-weight:600;margin-bottom:16px;list-style:none}.list--featured>li>ul{margin-top:8px}.list--featured li li{font-weight:400}.list--bullet{list-style:disc;padding-left:1.25em}.list--def{display:grid;grid-gap:8px 16px;grid-template-columns:repeat(2,min-content);font-size:var(--global-body-font-size-small)}.list--def dt{font-weight:600;grid-column:1/2}.list--def dt::after{content:":"}.list--def dd{grid-column:2/3}.list--def dd a{text-decoration:underline}.breadcrumbs{display:flex;gap:.5em;font-size:var(--global-body-font-size-xsmall);margin-bottom:1em}.breadcrumbs>li+li::before{content:">";margin-right:.5em;color:var(--default-text-weak)}blockquote{font-size:var(--global-body-font-size-small);font-weight:400;line-height:1.25;border-left:1px solid var(--default-border);padding:4px 0 0 24px}blockquote p,blockquote cite,blockquote ul{font-size:var(--global-body-font-size-small)}blockquote p:not(:last-child),blockquote cite:not(:last-child),blockquote ul:not(:last-child){margin-bottom:16px}blockquote cite{display:inline-block;margin-top:16px}.bb-article__meta p{margin-top:4px;font-size:var(--global-body-font-size-xsmall)}.bb-article__meta a{text-decoration:underline}.intro{width:100%;margin-top:24px;display:grid;grid-gap:24px;align-items:center;padding:16px;min-height:80px}@media only screen and (max-device-width:504px) and (orientation:landscape){.intro{padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}}@media all and (min-width:768px){.intro{min-height:160px}}@media all and (min-width:980px){.intro{padding-left:0;padding-right:0}}.intro__heading{line-height:1}@media all and (min-width:768px){.intro__heading{grid-row-start:1;grid-row-end:2;grid-column-start:1;grid-column-end:3;justify-self:start}}.intro__heading{font-size:var(--global-body-font-size-xlarge);font-weight:700;line-height:1.25}@media all and (min-width:980px){.intro__heading{font-size:var(--global-body-font-size-xxxxlarge);line-height:1.1}}.intro__desc{grid-row-start:3;grid-row-end:4}.intro__desc p{font-weight:400;color:var(--default-text-medium);max-width:40em}@media all and (min-width:768px){.intro__desc p{font-size:16px;line-height:1.5}}.intro__desc p b{color:var(--default-text-strong);font-weight:700}.intro__desc p a{text-decoration:underline}.intro--home{margin-top:0;padding-top:24px;grid-template-rows:min-content min-content;grid-template-areas:"intro-title" "intro-desc";padding-bottom:var(--section-sep)}@media all and (min-width:980px){.season--halloween .intro--home{background-image:url(/img/Jack-O-Lantern-PNG-Transparent-Picture.png);background-size:40%;background-repeat:no-repeat;background-position:100% -15px}}@media all and (min-width:980px){.season--christmas .intro--home{background-image:url(/img/0fcd40c05eeecdaefb2ffd25564facfd.png);background-size:45%;background-repeat:no-repeat;background-position:100% -25px}}@media all and (min-width:980px){.season--newyear .intro--home{background-image:url(/img/fireworks.png);background-size:40%;background-repeat:no-repeat;background-position:100% -30px}}@media all and (min-width:980px){.header--memoji .intro--home{background-image:url(/img/memoji.png);background-size:25%;background-repeat:no-repeat;background-position:90% 30px;height:220px;padding-top:40px}}.intro--home .intro__heading{grid-area:intro-title}.intro--home .intro__desc{grid-area:intro-desc;align-items:flex-start}.intro--home .intro__desc p{max-width:40em}.fonts-loaded .intro--home .intro__desc{font-family:var(--font-heading)}.intro--return{padding:0 16px;padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right));font-size:var(--global-body-font-size-xsmall);font-weight:400;line-height:1;grid-row:1/2}.intro--return svg{width:10px;height:10px;transform:rotate(180deg);fill:var(--default-text)}.intro--return .section__container{width:100%;max-width:980px;padding:0}.intro--return .intro__desc{margin:0 auto}@media all and (min-width:768px){.intro--return{min-height:80px}}.intro--blog .section__container,.intro--work .section__container{width:100%;max-width:980px}.intro--resume{background-color:initial;padding-bottom:0}@media all and (min-width:980px){.intro--resume{grid-area:page-header}}.intro--resume .intro__heading span{font-weight:200;font-size:var(--global-body-font-size-xxlarge);margin-left:.5em}.intro--resume .section__container{display:flex;align-items:baseline}.intro--home .section__footer{grid-area:intro-footer}.intro__link svg{margin-right:.5em}.bb-resume-logo{display:none;width:3.6em;height:3.6em;margin-right:1em;position:relative;top:4px}.bb-resume-logo svg{max-width:100%;max-height:100%;width:3.6em;height:3.6em}.bb-resume-logo .bb-logo-block--right{fill:var(--default-text-weak)}@media print{.bb-resume-logo .bb-logo-block--right{fill:none;stroke:var(--default-text-weak)}}.bb-resume-logo .bb-logo-block--left{fill:var(--default-text-medium)}.bb-resume-logo .bb-logo-block--shadow{fill:var(--default-border)}@media print{.bb-resume-logo .bb-logo-block--shadow{display:none}}.hide .bb-resume-logo svg{visibility:hidden}.home-blog .section__title,.home-work .section__title{font-size:var(--global-body-font-size-xlarge);font-weight:700;line-height:1.25}@media all and (min-width:980px){.home-blog .section__title,.home-work .section__title{font-size:var(--global-body-font-size-xxxxlarge);line-height:1.1}}.home-blog .section__title--sub,.home-work .section__title--sub{font-family:var(--font-body);font-size:var(--global-body-font-size-small);font-weight:400}.home-blog .section__content,.home-work .section__content{display:flex;flex-direction:column;gap:56px 112px}@media all and (min-width:768px){.home-blog .section__content,.home-work .section__content{flex-direction:row}}.home-blog .article-stub,.home-work .article-stub{flex:1}.home-blog{background-image:url(../svg/afterhours-bg.svg);background-color:var(--default-surface-weak-inverse);background-repeat:repeat-x;background-size:auto 100px;background-position:50% 8px;position:relative}.home-blog .section__header{position:relative}.home-blog .section__title--sub{font-family:var(--font-body);font-size:var(--global-body-font-size-xsmall);transform:translateY(-12px)translateX(58px)translateZ(0);text-transform:lowercase;color:var(--default-text-weak-inverse);margin:0;display:inline-block}.section+.home-blog{margin-top:0}.logo--afterhours{transform:rotate(-15deg)translateY(0%)translateX(0);width:130px;margin:16px 0 0}.home-work{padding-bottom:64px}.home-work .section__title{display:flex;align-items:flex-end;line-height:1}.home-work .section__title a{font-family:var(--font-body);font-weight:400;font-size:var(--global-body-font-size-xsmall);margin-left:24px;transform:translateY(-2px);text-decoration:underline}.home-work .section__title a:hover{color:var(--action-link-hover)}.hide .home-work .section__title{visibility:hidden}.home-work .section__title--sub{max-width:700px}.home-work .section__title--sub a{text-decoration:underline}.content-article,.content-default{max-width:var(--page-thin)}@media all and (min-width:980px){.content-article,.content-default{display:grid;grid-gap:24px}}@media all and (min-width:980px){.content-article .article--blog,.content-article .article--work,.content-article .article--micro,.content-article .article--wiki,.content-default .article--blog,.content-default .article--work,.content-default .article--micro,.content-default .article--wiki{grid-column:1/2}}@media all and (min-width:980px){.content-default{display:block}}.content-default .section__title{line-height:1.2;margin-bottom:8px}.content-default .section__title--sub{font-size:var(--global-body-font-size-xsmall);margin:0 0 16px}.bb-article{display:flex;flex-direction:column;gap:24px;max-width:980px;margin:0 auto;width:100%}.bb-article:last-child{margin-bottom:var(--section-bottom)}.content-article{display:grid;gap:32px}@media only screen and (max-device-width:504px) and (orientation:landscape){.content-article{padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}}.content-article--work{max-width:980px;grid-gap:48px 32px;grid-template-rows:min-content}@media all and (min-width:768px){.content-article--work{display:grid;grid-template-columns:1fr 1fr}}@media all and (min-width:980px){.content-article--work{grid-template-columns:1fr 1fr 1fr}}.content-article--work .section__title{font-size:var(--global-body-font-size-xlarge);font-weight:700;line-height:1.25}@media all and (min-width:980px){.content-article--work .section__title{font-size:var(--global-body-font-size-xxxxlarge);line-height:1.1}}.content-article--work .article-stub__date{display:none}.page-container--resume .content-article{max-width:980px}.content-article .article-stub:not(:last-child){margin-bottom:32px}@media all and (min-width:980px){.content-article .section__header+.section__content{margin-top:0}}.body-tags .content-article+.content-article{margin-top:48px;padding-top:48px;border-top:1px solid var(--default-border-weak)}.bb-blog-content__media figure{display:flex;flex-direction:column;align-items:center;justify-content:center}.bb-blog-content__media figcaption{font-size:var(--global-body-font-size-small);color:var(--default-text-weak);text-align:center}.content-article--apps{display:grid;grid-gap:16px;grid-template-columns:repeat(auto-fit,minmax(50px,80px))}.article:not(:last-child){margin-bottom:48px}.article--blog,.article--work,.article--micro,.article--wiki{max-width:var(--page-thin)}.article--blog>*+*,.article--work>*+*,.article--micro>*+*,.article--wiki>*+*{margin-top:18px}.article--work .article__meta{display:none}.page-container>.article{margin-top:32px}.bb-article__content>*+*,.bb-dialog__content>*+*{margin-top:24px}.bb-article__content>*:not(:last-child),.bb-dialog__content>*:not(:last-child){margin-bottom:24px}.bb-article__content li>a,.bb-article__content p>a,.bb-dialog__content li>a,.bb-dialog__content p>a{text-decoration:underline}.bb-article__content a,.bb-dialog__content a{color:var(--action-link);transition:color .2s ease,text-decoration .2s ease}.bb-article__content a:hover,.bb-dialog__content a:hover{color:var(--action-link-hover)}.bb-article__content a:visited,.bb-dialog__content a:visited{color:var(--action-link-visited)}.bb-article__content p,.bb-article__content ol,.bb-article__content ul,.bb-dialog__content p,.bb-dialog__content ol,.bb-dialog__content ul{max-width:65ch;font-size:var(--global-body-font-size);line-height:1.5}@media all and (min-width:768px){.bb-article__content p,.bb-article__content ol,.bb-article__content ul,.bb-dialog__content p,.bb-dialog__content ol,.bb-dialog__content ul{font-size:var(--global-body-font-size-large);line-height:1.5}}@media all and (min-width:980px){.bb-article__content p,.bb-article__content ol,.bb-article__content ul,.bb-dialog__content p,.bb-dialog__content ol,.bb-dialog__content ul{font-size:var(--global-body-font-size-large);line-height:1.5}}.bb-article__content ul,.bb-article__content ol,.bb-dialog__content ul,.bb-dialog__content ol{list-style:disc;display:flex;flex-direction:column;gap:.5em}.bb-article__content ol,.bb-dialog__content ol{list-style:decimal inside}.bb-article__content ul li,.bb-dialog__content ul li{margin:0 0 0 1em}.bb-article__content blockquote p,.bb-article__content blockquote ol,.bb-article__content blockquote ul,.bb-dialog__content blockquote p,.bb-dialog__content blockquote ol,.bb-dialog__content blockquote ul{font-size:var(--global-body-font-size-xlarge);font-weight:400;line-height:1.4;font-style:italic;font-weight:700;color:var(--default-text)}@media all and (min-width:980px){.bb-article__content blockquote p,.bb-article__content blockquote ol,.bb-article__content blockquote ul,.bb-dialog__content blockquote p,.bb-dialog__content blockquote ol,.bb-dialog__content blockquote ul{font-size:var(--global-body-font-size-xxlarge)}}.bb-article__content pre,.bb-dialog__content pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}@media(prefers-color-scheme:dark){.bb-article__content pre,.bb-dialog__content pre{background-color:var(--default-background-weak)}}.bb-article__content .task-list,.bb-dialog__content .task-list{list-style:none}.bb-article__content .task-list label,.bb-dialog__content .task-list label{padding-left:.3em}.bb-article__content .task-list-item,.bb-dialog__content .task-list-item{margin-left:-2.25em}.bb-article__content code,.bb-dialog__content code{color:var(--text-color-code);font-size:var(--global-body-font-size);padding:2px 6px;display:inline-block;border-radius:2px;background-color:var(--default-background-weak)}@media(prefers-color-scheme:dark){.bb-article__content code,.bb-dialog__content code{color:var(--default-text-medium)}}.bb-article__content figcaption p,.bb-dialog__content figcaption p{font-size:var(--global-body-font-size-small);color:var(--default-text-weak)}.apps-header{background:var(--default-surface-weak);padding:16px;display:grid;grid-gap:1.5em 1em;grid-template-columns:25% 1fr;grid-template-areas:"icon title" "icon dev" "runnersup runnersup" "trust trust"}.apps-header__icon{grid-area:icon;position:relative;display:block;border-radius:22.5%;box-shadow:0 2px 3px hsla(0,0%,0%,.1)}.apps-header__icon::after{box-shadow:inset 0 0 0 1px hsla(0,0%,0%,.2);border-radius:22.5%;content:"";position:absolute;top:0;left:0;z-index:1;width:100%;height:100%}.apps-header__icon img{display:block;border-radius:22.5%}.apps-header__title{grid-area:title;align-self:end}.apps-header__dev{grid-area:dev}.apps-header__runnersup{grid-area:runnersup}.apps-header__trust{font-size:var(--global-body-font-size-xsmall);grid-area:trust}.apps-content__trust{background:var(--default-surface-weak);padding:16px}.apps-content__trust h5{margin:0 0 1em}.apps-content__trust p{font-size:var(--global-body-font-size-xsmall)}.page-container--resume .section__title{margin-bottom:.5em}.page-container--resume .section__header+.section__content{margin-top:0}.page-container--resume .content-article{gap:0}.page-container--resume .section+.section{margin-top:2.5em}.page-container--resume .section--aside+.section--aside{margin-top:2.5em}.page-container--resume .content-article--experience .section__content{display:flex;flex-direction:column;gap:1.5em}.page-container--resume .content-article--experience .article-stub{margin-bottom:0}.bb-resume__lists ul{list-style-type:disc;margin-left:1em}.resume__daterange{color:var(--default-text-weak);font-size:.875em}.bb-resume__education{display:flex;align-items:center;gap:1em}.bb-resume__education-logo{height:4em;width:auto;flex-shrink:0}.bb-article-gallery{display:grid;grid-template-columns:repeat(auto-fit,25%);grid-gap:16px;align-items:center;justify-items:center;margin-bottom:24px}.bb-article-gallery img{max-height:80px}.bb-figure-left img{border:1px solid var(--default-border);border-radius:6px}@media all and (min-width:768px){.bb-figure-left{float:left;max-width:35%;margin:0 2em 1em 0}}.bb-figure-right img{border:1px solid var(--default-border);border-radius:6px}@media all and (min-width:768px){.bb-figure-right{float:right;max-width:35%;margin:0 0 1em 2em}}@media all and (min-width:768px){.bb-figure-mobile{max-width:320px;margin:0 auto 1em}}.bb-article__header{display:flex;flex-direction:column;gap:8px;padding-bottom:24px;border-bottom:1px solid var(--default-border-weak)}.container--blog .bb-article__header{border:0;padding:0}.bb-article__title{font-size:var(--global-body-font-size-xlarge);font-weight:700;line-height:1.25}@media all and (min-width:980px){.bb-article__title{font-size:var(--global-body-font-size-xxxxlarge);line-height:1.1}}.bb-article__title a{text-decoration:none;color:var(--default-text)}.bb-article__title a:hover{text-decoration:underline}.article--micro .bb-article__title{font-size:var(--global-body-font-size-xlarge);font-weight:400}.article--blog .bb-article__title .u-url{text-decoration:none}.fonts-loaded .bb-article__title{font-family:var(--font-heading)}.fonts-loaded .article--micro .bb-article__title{font-family:var(--font-body)}@media all and (min-width:768px){.bb-article__content--movies,.bb-article__content--tv,.bb-article__content--games{display:grid;grid-template-columns:1fr 2fr;grid-gap:48px 32px;grid-template-areas:"ratings-aside ratings-content"}}.bb-article__footer h4{font-family:var(--font-body);font-size:var(--global-body-font-size-small);font-weight:400;color:var(--default-text-weak)}.container--single .bb-article__footer{border:0;padding:0 0 24px}.article-stub{display:flex;flex-direction:column}.article-stub.resume-stub{display:grid;grid-gap:4px;grid-template-rows:repeat(4,min-content);grid-template-columns:min-content 4fr;grid-template-areas:"start-date end-date" "title title" "company company" "desc desc"}.article-stub a{text-decoration:none}.article-stub--micro{font-size:var(--global-body-font-size)}.article-stub--micro p a{text-decoration:underline}.article-stub--ios{padding:0 15px}.article-stub--micro .article-stub__meta{font-size:var(--global-body-font-size-xsmall);color:var(--default-text-weak)}.article-stub>a{display:flex;flex-direction:column}.article-stub--apps a{display:flex;flex-direction:column;align-items:center;text-decoration:none}.article-stub--ios a{gap:8px}.article-stub__label{font-size:var(--global-body-font-size-small);font-weight:400;color:var(--default-text-weak)}.article-stub__date{font-family:var(--bb-font-body);font-size:var(--global-body-font-size-xsmall);color:var(--default-text-weak);margin-bottom:4px;display:block;text-decoration:none}.home-blog .article-stub__date{text-decoration:none;color:var(--default-text-medium-inverse)}.home-work .article-stub__date{color:var(--default-text-weak);display:none}.article-stub__date.resume__start-date{grid-area:start-date;margin:0;white-space:nowrap}.article-stub__date.resume__end-date{grid-area:end-date;margin:0}.bb-blog-micro a:hover .article-stub__date{text-decoration:underline}.article-stub .badge{margin:0 0 .5em}.article-stub__title{font-size:var(--global-body-font-size-xlarge);font-weight:700;line-height:1.25;margin-bottom:16px;text-decoration:none}.article-stub:hover .article-stub__title{text-decoration:underline}.resume-stub:hover .article-stub__title{text-decoration:none}.home-blog .article-stub__title{color:var(--default-text-inverse)}.home-work .article-stub__title,.body-library .article-stub__title,.body-tags .article-stub__title{color:var(--default-text)}.article-stub__title.resume__title{grid-area:title;margin:0;font-size:var(--global-body-font-size);font-weight:700;line-height:1.25}@media all and (min-width:980px){.article-stub__title.resume__title{font-size:var(--global-body-font-size-large);line-height:1.1}}.article-stub--micro .article-stub__title{font-size:var(--global-body-font-size-small);text-decoration:none;font-weight:400;margin-bottom:8px;line-height:1.5}.article-stub--micro:hover .article-stub__title{text-decoration:none}.fonts-loaded .article-stub--micro .article-stub__title{font-family:var(--font-body)}.bb-work-articles .article-stub__title,.bb-concerts-articles .article-stub__title{color:var(--default-text)}.bb-concerts-articles .article-stub__title{margin-bottom:.25em}.article-stub--apps .article-stub__title{font-weight:400;font-size:var(--global-body-font-size-small)}@media all and (min-width:980px){.article-stub--apps .article-stub__title{font-size:var(--global-body-font-size-small)}}.article-stub__title--sub{text-decoration:none;display:inline-block}.body-library .article-stub__title--sub,.bb-concerts-articles .article-stub__title--sub{color:var(--default-text)}.resume__company{grid-area:company}.article-stub__media{margin-bottom:8px;aspect-ratio:21/9;display:flex;overflow:hidden;height:auto}.article-stub__media img{object-fit:cover;object-position:center;width:100%;height:100%}.article-stub--apps .article-stub__media{margin:0;aspect-ratio:1/1}.article-stub--ios .article-stub__media{position:relative;display:block;border-radius:22.5%;box-shadow:0 2px 3px hsla(0,0%,0%,.1)}.article-stub--ios .article-stub__media::after{box-shadow:inset 0 0 0 1px hsla(0,0%,0%,.2);border-radius:22.5%;content:"";position:absolute;top:0;left:0;z-index:1;width:100%;height:100%}.article-stub--ios .article-stub__media img{border-radius:22.5%}.body-concerts .article-stub__media{aspect-ratio:4/6;border:10px solid #fff;box-shadow:0 2px 5px 2px hsla(0,0%,0%,.1)}.home-blog .article-stub__media figcaption{display:none}.article-stub__content{font-size:var(--global-body-font-size-small);margin-bottom:8px}@media all and (min-width:980px){.article-stub__content{font-size:var(--global-body-font-size)}}.article-stub__content.resume__content{grid-area:desc;margin:0}.home-blog .article-stub__content{color:var(--default-text-inverse)}.home-blog .article-stub__content img{object-fit:cover}.article-stub__desc{display:inline-block;text-decoration:none}.home-blog .article-stub__desc{color:var(--default-text-inverse)}.home-blog .article-stub__desc a{color:var(--default-text-inverse)}.article-stub__desc.resume__desc{max-width:85ch}@media all and (min-width:768px){.article-stub__desc.resume__desc{max-width:35em}}.article-stub__desc figure{max-width:30%;float:left;margin:0 16px 4px 0}.home-work .article-stub__desc p{color:var(--default-text)}.bb-work-articles .article-stub__desc,.body-library .article-stub__desc,.body-tags .article-stub__desc{color:var(--default-text)}.article-stub__more{display:inline-block;font-family:var(--font-body);font-size:var(--global-body-font-size-xsmall);text-decoration:none;transition:color .25s ease}.article-stub__more svg{vertical-align:middle;margin-left:4px;width:12px;height:12px;fill:var(--default-text-medium-inverse);transform:translateX(0)translateY(0)translateZ(0);transition:transform .25s ease,fill .25s ease,color .25s ease}.article-stub a:hover .article-stub__more{color:var(--action-link-hover)}.article-stub a:hover .article-stub__more svg{transform:translateX(2px)translateY(0)translateZ(0);fill:var(--action-link-hover)}.home-blog .article-stub__more{color:var(--default-text-medium-inverse)}.home-blog .article-stub__more svg{fill:var(--default-text-medium-inverse)}.home-blog a:hover .article-stub__more{color:var(--default-text-medium-inverse)}.home-blog a:hover .article-stub__more svg{fill:var(--default-text-medium-inverse)}.home-work .article-stub__more{color:var(--default-text-weak)}.home-work .article-stub__more svg{fill:var(--default-text-weak)}.bb-work-articles .article-stub__more,.body-library .article-stub__more,.body-tags .article-stub__more{color:var(--default-text)}.article-stub__taglist{display:flex;align-items:center;margin-bottom:.5em}.bb-work-featured{margin-bottom:40px}.bb-work-section-label{display:flex;align-items:center;gap:12px;margin-bottom:24px}.bb-work-section-label span{font-size:var(--global-body-font-size-xsmall);font-weight:500;color:var(--default-text-weak);white-space:nowrap}.bb-work-section-label::after{content:"";flex:1;height:1px;background-color:var(--default-text-weak);opacity:.25}.bb-work-section-label--standard{margin-top:40px}.work-card{margin-bottom:24px}.work-card a{display:flex;flex-direction:column;text-decoration:none}.work-card:hover .work-card__title{text-decoration:underline}.work-card__tag{display:inline-block;align-self:flex-start;font-size:var(--global-body-font-size-xsmall);font-family:var(--bb-font-body);border-radius:100px;padding:2px 10px;margin-bottom:12px;font-weight:700}.work-card__tag[data-topic="AI and design systems"]{color:oklch(50% .14 285deg);background-color:oklch(94% .02 285deg)}.work-card__tag[data-topic="Design systems"]{color:oklch(50% .13 248deg);background-color:oklch(94% .02 248deg)}.work-card__tag[data-topic="E-commerce design"]{color:oklch(50% .11 178deg);background-color:oklch(94% .02 178deg)}.work-card__tag[data-topic="Email and graphic design"]{color:oklch(44% .1 48deg);background-color:oklch(94% .02 48deg)}.work-card__tag[data-topic="Impact and adoption"]{color:oklch(50% .14 18deg);background-color:oklch(94% .02 18deg)}.work-card__tag[data-topic="Product design"]{color:oklch(50% .13 318deg);background-color:oklch(94% .02 318deg)}.work-card__tag[data-topic="Web design and development"]{color:oklch(50% .12 220deg);background-color:oklch(94% .02 220deg)}.work-card__title{font-size:var(--global-body-font-size);font-weight:700;line-height:1.25}@media all and (min-width:980px){.work-card__title{font-size:var(--global-body-font-size-large);line-height:1.1}}.work-card__title{color:var(--default-text);margin-bottom:12px;text-decoration:none}.work-card__desc{font-size:var(--global-body-font-size-small);color:var(--default-text);margin-bottom:12px}@media all and (min-width:980px){.work-card__desc{font-size:var(--global-body-font-size)}}.work-card__more{display:inline-block;font-size:var(--global-body-font-size-xsmall);color:var(--default-text);text-decoration:none;transition:color .25s ease}.work-card__more svg{vertical-align:middle;margin-left:4px;width:12px;height:12px;fill:var(--default-text);transform:translateX(0)translateY(0)translateZ(0);transition:transform .25s ease,fill .25s ease}.work-card a:hover .work-card__more{color:var(--action-link-hover)}.work-card a:hover .work-card__more svg{transform:translateX(2px)translateY(0)translateZ(0);fill:var(--action-link-hover)}.work-card--hero,.work-card--secondary{margin-bottom:32px}.work-card--hero>a,.work-card--secondary>a{display:flex;flex-direction:column;gap:16px}@media all and (min-width:980px){.work-card--hero>a,.work-card--secondary>a{flex-direction:row;gap:32px;align-items:flex-start}}.work-card--hero .work-card__media,.work-card--secondary .work-card__media{width:100%;flex-shrink:0;overflow:hidden;border:1px solid var(--default-border-weak)}.work-card--hero .work-card__media figure,.work-card--secondary .work-card__media figure{margin:0}.work-card--hero .work-card__media img,.work-card--secondary .work-card__media img{width:100%;display:block}@media all and (min-width:980px){.work-card--hero .work-card__media,.work-card--secondary .work-card__media{width:33.333%}}.work-card--hero .work-card__body,.work-card--secondary .work-card__body{display:flex;flex-direction:column;flex:1}@media all and (min-width:980px){.work-card--secondary>a{flex-direction:row-reverse}}.micro-stub{display:grid;padding:24px;background:var(--default-surface-weak);border-radius:32px 32px 32px 0;grid-template-columns:48px 1fr;grid-template-rows:1fr auto;gap:8px 24px;grid-template-areas:"icon content" ". date"}.micro-stub+.micro-stub{margin-top:var(--space-xxlarge)}@media all and (min-width:768px){.micro-stub+.micro-stub{margin-top:0}}.micro-stub__icon{grid-area:icon}.micro-stub__icon svg{width:48px;height:48px;fill:var(--default-border-weak)}.micro-stub__date{font-family:var(--font-body);font-size:var(--global-body-font-size-xsmall);color:var(--default-text-weak);margin-bottom:4px;grid-area:date}.micro-stub__title{margin-bottom:16px;font-size:var(--global-body-font-size-large);line-height:1.25;font-weight:700}@media all and (min-width:980px){.micro-stub__title{font-size:var(--global-body-font-size-xlarge);line-height:1.5}}.micro-stub__content{font-size:var(--global-body-font-size-small);margin-bottom:8px;grid-area:content}@media all and (min-width:980px){.micro-stub__content{font-size:var(--global-body-font-size)}}.micro-stub__media{margin-bottom:8px}.micro-stub__media img{display:block}.micro-stub__desc figure{max-width:30%;float:left;margin:0 16px 4px 0}.micro-stub__desc p{overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}.bb-article__tags{font-size:var(--global-body-font-size-small);padding:0;margin-top:8px}.bb-article__tags li{display:inline-block}.bb-article__tags li+li{margin-top:0}.bb-article__tags li:not(:only-child)::after{content:"/";padding:0 4px 0 7px;color:var(--default-text-weak)}.bb-article__tags li:not(:only-child):last-child::after{content:""}.bb-article__tags a{color:var(--action-link);text-decoration:underline}picture>img{border:1px solid var(--default-border-weak);border-radius:4px}.article-stub picture>img{border:none}picture>img img{display:block;max-width:100%;height:auto}.pagination{display:flex;justify-content:center;align-items:center;grid-column:1/-1}.pagination a,.pagination span{width:2em;height:2em;display:flex;justify-content:center;align-items:center;margin:8px;border-radius:25%;transition:background-color .1s ease;text-decoration:underline}.pagination a:hover,.pagination span:hover{background-color:var(--action-background-hover);color:var(--action-link-inverse);text-decoration:none}.pagination a.current,.pagination span.current{background-color:var(--action-background-active);color:var(--action-link-inverse);text-decoration:none}.pagination a.prev svg,.pagination span.prev svg{transform:rotate(180deg)}.pagination a.prev svg,.pagination a.next svg,.pagination span.prev svg,.pagination span.next svg{fill:var(--action-link)}.pagination a.next:hover svg,.pagination a.prev:hover svg,.pagination span.next:hover svg,.pagination span.prev:hover svg{fill:var(--action-link-inverse-hover)}figcaption{display:block;max-width:75ch;margin:.5em auto;font-size:.75em;color:var(--default-text-weak);text-align:center}.body-library .library-intro{width:100%}.body-library .library-intro .section__title{font-size:var(--global-body-font-size-xlarge);font-weight:700;line-height:1.25}@media all and (min-width:980px){.body-library .library-intro .section__title{font-size:var(--global-body-font-size-xxxxlarge);line-height:1.1}}.body-library .section__title{font-family:var(--font-heading);font-size:var(--global-body-font-size-large);line-height:1.25;font-weight:700}@media all and (min-width:980px){.body-library .section__title{font-size:var(--global-body-font-size-xlarge);line-height:1.5}}.body-library .pattern:not(:last-child){margin-bottom:32px}.body-library .pattern__name{font-size:var(--global-body-font-size-small);color:var(--default-text-weak);padding-bottom:4px;border-bottom:1px solid var(--default-border);margin-bottom:16px}.body-library [class^=heading-]:not(:last-child){margin-bottom:24px}.body-library [class^=heading-]::before{content:attr(class);font-size:var(--global-body-font-size-micro);font-weight:400;display:block;color:var(--default-text-weak)}.body-library .heading-1{font-size:var(--global-body-font-size-xlarge);font-weight:700;line-height:1.25}@media all and (min-width:980px){.body-library .heading-1{font-size:var(--global-body-font-size-xxxxlarge);line-height:1.1}}.body-library .heading-1--secondary{font-size:var(--global-body-font-size-xxlarge);font-weight:400;line-height:1.1}@media all and (min-width:980px){.body-library .heading-1--secondary{font-size:var(--global-body-font-size-xxxlarge)}}.body-library .heading-2{font-size:var(--global-body-font-size-xlarge);line-height:1.25;font-weight:700}@media all and (min-width:980px){.body-library .heading-2{font-size:var(--global-body-font-size-xxxlarge)}}.body-library .heading-2--secondary{font-size:var(--global-body-font-size-xlarge);font-weight:400;line-height:1.25}@media all and (min-width:980px){.body-library .heading-2--secondary{font-size:var(--global-body-font-size-xxlarge);line-height:1.25}}.body-library .heading-3{font-size:var(--global-body-font-size-large);line-height:1.25;font-weight:700}@media all and (min-width:980px){.body-library .heading-3{font-size:var(--global-body-font-size-xlarge);line-height:1.5}}.body-library .heading-4{font-size:var(--global-body-font-size);font-weight:700;line-height:1.25}@media all and (min-width:980px){.body-library .heading-4{font-size:var(--global-body-font-size-large);line-height:1.1}}.body-library .heading-5{display:none}@media all and (min-width:980px){.body-library .heading-5{display:block;font-size:var(--global-body-font-size-xlarge);font-weight:700;line-height:1.25}}.body-library .heading-6{display:none}@media all and (min-width:980px){.body-library .heading-6{display:block;line-height:1.25;font-weight:600;font-size:var(--global-body-font-size)}}.bb-footer{background-color:var(--default-background-weak);color:var(--default-text)}.bb-footer .container{display:flex;flex-direction:column;gap:16px;padding:0 max(16px,env(safe-area-inset-right))0 max(16px,env(safe-area-inset-left))}@media all and (min-width:980px){.bb-footer .container{padding:0;flex-direction:row}}.bb-footer__list{display:flex;flex-wrap:wrap;gap:0 16px;align-items:center;list-style:none;font-size:var(--global-body-font-size-xsmall);font-weight:400;line-height:1;width:100%;max-width:980px;margin:0 auto 2em}@media all and (min-width:768px){.bb-footer__list{justify-content:flex-start;margin:0;gap:0 24px}}.bb-footer__list a{text-decoration:none;text-transform:uppercase;color:var(--default-text);min-width:48px;height:48px;flex:0 0 48px;display:flex;justify-content:center;align-items:center}.bb-footer__list a[rel]{text-transform:none}.bb-footer__list a[href*=mastodon] svg{fill:var(--color-social-mastodon)}.bb-footer__list a[href*="micro.blog"] svg{fill:var(--color-social-micro)}.bb-footer__list a:hover{text-decoration:underline}.bb-footer__copyright,.bb-footer__vcard{display:none}.bb-footer__copyright{margin:1em 0 0;gap:1em;display:flex;justify-content:flex-start;flex-wrap:wrap;height:64px;font-size:var(--global-body-font-size-xsmall);font-weight:400;line-height:1}.bb-footer__copyright p{white-space:nowrap}.banner{padding:1em 0;background:red}.banner>div{max-width:980px;margin:0 auto}.bb-switch{overflow:hidden;padding:0 44px 0 0;position:relative;display:flex;justify-content:flex-end;align-items:center}.bb-switch:hover{cursor:pointer}.bb-switch input:not([role=button]){pointer-events:none}.bb-switch input{height:100%;left:0;opacity:1e-4;position:absolute;top:0;width:100%}.bb-switch span::before,.bb-switch span::after{content:"";position:absolute;top:50%;transform:translateY(-50%);border:2px solid var(--default-border-strong)}.bb-switch span::before{border-radius:18px;height:20px;right:0;transition:background .15s ease-in-out,border-color .15s ease-in-out;width:36px;background-color:initial}.bb-switch span::after{background:var(--default-border-strong);border-radius:50%;height:10px;right:20px;transition:height .15s ease-in-out,width .15s ease-in-out,right .15s ease-in-out,border-color .15s ease-in-out,background .15s ease-in-out;width:10px}.bb-switch input:checked+span::after{right:3px;border-color:var(--action-border);background:var(--action-text);height:14px;width:14px;border:none}.bb-switch input:checked+span::before{background:var(--action-background);border-color:var(--action-border)}.tags-list__letter{font-weight:700;font-size:var(--global-body-font-size-xlarge);color:var(--default-text-weak);padding:0 0 .25em;border-bottom:1px solid var(--default-border-weak);margin-bottom:.25em}.tags-list__letter+.tags-list__sublist{margin-bottom:2em}.tags-list__sublist{display:flex;flex-wrap:wrap;gap:1em 1em}.tags-list__tag{display:flex;justify-content:center;align-items:center;gap:.5em}.bb-ratings-list__container{grid-area:main;gap:var(--section-sep)}.bb-ratings__header{display:flex;flex-direction:column;margin-bottom:1em;background-color:var(--default-surface-weak);padding:1em;border-radius:.5em}@media all and (min-width:980px){.bb-ratings__header .bb-ratings__heading{margin:0;flex-direction:row}}@media all and (min-width:980px){.bb-ratings__header{display:grid;grid-template-areas:"heading heading" "show sort";gap:0 3em}}.bb-ratings__heading{margin:0 0 .5em;display:flex;align-items:baseline;gap:.5em}@media all and (min-width:980px){.bb-ratings__heading{grid-area:heading;padding-bottom:.5em}.body-games .bb-ratings__heading{padding:0}}.ratings-info-anchor{display:flex;align-items:center;gap:.25em;font-size:.5em;font-weight:400}.ratings-info-anchor svg{stroke:var(--action-link);width:1em;height:1em}.ratings-info-anchor:hover svg{stroke:var(--action-link-hover)}.ratings-info-anchor:visited svg{stroke:var(--action-link-visited)}.bb-ratings-show{display:flex;gap:.5em 0;flex-wrap:wrap;margin:0 0 2em}@media all and (min-width:980px){.bb-ratings-show{flex-direction:column;justify-content:flex-start;width:10em;gap:.5em 0;margin:0}}.bb-ratings-show .bb-switch{width:100%;justify-content:space-between}.bb-ratings-show strong{width:100%;height:fit-content}@media all and (min-width:980px){.bb-ratings-show strong{margin-bottom:.5em}}.bb-ratings__sort{display:flex;height:fit-content;gap:.5em;flex-wrap:wrap}@media all and (min-width:980px){.bb-ratings__sort{gap:.5em}}.bb-ratings__sort li:has(strong){width:100%;margin-bottom:.5em;height:fit-content}.bb-ratings__sort li{display:block;height:fit-content}.bb-ratings__sort button{display:block}.bb-ratings__sort button.active{background-color:var(--action-background-active)}.bb-ratings-aside{grid-area:aside}.bb-ratings-aside li:has(.bb-showmodal){list-style-type:none;margin-top:2em}.last-added{list-style:none;margin-top:2em}.last-added>strong{display:block;margin-bottom:.5em}.last-added>ol{margin:0;font-size:var(--global-body-font-size-small);display:flex;flex-direction:column;gap:1em}.last-added li{display:grid;grid-template-columns:auto 3em;grid-template-areas:"date date" "title total"}.last-added li[data-network]::before{content:attr(data-network)}.last-added__date{font-size:var(--global-body-font-size-micro);grid-area:date;color:var(--default-text-weak)}.last-added__title{grid-area:title;width:auto}.last-added__total{grid-area:total;width:fit-content;justify-self:end}.last-added .bb-ratings__bad,.last-added .bb-ratings__ok,.last-added .bb-ratings__good{background:0 0}.last-added .bb-ratings__good{color:var(--success-text)}.last-added .bb-ratings__ok{color:var(--warning-text)}.last-added .bb-ratings__bad{color:var(--danger-text-strong)}.bb-ratings-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));grid-gap:16px;width:100%;grid-area:list;counter-reset:movies}.bb-ratings-list--games{display:block}.bb-ratings-title__system{border-bottom:1px solid var(--default-border-weak);margin-bottom:24px}.bb-ratings-system{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));grid-gap:16px;margin-bottom:40px}.bb-ratings-system--feature .bb-ratings-list__box{aspect-ratio:2/3}.bb-ratings-system--feature .bb-ratings-list__box img{width:100%;height:100%;object-fit:cover}.bb-ratings-item-info__title{width:100%;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.bb-ratings-list__item{max-width:200px;display:flex;flex-direction:column;position:relative;overflow:hidden}.bb-ratings-list__item a{display:block;width:100%;height:100%}.bb-ratings-list__poster,.bb-ratings-list__box{margin:0}.bb-ratings-list__poster img,.bb-ratings-list__box img{object-fit:cover;display:flex;max-width:100%;border-radius:.5em;border:1px solid var(--default-border-weak);transform:scale3d(1,1,1)translateZ(0);transition:transform .3s ease-in-out}.bb-ratings-list__box{width:100%;display:flex;height:100%}.bb-ratings-list__box img{width:100%;height:100%;object-fit:cover}.bb-ratings-list__name,.bb-ratings-list__year,.bb-ratings-list__rank{position:absolute;z-index:-1;top:0;left:0;font-size:var(--global-body-font-size-xsmall)}.bb-ratings-list__item-info{font-size:var(--global-body-font-size-xsmall);color:var(--default-text-weak);padding:0 8px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:.25em}.bb-ratings-item__rank{color:var(--default-text-weak)}.bb-ratings-item__title{width:100%;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center;color:var(--default-text-strong)}.bb-ratings__bad{color:var(--danger-text-strong)}.bb-ratings__ok{color:var(--warning-text)}.bb-ratings__good{color:var(--success-text)}ul+.bb-ratings-meta__heading{margin-top:32px}.bb-ratings-meta__heading{margin-bottom:24px}.bb-ratings-meta ul{display:flex;flex-direction:column;gap:8px;list-style-type:disc;padding-left:1.25em}.bb-ratings-meta li a{text-decoration:underline}.bb-ratings__sublist{display:flex;flex-direction:column;gap:8px;list-style-type:disc;padding-left:1.25em;margin:.75em 0 1em;font-size:var(--global-body-font-size-small)}.bb-ratings-top{margin-bottom:48px;width:100%}.bb-ratings-top__heading{font-size:var(--global-body-font-size-xlarge);font-weight:700;line-height:1.25;margin:0 0 24px}.bb-ratings-top__heading span{font-weight:400;font-size:var(--global-body-font-size-small)}.bb-ratings-top__heading a{text-decoration:underline}.bb-ratings-top__list{grid-gap:16px;margin:0 0 32px;padding:0;width:100%;display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:2em 1em}@media all and (min-width:980px){.bb-ratings-top__list{grid-template-columns:repeat(5,1fr);grid-template-areas:"one one one two three" "one one one four five" "six seven eight nine ten"}}.bb-ratings-top__item{list-style-type:none;display:flex;flex-direction:column;gap:1px;min-width:0}.bb-ratings-top__image{width:100%;aspect-ratio:2/3;object-fit:cover;object-position:center;display:inline-block;border-radius:.5em;border:1px solid var(--default-border-weak)}.bb-ratings-top__info{font-size:var(--global-body-font-size-xsmall);color:var(--default-text-weak);padding:0 8px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:.25em}.bb-ratings-top__rank{color:var(--default-text-weak)}.bb-ratings-top__title{width:100%;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center;color:var(--default-text-strong)}.bb-ratings-single-meta{margin-bottom:32px;align-items:flex-start}@media all and (min-width:768px){.bb-ratings-single-meta{margin:0;grid-area:ratings-aside}}.bb-ratings-single-meta__poster{margin-bottom:24px}.bb-ratings-single-meta__details{display:grid;grid-gap:1px;grid-template-columns:2fr 1fr}.bb-ratings-single-meta__details>div{font-size:var(--global-body-font-size-xsmall);background-color:var(--default-surface-weak);padding:4px;color:var(--default-text)}.bb-ratings-single-meta__details>div:nth-child(2n){text-align:right}.bb-ratings-single-meta__details small{display:block}@media all and (min-width:768px){.bb-ratings-single__content{grid-area:ratings-content}}.bb-ratings-single-ratings table{text-align:left;border-collapse:separate;border-spacing:2px;margin-bottom:16px}.bb-ratings-single-ratings th,.bb-ratings-single-ratings td{padding:4px}@media all and (min-width:768px){.bb-ratings-single-ratings th,.bb-ratings-single-ratings td{padding:8px 16px}}.bb-ratings-single-ratings th{font-size:var(--global-body-font-size-small);font-weight:600;line-height:1}@media all and (min-width:768px){.bb-ratings-single-ratings th{font-size:var(--global-body-font-size);font-weight:600;line-height:1}}.bb-ratings-single-ratings thead th{text-align:center}.bb-ratings-single-ratings td{background-color:var(--default-surface-weak);text-align:center;font-size:var(--global-body-font-size)}@media all and (min-width:768px){.bb-ratings-single-ratings td{font-size:var(--global-body-font-size-large)}}.bb-ratings-single-ratings img{width:15px}.bb-ratings-single-ratings .bb-ratings__rating--total{background-color:var(--default-surface-inverse);color:var(--default-text-inverse)}.bb-ratings-single-key{display:flex;justify-content:space-between;position:relative;margin-bottom:32px}.bb-ratings-single-key__swatch{padding:4px;color:var(--default-text);text-align:center;font-size:var(--global-body-font-size-small)}@media(prefers-color-scheme:dark){.bb-ratings-single-key__swatch{color:hsl(var(--color-black))}}.bb-ratings-single-key .bb-ratings__good{width:25%;color:var(--success-text);background-color:var(--success-background)}.bb-ratings-single-key .bb-ratings__ok{width:35%;color:var(--warning-text);background-color:var(--warning-background)}.bb-ratings-single-key .bb-ratings__bad{width:40%;color:var(--danger-text);background-color:var(--danger-background)}.bb-ratings-single-key__mark{position:absolute;top:0;height:100%;width:1px;background-color:var(--default-text)}.bb-ratings-single-key__mark::after{content:"";position:absolute;bottom:-10px;left:50%;margin-left:-10px;width:0;height:0;border-width:0 10px 10px;border-style:none solid solid solid;border-color:transparent transparent var(--default-text)transparent}.bb-ratings-list--text{counter-reset:section}.bb-ratings-text__item{display:flex;gap:.5em}.bb-ratings-text__item::before{counter-increment:section;content:counter(section)"."}.bb-ratings-text__total{background:0 0}.bb-blog-articles{grid-area:main;display:flex;flex-direction:column;gap:64px}.bb-blog-micro{grid-area:aside}.bb-blog-micro__list{display:flex;gap:24px;flex-direction:column}.bb-blog-micro__title{display:flex;gap:16px;font-size:var(--global-body-font-size-small);text-transform:uppercase;white-space:nowrap;align-items:center;margin:0 0 16px;font-family:var(--font-body)}.fonts-loaded .bb-blog-micro__title{font-family:var(--font-body)}.bb-blog-micro__social{display:flex;gap:16px;align-items:center;list-style:none;padding:0}.bb-blog-micro__social a[href*=twitter] svg{fill:var(--color-social-twitter)}.bb-blog-micro__social a[href*="micro.blog"] svg{fill:var(--color-social-micro)}.bb-blog-micro__more a{display:flex;margin-top:24px;text-decoration:underline}.blog-ratings{padding:16px 0;display:grid;grid-gap:16px;grid-template-columns:repeat(auto-fit,150px)}.blog-ratings__poster{aspect-ratio:auto 2/3}.blog-ratings__poster img{border-radius:.5em;border:1px solid var(--default-border-weak)}.blog-ratings__item{font-size:var(--global-body-font-size-xsmall);flex:0 0 150px;text-align:center;padding:16px;background-color:var(--default-background)}.blog-ratings__item a{display:flex;flex-direction:column;justify-content:space-between;height:100%;text-decoration:none;color:var(--default-text)}.blog-ratings__item a:hover .blog-ratings__title{text-decoration:underline}.blog-ratings__title{font-weight:600;font-size:1em}.blog-ratings__rating{border-radius:0 0 4px 4px}.bb-work-articles{display:grid;grid-template-columns:repeat(auto-fit,minmax(288px,1fr));gap:60px 40px}.bb-work-articles .article-stub__date{display:none}.bb-form{display:flex;flex-direction:column;gap:2.5em}.bb-field-group{display:flex;flex-direction:column;gap:2em}.bb-field{display:flex;flex-direction:column;gap:8px}.bb-field--obsc{display:none}.field-group{display:grid;grid-gap:16px}.field{display:grid;grid-gap:8px 4px;grid-template-rows:min-content}.field--hidden{display:none}.bb-label{font-size:var(--global-body-font-size);font-weight:600;line-height:1}.bb-label__message{font-size:var(--global-body-font-size-small);font-weight:400;line-height:1;color:var(--default-text-medium)}.bb-input,.bb-textarea{appearance:none;border-radius:5px;font-size:var(--global-body-font-size);padding:0 1em;border:1px solid var(--default-border-weak);background-color:var(--default-background-weak);color:var(--default-text);max-width:478px;display:flex;align-items:center;height:48px}.error.bb-input,.error.bb-textarea{border-color:red}.bb-input:active,.bb-textarea:active,.bb-input:focus,.bb-textarea:focus{border:2px solid var(--action-link);outline:0}.bb-textarea{padding:1em;min-height:5em;resize:vertical}@page{margin:8mm}@media print{body{font-size:var(--global-body-font-size-xsmall)}.section+.section{margin-top:2.5em}.section--aside+.section--aside{margin-top:2.5em}.section__title{margin-bottom:.5em}.section__header+.section__content{margin-top:0}.section__container{padding:0 16px}.bb-resume-logo{display:block}.section-wrapper{display:grid;grid-gap:16px;grid-template-columns:3fr 1fr}.section:last-child{margin-bottom:0}.content-article{grid-gap:0}.content-article--focus .section__content p{font-size:var(--global-body-font-size-micro)}.article-stub{page-break-inside:avoid}.content-article--previous li{page-break-inside:avoid;break-inside:avoid}.content-article--experience .section__content{display:flex;flex-direction:column;gap:1.5em}.resume-stub .article-stub__date{text-decoration:none;color:var(--default-text)}.article-stub__title{font-size:var(--global-body-font-size-small)}.article-stub__title.resume__title{font-size:var(--global-body-font-size-small)}.article-stub__desc{font-size:var(--global-body-font-size-micro)}.body-resume .global-header{height:0}.logo{display:none}.global-header__logo{display:none}.global-menu__trigger{display:none}.global-menu{display:none}.bb-footer{display:none}.intro{min-height:auto}.intro--resume{padding-top:8px;padding-bottom:8px}.intro.intro--blog .section__container,.intro.intro--work .section__container{margin-left:1em}.intro__heading{font-size:var(--global-body-font-size-xlarge);line-height:1.25;font-weight:700}}@media print and (min-width:980px){.intro__heading{font-size:var(--global-body-font-size-xxxlarge)}}@media print{.section--aside .section__title{font-size:var(--global-body-font-size)}.list--featured li{font-size:var(--global-body-font-size-xsmall)}.list--featured ul li{font-size:var(--global-body-font-size-xsmall)}}.bb-token,.bb-token--hex{font-size:var(--global-body-font-size-small);color:var(--text-color-code)}.bb-token--hex{white-space:nowrap;display:inline-flex;align-items:center}.bb-token--hex__swatch{width:1em;height:1em;border-radius:50%;margin-right:.25em}.bb-update{background-color:var(--default-surface-weak);padding:16px;display:inline-block;margin-bottom:32px;border-radius:4px}.bb-update__date{font-weight:700;display:block}.fonts-loaded figcaption>h4{font-size:var(--global-body-font-size-xsmall);font-weight:400;font-family:var(--font-body);color:var(--default-text-weak)}.chroma{background-color:#fff}.chroma .err{color:red;background-color:#faa}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma .hl{display:block;width:100%;background-color:#ffc}.chroma .lnt{margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .ln{margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .k{color:#080;font-weight:700}.chroma .kc{color:#080;font-weight:700}.chroma .kd{color:#080;font-weight:700}.chroma .kn{color:#080;font-weight:700}.chroma .kp{color:#038;font-weight:700}.chroma .kr{color:#080;font-weight:700}.chroma .kt{color:#339;font-weight:700}.chroma .na{color:#00c}.chroma .nb{color:#007020}.chroma .nc{color:#b06;font-weight:700}.chroma .no{color:#036;font-weight:700}.chroma .nd{color:#555;font-weight:700}.chroma .ni{color:#800;font-weight:700}.chroma .ne{color:red;font-weight:700}.chroma .nf{color:#06b;font-weight:700}.chroma .nl{color:#970;font-weight:700}.chroma .nn{color:#0e84b5;font-weight:700}.chroma .nt{color:#070}.chroma .nv{color:#963}.chroma .vc{color:#369}.chroma .vg{color:#d70;font-weight:700}.chroma .vi{color:#33b}.chroma .s{background-color:#fff0f0}.chroma .sa{background-color:#fff0f0}.chroma .sb{background-color:#fff0f0}.chroma .sc{color:#04d;background-color:#fff0f0}.chroma .dl{background-color:#fff0f0}.chroma .sd{color:#d42;background-color:#fff0f0}.chroma .s2{background-color:#fff0f0}.chroma .se{color:#666;background-color:#fff0f0;font-weight:700}.chroma .sh{background-color:#fff0f0}.chroma .si{background-color:#eee}.chroma .sx{color:#d20;background-color:#fff0f0}.chroma .sr{color:#000;background-color:#fff0ff}.chroma .s1{background-color:#fff0f0}.chroma .ss{color:#a60;background-color:#fff0f0}.chroma .m{color:#60e;font-weight:700}.chroma .mb{color:#60e;font-weight:700}.chroma .mf{color:#60e;font-weight:700}.chroma .mh{color:#058;font-weight:700}.chroma .mi{color:#00d;font-weight:700}.chroma .il{color:#60e;font-weight:700}.chroma .mo{color:#40e;font-weight:700}.chroma .o{color:#333}.chroma .ow{color:#000;font-weight:700}.chroma .c{color:#888}.chroma .ch{color:#888}.chroma .cm{color:#888}.chroma .c1{color:#888}.chroma .cs{color:#c00;font-weight:700}.chroma .cp{color:#579}.chroma .cpf{color:#579}.chroma .gd{color:#a00000}.chroma .ge{font-style:italic}.chroma .gr{color:red}.chroma .gh{color:navy;font-weight:700}.chroma .gi{color:#00a000}.chroma .go{color:#888}.chroma .gp{color:#c65d09;font-weight:700}.chroma .gs{font-weight:700}.chroma .gu{color:purple;font-weight:700}.chroma .gt{color:#04d}.chroma .gl{text-decoration:underline}.chroma .w{color:#bbb}@media(prefers-color-scheme:dark){.chroma .c{color:hsl(var(--color-nobel))}.chroma .nt{color:hsl(var(--bb-color-green-hue) var(--bb-color-green-saturation) 90%)}.chroma .o{color:hsl(var(--color-silver))}.chroma .nc{color:#ffcce8}.bg{color:#abb2bf;background-color:#282c34}.chroma{color:#abb2bf;background-color:#282c34}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#3d4148}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#55595f}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#55595f}.chroma .line{display:flex}.chroma .k{color:#c678dd}.chroma .kc{color:#e5c07b}.chroma .kd{color:#c678dd}.chroma .kn{color:#c678dd}.chroma .kp{color:#c678dd}.chroma .kr{color:#c678dd}.chroma .kt{color:#e5c07b}.chroma .n{color:#e06c75}.chroma .na{color:#e06c75}.chroma .nb{color:#e5c07b}.chroma .bp{color:#e06c75}.chroma .nc{color:#e5c07b}.chroma .no{color:#e06c75}.chroma .nd{color:#61afef}.chroma .ni{color:#e06c75}.chroma .ne{color:#e06c75}.chroma .nf{color:#61afef;font-weight:700}.chroma .fm{color:#56b6c2;font-weight:700}.chroma .nl{color:#e06c75}.chroma .nn{color:#e06c75}.chroma .nx{color:#e06c75}.chroma .py{color:#e06c75}.chroma .nt{color:#e06c75}.chroma .nv{color:#e06c75}.chroma .vc{color:#e06c75}.chroma .vg{color:#e06c75}.chroma .vi{color:#e06c75}.chroma .vm{color:#e06c75}.chroma .s{color:#98c379}.chroma .sa{color:#98c379}.chroma .sb{color:#98c379}.chroma .sc{color:#98c379}.chroma .dl{color:#98c379}.chroma .sd{color:#98c379}.chroma .s2{color:#98c379}.chroma .se{color:#98c379}.chroma .sh{color:#98c379}.chroma .si{color:#98c379}.chroma .sx{color:#98c379}.chroma .sr{color:#98c379}.chroma .s1{color:#98c379}.chroma .ss{color:#98c379}.chroma .m{color:#d19a66}.chroma .mb{color:#d19a66}.chroma .mf{color:#d19a66}.chroma .mh{color:#d19a66}.chroma .mi{color:#d19a66}.chroma .il{color:#d19a66}.chroma .mo{color:#d19a66}.chroma .o{color:#56b6c2}.chroma .ow{color:#56b6c2}.chroma .c{color:#7f848e}.chroma .ch{color:#7f848e}.chroma .cm{color:#7f848e}.chroma .c1{color:#7f848e}.chroma .cs{color:#7f848e}.chroma .cp{color:#7f848e}.chroma .cpf{color:#7f848e}.chroma .gd{color:#e06c75}.chroma .gi{color:#98c379;font-weight:700}}dialog{position:absolute;left:0;right:0;width:-moz-fit-content;width:-webkit-fit-content;width:fit-content;height:-moz-fit-content;height:-webkit-fit-content;height:fit-content;margin:auto;border:solid;padding:1em;background:#fff;color:#000;display:block}dialog:not([open]){display:none}dialog+.backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.1)}._dialog_overlay{position:fixed;top:0;right:0;bottom:0;left:0}dialog.fixed{position:fixed;top:50%;transform:translate(0,-50%)}.twitter-archive .search_divider{background-color:var(--default-border-weak);margin:1em 0;border:0;height:1px}.twitter-archive .search_time{margin-top:4px;color:var(--default-text-weak);font-size:var(--global-body-font-size-xsmall)}.twitter-archive .search_text{display:block;background-image:url(/img/twitter-avatar.png);background-size:2.5em;background-repeat:no-repeat;background-position:0 0;margin-bottom:1em;min-height:64px}.twitter-archive .search_text::before{content:"Brad Bice";font-weight:700;display:block;margin-bottom:2em;padding-left:3em}.twitter-archive .search_text .gallery{margin-top:1em}.twitter-archive .search_link{display:block;width:2.5em;height:2.5em;position:absolute}.twitter-archive .search_link:after{content:"@bradbice";color:var(--default-text-weak);position:absolute;top:1.2em;left:calc(100% + .5em)}.twitter-archive .search_link a{display:block;width:2.5em;height:2.5em;text-indent:-1e4px}.twitter-archive #sorting,.twitter-archive #browse-sort{margin:1em 0;line-height:1.7em;color:var(--default-text-medium);font-size:var(--global-body-font-size-small)}.twitter-archive .sort-button,.twitter-archive .sort-button-browse{font-size:1em;border:0;padding:0;box-shadow:none;text-decoration:underline;background:0 0;color:var(--action-link);cursor:pointer}.twitter-archive .tweet-search{max-width:600px}.twitter-archive img{max-height:100%;vertical-align:bottom;width:100%;object-fit:cover}.twitter-archive video{max-height:100%;vertical-align:bottom;width:100%}.twitter-archive .search_text ul{display:flex;flex-wrap:wrap;list-style-type:none;gap:8px;padding-left:0;margin-bottom:0}.twitter-archive .search_text li{height:20vh;width:20vh;flex-grow:1}.twitter-archive #tabs{border-bottom:1px solid var(--default-border-weak);margin:0 0 1em;padding-left:.5em;display:flex;gap:.5em}.twitter-archive .tab{border:none;cursor:pointer;padding:.5em 1em;border:1px solid var(--default-border-weak);border-radius:4px 4px 0 0;box-sizing:border-box;font-size:1em;background-color:var(--default-background-weak);position:relative;bottom:-1px;color:var(--default-text-weak)}.twitter-archive .tab.active{border-bottom-color:var(--default-surface);background-color:var(--default-surface);color:var(--default-text-strong)}.twitter-archive #browse-sort>button{font-size:1em}.twitter-archive #page-num{font-size:1em;width:80px}.twitter-archive #browse-sort{line-height:1.7em}.twitter-archive #paging{margin:2em 0}.now-currently h3,.now-generally h3{margin:0 0 .5em}.now-currently+.now-currently,.now-currently+.now-generally,.now-generally+.now-currently,.now-generally+.now-generally{margin:3em 0 0}.now-currently h2{margin:0 0 1em}.now-currently__items{display:grid;gap:3em;grid-template-columns:repeat(auto-fit,minmax(100px,1fr))}.now-currently__past{font-size:.75em;margin:2rem 0 0;border-top:1px solid var(--default-border-weak);padding:1em 0 0 1rem;display:flex;flex-direction:column;gap:1em}.now-currently__past li{display:flex;gap:.5em}.now-currently__past strong{white-space:nowrap}.now-generally h2{margin:0 0 1em}.now-generally ul{list-style-type:disc;margin:0 0 0 1.5em;display:flex;flex-direction:column;gap:.75em}.ds-nav{display:grid;gap:24px;padding:var(--section-top)0 var(--section-bottom)}@media all and (min-width:768px){.ds-nav{grid-template-columns:1fr 1fr}}.ds-nav-card{display:block;padding:32px;border:1px solid var(--default-border-weak);border-radius:8px;text-decoration:none;color:var(--default-text);transition:border-color .2s ease,box-shadow .2s ease}.ds-nav-card h2{font-size:var(--global-body-font-size-large);line-height:1.25;font-weight:700}@media all and (min-width:980px){.ds-nav-card h2{font-size:var(--global-body-font-size-xlarge);line-height:1.5}}.ds-nav-card h2{margin-bottom:8px;color:var(--default-text)}.ds-nav-card p{font-size:var(--global-body-font-size-small);color:var(--default-text-weak);margin:0}.ds-nav-card:hover{border-color:var(--action-border);box-shadow:0 2px 8px oklch(0% 0 0/.06)}.ds-token-sections{display:flex;flex-direction:column;gap:56px;padding:var(--section-top)0 var(--section-bottom)}.ds-token-section>h2{font-size:var(--global-body-font-size-xsmall);font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--default-text-weak);border-bottom:1px solid var(--default-border-weak);padding-bottom:8px;margin-bottom:24px}.ds-type-rows{display:flex;flex-direction:column}.ds-type-row{display:flex;align-items:baseline;gap:24px;border-bottom:1px solid var(--default-border-weak);padding:10px 0}.ds-type-row:last-child{border-bottom:none}.ds-type-meta{font-size:var(--global-body-font-size-xsmall);color:var(--default-text-weak);font-family:monospace;flex-shrink:0;width:200px}.ds-type-sample{color:var(--default-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2}.ds-typeface-grid{display:grid;gap:24px}@media all and (min-width:768px){.ds-typeface-grid{grid-template-columns:1fr 1fr}}.ds-typeface-card{padding:24px;border:1px solid var(--default-border-weak);border-radius:8px}.ds-typeface-card .ds-typeface-sample{font-size:var(--global-body-font-size-xxlarge);color:var(--default-text);margin-bottom:8px;line-height:1.2}.ds-typeface-card .ds-typeface-name{font-size:var(--global-body-font-size-xsmall);color:var(--default-text-weak);font-family:monospace;margin-bottom:4px}.ds-typeface-card .ds-typeface-stack{font-size:var(--global-body-font-size-xsmall);color:var(--default-text-weak)}.ds-spacing-rows{display:flex;flex-direction:column;gap:16px}.ds-spacing-row{display:flex;align-items:center;gap:16px}.ds-spacing-row .ds-spacing-bar{height:24px;background-color:var(--action-background);opacity:.35;border-radius:3px;flex-shrink:0}.ds-spacing-row .ds-spacing-meta{font-size:var(--global-body-font-size-xsmall);color:var(--default-text-weak);font-family:monospace}.ds-color-groups{display:flex;flex-direction:column;gap:32px}.ds-color-group h3{font-size:var(--global-body-font-size-small);font-weight:700;color:var(--default-text-medium);margin-bottom:12px}.ds-swatch-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:16px}.ds-swatch{display:flex;flex-direction:column;gap:6px}.ds-swatch .ds-swatch-color{height:56px;border-radius:6px;border:1px solid var(--default-border-weak)}.ds-swatch .ds-swatch-name{font-size:var(--global-body-font-size-micro);color:var(--default-text-weak);font-family:monospace;word-break:break-word;line-height:1.4}.ds-pattern-list{display:flex;flex-direction:column;gap:56px;padding:var(--section-top)0 var(--section-bottom)}.ds-pattern-header{border-bottom:1px solid var(--default-border-weak);padding-bottom:12px;margin-bottom:20px}.ds-pattern-header h2{font-size:var(--global-body-font-size);font-weight:700;line-height:1.25}@media all and (min-width:980px){.ds-pattern-header h2{font-size:var(--global-body-font-size-large);line-height:1.1}}.ds-pattern-header h2{color:var(--default-text);margin-bottom:4px}.ds-pattern-header .ds-pattern-desc{font-size:var(--global-body-font-size-small);color:var(--default-text-weak);margin:0}.ds-pattern-example{padding:32px;border:1px solid var(--default-border-weak);border-radius:8px;background-color:var(--default-background-weak)}