fix(portal): build the shell's stylesheet, and give it the brand it already had
portal.css is built with `source(none)`, so a template not named in an
@source line contributes nothing. layouts/portal.blade.php was not named.
Every utility the shell alone used — h-8 w-8 on the logo, max-w-2xl on the
column, pb-28 above the tab bar — was absent from the bundle, so a tenant
logo rendered at its natural size, the page went wider than the phone, and
the first tab sat off-screen. The layouts are scanned now, and a test asserts
they stay scanned.
The rail made it worse: .rail padded itself 1rem and pulled back -1rem, the
bleed trick for a rail inside a padded column. Its one caller sits in an
unpadded header and supplies its own padding, so the negative margins had
nothing to cancel and made the element 2rem wider than the viewport.
Colour. OC Sport themed their website navy and gold and never opened the
branding screen, so the portal, the PWA theme colour and the admin were all
still on our shipped blue. Branding colours still sitting on the default are
now inherited from the academy's own website palette; picking any colour
settles it. Editing the site bumps the brand cache, or the rest of the
product keeps yesterday's palette indefinitely.
That exposed what shade 600 was doing as a link colour: anchored on the
tenant's own colour, it lands within 0.02 of a dark navy, so links rendered
as body text. ColorRamp now derives an interactive colour placed at a
lightness that reads as a colour and clears 4.5:1 on the surface it is drawn
on — one for light, one for dark — and an ink() for the semantic palette,
which is chosen to be seen as a fill: amber is about 2:1 as 10px text on
white, and that is what every error message and status chip was using.
Filled buttons get a computed foreground instead of a hardcoded #fff.
Screens: the outstanding balance was a third of a three-across statistics
row, wrapping onto two lines, and repeated verbatim in the action list above
it. It is one fact and it is the fact members open the app for, so it is the
headline, figure large and currency small, and the row is two tiles. Icon
path data was retyped in three places and the home screen's copies were
truncated mid-curve — a member saw a tick where a wallet should be — so
there is one icon component. The status chip five screens built by hand is
one component too.
Co-Authored-By:
Claude Opus 5 (1M context) <noreply@anthropic.com>
Showing
Please register or sign in to comment