I noticed the new breakpoint values for theme options in 6.9, so I started updating my design system plugin to build off of them, and ran into this. Since it’s not in the documentation yet, I’m not sure whether it’s a legitimate bug or whether I’ve just stumbled onto something as yet unfinished.
What I’m trying to do is run the design system mobile-first — base breakpoint at the smallest size with overrides going up — since that’s how the rest of my type scale works.
Repro (Pro 6.9.0, Cornerstone 7.9.0):
- Theme Options → Layout & Design → Breakpoints → click the smallest (phone) icon to make it the base.
- In Layout, click the Site Width label to open its breakpoint popover, and set an override on any band above the base — say the 4th slot,
70%. - Save and view the front end.
What I get:
@media screen and (max-width:-1px){ :root{ --x-layout-site-width:90%; } }
The media query is max-width:-1px , so it can never match and the override never applies. No error — it just silently doesn’t work.
What I expected: the override to come through as a min-width query, the way element-level breakpoints already do. Calling DeclarationReducer::resolveMediaQuery() with the same base and slot gives me @media screen and (min-width: 480px) , which is right.
Where I think it’s coming from: Breakpoints::generateBreakpointCSS() looks like it only handles overrides below the base. There’s no min-width -only branch, and the upward walk starts at $max = $base , only reassigning when it finds a populated slot or the base above the current one. With the base underneath, $max stays at the base and $maxw computes as $ranges[0] - 1 , hence -1 . The element path has explicit min-only, max-only and bounded branches plus a direction, and handles it fine — looks like the newer theme-options generator didn’t inherit that logic.
With the base left at the default (largest), everything works exactly as expected — I’ve got per-breakpoint theme options rendering correctly and it’s a big improvement for what I’m building. It’s only the non-default base that breaks.