// ======================================== // CMyChipList - SCSS Moderno con Gradienti // ======================================== $primary-color: #1976d2; $primary-light: #42a5f5; $secondary-color: #26a69a; $positive-color: #21ba45; $negative-color: #c10015; $info-color: #31ccec; $warning-color: #f2c037; @use 'sass:color'; $border-radius-sm: 8px; $border-radius: 10px; $transition-speed: 0.3s; $shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08); $shadow-md: 0 2px 8px rgba(0, 0, 0, 0.1); $mobile-breakpoint: 768px; // ======================================== // CONTAINER // ======================================== .q-mb-sm { // Padding e margini ottimizzati @media (max-width: $mobile-breakpoint) { margin-bottom: 10px !important; } } // ======================================== // LABEL/TITLE (con gradiente sottile) // ======================================== .text-subtitle2 { &.text-primary { background: linear-gradient(135deg, $primary-color, lighten($primary-color, 15%)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; font-weight: 600; letter-spacing: 0.02em; margin-bottom: 8px; @media (max-width: $mobile-breakpoint) { font-size: 0.875rem; margin-bottom: 6px; } } } // ======================================== // CHIPS CONTAINER // ======================================== .q-gutter-sm { &.row.wrap { gap: 8px; @media (max-width: $mobile-breakpoint) { gap: 6px; } } } // ======================================== // SINGLE CHIP (con gradienti bellissimi!) // ======================================== .q-chip { position: relative; overflow: hidden; transition: all $transition-speed cubic-bezier(0.4, 0, 0.2, 1); border-radius: $border-radius !important; font-weight: 500; letter-spacing: 0.01em; // Effetto luce scorrevole &::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent); transition: left 0.5s ease; } // Shadow con gradiente &.shadow-1 { box-shadow: 0 2px 6px rgba(0, 0, 0, 0.12); } // Padding compatto &.q-px-sm { padding-left: 10px !important; padding-right: 10px !important; @media (max-width: $mobile-breakpoint) { padding-left: 8px !important; padding-right: 8px !important; font-size: 0.8125rem !important; } } // Hover effect &:hover { transform: translateY(-2px) scale(1.02); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.18); &::before { left: 100%; } } // Colori con gradienti &[class*='bg-primary'], &[class*='bg-blue'] { background: linear-gradient(135deg, $primary-color, lighten($primary-color, 10%)) !important; box-shadow: 0 2px 8px rgba($primary-color, 0.3); &:hover { background: linear-gradient(135deg, color.adjust($primary-color, $lightness: -5%), $primary-color) !important; box-shadow: 0 4px 12px rgba($primary-color, 0.4); } } &[class*='bg-secondary'], &[class*='bg-teal'] { background: linear-gradient(135deg, $secondary-color, lighten($secondary-color, 10%)) !important; box-shadow: 0 2px 8px rgba($secondary-color, 0.3); &:hover { background: linear-gradient(135deg, color.adjust($secondary-color, $lightness: -5%), $secondary-color) !important; box-shadow: 0 4px 12px rgba($secondary-color, 0.4); } } &[class*='bg-positive'], &[class*='bg-green'] { background: linear-gradient(135deg, $positive-color, lighten($positive-color, 10%)) !important; box-shadow: 0 2px 8px rgba($positive-color, 0.3); &:hover { background: linear-gradient(135deg, color.adjust($positive-color, $lightness: -5%), $positive-color) !important; box-shadow: 0 4px 12px rgba($positive-color, 0.4); } } &[class*='bg-negative'], &[class*='bg-red'] { background: linear-gradient(135deg, $negative-color, color.adjust($negative-color, $lightness: 10%)) !important; box-shadow: 0 2px 8px rgba($negative-color, 0.3); &:hover { background: linear-gradient(135deg, color.adjust($negative-color, $lightness: -5%), $negative-color) !important; box-shadow: 0 4px 12px rgba($negative-color, 0.4); } } &[class*='bg-warning'], &[class*='bg-orange'], &[class*='bg-amber'] { background: linear-gradient(135deg, $warning-color, lighten($warning-color, 10%)) !important; box-shadow: 0 2px 8px rgba($warning-color, 0.3); &:hover { background: linear-gradient(135deg, color.adjust($warning-color, $lightness: -5%), $warning-color) !important; box-shadow: 0 4px 12px rgba($warning-color, 0.4); } } &[class*='bg-info'], &[class*='bg-cyan'] { background: linear-gradient(135deg, $info-color, color.adjust($info-color, $lightness: 10%)) !important; box-shadow: 0 2px 8px rgba($info-color, 0.3); &:hover { background: linear-gradient(135deg, color.adjust($info-color, $lightness: -5%), $info-color) !important; box-shadow: 0 4px 12px rgba($info-color, 0.4); } } &[class*='bg-purple'] { background: linear-gradient(135deg, #9c27b0, lighten(#9c27b0, 10%)) !important; box-shadow: 0 2px 8px rgba(#9c27b0, 0.3); &:hover { background: linear-gradient(135deg, color.adjust(#9c27b0, $lightness: -5%), #9c27b0) !important; box-shadow: 0 4px 12px rgba(#9c27b0, 0.4); } } &[class*='bg-pink'] { background: linear-gradient(135deg, #e91e63, lighten(#e91e63, 10%)) !important; box-shadow: 0 2px 8px rgba(#e91e63, 0.3); &:hover { background: linear-gradient(135deg, color.adjust(#e91e63, $lightness: -5%), #e91e63) !important; box-shadow: 0 4px 12px rgba(#e91e63, 0.4); } } &[class*='bg-grey'], &[class*='bg-gray'] { background: linear-gradient(135deg, #757575, lighten(#757575, 10%)) !important; box-shadow: 0 2px 8px rgba(#757575, 0.3); &:hover { background: linear-gradient(135deg, color.adjust(#757575, $lightness: -5%), #757575) !important; box-shadow: 0 4px 12px rgba(#757575, 0.4); } } // Icon dentro il chip .q-icon { transition: transform $transition-speed ease; } &:hover .q-icon { transform: scale(1.1) rotate(5deg); } // Text color bianco con ombra sottile per leggibilitĂ  &[class*='text-white'] { text-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); } } // ======================================== // DENSE VARIANT // ======================================== .q-chip--dense { padding: 3px 8px !important; font-size: 0.8125rem; @media (max-width: $mobile-breakpoint) { padding: 2px 6px !important; font-size: 0.75rem; } } // ======================================== // ANIMATION // ======================================== @keyframes chipAppear { from { opacity: 0; transform: scale(0.8) translateY(10px); } to { opacity: 1; transform: scale(1) translateY(0); } } .q-chip { animation: chipAppear 0.3s ease-out; animation-fill-mode: both; // Stagger animation per chip multipli @for $i from 1 through 20 { &:nth-child(#{$i}) { animation-delay: #{$i * 0.05}s; } } } // ======================================== // GLASSMORPHISM VARIANT (opzionale) // ======================================== .q-chip.glass-effect { background: rgba(255, 255, 255, 0.2) !important; backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.3); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); &:hover { background: rgba(255, 255, 255, 0.3) !important; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15); } }