## Step 1: Define the symbolic variables
Let's define the symbolic variables for the quantities of snack mix A and snack mix B in the special mix. We denote the quantity of snack mix A as $x_1$ and the quantity of snack mix B as $x_2$.

## Step 2: Formulate the objective function
The objective is to minimize the cost of the special mix. The cost per snack mix A is $1.00 and the cost per snack mix B is $1.20. Therefore, the objective function can be represented as $1.00x_1 + 1.20x_2$.

## 3: Define the constraints
1. The special mix must contain at least 90 cashews. Since each snack mix A has 20 cashews and each snack mix B has 10 cashews, the constraint can be written as $20x_1 + 10x_2 \geq 90$.
2. The special mix must contain at least 80 peanuts. Since each snack mix A has 30 peanuts and each snack mix B has 45 peanuts, the constraint can be written as $30x_1 + 45x_2 \geq 80$.
3. There can be at most 12 of snack mix A in the mixture, which can be written as $x_1 \leq 12$.
4. Non-negativity constraints: $x_1 \geq 0$ and $x_2 \geq 0$, since the quantities of snack mixes cannot be negative.

## 4: Symbolic representation
The symbolic representation of the problem is:
```json
{
'sym_variables': [('x1', 'snack mix A'), ('x2', 'snack mix B')],
'objective_function': '1.00*x1 + 1.20*x2',
'constraints': [
    '20*x1 + 10*x2 >= 90',
    '30*x1 + 45*x2 >= 80',
    'x1 <= 12',
    'x1 >= 0',
    'x2 >= 0'
]
}
```

## 5: Gurobi code
Now, let's write the Gurobi code in Python to solve this optimization problem:
```python
import gurobi

def solve_optimization_problem():
    # Create a new model
    model = gurobi.Model()

    # Define the variables
    x1 = model.addVar(lb=0, name="snack_mix_A")
    x2 = model.addVar(lb=0, name="snack_mix_B")

    # Objective function: minimize 1.00*x1 + 1.20*x2
    model.setObjective(1.00*x1 + 1.20*x2, gurobi.GRB.MINIMIZE)

    # Constraints
    model.addConstr(20*x1 + 10*x2 >= 90, name="cashew_constraint")
    model.addConstr(30*x1 + 45*x2 >= 80, name="peanut_constraint")
    model.addConstr(x1 <= 12, name="snack_mix_A_limit")

    # Solve the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal solution found.")
        print(f"Snack mix A: {x1.varValue}")
        print(f"Snack mix B: {x2.varValue}")
        print(f"Objective: {model.objVal}")
    else:
        print("No optimal solution found.")

solve_optimization_problem()
```