:host { display: block; } .section { margin-bottom: 4rem; scroll-margin-top: 5.5rem; } h2 { margin: 0; font-size: clamp(1.5rem, 2.2vw, 2rem); } .section-title-row { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 1rem; margin-bottom: 1.3rem; } .section-title-row p { margin: 0; color: #8b949e; } .stack-carousel-shell { --carousel-nav-space: 4.25rem; position: relative; width: calc(100% + (var(--carousel-nav-space) * 2)); margin-inline: calc(var(--carousel-nav-space) * -1); overflow: visible; } .stack-carousel-column { width: calc(100% - (var(--carousel-nav-space) * 2)); margin-inline: auto; } .stack-carousel { display: flex; gap: 1rem; overflow-x: auto; width: 100%; padding: 0.2rem; scroll-snap-type: x mandatory; scrollbar-width: thin; scrollbar-color: rgba(88, 166, 255, 0.45) rgba(33, 38, 45, 0.65); } .stack-carousel.is-auto-scrolling { scroll-snap-type: none; } .stack-slide { flex: 0 0 min(320px, calc(100% - 0.2rem)); scroll-snap-align: start; } .skill-heading { display: flex; align-items: center; gap: 0.65rem; } .skill-heading h3 { margin: 0; font-size: 1.08rem; } .skill-icon { display: inline-flex; justify-content: center; align-items: center; width: 2rem; height: 2rem; border-radius: 10px; border: 1px solid rgba(88, 166, 255, 0.4); background: radial-gradient(circle at 30% 20%, rgba(88, 166, 255, 0.2), rgba(22, 27, 34, 0.95)); box-shadow: inset 0 1px 0 rgba(240, 246, 252, 0.08); overflow: hidden; transition: border-color 140ms ease, box-shadow 140ms ease, background-color 140ms ease; } .skill-logo { width: 1.2rem; height: 1.2rem; object-fit: contain; opacity: 0.92; filter: grayscale(1) brightness(1.25) contrast(0.92); transition: transform 140ms ease, opacity 140ms ease, filter 140ms ease; } .skill-fallback { display: none; font-size: 0.72rem; font-weight: 700; letter-spacing: 0.04em; color: #9ecbff; } .skill-icon.is-fallback .skill-logo { display: none; } .skill-icon.is-fallback .skill-fallback { display: inline; } .skill-card { transition: border-color 140ms ease, box-shadow 140ms ease; } .skill-card .meta { margin: 0.9rem 0 0; color: #8b949e; font-size: 0.92rem; } .stack-slide:hover .skill-icon, .stack-slide:focus-within .skill-icon { border-color: rgba(121, 192, 255, 0.75); box-shadow: 0 0 0 3px rgba(56, 139, 253, 0.18), inset 0 1px 0 rgba(240, 246, 252, 0.14); background: radial-gradient(circle at 30% 20%, rgba(121, 192, 255, 0.28), rgba(22, 27, 34, 0.95)); } .stack-slide:hover .skill-logo, .stack-slide:focus-within .skill-logo { opacity: 1; transform: scale(1.04); filter: grayscale(1) brightness(1.4) contrast(1); } .carousel-btn { position: absolute; top: 50%; width: 2.5rem; height: 2.5rem; border: 1px solid #3d444d; border-radius: 999px; background: rgba(33, 38, 45, 0.8); color: #e6edf3; cursor: pointer; opacity: 0; visibility: hidden; pointer-events: none; transform: translateY(calc(-50% + 2px)); transition: border-color 120ms ease, background-color 120ms ease, transform 120ms ease, opacity 120ms ease; } .stack-carousel-shell > .carousel-btn:first-of-type { left: 0.85rem; } .stack-carousel-shell > .carousel-btn:last-of-type { right: 0.85rem; } .stack-carousel-shell:hover .carousel-btn, .stack-carousel-shell:focus-within .carousel-btn { opacity: 1; visibility: visible; pointer-events: auto; transform: translateY(-50%); } .carousel-btn:hover { border-color: #58a6ff; background: rgba(56, 139, 253, 0.2); transform: translateY(calc(-50% - 1px)); } .carousel-btn:focus-visible { outline: 2px solid #58a6ff; outline-offset: 2px; } @media (max-width: 760px) { .stack-carousel-shell { --carousel-nav-space: 0; width: 100%; margin-inline: 0; } .stack-carousel-column { width: 100%; } .carousel-btn { display: none; } .stack-slide { flex-basis: min(280px, 85%); } } @media (min-width: 1000px) { .stack-slide { flex-basis: calc((100% - 2rem) / 3); } }