VulpesOS/gaia/apps/system/style/statusbar/statusbar.css
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

605 lines
14 KiB
CSS
Executable file

/* In both fullscreen modes, accept pointer events to trigger the status bar
unless the utility tray is showing. */
#screen.fullscreen-app:not(.utility-tray) #top-panel,
#screen:not(.utility-tray):-moz-full-screen-ancestor > #top-panel {
pointer-events: all;
}
#statusbar {
position: fixed;
width: 100%;
height: var(--statusbar-height);
top: 0;
right: 0;
pointer-events: none;
transform: translateY(0);
transition: none;
}
/* We need a wrapper for being able to translateY the parent div
without affecting the -moz-elements pointing to it while transitioning */
#statusbar-wrapper {
position: absolute;
display: block;
overflow: hidden;
width: 100%;
height: var(--statusbar-height);
transform: translateY(0);
}
/* This is the remaining space left by the collapsed rocketbar */
#statusbar #statusbar-icons {
width: calc(100% - 100% * var(--rocketbar-scale) + 8rem * var(--rocketbar-scale) - 0.5rem);
}
#statusbar:not(.hidden).maximized #statusbar-icons {
width: 100%;
}
.statusbar {
display: flex;
justify-content: flex-start;
align-items: flex-start;
flex-wrap: wrap-reverse;
flex-direction: row-reverse;
position: absolute;
width: 100%;
height: var(--statusbar-height);
margin: 0;
top: 0;
offset-inline-end: 0;
padding: 0 0.3rem;
overflow: hidden;
white-space: nowrap;
box-sizing: border-box;
}
.statusbar > div,
.statusbar > img {
pointer-events: auto;
}
/* Hide the statusbar out of the viewport in order
to be available for moz-elements */
#statusbar.hidden,
#screen:not(.attention).utility-tray-in-transition > #statusbar,
#screen.utility-tray-in-transition > #statusbar,
#screen:not(.locked):not(.minimized-tray):not(.rocketbar-focused):not(.utility-tray) #statusbar.fullscreen,
#screen:not(.locked):not(.minimized-tray):not(.rocketbar-focused):not(.utility-tray) #statusbar.fullscreen-layout,
#screen.locked.secure-app:not(.minimized-tray):not(.rocketbar-focused):not(.utility-tray).fullscreen-app #statusbar,
#screen.locked.secure-app:not(.minimized-tray):not(.rocketbar-focused):not(.utility-tray).fullscreen-layout-app #statusbar {
transform: translateY(-100%);
}
@media (orientation: landscape) {
#screen.software-button-enabled #statusbar {
width: calc(100% - var(--software-home-button-height));
right: var(--software-home-button-height);
}
}
#screen.attention #statusbar {
top: 0;
background-color: black;
}
/* AppChrome would normally provide the theme color for the statusbar.
However, when in native full-screen mode, AppChrome isn't visible; just
use black for now, as we do with #screen.attention. */
#screen:-moz-full-screen-ancestor #statusbar {
background-color: black;
}
#screen.utility-tray #statusbar {
background-color: transparent;
}
/* Hiding the black background while the homescreen is in foreground but not
* utility tray or attention screen */
#screen.lockscreen-camera > #statusbar {
transform: scaleY(0);
}
html[dir="ltr"] #screen.lockscreen-camera > #statusbar { transform-origin: left top; }
html[dir="rtl"] #screen.lockscreen-camera > #statusbar { transform-origin: right top; }
#screen.locked:not(.attention) #statusbar {
background-color: transparent;
display: block;
transform: scaleY(1);
}
#screen.attention.locked #statusbar-time {
display: block;
}
.statusbar > * {
margin: 0.6rem 0.2rem;
}
#screen.rocketbar-focused:not(.locked) .statusbar {
visibility: hidden;
opacity: 0;
}
.utility-tray #statusbar > #statusbar-title,
#statusbar-title.hidden {
visibility: visible;
transform: translateY(var(--statusbar-height));
}
/* Icons */
body .utility-tray .statusbar > .sb-start {
visibility: hidden;
transform: translateY(var(--statusbar-height));
}
#statusbar-operator {
margin-inline-start: 0.8rem;
color: #ffffff;
font-size: 1.5rem;
font-weight: 400;
line-height: 1.6rem;
}
#statusbar-time, #statusbar-data:not(.sb-icon-data-circle) {
position: relative;
color: #fff;
font-size: 1.5rem;
font-weight: 400;
line-height: 1.6rem;
}
#statusbar-time span {
margin: 0;
font-size: 1.1rem;
}
/* signal and data icons */
#statusbar-mobile-connection {
margin: 0;
padding: 0;
font-weight: 300;
}
#statusbar-mobile-connection > * {
pointer-events: none;
margin: 0.6rem 0.2rem;
}
html[dir="ltr"] #statusbar-mobile-connection > * { float: left; }
html[dir="rtl"] #statusbar-mobile-connection > * { float: right; }
#statusbar-mobile-connection .sb-icon-roaming {
margin: 0;
top: 0.6rem;
position: relative;
width: 1rem;
offset-inline-start: 0;
}
#statusbar-mobile-connection .statusbar-data:not(.sb-icon-data-circle) {
color: #fff;
font-size: 1.5rem;
position: relative;
bottom: 0.1rem;
}
#statusbar-mobile-connection .statusbar-data:not(.sb-icon-data-circle) {
background: none;
width: auto;
}
#statusbar-mobile-connection .statusbar-signal {
position: relative;
margin-left: 0.8rem; /* BiDi-proof: sim number/data indicator on the left */
}
#statusbar-mobile-connection[data-multiple="true"] .statusbar-signal::before {
position: absolute;
font-size: 1rem;
bottom: -.2rem;
left: -0.6rem;
}
#statusbar-mobile-connection[data-multiple="true"] .statusbar-signal[data-index="0"]::before {
content: '1';
}
#statusbar-mobile-connection[data-multiple="true"] .statusbar-signal[data-index="1"]::before {
content: '2';
}
#statusbar-mobile-connection[data-multiple="true"] .statusbar-signal[data-index="2"]::before {
content: '3';
}
#statusbar-mobile-connection[data-multiple="true"] .statusbar-signal[data-index="3"]::before {
content: '4';
}
#statusbar-mobile-connection .statusbar-signal .statusbar-data {
position: relative;
margin: 0;
font-size: 1rem;
text-align: left;
top: -.5rem;
left: -.7rem;
}
#statusbar-mobile-connection[data-multiple="true"] .statusbar-signal .statusbar-data {
top: -.5rem;
left: -.7rem;
text-align: left;
}
#statusbar-mobile-connection[data-multiple="true"] .statusbar-data.sb-icon-data-circle {
top: -0.3rem;
left: -0.8rem;
}
#statusbar-mobile-connection .statusbar-data.sb-icon-data-circle {
top: -.1rem;
offset-inline-start: -0.1rem;
width: 0.8rem;
height: 0.8rem;
background-size: 16.8rem 4.8rem;
}
html[dir="ltr"] #statusbar-mobile-connection .statusbar-data.sb-icon-data-circle {
background-position: left -5.8rem top -4rem;
}
html[dir="rtl"] #statusbar-mobile-connection .statusbar-data.sb-icon-data-circle {
background-position: right -5.8rem top -4rem;
}
#statusbar-mobile-connection[data-multiple="true"] .statusbar-data[hidden] {
display: block;
opacity: 0;
visibility: hidden;
}
/* call forwarding icons */
#statusbar-call-forwardings {
margin: 0;
padding: 0;
}
#statusbar-call-forwardings > * {
pointer-events: none;
margin: 0.4rem 0.6rem;
}
html[dir="ltr"] #statusbar-call-forwardings > * { float: left; }
html[dir="rtl"] #statusbar-call-forwardings > * { float: right; }
#statusbar-call-forwardings .sb-icon-call-forwarding {
position: relative;
}
#statusbar-call-forwardings[data-multiple="true"] .sb-icon-call-forwarding::before {
position: absolute;
font-size: 0.8rem;
top: 0.5rem;
left: -0.6rem;
}
#statusbar-call-forwardings[data-multiple="true"] .sb-icon-call-forwarding[data-index="0"]::before {
content: '1';
}
#statusbar-call-forwardings[data-multiple="true"] .sb-icon-call-forwarding[data-index="1"]::before {
content: '2';
}
#statusbar-call-forwardings[data-multiple="true"] .sb-icon-call-forwarding[data-index="2"]::before {
content: '3';
}
#statusbar-call-forwardings[data-multiple="true"] .sb-icon-call-forwarding[data-index="3"]::before {
content: '4';
}
.sb-icon {
width: 1.6rem;
height: 1.6rem;
background: url('images/icons.png') no-repeat;
background-size: 34rem 9.6rem;
}
.sb-icon-battery {
width: 2.5rem;
}
.sb-icon-battery[data-level="0"] {
background-position: 0 0;
}
.sb-icon-battery[data-level="10"] {
background-position: -2.8rem 0;
}
.sb-icon-battery[data-level="20"] {
background-position: -5.6rem 0;
}
.sb-icon-battery[data-level="30"] {
background-position: -8.4rem 0;
}
.sb-icon-battery[data-level="40"] {
background-position: -11.2rem 0;
}
.sb-icon-battery[data-level="50"] {
background-position: -14rem 0;
}
.sb-icon-battery[data-level="60"] {
background-position: -16.8rem 0;
}
.sb-icon-battery[data-level="70"] {
background-position: -19.6rem 0;
}
.sb-icon-battery[data-level="80"] {
background-position: -22.4rem 0;
}
.sb-icon-battery[data-level="90"] {
background-position: -25.2rem 0;
}
.sb-icon-battery[data-level="100"] {
background-position: -28rem 0;
}
.sb-icon-battery:not([data-level]) {
background-position: -30.8rem 0;
}
.sb-icon-battery:not([data-level])[data-charging="true"],
.sb-icon-battery[data-level="0"][data-charging="true"] {
background-position: 0 -2rem;
}
.sb-icon-battery[data-level="10"][data-charging="true"] {
background-position: -2.8rem -2rem;
}
.sb-icon-battery[data-level="20"][data-charging="true"] {
background-position: -5.6rem -2rem;
}
.sb-icon-battery[data-level="30"][data-charging="true"] {
background-position: -8.4rem -2rem;
}
.sb-icon-battery[data-level="40"][data-charging="true"] {
background-position: -11.2rem -2rem;
}
.sb-icon-battery[data-level="50"][data-charging="true"] {
background-position: -14rem -2rem;
}
.sb-icon-battery[data-level="60"][data-charging="true"] {
background-position: -16.8rem -2rem;
}
.sb-icon-battery[data-level="70"][data-charging="true"] {
background-position: -19.6rem -2rem;
}
.sb-icon-battery[data-level="80"][data-charging="true"] {
background-position: -22.4rem -2rem;
}
.sb-icon-battery[data-level="90"][data-charging="true"] {
background-position: -25.2rem -2rem;
}
.sb-icon-battery[data-level="100"][data-charging="true"] {
background-position: -28rem -2rem;
}
.sb-icon-wifi[data-level="0"][data-connecting="true"] {
background: url('images/wifi-connecting.png') no-repeat;
background-position: 0 0;
background-size: 1.6rem;
}
.sb-icon-wifi:not([data-level]),
.sb-icon-wifi[data-level="0"] {
background-position: 0 -6rem;
}
.sb-icon-wifi[data-level="1"] {
background-position: -2rem -6rem;
}
.sb-icon-wifi[data-level="2"] {
background-position: -4rem -6rem;
}
.sb-icon-wifi[data-level="3"] {
background-position: -6rem -6rem;
}
.sb-icon-wifi[data-level="4"] {
background-position: -8rem -6rem;
}
.sb-icon-airplane-mode {
background-position: 0 -4rem;
}
.sb-icon-signal[data-level="-1"][data-searching="true"] {
background: url('images/signal-searching.png') no-repeat;
background-position: 0 0;
background-size: 1.6rem;
}
.sb-icon-signal[data-level="-1"] {
background-position: -2rem -4rem;
}
.sb-icon-signal[data-level="0"] {
background-position: -4rem -4rem;
}
.sb-icon-signal[data-level="1"] {
background-position: -6rem -4rem;
}
.sb-icon-signal[data-level="2"] {
background-position: -8rem -4rem;
}
.sb-icon-signal[data-level="3"] {
background-position: -10rem -4rem;
}
.sb-icon-signal[data-level="4"] {
background-position: -12rem -4rem;
}
.sb-icon-signal[data-level="5"] {
background-position: -14rem -4rem;
}
.sb-icon-signal {
/* default icon is the "no sim" icon */
background-position: -14rem -8rem;
position: relative;
}
.sb-icon-network-activity {
width: 1.6rem;
height: 1.6rem;
/* HACK: This enforces allocation of a dedicated layer just for this animated
* icon, remove after bug 717872 gets fixed. */
display: block;
transform: perspective(0.1rem);
}
.sb-icon-network-activity[hidden] {
display: none;
}
.sb-icon-headphone {
background-position: -18rem -4rem;
}
.sb-icon-bluetooth-headphone {
background-position: -22rem -8rem;
}
.sb-icon-bluetooth-transfer {
background-position: -28rem -8rem;
}
.sb-icon-geolocation {
background-position: -22rem -4rem;
}
.sb-icon-geolocation[data-active="true"] {
background-position: -20rem -4rem;
}
.sb-icon-recording {
background-position: -26rem -4rem;
}
.sb-icon-recording[data-active="true"] {
background-position: -24rem -4rem;
}
.sb-icon-roaming {
background-position: -16.3rem -4rem;
}
.sb-icon-alarm {
background-position: -28rem -4rem;
}
.sb-icon-tethering {
background-position: -12rem -6rem;
}
.sb-icon-tethering[data-active="true"] {
background-position: -10rem -6rem;
}
.sb-icon-bluetooth {
background-position: -24rem -6rem;
}
.sb-icon-bluetooth[data-active="true"] {
background-position: -22rem -6rem;
}
.sb-icon-mute {
background-position: -26rem -6rem;
}
.sb-icon-mute.vibration {
background-position: -20rem -6rem;
}
.sb-icon-usb {
background-position: -28rem -6rem;
}
.sb-icon-emergency-callback {
background-position: -24rem -8rem;
}
.sb-icon-sms {
background-position: -14rem -6rem;
position: relative;
}
.sb-icon-sms::before {
content: attr(data-num);
position: absolute;
color: #000;
top: 0.4rem;
offset-inline-start: 0;
width: 100%;
text-align: center;
font-size: 1.15rem; /*5pt was 0.8rem */
}
.sb-icon-download {
width: 1.6rem;
height: 1.6rem;
/* HACK: This enforces allocation of a dedicated layer just for this animated
* icon, remove after bug 717872 gets fixed. */
display: block;
transform: perspective(0.1rem);
}
.sb-icon-download[hidden] {
display: none;
}
.sb-icon-call-forwarding {
background-position: -20rem -8rem;
}
.sb-icon-playing {
background-position: -18rem -8rem;
}
.sb-icon-nfc {
background-position: -26rem -8rem;
}
.sb-icon-debugging {
background: none;
text-align: center;
}
.sb-icon-debugging::before {
font-size: 1.6rem;
line-height: 1.6rem;
}
/* Hide icons applying a class to the status bar */
.sb-hide-time .sb-icon-time,
.sb-hide-battery .sb-icon-battery,
.sb-hide-airplane-mode .sb-icon-airplane-mode,
.sb-hide-wifi .sb-icon-wifi,
.sb-hide-mobile-connection .sb-icon-mobile-connection,
.sb-hide-network-activity .sb-icon-network-activity,
.sb-hide-tethering .sb-icon-tethering,
.sb-hide-bluetooth .sb-icon-bluetooth,
.sb-hide-nfc .sb-icon-nfc,
.sb-hide-debugging .sb-icon-debugging,
.sb-hide-emergency-callback .sb-icon-emergency-callback,
.sb-hide-download .sb-icon-download,
.sb-hide-usb .sb-icon-usb,
.sb-hide-mute .sb-icon-mute,
.sb-hide-recording .sb-icon-recording,
.sb-hide-geolocation .sb-icon-geolocation,
.sb-hide-call-forwardings .sb-icon-call-forwarding,
.sb-hide-bluetooth-headphone .sb-icon-bluetooth-headphone,
.sb-hide-headphone .sb-icon-headphone,
.sb-hide-playing .sb-icon-playing,
.sb-hide-bluetooth-transfer .sb-icon-bluetooth-transfer,
.sb-hide-alarm .sb-icon-alarm,
.sb-hide-sms .sb-icon-sms {
display: none;
}
/* Using visibility for operator so that the element width is known at all time. */
.utility-tray .sb-hide-operator .statusbar > .sb-icon-operator {
visibility: hidden;
}