@font-face { font-family: 'DM Sans'; src: url('/fonts/DMSans-Variable.woff2') format('woff2'); font-weight: 100 1000; font-style: normal; font-display: swap; } @font-face { font-family: 'DM Sans'; src: url('/fonts/DMSans-Variable-Italic.woff2') format('woff2'); font-weight: 100 1000; font-style: italic; font-display: swap; } @tailwind base; @tailwind components; @tailwind utilities; @layer base { :root { /* ── Matte Surfaces (RGB channels for Tailwind opacity support) ── */ --bg-base: 11 11 16; --bg-channel: 26 26 35; --bg-chat: 19 19 26; --bg-members: 26 26 35; --bg-elevated: 37 37 48; --bg-input: 17 17 24; --bg-overlay: rgba(0, 0, 0, 0.85); /* ── Borders ── */ --border-hard: 34 34 44; --border-soft: 42 42 54; /* ── Pastel Accents ── */ --accent-mint: 134 239 172; --accent-peach: 252 165 165; --accent-lavender: 196 181 253; --accent-sky: 125 211 252; --accent-amber: 252 211 77; --accent-rose: 253 164 175; --accent-coral: 251 146 60; /* ── Primary Action (replaces blurple) ── */ --accent-primary: 124 108 246; --accent-primary-hover: 107 92 224; --accent-primary-active: 95 79 208; /* ── Text Hierarchy ── */ --text-primary: 239 239 239; --text-secondary: 160 160 170; --text-tertiary: 92 92 104; --text-category: 72 72 84; --text-message: 216 216 222; --text-link: 125 211 252; --text-positive: 134 239 172; --text-warning: 252 211 77; --text-danger: 252 165 165; /* ── Interactive ── */ --interactive-hover: rgba(255, 255, 255, 0.06); --interactive-active: rgba(255, 255, 255, 0.12); --interactive-selected: rgba(255, 255, 255, 0.16); --interactive-muted: 58 58 68; /* ── Status ── */ --status-online: 134 239 172; --status-idle: 252 211 77; --status-dnd: 252 165 165; --status-offline: 58 58 68; /* ── Glass Material ── */ --glass-bg: rgba(20, 20, 26, 0.52); --glass-modal-bg: rgba(20, 20, 26, 0.82); --glass-border: rgba(255, 255, 255, 0.07); --glass-highlight: rgba(255, 255, 255, 0.05); /* ── Notification ── */ --notification: 253 164 175; } * { @apply border-0; outline: none !important; } ::selection { background: rgba(134, 239, 172, 0.25); color: rgb(var(--text-primary)); } html, body, #root { @apply h-full w-full overflow-hidden bg-surface-base text-txt-message; font-family: 'DM Sans', -apple-system, BlinkMacSystemFont, system-ui, sans-serif; font-optical-sizing: auto; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; } /* Suppress native text selection and callout on mobile interactive elements. Our global useGlobalLongPress handler provides context menus instead. Text can still be copied via context menu "Copy Text" option. */ @media (max-width: 767px) { * { -webkit-touch-callout: none; } button, [role="button"], [data-context-menu] { -webkit-user-select: none; user-select: none; } } /* Thin scrollbar */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background-color: rgb(var(--bg-input)); border-radius: 9999px; border: 2px solid transparent; background-clip: padding-box; } ::-webkit-scrollbar-thumb:hover { background-color: rgb(var(--bg-channel)); } .no-scrollbar::-webkit-scrollbar { display: none; } /* Dark theme auto-fill */ input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:focus { -webkit-text-fill-color: #ffffff; -webkit-box-shadow: 0 0 0px 1000px #111118 inset; transition: background-color 5000s ease-in-out 0s; } } @layer components { /* ── Glass Material Tiers ── * .glass — Popovers, context menus, autocomplete (small, no backdrop) * .glass-modal — Center-screen dialogs (large, with backdrop, higher opacity for legibility) * .glass-strip — Space sidebar edge (moved to @layer utilities to win over bg-surface-* utilities) * .glass-bubble — Persistent floating controls (voice bar, input pill) * .glass-pill — Inline decorations (reactions, tags, lighter blur) * * RULE: Every floating surface uses a glass tier. Never use bg-surface-elevated for overlays. * See CLAUDE.md "Surface Material Tiers" for the full decision guide. */ /* Standard glass — popovers, floating elements */ .glass { backdrop-filter: blur(20px) saturate(120%); -webkit-backdrop-filter: blur(20px) saturate(120%); background: var(--glass-bg); border: 1px solid var(--glass-border); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25), 0 8px 24px rgba(0, 0, 0, 0.15), inset 0 1px 0 var(--glass-highlight); transition: border-color 0.2s ease, box-shadow 0.2s ease; } /* Floating bubble glass — bottom bar, input pill */ .glass-bubble { backdrop-filter: blur(20px) saturate(120%); -webkit-backdrop-filter: blur(20px) saturate(120%); background: var(--glass-bg); border: 1px solid var(--glass-border); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.20), 0 8px 24px rgba(0, 0, 0, 0.12), inset 0 1px 0 var(--glass-highlight); } /* Modal glass — center-screen dialogs with backdrop */ .glass-modal { backdrop-filter: blur(20px) saturate(120%); -webkit-backdrop-filter: blur(20px) saturate(120%); background: var(--glass-modal-bg); border: 1px solid var(--glass-border); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.30), 0 12px 40px rgba(0, 0, 0, 0.20), inset 0 1px 0 var(--glass-highlight); } /* Reaction pill glass — lighter blur for small inline elements */ .glass-pill { backdrop-filter: blur(12px) saturate(110%); -webkit-backdrop-filter: blur(12px) saturate(110%); background: rgba(255, 255, 255, 0.06); border: 1px solid rgba(255, 255, 255, 0.08); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.03); } .glass-pill:hover { background: rgba(255, 255, 255, 0.10); border-color: rgba(255, 255, 255, 0.14); } .glass-pill-mine { background: rgba(134, 239, 172, 0.10); border-color: rgba(134, 239, 172, 0.25); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(134, 239, 172, 0.06); } .glass-pill-mine:hover { background: rgba(134, 239, 172, 0.16); } /* ── Input Tiers ── */ .input-standard { @apply bg-surface-input rounded px-3 py-2 text-sm text-txt-primary placeholder:text-txt-tertiary outline-none border border-white/[0.06] shadow-input focus:ring-2 focus:ring-accent-primary focus:border-accent-primary/30 transition-colors; } .input-search { @apply bg-surface-input rounded px-3 py-1.5 text-sm text-txt-primary placeholder:text-txt-tertiary outline-none border border-white/[0.06] shadow-input focus:ring-1 focus:ring-accent-primary focus:border-accent-primary/30 transition-colors; } .input-embedded { @apply bg-transparent text-txt-primary placeholder:text-txt-tertiary/60 outline-none; } .input-danger { @apply bg-surface-input rounded px-3 py-2 text-sm text-txt-primary placeholder:text-txt-tertiary outline-none border border-white/[0.06] shadow-input focus:ring-2 focus:ring-accent-rose focus:border-accent-rose/30 transition-colors; } /* iOS Safari auto-zooms on input focus when computed font-size is below 16px. Bumping every input tier (and bare /