@charset "utf-8"; .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.projects-section{max-width:1100px;margin:4rem auto;padding:0 1.5rem;background:var(--psu-white)}.projects-heading{font-size:2rem;font-weight:700;text-align:center;margin-bottom:1.5rem;color:var(--psu-navy)}.project-filters{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:center;margin-bottom:2.5rem}.filter-btn{padding:.4rem 1.1rem;min-height:24px;border:2px solid var(--psu-blue);border-radius:999px;background:var(--psu-white);color:var(--psu-blue);font-size:.9rem;font-weight:600;cursor:pointer;transition:background .2s,color .2s}.filter-btn:hover,.filter-btn.active,.filter-btn[aria-pressed=true]{background:var(--psu-blue);color:var(--psu-white)}.filter-btn:focus-visible{outline:3px solid var(--psu-navy);outline-offset:3px}.projects-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1.8rem}.project-card{display:flex;flex-direction:column;position:relative;border-radius:12px;overflow:hidden;box-shadow:0 4px 20px rgba(0,30,68,0.12);background:var(--psu-white);cursor:pointer;transition:transform .2s,box-shadow .2s}.project-card:hover{transform:translateY(-4px);box-shadow:0 8px 30px rgba(0,30,68,0.20)}.project-card-link{text-decoration:none;color:inherit}.project-card-link::after{content:"";position:absolute;inset:0;z-index:1}.project-card-link:focus-visible::after{outline:3px solid var(--psu-navy);outline-offset:4px;border-radius:12px}.project-card-link:focus-visible{outline:none}.project-img{width:100%;height:180px;object-fit:cover}.project-img-placeholder{width:100%;height:180px;background:linear-gradient(135deg,var(--psu-light-blue),var(--psu-blue))}.project-card-body{padding:1.2rem;display:flex;flex-direction:column;flex:1;box-sizing:border-box}.project-tags{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.7rem}.project-tag{background:var(--psu-light-blue);color:var(--psu-navy);font-size:.75rem;font-weight:700;padding:.2rem .6rem;border-radius:999px;text-transform:uppercase;letter-spacing:.04em}.project-title{font-size:1.15rem;font-weight:700;margin:0 0 .5rem;color:var(--text-primary)}.project-desc{font-size:.9rem;color:var(--text-secondary);flex:1;margin-bottom:1rem;line-height:1.6}.project-links{display:flex;gap:.7rem;flex-wrap:wrap;position:relative;z-index:2}.project-link{min-height:24px;display:inline-flex;align-items:center;padding:.4rem 1rem;border-radius:6px;font-size:.85rem;font-weight:600;text-decoration:none;background:var(--psu-blue);color:var(--psu-white);transition:opacity .2s;border:2px solid transparent}.project-link:hover{opacity:.85}.project-link:focus-visible{outline:3px solid var(--psu-navy);outline-offset:3px}.project-link--github{background:var(--psu-navy)}.project-link--demo{background:transparent;border-color:var(--psu-blue);color:var(--psu-blue)}.project-link--paper{background:var(--psu-blue)}.project-link--arxiv{background:var(--psu-navy)}.project-link--data{background:var(--psu-blue)}.project-link--zenodo{background:var(--psu-navy)}.project-link--slides{background:var(--psu-blue)}.project-link--video{background:var(--psu-navy)}