.carousel{margin-top:18px}.carousel-track{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;overscroll-behavior-x:contain;position:relative;gap:20px}.carousel-track::-webkit-scrollbar{display:none}.carousel-slide{flex:0 0 calc((100% - 40px)/3);min-width:0;scroll-snap-align:start}.slide-open{width:100%;aspect-ratio:2/1;border:0;padding:0;background:#f3f5f7;display:block;overflow:hidden;cursor:zoom-in}.slide-open img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .3s}.slide-open:hover img{transform:scale(1.03)}.slide-caption{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:12px 0 16px;border-bottom:1px solid var(--line)}.slide-caption>div{min-width:0}.slide-type{font-size:9px;letter-spacing:1.8px;color:var(--muted);margin:0 0 5px}.slide-caption h3{font-size:19px;margin:0 0 6px;letter-spacing:-.5px}.slide-scope{font-size:11px;line-height:1.5;color:var(--muted);margin:0}.slide-detail{border:0;background:none;color:var(--blue);font-size:11px;white-space:nowrap;padding:0}.carousel-toolbar{display:flex;align-items:center;justify-content:space-between;padding-top:18px;gap:24px}.carousel-hint{font-size:8px;letter-spacing:2px;color:var(--muted);margin-left:auto}.carousel-controls{display:flex;gap:10px}.carousel-controls button{width:42px;height:42px;background:white;border:1px solid var(--line);font-size:23px;color:var(--blue)}.carousel-controls button:hover{background:var(--ink);color:white;border-color:var(--ink)}#count{font-variant-numeric:tabular-nums;letter-spacing:2px}.portfolio{padding-bottom:55px}.carousel-track:focus-visible{outline:2px solid var(--blue);outline-offset:5px}@media(max-width:1100px){.slide-caption{flex-direction:column;gap:8px}}@media(max-width:900px){.carousel-slide{flex-basis:calc((100% - 20px)/2)}}@media(max-width:600px){.carousel-track{gap:14px}.carousel-slide{flex-basis:82%}.slide-caption h3{font-size:19px}.carousel-hint{display:none}.carousel-toolbar{padding-top:14px}}@media(prefers-reduced-motion:reduce){.slide-open img{transition:none}}

/* Align every caption border with the tallest caption in the carousel. */
.carousel-track{align-items:stretch}.carousel-slide{display:flex;flex-direction:column}.slide-open{flex-shrink:0}.slide-caption{flex:1}
