.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-font-weight:initial}}}@layer theme{:root,:host{--font-weight-semibold:600;--default-font-family:"Inter",ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--default-mono-font-family:ui-monospace,"SFMono-Regular",Menlo,Monaco,Consolas,"Liberation Mono",monospace}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.static{position:static}.flex{display:flex}.hidden{display:none}.inline{display:inline}.h-full{height:100%}.min-h-full{min-height:100%}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.flex-col{flex-direction:column}.font-sans{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.italic{font-style:italic}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}}:root{--background:#fff;--foreground:#000;--light-surface:#fff;--dark-surface:#1d1d1d;--dark-raised:#2f2f2f;--muted-border:#e5e5e5;--dark-border:#525252}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:optional;src:url(/fonts/inter-var-latin.woff2)format("woff2")}@font-face{font-family:Virgil;font-display:swap;src:url(/fonts/Virgil.woff2)format("woff2")}*,:before,:after{box-sizing:border-box}.dark{--background:#1d1d1d;--foreground:#fff;--light-surface:#2f2f2f;--muted-border:#525252}html{scroll-behavior:smooth;max-width:100%;height:100%;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow:hidden scroll}body{background:var(--background);width:100%;min-width:0;max-width:100%;color:var(--foreground);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;transition:color .15s,background-color .15s;overflow-x:hidden}::selection{color:#000;background-color:#d4d4d4}.dark ::selection{background-color:#a3a3a3}img,svg{display:block}.doodle-path{stroke-dasharray:1;stroke-dashoffset:1px;animation:.5s linear forwards draw-doodle}.doodle-path--portrait{animation-duration:2s;animation-timing-function:cubic-bezier(1,.4,.7,.9)}@keyframes draw-doodle{to{stroke-dashoffset:0}}@keyframes route-content-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-2px)}}@keyframes route-content-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes route-content-in-fallback{0%{opacity:.94;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}::view-transition-group(root){animation:none}::view-transition-old(root){animation:none}::view-transition-new(root){animation:none}::view-transition-image-pair(page-content){isolation:isolate}::view-transition-old(page-content){mix-blend-mode:plus-lighter}::view-transition-new(page-content){mix-blend-mode:plus-lighter}[data-astro-transition-fallback=old] [data-astro-transition-scope]{animation:none!important}[data-astro-transition-fallback=new] [data-astro-transition-scope]{animation-name:route-content-in-fallback!important;animation-duration:.18s!important;animation-timing-function:cubic-bezier(.22,1,.36,1)!important}@media(prefers-reduced-motion:reduce){.doodle-path{stroke-dashoffset:0;animation:none}.route-progress__bar,.about-photo,.about-photo-placeholder{transition:none!important}.about-photo{filter:none;transform:none}}button{cursor:pointer}[hidden]{display:none!important}doodle-layer,animated-blob-clip,latest-song-card,projects-explorer,spotify-callback-helper{display:contents}about-photo{display:block}.font-sans{font-family:Inter,ui-sans-serif,system-ui,sans-serif}.font-doodle,.brand,.home-title,.page-heading--doodle,.site-footer{font-family:Virgil,ui-sans-serif,system-ui,sans-serif}.cursor-pencil{cursor:url(/cursors/pencil.png) 0 24,auto}.dark .cursor-pencil,.dark .cursor-pencil-dark{cursor:url(/cursors/pencil-invert.png) 0 24,auto}.site-shell{--site-accent:#202020;--site-background:var(--background);--site-card-background:var(--background);--site-card-soft-background:var(--light-surface);background-color:var(--site-background);flex-direction:column;width:100%;min-width:0;max-width:100dvw;min-height:100vh;display:flex;overflow-x:clip}.site-shell[data-site-palette=green]{--site-background:#ecfdf5;--site-card-background:#f7fffb;--site-card-soft-background:#dff7eb}.site-shell[data-site-palette=blue]{--site-background:#eff6ff;--site-card-background:#f8fbff;--site-card-soft-background:#dbeafe}.site-shell[data-site-palette=amber]{--site-background:#fffbeb;--site-card-background:#fffef7;--site-card-soft-background:#fef3c7}.site-shell[data-site-palette=rose]{--site-background:#fff1f2;--site-card-background:#fff8fa;--site-card-soft-background:#ffe4e6}.dark .site-shell{--site-accent:#fff;--site-background:var(--background);--site-card-background:var(--background);--site-card-soft-background:var(--light-surface)}.dark .site-shell[data-site-palette=green]{--site-background:#0d261e;--site-card-background:#102e24;--site-card-soft-background:#15382c}.dark .site-shell[data-site-palette=blue]{--site-background:#101f36;--site-card-background:#142642;--site-card-soft-background:#1d3352}.dark .site-shell[data-site-palette=amber]{--site-background:#2a2113;--site-card-background:#332816;--site-card-soft-background:#44351d}.dark .site-shell[data-site-palette=rose]{--site-background:#2b1720;--site-card-background:#351d28;--site-card-soft-background:#452535}.desktop-header{z-index:40;border-bottom:2px dashed var(--muted-border);background:var(--site-background);align-items:center;height:52px;display:none;position:fixed;inset:0 0 auto}.desktop-nav{align-items:center;gap:1.25rem;width:100%;max-width:64rem;margin:0 auto;padding:0 .5rem;font-size:.875rem;font-weight:700;display:flex}.brand{white-space:nowrap;font-size:1.25rem;line-height:1}.nav-link,.mobile-link{color:inherit;white-space:nowrap;align-items:center;gap:.25rem;text-decoration:none;display:inline-flex}.nav-link:hover,.mobile-link:hover,.project-title a:hover,.text-link:hover{text-decoration:underline}.nav-link__external{width:.8rem;height:.8rem}.theme-toggle{z-index:45;color:#404040;cursor:pointer;background:#e5e5e5;border:0;border-radius:999px;align-items:center;width:2.75rem;height:1.5rem;padding:.125rem;transition:background-color .15s;display:none;position:fixed;top:1.125rem;right:calc(50vw - (min(64rem,100vw)/2) + .5rem)}.dark .theme-toggle{color:#e5e5e5;background:#2f2f2f}.theme-toggle__knob{background:var(--background);border-radius:999px;place-items:center;width:1.125rem;height:1.125rem;transition:transform .15s,background-color .15s;display:grid;transform:translate(0);box-shadow:0 1px 2px #0000001f}.dark .theme-toggle__knob{transform:translate(1.375rem)}.theme-toggle__icon{grid-area:1/1;width:.75rem;height:.75rem}.theme-toggle__icon--dark{opacity:0;transition:opacity .15s,transform .15s;transform:scale(.85)}.theme-toggle__icon--light{opacity:1;transition:opacity .15s,transform .15s;transform:scale(1)}.dark .theme-toggle__icon--light{opacity:0;transform:scale(.85)}.dark .theme-toggle__icon--dark{opacity:1;transform:scale(1)}.site-main{flex-direction:column;flex:auto;min-width:0;display:flex}.site-footer{text-align:center;overflow-wrap:break-word;width:100%;max-width:100%;padding:.75rem 1rem 5rem;font-size:.875rem;line-height:1.25rem}.bottom-nav{z-index:50;border:2px dashed var(--muted-border);background:var(--site-background);width:min(100vw - 1rem,430px);height:3.375rem;color:var(--foreground);border-radius:.5rem;justify-content:stretch;align-items:center;font-size:clamp(.76rem,2.7vw,.9rem);line-height:1.5rem;display:flex;position:fixed;top:calc(100dvh - 4.5rem);left:.5rem;overflow:hidden;box-shadow:0 25px 50px -12px #00000040}.bottom-nav .nav-link,.bottom-nav .mobile-link{text-align:center;flex:1 1 0;justify-content:center;gap:.15rem;min-width:0;max-width:none;padding:.75rem 0;font-weight:400;overflow:hidden}.bottom-nav .nav-link__external{flex:none;width:.7rem;height:.7rem}.bottom-nav .is-active{border-bottom:2px solid;font-weight:700}.mobile-theme-toggle-slot{border-left:2px dashed var(--muted-border);flex:0 0 3.5rem;justify-content:center;align-items:center;height:100%;display:flex}.mobile-theme-toggle-slot .theme-toggle--mobile{display:flex;position:static}.home-section{flex-direction:column-reverse;flex:auto;justify-content:flex-end;align-items:center;width:100%;min-width:0;max-width:min(64rem,100%);margin:0 auto;padding:0 .5rem;display:flex;position:relative;overflow:hidden}.project-link{color:var(--foreground)}.home-copy{text-align:center;flex-direction:column;align-items:center;gap:1rem;width:min(100%,360px);min-width:0;max-width:min(550px,100%);display:flex}.home-title{font-size:1.875rem;font-weight:400;line-height:2.25rem}.home-title-name{font-weight:700;display:inline-block;position:relative}.home-title-line{z-index:2;pointer-events:none;width:100%;height:5px;display:block;position:absolute;bottom:.08em;left:0;right:auto}.home-title-line__svg{display:block;overflow:visible}.home-description{overflow-wrap:break-word;width:100%;max-width:550px;font-size:1rem;line-height:1.6}.home-links{overflow-wrap:break-word;width:100%;max-width:550px}.home-portrait{-webkit-user-select:none;user-select:none;pointer-events:none;flex:none;width:200px;position:relative}.home-portrait img{margin:0 auto}.home-portrait-scribble{z-index:10;transform-origin:0 100%;position:absolute;bottom:-27px;left:3px;transform:scale(.67)}.text-link{z-index:10;color:inherit;text-underline-offset:2px;text-decoration:underline;position:relative}.doodle-canvas{z-index:5;touch-action:none;background:0 0;width:100vw;height:100vh;position:fixed;inset:0}.is-hidden{visibility:hidden}.brush-toolbar{z-index:50;background:#f5f5f5;border-radius:999px;align-items:center;padding:.5rem;display:flex;position:fixed;top:10%;right:.25rem}.dark .brush-toolbar{background:#2f2f2f}.brush-toolbar__inner{flex-direction:column;gap:.5rem;display:flex}.brush-button{border-radius:999px;place-items:center;width:2rem;height:2rem;display:grid}.brush-button--clear{background:#e5e5e5}.dark .brush-button--clear{background:#1d1d1d}.brush-icon{width:1em;height:1em;margin:auto}.content-container{width:100%;max-width:min(64rem,100%);margin:0 auto;padding:0 .5rem}.projects-page,.timeline-page{padding-top:.875rem;overflow:hidden}.page-heading{font-size:2.25rem;font-weight:700;line-height:2.5rem}.page-lede{margin-top:.1rem}.project-filters{border:2px dashed var(--muted-border);background:var(--site-card-background);border-radius:.4rem;gap:.25rem;max-width:100%;margin-top:1rem;padding:.25rem;display:inline-flex}.project-filter{background:var(--site-card-soft-background);min-width:5.75rem;color:inherit;font:inherit;border:2px solid #0000;border-radius:.25rem;justify-content:center;align-items:center;padding:.35rem .65rem;font-size:.875rem;font-weight:700;line-height:1.2;transition:border-color .15s,background-color .15s,color .15s;display:inline-flex}.project-filter:hover{border-color:var(--foreground)}.project-filter--active{border-color:var(--foreground);background:var(--foreground);color:var(--background)}.project-filter:focus-visible{outline-offset:3px;outline:3px solid}.project-empty-state{border:2px dashed var(--muted-border);background:var(--site-card-background);border-radius:.25rem;margin-top:1rem;padding:1.25rem;line-height:1.5}.route-progress{z-index:100;pointer-events:none;width:100%;height:2px;position:fixed;inset:0 0 auto;overflow:hidden}.route-progress__bar{background:var(--site-accent);opacity:0;transform-origin:0;width:100%;height:100%;box-shadow:0 0 8px var(--site-accent);display:block;transform:scaleX(0)}@supports (color:color-mix(in lab,red,red)){.route-progress__bar{box-shadow:0 0 8px color-mix(in srgb,var(--site-accent)60%,transparent)}}.route-is-loading .route-progress__bar{opacity:1;transition:transform .8s cubic-bezier(.22,1,.36,1),opacity 80ms linear;transform:scaleX(.72)}.route-is-prepared .route-progress__bar{transition-duration:.12s;transform:scaleX(.9)}.route-is-complete .route-progress__bar{opacity:0;transition:transform .1s ease-out,opacity .14s linear 60ms;transform:scaleX(1)}.spotify-callback-page{padding-top:.875rem}.callback-panel{border:2px dashed var(--muted-border);background:var(--site-card-background);border-radius:.25rem;margin-top:1rem;padding:1rem}.callback-flow{gap:.25rem;display:grid}.callback-title{margin-top:.25rem;font-size:1.35rem;font-weight:700;line-height:1.75rem}.callback-step-label{color:#000;text-transform:uppercase;background:#1ed760;width:max-content;padding:0 .35rem;font-size:.75rem;font-weight:800;line-height:1.25rem}.callback-code{border:2px dashed var(--muted-border);background:var(--site-card-soft-background);white-space:nowrap;border-radius:.25rem;width:100%;max-width:100%;margin-top:1rem;padding:.75rem;font-size:.875rem;line-height:1.5;display:block;overflow-x:auto}.callback-meta{color:var(--foreground);margin-top:.75rem;font-size:.875rem;line-height:1.5}.callback-actions{flex-wrap:wrap;gap:.75rem 1rem;margin-top:1rem;display:flex}.callback-button{background:var(--foreground);width:max-content;max-width:100%;color:var(--background);font:inherit;border:2px dashed;border-radius:.25rem;justify-content:center;align-items:center;margin-top:1rem;padding:.55rem .85rem;font-weight:800;line-height:1.25rem;display:inline-flex}.callback-button:hover:not(:disabled){text-decoration:underline}.callback-button:disabled{cursor:not-allowed;opacity:.5}.callback-button--secondary{background:var(--site-card-background);color:var(--foreground);margin-top:0}.callback-status{border:2px dashed;border-radius:.25rem;margin-top:1rem;padding:.65rem .75rem;font-size:.9rem;line-height:1.45}.callback-status--success{color:var(--foreground);background:#dcfce7}.callback-status--error{color:var(--foreground);background:#fee2e2}.dark .callback-status--success{background:#052e16}.dark .callback-status--error{background:#450a0a}.callback-steps{gap:.5rem;margin-top:.75rem;padding-left:1.25rem;line-height:1.5;display:grid}.callback-link{margin-top:1rem}.not-found-page{place-items:center;width:100%;min-height:calc(100dvh - 9.5rem);padding:2rem 1rem 6rem;display:grid}.not-found-card{border:2px dashed var(--foreground);background:var(--site-card-background);text-align:center;width:min(100%,42rem);box-shadow:.65rem .65rem 0 var(--foreground);border-radius:.5rem;padding:clamp(1.25rem,5vw,2.5rem);position:relative}.not-found-code{justify-content:center;align-items:center;gap:clamp(.25rem,2vw,.75rem);font-family:Virgil,ui-sans-serif,system-ui,sans-serif;font-size:clamp(5rem,22vw,9rem);font-weight:700;line-height:.85;display:flex}.not-found-zero{border:.06em dashed;border-radius:999px 46% 999px 44%;place-items:center;width:.78em;height:.78em;font-size:0;display:grid;transform:rotate(-7deg)}.not-found-zero:after{content:"";background:var(--foreground);border-radius:999px;width:clamp(.8rem,3vw,1.35rem);height:clamp(.8rem,3vw,1.35rem)}.not-found-kicker{letter-spacing:.12em;text-transform:uppercase;margin-top:1.5rem;font-size:.75rem;font-weight:900;line-height:1rem}.not-found-title{margin-top:.35rem;font-family:Virgil,ui-sans-serif,system-ui,sans-serif;font-size:clamp(2rem,8vw,3.25rem);font-weight:700;line-height:1.05}.not-found-copy{max-width:34rem;margin:1rem auto 0;line-height:1.6}.not-found-path{overflow-wrap:anywhere;margin-top:1rem;font-size:.8rem;line-height:1.4}.not-found-path code{border:1px dashed;border-radius:.2rem;padding:.1rem .3rem}.not-found-actions{flex-wrap:wrap;justify-content:center;gap:.75rem;margin-top:1.5rem;display:flex}.not-found-link{border:2px solid var(--foreground);min-height:2.75rem;color:var(--foreground);border-radius:.3rem;justify-content:center;align-items:center;gap:.35rem;padding:.6rem .9rem;font-weight:800;text-decoration:none;display:inline-flex}.not-found-link:hover{text-decoration:underline}.not-found-link--primary{background:var(--foreground);color:var(--background)}.project-list{flex-direction:column;gap:.5rem;padding:1rem 0;display:flex}.project-card{border:2px dashed var(--muted-border);background:var(--site-card-background);width:100%;color:inherit;cursor:pointer;text-align:left;border-radius:.25rem;flex-direction:column;transition:border-color .15s,transform .15s;display:flex;position:relative;overflow:hidden}.project-card:hover{border-color:currentColor}.project-card:focus-within{outline-offset:3px;outline:3px solid}.project-card__overlay{z-index:5;background:0 0;border:0;position:absolute;inset:0}.project-card__header{flex-direction:column;gap:.15rem;width:100%;padding:1rem;display:flex}.project-image-frame{flex:none;width:100%;max-width:100%;overflow:hidden}.project-gallery{border-top:2px dashed var(--muted-border);border-bottom:2px dashed var(--muted-border);background:var(--site-card-soft-background);border-radius:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:.375rem;width:100%;min-height:220px;padding:.375rem;display:grid;overflow:hidden}.project-gallery__item{border:2px dashed var(--muted-border);aspect-ratio:16/10;background:#f5f5f5;border-radius:.25rem;min-width:0;position:relative;overflow:hidden}.project-gallery__item:before{content:"";z-index:1;opacity:1;background:linear-gradient(90deg,#eee,#fff,#eee 90%) 0 0/220% 100%;transition:opacity .18s;animation:1.15s ease-in-out infinite project-image-shimmer;position:absolute;inset:0}.project-gallery__item--loaded:before,.project-gallery__item--error:before{opacity:0;animation:none}.project-gallery__item:first-child{aspect-ratio:16/8;grid-column:1/-1}.project-gallery__image{z-index:2;object-fit:cover;object-position:top center;opacity:0;transition:opacity .18s}.project-gallery__item:not(.project-gallery__item--native) .project-gallery__image{width:100%;height:100%;position:absolute;inset:0}.project-gallery__item--contain{background:#fff}.project-gallery__item--contain .project-gallery__image{object-fit:contain}.project-gallery__item--native{place-items:center;line-height:0;display:grid}.project-gallery__item--native .project-gallery__image{object-fit:contain}.project-gallery__image--native{width:auto;max-width:100%;height:auto;max-height:min(72dvh,48rem);display:block}.project-gallery__item--loaded .project-gallery__image{opacity:1}.dark .project-gallery{background:var(--site-card-soft-background)}.dark .project-gallery__item{background:#1d1d1d}.dark .project-gallery__item--contain{background:#111}.dark .project-gallery__item:before{background:linear-gradient(90deg,#262626,#3a3a3a,#262626 90%) 0 0/220% 100%}@keyframes project-image-shimmer{0%{background-position:120% 0}to{background-position:-120% 0}}@media(prefers-reduced-motion:reduce){.project-gallery__item:before{animation:none}}.project-visual{aspect-ratio:16/9;border-top:2px dashed var(--muted-border);border-bottom:2px dashed var(--muted-border);border-radius:0;flex-direction:column;width:100%;min-height:220px;padding:1rem;display:flex;position:relative;overflow:hidden}.project-visual--amber{color:var(--foreground);background:#fef3c7}.project-visual--blue{color:var(--foreground);background:#e0e7ff}.project-visual--green{color:var(--foreground);background:#d1fae5}.dark .project-visual--amber{background:#451a03}.dark .project-visual--blue{background:#1e1b4b}.dark .project-visual--green{background:#064e3b}.project-visual__topbar{gap:.375rem;display:flex}.project-visual__topbar span{border:2px solid;border-radius:999px;width:.625rem;height:.625rem}.project-visual__body{flex:1;grid-template-columns:minmax(0,1fr) minmax(5rem,34%);gap:.75rem;padding-top:1rem;display:grid}.project-visual__panel{background:#ffffff61;border:2px dashed;border-radius:.25rem}.project-visual__panel--main{min-height:8rem}.project-visual__stack{gap:.75rem;display:grid}.project-visual__panel--short{min-height:3rem}.project-visual__label{font-family:Virgil,ui-sans-serif,system-ui,sans-serif;font-size:1.75rem;font-weight:700;line-height:1;position:absolute;bottom:.75rem;right:1rem}.project-content{flex-direction:column;width:100%;padding:1rem;display:flex}.project-title{font-size:1.5rem;font-weight:700;line-height:2rem}.project-card:hover .project-title{text-decoration:underline}.project-date{font-size:.875rem;line-height:1.25rem}.project-description{line-height:1.5}.project-highlights{gap:.4rem;margin-top:.75rem;padding-left:1.15rem;line-height:1.45;display:grid}.project-highlights li{padding-left:.2rem}.project-highlights li::marker{color:var(--foreground)}.tag-list{flex-wrap:wrap;gap:.25rem .5rem;margin-top:.5rem;display:flex}.tag{text-transform:uppercase;color:#000;border:1px solid #0000001f;border-radius:.125rem;padding:0 .25rem;font-size:.75rem;font-weight:700;line-height:1rem}.tag-yellow{background:#fcd34d}.tag-blue{background:#93c5fd}.tag-green{background:#6ee7b7}.tag-purple{background:#c4b5fd}.tag-pink{background:#f9a8d4}.tag-cyan{background:#67e8f9}.tag-orange{background:#fdba74}.tag-red{background:#fca5a5}.dark .tag-yellow{background:#92400e}.dark .tag-blue{background:#1e40af}.dark .tag-green{background:#065f46}.dark .tag-purple{background:#5b21b6}.dark .tag-pink{background:#9d174d}.dark .tag-cyan{background:#155e75}.dark .tag-orange{background:#9a3412}.dark .tag-red{background:#991b1b}.dark .tag{color:#fff;border-color:#ffffff26}.project-links{flex-wrap:wrap;gap:.75rem 1rem;margin-top:1rem;display:flex}.project-link{align-items:center;gap:.3rem;font-size:1.125rem;font-weight:700;line-height:1.75rem;text-decoration:none;display:inline-flex}.project-modal .project-link{color:inherit}.project-link:hover{text-decoration:underline}.project-link__icon{width:1em;height:1em}.project-detail-cta{width:max-content;color:var(--foreground);text-underline-offset:2px;margin-top:1rem;font-size:1.125rem;font-weight:700;line-height:1.75rem;text-decoration:underline}.project-modal-backdrop{z-index:80;background:#00000080;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.project-modal{border:2px dashed var(--muted-border);background:var(--site-card-background);width:min(100%,56rem);max-height:min(88dvh,56rem);color:var(--foreground);border-radius:.5rem;padding:1rem;overflow-y:auto;box-shadow:0 25px 50px -12px #00000059}.project-modal:focus{outline:none}.project-modal__header{justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.project-modal__title{margin-top:.1rem;font-size:2rem;font-weight:700;line-height:1.1}.project-modal__close{border:2px dashed var(--muted-border);background:var(--site-card-soft-background);width:2.25rem;height:2.25rem;color:inherit;border-radius:.25rem;flex:none;place-items:center;display:grid}.project-modal__close:hover{border-color:currentColor}.project-modal__close-icon{width:1.1rem;height:1.1rem}.project-modal__description{margin-top:.75rem;line-height:1.55}.project-gallery--modal{border:2px dashed var(--muted-border);border-radius:.25rem;grid-template-columns:minmax(0,1fr);margin-top:1rem}.project-gallery--modal .project-gallery__item,.project-gallery--modal .project-gallery__item:first-child{aspect-ratio:16/9}.project-gallery--modal .project-gallery__item--native,.project-gallery--modal .project-gallery__item--native:first-child{aspect-ratio:auto}.project-mobile-gallery{border:2px dashed var(--muted-border);background:var(--site-card-soft-background);border-radius:.5rem;margin-top:1rem;overflow:hidden}.project-mobile-gallery__header{border-bottom:2px dashed var(--muted-border);align-items:flex-start;padding:.75rem .875rem;display:flex}.project-mobile-gallery__title{font-weight:800}.project-mobile-gallery__hint{color:var(--foreground);margin-top:.1rem;font-size:.8rem;line-height:1.35}.project-mobile-gallery__track{--project-phone-frame-width:clamp(13.5rem,68vw,16rem);overscroll-behavior-inline:contain;min-height:0;padding-block:1rem;padding-inline:max(1rem,calc((100% - var(--project-phone-frame-width))/2));scroll-padding-inline:max(1rem,calc((100% - var(--project-phone-frame-width))/2));scroll-snap-type:inline mandatory;scrollbar-color:var(--muted-border)transparent;scrollbar-width:thin;align-items:flex-start;gap:1rem;display:flex;overflow:auto hidden}.project-mobile-gallery__track:focus-visible{outline-offset:-3px;outline:3px solid}.project-mobile-gallery__track::-webkit-scrollbar{width:.55rem;height:.55rem}.project-browser-frame__viewport::-webkit-scrollbar{width:.55rem;height:.55rem}.project-mobile-gallery__track::-webkit-scrollbar-thumb{background:var(--muted-border);border-radius:999px}.project-browser-frame__viewport::-webkit-scrollbar-thumb{background:var(--muted-border);border-radius:999px}.project-mobile-gallery__controls{border-top:2px dashed var(--muted-border);justify-content:space-between;gap:.75rem;padding:.625rem .875rem;display:flex}.project-mobile-gallery__button{border:2px solid var(--muted-border);background:var(--site-card-background);min-width:5.5rem;color:inherit;font:inherit;border-radius:.3rem;padding:.45rem .75rem;font-size:.875rem;font-weight:800}.project-mobile-gallery__button:hover:not(:disabled){border-color:currentColor}.project-mobile-gallery__button:focus-visible{outline-offset:2px;outline:3px solid}.project-mobile-gallery__button:disabled{cursor:not-allowed;opacity:.4}.project-phone-frame{width:var(--project-phone-frame-width);scroll-snap-align:center;scroll-snap-stop:always;background:#171717;border:2px solid #262626;border-radius:1.75rem;flex:none;padding:1.15rem .45rem .55rem;position:relative;box-shadow:0 18px 34px -22px #000c,inset 0 0 0 1px #ffffff14}.project-phone-frame__speaker{background:#525252;border-radius:999px;width:2.75rem;height:.25rem;position:absolute;top:.55rem;left:50%;transform:translate(-50%)}.project-phone-frame__screen{background:#050505;border-radius:1.2rem;line-height:0;position:relative;overflow:hidden}.project-phone-frame__screen:before,.project-browser-frame__viewport:before{content:"";z-index:1;opacity:1;background:linear-gradient(90deg,#262626,#3a3a3a,#262626 90%) 0 0/220% 100%;transition:opacity .18s;animation:1.15s ease-in-out infinite project-image-shimmer;position:absolute;inset:0}.project-phone-frame--loaded .project-phone-frame__screen:before,.project-phone-frame--error .project-phone-frame__screen:before,.project-browser-frame--loaded .project-browser-frame__viewport:before,.project-browser-frame--error .project-browser-frame__viewport:before{opacity:0;animation:none}.project-phone-frame__image,.project-browser-frame__image{z-index:2;opacity:0;width:100%;height:auto;transition:opacity .18s;display:block;position:relative}.project-phone-frame--loaded .project-phone-frame__image,.project-browser-frame--loaded .project-browser-frame__image{opacity:1}.project-browser-frame{border:2px solid var(--muted-border);background:var(--site-card-background);border-radius:.5rem;width:100%;overflow:hidden}.project-browser-frame__toolbar{border-bottom:2px solid var(--muted-border);background:var(--site-card-soft-background);align-items:center;gap:.3rem;height:2rem;padding:0 .65rem;display:flex}.project-browser-frame__toolbar>span:not(.project-browser-frame__address){background:var(--muted-border);border-radius:999px;flex:none;width:.55rem;height:.55rem}.project-browser-frame__address{background:var(--muted-border);opacity:.7;border-radius:999px;flex:1;height:.65rem}.project-browser-frame__viewport{overscroll-behavior:contain;scrollbar-color:var(--muted-border)transparent;scrollbar-width:thin;background:#fff;height:clamp(20rem,62dvh,36rem);position:relative;overflow-y:auto}.project-browser-frame__viewport:focus-visible{outline:3px solid var(--foreground);outline-offset:-3px}.dark .project-browser-frame__viewport{background:#111}@media(prefers-reduced-motion:reduce){.project-phone-frame__screen:before,.project-browser-frame__viewport:before{animation:none}}.timeline-list{gap:0;margin:1rem 0 0;padding:0;list-style:none;display:grid}.timeline-item{grid-template-columns:1.4rem minmax(0,1fr);column-gap:.75rem;padding-bottom:.875rem;display:grid;position:relative}.timeline-item:last-child{padding-bottom:0}.timeline-item:before,.timeline-marker:before{content:"";position:absolute}.timeline-item:before{border-left:2px dashed var(--muted-border);top:.45rem;bottom:-.45rem;left:.63rem}.timeline-item:last-child:before{bottom:calc(100% - 1.75rem)}.timeline-marker{z-index:1;justify-content:center;align-items:flex-start;padding-top:.95rem;display:flex;position:relative}.timeline-marker:before{z-index:1;background:var(--site-background);border:2px solid;border-radius:999px;width:.9rem;height:.9rem;top:1.08rem;left:50%;transform:translate(-50%)}.timeline-item--current .timeline-marker:before{background:#6ee7b7;border-color:#047857}.dark .timeline-item--current .timeline-marker:before{background:#064e3b;border-color:#6ee7b7}.timeline-period{width:max-content;color:var(--foreground);text-transform:uppercase;white-space:nowrap;font-size:.75rem;font-weight:800;line-height:1rem;display:none;position:absolute;top:2.15rem;left:50%;transform:translate(-50%)}.timeline-period--card{white-space:normal;width:auto;margin-right:auto;display:block;position:static;transform:none}.timeline-card{border:2px dashed var(--muted-border);background:var(--site-card-background);border-radius:.25rem;flex-direction:column;min-width:0;padding:1rem;transition:border-color .15s,box-shadow .15s,transform .15s;display:flex;position:relative;box-shadow:0 16px 30px -26px #00000073}.timeline-card:before{content:"";background:#d4d4d4;border-radius:999px;width:.25rem;position:absolute;inset:.5rem auto .5rem .5rem}.timeline-item--current .timeline-card:before{background:#6ee7b7}.timeline-card:hover{border-color:currentColor;transform:translateY(-1px);box-shadow:0 22px 36px -30px #0000008c}.timeline-card__topline{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem;min-height:1.35rem;padding-left:.85rem;display:flex}.timeline-index{border:2px dashed var(--muted-border);color:var(--foreground);text-transform:uppercase;border-radius:.125rem;align-items:center;padding:0 .35rem;font-size:.72rem;font-weight:900;line-height:1.2rem;display:inline-flex}.dark .timeline-index{background:#262626}.timeline-chip{border:2px dashed var(--muted-border);color:var(--foreground);text-transform:uppercase;background:#f5f5f5;border-radius:.125rem;padding:0 .35rem;font-size:.72rem;font-weight:800;line-height:1.2rem}.timeline-chip--current{background:#d1fae5;border-color:#6ee7b7}.dark .timeline-chip{background:#262626}.dark .timeline-chip--current{background:#064e3b;border-color:#047857}.timeline-card__heading{gap:.1rem;margin-top:.55rem;padding-left:.85rem;display:grid}.timeline-role{font-size:1.45rem;font-weight:700;line-height:1.9rem}.timeline-company{border-bottom:2px dashed var(--muted-border);overflow-wrap:break-word;width:max-content;max-width:100%;font-weight:800;line-height:1.35}.timeline-company-detail{max-width:44rem;color:var(--foreground);font-size:.88rem;line-height:1.4}.timeline-location{color:var(--foreground);margin-top:.65rem;padding-left:.85rem;font-size:.875rem;line-height:1.25rem}.timeline-summary{margin-top:.75rem;padding-left:.85rem;line-height:1.55}.timeline-highlights{gap:.35rem;margin-top:.75rem;padding-left:2rem;line-height:1.45;display:grid}.timeline-highlights li{padding-left:.2rem}.timeline-highlights li::marker{color:var(--foreground)}.timeline-card .tag-list{margin-top:.75rem;padding-left:.85rem}.latest-song-section{margin-top:2rem}.latest-song-card{border:2px dashed var(--muted-border);background:var(--site-card-background);width:100%;color:var(--foreground);border-radius:.25rem;grid-template-columns:7rem minmax(0,1fr);display:grid;overflow:hidden}.prose-clone .latest-song-card h2,.prose-clone .latest-song-card p{margin:0}.latest-song-artwork-frame{border-right:2px dashed var(--muted-border);width:100%;min-height:100%;color:var(--foreground);background:#d1fae5;place-items:center;display:grid;position:relative;overflow:hidden}.dark .latest-song-artwork-frame{background:#064e3b}.latest-song-card--skeleton .latest-song-artwork-frame{background:var(--site-card-soft-background);color:#0000}.latest-song-artwork{object-fit:cover;width:100%;height:100%}.latest-song-artwork--placeholder{justify-content:center;align-items:center;display:flex}.latest-song-artwork__icon{width:1.5rem;height:1.5rem}.latest-song-content{flex-direction:column;gap:.15rem;width:100%;min-width:0;padding:.75rem;display:flex}.latest-song-kicker{color:var(--foreground);letter-spacing:0;text-transform:uppercase;font-size:.7rem;font-weight:800;line-height:1rem}.latest-song-title{text-overflow:ellipsis;white-space:nowrap;font-size:1rem;font-weight:700;line-height:1.25;overflow:hidden}.latest-song-artist{color:var(--foreground);text-overflow:ellipsis;white-space:nowrap;font-size:.85rem;font-weight:700;line-height:1.2rem;overflow:hidden}.latest-song-album{color:var(--foreground);text-overflow:ellipsis;white-space:nowrap;font-size:.8rem;line-height:1.15rem;overflow:hidden}.latest-song-progress{background:#d4d4d4;border-radius:999px;width:100%;height:.25rem;margin-top:.35rem;overflow:hidden}.latest-song-progress span{width:var(--latest-song-progress,0%);background:#1ed760;height:100%;display:block}.dark .latest-song-progress{background:#525252}.latest-song-meta{text-overflow:ellipsis;white-space:nowrap;margin-top:.25rem;font-size:.78rem;line-height:1rem;overflow:hidden}.latest-song-link{width:max-content;color:inherit;margin-top:.35rem;font-size:.95rem;line-height:1.25rem}.latest-song-link:hover{text-decoration:underline}.about-container{width:100%;max-width:min(48rem,100%);margin:0 auto;padding:0 .5rem}.about-photo-wrap{width:min(var(--about-photo-max-width,320px),72vw);aspect-ratio:var(--about-photo-frame-aspect-ratio,1678/1787);margin:0 auto;position:relative}.about-photo-placeholder{background:radial-gradient(circle at 52% 32%,var(--site-accent)0 20%,transparent 48%),linear-gradient(145deg,var(--site-card-soft-background),var(--site-accent));position:absolute;inset:0}@supports (color:color-mix(in lab,red,red)){.about-photo-placeholder{background:radial-gradient(circle at 52% 32%,color-mix(in srgb,var(--site-accent)16%,var(--site-card-background))0 20%,transparent 48%),linear-gradient(145deg,var(--site-card-soft-background),color-mix(in srgb,var(--site-accent)8%,var(--site-card-background)))}}.about-photo-placeholder{opacity:1;clip-path:url(#blob);transition:opacity .16s ease-out;transform:scale(1.03)}.about-clip{width:0;height:0;position:absolute;overflow:hidden}.about-photo{object-fit:cover;object-position:center;-webkit-user-select:none;user-select:none;opacity:0;filter:blur(10px);clip-path:url(#blob);width:100%;height:100%;transition:opacity .1s ease-out,filter .18s ease-out,transform .18s ease-out;display:block;transform:scale(1.025)}.about-photo-wrap--loaded .about-photo{opacity:1;filter:blur();transform:scale(1)}.about-photo-wrap--loaded .about-photo-placeholder{opacity:0}.about-photo-wrap--error .about-photo{display:none}.prose-clone{z-index:20;width:100%;min-width:0;max-width:100%;color:var(--foreground);overflow-wrap:break-word;margin-top:-2rem;font-size:1rem;line-height:1.75;position:relative}.prose-clone h1{margin-top:2rem;margin-bottom:1rem;font-family:Virgil,ui-sans-serif,system-ui,sans-serif;font-size:1.875rem;font-weight:700;line-height:2.25rem}.prose-clone p{max-width:100%;margin-top:1.25rem;margin-bottom:1.25rem}.prose-clone ul{padding-left:1.625rem;list-style:outside}.prose-clone li{max-width:100%;padding-left:.375rem}.prose-clone li::marker{color:var(--foreground)}.about-contact .text-link{color:var(--foreground)}@media(max-width:767px){.site-main{overflow-x:clip}.home-section,.content-container,.about-container{max-width:100dvw}.home-section{justify-content:center;padding-top:2.5rem;padding-bottom:1.25rem}.home-copy,.home-description,.home-links,.prose-clone{max-width:calc(100dvw - 1rem)}.project-gallery--card{min-height:0}.project-gallery--card.project-gallery--count-1{grid-template-columns:minmax(0,1fr)}.project-gallery--card.project-gallery--count-1 .project-gallery__item:first-child{aspect-ratio:16/9;grid-column:auto}.project-gallery--card.project-gallery--count-2 .project-gallery__item,.project-gallery--card.project-gallery--count-4 .project-gallery__item{aspect-ratio:1}.project-gallery--card.project-gallery--count-2 .project-gallery__item:first-child,.project-gallery--card.project-gallery--count-4 .project-gallery__item:first-child{aspect-ratio:1;grid-column:auto}.project-gallery--card.project-gallery--count-3 .project-gallery__item:first-child{aspect-ratio:16/8}.project-gallery--card.project-gallery--count-3 .project-gallery__item:not(:first-child){aspect-ratio:1}.site-footer{width:calc(100dvw - 1rem);margin:0 auto;padding-left:0;padding-right:0}}@media(min-width:768px){.desktop-header,.theme-toggle{display:flex}.bottom-nav{display:none}.site-main{padding-top:52px}.site-footer{white-space:nowrap;padding-bottom:.75rem}.home-section{flex-direction:row;justify-content:space-between;min-height:calc(100vh - 92px);overflow:visible}.home-copy{text-align:left;align-items:flex-start;width:auto}.home-title{font-size:2.25rem;line-height:2.5rem}.home-description{font-size:1.125rem;line-height:1.75rem}.home-portrait{width:400px}.home-portrait-scribble{bottom:-50px;left:50px;transform:scale(1)}.brush-toolbar{top:auto;bottom:39%}.projects-page,.timeline-page{padding-top:4.25rem;overflow:visible}.spotify-callback-page{padding-top:4.25rem}.page-heading{font-size:3.75rem;line-height:1}.project-card{grid-template-columns:minmax(0,1fr) minmax(0,1fr);display:grid}.project-card__header{grid-area:1/2;padding:1rem 1rem .25rem}.project-image-frame{grid-area:1/1/span 2;width:100%;display:flex}.project-visual{border-top:0;border-right:2px dashed var(--muted-border);border-bottom:0;border-radius:.25rem 0 0 .25rem}.project-gallery{border-top:0;border-right:2px dashed var(--muted-border);border-bottom:0;border-radius:.25rem 0 0 .25rem;flex:1}.project-gallery--modal{border:2px dashed var(--muted-border);border-radius:.25rem}.project-content{grid-area:2/2;width:100%;padding-top:.5rem}.project-title{font-size:2.25rem;line-height:2.5rem}.timeline-list{margin-top:1.25rem}.timeline-item{grid-template-columns:8.25rem minmax(0,1fr);column-gap:1.25rem;padding-bottom:1rem}.timeline-item:before{top:0;bottom:-.65rem;left:8.25rem}.timeline-item:last-child:before{bottom:calc(100% - 2.2rem)}.timeline-marker{text-align:right;justify-content:flex-end;padding-top:1rem}.timeline-marker:before{width:1rem;height:1rem;top:1.2rem;left:auto;right:-.5rem;transform:none}.timeline-period{white-space:normal;max-width:6.6rem;margin-right:1.5rem;position:static;transform:none}.timeline-period--marker{display:block}.timeline-period--card{display:none}.timeline-card{padding:1.25rem}.timeline-card:before{inset:.7rem auto .7rem .7rem}.timeline-card__topline,.timeline-card__heading,.timeline-location,.timeline-summary,.timeline-card .tag-list{padding-left:1rem}.timeline-role{font-size:1.875rem;line-height:2.25rem}.latest-song-card{grid-template-columns:9rem minmax(0,1fr)}.latest-song-content{padding:.875rem}.latest-song-title{font-size:1.1rem}.about-container{padding-top:3.25rem}}@media(min-width:1024px){.content-container,.home-section{padding-left:0;padding-right:0}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media(prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}
