TelegramPWA/src/styles/index.scss
2026-02-22 23:49:07 +01:00

542 lines
11 KiB
SCSS

/* stylelint-disable @stylistic/value-list-comma-newline-after */
/* stylelint-disable @stylistic/declaration-colon-newline-after */
@use "reboot";
@use "variables";
@use "mixins";
@use "spacing";
@use "forms";
@use "icons.css";
@use "icons" as iconsMixins;
@use "common";
@use "print";
html,
body {
--font-family: "Roboto", -apple-system, BlinkMacSystemFont, "Apple Color Emoji", "Segoe UI", Oxygen, Ubuntu,
Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
--font-family-monospace: "Cascadia Mono", "Roboto Mono", "Droid Sans Mono", 'SF Mono', "Menlo", "Ubuntu Mono",
"Consolas", monospace;
--font-family-numbers-rounded: ui-rounded, "Numbers Rounded", "Roboto", "Helvetica Neue", sans-serif;
--font-family-rounded: "Nunito", "Roboto", "Helvetica Neue", sans-serif;
--font-family-condensed: "Roboto Condensed", "Roboto", "Helvetica Neue", sans-serif;
--font-weight-semibold: 500; // Note: Roboto is naturally quite bold, so 500 works well as default
user-select: none;
overflow: hidden;
overscroll-behavior: none;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
font-family: var(--font-family);
font-size: 16px;
font-weight: var(--font-weight-normal);
line-height: 1.5;
color: var(--color-text);
text-align: left;
background-color: var(--color-background);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
@media (max-width: 600px) {
height: calc(var(--vh, 1vh) * 100);
}
}
noscript {
display: grid;
align-content: center;
justify-items: center;
width: 100%;
height: 100%;
.nojs-video {
pointer-events: none;
&::-webkit-media-controls {
display: none;
}
}
}
html.theme-dark {
color-scheme: dark;
}
body.is-ios,
body.is-macos {
--font-family-rounded: ui-rounded, "Nunito", "Roboto", "Helvetica Neue", sans-serif;
--font-family: system-ui, -apple-system, BlinkMacSystemFont, "Roboto", "Apple Color Emoji", "Helvetica Neue",
sans-serif;
--font-weight-semibold: 600;
}
html[lang="fa"],
html[lang="fa"] body {
--font-family: "Vazirmatn", "Roboto", -apple-system, BlinkMacSystemFont, "Apple Color Emoji", "Segoe UI", Oxygen,
Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
&.is-ios,
&.is-macos {
--font-family: "Vazirmatn", -apple-system, BlinkMacSystemFont, "Roboto", "Apple Color Emoji", "Segoe UI", Oxygen,
Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
}
}
body.is-ios {
--border-radius-messages: 1rem;
--border-radius-messages-small: 0.5rem;
}
body.is-tauri {
--custom-cursor: default;
--window-controls-width: 5rem;
}
body.cursor-grabbing {
--custom-cursor: grabbing;
cursor: grabbing !important;
}
body.cursor-ew-resize {
--custom-cursor: ew-resize;
cursor: ew-resize !important;
}
#root,
.full-height {
height: 100%;
&.is-auth {
background: var(--color-background);
}
@media (max-width: 600px) {
height: calc(var(--vh, 1vh) * 100);
}
}
#middle-column-portals,
#portals {
position: absolute;
top: 0;
right: 0;
left: 0;
height: 0;
}
#middle-column-portals {
top: calc(0rem - var(--call-header-height, 0rem));
}
.hidden {
visibility: hidden;
}
.svg-definitions {
position: fixed; // Firefox requires definition to be visible
top: -99999px;
}
.allow-selection {
user-select: text;
}
.no-selection {
user-select: none !important;
}
.clearfix::after {
content: "";
clear: both;
display: table;
}
/*
See the article for more information on this visually-hidden pattern.
https://snook.ca/archives/html_and_css/hiding-content-for-accessibility
*/
.visually-hidden {
position: absolute !important;
z-index: -1;
overflow: hidden;
width: 0;
height: 0;
clip-path: inset(50%);
}
.custom-scroll,
.custom-scroll-x {
// Fix scroll lock on iOS
pointer-events: auto;
scrollbar-color: transparent transparent;
scrollbar-width: thin;
transition: scrollbar-color 0.3s ease;
-webkit-overflow-scrolling: touch;
&::-webkit-scrollbar-thumb {
border-radius: 0.375rem;
background-color: transparent;
// `box-shadow` prevents repaint on macOS when hovering out of scrollable container
box-shadow: 0 0 1px rgba(255, 255, 255, 0.01);
}
&:hover,
&:focus,
&:focus-within {
scrollbar-color: var(--color-scrollbar) transparent;
&::-webkit-scrollbar-thumb {
background-color: var(--color-scrollbar);
}
}
}
body:not(.is-ios) {
.custom-scroll {
&::-webkit-scrollbar {
width: 0.375rem;
}
}
.custom-scroll-x {
&::-webkit-scrollbar {
height: 0.375rem;
}
}
}
.no-scrollbar {
scrollbar-width: none;
&::-webkit-scrollbar {
display: none;
}
}
.no-overscroll {
overscroll-behavior: none;
}
.no-touch {
touch-action: none;
}
.flex-grow {
flex-grow: 1;
}
.icon {
@include iconsMixins.icon;
}
.emoji-small {
overflow: hidden;
display: inline-block;
flex-shrink: 0;
width: var(--emoji-size);
height: var(--emoji-size);
margin-inline-end: 1px;
color: transparent;
background: no-repeat;
background-size: var(--emoji-size);
&::selection {
color: transparent;
background-color: var(--color-selection-highlight-emoji);
}
}
.div-button {
cursor: var(--custom-cursor, pointer);
outline: none !important;
}
.opacity-transition {
opacity: 1;
transition: opacity 0.15s ease;
&.not-open {
opacity: 0;
}
&.not-shown {
display: none;
}
&.slow {
transition-duration: 0.3s;
}
}
.interactive-gift {
canvas {
transition: 250ms transform;
}
@media (hover: hover) {
&:hover, &:focus-visible {
canvas {
transform: scale(1.1);
}
}
}
}
.color-primary {
color: var(--color-primary) !important;
}
.color-danger {
color: var(--color-error) !important;
}
.text-muted {
color: var(--color-text-secondary) !important;
}
.protector {
user-select: none;
position: absolute;
z-index: 2;
top: 0;
right: 0;
bottom: 0;
left: 0;
-webkit-touch-callout: none;
}
.for-ios-autocapitalization-fix {
position: fixed;
z-index: -1;
bottom: 1rem;
font-size: 16px;
opacity: 0;
}
.emoji-test-element {
position: absolute;
bottom: 0;
left: 0;
display: inline;
white-space: nowrap;
opacity: 0;
}
.star-currency-icon {
font-size: 1rem !important;
vertical-align: text-top;
}
// Increase specificity to override the default icon style
.ton-amount-icon.ton-amount-icon,
.star-amount-icon.star-amount-icon {
margin-inline-start: 0.375em; // Prevent sticking to the text without using `white-space: pre`
margin-inline-end: 0.2em; // Prevent sticking to the text without using `white-space: pre`
line-height: inherit; // Vertical centring
vertical-align: text-bottom; // As regular text
}
.shared-canvas-container {
position: relative;
}
.shared-canvas,
.absolute-video-container {
pointer-events: none;
position: absolute;
z-index: 1;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.with-notch {
&::before {
content: "";
position: absolute;
z-index: var(--z-scroll-notch);
top: 0;
left: 0;
width: 100%;
height: 1px;
opacity: 0;
background-color: var(--color-borders);
transition: opacity 0.2s ease-in-out;
}
&.scrolled {
&::before {
opacity: 1;
}
}
}
.with-bottom-notch {
border-bottom: 1px solid var(--color-borders);
transition: border-color 0.2s ease-in-out;
&.scrolled-to-end {
border-bottom-color: transparent;
}
}
@keyframes grow-icon {
0% {
transform: scale(0.5);
opacity: 0.8;
}
50% {
transform: scale(1.1);
opacity: 1;
}
100% {
transform: scale(1);
}
}
@keyframes hide-icon {
from {
transform: scale(1);
opacity: 0.4;
}
to {
transform: scale(0.5);
opacity: 0;
}
}
@keyframes vt-expand-icon-spin {
to {
transform: rotate(180deg);
}
}
@keyframes vt-collapse-icon-spin {
to {
transform: rotate(-180deg);
}
}
.component-theme-dark {
--color-background: rgb(33, 33, 33);
--color-background-compact-menu: rgb(33, 33, 33, 0.867);
--color-background-compact-menu-reactions: rgb(33, 33, 33, 0.867);
--color-background-compact-menu-hover: rgb(0, 0, 0, 0.4);
--color-background-menu-separator: rgba(255, 255, 255, 0.102);
--color-background-secondary: rgb(15, 15, 15);
--color-background-secondary-accent: rgb(25, 25, 25);
--color-background-own: rgb(118, 106, 200);
--color-background-own-apple: rgb(118, 106, 200);
--color-background-selected: rgb(44, 44, 44);
--color-background-own-selected: rgb(101, 73, 212);
--color-chat-hover: rgb(44, 44, 44);
--color-chat-active: rgb(118, 106, 200);
--color-chat-active-greyed: rgb(146, 136, 211);
--color-item-hover: rgb(44, 44, 44);
--color-item-active: rgb(41, 41, 41);
--color-text: rgb(255, 255, 255);
--color-text-rgb: 255, 255, 255;
--color-text-secondary: rgb(170, 170, 170);
--color-text-secondary-rgb: 170, 170, 170;
--color-icon-secondary: rgb(170, 170, 170);
--color-text-secondary-apple: rgb(170, 170, 170);
--color-borders: rgb(48, 48, 48);
--color-borders-input: rgb(91, 91, 90);
--color-dividers: rgb(59, 59, 61);
--color-dividers-android: rgb(15, 15, 15);
--color-links: rgb(135, 116, 225);
--color-gray: rgb(113, 117, 121);
--color-list-icon: rgb(112, 117, 121);
--color-default-shadow: rgb(16, 16, 16, 0.612);
--color-light-shadow: rgb(0, 0, 0, 0.251);
--color-green: rgb(135, 116, 225);
--color-success: rgb(0, 199, 62);
--color-text-meta-colored: rgb(131, 120, 219);
--color-reply-hover: rgb(39, 39, 39);
--color-reply-active: rgb(46, 47, 47);
--color-reply-own-hover: rgb(135, 117, 218);
--color-reply-own-hover-apple: rgb(135, 117, 218);
--color-reply-own-active: rgb(145, 125, 234);
--color-reply-own-active-apple: rgb(145, 125, 234);
--color-accent-own: rgb(255, 255, 255);
--color-accent-own-rgb: 255, 255, 255;
--color-message-meta-own: rgb(255, 255, 255, 0.533);
--color-own-links: rgb(255, 255, 255);
--color-code: rgb(135, 116, 225);
--color-code-own: rgb(255, 255, 255);
--color-code-bg: rgb(0, 0, 0, 0.502);
--color-code-own-bg: rgb(0, 0, 0, 0.314);
--color-composer-button: rgb(170, 170, 170, 0.8);
--color-message-reaction: rgb(43, 42, 53);
--color-message-reaction-hover: rgb(52, 49, 71);
--color-message-reaction-own: rgb(103, 92, 175);
--color-message-reaction-hover-own: rgb(91, 82, 155);
--color-message-reaction-chosen-hover: rgb(120, 100, 221);
--color-message-reaction-chosen-hover-own: rgb(245, 245, 245);
--color-message-non-contact: rgb(204, 238, 191);
--color-voice-transcribe-button: rgb(42, 42, 60);
--color-voice-transcribe-button-own: rgb(131, 115, 211);
--color-topic-blue: rgb(111, 249, 240);
--color-topic-yellow: rgb(255, 214, 126);
--color-topic-violet: rgb(203, 134, 219);
--color-topic-green: rgb(142, 238, 152);
--color-topic-rose: rgb(255, 147, 178);
--color-topic-red: rgb(251, 111, 95);
--color-topic-grey: rgb(153, 153, 153);
--color-forum-unread-topic-hover: rgb(54, 54, 54);
--color-forum-hover-unread-topic-hover: rgb(63, 63, 63);
--color-chat-username: rgb(233, 238, 244);
}
@view-transition {
navigation: auto;
types: page;
}
:root {
view-transition-name: none;
@include mixins.with-vt-type('page');
}
@include mixins.on-active-vt('page') {
&::view-transition-group(root) {
animation-duration: 400ms;
}
}