        /* ============ BASE ============ */
        ::-webkit-scrollbar { width: 4px; }
        ::-webkit-scrollbar-track { background: transparent; }
        ::-webkit-scrollbar-thumb { background: var(--c-scrollbar); border-radius: 4px; }
        html, body { background: var(--c-bg-app) !important; }
        /* Modal-style overlays should NOT cover the 32px window header
           (so user can drag the window even when a modal is open). */
        .app-modal-overlay { position: absolute; top: calc(32px + var(--incoming-strip-h, 0px)); left: 0; right: 0; bottom: 0; }
        html[data-chrome="none"] .app-modal-overlay { top: var(--incoming-strip-h, 0px); }
        [data-theme="dark"]  #app-container { background: var(--c-bg-app); }
        .theme-switching, .theme-switching *, .theme-switching *::before, .theme-switching *::after { transition: none !important; }

        /* ============ LIQUID GLASS THEME (Apple Tahoe-inspired) ============ */
        /* Base canvas: deep aubergine/navy на которое ложатся aurora-blob'ы */
        [data-theme="glass"] #app-container {
            /* Background задаётся ниже через preset-aware градиент. */
            position: relative;
            isolation: isolate;
        }
        /* Aurora blobs — рисуются ПОД всем UI через z-index:-1.
           UI-сиблинги не требуют явного z-index: они и так попадают «над» aurora. */
        [data-theme="glass"] #aurora-bg {
            position: absolute;
            inset: 0;
            pointer-events: none;
            overflow: hidden;
            z-index: -1;
            /* GPU layer + contain: paint — изолирует subtree от внешнего
               paint-цикла, browser не пересчитывает aurora при изменениях
               UI (chat scroll, modal open, hover etc). Большая экономия. */
            transform: translate3d(0, 0, 0);
            contain: layout paint style;
        }
        /* NB: noise/grain overlay был удалён — feTurbulence на baseFrequency
           ≈ pixel-grid экрана сам создавал диагональный moiré (особенно в
           больших однотонных зонах). Cleaner подход: смягчить blob'ы и
           использовать большие плавные градиенты — тогда banding почти
           не виден без надобности маскировать его шумом. */
        [data-theme="glass"] #aurora-bg .blob {
            position: absolute;
            border-radius: 50%;
            /* 48px blur вместо 64 — на 25% меньше работы compositor'у
               на каждый кадр анимации. Opacity 0.95 компенсирует визуально. */
            filter: blur(48px);
            opacity: 0.95;
            /* GPU layer через translate3d — auto-promote modern браузерами.
               will-change убран: он держал layer ВСЕГДА в памяти даже при
               отсутствии анимации (>5MB на blob). translate3d даёт промоцию
               только при реальном transform — экономит видеопамять. */
            transform: translate3d(0, 0, 0);
            contain: layout paint;
        }
        /* Per-preset hue overrides — задаются классом на <html>, default = Tahoe */
        [data-theme="glass"] {
            --c-aurora-h1: 265; --c-aurora-h2: 195; --c-aurora-h3: 320;
            --c-aurora-s1: 90%; --c-aurora-s2: 95%; --c-aurora-s3: 85%;
            --c-aurora-l1: 55%; --c-aurora-l2: 55%; --c-aurora-l3: 55%;
            --c-aurora-a1: 0.85; --c-aurora-a2: 0.65; --c-aurora-a3: 0.55;
            --c-aurora-base-1: #1a0a2e;
            --c-aurora-base-2: #0a0e2e;
            --c-aurora-base-3: #0e0a2e;
        }
        [data-theme="glass"][data-glass-preset="tahoe"] {
            --c-aurora-h1: 265; --c-aurora-h2: 195; --c-aurora-h3: 320;
            --c-aurora-base-1: #1a0a2e; --c-aurora-base-2: #0a0e2e; --c-aurora-base-3: #0e0a2e;
        }
        [data-theme="glass"][data-glass-preset="aurora"] {
            /* Northern lights: emerald + cyan + violet */
            --c-aurora-h1: 155; --c-aurora-h2: 195; --c-aurora-h3: 270;
            --c-aurora-s1: 80%; --c-aurora-s2: 85%; --c-aurora-s3: 70%;
            --c-aurora-base-1: #061824; --c-aurora-base-2: #051424; --c-aurora-base-3: #0a1228;
        }
        [data-theme="glass"][data-glass-preset="sunset"] {
            /* Warm: orange + pink + violet */
            --c-aurora-h1: 25; --c-aurora-h2: 340; --c-aurora-h3: 280;
            --c-aurora-s1: 90%; --c-aurora-s2: 80%; --c-aurora-s3: 70%;
            --c-aurora-l1: 55%; --c-aurora-l2: 55%; --c-aurora-l3: 50%;
            --c-aurora-base-1: #2a1018; --c-aurora-base-2: #200818; --c-aurora-base-3: #1a0820;
        }
        [data-theme="glass"][data-glass-preset="cyber"] {
            /* Neon: green + cyan + electric blue */
            --c-aurora-h1: 130; --c-aurora-h2: 180; --c-aurora-h3: 220;
            --c-aurora-s1: 100%; --c-aurora-s2: 100%; --c-aurora-s3: 100%;
            --c-aurora-l1: 50%; --c-aurora-l2: 50%; --c-aurora-l3: 55%;
            --c-aurora-a1: 0.75; --c-aurora-a2: 0.65; --c-aurora-a3: 0.55;
            --c-aurora-base-1: #060f10; --c-aurora-base-2: #04141e; --c-aurora-base-3: #06101a;
        }
        [data-theme="glass"][data-glass-preset="plasma"] {
            /* Mono violet variations — calmer */
            --c-aurora-h1: 270; --c-aurora-h2: 285; --c-aurora-h3: 255;
            --c-aurora-s1: 75%; --c-aurora-s2: 70%; --c-aurora-s3: 80%;
            --c-aurora-a1: 0.70; --c-aurora-a2: 0.55; --c-aurora-a3: 0.45;
            --c-aurora-base-1: #160a30; --c-aurora-base-2: #100828; --c-aurora-base-3: #1a0c30;
        }
        [data-theme="glass"] #app-container {
            background: linear-gradient(135deg,
                var(--c-aurora-base-1) 0%,
                var(--c-aurora-base-2) 50%,
                var(--c-aurora-base-3) 100%);
        }
        [data-theme="glass"] #aurora-bg .blob-violet {
            width: 60vw; height: 60vw;
            top: -20%; left: -10%;
            background: radial-gradient(circle,
                hsla(var(--c-aurora-h1), var(--c-aurora-s1), var(--c-aurora-l1), var(--c-aurora-a1)) 0%,
                transparent 70%);
            animation: aurora-1 60s ease-in-out infinite;
        }
        [data-theme="glass"] #aurora-bg .blob-cyan {
            width: 55vw; height: 55vw;
            top: 10%; right: -15%;
            background: radial-gradient(circle,
                hsla(var(--c-aurora-h2), var(--c-aurora-s2), var(--c-aurora-l2), var(--c-aurora-a2)) 0%,
                transparent 70%);
            animation: aurora-2 75s ease-in-out infinite;
        }
        [data-theme="glass"] #aurora-bg .blob-magenta {
            width: 50vw; height: 50vw;
            bottom: -20%; left: 20%;
            background: radial-gradient(circle,
                hsla(var(--c-aurora-h3), var(--c-aurora-s3), var(--c-aurora-l3), var(--c-aurora-a3)) 0%,
                transparent 70%);
            animation: aurora-3 90s ease-in-out infinite;
        }
        /* translate3d сохраняет blob на GPU layer во время анимации — без этого
           каждый кадр пересчитывается на CPU, что добавляет subpixel jitter
           (часть «плывучего» муара). */
        @keyframes aurora-1 {
            0%, 100% { transform: translate3d(0, 0, 0)        scale(1);    }
            33%      { transform: translate3d(20vw, 15vh, 0)  scale(1.15); }
            66%      { transform: translate3d(-10vw, 25vh, 0) scale(0.95); }
        }
        @keyframes aurora-2 {
            0%, 100% { transform: translate3d(0, 0, 0)        scale(1);    }
            40%      { transform: translate3d(-25vw, 20vh, 0) scale(1.10); }
            80%      { transform: translate3d(-5vw, -10vh, 0) scale(0.90); }
        }
        @keyframes aurora-3 {
            0%, 100% { transform: translate3d(0, 0, 0)        scale(1);    }
            50%      { transform: translate3d(15vw, -30vh, 0) scale(1.20); }
        }
        /* Kill-switch для слабого GPU */
        [data-theme="glass"].aurora-static #aurora-bg .blob {
            animation: none !important;
        }
        /* Respect prefers-reduced-motion */
        @media (prefers-reduced-motion: reduce) {
            [data-theme="glass"] #aurora-bg .blob { animation: none !important; }
        }
        /* Liquid Glass primitive — heavy blur + saturate + specular edges + depth */
        [data-theme="glass"] .glass-blur {
            backdrop-filter: blur(var(--c-glass-blur)) saturate(var(--c-glass-saturate));
            -webkit-backdrop-filter: blur(var(--c-glass-blur)) saturate(var(--c-glass-saturate));
        }
        /* Liquid surface decoration — добавляет specular edges + depth shadow.
           Применяется к крупным surfaces: app-container внутрь, panels, modals. */
        [data-theme="glass"] .liquid-surface,
        [data-theme="glass"] #app-container {
            box-shadow:
                inset 0 1px 0 var(--c-glass-edge-top),
                inset 0 -1px 0 var(--c-glass-edge-bot);
        }
        [data-theme="glass"] .app-modal-overlay,
        [data-theme="glass"] .add-contact-sheet,
        [data-theme="glass"] #emoji-picker,
        [data-theme="glass"] .app-dialog__card {
            box-shadow:
                inset 0 1px 0 var(--c-glass-edge-top),
                inset 0 -1px 0 var(--c-glass-edge-bot),
                var(--c-glass-shadow);
        }
        input[type=checkbox], input[type=radio], input[type=range] { accent-color: var(--c-accent); }

        /* Floating surfaces are solid in light and dark and frosted in glass (the --*-float tokens). */
        .mp-popover {
            background: var(--c-bg-float);
            -webkit-backdrop-filter: var(--backdrop-float);
            backdrop-filter: var(--backdrop-float);
            color: var(--c-text-popup);
            border: 1px solid var(--c-border-float);
        }

        :where(:focus-visible) {
            outline: 2px solid var(--c-accent);
            outline-offset: 2px;
        }

        /* ============ ANIMATIONS ============ */
        .toast-enter { animation: toast-in 0.24s ease-out; }
        .toast-exit  { animation: toast-out 0.2s ease-in forwards; }
        @keyframes toast-in  { from { opacity:0; transform:translateY(12px); } to { opacity:1; transform:translateY(0); } }
        @keyframes toast-out { from { opacity:1; transform:translateY(0);    } to { opacity:0; transform:translateY(12px); } }
        @media (prefers-reduced-motion: reduce) { .toast-enter, .toast-exit { animation-duration: 1ms; } }

        /* toast-action-btn: small inline button inside toast for action prompts */
        .toast-action-btn {
            background: none;
            border: 1px solid var(--c-accent);
            color: var(--c-accent);
            border-radius: var(--r-md);
            cursor: pointer;
            font-size: var(--fs-xs);
            font-weight: 600;
            padding: 3px 10px;
            flex-shrink: 0;
            white-space: nowrap;
            transition: background 0.15s;
        }
        .toast-action-btn:hover { background: var(--c-accent-soft); }

        .pulse-ring      { animation: pulse-ring 1.5s infinite; }
        @keyframes pulse-ring { 0%{box-shadow:0 0 0 0 rgba(239,68,68,.5)} 70%{box-shadow:0 0 0 12px rgba(239,68,68,0)} 100%{box-shadow:0 0 0 0 rgba(239,68,68,0)} }
        .pulse-reconnect { animation: pulse-reconnect 2s infinite; }
        @keyframes pulse-reconnect { 0%,100%{opacity:1} 50%{opacity:.5} }

        /* ============ VIEW TRANSITIONS (narrow only — wide/medium used flex) ============ */
        /* narrow: absolute panes that slide in/out */
        html[data-layout="narrow"] #chat-list-column,
        html[data-layout="narrow"] #chat-view {
            position: absolute;
            inset: 0;
            width: 100%;
            /* Glass-theme fix: in narrow mode bg-chat is ~transparent, so an
               off-screen pane parked at translateX(-25%) used to bleed through
               the active pane. Pair the transform with a visibility flip whose
               transition is delayed by the animation duration — pane stays
               visible during the slide, then hides cleanly when parked. */
            transition: transform 0.25s cubic-bezier(0.4,0,0.2,1),
                        visibility 0s linear 0.25s;
            will-change: transform;
        }
        /* Visible (parked at 0) state — kill the visibility delay */
        html[data-layout="narrow"] #chat-list-column,
        html[data-layout="narrow"] #chat-view.slide-in {
            transform: translateX(0);
            visibility: visible;
            transition: transform 0.25s cubic-bezier(0.4,0,0.2,1),
                        visibility 0s linear 0s;
        }
        /* Off-screen / parked-out states */
        html[data-layout="narrow"] #chat-list-column.slide-out {
            transform: translateX(-25%);
            visibility: hidden;
        }
        html[data-layout="narrow"] #chat-view {
            transform: translateX(100%);
            visibility: hidden;
        }

        /* ============ BREAKPOINT LAYOUT ============ */

        /* wide (≥1100): все колонки видны */
        html[data-layout="wide"] #chat-list-column,
        html[data-layout="wide"] #chat-view            { display: flex; }

        /* medium (760–1099): chat-list + chat-view */
        html[data-layout="medium"] #chat-list-column,
        html[data-layout="medium"] #chat-view          { display: flex; }

        /* back button — hidden on wide/medium */
        html[data-layout="wide"]   #chat-back-button,
        html[data-layout="medium"] #chat-back-button   { display: none; }

        /* Settings in a narrow window: the section list, or one section full width under a back bar */
        .settings-narrow-bar { display: none; }
        html[data-layout="narrow"] #settings-nav { width: 100%; border-right: none; }
        html[data-layout="narrow"] #settings-content { padding: 0 16px 16px; }
        html[data-layout="narrow"] #settings-overlay[data-settings-pane="nav"] #settings-content,
        html[data-layout="narrow"] #settings-overlay[data-settings-pane="section"] #settings-nav { display: none; }
        html[data-layout="narrow"] .settings-narrow-bar {
            display: flex; align-items: center; position: sticky; top: 0; z-index: 1;
            margin: 0 -16px 16px; padding: 8px 12px;
            background: var(--c-bg-header); color: var(--c-text-header); border-bottom: 1px solid var(--c-border);
            backdrop-filter: blur(16px);
        }
        .settings-narrow-back {
            display: inline-flex; align-items: center; gap: 8px; min-height: 36px; padding: 0 10px;
            border-radius: 8px; font-size: 14px; font-weight: 700; color: inherit;
        }
        .settings-narrow-back:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 2px; }
        .settings-saved-anchor { position: sticky; top: 0; z-index: 2; height: 0; display: flex; justify-content: flex-end; pointer-events: none; }
        html[data-layout="narrow"] .settings-saved-anchor { top: 18px; }

        /* Settings dual-pane nav button active state */
        .settings-nav-btn.active {
            background: var(--c-accent-soft);
            color: var(--c-accent);
            font-weight: 600;
        }
        .settings-nav-btn.active i {
            color: var(--c-accent);
        }
        /* Danger nav button keeps red colour even when active */
        [data-settings-section="danger"].settings-nav-btn.active {
            background: rgba(239, 68, 68, 0.12);
            color: rgb(239, 68, 68);
        }

        /* ============ CHAT LIST COLUMN ============ */
        .list-chips { overflow-x: auto; scrollbar-width: none; }
        .list-chips::-webkit-scrollbar { display: none; }
        .list-chips.fade-end { -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent); mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent); }
        .list-chips.fade-start { -webkit-mask-image: linear-gradient(to left, #000 calc(100% - 28px), transparent); mask-image: linear-gradient(to left, #000 calc(100% - 28px), transparent); }
        .list-chips.fade-start.fade-end {
            -webkit-mask-image: linear-gradient(to right, transparent, #000 28px, #000 calc(100% - 28px), transparent);
            mask-image: linear-gradient(to right, transparent, #000 28px, #000 calc(100% - 28px), transparent);
        }
        .list-chip {
            display: inline-flex; align-items: center; gap: 5px;
            flex-shrink: 0;
            height: var(--chip-h); padding: 0 var(--chip-pad-x);
            border-radius: 9999px;
            font-size: var(--chip-font); font-weight: 500;
            color: var(--c-text-secondary);
            background: var(--c-bg-input);
            transition: background 0.12s, color 0.12s;
        }
        .list-chip:hover { color: var(--c-text-primary); }
        .list-chip.is-active { background: var(--c-accent-soft); color: var(--c-accent); }
        .list-chip.hidden { display: none; }
        .list-chip-count { font-size: 11px; font-weight: 600; }
        .list-chip-count.hidden { display: none; }
        .pending-sent-row:hover { background: var(--c-contact-hover); }
        .pending-sent-state { color: var(--c-text-secondary); }
        .pending-sent-row[data-sent-state="lost"] .pending-sent-state { color: var(--c-status-warn-text); }
        .pending-sent-row[data-sent-state="expired"] .pending-sent-state { color: var(--c-status-error-text); }
        .pending-sent-row[data-sent-state="declined"] .pending-sent-state { color: var(--c-status-error-text); }
        .banner-title-cap::first-letter { text-transform: uppercase; }
        .contact-row.is-search-focus,
        #search-add-row.is-search-focus { background: var(--c-contact-hover); box-shadow: inset 3px 0 0 var(--c-accent); }
        .contact-row-mark { background: var(--c-accent-soft); color: var(--c-accent); border-radius: 3px; padding: 0 1px; }
        .pending-sent-row.active { background: var(--c-contact-active); }
        #chat-list-column {
            width: 320px;
            flex-shrink: 0;
            flex-direction: column;
            background: var(--c-bg-contacts);
            border-right: 1px solid var(--c-border);
            position: relative;
        }

        /* ============ CONTACT INFO (slide-over) ============ */
        #right-info-panel {
            position: absolute;
            top: 0; right: 0; bottom: 0;
            width: min(360px, 100%);
            z-index: 36;
            display: flex;
            flex-direction: column;
            background: var(--c-bg-float-strong);
            -webkit-backdrop-filter: var(--backdrop-float);
            backdrop-filter: var(--backdrop-float);
            color: var(--c-text-popup);
            border-left: 1px solid var(--c-border-float);
            box-shadow: var(--shadow-2xl);
        }
        #right-info-panel.hidden { display: none; }
        html:not([data-tech-details="on"]) #contact-topology-section { display: none; }
        .info-avatar { width: 104px; height: 104px; }
        .info-action {
            display: flex; flex-direction: column; align-items: center; gap: 8px;
            font-size: 13px; color: var(--c-text-primary);
        }
        .info-action-icon {
            width: 52px; height: 52px; border-radius: 50%;
            display: flex; align-items: center; justify-content: center;
            background: var(--c-accent-soft); color: var(--c-accent);
            transition: filter 0.12s;
        }
        .info-action:hover .info-action-icon { filter: brightness(0.95); }
        .info-danger {
            border: 1px solid var(--c-status-error-border);
            background: var(--c-status-error-bg);
            border-radius: 16px;
            overflow: hidden;
        }
        .info-danger-item {
            width: 100%; height: 46px; padding: 0 16px;
            display: flex; align-items: center; gap: 12px;
            font-size: 14px; font-weight: 500; text-align: left;
            color: var(--c-status-error-text);
        }
        .info-danger-item + .info-danger-item { border-top: 1px solid var(--c-status-error-border); }
        .info-danger-item:hover { background: var(--c-status-error-soft); }

        /* ============ CHAT VIEW EMPTY STATE ============
           Visible only when #chat-view carries the .chat-view--empty class
           (set on app launch and restored on contact deletion via JS). When
           a chat is opened, showChatView removes the class and the rule
           below hides the overlay regardless of how the inner DOM was
           rebuilt by clearChat. */
        #chat-view:not(.chat-view--empty) #chat-empty-state {
            display: none;
        }
        html:not([data-layout="narrow"]) #chat-view.chat-view--empty #chat-header,
        html:not([data-layout="narrow"]) #chat-view.chat-view--empty #chat-composer { display: none; }
        #chat-view.chat-view--empty #chat-window > :not(#chat-empty-state) { display: none; }

        /* ============ CHAT VIEW PREVIEW MODE ============
           Set on #chat-view when activeChatPeerId.friendState === 'pending-incoming'.
           The composer is hidden and replaced with an italic placeholder
           strip; the greeting + Accept/Reject/Block buttons live in the
           incoming-invite-greeting banner registered with BannerManager. */
        #chat-view.chat-view--preview #chat-form {
            display: none;
        }
        #chat-view.chat-view--preview #chat-preview-composer-placeholder {
            display: block;
        }
        #chat-empty-state {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 100%;
            gap: 12px;
            color: var(--c-text-secondary);
        }

        /* ============ ONLINE DOT (placeholder) ============ */
        .online-dot {
            width: 11px; height: 11px;
            border-radius: 50%;
            background: #9ca3af;
            border: 2px solid var(--c-bg-contacts);
            position: absolute; bottom: 0; right: 0;
        }

        /* ============ MSG STATUS TICK ============ */
        .msg-tick { display: inline-flex; align-items: center; margin-left: 2px; }
        .msg-tick.status-pending   { opacity: 0.45; }                            /* outline clock, dim */
        .msg-tick.status-queued    { opacity: 0.85; color: var(--c-status-warn-solid); }  /* amber clock — in local queue */
        .msg-tick.status-sent      { opacity: 0.75; }                            /* single check — in mailbox */
        .msg-tick.status-delivered { opacity: 1; }                                        /* double-check, default text colour */
        .msg-tick.status-read      { opacity: 1; color: var(--c-status-video); }          /* recipient opened (sky) */
        .msg-tick.status-failed    { opacity: 1; color: var(--c-status-error-solid); }    /* red triangle */

        /* ============ ADAPTIVE BUBBLE WIDTH ============
           Telegram-style: tighter on narrow windows (less wasted gutter),
           more breathing room on wide ones (no "stretched paragraph"
           feel). Hard pixel cap protects ultra-wide screens.
           Container queries would be the right tool but the renderer is
           a single-pane chat — the chat-view scales with the window, so
           viewport breakpoints are accurate enough. */
        .bubble-col {
            display: flex;
            flex-direction: column;
            max-width: min(78%, 640px);
        }
        @media (max-width: 760px)  { .bubble-col { max-width: 88%; } }
        @media (min-width: 1400px) { .bubble-col { max-width: min(60%, 720px); } }
        @media (min-width: 1900px) { .bubble-col { max-width: min(50%, 800px); } }

        /* ============ CONTACT ROW ============ */
        .contact-row {
            border-left: 3px solid transparent;
            transition: background 0.12s, border-color 0.12s;
        }
        .contact-row:hover  { background: var(--c-contact-hover); }
        .contact-row.active {
            background: var(--c-contact-active);
            border-left-color: var(--c-contact-border);
        }
        /* Inbox-strip invite cards mirror sidebar
           hover / active behaviour so they feel like first-class chat
           entries (clicking opens preview chat, the row stays highlighted
           while that peer's chat is active).
           Active state uses --c-accent-soft (purple) instead of the
           sidebar's --c-contact-active (greenish) because the inbox-strip
           wrapper itself uses bg-th-panel which collides visually with
           --c-contact-active in glass / dark themes. accent-soft contrasts
           with the panel tint so the user can tell at a glance which
           invite card they're viewing. */
        .pending-invite-row {
            border-left: 3px solid transparent;
            transition: background 0.12s, border-color 0.12s;
        }
        .pending-invite-row:hover  { background: var(--c-contact-hover); }
        .pending-invite-row.active {
            background: var(--c-accent-soft);
            border-left-color: var(--c-accent);
        }

        /* ============ MESSAGE BUBBLE TAILS ============ */
        .bubble-me {
            border-radius: 18px 18px 4px 18px;
        }
        .bubble-other {
            border-radius: 18px 18px 18px 4px;
        }

        /* ============ INCOMING CALL STRIP ============ */
        .incoming-strip {
            /* The call window's answer colours: dark enough for white text at 4.5:1 or better. */
            --incoming-accept: #15803d;
            --incoming-danger: #c0262d;
            display: flex; align-items: center; gap: 12px; min-height: 60px; box-sizing: border-box;
            padding: 8px 12px 8px 20px; background: var(--c-bg-header); color: var(--c-text-primary);
            border-bottom: 1px solid var(--c-bg-header-border); position: relative; z-index: 9100;
        }
        .incoming-strip.hidden { display: none; }
        html[data-chrome="none"] .incoming-strip { padding-top: calc(8px + env(safe-area-inset-top, 0px)); }
        .incoming-strip-who { position: relative; display: flex; flex-shrink: 0; }
        .incoming-strip-ring {
            position: absolute; inset: 0; border-radius: 50%;
            background: color-mix(in srgb, var(--c-status-online) 55%, transparent);
            animation: incomingRing 1.4s ease-out infinite;
        }
        .incoming-strip-avatar {
            position: relative; width: 36px; height: 36px; border-radius: 50%; overflow: hidden;
            display: flex; align-items: center; justify-content: center; box-shadow: 0 0 0 2px var(--c-status-online);
        }
        .incoming-strip-text { display: flex; flex-direction: column; gap: 1px; min-width: 0; flex: 1; }
        .incoming-strip-name { font-size: 14px; font-weight: 650; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
        .incoming-strip-status { font-size: 12px; color: var(--c-text-secondary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
        .incoming-strip-actions { display: flex; gap: 8px; flex-shrink: 0; }
        .incoming-strip-btn {
            height: 36px; padding: 0 14px; border: 0; border-radius: 10px; color: #fff; font: inherit;
            font-size: 13px; font-weight: 600; display: inline-flex; align-items: center; justify-content: center;
            gap: 6px; cursor: pointer; white-space: nowrap;
        }
        .incoming-strip-btn.hidden { display: none; }
        .incoming-strip-btn.is-accept { background: var(--incoming-accept); }
        .incoming-strip-btn.is-danger { background: var(--incoming-danger); }
        .incoming-strip-btn:hover { filter: brightness(1.12); }
        .incoming-strip-btn:focus-visible, .incoming-strip-hide:focus-visible, .incoming-pill:focus-visible {
            outline: 2px solid var(--c-accent); outline-offset: 2px;
        }
        .incoming-strip-hint {
            display: flex; flex-direction: column; gap: 2px; font-size: 11px; line-height: 1.3;
            color: var(--c-text-secondary); white-space: nowrap; flex-shrink: 0;
        }
        .incoming-strip-hide {
            width: 28px; height: 28px; flex-shrink: 0; padding: 0; border: 0; border-radius: 8px; background: transparent;
            color: var(--c-text-secondary); display: flex; align-items: center; justify-content: center; cursor: pointer;
        }
        .incoming-strip-hide:hover { background: var(--c-chrome-hover); color: var(--c-text-primary); }
        @media (max-width: 900px) { .incoming-strip-hint { display: none; } }
        @media (max-width: 640px) {
            .incoming-strip { flex-wrap: wrap; row-gap: 8px; padding-left: 16px; padding-right: 8px; }
            .incoming-strip-actions { order: 3; width: 100%; }
            .incoming-strip-actions .incoming-strip-btn { flex: 1; padding: 0 6px; }
        }
        @keyframes incomingRing {
            0%   { transform: scale(1); opacity: 0.6; }
            100% { transform: scale(1.6); opacity: 0; }
        }
        .incoming-pill {
            margin-left: 6px; height: 22px; max-width: 220px; padding: 0 10px 0 8px; border-radius: 11px; font: inherit;
            font-size: 12px; font-weight: 600; display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
            color: var(--c-status-ok-text); background: color-mix(in srgb, var(--c-status-online) 14%, transparent);
            border: 1px solid color-mix(in srgb, var(--c-status-online) 45%, transparent);
        }
        .incoming-pill.hidden { display: none; }
        .incoming-pill-avatar { width: 16px; height: 16px; margin-left: -4px; border-radius: 50%; overflow: hidden; flex-shrink: 0; }
        .incoming-pill-avatar svg { display: block; width: 100%; height: 100%; }
        .incoming-pill:hover { filter: brightness(1.1); }
        .incoming-pill.is-in-list { align-self: flex-start; margin: 8px 12px; flex-shrink: 0; }
        .quiet-mark {
            margin-left: 2px; width: 22px; height: 22px; border: 0; border-radius: 11px; padding: 0; font-size: 11px;
            display: inline-flex; align-items: center; justify-content: center; cursor: pointer; flex-shrink: 0;
            color: var(--c-accent); background: transparent;
        }
        .quiet-mark.hidden { display: none; }
        .quiet-mark:hover { background: var(--c-chrome-hover); }
        .quiet-mark:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 1px; }
        .own-quiet-mark {
            position: absolute; right: -1px; bottom: -1px; width: 15px; height: 15px; border-radius: 50%;
            display: flex; align-items: center; justify-content: center; font-size: 8px; pointer-events: none;
            color: var(--c-text-on-accent); background: var(--c-accent); box-shadow: 0 0 0 2px var(--c-bg-contacts);
        }
        .own-quiet-mark.hidden { display: none; }
        .quiet-menu-head { padding: 6px 12px 2px; font-size: 12px; line-height: 1.4; color: var(--c-text-secondary); }
        .contact-row-ringing { display: none; color: var(--c-status-ok-text); }
        .contact-row.is-ringing .contact-row-preview { display: none; }
        .contact-row.is-ringing .contact-row-ringing { display: block; }
        #chat-contact-status.is-ringing { color: var(--c-status-ok-text); font-weight: 600; }
        #btn-call.is-ringing { color: var(--c-status-ok-text); animation: incomingCallButton 1.4s ease-out infinite; }
        @keyframes incomingCallButton {
            0%   { box-shadow: 0 0 0 0 color-mix(in srgb, var(--c-status-online) 55%, transparent); }
            100% { box-shadow: 0 0 0 8px transparent; }
        }
        @media (prefers-reduced-motion: reduce) {
            .incoming-strip-ring, #btn-call.is-ringing { animation: none; }
        }

        /* ============ CALL BAR ============ */
        .call-bar {
            height: 38px; display: flex; align-items: center; gap: 10px;
            padding: 0 6px 0 4px; color: #fff; background: var(--c-status-video);
            -webkit-app-region: no-drag; transition: background 0.2s ease;
        }
        .call-bar.hidden { display: none; }
        .call-bar.is-muted { background: var(--c-status-offline); }
        .call-bar.is-group { background: var(--c-status-ok-solid); }
        .call-bar.is-group.is-muted { background: var(--c-status-video); }
        .call-bar-icon {
            width: 30px; height: 30px; border-radius: 50%; border: none; background: transparent;
            color: #fff; display: flex; align-items: center; justify-content: center; cursor: pointer;
        }
        .call-bar-icon:hover { background: rgba(255,255,255,0.15); }
        .call-bar-timer { font-size: 12px; font-variant-numeric: tabular-nums; opacity: 0.9; }
        .call-bar.is-group .call-bar-timer, .call-bar.is-group .call-bar-signal { display: none; }
        .call-bar-signal { display: inline-flex; align-items: flex-end; gap: 2px; height: 12px; }
        .call-bar-signal i { width: 3px; border-radius: 1px; background: #fff; opacity: 0.35; }
        .call-bar-signal i:nth-child(1) { height: 4px; }
        .call-bar-signal i:nth-child(2) { height: 6px; }
        .call-bar-signal i:nth-child(3) { height: 9px; }
        .call-bar-signal i:nth-child(4) { height: 12px; }
        .call-bar-signal[data-bars="1"] i:nth-child(-n+1),
        .call-bar-signal[data-bars="2"] i:nth-child(-n+2),
        .call-bar-signal[data-bars="3"] i:nth-child(-n+3),
        .call-bar-signal[data-bars="4"] i { opacity: 1; }
        .call-bar-avatars { display: inline-flex; }
        .call-bar-avatars:empty { display: none; }
        .call-bar-avatar {
            width: 24px; height: 24px; border-radius: 50%; margin-left: -6px; overflow: hidden; flex-shrink: 0;
            border: 2px solid rgba(255,255,255,0.35);
        }
        .call-bar-avatar svg { display: block; width: 100%; height: 100%; }
        .call-bar-avatar:first-child { margin-left: 0; }
        .call-bar-title {
            flex: 1; min-width: 0; height: 100%; border: none; background: transparent; color: #fff;
            font-size: 13px; font-weight: 600; cursor: pointer; display: flex; align-items: center; justify-content: center;
        }
        .call-bar-hangup {
            display: inline-flex; align-items: center; gap: 8px; height: 30px; padding: 0 10px; border: none;
            border-radius: 15px; background: transparent; color: #fff; font-size: 12px; cursor: pointer;
        }
        .call-bar-hangup:hover { background: rgba(255,255,255,0.15); }
        .call-bar.is-group .call-bar-hangup-label { display: none; }
        .group-call-bar {
            width: 100%; display: flex; align-items: center; gap: 10px; padding: 6px 12px;
            border: none; background: var(--c-accent-soft); color: var(--c-text-primary); cursor: pointer; text-align: left;
        }
        .group-call-bar-text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
        .group-call-bar-title { font-size: 13px; font-weight: 600; }
        .group-call-bar-subtitle { font-size: 12px; color: var(--c-text-secondary); }
        .group-call-bar-join {
            padding: 5px 14px; border-radius: 9999px; background: var(--c-accent); color: var(--c-text-on-accent);
            font-size: 12px; font-weight: 600;
        }
        /* ============ DENSITY ============ */
        /* Every size density changes is a variable; compact never shrinks a control under a finger,
           so the sizes of things that are tapped stay comfortable on touch. */
        :root {
            --row-h: 72px; --row-pad-y: 12px; --row-gap: 12px; --row-avatar: 48px;
            --row-name-font: 15px; --row-name-line: 22px; --row-preview-font: 14px; --row-preview-line: 20px;
            --row-lines-gap: 2px; --row-badge: 20px;
            --msg-font: 15px; --msg-line: 22px; --msg-pad-y: 8px; --msg-pad-x: 14px; --msg-gap-same: 6px; --msg-gap-group: 14px;
            --chat-head-h: 56px; --chat-head-pad-y: 10px;
            --composer-h: 56px; --composer-pad-y: 8px; --composer-field-pad-y: 6px; --composer-input-pad-y: 6px;
            --list-head-h: 56px; --list-head-btn: 36px; --list-head-avatar: 32px; --list-search-h: 36px;
            --chip-h: 32px; --chip-pad-x: 12px; --chip-font: 13px;
            --set-row-h: 56px; --set-pad: 16px; --set-hint-font: 13px;
        }
        html[data-density="compact"] {
            --row-h: 52px; --row-pad-y: 6px; --row-gap: 10px; --row-avatar: 36px;
            --row-name-font: 14px; --row-name-line: 19px; --row-preview-font: 13px; --row-preview-line: 17px;
            --row-lines-gap: 1px; --row-badge: 18px;
            --msg-font: 14px; --msg-line: 18px; --msg-pad-y: 5px; --msg-pad-x: 10px; --msg-gap-same: 2px; --msg-gap-group: 8px;
            --chat-head-h: 46px; --chat-head-pad-y: 5px;
            --composer-h: 46px; --composer-pad-y: 4px; --composer-field-pad-y: 3px; --composer-input-pad-y: 4px;
            --set-row-h: 44px; --set-pad: 12px; --set-hint-font: 12px;
        }
        html[data-density="compact"]:not([data-input="touch"]) {
            --list-head-h: 46px; --list-head-btn: 30px; --list-head-avatar: 28px; --list-search-h: 30px;
            --chip-h: 26px; --chip-pad-x: 10px; --chip-font: 12px;
        }
        .list-head-row { min-height: calc(var(--list-head-h) - 16px); }
        .list-head-btn { width: var(--list-head-btn); height: var(--list-head-btn); }
        #own-avatar { width: var(--list-head-avatar); height: var(--list-head-avatar); }
        html .list-search { height: var(--list-search-h); padding-top: 0; padding-bottom: 0; }
        html .contact-row { min-height: var(--row-h); padding-top: var(--row-pad-y); padding-bottom: var(--row-pad-y); gap: var(--row-gap); }
        .contact-row-avatar { width: var(--row-avatar); height: var(--row-avatar); }
        .contact-row-avatar > svg { width: 100%; height: 100%; }
        html .contact-row-name { font-size: var(--row-name-font); line-height: var(--row-name-line); }
        html .contact-row-preview, html .contact-row-ringing { font-size: var(--row-preview-font); line-height: var(--row-preview-line); }
        .contact-row-lines { margin-top: var(--row-lines-gap); }
        html .contact-row-badge { min-width: var(--row-badge); height: var(--row-badge); border-radius: calc(var(--row-badge) / 2); }
        html .bubble-me,
        html .bubble-other { padding: var(--msg-pad-y) var(--msg-pad-x); font-size: var(--msg-font); line-height: var(--msg-line); }
        .msg-row { margin-top: var(--msg-gap-group); }
        .msg-row--follow { margin-top: var(--msg-gap-same); }
        html #chat-header { min-height: var(--chat-head-h); padding-top: var(--chat-head-pad-y); padding-bottom: var(--chat-head-pad-y); }
        html #chat-composer { min-height: var(--composer-h); padding-top: var(--composer-pad-y); padding-bottom: var(--composer-pad-y); }
        html .composer-field { padding-top: var(--composer-field-pad-y); padding-bottom: var(--composer-field-pad-y); }
        html .composer-input { padding-top: var(--composer-input-pad-y); padding-bottom: var(--composer-input-pad-y); }

        /* tech-details: скрывать элементы .tech-detail когда отключено */
        html[data-tech-details="off"] .tech-detail { display: none !important; }

        /* ============ PHASE 3: GROUP CHAT ============ */

        /* Reaction chip — выбранная пользователем реакция */
        .reaction-mine {
            background: var(--c-accent-soft) !important;
            color: var(--c-accent) !important;
            border: 1px solid var(--c-accent) !important;
            font-weight: 600;
        }
        .reaction-chip { transition: transform 80ms ease, background 120ms; user-select: none; }
        .reaction-chip:hover { transform: translateY(-1px); }

        /* emoji-picker — Telegram-style icon tabs + larger cells + smooth open */
        /* Composer-mode positioning lives here (NOT inline) so closeEmojiPicker
           can reset element.style.maxHeight to empty and let the CSS default
           re-take effect. Reaction-mode overrides via element.style.X — when
           closed and JS resets, this CSS regains control automatically. */
        #emoji-picker {
            position: absolute;
            bottom: 64px;
            right: 12px;
            width: min(420px, calc(100% - 24px));
            max-height: min(360px, 50vh);
            transform-origin: bottom right;
            transition: opacity 140ms ease, transform 140ms ease;
        }
        #emoji-picker.emoji-picker--lifted { z-index: 45; }
        #emoji-picker.hidden {
            opacity: 0;
            transform: scale(0.96);
            pointer-events: none;
        }
        #emoji-picker:not(.hidden) {
            opacity: 1;
            transform: scale(1);
        }
        /* Tabs scroll horizontally when picker is too narrow for all 7 icons */
        #emoji-picker .emoji-tabs {
            overflow-x: auto;
            scrollbar-width: thin;
        }
        #emoji-picker .emoji-tabs::-webkit-scrollbar { height: 3px; }
        #emoji-picker .emoji-tabs::-webkit-scrollbar-thumb {
            background: var(--c-border);
            border-radius: 3px;
        }
        #emoji-picker .emoji-cat-btn {
            flex: 1 1 36px;
            min-width: 36px;
            height: 36px;
            border-radius: 8px;
            border: none;
            background: transparent;
            color: var(--c-text-secondary);
            font-size: 16px;
            cursor: pointer;
            transition: background 120ms, color 120ms;
            display: inline-flex;
            align-items: center;
            justify-content: center;
        }
        #emoji-picker .emoji-cat-btn:hover {
            background: var(--c-accent-soft);
            color: var(--c-accent);
        }
        #emoji-picker .emoji-cat-btn.active {
            background: var(--c-accent-soft);
            color: var(--c-accent);
        }
        #emoji-picker #emoji-grid > button {
            width: 100%;
            aspect-ratio: 1 / 1;
            border: none;
            background: transparent;
            border-radius: 8px;
            cursor: pointer;
            font-size: 22px;
            line-height: 1;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            transition: transform 80ms ease, background 120ms;
        }
        #emoji-picker #emoji-grid > button:hover {
            transform: scale(1.18);
            background: var(--c-accent-soft);
        }

        /* floating "react" smiley action-button — appears on bubble hover.
           All colours come from theme tokens so dark / light / glass presets just work. */
        #react-action-btn {
            position: fixed;
            z-index: 55;
            display: none;
            width: 28px;
            height: 28px;
            border-radius: 9999px;
            border: 1px solid var(--c-border);
            background: var(--c-bg-panel);
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
            align-items: center;
            justify-content: center;
            cursor: pointer;
            font-size: 14px;
            line-height: 1;
            transition: transform 100ms ease, color 120ms;
            color: var(--c-text-secondary);
        }
        #react-action-btn.visible { display: inline-flex; }
        #react-action-btn:hover { transform: scale(1.15); color: var(--c-accent); }

        /* floating reaction-bar (Telegram-style) — sized & clamped to chat-window */
        #reaction-bar {
            position: fixed;
            z-index: 60;
            display: inline-flex;
            align-items: center;
            gap: 4px;
            padding: 6px 10px;
            border-radius: 9999px;
            background: var(--c-bg-float);
            -webkit-backdrop-filter: var(--backdrop-float);
            backdrop-filter: var(--backdrop-float);
            border: 1px solid var(--c-border);
            box-shadow: 0 6px 18px rgba(0, 0, 0, 0.18);
            color: var(--c-text-primary);
            font-size: 18px;
            opacity: 0;
            transform: scale(0.92) translateY(4px);
            transition: opacity 140ms ease, transform 140ms ease;
            pointer-events: none;
            visibility: hidden;
            /* Adaptive: never wider than chat-window. JS sets max-width
               at show-time; this fallback covers initial layout. */
            max-width: calc(100vw - 32px);
            overflow-x: auto;
            scrollbar-width: thin;
        }
        /* Hide horizontal scrollbar by default — only shows when content overflows */
        #reaction-bar::-webkit-scrollbar { height: 4px; }
        #reaction-bar::-webkit-scrollbar-thumb {
            background: var(--c-border);
            border-radius: 4px;
        }
        #reaction-bar.visible {
            opacity: 1;
            transform: scale(1) translateY(0);
            pointer-events: auto;
            visibility: visible;
        }
        #reaction-bar button {
            border: none;
            background: transparent;
            cursor: pointer;
            width: 28px;
            height: 28px;
            line-height: 1;
            border-radius: 9999px;
            font-size: 18px;
            color: inherit;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            transition: transform 80ms ease, background 120ms;
        }
        #reaction-bar button:hover {
            transform: scale(1.2);
            background: var(--c-accent-soft);
        }

        /* standalone quick-react pill (sits above the items menu) */
        #bubble-quick-react {
            position: fixed;
            z-index: 70;
            display: inline-flex;
            align-items: center;
            gap: 2px;
            padding: 6px 8px;
            border-radius: 9999px;
            box-shadow: 0 8px 22px rgba(0, 0, 0, 0.22);
            opacity: 0;
            transform: scale(0.96);
            transform-origin: top center;
            transition: opacity 140ms ease, transform 140ms ease;
            pointer-events: none;
            visibility: hidden;
            /* Adaptive: never wider than chat-window. Excess emojis scroll
               horizontally inside the pill. */
            max-width: calc(100vw - 16px);
            overflow-x: auto;
            scrollbar-width: thin;
        }
        #bubble-quick-react::-webkit-scrollbar { height: 4px; }
        #bubble-quick-react::-webkit-scrollbar-thumb {
            background: var(--c-border);
            border-radius: 4px;
        }
        #bubble-quick-react.visible {
            opacity: 1;
            transform: scale(1);
            pointer-events: auto;
            visibility: visible;
        }
        #bubble-quick-react .qr-emoji {
            width: 36px;
            height: 36px;
            border: none;
            background: transparent;
            cursor: pointer;
            font-size: 22px;
            line-height: 1;
            border-radius: 9999px;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            transition: transform 80ms ease, background 120ms;
            color: inherit;
        }
        #bubble-quick-react .qr-emoji:hover {
            transform: scale(1.2);
            background: var(--c-accent-soft);
        }
        #bubble-quick-react .qr-more {
            font-size: 14px;
            color: var(--c-text-secondary);
        }

        /* bubble right-click context menu (Telegram-style) */
        #bubble-context-menu {
            position: fixed;
            z-index: 70;
            display: flex;
            flex-direction: column;
            min-width: 200px;
            padding: 6px;
            border-radius: 12px;
            box-shadow: 0 12px 32px rgba(0, 0, 0, 0.28);
            font-size: 13px;
            opacity: 0;
            transform: scale(0.96);
            transform-origin: top left;
            transition: opacity 120ms ease, transform 120ms ease;
            pointer-events: none;
            visibility: hidden;
            overflow-y: auto;
            scrollbar-width: thin;
        }
        #bubble-context-menu.visible {
            opacity: 1;
            transform: scale(1);
            pointer-events: auto;
            visibility: visible;
        }
        #bubble-context-menu::-webkit-scrollbar { width: 4px; }
        #bubble-context-menu::-webkit-scrollbar-thumb {
            background: var(--c-border);
            border-radius: 4px;
        }
        /* Inline quick-react bar (top of menu) */
        #bubble-context-menu .ctx-quick-bar {
            display: flex;
            align-items: center;
            gap: 2px;
            padding: 4px 4px 6px;
        }
        #bubble-context-menu .ctx-quick-emoji {
            width: 32px;
            height: 32px;
            border-radius: 9999px;
            border: none;
            background: transparent;
            cursor: pointer;
            font-size: 20px;
            line-height: 1;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            transition: transform 80ms ease, background 120ms;
            color: var(--c-text-secondary);
        }
        #bubble-context-menu .ctx-quick-emoji:hover {
            transform: scale(1.18);
            background: var(--c-accent-soft);
        }
        #bubble-context-menu .ctx-quick-more {
            font-size: 14px;
            color: var(--c-text-secondary);
        }
        /* Separator between quick-bar and items */
        #bubble-context-menu .ctx-menu-sep {
            height: 1px;
            margin: 2px 4px;
            background: var(--c-border);
            opacity: 0.6;
        }
        /* Action items */
        #bubble-context-menu .ctx-menu-item {
            display: flex;
            align-items: center;
            gap: 12px;
            text-align: left;
            padding: 8px 12px;
            border: none;
            background: transparent;
            border-radius: 8px;
            cursor: pointer;
            color: var(--c-text-primary);
            font-size: 13px;
            transition: background 120ms;
        }
        #bubble-context-menu .ctx-menu-item:hover {
            background: var(--c-accent-soft);
        }
        #bubble-context-menu .ctx-menu-icon {
            width: 16px;
            text-align: center;
            color: var(--c-text-secondary);
        }
        #bubble-context-menu .ctx-menu-item-danger { color: #ef4444; }
        #bubble-context-menu .ctx-menu-item-danger .ctx-menu-icon { color: #ef4444; }

        /* Reply quote block внутри bubble */
        .reply-quote {
            cursor: pointer;
            border-radius: 4px;
            background: rgba(0,0,0,0.06);
        }
        .bubble-me .reply-quote {
            background: rgba(255,255,255,0.1);
        }

        /* ============== Pet settings — redesign per design v2 ==============
           Hero card + grouped cards with section labels, character chips,
           palette circles, iOS-style toggle. Использует accent-tokens
           проекта (не Telegram blue), работает на light/dark/glass.
        */
        .pet-section { padding: 4px 2px; }
        .pet-section h2 {
            font-size: 18px;
            font-weight: 700;
            color: var(--c-text-primary);
            margin: 0 0 4px;
            letter-spacing: -0.005em;
        }
        .pet-section .pet-subtitle {
            font-size: 13px;
            color: var(--c-text-secondary);
            margin: 0 0 16px;
            line-height: 1.5;
        }
        /* Hero card — gradient, large pet preview, name + status */
        .pet-hero {
            background: linear-gradient(135deg, var(--c-accent) 0%, var(--c-accent-h, var(--c-accent-hover)) 100%);
            color: #fff;
            border-radius: 16px;
            padding: 20px 20px 18px;
            display: flex; align-items: center; gap: 16px;
            box-shadow: 0 6px 16px var(--c-accent-soft);
        }
        .pet-hero .pet-hero-disc {
            width: 84px; height: 84px;
            border-radius: 50%;
            background: rgba(255,255,255,0.18);
            display: flex; align-items: center; justify-content: center;
            flex-shrink: 0;
            box-shadow: 0 4px 12px rgba(0,0,0,0.18);
        }
        .pet-hero .pet-hero-disc svg { width: 76px; height: 76px; display: block; }
        .pet-hero .pet-hero-disc.empty {
            color: rgba(255,255,255,0.65);
            font-size: 32px;
        }
        .pet-hero-meta { flex: 1; min-width: 0; }
        .pet-hero-meta .nm {
            font-size: 19px; font-weight: 600;
            letter-spacing: -0.005em;
            white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
        }
        .pet-hero-meta .id {
            font-size: 12px;
            color: rgba(255,255,255,0.78);
            margin-top: 2px;
        }
        .pet-hero-meta .badge {
            display: inline-flex; align-items: center; gap: 6px;
            margin-top: 8px;
            padding: 3px 10px;
            background: rgba(255,255,255,0.22);
            border-radius: 999px;
            font-size: 11px;
            font-weight: 500;
        }
        .pet-hero-meta .badge .dot {
            width: 6px; height: 6px;
            border-radius: 50%;
            background: #4ade80;
            box-shadow: 0 0 0 2px rgba(74,222,128,0.25);
        }
        .pet-hero-meta .badge.off { background: rgba(255,255,255,0.12); }
        .pet-hero-meta .badge.off .dot { background: #fbbf24; box-shadow: none; }

        /* Card group — section label + white-card */
        .pet-card-group { margin-top: 18px; }
        .pet-card-label {
            font-size: 12px;
            font-weight: 600;
            color: var(--c-text-secondary);
            text-transform: uppercase;
            letter-spacing: 0.06em;
            margin: 0 0 8px 4px;
        }
        .pet-card {
            background: var(--c-bg-panel);
            border: 1px solid var(--c-border);
            border-radius: 12px;
            overflow: hidden;
        }
        .pet-card-footer {
            font-size: 12px;
            color: var(--c-text-secondary);
            padding: 8px 4px 0;
            line-height: 1.4;
        }

        /* Card row — icon + main + control */
        .pet-row {
            display: flex; align-items: center; gap: 14px;
            padding: 12px 14px;
            position: relative;
        }
        .pet-row + .pet-row::before,
        .pet-action-row + .pet-action-row::before {
            content: '';
            position: absolute;
            top: 0; left: 52px; right: 0;
            height: 1px;
            background: var(--c-border);
        }
        .pet-row .ricon,
        .pet-action-row .ricon {
            width: 24px; height: 24px;
            display: inline-flex; align-items: center; justify-content: center;
            color: var(--c-text-secondary);
            font-size: 16px;
            flex-shrink: 0;
        }
        .pet-row .ricon.accent,
        .pet-action-row .ricon.accent { color: var(--c-accent); }
        .pet-row .rmain,
        .pet-action-row .rmain { flex: 1; min-width: 0; }
        .pet-row .rmain .nm,
        .pet-action-row .rmain .nm { font-size: 14px; color: var(--c-text-primary); line-height: 1.3; }
        .pet-row .rmain .desc,
        .pet-action-row .rmain .desc { font-size: 12px; color: var(--c-text-secondary); margin-top: 2px; }

        /* iOS-style toggle (51×31) */
        .pet-toggle {
            width: 46px; height: 26px;
            background: var(--c-border);
            border-radius: 999px;
            position: relative;
            cursor: pointer;
            transition: background 200ms ease;
            flex-shrink: 0;
            border: 0;
            padding: 0;
        }
        .pet-toggle::after {
            content: '';
            position: absolute;
            top: 2px; left: 2px;
            width: 22px; height: 22px;
            background: #fff;
            border-radius: 50%;
            box-shadow: 0 2px 4px rgba(0,0,0,0.18), 0 1px 1px rgba(0,0,0,0.05);
            transition: left 200ms ease;
        }
        .pet-toggle[aria-checked="true"] { background: var(--c-accent); }
        .pet-toggle[aria-checked="true"]::after { left: 22px; }

        /* Character chips */
        .pet-chip-row {
            display: flex; flex-wrap: wrap; gap: 8px;
            padding: 12px 14px;
        }
        .pet-chip {
            display: inline-flex; align-items: center; gap: 6px;
            padding: 7px 12px;
            border-radius: 999px;
            background: var(--c-bg-input);
            color: var(--c-text-primary);
            font-size: 13px; font-weight: 500;
            cursor: pointer;
            transition: background 120ms, color 120ms, box-shadow 120ms;
            border: 1px solid transparent;
        }
        .pet-chip:hover { background: var(--c-accent-light); }
        .pet-chip[aria-pressed="true"] {
            background: var(--c-accent-soft);
            color: var(--c-accent);
            border-color: var(--c-accent);
        }
        .pet-chip .em { font-size: 14px; }

        /* Palette circle picker */
        .pet-palette-row {
            display: flex; gap: 12px; flex-wrap: wrap;
            padding: 14px 14px 4px;
            justify-content: center;
        }
        .pet-palette {
            width: 48px; height: 48px;
            border-radius: 50%;
            cursor: pointer;
            position: relative;
            transition: transform 150ms ease;
            border: 3px solid transparent;
            background-clip: content-box;
            padding: 2px;
        }
        .pet-palette:hover { transform: scale(1.08); }
        .pet-palette[aria-pressed="true"] { border-color: var(--c-accent); }
        .pet-palette .swatch {
            width: 100%; height: 100%;
            border-radius: 50%;
            background: conic-gradient(
                var(--c1) 0 25%,
                var(--c2) 25% 50%,
                var(--c3) 50% 75%,
                var(--c4) 75% 100%
            );
            box-shadow: inset 0 0 0 1px rgba(0,0,0,0.10);
        }
        .pet-palette[aria-pressed="true"]::after {
            content: '\f00c';
            font-family: 'Font Awesome 6 Free'; font-weight: 900;
            position: absolute;
            inset: 0;
            display: flex; align-items: center; justify-content: center;
            color: #fff;
            font-size: 14px;
            text-shadow: 0 1px 3px rgba(0,0,0,0.55);
        }
        .pet-palette-label {
            text-align: center;
            font-size: 12px;
            color: var(--c-text-secondary);
            padding: 2px 14px 12px;
        }
        .pet-palette-label b { color: var(--c-text-primary); font-weight: 600; }

        /* Inline name input row (no row separator above) */
        .pet-name-row {
            display: flex; gap: 8px; align-items: center;
            padding: 12px 14px;
        }
        .pet-name-row input {
            flex: 1;
            background: var(--c-bg-input);
            color: var(--c-text-primary);
            font-size: 14px;
            border: 1px solid var(--c-border);
            border-radius: 8px;
            padding: 8px 12px;
            outline: none;
            transition: border-color 0.15s;
        }
        .pet-name-row input:focus { border-color: var(--c-accent); }
        .pet-name-row .pet-icon-btn {
            width: 36px; height: 36px;
            border-radius: 8px;
            display: inline-flex; align-items: center; justify-content: center;
            background: var(--c-bg-input);
            color: var(--c-text-secondary);
            border: 1px solid var(--c-border);
            cursor: pointer;
            transition: background 120ms, color 120ms;
        }
        .pet-name-row .pet-icon-btn:hover { background: var(--c-accent-soft); color: var(--c-accent); }

        /* Generic action row — clickable row with chevron */
        .pet-action-row {
            display: flex; align-items: center; gap: 14px;
            padding: 12px 14px;
            cursor: pointer;
            transition: background 120ms;
            position: relative;
            background: transparent;
            border: 0;
            text-align: left;
            width: 100%;
            color: inherit;
            font: inherit;
        }
        .pet-action-row:hover { background: var(--c-accent-light); }
        .pet-action-row + .pet-action-row::before {
            content: '';
            position: absolute;
            top: 0; left: 52px; right: 0;
            height: 1px;
            background: var(--c-border);
        }
        .pet-action-row .chev { color: var(--c-text-muted); font-size: 13px; }

        /* Pet picker — horizontal scroller */
        .pet-picker {
            display: flex;
            gap: 12px;
            padding: 14px 14px 16px;
            overflow-x: auto;
            scrollbar-width: thin;
        }
        .pet-picker::-webkit-scrollbar { height: 6px; }
        .pet-picker::-webkit-scrollbar-thumb { background: var(--c-border); border-radius: 6px; }
        .pet-picker-card {
            flex-shrink: 0;
            width: 86px;
            display: flex; flex-direction: column; align-items: center; gap: 6px;
            cursor: pointer;
            position: relative;
        }
        .pet-picker-card .disc {
            width: 70px; height: 70px;
            border-radius: 50%;
            background: var(--c-bg-input);
            display: flex; align-items: center; justify-content: center;
            transition: all 180ms ease;
            border: 2.5px solid transparent;
            position: relative;
        }
        .pet-picker-card .disc svg { width: 64px; height: 64px; display: block; }
        .pet-picker-card[aria-pressed="true"] .disc {
            border-color: var(--c-accent);
            background: var(--c-accent-soft);
        }
        .pet-picker-card[aria-pressed="true"]::after {
            content: '\f00c';
            font-family: 'Font Awesome 6 Free'; font-weight: 900;
            position: absolute;
            top: -2px; right: 4px;
            width: 22px; height: 22px;
            background: var(--c-accent);
            color: var(--c-text-on-accent);
            border-radius: 50%;
            font-size: 10px;
            display: inline-flex; align-items: center; justify-content: center;
            border: 2.5px solid var(--c-bg-panel);
        }
        .pet-picker-card.locked { opacity: 0.55; cursor: default; }
        .pet-picker-card.locked .disc {
            color: var(--c-text-muted);
            font-size: 22px;
        }
        .pet-picker-card .pn {
            font-size: 12px;
            color: var(--c-text-primary);
            text-align: center;
            line-height: 1.2;
        }
        .pet-picker-card.locked .pn { color: var(--c-text-secondary); }
        .pet-picker-card .pn-soon {
            font-size: 10px;
            color: var(--c-text-muted);
            text-align: center;
        }
        .pet-picker-card .lock-badge {
            position: absolute;
            top: 50px; right: 6px;
            width: 20px; height: 20px;
            background: var(--c-bg-panel);
            border: 2px solid var(--c-border);
            border-radius: 50%;
            color: var(--c-text-secondary);
            font-size: 9px;
            display: inline-flex; align-items: center; justify-content: center;
        }

        /* ============== Custom select (pet settings) ==============
           Native <select> рендерится OS-зависимым chrome (стрелка, popup).
           На macOS/Windows выглядит инородно поверх glass-темы. Reset'им
           appearance, рисуем свой chevron через background-image (inline
           SVG), и красим popup-options через color-scheme + явные правила
           для option (Chromium поддерживает в Electron). */
        .mp-styled-select {
            -webkit-appearance: none;
            -moz-appearance: none;
            appearance: none;
            background-color: var(--c-bg-input);
            color: var(--c-text-primary);
            border: 1px solid var(--c-border);
            border-radius: 0.5rem;
            padding: 0.5rem 2.25rem 0.5rem 0.75rem;
            font-size: 0.875rem;
            line-height: 1.25rem;
            cursor: pointer;
            background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'><path d='M2 4 L6 8 L10 4' stroke='%23808a9c' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round' fill='none'/></svg>");
            background-repeat: no-repeat;
            background-position: right 0.6rem center;
            background-size: 12px 12px;
            transition: border-color 0.15s ease, box-shadow 0.15s ease;
        }
        .mp-styled-select:hover {
            border-color: var(--c-accent);
        }
        .mp-styled-select:focus {
            outline: none;
            border-color: var(--c-accent);
            box-shadow: 0 0 0 3px var(--c-accent-soft);
        }
        select { color-scheme: var(--c-popup-scheme); }
        select option {
            padding: 6px 8px;
            background-color: var(--c-bg-popup);
            color: var(--c-text-popup);
        }

        /* Theme-aware status text utilities — use these inside tinted panels
           (bg-{green,yellow,red}-500/15..25) instead of Tailwind's static
           text-{color}-100/200/300 classes. Tailwind text-* are baked at
           build time and don't change with data-theme, so a `text-yellow-200`
           label disappears on the light theme. The tokens below come from
           mirage-tokens.css and flip per theme. */
        .text-status-ok        { color: var(--c-status-ok-text); }
        .text-status-warn      { color: var(--c-status-warn-text); }
        .text-status-error     { color: var(--c-status-error-text); }
        .text-status-ok-strong { color: var(--c-status-ok-strong);    font-weight: 600; }
        .text-status-warn-strong  { color: var(--c-status-warn-strong);  font-weight: 600; }
        .text-status-error-strong { color: var(--c-status-error-strong); font-weight: 600; }
        /* Hover variants — Tailwind's CDN build only ships `hover:` modifiers
           for its own classes, not custom utilities. Declare them explicitly. */
        .hover\:text-status-ok-strong:hover    { color: var(--c-status-ok-strong); }
        .hover\:text-status-warn-strong:hover  { color: var(--c-status-warn-strong); }
        .hover\:text-status-error-strong:hover { color: var(--c-status-error-strong); }
        /* Outranks Tailwind's focus ring, so a refused field stays marked while the user edits it. */
        input[aria-invalid="true"],
        input[aria-invalid="true"]:focus { box-shadow: 0 0 0 2px var(--c-status-error-solid); }

        /* ============ STATIC MARKUP STYLE HOOKS ============
           Styles formerly embedded in index.html. Runtime values assigned by
           controllers (avatars, call hues, progress widths) intentionally keep
           their inline precedence over these defaults. */
        .update-pill-progress-bar { width: 0%; }
        .app-titlebar { -webkit-app-region: drag; height: 32px; }
        .titlebar-name { font-size: 13px; font-weight: 600; color: var(--c-text-secondary); margin-right: 2px; }
        .conn-indicator { position: relative; display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--c-text-secondary); }
        .conn-dot { position: relative; width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; background: var(--c-status-offline); }
        .conn-indicator[data-state="connected"] .conn-dot { background: var(--c-status-online); }
        .conn-indicator[data-state="connecting"] .conn-dot { background: var(--c-status-warn); }
        .conn-indicator[data-state="connecting"] .conn-dot::after {
            content: ''; position: absolute; inset: 0; border-radius: 50%;
            background: var(--c-status-warn); opacity: 0.45;
            animation: conn-pulse 1.6s ease-out infinite;
        }
        @keyframes conn-pulse { 0% { transform: scale(1); opacity: 0.45; } 100% { transform: scale(2.6); opacity: 0; } }
        @media (prefers-reduced-motion: reduce) { .conn-indicator .conn-dot::after { animation: none; } }
        .conn-tip {
            display: none; position: absolute; left: -10px; top: calc(100% + 10px); z-index: 60;
            padding: 8px 12px; border-radius: 10px; white-space: nowrap;
            background: var(--c-bg-float);
            -webkit-backdrop-filter: var(--backdrop-float);
            backdrop-filter: var(--backdrop-float);
            color: var(--c-text-popup);
            border: 1px solid var(--c-border-float); box-shadow: var(--shadow-lg);
        }
        .conn-dot:hover + .conn-tip, .conn-dot:focus-visible + .conn-tip { display: block; }
        .conn-tip-title { display: block; font-size: 12px; font-weight: 600; }
        .conn-tip-ping { display: block; margin-top: 2px; font-size: 12px; color: var(--c-text-secondary); }
        .conn-tip-ping.hidden { display: none; }
        .server-badge {
            height: 18px; padding: 0 8px; border-radius: 9px; font-size: 11px; font-weight: 500;
            display: inline-flex; align-items: center; white-space: nowrap;
            background: var(--c-bg-input); border: 1px solid var(--c-border); color: var(--c-text-secondary);
        }
        .server-badge[data-tone="warn"] {
            background: var(--c-status-warn-bg); border-color: var(--c-status-warn-border); color: var(--c-status-warn-text);
        }
        .server-badge.hidden { display: none; }
        .channel-badge {
            height: 18px; padding: 0 8px; border-radius: 9px; font-size: 11px; font-weight: 500;
            display: inline-flex; align-items: center; white-space: nowrap;
            background: var(--c-accent-soft); border: 1px solid var(--c-border); color: var(--c-text-primary);
        }
        .channel-badge.hidden { display: none; }
        .conn-edge { position: absolute; top: 0; left: 0; right: 0; height: 10px; z-index: 9150; }
        .conn-edge.hidden { display: none; }
        body:has(#onboarding-overlay:not(.hidden)) .conn-edge { display: none; }
        .conn-edge-hit {
            position: absolute; inset: 0; width: 100%; margin: 0; padding: 0; border: 0;
            background: transparent; cursor: default; display: block;
        }
        .conn-edge-hit:focus-visible { outline: 2px solid var(--c-accent); outline-offset: -2px; }
        .conn-line {
            position: absolute; left: 0; right: 0; top: 0; height: 3px; display: block;
            background: var(--c-status-error-solid); transition: height 0.15s ease;
        }
        .conn-edge[data-state="connected"] .conn-line {
            background: var(--c-status-ok-solid);
            animation: conn-line-settle 0.6s ease 3s forwards;
        }
        @keyframes conn-line-settle { from { opacity: 1; } to { opacity: 0.22; } }
        .conn-edge[data-state="connecting"] .conn-line {
            background-color: color-mix(in srgb, var(--c-status-warn-solid) 28%, transparent);
            background-image: linear-gradient(90deg, transparent 0, var(--c-status-warn-solid) 30%, var(--c-status-warn-solid) 70%, transparent 100%);
            background-size: 34% 100%; background-repeat: no-repeat;
            animation: conn-line-run 1.5s ease-in-out infinite;
        }
        @keyframes conn-line-run { 0% { background-position: -60% 0; } 100% { background-position: 160% 0; } }
        @media (prefers-reduced-motion: reduce) {
            .conn-edge[data-state="connecting"] .conn-line { animation: none; background-image: none; background-color: var(--c-status-warn-solid); }
        }
        html:not([data-input="touch"]) .conn-edge:hover .conn-line,
        .conn-edge-hit:focus-visible .conn-line, .conn-edge.tip-open .conn-line { height: 4px; }
        html:not([data-input="touch"]) .conn-edge[data-state="connected"]:hover .conn-line,
        .conn-edge[data-state="connected"]:is(.tip-open, :has(.conn-edge-hit:focus-visible)) .conn-line { animation: none; opacity: 1; }
        .conn-pop {
            display: none; position: absolute; left: 50%; top: calc(100% + 4px); transform: translateX(-50%);
            max-width: calc(100vw - 32px); box-sizing: border-box;
            padding: 10px 12px; border-radius: 10px;
            background: var(--c-bg-float);
            -webkit-backdrop-filter: var(--backdrop-float);
            backdrop-filter: var(--backdrop-float);
            color: var(--c-text-popup);
            border: 1px solid var(--c-border-float); box-shadow: var(--shadow-lg);
        }
        html:not([data-input="touch"]) .conn-edge:hover .conn-pop,
        .conn-edge-hit:focus-visible + .conn-pop, .conn-edge.tip-open .conn-pop { display: block; }
        .conn-pop-row { display: flex; align-items: center; gap: 8px; min-width: 0; white-space: nowrap; }
        .conn-pop-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; background: var(--c-status-error-solid); }
        .conn-edge[data-state="connected"] .conn-pop-dot { background: var(--c-status-ok-solid); }
        .conn-edge[data-state="connecting"] .conn-pop-dot { background: var(--c-status-warn-solid); }
        .conn-pop-server { margin-top: 6px; }
        .conn-pop-server:not(:has(> :not(.hidden))) { display: none; }
        .conn-pop-host { min-width: 0; overflow: hidden; text-overflow: ellipsis; font-size: 12px; color: var(--c-text-secondary); }
        .conn-pop-server .server-badge, .conn-pop-server .channel-badge { flex-shrink: 0; }
        .chat-transport { position: relative; display: inline-flex; align-items: center; flex-shrink: 0; }
        .chat-transport.hidden { display: none; }
        .chat-transport-icon { display: inline-flex; font-size: 10px; line-height: 1; color: var(--c-text-secondary); opacity: 0.8; }
        .chat-transport-icon:hover + .conn-tip { display: block; }
        .chat-transport-tip { white-space: normal; width: 260px; left: -12px; }
        .chat-transport-body { display: block; margin-top: 2px; font-size: 12px; color: var(--c-text-secondary); }
        .no-drag-region { -webkit-app-region: no-drag; }
        .drag-region { -webkit-app-region: drag; }
        .chat-view-layout { flex: 1; min-width: 0; }

        /* ============ CHAT VIEW: day chips, the encryption notice, the composer ============ */
        .chat-day-chip {
            position: sticky; top: 4px; z-index: 2;
            align-self: center;
            margin: 10px 0 6px;
            pointer-events: none;
        }
        .chat-day-chip > span {
            display: inline-block;
            font-size: 12px; font-weight: 500;
            color: var(--c-text-secondary);
            background: var(--c-bg-popup);
            border: 1px solid var(--c-border);
            border-radius: 12px;
            padding: 3px 12px;
        }
        .chat-e2e-notice {
            align-self: center;
            display: inline-flex; align-items: center; gap: 6px;
            margin: 8px 0 4px;
            padding: 6px 12px;
            border-radius: 10px;
            font-size: 12px;
            color: var(--c-text-secondary);
            background: var(--c-system-msg);
            text-align: center;
        }
        .chat-e2e-notice > i { font-size: 11px; opacity: 0.8; }
        .composer-input { line-height: 20px; max-height: calc(20px * 6 + 2 * var(--composer-input-pad-y, 6px)); overflow-y: hidden; }
        #chat-contact-status.is-typing { color: var(--c-accent); }
        .group-invite-modal { background: rgba(0,0,0,0.50); backdrop-filter: blur(3px); }
        .gi-card {
            width: min(400px, calc(100% - 32px)); max-height: min(600px, calc(100% - 48px));
            display: flex; flex-direction: column; overflow: hidden;
            background: var(--c-overlay-bg); border: 1px solid var(--c-border); border-radius: 16px;
            box-shadow: 0 18px 50px rgba(0,0,0,0.35); color: var(--c-text-primary);
            animation: gi-in 0.16s ease-out;
        }
        @keyframes gi-in { from { opacity: 0; transform: scale(0.97); } to { opacity: 1; transform: none; } }
        .gi-header { display: flex; align-items: center; gap: 8px; padding: 16px 12px 8px 20px; }
        .gi-title { flex: 1; min-width: 0; font-size: 16px; font-weight: 600; margin: 0; }
        .gi-count { font-size: 13px; color: var(--c-text-secondary); font-variant-numeric: tabular-nums; }
        .gi-close {
            width: 32px; height: 32px; border: none; border-radius: 50%; background: transparent;
            color: var(--c-text-secondary); cursor: pointer; display: flex; align-items: center; justify-content: center;
        }
        .gi-close:hover { background: var(--c-contact-hover); color: var(--c-text-primary); }
        .gi-search { position: relative; margin: 4px 16px 8px; }
        .gi-search-icon {
            position: absolute; left: 12px; top: 50%; transform: translateY(-50%);
            font-size: 12px; color: var(--c-text-muted); pointer-events: none;
        }
        .gi-search input {
            width: 100%; box-sizing: border-box; height: 36px; padding: 0 12px 0 34px;
            border: 1px solid transparent; border-radius: 18px; outline: none;
            background: var(--c-bg-input); color: var(--c-text-primary); font-size: 13px;
        }
        .gi-search input::placeholder { color: var(--c-text-muted); }
        .gi-search input:focus { border-color: var(--c-accent); }
        .gi-chips { display: flex; flex-wrap: wrap; gap: 6px; padding: 0 16px 8px; max-height: 96px; overflow-y: auto; }
        .gi-chips:empty { display: none; }
        .gi-chip {
            display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 4px 0 2px;
            border: none; border-radius: 14px; background: var(--c-accent-soft); color: var(--c-text-primary);
            font-size: 12px; cursor: pointer; max-width: 160px;
        }
        .gi-chip:hover { background: var(--c-contact-active); }
        .gi-chip-avatar { width: 24px; height: 24px; border-radius: 50%; overflow: hidden; flex-shrink: 0; }
        .gi-chip-avatar svg { display: block; }
        .gi-chip-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
        .gi-chip-x { width: 18px; text-align: center; font-size: 11px; color: var(--c-text-secondary); }
        .gi-list {
            flex: 1; min-height: 120px; overflow-y: auto; list-style: none; margin: 0; padding: 4px 0;
            border-top: 1px solid var(--c-border); outline: none;
        }
        .gi-row {
            display: flex; align-items: center; gap: 12px; padding: 6px 20px; cursor: pointer;
            transition: background 0.12s ease;
        }
        .gi-row:hover { background: var(--c-contact-hover); }
        .gi-row.is-selected { background: var(--c-accent-light); }
        .gi-row.is-focused { box-shadow: inset 3px 0 0 var(--c-accent); background: var(--c-contact-hover); }
        .gi-row.is-selected.is-focused { background: var(--c-accent-light); }
        .gi-avatar { position: relative; width: 40px; height: 40px; flex-shrink: 0; }
        .gi-avatar-img { width: 40px; height: 40px; border-radius: 50%; overflow: hidden; }
        .gi-avatar-img svg { display: block; }
        .gi-check {
            position: absolute; right: -2px; bottom: -2px; width: 18px; height: 18px; box-sizing: border-box;
            border-radius: 50%; border: 2px solid var(--c-overlay-bg); background: var(--c-status-ok-solid);
            color: var(--c-text-on-accent); font-size: 9px; display: flex; align-items: center; justify-content: center;
            transform: scale(0); transition: transform 0.14s ease-out;
        }
        .gi-row.is-selected .gi-check { transform: scale(1); }
        .gi-row-text { flex: 1; min-width: 0; }
        .gi-row-name { font-size: 14px; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
        .gi-row-status { font-size: 12px; color: var(--c-text-muted); margin-top: 1px; }
        .gi-row-status.is-online { color: var(--c-status-video); }
        .gi-empty { margin: 0; padding: 24px 20px; text-align: center; font-size: 13px; color: var(--c-text-muted); border-top: 1px solid var(--c-border); }
        .gi-actions { display: flex; gap: 8px; padding: 12px 16px 16px; border-top: 1px solid var(--c-border); }
        .gi-btn {
            flex: 1; height: 38px; display: inline-flex; align-items: center; justify-content: center; gap: 8px;
            border: none; border-radius: 10px; font-size: 13px; font-weight: 600; cursor: pointer;
            background: var(--c-bg-input); color: var(--c-text-primary); transition: background 0.15s, opacity 0.15s;
        }
        .gi-btn:hover:not(:disabled) { background: var(--c-contact-active); }
        .gi-btn-primary { background: var(--c-accent); color: var(--c-text-on-accent); }
        .gi-btn-primary:hover:not(:disabled) { background: var(--c-accent-hover); }
        .gi-btn:disabled { opacity: 0.4; cursor: not-allowed; }
        @media (prefers-reduced-motion: reduce) {
            .gi-card { animation: none; }
            .gi-check, .gi-row, .gi-btn { transition: none; }
        }
        .settings-avatar, .account-avatar { background: hsl(210,65%,50%); }
        .share-qr-card { background: var(--c-qr-card); color: var(--c-qr-card-ink); border: 1px solid var(--c-border); }
        .share-qr-secondary { color: var(--c-qr-card-ink-secondary); }
        .share-qr-code { display: block; width: min(100%, 272px); height: auto; aspect-ratio: 1; border-radius: 16px; }
        .share-qr-boost { margin-top: 4px; border-radius: 12px; }
        .qr-tile { position: relative; }
        .qr-kind-badge {
            position: absolute; top: -10px; right: -10px; width: 30px; height: 30px; border-radius: 9999px;
            display: inline-flex; align-items: center; justify-content: center; font-size: 13px;
            color: var(--c-qr-plate); box-shadow: 0 0 0 3px var(--c-qr-card);
        }
        .qr-kind-badge-friend { background: var(--c-qr-friend); }
        .devices-link-card { width: 300px; max-width: 100%; height: auto; aspect-ratio: 300 / 342; display: block; margin: 0 auto; }
        .devices-join-scanner video { width: 100%; border-radius: 12px; background: var(--c-bg-input); }
        .share-qr-style-options { display: grid; grid-template-columns: repeat(3, 1fr); gap: 4px; padding: 4px; border-radius: 12px; background: var(--c-bg-input); }
        .share-qr-style-option {
            border: none; border-radius: 9px; padding: 6px 4px; font-size: 13px; font-weight: 600; cursor: pointer;
            background: transparent; color: var(--c-text-secondary); transition: background 0.15s, color 0.15s;
        }
        .share-qr-style-option:hover { color: var(--c-text-primary); }
        .share-qr-style-option[aria-checked="true"] { background: var(--c-accent); color: var(--c-text-on-accent); }
        .share-qr-style-option:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 2px; }
        .share-qr-style-status { color: var(--c-text-secondary); }
        .share-qr-style-status.is-error {
            display: flex; align-items: flex-start; gap: 6px; padding: 6px 10px; border-radius: 8px;
            color: var(--c-status-error-text); background: var(--c-status-error-bg); border: 1px solid var(--c-status-error-border);
        }
        .share-qr-style-status.is-error.hidden { display: none; }
        .share-qr-style-status.is-error .fa-circle-exclamation { color: var(--c-status-error-solid); margin-top: 2px; }
        .share-qr-card figcaption { text-wrap: balance; }
        .share-qr-more {
            position: absolute; top: 10px; right: 10px; width: 32px; height: 32px; border: 0; border-radius: 9999px;
            display: inline-flex; align-items: center; justify-content: center; cursor: pointer;
            background: transparent; color: var(--c-qr-ink-secondary); transition: background 0.15s, color 0.15s;
        }
        .share-qr-more:hover, .share-qr-more[aria-expanded="true"] { background: var(--c-accent-light); color: var(--c-qr-ink); }
        .share-qr-more:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 2px; }
        .share-qr-menu {
            position: absolute; top: 46px; right: 10px; z-index: 5; min-width: 160px; padding: 4px; border-radius: 12px;
            background: var(--c-bg-popup); border: 1px solid var(--c-border); box-shadow: 0 12px 28px rgba(0,0,0,0.25);
        }
        .share-qr-menu-item {
            display: flex; align-items: center; gap: 10px; width: 100%; padding: 8px 10px; border: 0; border-radius: 8px;
            background: transparent; color: var(--c-text-popup); font-size: 13px; text-align: left; cursor: pointer;
        }
        .share-qr-menu-item:hover, .share-qr-menu-item:focus-visible { background: var(--c-accent-light); outline: none; }
        .share-qr-menu-item i { color: var(--c-text-muted); width: 14px; }
        .share-qr-style-toggle {
            display: flex; align-items: center; gap: 8px; width: 100%; padding: 10px 12px; border: 0; border-radius: 12px;
            background: var(--c-bg-input); color: var(--c-text-primary); font-size: 13px; font-weight: 600; cursor: pointer; text-align: left;
        }
        .share-qr-style-toggle:hover { background: var(--c-accent-light); }
        .share-qr-style-toggle:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 2px; }
        .share-qr-style-current { margin-left: auto; color: var(--c-text-secondary); font-weight: 500; }
        .share-qr-style-chevron { color: var(--c-text-muted); font-size: 11px; transition: transform 0.15s; }
        .share-qr-style-toggle[aria-expanded="true"] .share-qr-style-chevron { transform: rotate(90deg); }
        @media (prefers-reduced-motion: reduce) {
            .share-qr-style-option, .share-qr-more, .share-qr-style-chevron { transition: none; }
        }
        .liquid-glass-settings { background: var(--c-bg-input); }
        .glass-preset-dot { display: inline-block; }
        .glass-preset-dot-violet { background: hsl(265,90%,55%); }
        .glass-preset-dot-cyan { background: hsl(195,95%,55%); }
        .glass-preset-dot-magenta { background: hsl(320,85%,55%); }
        .glass-preset-dot-emerald { background: hsl(155,80%,55%); }
        .glass-preset-dot-cyan-soft { background: hsl(195,85%,55%); }
        .glass-preset-dot-violet-soft { background: hsl(270,70%,55%); }
        .glass-preset-dot-orange { background: hsl(25,90%,55%); }
        .glass-preset-dot-pink { background: hsl(340,80%,55%); }
        .glass-preset-dot-purple { background: hsl(280,70%,50%); }
        .glass-preset-dot-green { background: hsl(130,100%,50%); }
        .glass-preset-dot-aqua { background: hsl(180,100%,50%); }
        .glass-preset-dot-blue { background: hsl(220,100%,55%); }
        .glass-preset-dot-purple-bright { background: hsl(270,75%,55%); }
        .glass-preset-dot-purple-soft { background: hsl(285,70%,55%); }
        .glass-preset-dot-indigo { background: hsl(255,80%,55%); }
        .pet-palette[data-palette="orange-tabby"] { --c1:#f59e0b; --c2:#b45309; --c3:#fde68a; --c4:#4ade80; }
        .pet-palette[data-palette="grey-tabby"] { --c1:#6b7280; --c2:#374151; --c3:#d1d5db; --c4:#22d3ee; }
        .pet-palette[data-palette="black"] { --c1:#1f2937; --c2:#0b0f1a; --c3:#4b5563; --c4:#fbbf24; }
        .pet-palette[data-palette="white"] { --c1:#fafaf9; --c2:#e7e5e4; --c3:#ffffff; --c4:#0ea5e9; }
        .pet-palette[data-palette="siamese"] { --c1:#fde6c8; --c2:#8b6f47; --c3:#fff8e7; --c4:#3b82f6; }
        .pet-palette[data-palette="calico"] { --c1:#f59e0b; --c2:#1f2937; --c3:#ffffff; --c4:#16a34a; }
        .pet-name-row-bordered { border-top: 1px solid var(--c-border); }
        .pet-import-btn { background: var(--c-accent); color: var(--c-text-on-accent); border-color: var(--c-accent); }
        .onboarding-error-icon { background: var(--c-status-error-bg); }
        .qr-scanner-frame { aspect-ratio: 1 / 1; max-width: 320px; margin: 0 auto; }
        .add-contact-layer { position: fixed; inset: 0; z-index: 45; pointer-events: none; }
        #btn-add-contact-scan[aria-pressed="true"] { background: var(--c-accent-soft); color: var(--c-accent); box-shadow: inset 0 0 0 1.5px var(--c-accent); }
        .qr-scanner-on { display: flex; align-items: center; gap: 6px; margin: 0; font-size: 12px; color: var(--c-text-secondary); }
        .qr-scanner-on.hidden { display: none; }
        .qr-scanner-on-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--c-status-error-solid); }
        .qr-scanner-problem { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; padding: 10px 12px; border-radius: 12px; background: var(--c-status-warn-bg); }
        .qr-scanner-problem.hidden { display: none; }
        .qr-scanner-problem-text { flex: 1 1 200px; min-width: 0; margin: 0; font-size: 13px; line-height: 1.4; color: var(--c-text-primary); overflow-wrap: anywhere; }
        .add-contact-sheet { position: absolute; pointer-events: auto; width: 400px; max-width: calc(100vw - 16px); }
        [data-layout="narrow"] .add-contact-layer { pointer-events: auto; background: rgba(0,0,0,0.45); }
        [data-layout="narrow"] .add-contact-sheet {
            left: 0; right: 0; bottom: 0; width: auto; max-width: none;
            max-height: calc(100% - 48px); border-radius: 16px 16px 0 0; border-bottom-width: 0;
        }
        .add-contact-field { border: 1px solid var(--c-border); }
        .add-contact-field:focus-within { outline: 2px solid var(--c-accent); outline-offset: 1px; }
        .add-contact-field.is-valid { border-color: var(--c-accent); }
        .add-contact-field.is-invalid { border-color: var(--c-status-error-solid); }
        .add-contact-field.is-invalid:focus-within { outline-color: var(--c-status-error-solid); }
        .add-contact-field input[aria-invalid="true"],
        .add-contact-field input[aria-invalid="true"]:focus { box-shadow: none; }
        .add-contact-field input::placeholder { color: var(--c-text-secondary); opacity: 1; }
        .add-contact-error-text { color: var(--c-status-error-text); }
        .add-contact-sheet.is-dropping { outline: 2px dashed var(--c-accent); outline-offset: -6px; }
        .add-contact-loading-dot {
            width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0;
            background: var(--c-text-muted);
            animation: add-contact-pulse 1.2s ease-in-out infinite;
        }
        @keyframes add-contact-pulse { 0%, 100% { opacity: 0.35; } 50% { opacity: 1; } }
        @media (prefers-reduced-motion: reduce) { .add-contact-loading-dot { animation: none; } }
        .add-contact-sent-mark {
            background: var(--c-status-ok-bg);
            border: 1px solid var(--c-status-ok-border);
            color: var(--c-status-ok-text);
        }
        .online-dot.is-online { background: var(--c-status-online); }
        .contact-row-badge {
            display: inline-flex; align-items: center; justify-content: center;
            min-width: 18px; height: 18px; padding: 0 6px; border-radius: 9px;
            color: var(--c-text-on-accent); font-size: 11px; font-weight: 600;
            background: var(--c-accent);
        }
        .banner-text-primary { color: var(--c-text-primary); }
        .banner-text-secondary { color: var(--c-text-secondary); }
        .banner-text-muted { color: var(--c-text-muted); }
        .banner-reconnect { background: var(--c-status-warn-soft); }
        .banner-invite-greeting { background: var(--c-accent-soft); }
        .banner-invite-greeting-icon { color: var(--c-accent); font-size: 16px; }
        .banner-greeting-text {
            color: var(--c-text-primary);
            display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
        }
        .banner-btn-ghost { background: transparent; color: var(--c-text-secondary); border: 1px solid var(--c-border); }
        .banner-btn-accent { background: var(--c-accent); }
        .banner-pending-invite-icon { font-size: 14px; }
        .banner-pending-invite--live { background: var(--c-accent-soft); }
        .banner-pending-invite--live .banner-pending-invite-icon { color: var(--c-accent); }
        .banner-pending-invite--expired { background: var(--c-status-error-bg); }
        .banner-pending-invite--expired .banner-pending-invite-icon { color: var(--c-status-error); }
        .banner-pending-invite--lost { background: var(--c-status-warn-soft); }
        .banner-pending-invite--lost .banner-pending-invite-icon { color: var(--c-status-warn); }
        .chat-info-voice-bar { height: 4px; }
        .chat-info-voice-bar:nth-child(even) { height: 11px; }
        .chat-info-member-dot { background: var(--c-status-away); }
        .chat-info-member-dot.is-online { background: var(--c-status-online); }

        /* ============ SETTINGS: cards, rows and the custom controls ============ */
        #settings-content { color: var(--c-text-primary); }
        .set-stack { max-width: 640px; }
        .set-stack > :not([hidden]) ~ :not([hidden]) { margin-top: 24px; }
        .set-heading { margin: 0; font-size: 22px; font-weight: 650; line-height: 1.25; color: var(--c-text-primary); }
        .set-heading[tabindex="-1"]:focus { outline: none; }
        .set-lead { font-size: 14px; color: var(--c-text-secondary); }
        .set-crumbs { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
        .set-crumb-link {
            font-size: 22px; font-weight: 650; line-height: 1.25; color: var(--c-text-secondary);
            text-decoration: none; border-radius: 6px;
        }
        .set-crumb-link:hover { color: var(--c-text-primary); text-decoration: underline; }
        .set-crumb-link:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 2px; }
        .set-crumb-sep { font-size: 14px; color: var(--c-text-muted); }

        .set-group { display: flex; flex-direction: column; gap: 8px; }
        .set-group-title {
            margin: 0 4px; font-size: 12px; font-weight: 600; color: var(--c-text-secondary);
            text-transform: uppercase; letter-spacing: 0.06em;
        }
        .set-group-title--danger { color: var(--c-status-error-text); }
        .set-card {
            position: relative; background: var(--c-bg-panel); border: 1px solid var(--c-border); border-radius: 16px;
        }
        [data-theme="dark"] .set-card { background: var(--c-bg-header); }
        .set-card--danger { border-color: var(--c-status-error-border); }
        .set-card:not(.set-profile) > :not(.hidden):not([hidden]) ~ :not(.hidden):not([hidden]) { border-top: 1px solid var(--c-border); }

        .set-row {
            position: relative; display: flex; align-items: center; gap: 16px; width: 100%;
            min-height: var(--set-row-h); padding: 12px var(--set-pad); text-align: left; color: inherit; font: inherit;
        }
        .set-row--switch { cursor: pointer; }
        .set-row--stack { flex-direction: column; align-items: stretch; gap: 12px; }
        .set-row--actions { flex-wrap: wrap; gap: 8px; }
        .set-row--link { border: 0; background: transparent; cursor: pointer; border-radius: 15px; }
        .set-row--link:hover { background: var(--c-accent-light); }
        .set-row--link:focus-visible { outline: 2px solid var(--c-accent); outline-offset: -2px; }
        .set-row.hidden, .set-card.hidden, .set-group.hidden, .ui-btn.hidden, .ui-dd.hidden { display: none; }
        .dev-access-list { display: flex; flex-direction: column; gap: 8px; padding: 12px 20px; }
        .dev-access-list[hidden] { display: none; }
        .dev-access {
            display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; padding: 10px 12px;
            border-radius: 12px; background: var(--c-status-warn-bg); color: var(--c-text-primary);
        }
        .dev-access[data-state="missing"] { background: var(--c-accent-light); }
        .dev-access-text { flex: 1 1 200px; min-width: 0; margin: 0; font-size: 13px; line-height: 1.4; overflow-wrap: anywhere; }
        .set-row-text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
        .set-row-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
        .set-row-label { font-size: 14px; color: var(--c-text-primary); }
        .set-row-label--strong { font-weight: 550; }
        .set-row-hint { font-size: var(--set-hint-font); line-height: 1.4; color: var(--c-text-secondary); }
        .density-preview {
            display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); overflow: hidden; pointer-events: none;
            border: 1px solid var(--c-border); border-radius: 12px; background: var(--c-bg-app);
        }
        .density-preview-list { padding: 4px 0; background: var(--c-bg-panel); border-right: 1px solid var(--c-border); }
        .density-preview-chat { min-width: 0; padding: 4px 12px 10px; display: flex; flex-direction: column; justify-content: center; }
        .density-preview-chat .bubble-col { max-width: 100%; }
        .density-preview-avatar { background: var(--c-accent); opacity: 0.8; }
        .density-preview-avatar--alt { background: var(--c-text-muted); }
        html[data-layout="narrow"] .density-preview { grid-template-columns: minmax(0, 1fr); }
        html[data-layout="narrow"] .density-preview-list { border-right: 0; border-bottom: 1px solid var(--c-border); }
        .density-touch-note { display: none; align-items: center; gap: 6px; }
        html[data-input="touch"][data-density="compact"] .density-touch-note { display: inline-flex; }
        .set-row-value { font-size: 13px; color: var(--c-text-secondary); font-variant-numeric: tabular-nums; }
        .set-row-icon {
            width: 32px; height: 32px; flex-shrink: 0; border-radius: 8px; display: flex; align-items: center; justify-content: center;
            background: var(--c-accent-light); color: var(--c-text-primary);
        }
        .set-row-chevron { font-size: 12px; color: var(--c-text-muted); }
        .set-row-end { display: flex; justify-content: flex-end; }
        .relay-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; }
        .relay-status { flex: 1 1 160px; min-width: 0; font-size: 13px; color: var(--c-text-secondary); }
        .relay-status.hidden { display: none; }
        .set-mono { font-family: ui-monospace, "Cascadia Mono", Consolas, monospace; font-size: 12px; color: var(--c-text-secondary); word-break: break-all; }

        .set-profile { display: flex; align-items: flex-start; gap: 20px; padding: 20px; }
        .set-profile-avatar { width: 64px; height: 64px; }
        .set-profile-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 14px; }
        .set-field { display: flex; flex-direction: column; gap: 4px; }
        .set-field-label { display: block; margin-bottom: 4px; font-size: 12px; color: var(--c-text-secondary); }
        .set-field > .set-field-label { margin-bottom: 0; }
        .set-id-row { display: flex; align-items: center; gap: 8px; }
        .set-id-row .set-mono { flex: 1; min-width: 0; }
        .set-input {
            width: 100%; height: 36px; padding: 0 10px; border-radius: 8px; border: 1px solid transparent;
            background: var(--c-bg-input); color: var(--c-text-primary); font-size: 14px; outline: none;
        }
        .set-input:focus { border-color: var(--c-accent); }

        .ui-btn {
            display: inline-flex; align-items: center; justify-content: center; gap: 8px; flex-shrink: 0;
            height: 34px; padding: 0 14px; border-radius: 9px; border: 1px solid transparent;
            font-size: 13px; font-weight: 600; white-space: nowrap; cursor: pointer;
            transition: background-color 0.15s, border-color 0.15s, color 0.15s;
        }
        .ui-btn:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 2px; }
        .ui-btn:disabled { opacity: 0.5; cursor: not-allowed; }
        .ui-btn-primary { background: var(--c-accent); color: var(--c-text-on-accent); }
        .ui-btn-primary:hover:not(:disabled) { background: var(--c-accent-hover); }
        .ui-btn-secondary { background: var(--c-bg-panel); border-color: var(--c-border); color: var(--c-text-primary); }
        .ui-btn-secondary:hover:not(:disabled) { background: var(--c-accent-light); }
        .ui-btn-danger { background: var(--c-bg-panel); border-color: var(--c-status-error-border); color: var(--c-status-error-text); }
        .ui-btn-danger:hover:not(:disabled) { background: var(--c-status-error-bg); }
        .ui-btn-icon { width: 34px; padding: 0; }
        .ui-btn-wide { display: flex; width: 100%; height: 40px; }

        .ui-switch-input { position: absolute; width: 1px; height: 1px; margin: 0; opacity: 0; pointer-events: none; }
        .ui-switch {
            position: relative; flex-shrink: 0; width: 40px; height: 24px; border-radius: 12px;
            background: var(--c-accent-soft); transition: background-color 0.15s;
        }
        [data-theme="dark"] .ui-switch, [data-theme="glass"] .ui-switch { background: var(--c-btn-secondary-hover); }
        .ui-switch::after {
            content: ""; position: absolute; top: 3px; left: 3px; width: 18px; height: 18px; border-radius: 50%;
            background: var(--c-bg-panel); transition: left 0.15s, background-color 0.15s;
        }
        [data-theme="dark"] .ui-switch::after, [data-theme="glass"] .ui-switch::after { background: var(--c-text-secondary); }
        .ui-switch-input:checked + .ui-switch { background: var(--c-accent); }
        .ui-switch-input:checked + .ui-switch::after { left: 19px; background: var(--c-text-on-accent); }
        .ui-switch-input:focus-visible + .ui-switch { outline: 2px solid var(--c-accent); outline-offset: 2px; }
        .ui-switch-input:disabled + .ui-switch { opacity: 0.45; }
        .set-row--switch:has(.ui-switch-input:disabled) { cursor: default; }

        .ui-dd-native { display: none; }
        .ui-dd { position: relative; flex: 0 1 220px; min-width: 0; }
        .ui-dd-btn {
            display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; height: 34px;
            padding: 0 10px 0 12px; border-radius: 9px; border: 1px solid var(--c-border);
            background: var(--c-bg-input); color: var(--c-text-primary); font-size: 13px; text-align: left; cursor: pointer;
        }
        .ui-dd-btn:hover:not(:disabled), .ui-dd.is-open .ui-dd-btn { border-color: var(--c-accent); }
        .ui-dd-btn:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 2px; }
        .ui-dd-btn:disabled { opacity: 0.55; cursor: default; }
        .ui-dd-value { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
        .ui-dd-chevron { font-size: 11px; color: var(--c-text-secondary); transition: transform 0.15s; }
        .ui-dd.is-open .ui-dd-chevron { transform: rotate(180deg); }
        .ui-dd-list {
            position: absolute; right: 0; top: calc(100% + 6px); z-index: 30; min-width: 100%; width: max-content;
            max-width: min(320px, calc(100vw - 32px)); max-height: 280px; overflow-y: auto; margin: 0; padding: 4px;
            list-style: none; background: var(--c-bg-float); color: var(--c-text-popup);
            -webkit-backdrop-filter: var(--backdrop-float); backdrop-filter: var(--backdrop-float);
            border: 1px solid var(--c-border-float); border-radius: 10px; box-shadow: var(--c-glass-shadow, 0 12px 32px rgba(0,0,0,0.18));
        }
        .ui-dd-list[hidden] { display: none; }
        .ui-dd-list--up { top: auto; bottom: calc(100% + 6px); }
        .ui-dd-list:focus { outline: none; }
        .ui-dd-option {
            display: flex; align-items: center; justify-content: space-between; gap: 8px; min-height: 34px;
            padding: 0 10px; border-radius: 7px; font-size: 13px; cursor: pointer;
        }
        .ui-dd-option-text { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
        .ui-dd-option.is-active, .ui-dd-option:hover { background: var(--c-accent-light); }
        .ui-dd-list:focus-visible .ui-dd-option.is-active { box-shadow: inset 0 0 0 2px var(--c-accent); }
        .ui-dd-option[aria-selected="true"] { font-weight: 600; }
        .ui-dd-option[aria-disabled="true"] { opacity: 0.5; cursor: default; }
        .ui-dd-check { font-size: 11px; color: var(--c-accent); visibility: hidden; }
        .ui-dd-option[aria-selected="true"] .ui-dd-check { visibility: visible; }

        .ui-seg {
            display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); gap: 4px; padding: 4px;
            border-radius: 10px; background: var(--c-bg-input);
        }
        .ui-seg--inline { display: inline-grid; flex-shrink: 0; grid-auto-columns: auto; }
        .ui-seg-opt {
            min-height: 32px; padding: 4px 12px; border: 0; border-radius: 7px; background: transparent;
            color: var(--c-text-secondary); font-size: 13px; line-height: 1.2; cursor: pointer;
        }
        .ui-seg-opt.hidden { display: none; }
        .ui-seg-opt:hover { color: var(--c-text-primary); }
        .ui-seg-opt[aria-checked="true"] { background: var(--c-bg-panel); color: var(--c-text-primary); font-weight: 600; box-shadow: 0 0 0 1px var(--c-border); }
        [data-theme="dark"] .ui-seg-opt[aria-checked="true"], [data-theme="glass"] .ui-seg-opt[aria-checked="true"] { background: var(--c-btn-secondary-hover); }
        .ui-seg-opt:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 1px; }
        .ui-seg-opt:disabled { opacity: 0.45; cursor: not-allowed; }

        .ui-tiles { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
        .ui-tiles--palette { grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 8px; }
        .ui-tile {
            display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 7px;
            border: 1px solid var(--c-border); border-radius: 12px; background: transparent;
            color: var(--c-text-secondary); font-size: 13px; cursor: pointer;
        }
        .ui-tile:hover { border-color: var(--c-accent); }
        .ui-tile[aria-checked="true"] { border-color: var(--c-accent); box-shadow: inset 0 0 0 1px var(--c-accent); background: var(--c-accent-light); color: var(--c-text-primary); font-weight: 600; }
        .ui-tile:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 2px; }
        .ui-tile-dots { display: flex; gap: 2px; padding: 6px 0 2px; }
        .ui-tile-dots .glass-preset-dot { width: 8px; height: 8px; border-radius: 50%; }
        .ui-theme-preview {
            display: flex; gap: 4px; width: 100%; height: 56px; padding: 6px; border-radius: 8px;
            background: var(--c-bg-app); border: 1px solid var(--c-border);
        }
        .ui-theme-preview[data-theme="glass"] {
            background: linear-gradient(135deg, var(--c-glass-grad-1) 0%, var(--c-glass-grad-2) 50%, var(--c-glass-grad-3) 100%);
        }
        .ui-theme-preview-side { width: 30%; border-radius: 4px; background: var(--c-bg-contacts); }
        .ui-theme-preview-main { flex: 1; display: flex; flex-direction: column; justify-content: flex-end; gap: 4px; }
        .ui-theme-preview-in, .ui-theme-preview-out { height: 8px; border-radius: 4px; }
        .ui-theme-preview-in { width: 60%; background: var(--c-bg-msg-other); box-shadow: 0 0 0 1px var(--c-border-msg-other); }
        .ui-theme-preview-out { width: 45%; margin-left: auto; background: var(--c-bg-msg-me); }
        .ui-theme-preview--split { padding: 0; gap: 0; overflow: hidden; }
        .ui-theme-preview-half { flex: 1; background: var(--c-bg-app); }

        .ui-range {
            -webkit-appearance: none; appearance: none; width: 100%; height: 6px; margin: 8px 0; border-radius: 3px;
            background: linear-gradient(to right, var(--c-accent) 0 var(--ui-range-fill, 50%), var(--c-accent-soft) var(--ui-range-fill, 50%) 100%);
            outline: none; cursor: pointer;
        }
        .ui-range::-webkit-slider-thumb {
            -webkit-appearance: none; width: 18px; height: 18px; border-radius: 50%;
            background: var(--c-bg-popup); border: 2px solid var(--c-accent);
        }
        .ui-range::-moz-range-track { background: transparent; }
        .ui-range::-moz-range-thumb { width: 14px; height: 14px; border-radius: 50%; background: var(--c-bg-popup); border: 2px solid var(--c-accent); }
        .ui-range:focus-visible::-webkit-slider-thumb { box-shadow: 0 0 0 4px var(--c-accent-soft); }
        .ui-range:focus-visible::-moz-range-thumb { box-shadow: 0 0 0 4px var(--c-accent-soft); }

        html[data-layout="narrow"] .set-heading, html[data-layout="narrow"] .set-crumb-link { font-size: 19px; }
        html[data-layout="narrow"] .set-row { padding: 10px 16px; }
        html[data-layout="narrow"] .set-row--select { flex-wrap: wrap; }
        html[data-layout="narrow"] .set-row--select .ui-dd { flex-basis: 100%; }
        html[data-layout="narrow"] .ui-dd-list { left: 0; right: 0; width: auto; max-width: none; }
        html[data-layout="narrow"] .ui-seg--wrap { grid-auto-flow: row; grid-template-columns: repeat(2, minmax(0, 1fr)); }
        html[data-layout="narrow"] .ui-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); }
        html[data-layout="narrow"] .ui-tiles--palette { grid-template-columns: repeat(3, minmax(0, 1fr)); }
        html[data-layout="narrow"] .set-profile { flex-direction: column; align-items: center; }
        html[data-layout="narrow"] .set-profile-main { width: 100%; }
        @media (prefers-reduced-motion: reduce) {
            .ui-switch, .ui-switch::after, .ui-dd-chevron, .ui-btn { transition: none; }
        }

/* The one dialog primitive (ui/dialogs.js) and its shared backdrop. */
.app-dialog-backdrop,
.app-dialog {
    background: var(--c-scrim);
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
}
.app-dialog {
    position: fixed;
    inset: 0;
    z-index: 9000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: var(--space-4);
    -webkit-app-region: no-drag;
}
.app-dialog__card {
    width: min(420px, 100%);
    max-height: calc(100% - 2 * var(--space-4));
    overflow-y: auto;
    background: var(--c-bg-float-strong);
    -webkit-backdrop-filter: var(--backdrop-float);
    backdrop-filter: var(--backdrop-float);
    color: var(--c-text-popup);
    border: 1px solid var(--c-border-float);
    border-radius: var(--r-xl);
    box-shadow: var(--shadow-2xl);
    padding: var(--space-5) var(--space-5) var(--space-4);
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
    font-family: var(--font-sans);
}
.app-dialog__card:focus { outline: none; }
.app-dialog__head { display: flex; align-items: flex-start; gap: var(--space-3); }
.app-dialog__icon {
    width: 40px;
    height: 40px;
    flex-shrink: 0;
    border-radius: var(--r-full);
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--c-accent-soft);
    color: var(--c-accent);
}
.app-dialog--danger .app-dialog__icon { background: var(--c-status-error-bg); color: var(--c-status-error); }
.app-dialog__heading { flex: 1; min-width: 0; }
.app-dialog__title { margin: 0; font-size: var(--fs-base); font-weight: var(--fw-semibold); color: var(--c-text-primary); }
.app-dialog__body { margin-top: var(--space-1); }
.app-dialog__text {
    margin: 0;
    font-size: var(--fs-sm);
    line-height: 1.5;
    color: var(--c-text-secondary);
    white-space: pre-line;
}
.app-dialog__text + .app-dialog__text { margin-top: var(--space-2); }
.app-dialog__fields { display: flex; flex-direction: column; gap: var(--space-3); }
.app-dialog__field { display: flex; flex-direction: column; gap: var(--space-1); }
.app-dialog__field-label, .app-dialog__hint { font-size: var(--fs-xs); color: var(--c-text-muted); }
.app-dialog__input {
    width: 100%;
    box-sizing: border-box;
    padding: var(--space-2) var(--space-3);
    border-radius: var(--r-lg);
    border: 1px solid var(--c-border);
    background: var(--c-bg-input);
    color: var(--c-text-primary);
    font: inherit;
    font-size: var(--fs-sm);
}
.app-dialog__input:focus { outline: none; border-color: var(--c-accent); }
.app-dialog__input.is-invalid { border-color: var(--c-status-error); }
.app-dialog__switch-row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); font-size: var(--fs-sm); color: var(--c-text-primary); }
.app-dialog__switch {
    position: relative;
    width: 36px;
    height: 20px;
    flex-shrink: 0;
    border: 0;
    border-radius: var(--r-full);
    background: var(--c-btn-secondary);
    cursor: pointer;
    transition: background-color 120ms ease;
}
.app-dialog__switch-knob {
    position: absolute;
    top: 2px;
    left: 2px;
    width: 16px;
    height: 16px;
    border-radius: var(--r-full);
    background: var(--c-bg-panel);
    box-shadow: var(--shadow-sm);
    transition: transform 120ms ease;
}
.app-dialog__switch[aria-checked="true"] { background: var(--c-accent); }
.app-dialog__switch[aria-checked="true"] .app-dialog__switch-knob { transform: translateX(16px); }
.app-dialog__switch:focus-visible,
.app-dialog__button:focus-visible,
.app-dialog__summary:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 2px; }
.app-dialog__details { font-size: var(--fs-xs); color: var(--c-text-secondary); }
.app-dialog__summary { cursor: pointer; color: var(--c-text-muted); }
.app-dialog__summary:hover { color: var(--c-text-primary); }
.app-dialog__details ul { margin: var(--space-2) 0 0; padding-left: var(--space-4); }
.app-dialog__details li { margin: 2px 0; }
.app-dialog__details p { margin: var(--space-2) 0 0; font-weight: var(--fw-semibold); color: var(--c-text-primary); }
.app-dialog__actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--space-2); padding-top: var(--space-1); }
.app-dialog__button {
    padding: var(--space-2) var(--space-4);
    border-radius: var(--r-lg);
    border: 1px solid transparent;
    font: inherit;
    font-size: var(--fs-sm);
    font-weight: var(--fw-medium);
    cursor: pointer;
    transition: background-color 120ms ease;
}
.app-dialog__button--secondary { background: var(--c-btn-secondary); color: var(--c-text-primary); }
.app-dialog__button--secondary:hover { background: var(--c-btn-secondary-hover); }
.app-dialog__button--primary { background: var(--c-accent); color: var(--c-text-on-accent); }
.app-dialog__button--primary:hover { background: var(--c-accent-hover); }
.app-dialog__button--danger { background: var(--c-status-error-solid); color: var(--c-text-on-accent); }
.app-dialog__button--danger:hover { background: var(--c-status-error-h); }
.pet-naming__row { display: flex; gap: var(--space-2); }
.pet-naming__row .app-dialog__input { flex: 1; }
.pet-naming__traits { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-2); font-size: var(--fs-xs); }
.pet-naming__trait { background: var(--c-bg-input); border-radius: var(--r-lg); padding: var(--space-2) var(--space-3); }
.pet-naming__trait-label { color: var(--c-text-muted); }
.pet-naming__trait-value { color: var(--c-text-primary); font-weight: var(--fw-medium); margin-top: 2px; }
.crash-dialog__meta { margin: var(--space-1) 0 0; font-size: var(--fs-xs); color: var(--c-text-muted); }

/* The storage lock: one small banner whose button opens the unlock window. */
:root { --relock-banner-h: 48px; }
.relock-banner {
    position: fixed;
    top: 48px;
    height: var(--relock-banner-h);
    left: 50%;
    transform: translateX(-50%);
    z-index: 8000;
    display: flex;
    align-items: center;
    gap: var(--space-3);
    max-width: calc(100% - 2 * var(--space-4));
    padding: var(--space-2) var(--space-2) var(--space-2) var(--space-4);
    border-radius: var(--r-xl);
    border: 1px solid var(--c-status-warn-border);
    background: var(--c-bg-float);
    -webkit-backdrop-filter: var(--backdrop-float);
    backdrop-filter: var(--backdrop-float);
    color: var(--c-text-popup);
    box-shadow: var(--shadow-lg);
    font-size: var(--fs-sm);
}
.relock-banner.hidden { display: none; }
html[data-chrome="none"] .relock-banner { top: var(--space-4); }
.relock-banner__icon { color: var(--c-status-warn); }
.relock-banner__text { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
body:has(#storage-relock-banner:not(.hidden)) #settings-overlay { padding-top: calc(var(--relock-banner-h) + 2 * var(--space-4)); }
.relock-banner__button {
    flex-shrink: 0;
    white-space: nowrap;
    padding: var(--space-1) var(--space-3);
    border-radius: var(--r-lg);
    border: 0;
    background: var(--c-accent);
    color: var(--c-text-on-accent);
    font: inherit;
    font-weight: var(--fw-medium);
    cursor: pointer;
}
.relock-banner__button:hover { background: var(--c-accent-hover); }

/* Device linking: the link card, the class control, the code check and the replace picker. */
.devices-link { position: relative; display: flex; flex-direction: column; align-items: center; gap: var(--space-2); }
.devices-link__code {
    font-family: var(--font-mono);
    font-size: 26px;
    font-weight: var(--fw-bold);
    letter-spacing: 0.08em;
    color: var(--c-text-primary);
    text-align: center;
    user-select: all;
}
.devices-link__timer { font-size: var(--fs-xs); color: var(--c-text-muted); }
.devices-menu { position: absolute; top: 0; right: 0; z-index: 1; }
.devices-menu__toggle {
    width: 32px;
    height: 32px;
    border: 1px solid var(--c-border);
    border-radius: var(--r-full);
    background: var(--c-bg-popup);
    color: var(--c-text-secondary);
    cursor: pointer;
}
.devices-menu__toggle:hover { color: var(--c-text-primary); background: var(--c-btn-secondary); }
.devices-menu__list {
    position: absolute;
    top: 36px;
    right: 0;
    min-width: 180px;
    padding: var(--space-1);
    border: 1px solid var(--c-border-float);
    border-radius: var(--r-lg);
    background: var(--c-bg-float);
    -webkit-backdrop-filter: var(--backdrop-float);
    backdrop-filter: var(--backdrop-float);
    box-shadow: var(--shadow-lg);
    display: flex;
    flex-direction: column;
}
.devices-menu__list.hidden { display: none; }
.devices-menu__item {
    text-align: left;
    padding: var(--space-2) var(--space-3);
    border: 0;
    border-radius: var(--r-md);
    background: transparent;
    color: var(--c-text-popup);
    font: inherit;
    font-size: var(--fs-sm);
    cursor: pointer;
}
.devices-menu__item:hover, .devices-menu__item:focus-visible { background: var(--c-btn-secondary); outline: none; }
.devices-menu__item.hidden { display: none; }
.devices-class { display: flex; flex-direction: column; gap: var(--space-2); }
.devices-class__hint { margin: 0; font-size: var(--fs-xs); color: var(--c-text-secondary); line-height: 1.45; }
.devices-sas { border-radius: var(--r-xl); background: var(--c-bg-input); padding: var(--space-5) var(--space-4); text-align: center; }
.devices-sas__code {
    font-family: var(--font-mono);
    font-size: 34px;
    font-weight: var(--fw-bold);
    letter-spacing: 0.12em;
    color: var(--c-text-primary);
}
.devices-pick { display: flex; flex-direction: column; gap: var(--space-1); }
.devices-pick__row {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    width: 100%;
    padding: var(--space-3);
    border: 1px solid transparent;
    border-radius: var(--r-lg);
    background: var(--c-bg-input);
    color: var(--c-text-primary);
    font: inherit;
    font-size: var(--fs-sm);
    text-align: left;
    cursor: pointer;
}
.devices-pick__row.is-selected { border-color: var(--c-accent); background: var(--c-accent-soft); }
.devices-pick__row:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 1px; }
.devices-pick__icon { color: var(--c-text-muted); }
.devices-pick__label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.devices-way { display: flex; flex-direction: column; gap: var(--space-2); }
.devices-way__option {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    width: 100%;
    padding: var(--space-3) var(--space-4);
    border: 1px solid var(--c-border);
    border-radius: var(--r-lg);
    background: var(--c-bg-input);
    color: var(--c-text-primary);
    font: inherit;
    text-align: left;
    cursor: pointer;
}
.devices-way__option:hover { border-color: var(--c-accent); background: var(--c-accent-soft); }
.devices-way__option:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 1px; }
.devices-way__icon { width: 24px; text-align: center; color: var(--c-accent); font-size: 18px; }
.devices-way__text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.devices-way__title { font-size: var(--fs-sm); font-weight: var(--fw-semibold); }
.devices-way__hint { font-size: var(--fs-xs); color: var(--c-text-secondary); }
.devices-textlink {
    align-self: center;
    padding: 0;
    border: 0;
    background: transparent;
    color: var(--c-accent);
    font: inherit;
    font-size: var(--fs-sm);
    font-weight: var(--fw-semibold);
    text-decoration: underline;
    text-underline-offset: 2px;
    cursor: pointer;
}
.devices-textlink:hover { text-decoration: none; }
.devices-offer__how { margin: 0; text-align: center; font-size: var(--fs-sm); color: var(--c-text-secondary); line-height: 1.45; }
.onboarding-signin-more { display: flex; flex-direction: column; gap: var(--space-2); }
.onboarding-signin-more.hidden { display: none; }
.onboarding-signin-row {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    width: 100%;
    min-height: 44px;
    padding: var(--space-2) var(--space-4);
    border: 1px solid var(--c-border);
    border-radius: var(--r-lg);
    background: transparent;
    color: var(--c-text-primary);
    font: inherit;
    font-size: var(--fs-sm);
    text-align: left;
    cursor: pointer;
}
.onboarding-signin-row:hover { border-color: var(--c-accent); background: var(--c-accent-soft); }
.onboarding-signin-row:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 1px; }
.onboarding-signin-row.hidden { display: none; }
.onboarding-signin-row__icon { width: 20px; text-align: center; color: var(--c-accent); }
.onboarding-signin-row__label { flex: 1; min-width: 0; }
.onboarding-signin-row__chevron { font-size: var(--fs-xs); color: var(--c-text-muted); }
.onboarding-install { display: flex; align-items: center; gap: var(--space-2); width: 100%; }
.onboarding-install.hidden { display: none; }
.onboarding-install__action {
    display: flex;
    flex: 1;
    align-items: center;
    gap: var(--space-3);
    min-width: 0;
    min-height: 44px;
    padding: var(--space-2) var(--space-4);
    border: 1px solid var(--c-border);
    border-radius: var(--r-lg);
    background: transparent;
    color: var(--c-text-primary);
    font: inherit;
    text-align: left;
    cursor: pointer;
}
.onboarding-install__action:hover { border-color: var(--c-accent); background: var(--c-accent-soft); }
.onboarding-install__action:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 1px; }
.onboarding-install__icon { width: 20px; text-align: center; color: var(--c-accent); }
.onboarding-install__text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.onboarding-install__label { font-size: var(--fs-sm); font-weight: var(--fw-semibold); }
.onboarding-install__hint { font-size: var(--fs-xs); line-height: 1.35; color: var(--c-text-secondary); }
.onboarding-install__dismiss {
    flex-shrink: 0;
    min-height: 44px;
    padding: 0 var(--space-2);
    border: 0;
    border-radius: var(--r-md);
    background: transparent;
    color: var(--c-text-secondary);
    font: inherit;
    font-size: var(--fs-xs);
    cursor: pointer;
}
.onboarding-install__dismiss:hover { color: var(--c-text-primary); text-decoration: underline; }
.onboarding-install__dismiss:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 1px; }
.devices-account, .devices-newdevice {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    padding: var(--space-3) var(--space-4);
    border: 1px solid var(--c-border);
    border-radius: var(--r-lg);
    background: var(--c-bg-input);
    text-align: left;
}
.devices-account__avatar {
    width: 44px;
    height: 44px;
    flex-shrink: 0;
    border-radius: var(--r-full);
    overflow: hidden;
}
.devices-account__avatar svg { display: block; width: 100%; height: 100%; }
.devices-account__text, .devices-newdevice__text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.devices-account__name, .devices-newdevice__label {
    font-size: var(--fs-sm);
    font-weight: var(--fw-semibold);
    color: var(--c-text-primary);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.devices-account__fingerprint, .devices-newdevice__caption { font-size: var(--fs-xs); color: var(--c-text-secondary); }
.devices-account__digits { font-family: var(--font-mono); color: var(--c-text-primary); }
.devices-newdevice__icon { width: 24px; text-align: center; color: var(--c-text-muted); font-size: 18px; }
.devices-warning { margin: 0; font-size: var(--fs-sm); line-height: 1.45; color: var(--c-status-warn-text); }
.devices-accept-video { width: 100%; border-radius: var(--r-lg); background: var(--c-bg-input); }

/* Toasts: neutral token pills stacked bottom-centre, above the update pill when it shows. */
.toast-stack {
    position: fixed;
    left: 50%;
    bottom: var(--space-6);
    transform: translateX(-50%);
    z-index: 9500;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--space-2);
    width: max-content;
    max-width: calc(100% - 2 * var(--space-4));
    pointer-events: none;
}
body:has(#update-pill:not(.hidden)) .toast-stack { bottom: 88px; }
.toast {
    pointer-events: auto;
    display: flex;
    align-items: center;
    gap: var(--space-3);
    max-width: 420px;
    padding: var(--space-2) var(--space-2) var(--space-2) var(--space-4);
    border: 1px solid var(--c-border-float);
    border-radius: var(--r-xl);
    background: var(--c-bg-float);
    -webkit-backdrop-filter: var(--backdrop-float);
    backdrop-filter: var(--backdrop-float);
    color: var(--c-text-popup);
    box-shadow: var(--shadow-lg);
    font-size: var(--fs-sm);
}
.toast-icon { flex-shrink: 0; font-size: 15px; }
.toast--success .toast-icon { color: var(--c-status-ok-solid); }
.toast--error .toast-icon { color: var(--c-status-error); }
.toast--warn .toast-icon { color: var(--c-status-warn); }
.toast--info .toast-icon { color: var(--c-accent); }
.toast-text { flex: 1; min-width: 0; }
.toast-title { font-weight: var(--fw-medium); line-height: 1.35; overflow-wrap: anywhere; }
.toast-body { font-size: var(--fs-xs); color: var(--c-text-secondary); margin-top: 2px; line-height: 1.4; }
.toast-close {
    flex-shrink: 0;
    width: 28px;
    height: 28px;
    border: 0;
    border-radius: var(--r-full);
    background: transparent;
    color: var(--c-text-muted);
    cursor: pointer;
}
.toast-close:hover { background: var(--c-btn-secondary); color: var(--c-text-primary); }
.toast-close:focus-visible, .toast-action-btn:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 1px; }

/* The update pill: a neutral panel with an accent progress bar. */
.update-pill {
    position: fixed;
    left: 50%;
    bottom: var(--space-4);
    transform: translateX(-50%);
    z-index: 9400;
    width: min(440px, calc(100% - 2 * var(--space-4)));
    border: 1px solid var(--c-border);
    border-radius: var(--r-xl);
    background: var(--c-bg-panel);
    color: var(--c-text-primary);
    box-shadow: var(--shadow-lg);
    font-size: var(--fs-sm);
    overflow: hidden;
}
.update-pill.hidden { display: none; }
#update-pill-icon { color: var(--c-accent); }
.update-pill[data-state="error"] #update-pill-icon { color: var(--c-status-error); }
#update-pill-meta { color: var(--c-text-secondary); }
.update-pill__action {
    flex-shrink: 0;
    padding: var(--space-1) var(--space-3);
    border: 0;
    border-radius: var(--r-lg);
    background: var(--c-accent);
    color: var(--c-text-on-accent);
    font: inherit;
    font-weight: var(--fw-semibold);
    cursor: pointer;
}
.update-pill__action:hover { background: var(--c-accent-hover); }
.update-pill__action.hidden { display: none; }
.update-pill__close {
    flex-shrink: 0;
    width: 28px;
    height: 28px;
    border: 0;
    border-radius: var(--r-full);
    background: transparent;
    color: var(--c-text-muted);
    cursor: pointer;
}
.update-pill__close:hover { background: var(--c-btn-secondary); color: var(--c-text-primary); }
.update-pill__track { height: 4px; background: var(--c-bg-input); }
.update-pill__track.hidden { display: none; }
.update-pill-progress-bar { height: 100%; background: var(--c-accent); transition: width 300ms ease-out; }

/* Onboarding: a blurred mirage scene per theme, a top bar and one frosted card per screen. */
.onboarding-overlay { background: var(--c-bg-app); overflow: hidden; }
html[data-onboarding-pending] #onboarding-overlay.hidden { display: flex; }
/* Painted before the controller binds anything: a click now would be lost, so none lands. */
html[data-onboarding-pending] #onboarding-overlay * { pointer-events: none !important; }
.onboarding-overlay > :not(.onboarding-scene):not(.onboarding-sheet) { position: relative; }
.onboarding-scene {
    position: absolute;
    inset: 0;
    overflow: hidden;
    container-type: size;
    pointer-events: none;
    background: var(--scene-sky);
}
.onboarding-scene > * { position: absolute; }
.onboarding-scene__glow {
    left: calc(var(--scene-x) - var(--scene-r) * 4);
    top: calc(var(--scene-y) - var(--scene-r) * 4);
    width: calc(var(--scene-r) * 8);
    height: calc(var(--scene-r) * 8);
    border-radius: 50%;
    background: radial-gradient(circle, var(--scene-glow) 0%, transparent 65%);
}
.onboarding-scene__stars { inset: 0; width: 100%; height: 100%; fill: var(--scene-star); opacity: var(--scene-stars); filter: blur(0.4px); }
.onboarding-scene__disc {
    left: calc(var(--scene-x) - var(--scene-r));
    top: calc(var(--scene-y) - var(--scene-r));
    width: calc(var(--scene-r) * 2);
    height: calc(var(--scene-r) * 2);
    border-radius: 50%;
    overflow: hidden;
    background: var(--scene-disc);
}
.onboarding-scene--night .onboarding-scene__disc,
.onboarding-scene--aurora .onboarding-scene__disc,
:root[data-theme="dark"] .onboarding-scene__disc,
:root[data-theme="glass"] .onboarding-scene__disc {
    -webkit-mask-image: radial-gradient(circle calc(var(--scene-r) * 0.9) at 69% 39%, transparent 99%, black 100%);
    mask-image: radial-gradient(circle calc(var(--scene-r) * 0.9) at 69% 39%, transparent 99%, black 100%);
}
/* The start page's aurora ribbons on its own two canvases, so both pages draw one sky. */
.onboarding-scene__ribbons { inset: 0; width: 100%; height: 100%; opacity: var(--scene-ribbons); fill: none; }
.onboarding-scene__ribbons--tall { display: none; }
@media (aspect-ratio < 1) {
    .onboarding-scene__ribbons--wide { display: none; }
    .onboarding-scene__ribbons--tall { display: block; }
}
.onboarding-scene__ribbon--a { stroke: var(--scene-ribbon-a); }
.onboarding-scene__ribbon--b { stroke: var(--scene-ribbon-b); }
.onboarding-scene__ribbon--c { stroke: var(--scene-ribbon-c); }
.onboarding-scene__haze { left: 0; right: 0; top: 52%; height: 6%; background: var(--scene-haze); filter: blur(10px); }
.onboarding-scene__dunes { inset: 0; width: 100%; height: 100%; filter: blur(3px); }
.onboarding-scene__dune--1 { fill: var(--scene-dune-1); }
.onboarding-scene__dune--2 { fill: var(--scene-dune-2); }
.onboarding-scene__dune--3 { fill: var(--scene-dune-3); }
.onboarding-scene__dune--4 { fill: var(--scene-dune-4); }
.onboarding-scene__veil { inset: 0; background: var(--scene-veil); }

.onboarding-topbar {
    z-index: 10;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-2);
    padding: 6px 8px;
}
.onboarding-topbar__start, .onboarding-topbar__end, .onboarding-prefs, .onboarding-window-controls { display: flex; align-items: center; gap: 4px; }
.onboarding-window-controls.hidden { display: none; }
.onboarding-prefs__dot { color: var(--c-text-muted); }
.onboarding-topbar__back-slot { display: flex; align-items: center; }
/* A host's own way out shows only on a screen with no way back of its own. */
.onboarding-topbar__back-slot[data-own-back] > :not(#btn-onboarding-back) { display: none !important; }
.onboarding-menu-anchor { position: relative; }
.onboarding-ghost {
    min-width: 44px;
    height: 44px;
    padding: 0 10px;
    border: 0;
    border-radius: var(--r-lg);
    background: transparent;
    color: var(--c-text-secondary);
    font: inherit;
    font-size: var(--fs-sm);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    cursor: pointer;
    transition: background-color var(--dur-fast) var(--ease-std), color var(--dur-fast) var(--ease-std);
}
.onboarding-ghost:hover, .onboarding-ghost[aria-expanded="true"] { background: var(--c-chrome-hover); color: var(--c-text-primary); }
.onboarding-ghost:focus-visible { outline: 2px solid var(--c-accent); outline-offset: -2px; }
.onboarding-ghost.hidden { display: none; }
.onboarding-ghost__chevron { font-size: 10px; }
.onboarding-ghost--square { padding: 0; width: 44px; font-size: 18px; }
#btn-onboarding-back { font-weight: 600; }
#btn-onboarding-back.onboarding-back-off { display: none; }
.onboarding-window-controls__sep { width: 1px; height: 20px; margin: 0 4px; background: var(--c-border); }
.onboarding-window-button {
    width: 32px;
    height: 32px;
    border: 0;
    border-radius: 8px;
    background: transparent;
    color: var(--c-text-primary);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
}
.onboarding-window-button:hover { background: var(--c-chrome-hover); }
.onboarding-window-button--close:hover { background: var(--c-status-error-bg); color: var(--c-status-error-text); }
.onboarding-window-button:focus-visible { outline: 2px solid var(--c-accent); outline-offset: -2px; }

.onboarding-menu {
    position: absolute;
    left: 0;
    top: calc(100% + 4px);
    z-index: 20;
    min-width: 188px;
    padding: 6px;
    box-sizing: border-box;
    border-radius: var(--r-lg);
    border: 1px solid var(--c-border-float);
    background: var(--c-bg-popup);
    box-shadow: var(--c-onb-card-shadow);
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.onboarding-menu.hidden { display: none; }
.onboarding-menu__item {
    min-height: 40px;
    padding: 0 10px;
    border: 0;
    border-radius: 8px;
    background: transparent;
    color: var(--c-text-primary);
    font: inherit;
    font-size: var(--fs-sm);
    display: flex;
    align-items: center;
    gap: 10px;
    text-align: left;
    cursor: pointer;
}
.onboarding-menu__item:hover, .onboarding-menu__item:focus-visible { background: var(--c-chrome-hover); }
.onboarding-menu__item:focus-visible { outline: 2px solid var(--c-accent); outline-offset: -2px; }
.onboarding-menu__item[aria-checked="true"] { font-weight: 600; }
.onboarding-menu__icon { width: 16px; text-align: center; color: var(--c-text-muted); }
.onboarding-menu__label { flex: 1; min-width: 0; }
.onboarding-menu__check { font-size: 12px; color: var(--c-accent); }

#btn-onboarding-prefs { display: none; }
html[data-input="touch"] .onboarding-prefs { display: none; }
html[data-input="touch"] #btn-onboarding-prefs { display: inline-flex; }
@media (max-width: 480px) {
    .onboarding-prefs { display: none; }
    #btn-onboarding-prefs { display: inline-flex; }
}

.onboarding-sheet { position: absolute; inset: 0; z-index: 30; display: flex; flex-direction: column; justify-content: flex-end; }
.onboarding-sheet.hidden { display: none; }
.onboarding-sheet__scrim { position: absolute; inset: 0; background: var(--c-scrim); }
.onboarding-sheet__panel {
    position: relative;
    width: 100%;
    max-width: 560px;
    margin: 0 auto;
    box-sizing: border-box;
    padding: 10px 16px calc(22px + env(safe-area-inset-bottom, 0px));
    border-radius: var(--r-xl) var(--r-xl) 0 0;
    border: 1px solid var(--c-border-float);
    border-bottom: 0;
    background: var(--c-bg-popup);
    box-shadow: 0 -12px 40px rgba(0, 0, 0, 0.18);
    display: flex;
    flex-direction: column;
    gap: 16px;
    animation: onboarding-sheet-in var(--dur-fast) var(--ease-std);
}
@keyframes onboarding-sheet-in { from { transform: translateY(24px); opacity: 0; } to { transform: none; opacity: 1; } }
.onboarding-sheet__grip { align-self: center; width: 40px; height: 4px; border-radius: 2px; background: var(--c-border); }
.onboarding-sheet__head { display: flex; align-items: center; justify-content: space-between; }
.onboarding-sheet__title { margin: 0; font-size: 17px; font-weight: 700; color: var(--c-text-primary); }
.onboarding-sheet__close {
    width: 44px;
    height: 44px;
    margin-right: -10px;
    border: 0;
    border-radius: var(--r-lg);
    background: transparent;
    color: var(--c-text-secondary);
    cursor: pointer;
}
.onboarding-sheet__close:focus-visible { outline: 2px solid var(--c-accent); outline-offset: -2px; }
.onboarding-sheet__label { margin: 0 0 8px; font-size: 13px; font-weight: 600; color: var(--c-text-secondary); }
.onboarding-sheet__grid { display: grid; gap: 8px; }
.onboarding-sheet__grid--2 { grid-template-columns: repeat(2, 1fr); }
.onboarding-sheet__grid--4 { grid-template-columns: repeat(4, 1fr); }
.onboarding-sheet__choice {
    min-height: 44px;
    padding: 8px 4px;
    box-sizing: border-box;
    border-radius: 10px;
    border: 1px solid var(--c-border);
    background: transparent;
    color: var(--c-text-primary);
    font: inherit;
    font-size: 13px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 4px;
    cursor: pointer;
}
.onboarding-sheet__choice[aria-pressed="true"] { border: 2px solid var(--c-accent); background: var(--c-bg-input); font-weight: 600; }
.onboarding-sheet__choice:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 2px; }

.onboarding-screen { padding: 8px 24px 32px; box-sizing: border-box; }
.onboarding-screen.hidden { display: none; }
.onboarding-card {
    max-width: 440px;
    box-sizing: border-box;
    padding: 32px;
    border-radius: 18px;
    border: 1px solid var(--c-onb-card-border);
    background: var(--c-onb-card);
    -webkit-backdrop-filter: blur(20px);
    backdrop-filter: blur(20px);
    box-shadow: var(--c-onb-card-shadow);
}
@media (max-width: 480px) {
    .onboarding-screen { padding: 0 12px 16px; }
    .onboarding-card { padding: 20px 16px; }
}

#onboarding-progress li[data-state="ok"] > i { animation: onboarding-tick 180ms var(--ease-std); }
@keyframes onboarding-tick { from { transform: scale(0.6); opacity: 0.4; } to { transform: none; opacity: 1; } }

@media (prefers-reduced-motion: reduce) {
    .onboarding-ghost, .onboarding-sheet__panel, #onboarding-progress li[data-state="ok"] > i { transition: none; animation: none; }
}

/* «Как войти?»: the steps beside this device's green code, the other ways in and a how-to below. */
.onboarding-signin-stack { max-width: 920px; display: flex; flex-direction: column; gap: 12px; }
.onboarding-card--signin { max-width: none; padding: 32px; }
#onboarding-signin[data-signin="compare"] .onboarding-signin-stack,
#onboarding-signin[data-signin="form"] .onboarding-signin-stack { max-width: 480px; }
#onboarding-signin .onboarding-signin-more { flex-direction: row; }
#onboarding-signin .onboarding-signin-more.hidden { display: none; }
#onboarding-signin .onboarding-install__action {
    border-color: var(--c-onb-card-border);
    background: var(--c-onb-card);
    -webkit-backdrop-filter: blur(16px);
    backdrop-filter: blur(16px);
}
#onboarding-signin .onboarding-signin-row {
    flex: 1;
    min-width: 0;
    border-color: var(--c-onb-card-border);
    background: var(--c-onb-card);
    -webkit-backdrop-filter: blur(16px);
    backdrop-filter: blur(16px);
}

.signin2 {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 300px;
    grid-template-areas: "head side" "steps side";
    grid-template-rows: auto 1fr;
    column-gap: 40px;
    row-gap: 22px;
    align-items: start;
}
.signin2__head { grid-area: head; display: flex; flex-direction: column; gap: 6px; }
.signin2__title { margin: 0; font-size: 24px; font-weight: 700; letter-spacing: -0.01em; color: var(--c-text-primary); }
.signin2__sub { margin: 0; font-size: var(--fs-sm); line-height: 1.5; color: var(--c-text-secondary); }
.signin2__side { grid-area: side; display: flex; flex-direction: column; gap: 12px; }
.signin2-steps { grid-area: steps; margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 14px; }
.signin2--compare { display: flex; flex-direction: column; align-items: stretch; gap: 18px; }

.signin2-step { display: flex; align-items: flex-start; gap: 12px; }
.signin2-step__badge {
    width: 26px;
    height: 26px;
    flex-shrink: 0;
    box-sizing: border-box;
    border-radius: 50%;
    border: 1.5px solid var(--c-border);
    background: var(--c-bg-input);
    color: var(--c-text-primary);
    font-size: 13px;
    font-weight: 700;
    display: flex;
    align-items: center;
    justify-content: center;
}
.signin2-step[data-state="active"] .signin2-step__badge { border: 0; background: var(--c-accent); color: var(--c-text-on-accent); }
.signin2-step[data-state="done"] .signin2-step__badge { border: 0; background: var(--c-status-ok-solid); color: var(--c-signin-done-ink); }
.signin2-step__text { flex: 1; min-width: 0; padding-top: 3px; font-size: 15px; line-height: 1.6; color: var(--c-text-primary); }
.signin2-step[data-state="active"] .signin2-step__text { font-weight: 600; }
.signin2-step[data-state="done"] .signin2-step__text { color: var(--c-text-secondary); }
.signin2-step[data-state="dim"] { opacity: 0.45; }
.signin2-step[data-state="dim"] .signin2-step__text { text-decoration: line-through; }
.signin2-step__alt { display: block; margin-top: 6px; font-size: 13px; line-height: 1.5; color: var(--c-text-secondary); }

.signin2-chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    height: 24px;
    margin: 0 2px;
    padding: 0 8px;
    box-sizing: border-box;
    vertical-align: -5px;
    border-radius: 7px;
    border: 1px solid var(--c-border);
    background: var(--c-bg-panel);
    color: var(--c-text-primary);
    font-size: 13px;
    font-weight: 600;
    white-space: nowrap;
}
.signin2-chip__icon { color: var(--c-text-muted); font-size: 12px; }
.signin2-chip--square { width: 24px; padding: 0; justify-content: center; border: 0; background: var(--c-accent-soft); }
.signin2-code {
    position: relative;
    overflow: hidden;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    height: 30px;
    margin: 0 2px;
    padding: 0 4px 0 10px;
    box-sizing: border-box;
    vertical-align: -9px;
    border-radius: 8px;
    border: 1px solid var(--c-border);
    background: var(--c-bg-input);
}
.signin2-code__text { font-family: var(--font-mono); font-size: 15px; font-weight: 700; letter-spacing: 0.06em; color: var(--c-text-primary); white-space: nowrap; user-select: all; }
.signin2-code__text--none { color: var(--c-text-muted); padding-right: 6px; }
.signin2-code__blank { width: 168px; height: 14px; margin-right: 6px; border-radius: 4px; background: var(--c-border); }
.signin2-code__copy {
    width: 28px;
    height: 28px;
    border: 0;
    border-radius: 7px;
    background: transparent;
    color: var(--c-text-secondary);
    cursor: pointer;
}
.signin2-code__copy:hover { background: var(--c-chrome-hover); color: var(--c-text-primary); }
.signin2-code__copy:focus-visible { outline: 2px solid var(--c-accent); outline-offset: -2px; }
html[data-input="touch"] .signin2-code__copy { width: 44px; height: 44px; margin: -7px -4px -7px 0; }

.signin2-panel {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 12px;
    padding: 20px;
    border-radius: 16px;
    border: 1px solid var(--c-signin-new-border);
    background: var(--c-signin-new);
    color: var(--c-signin-new-ink);
}
.signin2-panel--code .devices-link { width: 100%; }
.signin2-panel--code .devices-link-card { width: 100%; }
.signin2-panel--found { align-items: stretch; gap: 14px; }
.signin2-panel--error { border-color: var(--c-border); background: var(--c-bg-input); color: var(--c-text-primary); text-align: center; padding: 28px 20px; }
.signin2-panel__icon {
    width: 56px;
    height: 56px;
    border-radius: 16px;
    background: var(--c-status-error-bg);
    color: var(--c-status-error-text);
    font-size: 24px;
    display: flex;
    align-items: center;
    justify-content: center;
}
.signin2-panel__title { margin: 4px 0 0; font-size: 17px; font-weight: 700; }
.signin2-panel__text { margin: 0; font-size: 13px; line-height: 1.5; color: var(--c-text-secondary); }
.signin2-retry { min-height: 44px; margin-top: 6px; padding: 0 22px; }
.signin2-retry:disabled { opacity: .6; cursor: default; font-variant-numeric: tabular-nums; }
.signin2-status { margin: 0; display: inline-flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 600; color: inherit; }
.signin2-status__dot { position: relative; width: 8px; height: 8px; flex-shrink: 0; border-radius: 50%; background: var(--c-status-ok-solid); }
.signin2-status__dot--pulse::after {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: 50%;
    background: var(--c-status-ok-solid);
    animation: signin2-pulse 1.6s ease-out infinite;
}
@keyframes signin2-pulse { from { transform: scale(1); opacity: 0.9; } to { transform: scale(2.6); opacity: 0; } }
.signin2-timer, .signin2-note { margin: 0; display: flex; gap: 6px; font-size: 12px; line-height: 1.5; color: var(--c-text-secondary); }
.signin2-timer { align-items: center; justify-content: center; font-variant-numeric: tabular-nums; }
.signin2-timer.hidden { display: none; }
.signin2-note { align-items: flex-start; gap: 8px; }
.signin2-note__icon { margin-top: 2px; color: var(--c-text-primary); }
.signin2-qr-pending {
    position: relative;
    overflow: hidden;
    width: 100%;
    aspect-ratio: 300 / 342;
    border-radius: 12px;
    background: var(--c-bg-input);
    display: flex;
    align-items: center;
    justify-content: center;
}
.signin2-qr-pending__spinner { font-size: 28px; color: var(--c-signin-new-ink); }
.signin2-shimmer {
    position: absolute;
    inset: 0;
    background: linear-gradient(100deg, transparent 20%, var(--c-signin-shimmer) 50%, transparent 80%);
    animation: signin2-shimmer 1.4s ease-in-out infinite;
}
@keyframes signin2-shimmer { from { transform: translateX(-120%); } to { transform: translateX(120%); } }
.signin2-found { display: flex; align-items: center; gap: 12px; }
.signin2-found__spinner { font-size: 22px; color: var(--c-signin-new-ink); }
.signin2-found__text { display: flex; flex-direction: column; gap: 2px; }
.signin2-found__title { font-size: 15px; font-weight: 700; }
.signin2-found__sub { font-size: 13px; color: var(--c-signin-new-ink-2); }
.signin2-account { display: flex; flex-direction: column; gap: 6px; }
.signin2-account__hint { margin: 0; font-size: 12px; line-height: 1.5; color: var(--c-text-secondary); }
.signin2-answers { display: flex; gap: 10px; }
.signin2-answers > button { flex: 1; min-width: 0; min-height: 48px; display: inline-flex; align-items: center; justify-content: center; gap: 8px; font-size: 15px; }
.devices-sas__label { display: block; margin-bottom: 6px; font-size: 13px; color: var(--c-text-secondary); }
.devices-account__caption { font-size: var(--fs-xs); color: var(--c-text-secondary); }
.devices-account__avatar--identicon { background: transparent; overflow: hidden; }
.devices-account__avatar--identicon > svg { width: 100%; height: 100%; display: block; }

.onboarding-signin-help { position: relative; display: flex; flex-direction: column; align-items: center; }
.onboarding-signin-help.hidden { display: none; }
.onboarding-signin-help__toggle {
    min-height: 44px;
    padding: 0 10px;
    border: 0;
    border-radius: var(--r-lg);
    background: transparent;
    color: var(--c-text-primary);
    font: inherit;
    font-size: var(--fs-sm);
    font-weight: 600;
    text-decoration: underline;
    text-underline-offset: 3px;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    cursor: pointer;
}
.onboarding-signin-help__toggle:focus-visible { outline: 2px solid var(--c-accent); outline-offset: -2px; }
.onboarding-signin-help__chevron { display: none; font-size: 12px; }
.onboarding-howto {
    position: absolute;
    left: 50%;
    bottom: calc(100% - 4px);
    transform: translateX(-50%);
    z-index: 25;
    width: min(560px, calc(100vw - 32px));
    box-sizing: border-box;
    padding: 18px;
    border-radius: 16px;
    border: 1px solid var(--c-border-float);
    background: var(--c-bg-popup);
    box-shadow: var(--c-onb-card-shadow);
    display: flex;
    flex-direction: column;
    gap: 14px;
    text-align: left;
}
.onboarding-howto.hidden { display: none; }
.onboarding-howto__head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.onboarding-howto__title { margin: 0; font-size: 15px; font-weight: 700; color: var(--c-text-primary); }
.onboarding-howto__close {
    width: 44px;
    height: 44px;
    margin: -10px -12px -10px 0;
    border: 0;
    border-radius: var(--r-lg);
    background: transparent;
    color: var(--c-text-secondary);
    cursor: pointer;
}
.onboarding-howto__close:focus-visible { outline: 2px solid var(--c-accent); outline-offset: -2px; }
.onboarding-howto__frames { margin: 0; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.onboarding-howto__frame { display: flex; flex-direction: column; gap: 8px; }
.onboarding-howto__art {
    position: relative;
    overflow: hidden;
    container-type: inline-size;
    height: 104px;
    border-radius: 10px;
    border: 1px solid var(--c-border);
    background: var(--c-bg-input);
}
.onboarding-howto__caption { margin: 0; display: flex; gap: 6px; font-size: 12px; line-height: 1.4; color: var(--c-text-secondary); }
.onboarding-howto__n { font-weight: 700; color: var(--c-text-primary); }
.onboarding-howto__note { margin: 0; font-size: 12px; line-height: 1.5; color: var(--c-text-secondary); }
.onboarding-howto__window {
    position: absolute;
    inset: 10px 10px -6px;
    border-radius: 6px;
    border: 1px solid var(--c-border);
    background: var(--c-bg-panel);
}
.onboarding-howto__bar { display: flex; align-items: center; gap: 4px; padding: 6px; }
.onboarding-howto__dot { width: 12px; height: 12px; border-radius: 50%; background: var(--c-text-muted); }
.onboarding-howto__line { flex: 1; display: block; height: 7px; border-radius: 3px; background: var(--c-bg-input); }
.onboarding-howto__plus {
    width: 14px;
    height: 14px;
    border-radius: 4px;
    background: var(--c-accent);
    color: var(--c-text-on-accent);
    font-size: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
}
.onboarding-howto__menu {
    position: absolute;
    right: 6px;
    top: 26px;
    width: 74%;
    padding: 4px;
    box-sizing: border-box;
    border-radius: 6px;
    border: 1px solid var(--c-border);
    background: var(--c-bg-panel);
    box-shadow: var(--c-onb-card-shadow);
    display: flex;
    flex-direction: column;
    gap: 3px;
}
.onboarding-howto__menu > .onboarding-howto__line { flex: none; }
.onboarding-howto__pick {
    display: flex;
    align-items: center;
    gap: 3px;
    padding: 2px 3px;
    border-radius: 3px;
    background: var(--c-accent-soft);
    color: var(--c-text-primary);
    font-size: clamp(6px, 5cqw, 9px);
    font-weight: 700;
    white-space: nowrap;
    overflow: hidden;
}
.onboarding-howto__pick > i { flex: none; }
.onboarding-howto__pick > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.onboarding-howto__art--scan { background: var(--c-bg-call-deep); display: flex; align-items: center; justify-content: center; }
.onboarding-howto__viewfinder {
    position: relative;
    width: 70px;
    height: 70px;
    border-radius: 8px;
    background: var(--c-signin-new);
    color: var(--c-signin-new-ink);
    font-size: 48px;
    display: flex;
    align-items: center;
    justify-content: center;
}
.onboarding-howto__beam {
    position: absolute;
    left: 6px;
    right: 6px;
    top: 50%;
    height: 2px;
    background: var(--c-status-ok-solid);
    box-shadow: 0 0 8px var(--c-status-ok-solid);
}
.onboarding-howto__art--match { display: flex; align-items: center; gap: clamp(2px, 4%, 8px); padding: clamp(4px, 6%, 10px); }
.onboarding-howto__pair {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    padding: 8px 2px;
    border-radius: 6px;
    border: 1px solid var(--c-border);
    background: var(--c-bg-panel);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 4px;
    font-family: var(--font-mono);
    font-size: clamp(9px, 8cqw, 12px);
    font-weight: 700;
    color: var(--c-text-primary);
}
.onboarding-howto__pair > span { max-width: 100%; line-height: 1.15; text-align: center; }
.onboarding-howto__pair > i { color: var(--c-status-ok-solid); }
.onboarding-howto__equals { font-size: clamp(9px, 8cqw, 12px); font-weight: 700; color: var(--c-text-secondary); }
@container (max-width: 120px) {
    .onboarding-howto__menu { left: 4px; right: 4px; width: auto; }
    .onboarding-howto__pick > i { display: none; }
}
.onboarding-howto__frame--1 { animation: onboarding-howto-1 7.5s ease-in-out infinite; }
.onboarding-howto__frame--2 { animation: onboarding-howto-2 7.5s ease-in-out infinite; }
.onboarding-howto__frame--3 { animation: onboarding-howto-3 7.5s ease-in-out infinite; }
@keyframes onboarding-howto-1 { 0%, 30% { opacity: 1; } 36%, 94% { opacity: 0.45; } 100% { opacity: 1; } }
@keyframes onboarding-howto-2 { 0%, 30% { opacity: 0.45; } 36%, 63% { opacity: 1; } 69%, 100% { opacity: 0.45; } }
@keyframes onboarding-howto-3 { 0%, 63% { opacity: 0.45; } 69%, 96% { opacity: 1; } 100% { opacity: 0.45; } }

@media (max-width: 760px) {
    .signin2 { grid-template-columns: minmax(0, 1fr); grid-template-areas: "head" "side" "steps"; grid-template-rows: none; row-gap: 14px; }
    .signin2__title { font-size: 21px; }
    .signin2__sub { display: none; }
    .signin2-steps { gap: 10px; }
    .signin2-step__text { font-size: 13px; }
    .signin2-step__alt { font-size: 12px; }
    .onboarding-card--signin { padding: 16px; }
    #onboarding-signin .onboarding-signin-more { flex-direction: column; }
    .onboarding-signin-help { align-items: stretch; }
    .onboarding-signin-help__toggle { justify-content: flex-start; text-decoration: none; }
    .onboarding-signin-help__chevron { display: inline; margin-left: auto; }
    .onboarding-signin-help__toggle[aria-expanded="true"] .onboarding-signin-help__chevron { transform: rotate(180deg); }
    .onboarding-howto { position: static; transform: none; width: auto; box-shadow: none; }
    .onboarding-howto__art { height: 84px; }
}

.devices-way { flex-direction: row; gap: 10px; }
.devices-way__option { flex: 1; min-width: 0; flex-direction: column; align-items: center; gap: 10px; padding: 18px 14px; text-align: center; background: var(--c-bg-panel); }
.devices-way__icon {
    width: 48px;
    height: 48px;
    border-radius: 12px;
    background: var(--c-bg-input);
    color: var(--c-text-primary);
    font-size: 22px;
    display: flex;
    align-items: center;
    justify-content: center;
}
.devices-way__text { align-items: center; }
.devices-way__title { font-size: 15px; }
.devices-way__show-qr::before {
    content: "\f029";
    margin-right: 6px;
    font-family: "Font Awesome 6 Free";
    font-weight: 900;
}

@media (prefers-reduced-motion: reduce) {
    .signin2-shimmer, .signin2-status__dot--pulse::after, .onboarding-howto__frame--1, .onboarding-howto__frame--2, .onboarding-howto__frame--3 { animation: none; }
    .signin2 .fa-spin { animation: none; }
}
