• Mahmoud Aglan's avatar
    fix(portal): build the shell's stylesheet, and give it the brand it already had · fdeedfd2
    Mahmoud Aglan authored
    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: 's avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
    fdeedfd2