VulpesOS/host/desktop.css
OverSu 1311bed5e9 Release Preview 20 shared desktop, Android and Sargo updates
Restore Gaia settings and media workflows, extend native network adapters, and align the APK payload. Generate French/English changelogs and website entries from the simplified JSON source.

Validation: shared JS and Tundra unit tests; desktop workflows and persistence; signed APK payload parity; Sargo RAM and installed startup with boot readback. Android runtime qualification is recorded separately.
2026-10-13 00:19:45 +02:00

252 lines
7.3 KiB
CSS

@import url('/shared/elements/vulpes-fonts/fonts.css');
/* Desktop-only additions; preserve each Gaia application's own theme. */
.vulpes-import {
position: fixed;
right: 1rem;
bottom: 5.5rem;
z-index: 100;
background: #007b88;
color: white;
font: 1.6rem sans-serif;
padding: 0.7rem 1.2rem;
border-radius: 1.6rem;
cursor: pointer;
}
#homescreen > .chrome {
background: transparent;
}
#homescreen .urlbar {
background: rgba(0, 0, 0, 0.2);
color: white;
}
#homescreen .chrome-title-container {
color: white;
}
html[data-vulpes-app='homescreen'] #page-indicator-header {
background: transparent;
}
html[data-vulpes-app='homescreen'] #page-indicator {
align-items: center;
}
html[data-vulpes-app='homescreen'] #page-indicator span {
margin-bottom: 0;
}
/* Whole CSS pixels; the short viewport edge keeps landscape icons usable. */
html[data-vulpes-app='homescreen'] gaia-app-icon {
width: round(nearest, 32vmin, 1px);
}
#screen:has(#homescreen.active):not(.rocketbar-focused):not(.utility-tray):not(.locked)
#statusbar.light {
filter: none;
}
html[data-vulpes-app='email'] input:not([type='checkbox']):not([type='radio']):not([type='range']),
html[data-vulpes-app='email'] textarea {
appearance: none;
border-radius: 2px;
box-shadow: none;
}
html[data-vulpes-app='email'] input:focus,
html[data-vulpes-app='email'] textarea:focus {
border-color: #008d99;
outline: 2px solid #008d99;
outline-offset: 1px;
}
.vulpes-capability {
position: fixed;
inset: 0;
z-index: 1000;
background: #f4f4f4;
color: #222;
padding: 3rem;
font: 1.8rem/1.5 sans-serif;
overflow: auto;
}
.vulpes-capability h1 {
font-size: 2.6rem;
}
html[data-vulpes-app='gallery'] body:not(.thumbnailListView) > .vulpes-import {
display: none;
}
/* Shared native integration controls on desktop and Android. */
.vulpes-error-dialog {
box-sizing: border-box;
width: calc(100% - 32px);
max-width: 420px;
margin: auto;
padding: 20px;
border: 0;
border-radius: 8px;
background: #fff;
color: #222;
font: 16px/1.4 FiraSans, sans-serif;
}
.vulpes-error-dialog::backdrop { background: rgb(0 0 0 / 55%); }
.vulpes-error-dialog h2 { margin: 0 0 12px; font-size: 22px; font-weight: 300; }
.vulpes-error-dialog p { margin: 0 0 20px; }
.vulpes-error-dialog button { width: 100%; }
.vulpes-platform-button {
padding: 12px 16px;
border: 0;
border-radius: 8px;
background: #0755be;
color: white;
font: 16px sans-serif;
margin: 8px;
}
.vulpes-platform-button:disabled {
opacity: 0.55;
}
#vulpes-release-info {
padding: 8px 16px;
font-size: 14px;
line-height: 1.5;
}
/* Unsupported Gaia camera controls keep their position without accepting gestures. */
html[data-vulpes-app='camera'] .hud .vulpes-camera-unavailable,
html[data-vulpes-app='camera'] .mode-switch.vulpes-camera-unavailable {
opacity: 0.35 !important;
visibility: visible !important;
pointer-events: auto;
filter: grayscale(1);
}
/* Versions can wrap on narrow screens without overlapping their labels. */
#vulpes-system-info > li {
box-sizing: border-box;
min-height: 5.8rem;
height: auto;
padding: 1rem 0;
}
#vulpes-system-info > li > span,
#vulpes-system-info > li > small {
display: block;
position: static;
float: none;
white-space: normal;
overflow-wrap: anywhere;
line-height: 1.4;
}
#vulpes-system-info > li > small {
margin-top: 0.2rem;
}
/* Text uses Gaia's bundled face on every host. Icon pseudo-elements retain
their own font; text styling must not depend on the Linux default font. */
html, body, button, input, textarea, select, label,
h1, h2, h3, h4, h5, h6, #statusbar-time,
#notification-some, #notification-none {
font-family: FiraSans, sans-serif !important;
}
/* An unset owner message must not paint an empty card on the lockscreen. */
#lockscreen-message:empty { display:none; }
/* Gaia owns edge gestures; avoid a second host overscroll effect. */
html[data-vulpes-app] { overscroll-behavior:none; }
/* padding-box is no longer supported. Content-box made the full-width
section wrap below the dialog's spacer, hiding its title and message. */
form[role='dialog'][data-type='confirm'] > section {
box-sizing: border-box;
}
/* Native selects now paint their own arrow; the old Gecko arrow-hiding offset
clips Fira descenders on current Gecko. */
html[data-vulpes-app] .button select,
html[data-vulpes-app] .bb-button select {
appearance: none;
top: 0;
width: 100%;
box-sizing: border-box;
line-height: 1.4;
padding-block: 0.35rem;
}
/* The tab buttons may receive focus without scrolling the whole phone page. */
html[data-vulpes-app='communications'],
html[data-vulpes-app='communications'] body {
overflow: clip;
}
html[data-vulpes-app='video'] #overlay-content,
html[data-vulpes-app='video'] #in-use-overlay-content {
box-sizing: border-box;
min-width: 0;
overflow-y: auto;
}
html[data-vulpes-app='video'] #overlay-text,
html[data-vulpes-app='video'] #in-use-overlay-text {
width: auto;
max-width: 100%;
white-space: normal;
overflow-wrap: anywhere;
}
/* Home overlays wallpaper only. Keep the last icon row clear of its button. */
html[data-vulpes-app='homescreen'] #apps-panel > .scrollable {
padding-bottom: 44px;
box-sizing: border-box;
}
@media (orientation: landscape) {
html[data-vulpes-app='homescreen'] #apps-panel > .scrollable {
padding-bottom: 0;
padding-right: 44px;
}
}
html[data-vulpes-app='communications'] body {
position: fixed;
inset: 0;
width: 100%;
height: 100%;
}
/* Camera gestures must not magnify the application chrome. */
html[data-vulpes-app='camera'], html[data-vulpes-app='camera'] body { touch-action:none; }
/* Homescreen pages must settle at their boundary after a drag (Forgejo #3). */
html[data-vulpes-app="homescreen"] #panels { scroll-snap-type:x mandatory; }
html[data-vulpes-app="homescreen"] #panels > * { scroll-snap-align:start; }
/* System gestures are handled by Gaia, not by the page's pan/zoom handler.
App frames keep their own scrolling; the notification list scrolls vertically. */
html[data-vulpes-app='system'],
html[data-vulpes-app='system'] body {
overscroll-behavior: none;
}
html[data-vulpes-app='system'] #lockscreen {
touch-action: none;
}
html[data-vulpes-app='system'] #utility-tray {
touch-action: pan-y;
overscroll-behavior: contain;
}
/* Keep the original Gaia value selector inside the application's viewport. */
html[data-vulpes-app] #vulpes-value-selector {
position: fixed; inset: 0; z-index: 2147483000; margin: 0;
font-family: FiraSans, sans-serif; box-sizing: border-box;
}
html[data-vulpes-app] #vulpes-value-selector > section { box-sizing: border-box; }
html[data-vulpes-app] #vulpes-value-selector [role=option][aria-disabled=true] { opacity: .45; }
html[data-vulpes-app] #vulpes-value-selector-layer {
position: fixed; inset: 0; z-index: 2147483000;
}
html[data-vulpes-app] :is(.button,.bb-button) select.vulpes-select-label-owner {
opacity: 0;
}
html[data-vulpes-app] .vulpes-select-label {
position: absolute;
inset: 0 3.5rem 0 1.1rem;
display: flex;
align-items: center;
pointer-events: none;
font: italic 1.7rem/1.5 FiraSans, sans-serif;
white-space: nowrap;
overflow: hidden;
color: var(--text-color, #333);
text-shadow: none;
}
html[dir=rtl][data-vulpes-app] .vulpes-select-label { inset: 0 1.1rem 0 3.5rem; }
html[data-vulpes-theme=dark] .vulpes-select-label { color: #eee; }