.project-grid{gap:var(--space-6);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.project-card{border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--surface);height:100%;transition:border-color var(--dur-base) ease, box-shadow var(--dur-base) ease, transform var(--dur-base) var(--ease-out);flex-direction:column;display:flex;position:relative;overflow:hidden}.project-card:hover{border-color:var(--line-strong);box-shadow:var(--shadow-lg);transform:translateY(-3px)}.project-card:focus-within{border-color:var(--accent)}.project-thumb-wrap{aspect-ratio:16/10;border-bottom:1px solid var(--line);background:var(--surface-alt);position:relative;overflow:hidden}.project-thumb{object-fit:cover;object-position:top center;width:100%;height:100%;transition:transform .7s var(--ease-out)}.project-card:hover .project-thumb{transform:scale(1.03)}.project-body{gap:var(--space-2);flex-direction:column;flex:1;padding:clamp(1.25rem,1rem + 1vw,2rem);display:flex}.project-meta{color:var(--text-muted)}.project-title{font-size:var(--text-xl);line-height:1}.project-link{color:var(--text);text-decoration:none}.project-link:after{content:"";position:absolute;inset:0}.project-link:focus-visible{outline:none}.project-subtitle{font-weight:600}.project-desc{-webkit-line-clamp:4;margin-top:var(--space-2);color:var(--text-muted);font-size:var(--text-sm);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.project-more{z-index:1;position:relative}.project-cta{align-items:center;gap:var(--space-2);padding-top:var(--space-4);color:var(--accent);margin-top:auto;font-weight:600;display:inline-flex}.project-cta svg{width:18px;height:18px;transition:transform var(--dur-base) var(--ease-out)}.project-card:hover .project-cta svg{transform:translate(2px,-2px)}.project-item.is-featured{grid-column:1/-1}.is-featured .project-card{grid-template-columns:minmax(0,7fr) minmax(0,5fr);display:grid}.is-featured .project-thumb-wrap{aspect-ratio:auto;border-bottom:0;border-right:1px solid var(--line);min-height:100%}.is-featured .project-thumb{position:absolute;inset:0}.is-featured .project-title{font-size:var(--text-2xl)}.is-featured .project-desc{-webkit-line-clamp:7}@media (width<=860px){.project-grid{grid-template-columns:minmax(0,1fr)}.is-featured .project-card{display:flex}.is-featured .project-thumb-wrap{aspect-ratio:2;border-right:0;border-bottom:1px solid var(--line);min-height:0}.is-featured .project-thumb{position:static}.is-featured .project-desc{-webkit-line-clamp:4}}.project-dialog h2{color:var(--text)}.process{margin-top:var(--section-gap)}
