UNPKG

@quasarbright/projection

Version:

A static site generator that creates a beautiful, interactive gallery to showcase your coding projects. Features search, filtering, tags, responsive design, and an admin UI.

205 lines (171 loc) 3.38 kB
/* Project Cards */ .project-card { background: #2d3748; border-radius: 12px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); overflow: hidden; transition: all 0.3s ease; position: relative; cursor: pointer; background-size: cover; background-position: center; background-repeat: no-repeat; min-height: 300px; } .project-card:hover { transform: translateY(-4px); box-shadow: 0 8px 25px rgba(0, 0, 0, 0.4); } .project-card.featured { border: 2px solid #4c63d2; position: relative; } .project-card.featured::before { content: "★ Featured"; position: absolute; top: 0; right: 0; background: #4c63d2; color: white; padding: 0.25rem 0.75rem; font-size: 0.8rem; font-weight: 500; border-bottom-left-radius: 8px; z-index: 2; } /* Card Content */ .card-content { padding: 1.5rem; background: linear-gradient(135deg, rgba(45, 55, 72, 0.75) 0%, rgba(26, 32, 44, 0.8) 100%); position: relative; height: 100%; box-sizing: border-box; display: flex; flex-direction: column; justify-content: space-between; } .card-info { flex-grow: 1; } .card-bottom { margin-top: auto; } .project-title { font-size: 1.25rem; font-weight: 600; color: #f7fafc; margin-bottom: 0.5rem; line-height: 1.3; } .title-link { color: inherit; text-decoration: none; display: inline-block; transition: opacity 0.2s ease; } .title-link:hover { color: inherit; text-decoration: underline; opacity: 0.9; } .title-link:visited { color: inherit; } .project-date { color: #a0aec0; font-size: 0.9rem; margin-bottom: 0.75rem; } .project-description { color: #cbd5e0; font-size: 0.9rem; line-height: 1.4; margin-bottom: 1rem; } .project-tags { margin-bottom: 1.5rem; min-height: 2rem; } /* Card Actions */ .card-actions { display: flex; gap: 0.75rem; flex-wrap: wrap; } .card-actions .btn-primary, .card-actions .btn-secondary { flex: 1; text-align: center; min-width: 120px; font-size: 0.9rem; padding: 0.6rem 1rem; } /* Card States */ .project-card.hidden { display: none; } .project-card.filtered-out { opacity: 0.3; transform: scale(0.95); } /* Image Loading States */ .card-image img { background: #1a202c; } .card-image img[src=""], .card-image img:not([src]) { background: linear-gradient(45deg, #1a202c 25%, #2d3748 25%, #2d3748 50%, #1a202c 50%, #1a202c 75%, #2d3748 75%); background-size: 20px 20px; } /* Responsive Cards */ @media (max-width: 768px) { .card-content { padding: 1rem; } .project-title { font-size: 1.1rem; } .project-description { -webkit-line-clamp: 2; font-size: 0.85rem; } .card-actions { flex-direction: column; } .card-actions .btn-primary, .card-actions .btn-secondary { flex: none; min-width: auto; } } @media (max-width: 480px) { .card-image { height: 150px; } .project-card.featured::before { font-size: 0.7rem; padding: 0.2rem 0.5rem; } } /* Animation for card reveals */ .project-card { animation: fadeInUp 0.5s ease-out; } @keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } /* Grid loading state */ .projects-grid.loading .project-card { opacity: 0.5; } /* Hover effects for tags in cards */ .project-card .tag:hover { transform: scale(1.05); }