// ========================================== // CMENUITEM.SCSS // ========================================== // ========================================== // VARIABILI COLORI MENU // ========================================== $menu-border-color: #dedede; $menu-border-color-dark: #404040; $menu-active-color: #027be3; $menu-active-color-dark: #4da3ff; $menu-active-bg: #dadada; $menu-active-bg-dark: #2a3a4a; $menu-hover-bg: rgba(0, 0, 0, 0.04); $menu-hover-bg-dark: rgba(255, 255, 255, 0.08); $menu-text-color: rgba(0, 0, 0, 0.87); $menu-text-color-dark: rgba(255, 255, 255, 0.87); $menu-icon-color: rgba(0, 0, 0, 0.5); $menu-icon-color-dark: rgba(255, 255, 255, 0.5); $subtitle-color: #666; $subtitle-color-dark: #aaa; // Colori ruoli $color-admin: #d32f2f; $color-admin-dark: #ef5350; $color-manager: #388e3c; $color-manager-dark: #66bb6a; $color-socio: #1b5e20; $color-socio-dark: #4caf50; $color-facilitatore: #4a148c; $color-facilitatore-dark: #9c27b0; $color-collaboratore: #f57c00; $color-collaboratore-dark: #ffb74d; $color-editor: #6a1b9a; $color-editor-dark: #ab47bc; $color-commerciale: #e65100; $color-commerciale-dark: #ff9800; $color-grafico: #00796b; $color-grafico-dark: #26a69a; $color-doc: #42a5f5; $color-doc-dark: #64b5f6; // ========================================== // DEBUG CLASS // ========================================== .prova { color: red; } // ========================================== // BASE MENU STYLES // ========================================== .q-list-header { min-height: 12px; padding: 5px 8px; } .menu-hr { border-color: $menu-border-color; height: 0.5px; .body--dark & { border-color: $menu-border-color-dark; } } .list-label:first-child { line-height: 20px; padding: 5px; margin: 1px; } // ========================================== // ROUTER LINK ACTIVE // ========================================== .router-link-active { color: $menu-active-color; background-color: $menu-active-bg !important; border-right: 2px solid $menu-active-color; .body--dark & { color: $menu-active-color-dark; background-color: $menu-active-bg-dark !important; border-right-color: $menu-active-color-dark; } .item-primary { color: $menu-active-color; .body--dark & { color: $menu-active-color-dark; } } } // ========================================== // MENU ARROW // ========================================== .menu_freccina { position: absolute; right: 10px; display: inline-block; padding: 0; transform: rotate(-180deg); } // ========================================== // MENU SIZES // ========================================== .my-menu, .my-menu > i { min-height: 40px; min-width: 26px; font-size: 1rem; } .my-menu-small, .my-menu-small > i { min-height: 40px; min-width: 26px; font-size: 0.75rem; } .my-menu-icon { min-width: 2px; font-size: 1rem; > i { min-width: 26px; font-size: 1.25rem; } } .my-menu-separat > i { min-width: 26px; font-size: 1rem; } .my-menu-icon-none > i { display: none; } // ========================================== // ROLE COLORS - Con Dark Mode // ========================================== .isAdmin { color: $color-admin !important; border-left: 3px solid $color-admin; background: linear-gradient(90deg, rgba($color-admin, 0.08) 0%, rgba($color-admin, 0.02) 100%); .body--dark & { color: $color-admin-dark !important; border-left-color: $color-admin-dark; background: linear-gradient(90deg, rgba($color-admin-dark, 0.15) 0%, rgba($color-admin-dark, 0.05) 100%); } .q-avatar { background: rgba($color-admin, 0.12) !important; .q-icon { color: $color-admin; } .body--dark & { background: rgba($color-admin-dark, 0.2) !important; .q-icon { color: $color-admin-dark; } } } &:hover { background: linear-gradient(90deg, rgba($color-admin, 0.12) 0%, rgba($color-admin, 0.04) 100%); .body--dark & { background: linear-gradient(90deg, rgba($color-admin-dark, 0.2) 0%, rgba($color-admin-dark, 0.08) 100%); } } } .isManager { color: $color-manager !important; border-left: 3px solid $color-manager; background: linear-gradient(90deg, rgba($color-manager, 0.08) 0%, rgba($color-manager, 0.02) 100%); .body--dark & { color: $color-manager-dark !important; border-left-color: $color-manager-dark; background: linear-gradient(90deg, rgba($color-manager-dark, 0.15) 0%, rgba($color-manager-dark, 0.05) 100%); } .q-avatar { background: rgba($color-manager, 0.12) !important; .q-icon { color: $color-manager; } .body--dark & { background: rgba($color-manager-dark, 0.2) !important; .q-icon { color: $color-manager-dark; } } } &:hover { background: linear-gradient(90deg, rgba($color-manager, 0.12) 0%, rgba($color-manager, 0.04) 100%); .body--dark & { background: linear-gradient(90deg, rgba($color-manager-dark, 0.2) 0%, rgba($color-manager-dark, 0.08) 100%); } } } .isSocioResidente { color: $color-socio !important; .body--dark & { color: $color-socio-dark !important; } .q-avatar .q-icon { color: $color-socio; .body--dark & { color: $color-socio-dark; } } } .isFacilitatore { color: $color-facilitatore !important; .body--dark & { color: $color-facilitatore-dark !important; } .q-avatar .q-icon { color: $color-facilitatore; .body--dark & { color: $color-facilitatore-dark; } } } .onlyCollaboratore { color: $color-collaboratore !important; .body--dark & { color: $color-collaboratore-dark !important; } .q-avatar .q-icon { color: $color-collaboratore; .body--dark & { color: $color-collaboratore-dark; } } } .isEditor { color: $color-editor !important; .body--dark & { color: $color-editor-dark !important; } .q-avatar .q-icon { color: $color-editor; .body--dark & { color: $color-editor-dark; } } } .isCommerciale { color: $color-commerciale !important; .body--dark & { color: $color-commerciale-dark !important; } .q-avatar .q-icon { color: $color-commerciale; .body--dark & { color: $color-commerciale-dark; } } } .isGrafico { color: $color-grafico !important; .body--dark & { color: $color-grafico-dark !important; } .q-avatar .q-icon { color: $color-grafico; .body--dark & { color: $color-grafico-dark; } } } .isDoc { border-left: 3px solid $color-doc; background: linear-gradient(90deg, rgba($color-doc, 0.08) 0%, rgba($color-doc, 0.02) 100%); .body--dark & { border-left-color: $color-doc-dark; background: linear-gradient(90deg, rgba($color-doc-dark, 0.15) 0%, rgba($color-doc-dark, 0.05) 100%); } } .isCalendar { // Placeholder per eventuali stili calendario } // ========================================== // ICONS & AVATARS // ========================================== .clicon, .clicon img { font-size: 16px; } .q-item__section--avatar { min-width: 30px; } .imgicon img { font-size: 2.5rem !important; border-radius: 8px; } .clexpansion { min-width: 0 !important; } // ========================================== // MENU ACTIVE STATE // ========================================== .my-menu-active { background: linear-gradient(90deg, rgba($menu-active-color, 0.12) 0%, rgba($menu-active-color, 0.05) 100%) !important; border-radius: 8px; border-right: 3px solid $menu-active-color; .body--dark & { background: linear-gradient(90deg, rgba($menu-active-color-dark, 0.2) 0%, rgba($menu-active-color-dark, 0.08) 100%) !important; border-right-color: $menu-active-color-dark; } span { color: $menu-active-color; font-weight: 600; .body--dark & { color: $menu-active-color-dark; } } .q-avatar { background: rgba($menu-active-color, 0.1) !important; .body--dark & { background: rgba($menu-active-color-dark, 0.2) !important; } .q-icon { color: $menu-active-color; .body--dark & { color: $menu-active-color-dark; } } } &:hover { background: linear-gradient(90deg, rgba($menu-active-color, 0.16) 0%, rgba($menu-active-color, 0.08) 100%) !important; .body--dark & { background: linear-gradient(90deg, rgba($menu-active-color-dark, 0.25) 0%, rgba($menu-active-color-dark, 0.12) 100%) !important; } } } // ========================================== // BIG MENU - Titoli grandi // ========================================== .bigmenu { font-size: 1.2rem; font-weight: 700; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); letter-spacing: -0.01em; .body--dark & { text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); } } // ========================================== // SUBTITLE // ========================================== .subtitle { font-size: 0.8rem; color: $subtitle-color; font-style: italic; margin-top: 2px; opacity: 0.85; line-height: 1.3; .body--dark & { color: $subtitle-color-dark; } } // ========================================== // QUASAR COMPONENT OVERRIDES // ========================================== // Q-SEPARATOR .q-separator { background: linear-gradient(90deg, transparent 0%, rgba(0, 0, 0, 0.1) 50%, transparent 100%); margin: 6px 0; height: 1px; .body--dark & { background: linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.15) 50%, transparent 100%); } } // Q-EXPANSION-ITEM .q-expansion-item { border-radius: 8px; margin-bottom: 2px; overflow: hidden; > .q-item { border-radius: 8px; padding: 6px 10px; transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1); &:hover { background: $menu-hover-bg; transform: translateX(2px); .body--dark & { background: $menu-hover-bg-dark; } } } .q-item__label { font-size: 0.95rem; font-weight: 500; } .q-icon { transition: all 0.3s ease; font-size: 0.9rem; color: $menu-icon-color; .body--dark & { color: $menu-icon-color-dark; } } // Expanded state &--expanded > .q-item { background: rgba(0, 0, 0, 0.02); .body--dark & { background: rgba(255, 255, 255, 0.05); } .q-icon { color: var(--q-primary); transform: rotate(0deg); } } } // Q-ITEM .q-item { border-radius: 8px; padding: 6px 10px; margin-bottom: 2px; transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1); min-height: 42px; &:hover { background: $menu-hover-bg; transform: translateX(3px); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08); .body--dark & { background: $menu-hover-bg-dark; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); } } &:active { transform: translateX(1px); } .q-item__section--thumbnail { min-width: 36px; padding-right: 10px; } > .q-item__section > span:not(.subtitle) { font-size: 0.95rem; font-weight: 500; color: $menu-text-color; .body--dark & { color: $menu-text-color-dark; } } } // Q-AVATAR .q-avatar { transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); background: transparent !important; &.rounded { border-radius: 8px; overflow: hidden; } .q-icon { font-size: 1.3rem; transition: all 0.3s ease; } } .q-item:hover .q-avatar { transform: scale(1.08); .q-icon { transform: rotate(-5deg); } } // ========================================== // INDENTATION TRANSITION // ========================================== [style*="paddingLeft"] { transition: all 0.3s ease; } // ========================================== // EXTRA CLASSES // ========================================== .extraclass { // Placeholder per classi custom } // ========================================== // ANIMATIONS // ========================================== @keyframes fadeSlideIn { from { opacity: 0; transform: translateX(-8px); } to { opacity: 1; transform: translateX(0); } } .q-item, .q-expansion-item { animation: fadeSlideIn 0.3s ease; } // ========================================== // ACCESSIBILITY - Focus States // ========================================== .q-item, .q-expansion-item { &:focus-visible { outline: 2px solid var(--q-primary); outline-offset: 2px; border-radius: 8px; } } // ========================================== // RESPONSIVE // ========================================== @media screen and (max-width: 600px) { .q-item { padding: 5px 8px; min-height: 40px; } .q-expansion-item > .q-item { padding: 5px 8px; } .q-avatar { width: 1.8rem !important; height: 1.8rem !important; font-size: 1.8rem !important; .q-icon { font-size: 1.1rem; } } .q-item__section--thumbnail { min-width: 32px; padding-right: 8px; } .bigmenu { font-size: 1.1rem; } .subtitle { font-size: 0.75rem; } }