/* Grades — real-time grade sync by subject */ function GradesScreen({ onNav, onBack }) { const baseSubjects = [ { subj:'Mathematics', teacher:'Mr. Allen', icon:'calculator', tint:'var(--blue-100)', ic:'var(--blue-500)', grade:'A-', pct:91, trend:'up' }, { subj:'Science', teacher:'Ms. Rivera', icon:'flask-conical',tint:'var(--gold-100)', ic:'var(--gold-600)', grade:'B+', pct:88, trend:'up' }, { subj:'English (ELA)',teacher:'Mrs. Johnson',icon:'book-open', tint:'var(--success-100)', ic:'var(--success-500)', grade:'B', pct:84, trend:'down' }, { subj:'Social Studies',teacher:'Mr. Diaz', icon:'globe', tint:'var(--info-100)', ic:'var(--info-500)', grade:'A', pct:95, trend:'flat' }, { subj:'Art', teacher:'Ms. Park', icon:'palette', tint:'var(--danger-100)', ic:'var(--danger-500)', grade:'A', pct:97, trend:'flat' }, ]; const letterFor = (p) => p>=93?'A':p>=90?'A-':p>=87?'B+':p>=83?'B':p>=80?'B-':p>=77?'C+':p>=73?'C':p>=70?'C-':'D'; const [live, setLive] = React.useState({}); React.useEffect(() => { const read = () => { try { const all = JSON.parse(localStorage.getItem('jl_grades') || '{}'); setLive(all[jlChild().id] || {}); } catch(e){} }; read(); const onStore = (e) => { if (e.key === 'jl_grades') read(); }; window.addEventListener('storage', onStore); const iv = setInterval(read, 1500); return () => { window.removeEventListener('storage', onStore); clearInterval(iv); }; }, []); const subjects = baseSubjects.map(s => { const p = live[s.subj]; return p!=null ? { ...s, pct:p, grade:letterFor(p) } : s; }); const es = window.JL_LANG === 'es'; const SUBJ_ES = { 'Mathematics':'Matemáticas', 'Science':'Ciencias', 'English (ELA)':'Inglés (ELA)', 'Social Studies':'Estudios Sociales', 'Art':'Arte', 'Math':'Mate', 'ELA':'ELA' }; const sName = (s) => es ? (SUBJ_ES[s] || s) : s; const recent = [ { title:'Fractions Quiz', subj:'Math', score:'18/20', grade:'A-', bg:'var(--success-100)', fg:'var(--success-600)', when:'Graded today' }, { title:'Reading Response', subj:'ELA', score:'C+', grade:'C+', bg:'var(--warning-100)', fg:'var(--warning-600)', when:'Graded yesterday' }, { title:'Lab Report', subj:'Science', score:'27/30', grade:'B+', bg:'var(--success-100)', fg:'var(--success-600)', when:'Graded May 28' }, ]; const gradeColor = (g) => g.startsWith('A') ? 'var(--success-500)' : g.startsWith('B') ? 'var(--blue-500)' : g.startsWith('C') ? 'var(--warning-600)' : 'var(--danger-500)'; const trendIcon = { up:'trending-up', down:'trending-down', flat:'minus' }; const trendColor = { up:'var(--success-500)', down:'var(--danger-500)', flat:'var(--gray-400)' }; return (