## 1. Algorithm Explanations - [x] 1.1 Update ModeToggle description text for "maximize-count" mode with multi-sentence explanation covering: finds largest set of achievable specializations, ranking used only as tiebreaker - [x] 1.2 Update ModeToggle description text for "priority-order" mode with multi-sentence explanation covering: processes specializations in ranked order top-to-bottom, locks in highest-ranked first, then adds more ## 2. Skeleton Loading - [x] 2.1 Add skeleton placeholder component to CourseSelection.tsx — render 2-3 pulsing rectangular divs matching course button dimensions when `loading && !analysis && !isPinned` - [x] 2.2 Remove the existing "analyzing..." text label from ElectiveSet ## 3. Expanded Achieved Specializations - [x] 3.1 Change SpecializationRanking `expanded` state initialization to include all achieved specialization IDs from `result.achieved` - [x] 3.2 Add effect or derived state to update `expanded` set when `result.achieved` changes, ensuring newly achieved specializations are auto-expanded