Files
cinny/src/index.css
T
Lotus CIandClaude Opus 5.5 b71f9c95c6 fix(emoji): flags render on Windows; "Twitter emoji" works again
Windows' emoji font has no flag glyphs, so 🇺🇸 (:flag_us:) showed as the
letters "US". Two fixes:

- A TwemojiFlags @font-face over the bundled Twemoji file, limited by
  unicode-range to the regional-indicator letters (U+1F1E6–1F1FF), is put in
  the font stack on Windows only. Every other emoji stays native, other
  platforms keep their own flags, and the file is fetched only when a flag is
  on screen.
- The Appearance font setting overwrote --font-secondary with a stack that
  had no emoji families at all, so neither this nor the existing "Twitter
  emoji" switch reached message text. The font map now keeps
  var(--font-flags), var(--font-emoji) before the generic family.

Verified in Chromium via CDP platform fonts: with a Windows user agent 🇺🇸 is
drawn by "Twemoji Mozilla" while 😀 stays on the system emoji font; with a
Linux user agent both stay native.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
2026-09-24 22:33:23 -04:00

192 lines
4.4 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@font-face {
font-family: Twemoji;
src:
url('../public/font/Twemoji.Mozilla.v15.1.0.woff2'),
url('../public/font/Twemoji.Mozilla.v15.1.0.ttf');
font-display: swap;
}
/* Country flags only (regional indicator letters U+1F1E6–1F1FF), from the same
Twemoji file. Windows' emoji font has no flag glyphs and draws 🇺🇸 as the
letters "US"; SystemEmojiFeature enables this family on Windows. The
unicode-range means the file is only fetched when a flag is on screen. */
@font-face {
font-family: TwemojiFlags;
src:
url('../public/font/Twemoji.Mozilla.v15.1.0.woff2'),
url('../public/font/Twemoji.Mozilla.v15.1.0.ttf');
unicode-range: U+1F1E6-1F1FF;
font-display: swap;
}
:root {
--tc-link: hsl(213deg 100% 45%);
/* semantic surface vars used by poll, location, upload card, gif picker */
--bg-surface: #ffffff;
--bg-surface-low: rgba(0, 0, 0, 0.04);
--bg-surface-variant: rgba(0, 0, 0, 0.07);
--bg-surface-active: rgba(0, 0, 0, 0.1);
--bg-surface-border: rgba(0, 0, 0, 0.14);
--text-primary: #1a1a1a;
/* 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%);
--font-emoji: 'Twemoji_DISABLED';
--font-flags: 'TwemojiFlags_DISABLED';
--font-secondary: 'InterVariable', var(--font-flags), var(--font-emoji), sans-serif;
}
.dark-theme,
.butter-theme {
--tc-link: hsl(213deg 100% 80%);
/* semantic surface vars — dark overrides */
--bg-surface: #25272e;
--bg-surface-low: rgba(255, 255, 255, 0.05);
--bg-surface-variant: rgba(255, 255, 255, 0.08);
--bg-surface-active: rgba(255, 255, 255, 0.1);
--bg-surface-border: rgba(255, 255, 255, 0.12);
--text-primary: #e0e5ed;
--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%);
--font-secondary: 'InterVariable', var(--font-emoji), sans-serif;
}
html {
height: 100%;
/* dvh shrinks when mobile virtual keyboard appears, so the layout never gets pushed off-screen */
height: 100dvh;
overflow: hidden;
}
body {
margin: 0;
padding: 0;
height: 100%;
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;
}
#root {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
}
*,
*::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;
}
/* Caption input focus ring — replaces stripped outline */
[data-caption-input]:focus-visible {
border-color: rgba(0, 100, 200, 0.55);
box-shadow: 0 0 0 2px rgba(0, 100, 200, 0.18);
}
.dark-theme [data-caption-input]:focus-visible,
.butter-theme [data-caption-input]:focus-visible {
border-color: rgba(100, 160, 255, 0.6);
box-shadow: 0 0 0 2px rgba(100, 160, 255, 0.18);
}
audio:not([controls]) {
display: none !important;
}
@keyframes pttLivePulse {
0%,
100% {
opacity: 1;
}
50% {
opacity: 0.25;
}
}
/* Fix Firefox rendering lists that have empty items with those items collapsed in on eachother */
li p::before {
content: '';
display: inline-block;
}