189 lines
4.7 KiB
CSS
189 lines
4.7 KiB
CSS
@font-face {
|
|
font-family: Twemoji;
|
|
src: url('../public/font/Twemoji.Mozilla.v15.1.0.woff2') format('woff2');
|
|
font-display: swap;
|
|
}
|
|
|
|
:root {
|
|
--tc-link: hsl(213deg 100% 45%);
|
|
|
|
/* user mxid colors */
|
|
--mx-uc-1: hsl(208, 100%, 45%);
|
|
--mx-uc-2: hsl(302, 100%, 30%);
|
|
--mx-uc-3: hsl(163, 100%, 30%);
|
|
--mx-uc-4: hsl(343, 100%, 45%);
|
|
--mx-uc-5: hsl(24, 100%, 45%);
|
|
--mx-uc-6: hsl(181, 100%, 30%);
|
|
--mx-uc-7: hsl(242, 100%, 45%);
|
|
--mx-uc-8: hsl(94, 100%, 35%);
|
|
|
|
/* Horseshoe void seam — see `src/app/styles/horseshoe.ts`. The :root
|
|
default is the light-theme value; `.dark-theme` overrides below. */
|
|
--vojo-horseshoe-void: #d6d6e3;
|
|
|
|
/* Peer (not-own) bubble bg — every «чужое» message reshades to
|
|
this, in 1-1 DMs, groups, channels alike. Light: slight off-white
|
|
step from #ffffff. Dark override below. */
|
|
--vojo-peer-bubble-bg: #f5f5fa;
|
|
/* Stream timeline rail (vertical line through dots) + day-divider
|
|
horizontal segments. Light: hairline cool-grey; dark overrides
|
|
below. */
|
|
--vojo-timeline-rail: #e8e8f2;
|
|
|
|
--font-emoji: 'Twemoji_DISABLED';
|
|
--font-secondary: 'InterVariable', var(--font-emoji), sans-serif;
|
|
}
|
|
|
|
.dark-theme {
|
|
--tc-link: hsl(213deg 100% 80%);
|
|
|
|
--mx-uc-1: hsl(208, 100%, 75%);
|
|
--mx-uc-2: hsl(301, 100%, 80%);
|
|
--mx-uc-3: hsl(163, 100%, 70%);
|
|
--mx-uc-4: hsl(343, 100%, 75%);
|
|
--mx-uc-5: hsl(24, 100%, 70%);
|
|
--mx-uc-6: hsl(181, 100%, 60%);
|
|
--mx-uc-7: hsl(243, 100%, 80%);
|
|
--mx-uc-8: hsl(94, 100%, 80%);
|
|
|
|
--vojo-horseshoe-void: #000000;
|
|
|
|
--vojo-peer-bubble-bg: #000000;
|
|
--vojo-timeline-rail: #000000;
|
|
|
|
--font-secondary: 'InterVariable', var(--font-emoji), sans-serif;
|
|
}
|
|
|
|
html {
|
|
height: 100%;
|
|
overflow: hidden;
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
padding: 0;
|
|
height: 100%;
|
|
overflow: hidden;
|
|
/* Cold-start fallback before `app/styles/global.css.ts` parses + the
|
|
ThemeManager mounts and binds `--vojo-safe-area-bg` to the active
|
|
palette's Background.Container token. The literal `#0d0e11` matches
|
|
dark; the @media block below mirrors it for light so a light-theme
|
|
user doesn't see a dark flash in the safe-area zone. */
|
|
background-color: var(--vojo-safe-area-bg, #0d0e11);
|
|
font-family: var(--font-secondary);
|
|
font-size: 16px;
|
|
font-weight: 400;
|
|
|
|
/*Why font-variant-ligatures => https://github.com/rsms/inter/issues/222 */
|
|
font-variant-ligatures: no-contextual;
|
|
}
|
|
|
|
@media (prefers-color-scheme: light) {
|
|
body {
|
|
background-color: var(--vojo-safe-area-bg, #f2f2f7);
|
|
}
|
|
}
|
|
#root {
|
|
width: 100%;
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
/* Top & bottom insets are intentionally zero: each screen extends
|
|
its own bg through the system-bar zones (status bar at top, gesture
|
|
pill at bottom). Top-anchored UI pads itself down by `--vojo-safe-top`
|
|
(see `app/styles/global.css.ts`) — covered: PageHeader, PageNavHeader
|
|
(chat / chat-list headers via recipe), AuthLayout root. Side insets
|
|
stay so app chrome clears display cutouts on devices with one. */
|
|
padding: 0 env(safe-area-inset-right) 0 env(safe-area-inset-left);
|
|
}
|
|
|
|
*,
|
|
*::before,
|
|
*::after {
|
|
box-sizing: border-box;
|
|
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
|
-webkit-tap-highlight-color: transparent;
|
|
}
|
|
a {
|
|
color: var(--tc-link);
|
|
text-decoration: none;
|
|
}
|
|
a:hover {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
[data-mx-spoiler][aria-pressed='true'] a {
|
|
color: transparent;
|
|
pointer-events: none;
|
|
}
|
|
|
|
b {
|
|
font-weight: 500;
|
|
}
|
|
label {
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
button,
|
|
textarea {
|
|
margin: 0;
|
|
padding: 0;
|
|
background-color: transparent;
|
|
color: inherit;
|
|
font-family: inherit;
|
|
font-size: inherit;
|
|
font-weight: inherit;
|
|
line-height: inherit;
|
|
letter-spacing: inherit;
|
|
border: none;
|
|
}
|
|
button {
|
|
max-width: 100%;
|
|
text-transform: none;
|
|
text-align: inherit;
|
|
overflow: visible;
|
|
-webkit-appearance: button;
|
|
}
|
|
textarea,
|
|
input,
|
|
input[type],
|
|
input[type='text'],
|
|
input[type='username'],
|
|
input[type='password'],
|
|
input[type='email'],
|
|
input[type='checkbox'] {
|
|
-webkit-appearance: none;
|
|
-moz-appearance: none;
|
|
appearance: none;
|
|
}
|
|
|
|
textarea {
|
|
color: inherit;
|
|
word-spacing: inherit;
|
|
}
|
|
|
|
audio:not([controls]) {
|
|
display: none !important;
|
|
}
|
|
|
|
/*
|
|
* Orbit-sweep border for the incoming-call horseshoe.
|
|
*
|
|
* Animating a conic-gradient angle requires the property to be registered
|
|
* via @property — otherwise CSS treats custom properties as untyped
|
|
* strings and the animation snaps instead of interpolating. Defined here
|
|
* (rather than in vanilla-extract) because @property has no first-class
|
|
* binding in @vanilla-extract/css. The keyframe is paired with it so
|
|
* both halves stay in one place.
|
|
*/
|
|
@property --vojo-orbit-angle {
|
|
syntax: '<angle>';
|
|
initial-value: 0deg;
|
|
inherits: false;
|
|
}
|
|
|
|
@keyframes vojo-orbit-sweep {
|
|
to {
|
|
--vojo-orbit-angle: 360deg;
|
|
}
|
|
}
|