It wasn't the wild west anymore. The file structure was almost... peaceful. index.php was a skeleton, clean and logical. The real magic was in the layout folders. She opened templates/cassiopeia/html/layouts/joomla/content/full_text.php . No more hunting for a needle in a haystack of PHP tags. Everything was modular. Responsive by default? She resized her browser. The Cassiopeia template gracefully shifted from desktop to mobile like water finding its level.

She dove into user.css . The new framework inside Cassiopeia was a revelation. She didn't need a heavy framework like Bootstrap 4. The template used modern, logical CSS variables. She changed --cassiopeia-color-primary to a deep burgundy, and the entire site shifted tone.

“Okay,” she whispered. “I see you.”

As the sun set, Maya loaded the new Thornfield Manor site. The Cassiopeia template, now dressed in burgundy and old gold, displayed the timeline flawlessly. The fonts were sharp. The images lazy-loaded without a plugin. The accessibility features—built into the template’s core—meant the site scored an A on her lighthouse test without her even trying.

She created a child template called “Thornfield.” No more fighting the parent. The parent was her silent foundation; the child was her canvas.

Her first task was the header. Thornfield Manor needed a dark, leather-bound book feel, not Cassiopeia’s bright, airy default. In Joomla 3, she would have overwritten half the core files. But here? She opened and discovered user-defined child templates .

The real test came when she needed to override the login page. In Joomla 3, this was a ritual of copying files into a maze of folders. In Joomla 4, she simply clicked in the template editor, selected the com_users/login view, and a fresh default.php appeared in her child template’s folder. It felt like the system was holding her hand, not fighting her.

She created a custom HTML module, placed it in the bottom-a position, and then used the new option to give that module a unique class: timeline-flames . She didn't touch a single line of PHP. It just worked.