# ๐ŸŽจ DESIGN SYSTEM - Documentazione Completa NetGescon > **Sistema di Design dell'interfaccia universale** > **๐Ÿ“… Creato:** 21/07/2025 > **๐Ÿ”„ Ultimo aggiornamento:** 21/07/2025 > **๐ŸŽฏ Prioritร :** โšก ALTO --- ## ๐Ÿ“‹ **OVERVIEW DESIGN SYSTEM** Il Design System NetGescon fornisce **LINEE GUIDA UNIFICATE** per: - ๐ŸŽจ **Palette Colori** - ๐Ÿ“ **Typography System** - ๐Ÿ“ **Spacing & Layout** - ๐Ÿ”˜ **Button Styles** - ๐Ÿ“‹ **Form Elements** - ๐Ÿ“Š **Data Visualization** - ๐ŸŽญ **Icons & Graphics** ### ๐ŸŽฏ **Design Philosophy** - **Consistenza** - Ogni elemento segue le stesse regole - **Scalabilitร ** - Facilmente estendibile e mantenibile - **Accessibilitร ** - WCAG 2.1 AA compliant - **Performance** - Ottimizzato per velocitร  e fluiditร  --- ## ๐ŸŒˆ **PALETTE COLORI** ### ๐ŸŽจ **CSS Variables System** ```css /* /public/css/design-system/colors.css */ :root { /* === PRIMARY COLORS === */ --netgescon-primary: #2563eb; /* Blue 600 */ --netgescon-primary-light: #3b82f6; /* Blue 500 */ --netgescon-primary-dark: #1d4ed8; /* Blue 700 */ --netgescon-primary-50: #eff6ff; /* Blue 50 */ --netgescon-primary-100: #dbeafe; /* Blue 100 */ --netgescon-primary-200: #bfdbfe; /* Blue 200 */ /* === SECONDARY COLORS === */ --netgescon-secondary: #64748b; /* Slate 500 */ --netgescon-secondary-light: #94a3b8; /* Slate 400 */ --netgescon-secondary-dark: #475569; /* Slate 600 */ /* === SEMANTIC COLORS === */ --netgescon-success: #16a34a; /* Green 600 */ --netgescon-success-light: #22c55e; /* Green 500 */ --netgescon-success-dark: #15803d; /* Green 700 */ --netgescon-success-50: #f0fdf4; /* Green 50 */ --netgescon-warning: #d97706; /* Orange 600 */ --netgescon-warning-light: #f59e0b; /* Orange 500 */ --netgescon-warning-dark: #b45309; /* Orange 700 */ --netgescon-warning-50: #fffbeb; /* Orange 50 */ --netgescon-danger: #dc2626; /* Red 600 */ --netgescon-danger-light: #ef4444; /* Red 500 */ --netgescon-danger-dark: #b91c1c; /* Red 700 */ --netgescon-danger-50: #fef2f2; /* Red 50 */ --netgescon-info: #0891b2; /* Cyan 600 */ --netgescon-info-light: #06b6d4; /* Cyan 500 */ --netgescon-info-dark: #0e7490; /* Cyan 700 */ --netgescon-info-50: #ecfeff; /* Cyan 50 */ /* === NEUTRAL COLORS === */ --netgescon-white: #ffffff; --netgescon-gray-50: #f8fafc; --netgescon-gray-100: #f1f5f9; --netgescon-gray-200: #e2e8f0; --netgescon-gray-300: #cbd5e1; --netgescon-gray-400: #94a3b8; --netgescon-gray-500: #64748b; --netgescon-gray-600: #475569; --netgescon-gray-700: #334155; --netgescon-gray-800: #1e293b; --netgescon-gray-900: #0f172a; --netgescon-black: #000000; /* === GRADIENTS === */ --netgescon-gradient-primary: linear-gradient(135deg, var(--netgescon-primary-light) 0%, var(--netgescon-primary) 100%); --netgescon-gradient-success: linear-gradient(135deg, var(--netgescon-success-light) 0%, var(--netgescon-success) 100%); --netgescon-gradient-warning: linear-gradient(135deg, var(--netgescon-warning-light) 0%, var(--netgescon-warning) 100%); --netgescon-gradient-danger: linear-gradient(135deg, var(--netgescon-danger-light) 0%, var(--netgescon-danger) 100%); /* === SHADOWS === */ --netgescon-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); --netgescon-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); --netgescon-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); --netgescon-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); --netgescon-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); /* === BORDERS === */ --netgescon-border-radius: 8px; --netgescon-border-radius-sm: 4px; --netgescon-border-radius-md: 6px; --netgescon-border-radius-lg: 12px; --netgescon-border-radius-xl: 16px; --netgescon-border-radius-full: 9999px; } ``` ### ๐ŸŽจ **Color Usage Guide** ```css /* Primary - Per azioni principali */ .btn-primary { background-color: var(--netgescon-primary); } .text-primary { color: var(--netgescon-primary); } .border-primary { border-color: var(--netgescon-primary); } /* Success - Per conferme e successi */ .alert-success { background-color: var(--netgescon-success-50); color: var(--netgescon-success-dark); } .icon-success { color: var(--netgescon-success); } /* Warning - Per avvisi e attenzioni */ .alert-warning { background-color: var(--netgescon-warning-50); color: var(--netgescon-warning-dark); } .badge-warning { background-color: var(--netgescon-warning); } /* Danger - Per errori e azioni distruttive */ .btn-danger { background-color: var(--netgescon-danger); } .text-danger { color: var(--netgescon-danger); } /* Neutral - Per testi e backgrounds */ .bg-gray-50 { background-color: var(--netgescon-gray-50); } .text-gray-900 { color: var(--netgescon-gray-900); } .border-gray-200 { border-color: var(--netgescon-gray-200); } ``` --- ## ๐Ÿ“ **TYPOGRAPHY SYSTEM** ### โšก **Font Configuration** ```css /* /public/css/design-system/typography.css */ /* === FONT FAMILIES === */ :root { --netgescon-font-family-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; --netgescon-font-family-mono: 'JetBrains Mono', 'Fira Code', Consolas, 'Liberation Mono', Menlo, Monaco, 'Courier New', monospace; } /* === FONT SIZES === */ :root { --netgescon-text-xs: 0.75rem; /* 12px */ --netgescon-text-sm: 0.875rem; /* 14px */ --netgescon-text-base: 1rem; /* 16px */ --netgescon-text-lg: 1.125rem; /* 18px */ --netgescon-text-xl: 1.25rem; /* 20px */ --netgescon-text-2xl: 1.5rem; /* 24px */ --netgescon-text-3xl: 1.875rem; /* 30px */ --netgescon-text-4xl: 2.25rem; /* 36px */ --netgescon-text-5xl: 3rem; /* 48px */ --netgescon-text-6xl: 4rem; /* 64px */ } /* === FONT WEIGHTS === */ :root { --netgescon-font-thin: 100; --netgescon-font-light: 300; --netgescon-font-normal: 400; --netgescon-font-medium: 500; --netgescon-font-semibold: 600; --netgescon-font-bold: 700; --netgescon-font-extrabold: 800; --netgescon-font-black: 900; } /* === LINE HEIGHTS === */ :root { --netgescon-leading-none: 1; --netgescon-leading-tight: 1.25; --netgescon-leading-snug: 1.375; --netgescon-leading-normal: 1.5; --netgescon-leading-relaxed: 1.625; --netgescon-leading-loose: 2; } ``` ### ๐Ÿ“– **Typography Classes** ```css /* === HEADINGS === */ .netgescon-h1 { font-size: var(--netgescon-text-4xl); font-weight: var(--netgescon-font-bold); line-height: var(--netgescon-leading-tight); color: var(--netgescon-gray-900); margin-bottom: 1.5rem; } .netgescon-h2 { font-size: var(--netgescon-text-3xl); font-weight: var(--netgescon-font-semibold); line-height: var(--netgescon-leading-tight); color: var(--netgescon-gray-900); margin-bottom: 1.25rem; } .netgescon-h3 { font-size: var(--netgescon-text-2xl); font-weight: var(--netgescon-font-semibold); line-height: var(--netgescon-leading-snug); color: var(--netgescon-gray-900); margin-bottom: 1rem; } .netgescon-h4 { font-size: var(--netgescon-text-xl); font-weight: var(--netgescon-font-medium); line-height: var(--netgescon-leading-snug); color: var(--netgescon-gray-900); margin-bottom: 0.75rem; } /* === BODY TEXT === */ .netgescon-body { font-size: var(--netgescon-text-base); font-weight: var(--netgescon-font-normal); line-height: var(--netgescon-leading-relaxed); color: var(--netgescon-gray-700); } .netgescon-body-sm { font-size: var(--netgescon-text-sm); font-weight: var(--netgescon-font-normal); line-height: var(--netgescon-leading-normal); color: var(--netgescon-gray-600); } .netgescon-body-lg { font-size: var(--netgescon-text-lg); font-weight: var(--netgescon-font-normal); line-height: var(--netgescon-leading-relaxed); color: var(--netgescon-gray-700); } /* === SPECIAL TEXT === */ .netgescon-label { font-size: var(--netgescon-text-sm); font-weight: var(--netgescon-font-medium); line-height: var(--netgescon-leading-normal); color: var(--netgescon-gray-700); display: block; margin-bottom: 0.5rem; } .netgescon-caption { font-size: var(--netgescon-text-xs); font-weight: var(--netgescon-font-normal); line-height: var(--netgescon-leading-normal); color: var(--netgescon-gray-500); } .netgescon-code { font-family: var(--netgescon-font-family-mono); font-size: var(--netgescon-text-sm); background-color: var(--netgescon-gray-100); padding: 0.125rem 0.25rem; border-radius: var(--netgescon-border-radius-sm); color: var(--netgescon-gray-800); } ``` --- ## ๐Ÿ“ **SPACING & LAYOUT** ### ๐Ÿ“ **Spacing Scale** ```css /* /public/css/design-system/spacing.css */ :root { /* === SPACING SCALE === */ --netgescon-space-0: 0; --netgescon-space-px: 1px; --netgescon-space-0-5: 0.125rem; /* 2px */ --netgescon-space-1: 0.25rem; /* 4px */ --netgescon-space-1-5: 0.375rem; /* 6px */ --netgescon-space-2: 0.5rem; /* 8px */ --netgescon-space-2-5: 0.625rem; /* 10px */ --netgescon-space-3: 0.75rem; /* 12px */ --netgescon-space-3-5: 0.875rem; /* 14px */ --netgescon-space-4: 1rem; /* 16px */ --netgescon-space-5: 1.25rem; /* 20px */ --netgescon-space-6: 1.5rem; /* 24px */ --netgescon-space-7: 1.75rem; /* 28px */ --netgescon-space-8: 2rem; /* 32px */ --netgescon-space-9: 2.25rem; /* 36px */ --netgescon-space-10: 2.5rem; /* 40px */ --netgescon-space-12: 3rem; /* 48px */ --netgescon-space-16: 4rem; /* 64px */ --netgescon-space-20: 5rem; /* 80px */ --netgescon-space-24: 6rem; /* 96px */ --netgescon-space-32: 8rem; /* 128px */ /* === LAYOUT CONSTANTS === */ --netgescon-header-height: 70px; --netgescon-footer-height: 70px; --netgescon-sidebar-width: 280px; --netgescon-sidebar-collapsed-width: 70px; --netgescon-container-max-width: 1280px; } ``` ### ๐Ÿ—๏ธ **Layout Utilities** ```css /* === CONTAINER === */ .netgescon-container { width: 100%; max-width: var(--netgescon-container-max-width); margin-left: auto; margin-right: auto; padding-left: var(--netgescon-space-4); padding-right: var(--netgescon-space-4); } /* === FLEXBOX UTILITIES === */ .netgescon-flex { display: flex; } .netgescon-flex-col { flex-direction: column; } .netgescon-flex-wrap { flex-wrap: wrap; } .netgescon-items-center { align-items: center; } .netgescon-items-start { align-items: flex-start; } .netgescon-items-end { align-items: flex-end; } .netgescon-justify-center { justify-content: center; } .netgescon-justify-between { justify-content: space-between; } .netgescon-justify-start { justify-content: flex-start; } .netgescon-justify-end { justify-content: flex-end; } /* === GRID UTILITIES === */ .netgescon-grid { display: grid; } .netgescon-grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } .netgescon-grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .netgescon-grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .netgescon-grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .netgescon-grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); } .netgescon-grid-cols-12 { grid-template-columns: repeat(12, minmax(0, 1fr)); } .netgescon-gap-1 { gap: var(--netgescon-space-1); } .netgescon-gap-2 { gap: var(--netgescon-space-2); } .netgescon-gap-3 { gap: var(--netgescon-space-3); } .netgescon-gap-4 { gap: var(--netgescon-space-4); } .netgescon-gap-6 { gap: var(--netgescon-space-6); } .netgescon-gap-8 { gap: var(--netgescon-space-8); } ``` --- ## ๐Ÿ”˜ **BUTTON SYSTEM** ### ๐ŸŽจ **Button Base Styles** ```css /* /public/css/design-system/buttons.css */ .btn { /* Base button styles */ display: inline-flex; align-items: center; justify-content: center; border-radius: var(--netgescon-border-radius); font-weight: var(--netgescon-font-medium); transition: all 0.2s ease-in-out; cursor: pointer; border: 1px solid transparent; text-decoration: none; white-space: nowrap; user-select: none; /* Size defaults */ padding: var(--netgescon-space-2-5) var(--netgescon-space-4); font-size: var(--netgescon-text-sm); line-height: 1.25; } .btn:disabled, .btn.disabled { opacity: 0.6; cursor: not-allowed; pointer-events: none; } /* === BUTTON SIZES === */ .btn-xs { padding: var(--netgescon-space-1) var(--netgescon-space-2); font-size: var(--netgescon-text-xs); } .btn-sm { padding: var(--netgescon-space-2) var(--netgescon-space-3); font-size: var(--netgescon-text-sm); } .btn-md { padding: var(--netgescon-space-2-5) var(--netgescon-space-4); font-size: var(--netgescon-text-sm); } .btn-lg { padding: var(--netgescon-space-3) var(--netgescon-space-6); font-size: var(--netgescon-text-base); } .btn-xl { padding: var(--netgescon-space-4) var(--netgescon-space-8); font-size: var(--netgescon-text-lg); } /* === BUTTON VARIANTS === */ .btn-primary { background-color: var(--netgescon-primary); border-color: var(--netgescon-primary); color: white; } .btn-primary:hover { background-color: var(--netgescon-primary-dark); border-color: var(--netgescon-primary-dark); transform: translateY(-1px); box-shadow: var(--netgescon-shadow-md); } .btn-secondary { background-color: var(--netgescon-secondary); border-color: var(--netgescon-secondary); color: white; } .btn-secondary:hover { background-color: var(--netgescon-secondary-dark); border-color: var(--netgescon-secondary-dark); } .btn-success { background-color: var(--netgescon-success); border-color: var(--netgescon-success); color: white; } .btn-success:hover { background-color: var(--netgescon-success-dark); border-color: var(--netgescon-success-dark); } .btn-warning { background-color: var(--netgescon-warning); border-color: var(--netgescon-warning); color: white; } .btn-warning:hover { background-color: var(--netgescon-warning-dark); border-color: var(--netgescon-warning-dark); } .btn-danger { background-color: var(--netgescon-danger); border-color: var(--netgescon-danger); color: white; } .btn-danger:hover { background-color: var(--netgescon-danger-dark); border-color: var(--netgescon-danger-dark); } /* === OUTLINE VARIANTS === */ .btn-outline-primary { background-color: transparent; border-color: var(--netgescon-primary); color: var(--netgescon-primary); } .btn-outline-primary:hover { background-color: var(--netgescon-primary); color: white; } /* === GHOST VARIANTS === */ .btn-ghost { background-color: transparent; border-color: transparent; color: var(--netgescon-gray-700); } .btn-ghost:hover { background-color: var(--netgescon-gray-100); color: var(--netgescon-gray-900); } /* === ICON BUTTONS === */ .btn-icon-only { padding: var(--netgescon-space-2); width: 2.5rem; height: 2.5rem; } .btn-icon-only.btn-sm { width: 2rem; height: 2rem; padding: var(--netgescon-space-1-5); } .btn-icon-only.btn-lg { width: 3rem; height: 3rem; padding: var(--netgescon-space-3); } ``` --- ## ๐Ÿ“‹ **FORM ELEMENTS** ### ๐ŸŽฏ **Input Styles** ```css /* /public/css/design-system/forms.css */ .form-input { display: block; width: 100%; padding: var(--netgescon-space-2-5) var(--netgescon-space-3); font-size: var(--netgescon-text-sm); line-height: 1.5; color: var(--netgescon-gray-900); background-color: var(--netgescon-white); border: 1px solid var(--netgescon-gray-300); border-radius: var(--netgescon-border-radius); transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } .form-input:focus { outline: none; border-color: var(--netgescon-primary); box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); } .form-input.is-invalid { border-color: var(--netgescon-danger); } .form-input.is-invalid:focus { border-color: var(--netgescon-danger); box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.1); } /* === INPUT SIZES === */ .form-input-sm { padding: var(--netgescon-space-1-5) var(--netgescon-space-2-5); font-size: var(--netgescon-text-xs); } .form-input-lg { padding: var(--netgescon-space-4) var(--netgescon-space-4); font-size: var(--netgescon-text-base); } /* === SELECT STYLES === */ .form-select { display: block; width: 100%; padding: var(--netgescon-space-2-5) var(--netgescon-space-8) var(--netgescon-space-2-5) var(--netgescon-space-3); font-size: var(--netgescon-text-sm); line-height: 1.5; color: var(--netgescon-gray-900); background-color: var(--netgescon-white); background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right var(--netgescon-space-3) center; background-size: 16px 12px; border: 1px solid var(--netgescon-gray-300); border-radius: var(--netgescon-border-radius); transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; appearance: none; } .form-select:focus { border-color: var(--netgescon-primary); outline: none; box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); } /* === CHECKBOX & RADIO === */ .form-check-input { width: 1rem; height: 1rem; margin-top: 0.25rem; vertical-align: top; background-color: var(--netgescon-white); border: 1px solid var(--netgescon-gray-300); appearance: none; color: var(--netgescon-primary); background-repeat: no-repeat; background-position: center; background-size: contain; transition: all 0.15s ease-in-out; } .form-check-input[type="checkbox"] { border-radius: var(--netgescon-border-radius-sm); } .form-check-input[type="radio"] { border-radius: 50%; } .form-check-input:checked { background-color: var(--netgescon-primary); border-color: var(--netgescon-primary); } .form-check-input:checked[type="checkbox"] { background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3 6-6'/%3E%3C/svg%3E"); } .form-check-input:checked[type="radio"] { background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='2' fill='%23fff'/%3E%3C/svg%3E"); } /* === FORM GROUPS === */ .form-group { margin-bottom: var(--netgescon-space-4); } .form-label { display: inline-block; margin-bottom: var(--netgescon-space-2); font-weight: var(--netgescon-font-medium); color: var(--netgescon-gray-700); } .form-label.required::after { content: ' *'; color: var(--netgescon-danger); } .form-text { margin-top: var(--netgescon-space-1); font-size: var(--netgescon-text-xs); color: var(--netgescon-gray-500); } .invalid-feedback { display: block; width: 100%; margin-top: var(--netgescon-space-1); font-size: var(--netgescon-text-xs); color: var(--netgescon-danger); } ``` --- ## ๐Ÿ“Š **DATA VISUALIZATION** ### ๐Ÿ“ˆ **Chart Color Palettes** ```css /* /public/css/design-system/charts.css */ :root { /* === CHART COLORS === */ --netgescon-chart-primary: var(--netgescon-primary); --netgescon-chart-secondary: var(--netgescon-secondary); --netgescon-chart-success: var(--netgescon-success); --netgescon-chart-warning: var(--netgescon-warning); --netgescon-chart-danger: var(--netgescon-danger); --netgescon-chart-info: var(--netgescon-info); /* === CHART PALETTE === */ --netgescon-chart-palette-1: #2563eb; --netgescon-chart-palette-2: #16a34a; --netgescon-chart-palette-3: #d97706; --netgescon-chart-palette-4: #dc2626; --netgescon-chart-palette-5: #7c3aed; --netgescon-chart-palette-6: #0891b2; --netgescon-chart-palette-7: #be185d; --netgescon-chart-palette-8: #059669; /* === CHART GRADIENTS === */ --netgescon-chart-gradient-1: linear-gradient(180deg, rgba(37, 99, 235, 0.2) 0%, rgba(37, 99, 235, 0.05) 100%); --netgescon-chart-gradient-2: linear-gradient(180deg, rgba(22, 163, 74, 0.2) 0%, rgba(22, 163, 74, 0.05) 100%); --netgescon-chart-gradient-3: linear-gradient(180deg, rgba(217, 119, 6, 0.2) 0%, rgba(217, 119, 6, 0.05) 100%); } ``` ### ๐Ÿ“Š **Table Styles** ```css .netgescon-table { width: 100%; margin-bottom: var(--netgescon-space-4); color: var(--netgescon-gray-900); border-collapse: collapse; } .netgescon-table th, .netgescon-table td { padding: var(--netgescon-space-3) var(--netgescon-space-4); text-align: left; border-bottom: 1px solid var(--netgescon-gray-200); } .netgescon-table thead th { background-color: var(--netgescon-gray-50); font-weight: var(--netgescon-font-semibold); color: var(--netgescon-gray-700); font-size: var(--netgescon-text-sm); text-transform: uppercase; letter-spacing: 0.025em; } .netgescon-table tbody tr:hover { background-color: var(--netgescon-gray-50); } .netgescon-table-striped tbody tr:nth-child(odd) { background-color: var(--netgescon-gray-50); } .netgescon-table-striped tbody tr:nth-child(odd):hover { background-color: var(--netgescon-gray-100); } ``` --- ## ๐ŸŽญ **ICONS & GRAPHICS** ### ๐ŸŽจ **Icon System** ```css /* /public/css/design-system/icons.css */ .netgescon-icon { display: inline-block; vertical-align: middle; color: currentColor; } .netgescon-icon-xs { font-size: var(--netgescon-text-xs); } .netgescon-icon-sm { font-size: var(--netgescon-text-sm); } .netgescon-icon-md { font-size: var(--netgescon-text-base); } .netgescon-icon-lg { font-size: var(--netgescon-text-lg); } .netgescon-icon-xl { font-size: var(--netgescon-text-xl); } .netgescon-icon-2xl { font-size: var(--netgescon-text-2xl); } /* === ICON COLORS === */ .netgescon-icon-primary { color: var(--netgescon-primary); } .netgescon-icon-secondary { color: var(--netgescon-secondary); } .netgescon-icon-success { color: var(--netgescon-success); } .netgescon-icon-warning { color: var(--netgescon-warning); } .netgescon-icon-danger { color: var(--netgescon-danger); } .netgescon-icon-info { color: var(--netgescon-info); } .netgescon-icon-muted { color: var(--netgescon-gray-500); } /* === ICON BUTTONS === */ .netgescon-icon-button { display: inline-flex; align-items: center; justify-content: center; width: 2.5rem; height: 2.5rem; border-radius: var(--netgescon-border-radius); background-color: transparent; border: none; color: var(--netgescon-gray-600); cursor: pointer; transition: all 0.2s ease-in-out; } .netgescon-icon-button:hover { background-color: var(--netgescon-gray-100); color: var(--netgescon-gray-900); } .netgescon-icon-button:focus { outline: none; box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); } ``` --- ## ๐Ÿ“ฑ **RESPONSIVE DESIGN TOKENS** ### ๐Ÿ“ **Breakpoints** ```css /* /public/css/design-system/responsive.css */ :root { /* === BREAKPOINTS === */ --netgescon-breakpoint-sm: 640px; --netgescon-breakpoint-md: 768px; --netgescon-breakpoint-lg: 1024px; --netgescon-breakpoint-xl: 1280px; --netgescon-breakpoint-2xl: 1536px; } /* === MEDIA QUERIES === */ @media (min-width: 640px) { .sm\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .sm\:text-lg { font-size: var(--netgescon-text-lg); } } @media (min-width: 768px) { .md\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .md\:text-xl { font-size: var(--netgescon-text-xl); } .md\:p-6 { padding: var(--netgescon-space-6); } } @media (min-width: 1024px) { .lg\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .lg\:text-2xl { font-size: var(--netgescon-text-2xl); } .lg\:p-8 { padding: var(--netgescon-space-8); } } ``` --- ## ๐Ÿš€ **USAGE EXAMPLES** ### ๐ŸŽฏ **Complete Component Example** ```blade

Gestione Stabili

Gestisci tutti gli stabili del tuo portafoglio immobiliare con strumenti avanzati.
124
Stabili Totali
98%
Occupazione
โ‚ฌ2.4M
Valore
``` --- ## ๐Ÿงช **TESTING & VALIDATION** ### โœ… **Design System Checklist** - [ ] **Colori** - Tutti i colori seguono le variabili CSS - [ ] **Typography** - Font sizes e weights consistenti - [ ] **Spacing** - Margini e padding seguono la scala - [ ] **Componenti** - Stili riutilizzabili e modulari - [ ] **Responsiveness** - Breakpoints funzionali - [ ] **Accessibilitร ** - Contrasto e focus states - [ ] **Performance** - CSS ottimizzato e minificato ### ๐ŸŽจ **Style Guide Generator** ```blade @extends('layouts.admin') @section('title', 'Style Guide NetGescon') @section('content')

Palette Colori

Primary

Typography

Heading 1

Heading 2

Heading 3

Heading 4

Body text regular

Body text small

Buttons

@endsection ``` --- ## ๐Ÿ“š **FILES CORRELATI** ### ๐ŸŽจ **Design System Files** - `/public/css/design-system/` (directory) - `/public/css/design-system/colors.css` - `/public/css/design-system/typography.css` - `/public/css/design-system/spacing.css` - `/public/css/design-system/buttons.css` - `/public/css/design-system/forms.css` - `/public/css/design-system/charts.css` - `/public/css/design-system/icons.css` - `/public/css/design-system/responsive.css` ### ๐Ÿ“„ **Template Files** - `/resources/views/admin/style-guide.blade.php` - `/resources/views/components/design-system/` (directory) --- ## ๐ŸŽฏ **NEXT STEPS** ### ๐Ÿ”ฎ **Design System Evolution** - [ ] **CSS Variables 2.0** - Support per advanced features - [ ] **Dark Mode** - Tema scuro completo - [ ] **Animation Library** - Micro-animations standardizzate - [ ] **Component Variants** - Piรน varianti per ogni componente - [ ] **Design Tokens Export** - Export per altri tools --- *๐Ÿ“ Documento mantenuto da: GitHub Copilot AI Assistant* *๐Ÿ”— Componente: Design System NetGescon Interface v2.1.0*