// Gradiente speciale per gruppi $gradient-group-primary: linear-gradient(135deg, $secondary-color 0%, color.adjust($secondary-color, $lightness: 15%) 100%); $gradient-group-hover: linear-gradient(135deg, color.adjust($secondary-color, $lightness: -5%) 0%, $secondary-color 100%); // ======================================== // Q-ITEM CONTAINER (con gradiente group-style) // ======================================== .q-item { background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 50%, #ffffff 100%); border-radius: $border-radius; padding: 10px 12px; margin: 8px 0; transition: all $transition-speed cubic-bezier(0.4, 0, 0.2, 1); box-shadow: $shadow-sm; position: relative; overflow: hidden; border: 1px solid rgba(0, 0, 0, 0.06); border-left: 4px solid transparent; // 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.4), transparent); transition: left 0.6s ease; z-index: 0; } // Gradiente sottile group-themed &::after { content: ''; position: absolute; left: 0; top: 0; width: 100%; height: 100%; background: linear-gradient(to right, rgba($secondary-color, 0.02), transparent 15%); opacity: 0; transition: opacity $transition-speed ease; z-index: 0; } @media (max-width: $mobile-breakpoint) { padding: 8px 10px; margin: 6px 0; } // Hover effect &.clickable:hover, &[clickable]:hover { background: linear-gradient(135deg, #ffffff 0%, #f0f4f8 50%, #ffffff 100%); box-shadow: 0 4px 16px rgba($secondary-color, 0.15); transform: translateY(-2px); border-left-color: $secondary-color; border-color: rgba($secondary-color, 0.15); &::before { left: 100%; } &::after { opacity: 1; } } // Assicura che i contenuti siano sopra gli effetti > * { position: relative; z-index: 1; } } // ======================================== // AVATAR (con effetto glow group-themed) // ======================================== .q-avatar { transition: all $transition-speed ease; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); border: 2px solid rgba(255, 255, 255, 0.8); position: relative; &::after { content: ''; position: absolute; inset: -2px; border-radius: 50%; background: $gradient-group-primary; opacity: 0; transition: opacity $transition-speed ease; z-index: -1; } .q-item:hover & { transform: scale(1.05); box-shadow: 0 4px 16px rgba($secondary-color, 0.3); &::after { opacity: 0.3; } } @media (max-width: $mobile-breakpoint) { width: 50px !important; height: 50px !important; } } // ======================================== // PROFILE IMAGE // ======================================== .imgprofile { border-radius: 50%; object-fit: cover; } // ======================================== // GROUP TITLE (con gradiente) // ======================================== .q-item__label { line-height: 1.5; margin-bottom: 3px; &:last-child { margin-bottom: 0; } strong { font-weight: 600; background: $gradient-group-primary; -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; font-size: 1rem; transition: all $transition-speed ease; @media (max-width: $mobile-breakpoint) { font-size: 0.9375rem; } .q-item:hover & { background: $gradient-group-hover; -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } } em { font-style: italic; color: $grey-text; font-size: 0.875rem; @media (max-width: $mobile-breakpoint) { font-size: 0.8125rem; } } // Caption style &[caption] { color: $grey-light; font-size: 0.8125rem; margin-top: 2px; @media (max-width: $mobile-breakpoint) { font-size: 0.75rem; } } } // ======================================== // GROUPNAME BADGE // ======================================== .q-item__label { // Stile per (groupname) &:has(strong) { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; // Parentesi con groupname > :not(strong) { font-size: 0.875rem; color: $grey-text; padding: 2px 8px; border-radius: 6px; background: linear-gradient(135deg, rgba($secondary-color, 0.08), rgba($secondary-color, 0.04)); border: 1px solid rgba($secondary-color, 0.2); @media (max-width: $mobile-breakpoint) { font-size: 0.8125rem; padding: 2px 6px; } } } } // ======================================== // ACTION BUTTONS (con gradienti) // ======================================== .q-btn { transition: all $transition-speed ease; position: relative; overflow: hidden; // Rounded menu button &[rounded] { &.q-btn--round { background: rgba(255, 255, 255, 0.8); backdrop-filter: blur(8px); box-shadow: $shadow-sm; border: 1px solid rgba(0, 0, 0, 0.06); &:hover { background: rgba(255, 255, 255, 0.95); box-shadow: $shadow-md; transform: scale(1.1) rotate(90deg); } } } // Send coins button (special gradient) &[color='green'] { background: linear-gradient(135deg, $positive-color, color.adjust($positive-color, $lightness: 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); transform: translateY(-2px); } &::before { content: ''; position: absolute; top: 50%; left: 50%; width: 0; height: 0; border-radius: 50%; background: rgba(255, 255, 255, 0.4); transform: translate(-50%, -50%); transition: width 0.6s ease, height 0.6s ease; } &:hover::before { width: 300px; height: 300px; } } } // ======================================== // MENU DROPDOWN (con gradienti) // ======================================== .q-menu { background: linear-gradient(to bottom, #ffffff, #f8f9fa); backdrop-filter: blur(10px); border: 1px solid rgba(0, 0, 0, 0.08); box-shadow: $shadow-lg; border-radius: $border-radius-sm; .q-list { padding: 6px; background: transparent; @media (max-width: $mobile-breakpoint) { padding: 4px; } } .q-item { border-radius: $border-radius-sm; margin: 2px 0; background: transparent; border: none; box-shadow: none; border-left: none; padding: 10px 12px; &::before { display: none; } &::after { display: none; } &:hover { background: linear-gradient(135deg, rgba($secondary-color, 0.08), rgba($secondary-color, 0.04)); transform: translateX(4px) translateY(0); box-shadow: 0 2px 8px rgba($secondary-color, 0.1); } @media (max-width: $mobile-breakpoint) { padding: 8px 10px; } } .q-item__section--avatar { min-width: 36px; @media (max-width: $mobile-breakpoint) { min-width: 32px; } .q-icon { transition: all $transition-speed ease; } .q-item:hover & .q-icon { transform: scale(1.1); } } } // ======================================== // COIN ICON (special styling) // ======================================== .q-btn { [class*='img:'] { transition: transform $transition-speed ease; } &:hover [class*='img:'] { transform: scale(1.1) rotate(10deg); } } // ======================================== // DIALOG (con gradiente) // ======================================== .q-dialog { .q-card { background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%); box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15); border-radius: $border-radius; @media (max-width: $mobile-breakpoint) { border-radius: 0; } } .q-toolbar { background: linear-gradient(135deg, $primary-color, $primary-dark) !important; border-radius: $border-radius $border-radius 0 0; padding: 12px 16px; @media (max-width: $mobile-breakpoint) { padding: 10px 12px; border-radius: 0; } .q-toolbar-title { font-weight: 600; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); } } } // ======================================== // ANIMATIONS // ======================================== @keyframes groupItemAppear { from { opacity: 0; transform: translateY(10px) scale(0.98); } to { opacity: 1; transform: translateY(0) scale(1); } } .q-item { animation: groupItemAppear 0.35s ease-out; } // Coin icon rotation on hover @keyframes coinRotate { 0% { transform: rotateY(0deg); } 100% { transform: rotateY(360deg); } } .q-btn:hover [class*='img:'] { animation: coinRotate 0.8s ease-in-out; } // ======================================== // RESPONSIVE ADJUSTMENTS // ======================================== @media (max-width: $mobile-breakpoint) { .q-item-section { padding: 0 4px; } .q-item__label { line-height: 1.4; } .q-btn { &[rounded] { padding: 6px; } &[dense] { padding: 4px 8px; font-size: 0.875rem; } } } // ======================================== // UTILITY CLASSES // ======================================== // Glass effect variant .glass-group-item { .q-item { background: rgba(255, 255, 255, 0.7) !important; backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.3); &:hover { background: rgba(255, 255, 255, 0.85) !important; } } } // Highlighted group (admin) .admin-group { .q-item { border-left: 4px solid $warning-color; background: linear-gradient(to right, rgba($warning-color, 0.05), transparent 20%); &:hover { background: linear-gradient(to right, rgba($warning-color, 0.08), transparent 20%); box-shadow: 0 4px 16px rgba($warning-color, 0.15); } } } // Featured group .featured-group { .q-item { border: 2px solid transparent; background: linear-gradient(white, white) padding-box, $gradient-group-primary border-box; &:hover { box-shadow: 0 6px 20px rgba($secondary-color, 0.25); } } } // Active group indicator .active-group-indicator { position: absolute; top: 8px; right: 8px; width: 10px; height: 10px; border-radius: 50%; background: $gradient-group-primary; box-shadow: 0 0 8px rgba($secondary-color, 0.6); animation: pulse 2s infinite; } @keyframes pulse { 0%, 100% { box-shadow: 0 0 8px rgba($secondary-color, 0.6); } 50% { box-shadow: 0 0 16px rgba($secondary-color, 0.9); } } // Member count badge (opzionale) .member-count-badge { display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; border-radius: 12px; background: linear-gradient(135deg, rgba($info-color, 0.1), rgba($info-color, 0.05)); border: 1px solid rgba($info-color, 0.3); color: color.adjust($info-color, $lightness: 15%); font-size: 0.75rem; font-weight: 600; margin-left: 8px; .q-icon { font-size: 0.875rem; } }