Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
223 lines
5.2 KiB
CSS
Executable file
223 lines
5.2 KiB
CSS
Executable file
/* Since the UtilityTray overlays the entire screen, we must ensure that it
|
|
doesn't get displayed until after it has loaded. This class is removed in
|
|
utility_tray.js. */
|
|
.utility-tray-loading {
|
|
visibility: hidden;
|
|
}
|
|
|
|
.tray {
|
|
--tray-invisible-gripper-height: 2rem;
|
|
--scrollbar-width: 15px;
|
|
--software-buttons-width-adjustment: 0px;
|
|
--software-buttons-height-adjustment: 0px;
|
|
|
|
position: relative;
|
|
width: calc(100% + var(--scrollbar-width));
|
|
height: 100%;
|
|
overflow-x: hidden;
|
|
overflow-y: scroll;
|
|
|
|
pointer-events: none;
|
|
will-change: scroll-position;
|
|
}
|
|
|
|
/* When using a screen reader, disable the invisible gripper.
|
|
The invisible gripper is useless with the screen reader and
|
|
interferes with touching the statusbar. */
|
|
#screen.screenreader .tray {
|
|
--tray-invisible-gripper-height: 0px;
|
|
}
|
|
|
|
/* NOTE: csslint treats variable-only rules as "empty" errors, per
|
|
<https://github.com/CSSLint/csslint/issues/538>. */
|
|
@media (orientation: portrait) {
|
|
#screen.software-button-enabled .tray {
|
|
--software-buttons-height-adjustment: var(--software-home-button-height);
|
|
}
|
|
}
|
|
|
|
@media (orientation: landscape) {
|
|
#screen.software-button-enabled .tray {
|
|
--software-buttons-width-adjustment: var(--software-home-button-height);
|
|
}
|
|
}
|
|
|
|
.tray-dead-area {
|
|
height: calc(100% - var(--tray-invisible-gripper-height));
|
|
}
|
|
|
|
.tray-content {
|
|
height: calc(100% - var(--software-buttons-height-adjustment));
|
|
width: calc(100% - var(--scrollbar-width) - var(--software-buttons-width-adjustment));
|
|
pointer-events: all;
|
|
background-color: hsla(0, 0%, 20%, .95);
|
|
position: relative;
|
|
}
|
|
|
|
.tray-footer {
|
|
position: absolute;
|
|
bottom: 0;
|
|
width: 100%;
|
|
}
|
|
|
|
#tray-invisible-gripper {
|
|
height: var(--tray-invisible-gripper-height);
|
|
pointer-events: all;
|
|
}
|
|
|
|
.tray.open #tray-invisible-gripper {
|
|
pointer-events: none;
|
|
}
|
|
|
|
/* Special visibility overrides */
|
|
|
|
#screen.lockscreen-camera > #utility-tray {
|
|
visibility: hidden;
|
|
}
|
|
|
|
/* Statusbar */
|
|
|
|
#statusbar-tray {
|
|
background-image: none;
|
|
background-repeat: no-repeat;
|
|
width: 100%;
|
|
top: 0;
|
|
height: 3rem;
|
|
filter: none;
|
|
}
|
|
html[dir="ltr"] #statusbar-tray { background-position: right; }
|
|
html[dir="rtl"] #statusbar-tray { background-position: left; }
|
|
|
|
#screen.utility-tray-in-transition #statusbar-tray,
|
|
#screen:-moz-full-screen-ancestor #statusbar-tray,
|
|
#screen.utility-tray-in-transition #utility-tray #statusbar-tray {
|
|
background-image: -moz-element(#statusbar-icons);
|
|
}
|
|
|
|
#statusbar-tray > .sb-start-upper {
|
|
position: absolute;
|
|
offset-inline-start: 0;
|
|
line-height: var(--statusbar-height);
|
|
}
|
|
|
|
/* Notifications indicator */
|
|
|
|
#ambient-indicator {
|
|
height: .2rem;
|
|
width: 100%;
|
|
opacity: 0;
|
|
visibility: hidden;
|
|
background-color: #00D3FF;
|
|
transition: opacity .5s ease .5s;
|
|
position: absolute;
|
|
pointer-events: none;
|
|
}
|
|
|
|
|
|
#screen:not(.locked) #ambient-indicator.unread {
|
|
opacity: 1;
|
|
visibility: visible;
|
|
}
|
|
|
|
#ambient-indicator.active {
|
|
background: none #006e86 repeat;
|
|
display: block;
|
|
transition: none;
|
|
opacity: 1;
|
|
visibility: visible;
|
|
}
|
|
|
|
#ambient-indicator.active > .handle {
|
|
border-top: 0.2rem #00d3ff solid;
|
|
border-left: 0.2rem transparent solid;
|
|
border-right: 0.2rem transparent solid;
|
|
animation: handle 1s infinite;
|
|
height: 0.2rem;
|
|
width: 8.6rem;
|
|
margin: 0 auto;
|
|
visibility: visible;
|
|
}
|
|
|
|
#ambient-indicator.active > .handle2 {
|
|
animation-delay: 0.5ms;
|
|
margin: -0.4rem auto;
|
|
}
|
|
|
|
@keyframes handle {
|
|
0% { transform: scaleX(1.0); opacity: 1;}
|
|
100% { transform: scaleX(4.0); opacity: 0;}
|
|
}
|
|
|
|
#utility-tray-notifications {
|
|
position: sticky;
|
|
top: 0;
|
|
margin-bottom: 2rem;
|
|
}
|
|
|
|
/* Utility Tray Footer (the buttons at the bottom of the tray) */
|
|
|
|
#utility-tray-footer {
|
|
background: hsla(0, 0%, 100%, .05);
|
|
}
|
|
|
|
@keyframes tray-footer-in {
|
|
0% { transform: scaleY(0.9); opacity: 0; }
|
|
15% { transform: scaleY(1.08); opacity: 1; }
|
|
30% { transform: scaleY(0.94); }
|
|
65% { transform: scaleY(1.03); }
|
|
100% { transform: scaleY(1); }
|
|
}
|
|
|
|
/* NOTE: We cannot modify transform() on the way out, because the user may be
|
|
dragging from on top of the footer; changing the transform mid-scroll
|
|
interrupts the scroll gesture. Fortunately, opacity is fine. */
|
|
@keyframes tray-footer-out {
|
|
0% { opacity: 1; }
|
|
100% { opacity: 0; }
|
|
}
|
|
|
|
#utility-tray-footer {
|
|
transform-origin: bottom left;
|
|
opacity: 0;
|
|
transform: scaleY(0);
|
|
}
|
|
|
|
#utility-tray-footer.animate-in {
|
|
animation: tray-footer-in 200ms;
|
|
animation-timing-function: ease-in-out;
|
|
transform: scaleY(1);
|
|
opacity: 1;
|
|
}
|
|
|
|
#utility-tray-footer.animate-out {
|
|
animation: tray-footer-out 50ms;
|
|
animation-timing-function: ease-out;
|
|
opacity: 0;
|
|
transform: scaleY(1);
|
|
}
|
|
|
|
/* The _visible_ grippy at the bottom of the utility tray. */
|
|
|
|
#utility-tray-grippy {
|
|
width: 100%;
|
|
height: 2rem;
|
|
margin: 0;
|
|
position: relative; /* float above */
|
|
background: hsla(0, 0%, 20%, 1) url(images/grippy.png) no-repeat center / 7.2rem;
|
|
}
|
|
|
|
/* Icons */
|
|
|
|
#utility-tray .utility-tray-notifications [data-icon] {
|
|
display: inline-block;
|
|
width: 3rem;
|
|
height: 3rem;
|
|
margin: 1.5rem auto;
|
|
}
|
|
|
|
#utility-tray .utility-tray-notifications [data-icon]:before {
|
|
/* The icons should appear 24 x 24px but each glyph only takes 80% of the space
|
|
So we compensate by adding 20%, that is 30px. */
|
|
font-size: 3rem;
|
|
line-height: 3rem;
|
|
}
|