@use '../variables' as *; .projects { padding: $space-24 $space-6; background: $color-bg-elevated; } .inner { max-width: $max-width; margin: 0 auto; } // ── Section header ───────────────────────────────────────────── .header { display: flex; align-items: center; gap: $space-4; margin-bottom: $space-12; } .sectionNum { font-family: $font-mono; color: $color-accent; font-size: $text-base; } .sectionTitle { font-size: $text-2xl; font-weight: 700; white-space: nowrap; } .line { flex: 1; height: 1px; background: $color-border; } // ── Grid ─────────────────────────────────────────────────────── .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: $space-6; } // ── Card ─────────────────────────────────────────────────────── .card { position: relative; background: $color-bg-card; border: 1px solid $color-border; border-radius: $radius-md; padding: $space-6; display: flex; flex-direction: column; gap: $space-3; transition: transform $transition-base, border-color $transition-base, box-shadow $transition-base; &:hover { transform: translateY(-4px); border-color: rgb(var(--color-primary-glow) / 0.4); box-shadow: 0 8px 32px rgb(var(--color-primary) / 0.2); } &.featured { border-color: rgb(var(--color-accent) / 0.25); } } .cardTop { display: flex; justify-content: space-between; align-items: center; margin-bottom: $space-2; } .cardLinks { display: flex; gap: $space-2; } .sourceLink { font-size: $text-xl; color: $color-text-muted; transition: color $transition-fast, transform $transition-fast; &:hover { color: $color-accent; transform: translate(2px, -2px); } } .folderIcon { font-size: $text-2xl; color: $color-accent; line-height: 1; } .externalLink { font-size: $text-xl; color: $color-text-muted; transition: color $transition-fast, transform $transition-fast; &:hover { color: $color-accent; transform: translate(2px, -2px); } } .cardName { font-size: $text-lg; font-weight: 600; } .cardDesc { font-size: $text-sm; color: $color-text-muted; line-height: 1.7; flex: 1; } .tags { list-style: none; display: flex; flex-wrap: wrap; gap: $space-2; margin-top: $space-2; padding: 0; } .tagItem { list-style: none; } .tagPill { font-family: $font-mono; font-size: $text-xs; border-radius: $radius-sm; padding: 2px $space-3; display: inline-block; } // Tag color variants .tagReact { background: rgb(97, 218, 251); color: rgb(0, 0, 0); } .tagDotnet { background: rgb(102, 51, 153); color: rgb(255, 255, 255); } .tagSqlite { background: rgb(70, 130, 180); color: rgb(255, 255, 255); } .tagApache { background: rgb(204, 102, 51); color: rgb(255, 255, 255); } .tagUbuntu { background: rgb(220, 100, 40); color: rgb(255, 255, 255); } .tagNextcloud { background: rgb(0, 150, 200); color: rgb(255, 255, 255); } .tagVite { background: rgb(150, 50, 200); color: rgb(255, 255, 255); } .tagDefault { background: rgb(var(--color-primary) / 0.15); color: $color-text-dim; } // ── Gitea Link ────────────────────────────────────────────────── .giteaLink { display: flex; flex-direction: column; align-items: center; gap: $space-4; margin-top: $space-12; text-align: center; } .giteaText { font-size: $text-lg; color: $color-text-muted; } .giteaBtn { display: inline-flex; align-items: center; padding: $space-4 $space-12; border: 1px solid $color-accent; border-radius: $radius-md; font-size: $text-base; font-weight: 600; color: $color-accent; transition: all $transition-base; letter-spacing: 0.02em; &:hover { background: rgb(var(--color-accent) / 0.08); color: $color-accent; box-shadow: 0 0 20px rgb(var(--color-accent) / 0.15); transform: translateY(-2px); } }