Mental Health Factors – Drag and Drop
    
        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }
        body {
            font-family: -apple-system, BlinkMacSystemFont, “Segoe UI”, Roboto, “Helvetica Neue”, Arial, sans-serif;
            line-height: 1.5;
            padding: 2rem;
        }
        .container {
            max-width: 1200px;
            margin: 0 auto;
        }
        h1 {
            font-size: 1.5rem;
            margin-bottom: 2rem;
        }
        .flasks-grid {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            gap: 2rem;
            margin-bottom: 2rem;
        }
        .flask-container {
            display: flex;
            align-items: center;
            gap: 1rem;
        }
        .flask-wrapper {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 0.5rem;
        }
        .flask-label {
            background-color: #e5e5e5;
            padding: 0.25rem 0.75rem;
            border-radius: 2px;
            font-size: 0.875rem;
            width: 100%;
            text-align: center;
        }
        .flask {
            width: 120px;
            height: 180px;
            border: 2px solid #ccc;
            border-radius: 4px;
            background-color: white;
            padding: 0.5rem;
        }
        .flask[data-state=”mental-illness”] {
            background-color: #fee2e2;
        }
        .factors-container {
            display: flex;
            flex-direction: column;
            gap: 0.25rem;
            align-items: center;
        }
        .flask-status {
            font-size: 0.875rem;
            text-align: center;
            font-weight: 500;
        }
        .flask-description {
            font-size: 0.875rem;
            text-align: center;
            max-width: 200px;
        }
        .arrow {
            font-size: 2rem;
            color: black;
        }
        .factors {
            display: flex;
            flex-direction: column;
            gap: 1rem;
        }
        .factor {
            display: flex;
            align-items: center;
            gap: 0.5rem;
            cursor: move;
            font-size: 0.875rem;
        }
        .factor-icon {
            display: inline-flex;
            align-items: center;
            justify-content: center;
        }
        .factor-icon.genetic {
            color: #3b82f6;
        }
        .factor-icon.environmental {
            color: #ef4444;
        }
        .factor-icon.protective {
            color: #eab308;
        }
        .dropped-factor {
            width: 20px;
            height: 20px;
            display: flex;
            align-items: center;
            justify-content: center;
        }
        @media (max-width: 768px) {
            .flasks-grid {
                grid-template-columns: 1fr;
            }
            
            .flask-container {
                justify-content: center;
            }
        }
    
    
        Proof of concept – Drag and Drop marbles and stars
        
        
            
            
                
                    Flask 1
                    
                    
                        Unaffected
                        Jar is not full
                     
                    
                        Obstetric complications
                        Head injury
                     
                 
                ➔
             
            
                
                    Flask 2
                    
                    
                        Unaffected
                        Jar is not full
                     
                    
                        Start street drugs
                        Relationship breakup
                        Stressful move
                     
                 
                ➔
             
            
                
                    Flask 3
                    
                    
                        Mental illness
                        Jar is full
                     
                 
             
            
            
                
                    Flask 4
                    
                    
                        Mental illness
                        Jar is full
                     
                    
                        Reduce stress
                        Stop street drugs
                        Start antipsychotic medication
                     
                 
                ➔
             
            
                
                    Flask 5
                    
                    
                        Unaffected
                        Jar is not full
                     
                    
                        Continue meds
                        Good nutrition
                        Enough sleep
                        Exercise
                     
                 
                ➔
             
            
                
                    Flask 6
                    
                    
                        Unaffected
                        Jar is not full
                     
                 
             
         
        
            
                ●
                Genetic vulnerability factor
            
            
                ★
                Environmental vulnerability factor
            
            
                ⚠
                Protective factor
            
         
     
    
        function allowDrop(event) {
            event.preventDefault();
        }
        function drag(event) {
            const factor = event.target;
            event.dataTransfer.setData(‘text/plain’, factor.dataset.type);
        }
        function drop(event) {
            event.preventDefault();
            const flask = event.target.closest(‘.flask’);
            const factorsContainer = flask.querySelector(‘.factors-container’);
            
            if (!flask || !factorsContainer) return;
            
            const factorType = event.dataTransfer.getData(‘text/plain’);
            const factor = document.createElement(‘div’);
            factor.className = ‘dropped-factor’;
            
            let icon;
            switch (factorType) {
                case ‘genetic’:
                    icon = ‘●’;
                    factor.style.color = ‘#3b82f6’;
                    break;
                case ‘environmental’:
                    icon = ‘★’;
                    factor.style.color = ‘#ef4444’;
                    break;
                case ‘protective’:
                    icon = ‘⚠’;
                    factor.style.color = ‘#eab308’;
                    break;
                default:
                    return;
            }
            
            factor.textContent = icon;
            factorsContainer.appendChild(factor);
            
            // Update flask status based on factors
            const factorCount = factorsContainer.children.length;
            const statusElement = flask.parentElement.querySelector(‘.flask-status’);
            if (statusElement) {
                const [stateElement, fullElement] = statusElement.children;
                fullElement.textContent = `Jar is ${factorCount > 5 ? ‘full’ : ‘not full’}`;
            }
        }