Generate WORKING Manim code for Scene 1.

IMPLEMENTATION: ```python
from manim import *

class DaniellCellScene(Scene):
    def construct(self):
        # Layout Plan:
        # 1. Title: Text - .to_edge(UP, buff=0.5) - Introduce the concept
        title = Text("Daniell Cell: Basic Components").to_edge(UP, buff=0.5).set_color(WHITE)

        # 2. Visual Focus: Diagram of Daniell cell - Group of Shapes - .shift(LEFT * 2.5) - Show zinc, copper electrodes, electrolytes, salt bridge
        # Zinc electrode (anode) - BLUE
        zinc_electrode = Rectangle(width=0.6, height=1.5, color=BLUE).shift(LEFT * 2.5 + DOWN * 0.25)
        zinc_label = Text("Zn (Anode)").scale(0.5).next_to(zinc_electrode, DOWN, buff=0.1).set_color(BLUE)
        # Copper electrode (cathode) - RED
        copper_electrode = Rectangle(width=0.6, height=1.5, color=RED).shift(RIGHT * 2.5 + DOWN * 0.25)
        copper_label = Text("Cu (Cathode)").scale(0.5).next_to(copper_electrode, DOWN, buff=0.1).set_color(RED)
        # Electrolyte solutions - Circles behind electrodes
        zinc_solution = Circle(radius=1.2, color=BLUE, fill_opacity=0.2).move_to(zinc_electrode.get_center() + UP * 0.5)
        copper_solution = Circle(radius=1.2, color=RED, fill_opacity=0.2).move_to(copper_electrode.get_center() + UP * 0.5)
        # Salt bridge - Rectangle in center
        salt_bridge = Rectangle(width=0.4, height=2.5, color=YELLOW, fill_opacity=0.3).shift(0)

        diagram_group = VGroup(
            zinc_solution, zinc_electrode, zinc_label,
            copper_solution, copper_electrode, copper_label,
            salt_bridge
        )

        # 3. Main equation: MathTex - .shift(UP * 1.5) - Show simple redox equation
        # Simple_equation pattern: Zn -> Zn^{2+} + 2e^-  and Cu^{2+} + 2e^- -> Cu
        main_eq = MathTex(
            r"\mathrm{Zn} \rightarrow \mathrm{Zn}^{2+} + 2e^-",
            r"\quad|\quad",
            r"\mathrm{Cu}^{2+} + 2e^- \rightarrow \mathrm{Cu}"
        ).shift(UP * 1.5).set_color(WHITE)

        # 4. Secondary text: Text - .shift(DOWN * 1.5) - Explanation of cell function and salt bridge
        explanation = Text(
            "Daniell cell converts chemical energy into electrical energy.\n"
            "Zinc (anode) undergoes oxidation.\n"
            "Copper (cathode) undergoes reduction.\n"
            "Salt bridge maintains electrical neutrality."
        ).scale(0.6).shift(DOWN * 1.5).set_color(WHITE)

        # Animation Sequence:

        # 1. Show title
        self.play(Write(title), run_time=1.5)

        # 2. Show diagram on left and right sides
        self.play(Create(diagram_group), run_time=2)
        # Keep title, fade out nothing yet

        # 3. Show main equation at upper center
        self.play(Write(main_eq), run_time=1.5)
        # Keep title, diagram, main_eq visible

        # 4. Show explanation text at lower center
        self.play(Write(explanation), run_time=2)

        # Pause briefly to let viewer read
        self.wait(2)

        # Cleanup:
        # Fade out explanation and diagram, keep title and main equation visible
        self.play(
            FadeOut(explanation),
            FadeOut(diagram_group),
            run_time=1.5
        )

        # Transition text (secondary text) - .shift(DOWN * 1.5)
        transition_text = Text(
            "Having understood the physical setup,\n"
            "next we explore the chemical reactions driving the cell’s operation."
        ).scale(0.6).shift(DOWN * 1.5).set_color(GREEN)

        self.play(Write(transition_text), run_time=2)

        # Final cleanup: fade out transition text and title, keep main equation visible
        self.play(
            FadeOut(transition_text),
            FadeOut(title),
            run_time=1.5
        )

        # Keep main equation visible for next scene or end
        self.wait(1)
```
---

**Explanation:**

- Title is positioned `.to_edge(UP, buff=0.5)` (top edge).
- Diagram elements (zinc electrode, copper electrode, electrolyte solutions, salt bridge) are grouped and shifted left and right by 2.5 units respectively.
- Main equation is shifted `UP * 1.5` (upper center).
- Explanation text is shifted `DOWN * 1.5` (lower center).
- All elements fit within the screen limits.
- Only allowed Manim objects and colors used.
- Animations limited to Write, Create, FadeIn, FadeOut.
- Cleanup rules followed: fade out explanation and diagram after showing, keep main equation visible, fade out title and transition text at the end.
- Transition text introduced as secondary text at the bottom.
- Simple redox equation used as main equation (pattern: simple_equation).
- Colors: Zinc electrode and solution in BLUE, Copper electrode and solution in RED, Salt bridge in YELLOW, transition text in GREEN, all other text in WHITE.

This plan strictly follows the positioning and content requirements.
PATTERN: simple_equation

CRITICAL CONSTRAINTS:
1. Use ONLY these objects: Text, MathTex, Axes, Circle, Rectangle, Line, Arrow, Dot, SurroundingRectangle, VGroup
2. Use ONLY these animations: Write, Create, FadeIn, FadeOut 
3. Use ONLY these colors (no quotes): BLUE, RED, GREEN, YELLOW, WHITE, ORANGE, PURPLE
4. NO undefined objects like VideoFile, Slider, ImageMobject
5. NO Unicode characters - use LaTeX: \sqrt{} not √, \pm not ±

POSITIONING REQUIREMENTS (CRITICAL):
- Each element MUST have unique position within screen bounds
- SAFE positions only: .to_edge(UP), .shift(UP*1.5), .shift(DOWN*1.5), .shift(LEFT*2.5), .shift(RIGHT*2.5)
- NO extreme shifts: avoid UP*3, DOWN*3, LEFT*4, RIGHT*4 (goes off-screen)
- NO overlapping: if one element uses .shift(UP*1.5), others must use different positions
- Test positions: Title=top, Main=upper center, Secondary=lower center, Sides=left/right

TEMPLATE TO ADAPT:

        # Title positioned at top
        title = Text("{title}").scale(0.8).to_edge(UP, buff=0.5)
        
        # Main equation in center-upper area
        equation = MathTex(r"{equation}").scale(1.2).shift(UP * 0.5)
        
        # Description below equation
        description = Text("{description}").scale(0.6).shift(DOWN * 1.5)
        
        # Simple highlight
        highlight = SurroundingRectangle(equation, color=YELLOW, buff=0.2)
        
        # Progressive animation
        self.play(Write(title))
        self.wait(1)
        self.play(Write(equation))
        self.wait(1)
        self.play(Create(highlight))
        self.wait(1)
        self.play(Write(description))
        self.wait(2)
                

Replace placeholders with scene-specific values and ensure working Manim code.

Generate complete Python code: