compact about profiles screenshot

Compact about:profiles in Firefox

Firefox allows us to create multiple browser profiles to separate our activities, such as work, personal, finance, etc. It has an about:profiles page to manage and launch these. The page has not gotten much UX love and does not make very good use of space. On load, I can’t see the full second profile on my laptop (Macbook) screen. After living with this a long time, I decided to use userContent.css to customize the appearance so everything fits on one screen and I can quickly and easily find the two things I need most of the time: Each profile’s name, and the button to launch it with.

userContent.css is a file in the folder of a given profile at {profile}/chrome/userContent.css (see David Walsh’s instructions if you need help setting this up) that allows us to customize the styles of any pages loaded through Firefox with that profile. I used the selector #owned #profiles to target elements, since this combination of IDs is not likely to be on other pages (the styles are applied to every page we load). I got to use some of the fancy newer CSS features like has() and nesting, since I know this browser supports them.

Changes

Because we can only modify the CSS of the page, not the HTML structure or scripting, there are limits to what we can do. I did several main things to make a very compact screen:

Reducing whitespace, shrinking or removing things

html:has(#owned #profiles){
    /*--smaller text, less whitepspace */
    --font-size-root: 13px;
    --button-min-height: 2em;
    h1, h2{
        margin-top: 0;
    }
    #body{
        padding: 2em !important;
    }
    button{
        padding: 0.5em !important;
    }
    /*--make top part less tall */
    .header-flex{
        display: block !important;
        > .action-box{
            background: none !important;
            border: 0 !important;
            display: flex;
            gap: 1.5em;
            padding: 0 !important;
        }
    }
    /*--remove unneeded heading */
    h3[data-l10n-id="profiles-restart-title"]{
        display: none;
    }
}

Having the profile boxes wrap after shrinking the width

#owned #profiles{
    /*--make profile items wrap, smaller */
    display: flex;
    flex-wrap: wrap;
    gap: 1.5em;
    margin-top: 2em;
    > div{
        flex: 1 1 25em;
        position: relative;
    }
}

Hiding the profile box content except for the name and launch button, until focused

#owned #profiles{
    > div{
        max-height: 3em;
        overflow: hidden;
        transition: max-height 0.2s;
        transition-delay: 1s; /* reduces issues moving mouse to launch buttons */
        &:hover, &:focus-within{
            max-height: 18em;
        }
    }
    /*--move launch button to top left */
    button[data-l10n-id="profiles-launch-profile"]{
        min-width: 3em !important;
        overflow: hidden;
        position: absolute;
        right: 0;
        top: 0;
        white-space: nowrap;
        width: 4.4em;
    }
}

So

I had to use !important sometimes when I couldn’t otherwise get my styles to override Firefox’s. The slide open of the extra box content can be annoying and could be improved with JS or a <details> element, if we had those powers.

This has made for a fairly nice and compact interface that I much prefer to what’s built in. This is a bit fragile: If Firefox modifies this page, things could break. Hopefully, Firefox will eventually get around to improving this themselves, but for now, this works for me.