VulpesOS/host/gaia-theme.css
2026-10-22 20:42:26 +02:00

301 lines
12 KiB
CSS

/* Keep Gaia geometry, icons and media intact; change the surfaces and ink. */
:root[data-vulpes-theme="dark"] {
color-scheme: dark;
--vulpes-surface: #18232e;
--vulpes-raised: #253442;
--vulpes-text: #f1f5f9;
--vulpes-muted: #b8c8d8;
--vulpes-line: #526272;
--link-color: #79ceff;
--header-background: var(--vulpes-raised);
--header-color: var(--vulpes-text);
--header-title-color: var(--vulpes-text);
--header-button-color: var(--vulpes-text);
--header-icon-color: var(--vulpes-text);
--header-action-button-color: #79ceff;
--header-disabled-button-color: var(--vulpes-muted);
}
:root[data-vulpes-theme="dark"]:is([data-vulpes-app="settings"],
[data-vulpes-app="communications"], [data-vulpes-app="sms"],
[data-vulpes-app="email"], [data-vulpes-app="calendar"],
[data-vulpes-app="ringtones"]) {
--background: var(--vulpes-surface);
--text-color: var(--vulpes-text);
--title-color: var(--vulpes-text);
--label-color: var(--vulpes-text);
background: var(--vulpes-surface) !important;
color: var(--vulpes-text) !important;
}
:root[data-vulpes-theme="dark"] gaia-header {
--header-background: var(--vulpes-raised) !important;
--header-title-color: var(--vulpes-text) !important;
--header-action-button-color: #79ceff !important;
}
#display #vulpes-theme-row {
display: block !important;
min-height: 10rem;
height: auto !important;
padding-bottom: 1rem;
}
#vulpes-theme-row > p {
height: auto;
line-height: 2.4rem;
padding: 1rem 1.5rem;
transform: none;
}
:root[data-vulpes-theme="dark"][data-vulpes-app="settings"] h2 {
background-color: var(--vulpes-surface) !important;
}
:root[data-vulpes-theme="dark"]:is([data-vulpes-app="settings"],
[data-vulpes-app="communications"], [data-vulpes-app="sms"],
[data-vulpes-app="email"], [data-vulpes-app="calendar"],
[data-vulpes-app="ringtones"]) :is(body, section, [role="region"],
[data-type="list"], .view, .card, #main, #messages-container, #thread-list,
#contacts-list, #view-contacts-list, #no-contacts, #call-log-container, #messages-compose-form) {
background-color: var(--vulpes-surface) !important;
color: var(--vulpes-text) !important;
}
:root[data-vulpes-theme="dark"] :is(input:not([type="range"]):not([type="checkbox"]):not([type="radio"]), textarea, select, [contenteditable="true"]) {
background-color: var(--vulpes-raised) !important;
color: var(--vulpes-text) !important;
border-color: var(--vulpes-line) !important;
caret-color: #79ceff;
}
:root[data-vulpes-theme="dark"] :is(input, textarea)::placeholder { color: var(--vulpes-muted) !important; }
:root[data-vulpes-theme="dark"][data-vulpes-app="settings"] :is(li, li > a, li > a > span, li > p, li > small, label, .explanation, h1, h2) {
color: var(--vulpes-text) !important;
border-color: var(--vulpes-line) !important;
}
:root[data-vulpes-theme="dark"][data-vulpes-app="settings"] :is(ul, header, .button, button:not(.danger)) {
background-color: var(--vulpes-raised) !important;
color: var(--vulpes-text) !important;
}
:root[data-vulpes-theme="dark"][data-vulpes-app="communications"] :is(.contact-item, .contact-item a, .contact-item p, #call-log-container li, #call-log-container a, #call-log-container p, .phone-number, #keypad-phone-number, .keypad-key) {
color: var(--vulpes-text) !important;
}
:root[data-vulpes-theme="dark"][data-vulpes-app="communications"] #phone-number-view-container {
background-color: var(--vulpes-raised) !important;
}
:root[data-vulpes-theme="dark"][data-vulpes-app="communications"] :is(.keypad-subicon, [role="tab"]) {
color: #79ceff !important;
}
:root[data-vulpes-theme="dark"][data-vulpes-app="communications"] [role="tab"][aria-selected="true"] {
background-color: var(--vulpes-raised) !important;
}
:root[data-vulpes-theme="dark"][data-vulpes-app="communications"] #no-contacts :is(p, .info) {
color: var(--vulpes-muted) !important;
}
:root[data-vulpes-theme="dark"][data-vulpes-app="communications"] #no-contacts {
background-blend-mode: soft-light;
}
:root[data-vulpes-theme="dark"][data-vulpes-app="sms"] :is(.threadlist-item, .threadlist-item a, .threadlist-item p, .time, .name, .body-text) {
color: var(--vulpes-text) !important;
}
:root[data-vulpes-theme="dark"][data-vulpes-app="sms"] .bubble {
background-color: var(--vulpes-raised) !important;
color: var(--vulpes-text) !important;
}
:root[data-vulpes-theme="dark"] :is([data-type="confirm"], [data-type="action"]) :is(section, menu, header, p) {
background-color: var(--vulpes-raised) !important;
color: var(--vulpes-text) !important;
}
:root[data-vulpes-theme="dark"][data-vulpes-app="system"] :is(#utility-tray, #notifications-container) {
background-color: var(--vulpes-surface) !important;
color: var(--vulpes-text) !important;
}
/* Keep the message and its surface paired, including lazily loaded Gaia dialogs. */
:root #vulpes-gaia-notice,
:root #vulpes-gaia-notice > section,
:root #vulpes-gaia-notice > section > p {
background-color: #f4f4f4 !important;
color: #202b33 !important;
}
:root[data-vulpes-theme="dark"] #vulpes-gaia-notice,
:root[data-vulpes-theme="dark"] #vulpes-gaia-notice > section,
:root[data-vulpes-theme="dark"] #vulpes-gaia-notice > section > p {
background-color: var(--vulpes-surface) !important;
color: var(--vulpes-text) !important;
}
:root[data-vulpes-app="settings"] p[data-vulpes-unavailable] {
background-color: #f4f4f4 !important;
color: #202b33 !important;
}
:root[data-vulpes-theme="dark"][data-vulpes-app="settings"] p[data-vulpes-unavailable] {
background-color: var(--vulpes-surface) !important;
color: var(--vulpes-text) !important;
}
/* Shared compact home: three columns, original icons, reversible wallpaper veil. */
html[data-vulpes-layout="compact"][data-vulpes-app="homescreen"] {
--compact-cell: round(down, calc((100vw - 12px) / 3), 1px);
}
html[data-vulpes-layout="compact"][data-vulpes-app="homescreen"] body {
background-color: rgba(5, 15, 31, .72);
}
html[data-vulpes-layout="compact"][data-vulpes-app="homescreen"] #apps .icon-container {
width: var(--compact-cell);
height: 74px;
}
html[data-vulpes-layout="compact"][data-vulpes-app="homescreen"] #apps gaia-app-icon {
width: 52px;
left: round(down, calc((var(--compact-cell) - 52px) / 2), 1px);
border: 2px solid transparent;
--vulpes-label-width: calc(var(--compact-cell) - 4px);
--vulpes-label-offset: round(down, calc((48px - var(--vulpes-label-width)) / 2), 1px);
--vulpes-icon-display: block;
--vulpes-icon-title-position: absolute;
--vulpes-icon-title-clip: inset(50%);
font-size: 12px;
line-height: 16px;
transform: none;
}
html[data-vulpes-layout="compact"][data-vulpes-app="homescreen"] #apps-panel > .scrollable {
padding-top: 2px;
padding-bottom: 0;
}
/* A single applications panel; saved pinned pages remain available in classic mode. */
html[data-vulpes-layout="compact"][data-vulpes-app="homescreen"] :is(#page-indicator-header, #pages-panel, #shadow) {
display: none;
}
html[data-vulpes-layout="compact"][data-vulpes-app="homescreen"] #panels {
height: calc(100vh - 52px);
overflow-x: hidden;
scroll-snap-type: none;
}
html[data-vulpes-layout="compact"][data-vulpes-app="system"] #homescreen {
--rocketbar-urlbar-height: 0px;
}
html[data-vulpes-layout="compact"][data-vulpes-app="system"] #homescreen > .chrome {
display: none;
}
/* Gaia finishes opening/closing on animationend: retain that event, skip the effect. */
html[data-vulpes-motion="reduced"][data-vulpes-app="system"] .appWindow,
html[data-vulpes-motion="reduced"][data-vulpes-app="homescreen"] :is(gaia-app-icon, .gaia-container-child, .icon-container, .scrollable, #panels) {
animation-duration: .001s !important;
animation-delay: 0s !important;
transition-duration: .001s !important;
transition-delay: 0s !important;
scroll-behavior: auto !important;
}
/* Enabled by the Nokia adapter, independent of the shared compact layout.
* Keep a nonzero duration so Gaia's transitionend navigation still completes. */
html[data-vulpes-motion="reduced"],
html[data-vulpes-motion="reduced"] *,
html[data-vulpes-motion="reduced"] *::before,
html[data-vulpes-motion="reduced"] *::after {
transition-duration: .001s !important;
transition-delay: 0s !important;
scroll-behavior: auto !important;
}
html[data-vulpes-motion="reduced"][data-vulpes-layout="compact"][data-vulpes-app="system"]
#screen:has(#homescreen.active):not(.rocketbar-focused):not(.utility-tray):not(.locked) #statusbar {
background: rgba(5, 15, 31, .72) !important;
}
#vulpes-compact-app-name {
display: none;
}
html[data-vulpes-layout="compact"][data-vulpes-app="homescreen"] #vulpes-compact-app-name {
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
height: 52px;
padding: 2px 10px;
color: white;
font: 500 20px/24px FiraSans, sans-serif;
text-align: center;
overflow-wrap: anywhere;
overflow: hidden;
text-shadow: 0 1px 2px #000;
}
html[data-vulpes-layout="compact"][data-vulpes-app="homescreen"] gaia-app-icon[data-vulpes-compact-selected] {
outline: 2px solid #00aaff !important;
outline-offset: -2px !important;
border-radius: 8px;
}
/* Keep Gaia's dial pad and controls inside a feature-phone viewport. */
@media (max-width: 320px) and (max-height: 400px) {
html[data-vulpes-layout="compact"][data-vulpes-app="communications"] #phone-number-view-container {
height: 48px;
}
html[data-vulpes-layout="compact"][data-vulpes-app="communications"] #phone-number-view-container .phone-number-view-wrapper-input {
margin-bottom: 0;
padding: 0 8px;
min-width: 0;
}
html[data-vulpes-layout="compact"][data-vulpes-app="communications"] #phone-number-view {
font-size: 24px !important;
}
html[data-vulpes-layout="compact"][data-vulpes-app="communications"] #keypad-delete {
margin-bottom: 0;
padding: 0 8px 0 0;
}
html[data-vulpes-layout="compact"][data-vulpes-app="communications"] #keyboard-container {
height: calc(100% - 48px);
display: flex;
flex-direction: column;
padding: 0 6px;
box-sizing: border-box;
}
html[data-vulpes-layout="compact"][data-vulpes-app="communications"] #keypad {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
grid-template-rows: repeat(4, minmax(0, 1fr));
flex: 1;
min-height: 0;
height: auto;
}
html[data-vulpes-layout="compact"][data-vulpes-app="communications"] .keypad-row { display: contents; }
html[data-vulpes-layout="compact"][data-vulpes-app="communications"] .keypad-key {
display: flex;
align-items: center;
justify-content: center;
gap: 4px;
padding: 0;
height: auto;
font-size: 30px;
line-height: 1;
}
html[data-vulpes-layout="compact"][data-vulpes-app="communications"] .keypad-key :is(span,em) {
width: auto;
margin: 0;
}
html[data-vulpes-layout="compact"][data-vulpes-app="communications"] .keypad-key em { font-size: 10px; }
html[data-vulpes-layout="compact"][data-vulpes-app="communications"] .keypad-key .sharp { font-size: 30px; line-height: 1; }
html[data-vulpes-layout="compact"][data-vulpes-app="communications"] #keypad-callbar {
flex: 0 0 40px;
height: 40px;
}
html[data-vulpes-layout="compact"][data-vulpes-app="communications"] :is(.keypad-callbar-button,#keypad-callbar-call-action) {
height: 32px;
background-size: 32px;
}
}
#keypad-callbar-call-action[aria-busy="true"] { opacity: .5; }
#vulpes-cover-settings {
display: block !important; height: auto !important; padding: 0 0 1rem;
}
#vulpes-cover-settings h2 { margin: 1rem 0; height: auto; overflow: visible; }
#vulpes-cover-settings label {
display: block; height: auto !important; padding: .4rem 0; overflow: visible;
}
#vulpes-cover-settings label > span {
display: block; margin: 0; width: auto; line-height: 1.5;
white-space: normal; font-size: 1.6rem; overflow: visible;
}
#vulpes-cover-settings :is(input,select) {
position: static; width: 100%; box-sizing: border-box; margin: 0;
}
#vulpes-cover-settings .vulpes-cover-preview {
background: #04060b; padding: 1rem; text-align: center; overflow-wrap: anywhere;
height: auto; font-size: 1.4rem; line-height: 1.5;
}