.footer{margin-top:auto;padding:var(--space-8) 0 var(--space-16)}.footer__container{display:flex;flex-direction:column;gap:var(--space-2);padding-top:var(--space-6)}.footer__row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);flex-wrap:wrap}.footer__copyright{font-size:var(--text-sm);color:var(--color-text-tertiary)}.footer__links{display:flex}.footer__link{position:relative;z-index:calc(10 - var(--i, 0));display:flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:var(--radius-full);background:var(--color-surface);border:1px solid var(--color-border);color:var(--color-text-tertiary);margin-left:-20px;transition:margin-left var(--duration-base) var(--ease-spring),transform var(--transition-fast),color var(--transition-fast);transition-delay:calc(var(--i, 0) * 12ms),0ms,0ms}.footer__link:first-child{margin-left:0}.footer__links:hover .footer__link,.footer__links:focus-within .footer__link{margin-left:var(--space-1)}.footer__links:hover .footer__link:first-child,.footer__links:focus-within .footer__link:first-child{margin-left:0}.footer__link:hover,.footer__link:focus-visible{color:var(--color-text);transform:translateY(-2px);z-index:11}@media(hover:none){.footer__link{margin-left:var(--space-1)}.footer__link:first-child{margin-left:0}}.avatar-pill{position:fixed;top:var(--space-4);right:var(--space-4);z-index:var(--z-overlay);display:inline-flex;align-items:center;height:calc(var(--text-sm) * 1.5 + var(--space-2) * 2 + 2px);padding:0 4px;border:1px solid var(--color-border);border-radius:var(--radius-full);background:var(--color-header-bg);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);text-decoration:none;cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast)}.avatar-pill:hover{background:var(--color-bg-subtle);border-color:var(--color-border-subtle)}.avatar-pill:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.avatar-pill__img{width:28px;height:28px;border-radius:var(--radius-full);object-fit:cover;flex-shrink:0}.avatar-pill__name{max-width:0;padding-left:0;padding-right:0;overflow:hidden;opacity:0;font-family:var(--font-family);font-size:var(--text-sm);font-weight:var(--font-medium);white-space:nowrap;color:var(--color-text);transition:max-width var(--transition-base),padding-left var(--transition-base),padding-right var(--transition-base),opacity var(--transition-base)}.avatar-pill:hover .avatar-pill__name{max-width:8rem;opacity:1;padding-left:var(--space-2);padding-right:var(--space-2)}@media(prefers-reduced-motion:reduce){.avatar-pill,.avatar-pill__name{transition:none}}.page-nav-back{position:fixed;top:var(--space-4);left:var(--space-4);z-index:var(--z-overlay);display:inline-flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-full);background:var(--color-header-bg);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);color:var(--color-text-secondary);font-family:var(--font-family);font-size:var(--text-sm);font-weight:var(--font-medium);cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast)}.page-nav-back:hover{background:var(--color-bg-subtle);border-color:var(--color-border-subtle)}.page-nav-back:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.page-nav-back__arrow{font-size:1.1em}.resume-btn{display:inline-flex;align-items:center;gap:var(--space-1);cursor:pointer;border:1px solid var(--color-border-subtle);background-color:var(--color-gray-100);color:var(--color-text);border-radius:var(--radius-full);font-family:inherit;font-size:var(--text-sm);font-weight:var(--font-medium);padding:calc(var(--space-2) - 1px) calc(var(--space-3) - 1px);transition:background-color var(--transition-fast),border-color var(--transition-fast),opacity var(--transition-fast)}.resume-btn:hover{background-color:var(--color-gray-200);border-color:var(--color-gray-300);color:var(--color-text)}.resume-btn:disabled{opacity:.5;cursor:wait}.resume-btn__icon{flex-shrink:0;transition:transform var(--transition-fast)}.resume-btn:hover .resume-btn__icon{transform:translateY(2px)}.resume-btn__label--full{display:none}@media(max-width:1024px){.resume-btn__label--short{display:none}.resume-btn__label--full{display:inline}}.book-cta{display:inline-flex;align-items:center;justify-content:center;gap:7px;cursor:pointer;border:none;background-color:var(--color-text);color:var(--color-bg);border-radius:var(--radius-full);font-family:inherit;font-size:var(--text-sm);font-weight:var(--font-medium);letter-spacing:-.005em;padding:var(--space-2) var(--space-3);white-space:nowrap;transition:background-color var(--transition-fast),transform 50ms var(--ease-out)}.book-cta:hover{background-color:var(--color-gray-800)}.book-cta:active{transform:translateY(.5px)}.book-cta__label{display:inline-block}.book-cta__dot{position:relative;width:8px;height:8px;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.book-cta__dot-core{position:relative;z-index:2;width:8px;height:8px;border-radius:var(--radius-full);background:#22c55e;box-shadow:0 0 0 1.5px #22c55e59}.book-cta__dot-pulse{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:var(--radius-full);background:#22c55e;opacity:.55;z-index:1;animation:book-cta-pulse 2.4s cubic-bezier(.22,1,.36,1) infinite}@keyframes book-cta-pulse{0%{transform:scale(1);opacity:.55}70%{transform:scale(2.6);opacity:0}to{transform:scale(2.6);opacity:0}}@media(prefers-reduced-motion:reduce){.book-cta__dot-pulse{animation:none;opacity:0}}.book-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-modal);background:#0000008c;display:flex;align-items:center;justify-content:center;padding:var(--space-6);animation:book-modal-fade .2s var(--ease-out)}@keyframes book-modal-fade{0%{opacity:0}to{opacity:1}}.book-modal__panel{width:100%;max-width:1024px;height:100%;max-height:720px;background:var(--color-white);border-radius:18px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 24px 80px #0000004d}.book-modal__header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--color-border);flex-shrink:0}.book-modal__title{display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-sm);font-weight:var(--font-semibold);color:var(--color-text)}.book-modal__title svg{color:var(--color-text-tertiary)}.book-modal__close{width:32px;height:32px;border-radius:var(--radius-full);border:none;background:transparent;color:var(--color-text-tertiary);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:background-color var(--transition-fast),color var(--transition-fast)}.book-modal__close:hover{background-color:var(--color-gray-100);color:var(--color-text)}.book-modal__body{flex:1;overflow:hidden;background:var(--color-white)}.book-modal__frame{width:100%;height:100%;border:0;display:block}@media(max-width:768px){.book-modal{padding:var(--space-3)}.book-modal__panel{border-radius:var(--radius-lg)}}.pasito-container{--pill-dot-size: 8px;--pill-active-width: 24px;--pill-gap: 6px;--pill-duration: .5s;--pill-easing: cubic-bezier(.215, .61, .355, 1);--pill-bg: rgba(0, 0, 0, .12);--pill-active-bg: rgba(0, 0, 0, .8);--pill-fill-bg: rgba(255, 255, 255, .45);--pill-container-bg: rgba(0, 0, 0, .04);--pill-container-radius: 999px;--pill-container-border: rgba(0, 0, 0, .06);display:inline-flex;padding:6px 10px;background:var(--pill-container-bg);border-radius:var(--pill-container-radius);border:1px solid var(--pill-container-border);overflow:hidden}.pasito-track{display:flex;align-items:center;margin-left:calc(-1 * var(--pill-gap));transition:transform var(--pill-duration) var(--pill-easing)}.pasito-vertical .pasito-track{flex-direction:column;margin-left:0;margin-top:calc(-1 * var(--pill-gap))}.pasito-step{position:relative;width:var(--pill-dot-size);height:var(--pill-dot-size);border-radius:999px;border:none;padding:0;cursor:pointer;background:var(--pill-bg);flex-shrink:0;overflow:hidden;margin-left:var(--pill-gap);margin-top:0;transform-origin:center center;transition:width var(--pill-duration) var(--pill-easing),height var(--pill-duration) var(--pill-easing),background var(--pill-duration) var(--pill-easing),opacity var(--pill-duration) var(--pill-easing),transform var(--pill-duration) var(--pill-easing),margin-left var(--pill-duration) var(--pill-easing),margin-top var(--pill-duration) var(--pill-easing)}.pasito-vertical .pasito-step{margin-left:0;margin-top:var(--pill-gap)}.pasito-step:focus-visible{outline:2px solid rgba(0,0,0,.3);outline-offset:2px}.pasito-step-active{width:var(--pill-active-width);background:var(--pill-active-bg)}.pasito-vertical .pasito-step-active{width:var(--pill-dot-size);height:var(--pill-active-width)}.pasito-step:after{content:"";position:absolute;top:0;left:0;bottom:0;width:0;border-radius:inherit;background:var(--pill-fill-bg);pointer-events:none}.pasito-vertical .pasito-step:after{right:0;bottom:auto;width:auto;height:0}.pasito-step-filling:after{width:100%;transition:width var(--pill-fill-duration, 3s) linear}.pasito-vertical .pasito-step-filling:after{width:auto;height:100%;transition:height var(--pill-fill-duration, 3s) linear}.pasito-entering{width:0;margin-left:0;margin-top:0;opacity:0;transform:scale(0);transition-duration:.25s}.pasito-vertical .pasito-entering{width:var(--pill-dot-size);height:0}.pasito-exiting{width:0;margin-left:0;margin-top:0;opacity:0;transform:scale(0);transition-duration:.25s}.pasito-vertical .pasito-exiting{width:var(--pill-dot-size);height:0}@media(prefers-reduced-motion:reduce){.pasito-step,.pasito-track{transition-duration:0ms!important}.pasito-step-filling:after{transition-duration:0ms!important}}.hero-carousel{position:relative;margin:0 0 var(--space-8)}.hero-carousel .pasito-container{--pill-bg: rgba(255, 255, 255, .3);--pill-active-bg: rgba(255, 255, 255, .9);--pill-fill-bg: rgba(255, 255, 255, .45);--pill-container-bg: rgba(0, 0, 0, .2);--pill-container-border: transparent;--pill-dot-size: 8px;--pill-active-width: 28px;--pill-gap: 8px;height:32px;min-height:32px;display:flex;align-items:center;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}.hero-carousel .pasito-step{height:8px;min-height:8px;display:inline-flex;align-items:center}.hero-carousel--single{display:block;width:100%;padding:0;border:0;background:transparent;cursor:zoom-in;border-radius:var(--radius-md);overflow:hidden}.hero-carousel--single .hero-carousel__image{position:static;opacity:1}.hero-carousel--single:focus-visible{outline:2px solid var(--color-accent);outline-offset:4px}.hero-carousel__image-button{display:block;width:100%;padding:0;border:0;background:transparent;cursor:zoom-in;border-radius:var(--radius-md);overflow:hidden;position:relative;z-index:1;transition:aspect-ratio .4s ease}@media(prefers-reduced-motion:reduce){.hero-carousel__image-button{transition:none}}.hero-carousel__image-button:focus-visible{outline:2px solid var(--color-accent);outline-offset:4px}.hero-carousel__frame{position:relative;width:100%;height:100%;background:var(--color-bg-subtle)}.hero-carousel__image{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;display:block;opacity:0;transition:opacity .4s ease}.hero-carousel__image--active{opacity:1}.hero-carousel__steps{position:absolute;left:50%;bottom:var(--space-3);transform:translate(-50%);z-index:2;display:flex;align-items:center;justify-content:center;gap:var(--space-3)}.hero-carousel .pasito-step:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px}.hero-carousel__nav{width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:999px;background:#0003;color:#ffffffe6;cursor:pointer;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);transition:background .2s ease,color .2s ease}.hero-carousel__nav:hover{background:#0000004d;color:#fff}.hero-carousel__nav:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px}@media(prefers-reduced-motion:reduce){.hero-carousel__image{transition:none}}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-modal);display:flex;align-items:center;justify-content:center;user-select:none;-webkit-user-select:none}.lightbox__backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background-color:#000000f2;animation:fadeIn var(--duration-fast) var(--ease-out)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.lightbox__close{position:absolute;top:var(--space-4);right:var(--space-4);z-index:1;width:44px;height:44px;display:flex;align-items:center;justify-content:center;color:var(--color-static-white);opacity:.7;transition:opacity var(--transition-fast);border-radius:var(--radius-full)}.lightbox__close:hover{opacity:1}.lightbox__content{position:relative;display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:var(--space-16) var(--space-4) var(--space-24)}@media(min-width:768px){.lightbox__content{padding:var(--space-16) var(--space-16) var(--space-24)}}.lightbox__image-container{position:relative;max-width:100%;max-height:100%;display:flex;align-items:center;justify-content:center}.lightbox__image{max-width:100%;max-height:calc(100vh - 12rem);object-fit:contain;border-radius:var(--radius-sm);animation:scaleIn var(--duration-base) var(--ease-out);cursor:zoom-in;transition:transform var(--transition-base)}.lightbox__image--zoomed{transform:scale(2);cursor:zoom-out}@keyframes scaleIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.lightbox__nav{position:absolute;top:50%;transform:translateY(-50%);z-index:1;width:48px;height:48px;display:flex;align-items:center;justify-content:center;color:var(--color-static-white);background-color:#ffffff1a;border-radius:var(--radius-full);opacity:.7;transition:opacity var(--transition-fast),background-color var(--transition-fast)}.lightbox__nav:hover{opacity:1;background-color:#fff3}.lightbox__nav--prev{left:var(--space-4)}.lightbox__nav--next{right:var(--space-4)}@media(min-width:768px){.lightbox__nav--prev{left:var(--space-8)}.lightbox__nav--next{right:var(--space-8)}}.lightbox__footer{position:absolute;bottom:var(--space-6);left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:var(--space-2);width:calc(100% - var(--space-16));max-width:640px;text-align:center;pointer-events:none}.lightbox__description{font-size:var(--text-sm);color:var(--color-static-white);opacity:.8;line-height:1.5;margin:0}.lightbox__counter{font-size:var(--text-sm);color:var(--color-static-white);opacity:.5}@media(prefers-reduced-motion:reduce){.lightbox__backdrop,.lightbox__image{animation:none}}.home-showcase .hero-carousel{margin-bottom:0}.home{display:flex;flex-direction:column;gap:var(--space-16);padding-bottom:var(--space-20)}.home__identity{display:flex;align-items:center;gap:var(--space-3)}.home__avatar{width:44px;height:44px;border-radius:var(--radius-full);object-fit:cover;flex-shrink:0}.home__identity-text{display:flex;flex-direction:column}.home__name{font-size:var(--text-base);font-weight:var(--font-medium);color:var(--color-text)}.home__title{font-size:var(--text-base);font-weight:var(--font-medium);color:var(--color-text-secondary)}.home__bio{margin-top:var(--space-6);font-size:var(--text-base);color:var(--color-text-secondary)}.home__bio+.home__bio{margin-top:var(--space-3)}.home__bio a{color:var(--color-text);text-decoration:underline;text-underline-offset:2px;text-decoration-color:var(--color-gray-300);transition:text-decoration-color var(--transition-fast)}.home__bio a:hover{text-decoration-color:var(--color-text)}.home__bio strong{color:var(--color-text);font-weight:var(--font-medium)}.home__actions{display:flex;align-items:center;gap:var(--space-2);margin-top:var(--space-5)}.home__section-header{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:var(--space-4)}.home__section-title{font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--color-text-tertiary)}.home__section-link{font-size:var(--text-sm);color:var(--color-text-tertiary);text-decoration:none;transition:color var(--transition-fast)}.home__section-link:hover{color:var(--color-text)}.home__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}.home__list--interactive{position:relative;isolation:isolate}.home__highlight{position:absolute;top:0;inset-inline:calc(-1 * var(--space-3));height:0;border-radius:calc(var(--radius-sm) + var(--space-3));background-color:var(--color-surface);box-shadow:var(--shadow-border);opacity:0;pointer-events:none;z-index:-1;transition-property:opacity,transform,height;transition-duration:var(--duration-base);transition-timing-function:var(--ease-out)}.work-item{display:flex;align-items:baseline;gap:var(--space-3);padding-block:var(--space-2)}.work-item__company{font-weight:var(--font-medium);color:var(--color-text);text-decoration:none}a.work-item__company:hover{text-decoration:underline;text-underline-offset:2px}.work-item__role{font-size:var(--text-sm);color:var(--color-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.work-item__dates{margin-left:auto;flex-shrink:0;font-size:var(--text-sm);color:var(--color-text-tertiary)}.home-row{display:flex;align-items:center;gap:var(--space-4);padding:var(--space-3);margin-inline:calc(-1 * var(--space-3));border-radius:calc(var(--radius-sm) + var(--space-3));color:inherit;text-decoration:none}.home-row__thumb{width:56px;height:42px;object-fit:cover;border-radius:var(--radius-sm);flex-shrink:0}.home-row__text{display:flex;flex-direction:column;gap:var(--space-1);min-width:0}.home-row__title{font-weight:var(--font-medium);color:var(--color-text)}.home-row__caption{font-size:var(--text-sm);color:var(--color-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.home-row__meta{margin-left:auto;flex-shrink:0;font-size:var(--text-sm);color:var(--color-text-tertiary)}.home__skeleton{display:flex;flex-direction:column;gap:var(--space-4);padding-block:var(--space-2)}.home__skeleton-row{height:1.125rem;border-radius:var(--radius-sm)}.home__fallback{font-size:var(--text-sm);color:var(--color-text-secondary)}.home__fallback-link{color:var(--color-text-secondary);text-decoration:none;transition:color var(--transition-fast)}.home__fallback-link:hover{color:var(--color-text)}@media(max-width:480px){.work-item{flex-wrap:wrap}.work-item__role{flex-basis:100%;order:3;white-space:normal}.home-row__caption{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.tag{display:inline-block;padding:var(--space-1) var(--space-2);font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--color-text-secondary);background-color:var(--color-gray-100);border-radius:var(--radius-sm);white-space:nowrap}.video-hover-preview{position:fixed;width:320px;height:180px;z-index:var(--z-overlay);pointer-events:none;transform:translate(-50%,-50%);border-radius:var(--radius-md);overflow:hidden;box-shadow:var(--shadow-lg);will-change:left,top;opacity:0}.video-hover-preview--visible{animation:video-hover-fade-in var(--duration-fast) var(--ease-out) forwards}.video-hover-preview__video{width:100%;height:100%;object-fit:cover;display:block}@keyframes video-hover-fade-in{0%{opacity:0;transform:translate(-50%,-50%) scale(.95)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}@media(prefers-reduced-motion:reduce){.video-hover-preview--visible{animation:none;opacity:1;transform:translate(-50%,-50%)}}.post-image{position:relative;width:100%;overflow:hidden;border-radius:var(--radius-md);background-color:var(--color-gray-100);will-change:transform}.post-image--cursor-hidden{cursor:none}.post-image__placeholder{position:absolute;top:0;right:0;bottom:0;left:0}.post-image__img{display:block;width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity var(--transition-base),filter var(--transition-slow)}.post-image__img--loading{opacity:1;filter:blur(20px);transform:scale(1.05)}.post-image__img--loaded{opacity:1;filter:blur(0);transform:scale(1)}.post-image__error{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background-color:var(--color-gray-100);color:var(--color-text-tertiary);font-size:var(--text-sm)}.post-gallery{display:flex;flex-direction:column;gap:var(--space-8)}.post-gallery__figure{display:flex;flex-direction:column;gap:var(--space-3)}.post-gallery__button{display:block;width:100%;cursor:zoom-in;border-radius:var(--radius-md);transition:box-shadow var(--transition-slow)}.post-gallery__button:hover{box-shadow:var(--shadow-fancy)}.post-gallery__caption{font-size:var(--text-sm);color:var(--color-text-tertiary);line-height:var(--leading-relaxed)}.project-detail__body{max-width:var(--max-width-content);margin:0 auto;padding:var(--space-8) var(--content-padding) var(--space-16)}.project-detail__content{display:flex;flex-direction:column;gap:var(--space-6)}.project-detail__gallery-section{margin-top:var(--space-6)}.project-detail__title{font-size:var(--text-3xl);font-weight:var(--font-semibold);color:var(--color-text);letter-spacing:var(--tracking-tight)}.project-detail__caption{font-size:var(--text-lg);color:var(--color-text-secondary);line-height:var(--leading-relaxed)}.project-detail__tags{display:flex;flex-wrap:wrap;gap:var(--space-2)}.project-detail__description{font-size:var(--text-base);color:var(--color-text);line-height:var(--leading-relaxed);max-width:65ch;white-space:pre-line}.project-detail__callout{max-width:65ch;padding:var(--space-6) var(--space-8);background:var(--color-bg-subtle);border-left:3px solid var(--color-accent);border-radius:0 var(--radius-md) var(--radius-md) 0}.project-detail__callout p{font-size:var(--text-lg);font-style:italic;color:var(--color-text);line-height:var(--leading-relaxed);margin:0}.project-detail__meta{display:flex;flex-wrap:wrap;gap:var(--space-6)}.project-detail__meta-item{display:flex;flex-direction:column;gap:var(--space-1)}.project-detail__meta-label{font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:var(--tracking-wide)}.project-detail__meta-value{font-size:var(--text-sm);color:var(--color-text)}.project-detail__link{display:inline-flex;align-self:flex-start;align-items:center;gap:var(--space-1);font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--color-text);transition:gap var(--transition-fast)}.project-detail__link:hover{gap:var(--space-2)}.project-detail__link-arrow{transition:transform var(--transition-fast)}.project-detail__link:hover .project-detail__link-arrow{transform:translate(2px)}.project-detail__collaborators{display:flex;flex-direction:column;gap:var(--space-3)}.project-detail__collaborator-list{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-6)}.project-detail__collaborator{display:flex;flex-direction:column;gap:var(--space-1)}.project-detail__collaborator-name{font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--color-text)}.project-detail__collaborator-role{font-size:var(--text-xs);color:var(--color-text-secondary)}.project-detail__presentations{display:flex;flex-direction:column;gap:var(--space-3)}.project-detail__presentation-links{display:flex;flex-wrap:wrap;gap:var(--space-2)}.project-detail__presentation-link{display:inline-flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--color-text-secondary);text-decoration:none;background-color:var(--color-bg-subtle);border:1px solid var(--color-border);border-radius:var(--radius-full);transition:background-color var(--transition-fast),color var(--transition-fast)}.project-detail__presentation-link:hover{background-color:var(--color-gray-200);color:var(--color-text)}.project-detail__presentation-link svg{transition:transform var(--transition-fast)}.project-detail__presentation-link:hover svg{transform:translate(2px)}.project-detail__next{display:flex;flex-direction:column;gap:var(--space-2);padding-top:var(--space-8);border-top:var(--dashed-border)}.project-detail__next-label{font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:var(--tracking-wide)}.project-detail__next-title{display:inline-flex;align-items:center;gap:var(--space-2);font-size:var(--text-2xl);font-weight:var(--font-semibold);color:var(--color-text);letter-spacing:var(--tracking-tight);transition:color var(--transition-fast)}.project-detail__next-title svg{transition:transform var(--transition-fast)}.project-detail__next:hover .project-detail__next-title{color:var(--color-text-secondary)}.project-detail__next:hover .project-detail__next-title svg{transform:translate(4px)}.project-detail__next-preview{width:100%;max-width:280px;aspect-ratio:3/2;object-fit:cover;border-radius:var(--radius-md);opacity:0;transform:translateY(4px);transition:opacity var(--transition-base),transform var(--transition-base)}.project-detail__next:hover .project-detail__next-preview{opacity:1;transform:translateY(0)}@media(prefers-reduced-motion:reduce){.project-detail__next-preview{transform:none}}.feedback-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-modal);display:flex;align-items:flex-end;justify-content:center}@media(min-width:640px){.feedback-modal{align-items:center}}.feedback-modal__backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background-color:#0006;animation:feedback-fade-in var(--duration-fast) var(--ease-out)}@keyframes feedback-fade-in{0%{opacity:0}to{opacity:1}}.feedback-modal__panel{position:relative;width:100%;max-width:480px;max-height:90vh;overflow-y:auto;background-color:var(--color-white);border:1px solid var(--color-border);border-radius:var(--radius-lg) var(--radius-lg) 0 0;box-shadow:var(--shadow-lg);padding:var(--space-6);animation:feedback-slide-up var(--duration-base) var(--ease-out)}@media(min-width:640px){.feedback-modal__panel{border-radius:var(--radius-lg);margin:var(--space-4);animation:feedback-scale-in var(--duration-base) var(--ease-out)}}@keyframes feedback-slide-up{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes feedback-scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.feedback-modal__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-5)}.feedback-modal__title{font-size:var(--text-lg);font-weight:var(--font-semibold);color:var(--color-text);letter-spacing:var(--tracking-tight)}.feedback-modal__close{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-tertiary);cursor:pointer;transition:color var(--transition-fast),background-color var(--transition-fast)}.feedback-modal__close:hover{color:var(--color-text);background-color:var(--color-gray-100)}.feedback-modal__form{display:flex;flex-direction:column;gap:var(--space-4)}.feedback-modal__honeypot{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.feedback-modal__field{display:flex;flex-direction:column;gap:var(--space-2);position:relative}.feedback-modal__label{font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--color-text)}.feedback-modal__optional{font-weight:var(--font-normal);color:var(--color-text-tertiary)}.feedback-modal__textarea,.feedback-modal__input{width:100%;padding:var(--space-3);font-family:var(--font-family);font-size:var(--text-sm);color:var(--color-text);background-color:var(--color-bg-subtle);border:1px solid var(--color-border);border-radius:var(--radius-md);transition:border-color var(--transition-fast);outline:none}.feedback-modal__textarea:focus,.feedback-modal__input:focus{border-color:var(--color-accent)}.feedback-modal__textarea{resize:vertical;min-height:120px;line-height:var(--leading-relaxed)}.feedback-modal__textarea::placeholder,.feedback-modal__input::placeholder{color:var(--color-text-tertiary)}.feedback-modal__char-count{position:absolute;bottom:var(--space-2);right:var(--space-3);font-size:var(--text-xs);color:var(--color-text-tertiary);pointer-events:none}.feedback-modal__context{display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-xs);color:var(--color-text-tertiary)}.feedback-modal__context-label{font-weight:var(--font-medium)}.feedback-modal__error{font-size:var(--text-sm);color:#dc2626;padding:var(--space-3);background-color:#fef2f2;border-radius:var(--radius-md)}@media(prefers-color-scheme:dark){.feedback-modal__error{color:#fca5a5;background-color:#dc26261a}}.feedback-modal__submit{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:var(--space-3) var(--space-4);background-color:var(--color-text);color:var(--color-bg);border:none;border-radius:var(--radius-md);font-family:var(--font-family);font-size:var(--text-sm);font-weight:var(--font-medium);cursor:pointer;transition:opacity var(--transition-fast)}.feedback-modal__submit:hover:not(:disabled){opacity:.85}.feedback-modal__submit:disabled{opacity:.5;cursor:not-allowed}.feedback-modal__spinner{width:16px;height:16px;border:2px solid transparent;border-top-color:currentColor;border-radius:var(--radius-full);animation:feedback-spin .6s linear infinite}@keyframes feedback-spin{to{transform:rotate(360deg)}}.feedback-modal__success{display:flex;flex-direction:column;align-items:center;gap:var(--space-4);padding:var(--space-8) 0;animation:feedback-scale-in var(--duration-base) var(--ease-out)}.feedback-modal__success-text{font-size:var(--text-base);font-weight:var(--font-medium);color:var(--color-text)}@media(prefers-reduced-motion:reduce){.feedback-modal__backdrop,.feedback-modal__panel,.feedback-modal__success{animation:none}.feedback-modal__spinner{animation:none;border-color:currentColor;opacity:.5}}.feedback-fab{position:fixed;bottom:var(--space-6);left:var(--space-6);z-index:var(--z-overlay);height:44px;display:flex;align-items:center;padding:0 12px;background-color:var(--color-white);border:1px solid var(--color-border);border-radius:var(--radius-full);box-shadow:var(--shadow-md);color:var(--color-text-secondary);cursor:pointer;transition:box-shadow var(--transition-base),transform var(--transition-fast),color var(--transition-base)}.feedback-fab svg{flex-shrink:0}.feedback-fab:hover{box-shadow:var(--shadow-lg);transform:translateY(-1px);color:var(--color-text)}.feedback-fab__label{max-width:0;padding-left:0;overflow:hidden;opacity:0;font-size:var(--text-sm);font-weight:500;white-space:nowrap;transition:max-width var(--transition-base),padding-left var(--transition-base),opacity var(--transition-base)}.feedback-fab:hover .feedback-fab__label{max-width:6rem;opacity:1;padding-left:var(--space-2)}@media(max-width:639px){.feedback-fab{bottom:var(--space-4);left:var(--space-4)}}@media(prefers-reduced-motion:reduce){.feedback-fab,.feedback-fab__label{transition:none}}.spotify-widget{position:fixed;bottom:var(--space-6);right:var(--space-6);z-index:var(--z-overlay)}.spotify-widget__trigger{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);background-color:var(--color-white);border:1px solid var(--color-border);border-radius:var(--radius-full);box-shadow:var(--shadow-md);cursor:pointer;transition:box-shadow var(--transition-fast),transform var(--transition-fast)}.spotify-widget__trigger:hover{box-shadow:var(--shadow-lg);transform:translateY(-1px)}.spotify-widget__icon{flex-shrink:0;color:#1db954}.spotify-widget__bars{display:flex;align-items:flex-end;gap:2px;height:14px}.spotify-widget__bar{width:3px;border-radius:1px;background-color:#1db954;animation:spotify-bar .8s ease-in-out infinite alternate}.spotify-widget__bar:nth-child(1){animation-delay:0s;height:6px}.spotify-widget__bar:nth-child(2){animation-delay:.2s;height:10px}.spotify-widget__bar:nth-child(3){animation-delay:.4s;height:4px}@keyframes spotify-bar{0%{height:4px}to{height:14px}}.spotify-widget__backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1}.spotify-widget__card{width:280px;padding:var(--space-4);background-color:var(--color-white);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);animation:spotify-slide-in var(--duration-base) var(--ease-out) both}@keyframes spotify-slide-in{0%{opacity:0;transform:translateY(8px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.spotify-widget__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-3)}.spotify-widget__header-label{display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:var(--tracking-wide)}.spotify-widget__close{display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-tertiary);cursor:pointer;transition:color var(--transition-fast)}.spotify-widget__close:hover{color:var(--color-text)}.spotify-widget__track{display:flex;gap:var(--space-3)}.spotify-widget__album-art{width:56px;height:56px;border-radius:var(--radius-sm);object-fit:cover;flex-shrink:0}.spotify-widget__info{display:flex;flex-direction:column;justify-content:center;gap:2px;min-width:0}.spotify-widget__title{font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.spotify-widget__artist{font-size:var(--text-xs);color:var(--color-text-tertiary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.spotify-widget__progress{width:100%;height:3px;background-color:var(--color-gray-100);border-radius:var(--radius-full);overflow:hidden;margin-top:var(--space-3)}.spotify-widget__progress-bar{height:100%;background-color:#1db954;border-radius:var(--radius-full);transition:width 1s linear}.spotify-widget__listen{display:inline-flex;align-items:center;gap:var(--space-1);margin-top:var(--space-3);font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--color-text-secondary);transition:color var(--transition-fast)}.spotify-widget__listen:hover{color:var(--color-text)}.spotify-widget__recent-list{display:flex;flex-direction:column;gap:var(--space-2)}.spotify-widget__recent-item{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-1) 0;color:inherit;transition:opacity var(--transition-fast)}.spotify-widget__recent-item:hover{opacity:.7}.spotify-widget__recent-art{width:32px;height:32px;border-radius:2px;object-fit:cover;flex-shrink:0}.spotify-widget__recent-info{display:flex;flex-direction:column;gap:1px;min-width:0}.spotify-widget__recent-title{font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.spotify-widget__recent-artist{font-size:var(--text-xs);color:var(--color-text-tertiary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media(prefers-reduced-motion:reduce){.spotify-widget__bar{animation:none;height:8px!important}.spotify-widget__card{animation:none}.spotify-widget__progress-bar{transition:none}}@media(max-width:639px){.spotify-widget{bottom:var(--space-4);right:var(--space-4)}.spotify-widget__card{width:calc(100vw - var(--space-8));max-width:280px}}.cursor-glow{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-glow, 1);pointer-events:none;background:radial-gradient(600px circle at var(--glow-x, -100px) var(--glow-y, -100px),var(--color-glow, transparent) 0%,transparent 100%);opacity:var(--glow-opacity, 1);will-change:background;transition:opacity var(--duration-slow, .4s) var(--ease-out)}.page-skeleton{display:flex;flex-direction:column;gap:var(--space-4);padding-top:var(--space-8);animation:skeletonFadeIn var(--duration-slow) var(--ease-out) both;animation-delay:.2s;opacity:0}@keyframes skeletonFadeIn{to{opacity:1}}.page-skeleton__title{width:40%;height:2rem;border-radius:var(--radius-md);background:var(--color-gray-100)}.page-skeleton__line{width:100%;height:1rem;border-radius:var(--radius-sm);background:var(--color-gray-100)}.page-skeleton__line--short{width:60%}.page-skeleton__block{width:100%;aspect-ratio:16/9;border-radius:var(--radius-md);background:var(--color-gray-100);margin-top:var(--space-4)}@media(prefers-reduced-motion:reduce){.page-skeleton{animation:none;opacity:1}}.scroll-progress{position:fixed;top:0;left:0;right:0;height:3px;z-index:var(--z-sticky);pointer-events:none}.scroll-progress__bar{height:100%;background-color:var(--color-accent);transform-origin:left;will-change:transform}.back-to-top{position:fixed;bottom:calc(var(--space-6) + 48px + var(--space-3));right:var(--space-6);z-index:var(--z-overlay);width:40px;height:40px;display:flex;align-items:center;justify-content:center;background-color:var(--color-bg);color:var(--color-text);border:1px solid var(--color-border-subtle);border-radius:var(--radius-full);box-shadow:var(--shadow-md);opacity:0;pointer-events:none;transform:translateY(8px);transition:opacity var(--transition-base),transform var(--transition-base),background-color var(--transition-fast);cursor:pointer}.back-to-top--visible{opacity:1;pointer-events:auto;transform:translateY(0)}.back-to-top:hover{background-color:var(--color-gray-100)}@media(max-width:639px){.back-to-top{bottom:calc(var(--space-4) + 48px + var(--space-3));right:var(--space-4)}}@media(prefers-reduced-motion:reduce){.back-to-top{transition:none}}.skip-link{position:absolute;top:-100%;left:var(--space-4);z-index:var(--z-modal);padding:var(--space-2) var(--space-4);background:var(--color-bg);color:var(--color-text);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--text-sm);text-decoration:none}.skip-link:focus{top:var(--space-2)}.app{display:flex;flex-direction:column;min-height:100vh;background-color:var(--color-bg-subtle)}.main{flex:1;padding-top:var(--space-10);padding-bottom:var(--space-16)}@media(min-width:768px){.main{padding-top:var(--space-16);padding-bottom:var(--space-24)}}.main--flush{padding-top:0;padding-bottom:0}.main--nav{padding-top:var(--space-20)}*,*:before,*:after{box-sizing:border-box}*{margin:0}html{-webkit-text-size-adjust:none;text-size-adjust:none}body{line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}a{color:inherit;text-decoration:none}button{background:none;border:none;padding:0;cursor:pointer}ul,ol{list-style:none;padding:0}:root{color-scheme:light dark;--font-family: "Geist", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono: "Geist Mono", "SF Mono", "Fira Code", Menlo, Consolas, monospace;--text-xs: clamp(.75rem, .7rem + .25vw, .8125rem);--text-sm: clamp(.8125rem, .75rem + .3vw, .875rem);--text-base: clamp(.9375rem, .875rem + .3vw, 1rem);--text-lg: clamp(1.0625rem, 1rem + .3vw, 1.125rem);--text-xl: clamp(1.1875rem, 1.1rem + .4vw, 1.3125rem);--text-2xl: clamp(1.375rem, 1.25rem + .6vw, 1.625rem);--text-3xl: clamp(1.75rem, 1.5rem + 1.2vw, 2.25rem);--font-normal: 400;--font-medium: 500;--font-semibold: 600;--leading-tight: 1.2;--leading-normal: 1.5;--leading-relaxed: 1.65;--tracking-tight: -.02em;--tracking-normal: 0;--tracking-wide: .02em;--color-white: #ffffff;--color-black: #0a0a0a;--color-static-white: #ffffff;--color-gray-50: #fafafa;--color-gray-100: #f5f5f5;--color-gray-200: #e5e5e5;--color-gray-300: #d4d4d4;--color-gray-400: #a3a3a3;--color-gray-500: #737373;--color-gray-600: #525252;--color-gray-700: #404040;--color-gray-800: #262626;--color-gray-900: #171717;--color-bg: #f5f5f5;--color-bg-subtle: var(--color-gray-50);--color-surface: #ffffff;--color-text: var(--color-gray-900);--color-text-secondary: var(--color-gray-700);--color-text-tertiary: var(--color-gray-600);--color-border: var(--color-gray-100);--color-border-subtle: var(--color-gray-200);--color-accent: var(--color-black);--color-header-bg: hsla(0, 0%, 98%, .85);--color-header-border: rgba(0, 0, 0, .06);--color-header-shadow: rgba(0, 0, 0, .03);--dashed-border: 1px dashed var(--color-gray-200);--blur-backdrop: blur(10px);--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.25rem;--space-6: 1.5rem;--space-8: 2rem;--space-10: 2.5rem;--space-12: 3rem;--space-16: 4rem;--space-20: 5rem;--space-24: 6rem;--space-32: 8rem;--max-width: 1200px;--max-width-content: 720px;--max-width-column: 640px;--header-height: 64px;--content-padding: clamp(var(--space-4), 5vw, var(--space-8));--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--radius-full: 9999px;--ease-out: cubic-bezier(.4, 0, .2, 1);--ease-in-out: cubic-bezier(.4, 0, .6, 1);--ease-spring: cubic-bezier(.34, 1.56, .64, 1);--duration-fast: .15s;--duration-base: .25s;--duration-slow: .4s;--duration-expand: .5s;--transition-fast: var(--duration-fast) var(--ease-out);--transition-base: var(--duration-base) var(--ease-out);--transition-slow: var(--duration-slow) var(--ease-out);--transition-expand: var(--duration-expand) var(--ease-out);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .04);--shadow-md: 0 4px 12px rgba(0, 0, 0, .08);--shadow-lg: 0 8px 24px rgba(0, 0, 0, .12);--shadow-border: 0px 0px 0px 1px rgba(0, 0, 0, .06), 0px 1px 2px -1px rgba(0, 0, 0, .06), 0px 2px 4px 0px rgba(0, 0, 0, .04);--shadow-border-hover: 0px 0px 0px 1px rgba(0, 0, 0, .1), 0px 1px 2px -1px rgba(0, 0, 0, .1), 0px 2px 4px 0px rgba(0, 0, 0, .08);--image-outline-color: rgba(0, 0, 0, .1);--shadow-fancy: 0px 1px 1px -.5px rgba(0, 0, 0, .05), 0px 3px 3px -1.5px rgba(0, 0, 0, .05), 0px 6px 6px -3px rgba(0, 0, 0, .05), 0px 12px 12px -6px rgba(0, 0, 0, .05), 0px 24px 24px -12px rgba(0, 0, 0, .05), 0px 48px 48px -24px rgba(0, 0, 0, .05);--z-base: 0;--z-glow: 1;--z-dropdown: 100;--z-sticky: 200;--z-overlay: 300;--z-modal: 400;--color-card-glare: rgba(255, 255, 255, .15);--color-glow: rgba(99, 102, 241, .07);--glow-opacity: 1}@media(prefers-color-scheme:dark){:root{--color-white: #0a0a0a;--color-black: #f5f5f5;--color-gray-50: #171717;--color-gray-100: #262626;--color-gray-200: #404040;--color-gray-300: #525252;--color-gray-400: #737373;--color-gray-500: #858585;--color-gray-600: #a3a3a3;--color-gray-700: #cfcfcf;--color-gray-800: #d4d4d4;--color-gray-900: #ededed;--color-bg: #0a0a0a;--color-bg-subtle: #141414;--color-surface: #171717;--color-text: #ededed;--color-text-secondary: #a3a3a3;--color-text-tertiary: #737373;--color-border: #262626;--color-border-subtle: #1e1e1e;--color-accent: #f5f5f5;--color-header-bg: hsla(0, 0%, 5%, .85);--color-header-border: rgba(255, 255, 255, .08);--color-header-shadow: rgba(0, 0, 0, .2);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .2);--shadow-md: 0 4px 12px rgba(0, 0, 0, .3);--shadow-lg: 0 8px 24px rgba(0, 0, 0, .4);--shadow-border: 0px 0px 0px 1px rgba(255, 255, 255, .08), 0px 1px 2px -1px rgba(0, 0, 0, .3), 0px 2px 4px 0px rgba(0, 0, 0, .2);--shadow-border-hover: 0px 0px 0px 1px rgba(255, 255, 255, .14), 0px 1px 2px -1px rgba(0, 0, 0, .4), 0px 2px 4px 0px rgba(0, 0, 0, .3);--image-outline-color: rgba(255, 255, 255, .1);--shadow-fancy: 0px 1px 1px -.5px rgba(0, 0, 0, .2), 0px 3px 3px -1.5px rgba(0, 0, 0, .2), 0px 6px 6px -3px rgba(0, 0, 0, .2), 0px 12px 12px -6px rgba(0, 0, 0, .2), 0px 24px 24px -12px rgba(0, 0, 0, .2), 0px 48px 48px -24px rgba(0, 0, 0, .2);--color-card-glare: rgba(255, 255, 255, .06);--color-glow: rgba(129, 140, 248, .09)}}@media(prefers-reduced-motion:reduce){:root{--duration-fast: 0ms;--duration-base: 0ms;--duration-slow: 0ms;--duration-expand: 0ms;--glow-opacity: 0}}@font-face{font-family:Geist;src:url(/fonts/GeistVF.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:optional}@font-face{font-family:Geist Mono;src:url(/fonts/GeistMonoVF.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:optional}body{font-family:var(--font-family);font-size:var(--text-base);font-weight:var(--font-normal);line-height:var(--leading-normal);color:var(--color-text);letter-spacing:var(--tracking-normal)}h1,h2,h3,h4,h5,h6{font-weight:var(--font-semibold);line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);text-wrap:balance}h1{font-size:var(--text-3xl)}h2{font-size:var(--text-2xl)}h3{font-size:var(--text-xl)}h4{font-size:var(--text-lg)}p{line-height:var(--leading-relaxed);text-wrap:pretty}.text-secondary{color:var(--color-text-secondary)}.text-tertiary{color:var(--color-text-tertiary)}.link{position:relative;display:inline-block}.link:after{content:"";position:absolute;left:0;bottom:-1px;width:100%;height:1px;background-color:currentColor;transform:scaleX(0);transform-origin:right;transition:transform var(--transition-base)}.link:hover:after{transform:scaleX(1);transform-origin:left}.link--underline:after{transform:scaleX(1)}.link--underline:hover:after{transform:scaleX(0)}@media print{header,footer,.scroll-progress,.back-to-top,.cursor-glow,.feedback-fab,.spotify-widget,.theme-toast,.lightbox,.skip-link,.project-detail__next,.narrative__back{display:none!important}body{background:#fff!important;color:#000!important}.app{display:block}.main{padding-top:0!important}img{max-width:100%!important;page-break-inside:avoid}h1,h2,h3,h4{page-break-after:avoid}a[href^=http]:after{content:" (" attr(href) ")";font-size:.8em;color:#666}a[href^="/"]:after{content:none}.narrative__body p,.project-detail__body p{orphans:3;widows:3}}html{scroll-behavior:smooth}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{background-color:var(--color-bg-subtle);min-height:100vh;transition:background-color var(--duration-slow) var(--ease-out),color var(--duration-slow) var(--ease-out)}#root{min-height:100vh;display:flex;flex-direction:column}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}::selection{background-color:var(--color-accent);color:var(--color-bg)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--color-bg-subtle)}::-webkit-scrollbar-thumb{background:var(--color-gray-300);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-gray-400)}*{scrollbar-width:thin;scrollbar-color:var(--color-gray-300) var(--color-bg-subtle)}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.container{width:100%;max-width:var(--max-width);margin:0 auto;padding:0 var(--content-padding)}.container--narrow{max-width:var(--max-width-content)}.container--column{max-width:var(--max-width-column)}.tabular-nums{font-variant-numeric:tabular-nums}.img-outline{outline:1px solid var(--image-outline-color);outline-offset:-1px}.border-dashed{border:var(--dashed-border)}.border-dashed-top{border-top:var(--dashed-border)}.border-dashed-bottom{border-bottom:var(--dashed-border)}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.image-placeholder{background:linear-gradient(90deg,var(--color-gray-100) 25%,var(--color-gray-50) 50%,var(--color-gray-100) 75%);background-size:200% 100%;animation:shimmer 1.5s infinite}@media(prefers-reduced-motion:reduce){.image-placeholder{animation:none;background:var(--color-gray-100)}}
