.project-container{z-index:1;max-width:1200px;margin:0 auto;padding:110px 24px 60px;position:relative}.project-head{opacity:0;margin-bottom:28px;animation:.45s 60ms forwards project-head-in;transform:translateY(12px)}@keyframes project-head-in{to{opacity:1;transform:translateY(0)}}.project-head h1{color:var(--text-main);margin:0 0 8px;font-size:2rem}.project-head p{color:var(--text-subtle);margin:0;font-size:.95rem}.project-grid{flex-wrap:wrap;justify-content:center;gap:20px;display:flex}.project-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);min-width:260px;max-width:420px;box-shadow:none;cursor:pointer;opacity:0;flex-direction:column;flex:300px;padding:20px;transition:transform .28s,box-shadow .28s,background .28s,border-color .28s;animation:.45s forwards project-card-in;display:flex;transform:translateY(16px)}.project-card:first-child{animation-delay:40ms}.project-card:nth-child(2){animation-delay:80ms}.project-card:nth-child(3){animation-delay:.12s}.project-card:nth-child(4){animation-delay:.16s}.project-card:nth-child(5){animation-delay:.2s}.project-card:nth-child(6){animation-delay:.24s}.project-card:nth-child(7){animation-delay:.28s}.project-card:nth-child(8){animation-delay:.32s}.project-card:nth-child(9){animation-delay:.36s}.project-card:nth-child(10){animation-delay:.4s}.project-card:nth-child(11){animation-delay:.44s}.project-card:nth-child(12){animation-delay:.48s}@keyframes project-card-in{to{opacity:1;transform:translateY(0)}}.project-card:hover{box-shadow:none;background:var(--surface-strong);border-color:var(--line-strong);transform:translateY(-4px)}.project-card-head{justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px;display:flex}.project-title{color:var(--accent);align-items:center;gap:7px;font-size:.96rem;font-weight:700;text-decoration:none;transition:color .25s;display:inline-flex}.project-title:hover{color:var(--accent-2)}.project-branch{color:var(--text-soft);background:var(--accent-soft);border-radius:var(--radius-sm);white-space:nowrap;flex-shrink:0;padding:2px 8px;font-size:.73rem}.project-desc{color:var(--text-subtle);flex-grow:1;min-height:40px;margin:0 0 12px;font-size:.85rem;line-height:1.45}.project-stats{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:10px;display:grid}.project-stat{background:var(--surface-soft);border-radius:var(--radius-md);border:1px solid var(--line);text-align:center;padding:8px 6px;transition:border-color .25s,background .25s}.project-stat-label{color:var(--text-soft);margin-bottom:2px;font-size:.72em}.project-stat-value{color:var(--accent);font-size:1em;font-weight:700}.project-foot{justify-content:space-between;align-items:center;gap:10px;margin-top:4px;display:flex}.project-updated{color:var(--text-soft);font-size:.74em}.project-open{color:var(--accent);background:var(--accent-soft);border-radius:var(--radius-lg);padding:5px 10px;font-size:.78em;font-weight:600;transition:background .25s,color .25s}.project-card:hover .project-open{background:color-mix(in srgb, var(--accent-soft) 70%, var(--accent) 30%);color:var(--accent)}.project-loading,.project-empty,.project-error{text-align:center;border-radius:var(--radius-md);color:var(--text-subtle);background:var(--surface);border:1px solid var(--line);grid-column:1/-1;padding:32px 24px;font-size:.95rem}.project-error small{color:var(--text-soft);margin-top:8px;display:block}@keyframes project-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.project-skeleton-grid{flex-wrap:wrap;justify-content:center;gap:20px;display:flex}.project-skeleton-card{background:var(--surface);border-radius:var(--radius-lg);border:1px solid var(--line);flex-direction:column;flex:300px;gap:12px;min-width:260px;max-width:420px;padding:20px;display:flex}.project-skeleton-card .s-head{justify-content:space-between;align-items:center;display:flex}.project-skeleton-card .s-title{border-radius:var(--radius-sm);background:linear-gradient(90deg, var(--surface) 25%, var(--surface-tint) 50%, var(--surface) 75%);background-size:200% 100%;width:55%;height:18px;animation:1.8s ease-in-out infinite project-shimmer}.project-skeleton-card .s-branch{border-radius:var(--radius-sm);background:linear-gradient(90deg, var(--surface) 25%, var(--surface-tint) 50%, var(--surface) 75%);background-size:200% 100%;width:50px;height:18px;animation:1.8s ease-in-out infinite project-shimmer}.project-skeleton-card .s-desc{border-radius:var(--radius-sm);background:linear-gradient(90deg, var(--surface) 25%, var(--surface-tint) 50%, var(--surface) 75%);background-size:200% 100%;width:90%;height:14px;animation:1.8s ease-in-out infinite project-shimmer}.project-skeleton-card .s-desc-short{border-radius:var(--radius-sm);background:linear-gradient(90deg, var(--surface) 25%, var(--surface-tint) 50%, var(--surface) 75%);background-size:200% 100%;width:60%;height:14px;animation:1.8s ease-in-out infinite project-shimmer}.project-skeleton-card .s-stats{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.project-skeleton-card .s-stat{border-radius:var(--radius-md);background:linear-gradient(90deg, var(--surface) 25%, var(--surface-tint) 50%, var(--surface) 75%);background-size:200% 100%;height:48px;animation:1.8s ease-in-out infinite project-shimmer}.project-skeleton-card .s-foot{justify-content:space-between;margin-top:4px;display:flex}.project-skeleton-card .s-updated{border-radius:var(--radius-sm);background:linear-gradient(90deg, var(--surface) 25%, var(--surface-tint) 50%, var(--surface) 75%);background-size:200% 100%;width:35%;height:14px;animation:1.8s ease-in-out infinite project-shimmer}.project-skeleton-card .s-open{border-radius:var(--radius-lg);background:linear-gradient(90deg, var(--surface) 25%, var(--surface-tint) 50%, var(--surface) 75%);background-size:200% 100%;width:65px;height:22px;animation:1.8s ease-in-out infinite project-shimmer}@media (width<=768px){.project-container{padding:100px 16px 40px}.project-grid,.project-skeleton-grid{grid-template-columns:1fr}.project-head h1{font-size:1.6rem}}@media (prefers-reduced-motion:reduce){.project-head,.project-card{opacity:1!important;animation:none!important;transform:none!important}.project-card:hover{transform:none!important}.project-skeleton-card .s-title,.project-skeleton-card .s-branch,.project-skeleton-card .s-desc,.project-skeleton-card .s-desc-short,.project-skeleton-card .s-stat,.project-skeleton-card .s-updated,.project-skeleton-card .s-open{background:var(--surface);animation:none}}body.reduce-motion .project-head,body.reduce-motion .project-card{opacity:1!important;animation:none!important;transform:none!important}body.reduce-motion .project-card:hover{transform:none!important}body.reduce-motion .project-skeleton-card .s-title,body.reduce-motion .project-skeleton-card .s-branch,body.reduce-motion .project-skeleton-card .s-desc,body.reduce-motion .project-skeleton-card .s-desc-short,body.reduce-motion .project-skeleton-card .s-stat,body.reduce-motion .project-skeleton-card .s-updated,body.reduce-motion .project-skeleton-card .s-open{background:var(--surface);animation:none}