- lotusTransparent without lotusTheme warns and applies the theme anyway; name tags/header/footer get a subtle text-shadow + backdrop blur under body.lotus-transparent (#21). - Landscape filmstrip shrink requires (pointer: coarse) so a short desktop/PiP window isn't reflowed as a phone (#32). - lotusParam re-reads window.location on every call (#33). Fixes #21 Fixes #32 Fixes #33 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
273 lines
7.9 KiB
CSS
273 lines
7.9 KiB
CSS
/*
|
|
Copyright 2021-2024 New Vector Ltd.
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
|
Please see LICENSE in the repository root for full details.
|
|
*/
|
|
|
|
@layer normalize, compound-legacy, compound;
|
|
|
|
@import url("@fontsource/inter/400.css");
|
|
@import url("@fontsource/inter/500.css");
|
|
@import url("@fontsource/inter/600.css");
|
|
@import url("@fontsource/inter/700.css");
|
|
@import url("@fontsource/inconsolata/400.css");
|
|
@import url("@fontsource/inconsolata/700.css");
|
|
|
|
@import url("normalize.css/normalize.css") layer(normalize);
|
|
@import url("@vector-im/compound-design-tokens/assets/web/css/compound-design-tokens.css") layer(compound);
|
|
@import url("@vector-im/compound-web/dist/style.css") layer(compound.components);
|
|
|
|
:root {
|
|
--font-scale: 1;
|
|
--font-size-micro: calc(10px * var(--font-scale));
|
|
--font-size-caption: calc(12px * var(--font-scale));
|
|
--font-size-body: calc(15px * var(--font-scale));
|
|
--font-size-subtitle: calc(18px * var(--font-scale));
|
|
--font-size-title: calc(24px * var(--font-scale));
|
|
--font-size-headline: calc(32px * var(--font-scale));
|
|
|
|
--cpd-color-border-accent: var(--cpd-color-green-800);
|
|
/* The distance to inset non-full-width content from the edge of the window
|
|
along the inline axis. This ramps up from 16px for typical mobile windows, to
|
|
96px for typical desktop windows, and accounts for the safe area. */
|
|
--content-inset-left: calc(
|
|
env(safe-area-inset-left) +
|
|
min(
|
|
var(--cpd-space-24x),
|
|
max(var(--cpd-space-4x), calc((100vw - 900px) / 3))
|
|
)
|
|
);
|
|
--content-inset-right: calc(
|
|
env(safe-area-inset-right) +
|
|
min(
|
|
var(--cpd-space-24x),
|
|
max(var(--cpd-space-4x), calc((100vw - 900px) / 3))
|
|
)
|
|
);
|
|
--small-drop-shadow: 0px 1.2px 2.4px 0px rgba(0, 0, 0, 0.15);
|
|
--big-drop-shadow: 0px 0px 24px 0px #1b1d221a;
|
|
--subtle-drop-shadow: 0px 1px 2px 0px rgba(16, 24, 40, 0.05);
|
|
|
|
--call-view-overlay-layer: 1;
|
|
--call-view-header-footer-layer: 2;
|
|
}
|
|
|
|
:root,
|
|
[class*="cpd-theme-"] {
|
|
--video-tile-background: var(--cpd-color-bg-subtle-secondary);
|
|
}
|
|
|
|
.cpd-theme-dark {
|
|
--cpd-color-border-accent: var(--cpd-color-green-1100);
|
|
--stopgap-color-on-solid-accent: var(--cpd-color-text-primary);
|
|
--stopgap-background-85: rgba(16, 19, 23, 0.85);
|
|
}
|
|
|
|
body {
|
|
background-color: var(--cpd-color-bg-canvas-default);
|
|
color: var(--cpd-color-text-primary);
|
|
color-scheme: dark;
|
|
margin: 0;
|
|
-webkit-font-smoothing: antialiased;
|
|
-moz-osx-font-smoothing: grayscale;
|
|
-webkit-tap-highlight-color: transparent;
|
|
}
|
|
|
|
/* [lotus] When embedded in the Lotus host with lotusTransparent=1, make the
|
|
app background transparent so the host's wallpaper shows through natively —
|
|
replacing the host's injected `html, body { background: none !important }`
|
|
override. */
|
|
body.lotus-transparent,
|
|
body.lotus-transparent #root {
|
|
background: transparent !important;
|
|
}
|
|
|
|
/* [lotus] Upstream v0.25.0 added a full-viewport gradient painted on
|
|
`body[data-background="gradient"]::before`. It sits above the transparent body
|
|
and would hide the host's wallpaper, so suppress it in transparent mode. */
|
|
body.lotus-transparent[data-background="gradient"]::before {
|
|
display: none !important;
|
|
}
|
|
|
|
/* [lotus] Native Lotus/TDS theme, applied when lotusTheme=1, instead of the
|
|
host injecting CSS into the iframe after load. Overrides Compound design tokens
|
|
with Lotus values at the source so theming is complete and flash-free. Extend
|
|
this block with the full Lotus token map from the design system; the canvas
|
|
override below is a safe starting point that matches the Lotus dark surface. */
|
|
body.lotus-theme {
|
|
--cpd-color-bg-canvas-default: #0c0d10;
|
|
--video-tile-background: var(--cpd-color-bg-subtle-secondary);
|
|
}
|
|
|
|
/* [lotus #21] Subtle contrast guard for elements that sit directly on the
|
|
transparent canvas (no opaque tile background behind them) when
|
|
lotusTransparent is set: the host's real wallpaper is unknown to us, so a
|
|
light text-shadow/backdrop keeps name tags and header/footer controls legible
|
|
regardless of what's behind them. Kept behind `.lotus-transparent` so upstream
|
|
(non-Lotus) layouts are completely untouched. Hooked off stable data-testid/
|
|
element selectors rather than CSS-module class names, since those are hashed
|
|
per-build and owned by their own component stylesheets. */
|
|
body.lotus-transparent [data-testid="name_tag"],
|
|
body.lotus-transparent header,
|
|
body.lotus-transparent [data-testid="footer-container"] {
|
|
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.6);
|
|
}
|
|
|
|
body.lotus-transparent header,
|
|
body.lotus-transparent [data-testid="footer-container"] {
|
|
backdrop-filter: blur(8px);
|
|
-webkit-backdrop-filter: blur(8px);
|
|
}
|
|
|
|
@media (min-height: 330px) {
|
|
body[data-background="gradient"]::before {
|
|
content: "";
|
|
position: fixed;
|
|
/* Chromium abruptly fades our images to fully transparent at the edge of
|
|
the element. If we just make the element a little bigger than the viewport,
|
|
this is no longer visible. */
|
|
inset: -20px;
|
|
background-image: url("graphics/mobile-gradient.png");
|
|
background-size: 1400px 305px;
|
|
background-position: bottom;
|
|
background-repeat: no-repeat;
|
|
}
|
|
|
|
body[data-background="gradient"][data-platform="desktop"]::before {
|
|
background-image: url("graphics/desktop-gradient.png");
|
|
background-size: max(1440px, 100vw) max(1440px, 100vh);
|
|
background-position: center;
|
|
}
|
|
}
|
|
|
|
/* This prohibits the view to scroll for pages smaller than 122px in width
|
|
we use this for mobile pip webviews */
|
|
.no-scroll-body {
|
|
position: fixed;
|
|
width: 100%;
|
|
}
|
|
|
|
/* We use this to not render the page at all until we know the theme.*/
|
|
.no-theme {
|
|
opacity: 0;
|
|
}
|
|
|
|
html,
|
|
body,
|
|
#root {
|
|
/* We use !important here to override vaul drawers, which have a side effect
|
|
of setting height: auto; on the body element and messing up our layouts */
|
|
height: 100% !important;
|
|
}
|
|
|
|
#root {
|
|
display: flex;
|
|
flex-direction: column;
|
|
/* The root should be a separate stacking context so that portalled elements
|
|
like modals and menus always appear over top of it */
|
|
isolation: isolate;
|
|
}
|
|
|
|
/* On Android and iOS, prefer native system fonts. The global.css file of
|
|
Compound Web is where these variables ultimately get consumed to set the page's
|
|
font-family. */
|
|
body[data-platform="android"] {
|
|
--cpd-font-family-sans: "Roboto", "Noto", "Inter", sans-serif;
|
|
}
|
|
|
|
body[data-platform="ios"] {
|
|
--cpd-font-family-sans:
|
|
-apple-system, BlinkMacSystemFont, "Inter", sans-serif;
|
|
}
|
|
|
|
@layer compound-legacy {
|
|
h1,
|
|
h2,
|
|
h3,
|
|
h4,
|
|
h5,
|
|
h6,
|
|
p,
|
|
a {
|
|
margin-top: 0;
|
|
}
|
|
|
|
/* Headline Semi Bold */
|
|
h1 {
|
|
font-weight: 600;
|
|
font-size: var(--font-size-headline);
|
|
}
|
|
|
|
/* Title */
|
|
h2 {
|
|
font-weight: 600;
|
|
font-size: var(--font-size-title);
|
|
}
|
|
|
|
/* Subtitle */
|
|
h3 {
|
|
font-weight: 600;
|
|
font-size: var(--font-size-subtitle);
|
|
}
|
|
|
|
/* Body Semi Bold */
|
|
h4 {
|
|
font-weight: 600;
|
|
font-size: var(--font-size-body);
|
|
}
|
|
|
|
h1,
|
|
h2,
|
|
h3 {
|
|
line-height: 1.2;
|
|
}
|
|
|
|
/* Body */
|
|
p {
|
|
font-size: var(--font-size-body);
|
|
line-height: var(--font-size-title);
|
|
}
|
|
|
|
hr {
|
|
width: calc(100% - 24px);
|
|
border: none;
|
|
border-top: 1px solid var(--cpd-color-border-interactive-secondary);
|
|
color: var(--cpd-color-border-interactive-secondary);
|
|
overflow: visible;
|
|
text-align: center;
|
|
height: 5px;
|
|
font-weight: 600;
|
|
font-size: var(--font-size-body);
|
|
line-height: 24px;
|
|
margin: 0 12px;
|
|
}
|
|
|
|
summary {
|
|
font-size: var(--font-size-body);
|
|
}
|
|
|
|
details > :not(summary) {
|
|
margin-left: var(--font-size-body);
|
|
}
|
|
|
|
details[open] > summary {
|
|
margin-bottom: var(--font-size-body);
|
|
}
|
|
}
|
|
|
|
#root > [data-overlay-container] {
|
|
position: relative;
|
|
height: 100%;
|
|
}
|
|
|
|
/* normalize.css sets the focus rings on buttons in Firefox to an unusual custom
|
|
outline, which is inconsistent with our other components and is not sufficiently
|
|
visible to be accessible. This resets it back to 'auto'. */
|
|
button:-moz-focusring,
|
|
[type="button"]:-moz-focusring,
|
|
[type="reset"]:-moz-focusring,
|
|
[type="submit"]:-moz-focusring {
|
|
outline: auto;
|
|
}
|