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.
This commit is contained in:
OverSu 2026-09-30 23:13:03 +02:00
commit b38dea0597
25901 changed files with 9982925 additions and 369 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 B

View file

@ -0,0 +1,223 @@
/* 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) image-set(url("images/grippy.png") 1x, url("images/grippy@1.5x.png") 1.5x, url("images/grippy@2x.png") 2x, url("images/grippy@2.25x.png") 2.25x) 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;
}