loopable / web /src /styles /wave41 /map.css
fsanyoto's picture
Deploy AIOS web (React glide grid + FastAPI slice)
2183dbe verified
Raw
History Blame
3.62 kB
/* wave 41 lane stylesheet: map. Kept separate so no lane edits index.css.
Tokens live in index.css :root and customer-grid/theme.ts -- declare there, consume here. */
/* SELECTED PIN (wave 41 item 18): deliberately NO rule here, and that is the point of this note.
Every pin colour on the map is painted from customer-grid/MapView.tsx as an SVG PRESENTATION
ATTRIBUTE (SERIES, DEFAULT_PIN, OVERFLOW, and now LP_MAP_SELECTED), so the selected fill and
ring live in TS beside their siblings instead of being split across two seams.
Two reasons not to move any of that here:
1. Any CSS declaration outranks a presentation attribute, so a `fill:` or `stroke:` rule added
to this file would SILENTLY WIN over the TS value. The constant would go dead, the pin would
still paint, and nothing would look wrong in a diff.
2. This file is scanned by neither gate: verify_icons.py reads a hardcoded STYLESHEETS list of
five files that does not include it, and verify_map.py's css_scan reads
customer-grid/map.css, a different file. A rule placed here is unverified by both.
To change the selected pin colour, change theme.ts::LP_MAP_SELECTED and its --lp-map-selected
mirror in index.css :root, which is the pair verify_icons.py::token_parity actually compares.
The .cg-map-pin.is-selected { paint-order: stroke } rule stays in index.css and is what makes
the ring paint OUTSIDE the fill disc rather than straddling its edge. */
/* ROUTE FOOT ROW (wave 41 item 19 / R13): THREE BUTTONS NOW, NOT TWO.
`Update calculation` joins `Save route` / `Update route` and `Clear route` in .cg-route-foot,
so the row that was built for a pair has to carry a trio without any of them changing shape.
index.css gives every button in that row `flex: 1 1 0`, which is equal thirds: inside a 360px
panel that is roughly 109px each, and only one of the three labels needs more than that. The
result would be a middle button wrapped onto two lines between two single-line neighbours,
which is a new control shape by accident (DESIGN.md §4 authorises none). `flex-basis: auto`
sizes each button from its own label and still shares the leftover width, so the three read as
siblings. `nowrap` keeps a label whole and `flex-wrap` is what pays for it: on a narrowed panel
the ROW breaks between whole buttons instead of squeezing every label past reading width.
⚠ SPECIFICITY, NOT ORDER, AND THE DIFFERENCE IS LOAD-BEARING HERE. This file is @imported near
the TOP of index.css, so its rules sit BEFORE the .cg-route-foot rules in the cascade and an
equal-specificity selector would lose every tie to them. The .cg-route-popover prefix wins
outright whatever the order. The second selector below exists for the same reason and not as a
duplicate: `.cg-route-popover .cg-btn.cg-route-cta` already sets `white-space: normal` at three
classes, which is exactly the weight of the first selector here, so only a four-class selector
can answer it. Clear route and Update calculation both carry that class.
⚠ UNGATED, SAID OUT LOUD. Per this file's own note above, neither verify_icons.py nor
verify_map.py::css_scan reads this stylesheet, and verify_map.py's `css route-foot-is-a-row`
leg reads src/index.css by name. Nothing reds if these two rules are deleted; the foot row
simply goes back to equal thirds with one wrapped label. */
.cg-route-popover .cg-route-foot {
flex-wrap: wrap;
}
.cg-route-popover .cg-route-foot .cg-btn,
.cg-route-popover .cg-route-foot .cg-btn.cg-route-cta {
flex: 1 1 auto;
white-space: nowrap;
}