/* Unified theme: scoped palette and shared controls. Semantic status colors stay unchanged. */
.vlc-workspace, .vlc-widget {
    --vira-indigo: var(--vlc-end);
    --vira-indigo-hover: var(--vlc-end);
    --vira-violet: var(--vlc-accent);
    --vira-cyan: var(--vlc-accent);
    --vira-cyan-light: var(--vlc-light);
    --vira-gradient-violet: linear-gradient(135deg,var(--vlc-accent),var(--vlc-end));
    --vira-gradient-ocean: linear-gradient(135deg,var(--vlc-accent),var(--vlc-end));
    --vira-liquid-a: rgba(var(--vlc-rgb),.20);
    --vira-liquid-b: rgba(var(--vlc-rgb),.14);
    --vira-liquid-c: rgba(var(--vlc-rgb),.12);
    --vira-liquid-d: rgba(var(--vlc-rgb),.08);
    --vira-gradient-mesh: radial-gradient(at 20% 20%,rgba(var(--vlc-rgb),.20),transparent 55%),radial-gradient(at 80% 80%,rgba(var(--vlc-rgb),.12),transparent 55%);
}
.vlc-workspace, .vlc-widget {
    --vlc-accent: #635bff;
    --vlc-end: #4338ca;
    --vlc-light: #a5a0ff;
    --vlc-rgb: 99,91,255;
    --vlc-ink: #fff;
}
.vlc-workspace .vlc-brand-icon,
.vlc-workspace .vlc-nav-item.is-active,
.vlc-workspace .vlc-settings-tab.is-active,
.vlc-workspace .vlc-tab.is-active,
.vlc-widget .vlc-toggle,
.vlc-widget .vlc-avatar {
    background: linear-gradient(135deg,var(--vlc-accent),var(--vlc-end));
    color: var(--vlc-ink);
    box-shadow: 0 6px 18px rgba(var(--vlc-rgb),.22);
}
.vlc-workspace .vlc-count-chip,
.vlc-workspace .vlc-header-icon-btn[aria-expanded="true"] {
    background: rgba(var(--vlc-rgb),.10); color: var(--vlc-accent);
}
.vlc-workspace .vlc-conversation.is-active {
    background: rgba(var(--vlc-rgb),.07); box-shadow: inset -3px 0 var(--vlc-accent);
}
.vlc-workspace .vlc-dash-card-purple .vlc-dash-card-icon,
.vlc-workspace .vlc-dash-link,
.vlc-workspace .vlc-header-return:hover,
.vlc-workspace #vlc-info-toggle:not(:disabled),
.vlc-widget .vlc-eyebrow,
.vlc-widget .vlc-privacy-link a,
.vlc-widget .vlc-latest { color: var(--vlc-accent); }
.vlc-workspace .vlc-dash-legend-current,
.vlc-workspace .vlc-dot-purple { background: var(--vlc-accent); }
.vlc-workspace .vlc-field-checkbox input { accent-color: var(--vlc-accent); }
.vlc-widget .vlc-avatar-option.is-selected { border-color: var(--vlc-accent); }
.vlc-workspace :is(input,textarea,select):focus,
.vlc-widget :is(input,textarea,select):focus {
    border-color: var(--vlc-accent); box-shadow: 0 0 0 3px rgba(var(--vlc-rgb),.15);
    outline: none;
}
/* Both PHP markup and dynamically inserted controls share the same contract. */
.vlc-workspace .vlc-btn,
.vlc-widget .vlc-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 6px;
    min-height: 38px; padding: 8px 16px; border: 1px solid transparent;
    border-radius: 10px; font: inherit; font-size: 13px; font-weight: 600;
    line-height: 1.5; text-decoration: none; cursor: pointer;
    transition: background .15s, box-shadow .15s;
    background: #f5f6fa; color: #334155;
}
.vlc-workspace .vlc-btn-primary,
.vlc-widget .vlc-btn-primary,
.vlc-workspace .vira-btn-primary {
    background: linear-gradient(135deg,var(--vlc-accent),var(--vlc-end));
    border-color: var(--vlc-accent); color: var(--vlc-ink);
    box-shadow: 0 4px 12px rgba(var(--vlc-rgb),.20);
}
/* Inbox's compact design rules use !important; keep this override equally local. */
.vlc-workspace .vlc-inbox .vira-btn-primary,
.vlc-workspace .vlc-inbox .vira-btn-primary:hover {
    background: linear-gradient(135deg,var(--vlc-accent),var(--vlc-end)) !important;
    border-color: var(--vlc-accent) !important; color: var(--vlc-ink) !important;
}
.vlc-workspace .vlc-btn-primary:hover:not(:disabled),
.vlc-widget .vlc-btn-primary:hover:not(:disabled) {
    box-shadow: 0 6px 18px rgba(var(--vlc-rgb),.30);
}
.vlc-workspace .vlc-btn-ghost,
.vlc-widget .vlc-btn-ghost { background: #f5f6fa; border-color: #e2e8f0; color: #334155; box-shadow: none; }
.vlc-workspace .vlc-btn-ghost:hover:not(:disabled),
.vlc-widget .vlc-btn-ghost:hover:not(:disabled) { background: #e9edf3; }
.vlc-workspace .vlc-btn-danger,
.vlc-widget .vlc-btn-danger { background: #ef4444; color: #fff; border-color: #ef4444; }
.vlc-workspace .vlc-btn-sm { min-height: 30px; padding: 5px 12px; font-size: 12px; }
.vlc-workspace :is(.vlc-btn,.vira-btn):disabled,
.vlc-widget .vlc-btn:disabled { opacity: .5; cursor: not-allowed; transform: none; box-shadow: none; }
.vlc-workspace :is(.vlc-btn,.vira-btn):focus-visible,
.vlc-widget .vlc-btn:focus-visible { outline: 2px solid var(--vlc-accent); outline-offset: 3px; }
/* Sender role determines the bubble color. Patch 18 unifies RTL alignment. */
.vlc-workspace .vlc-msg.vlc-msg-operator,
.vlc-widget .vlc-msg.vlc-msg-operator {
    background: linear-gradient(135deg,var(--vlc-accent),var(--vlc-end));
    color: var(--vlc-ink); border: 1px solid transparent;
}
.vlc-workspace .vlc-msg.vlc-msg-visitor,
.vlc-widget .vlc-msg.vlc-msg-visitor {
    background: #fff; color: #1e293b; border: 1px solid #e2e8f0;
}
.vlc-workspace .vlc-msg-operator .vlc-msg-sender,
.vlc-widget .vlc-msg-operator .vlc-msg-sender { color: inherit; }
.vlc-widget .vlc-toggle:hover { box-shadow: 0 12px 30px rgba(var(--vlc-rgb),.35); }
@keyframes vlc-pulse {
    0%,20%,100% { box-shadow: 0 10px 30px rgba(var(--vlc-rgb),.4); transform: scale(1); }
    10% { box-shadow: 0 0 0 12px rgba(var(--vlc-rgb),.12); transform: scale(1.05); }
}
@keyframes vlc-glow { 50% { box-shadow: 0 0 28px rgba(var(--vlc-rgb),.7); } }

/* Self-contained port of Vira Panel's theme-card layout; no runtime dependency. */
.vlc-workspace .vlc-theme-section { min-width:0; margin:0 0 24px; padding:0; border:0; }
.vlc-workspace .vlc-theme-section legend { font-size:15px; font-weight:700; padding:0; margin-bottom:8px; }
.vlc-workspace .vlc-theme-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:16px; width:100%; min-width:0; box-sizing:border-box; }
.vlc-workspace .vlc-theme-card { display:block; min-width:0; margin:0; padding:14px; border:2px solid #dce2ed; border-radius:16px; background:#fff; color:#202938; cursor:pointer; box-sizing:border-box; transition:border-color .15s,box-shadow .15s; }
.vlc-workspace .vlc-theme-card:hover { border-color:#64748b; }
.vlc-workspace .vlc-theme-card:has(input:checked) { border-color:var(--vlc-accent); box-shadow:0 0 0 2px rgba(var(--vlc-rgb),.13); }
.vlc-workspace .vlc-theme-card:focus-within { outline:2px solid var(--vlc-accent); outline-offset:3px; }
.vlc-workspace .vlc-theme-title { display:flex; align-items:center; gap:6px; font-size:13px; }
.vlc-workspace .vlc-theme-card input[type=radio] { appearance:auto; accent-color:var(--vlc-accent); width:16px; height:16px; min-height:16px; padding:0; margin:0; border-radius:50%; flex-shrink:0; }
.vlc-workspace .vlc-theme-swatch { display:block; height:64px; border-radius:10px; margin-bottom:12px; }
.vlc-workspace .vlc-theme-dots { display:flex; margin-top:12px; gap:6px; }
.vlc-workspace .vlc-theme-dots > span { width:24px; height:24px; border-radius:50%; border:1px solid #cbd5e1; }
.vlc-workspace .vlc-placeholder-icon { background:rgba(var(--vlc-rgb),.10); color:var(--vlc-accent); }
@media(max-width:1100px) { .vlc-workspace .vlc-theme-grid { grid-template-columns:repeat(3,minmax(0,1fr)); } }
@media(max-width:782px) { .vlc-workspace .vlc-theme-grid { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media(max-width:420px) { .vlc-workspace .vlc-theme-grid { grid-template-columns:minmax(0,1fr); } }

/* Patch 20: continuous curved tails, compact metadata and external reply. */
:is(.vlc-workspace,.vlc-widget) .vlc-messages { padding-inline:46px; gap:12px; }
:is(.vlc-workspace,.vlc-widget) .vlc-msg {
    box-sizing:border-box; position:relative; width:fit-content; max-width:calc(100% - 36px); min-width:0; flex-shrink:0;
    padding:10px 14px 5px; border-radius:19px; overflow:visible; overflow-wrap:anywhere;
    box-shadow:0 2px 5px rgba(15,23,42,.04); isolation:isolate;
}
:is(.vlc-workspace,.vlc-widget) .vlc-msg.vlc-msg-operator {
    --vlc-bubble:var(--vlc-accent); background:var(--vlc-bubble);
    align-self:flex-start; margin-inline:0 auto; border:0; border-end-start-radius:16px;
}
:is(.vlc-workspace,.vlc-widget) .vlc-msg.vlc-msg-visitor {
    --vlc-bubble:color-mix(in srgb,var(--vlc-accent) 15%,#fff);
    background:rgba(var(--vlc-rgb),.15); background:var(--vlc-bubble);
    color:#1e293b; align-self:flex-end; margin-inline:auto 0; border:0; border-end-end-radius:16px;
}
:is(.vlc-workspace,.vlc-widget) .vlc-msg p { margin:0 0 3px; line-height:1.8; }
:is(.vlc-workspace,.vlc-widget) .vlc-message-avatar {
    position:absolute; bottom:0; width:28px; height:28px; border-radius:50%;
    object-fit:cover; background:#fff; border:1px solid var(--vlc-border);
}
:is(.vlc-workspace,.vlc-widget) .vlc-msg-operator .vlc-message-avatar { inset-inline-start:-37px; }
:is(.vlc-workspace,.vlc-widget) .vlc-msg-visitor .vlc-message-avatar { inset-inline-end:-37px; }
:is(.vlc-workspace,.vlc-widget) .vlc-msg::after {
    content:''; position:absolute; bottom:0; width:14px; height:18px;
    transform:none; pointer-events:none; background:var(--vlc-bubble); border:0; z-index:-1;
    -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 18'%3E%3Cpath d='M0 0C2 10 5 15 14 18C7 18 3 18 0 15Z'/%3E%3C/svg%3E") center/100% 100% no-repeat;
    mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 18'%3E%3Cpath d='M0 0C2 10 5 15 14 18C7 18 3 18 0 15Z'/%3E%3C/svg%3E") center/100% 100% no-repeat;
}
:is(.vlc-workspace,.vlc-widget) .vlc-msg-operator::after { inset-inline-start:-8px; }
:is(.vlc-workspace,.vlc-widget) .vlc-msg-visitor::after { inset-inline-end:-8px; transform:scaleX(-1); }
:is(.vlc-workspace,.vlc-widget)[dir="ltr"] .vlc-msg-operator::after { transform:scaleX(-1); }
:is(.vlc-workspace,.vlc-widget)[dir="ltr"] .vlc-msg-visitor::after { transform:none; }
:is(.vlc-workspace,.vlc-widget) .vlc-msg .vlc-message-meta {
    display:flex; direction:rtl; align-items:center; gap:6px; margin:0; padding:0;
    font-size:10px; line-height:1.3; min-height:28px; color:inherit; opacity:.85;
}
:is(.vlc-workspace,.vlc-widget) .vlc-meta-name { max-width:140px; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
:is(.vlc-workspace,.vlc-widget) .vlc-meta-time { white-space:nowrap; }
:is(.vlc-workspace,.vlc-widget) .vlc-receipt { white-space:nowrap; margin:0; flex-shrink:0; }
:is(.vlc-workspace,.vlc-widget) :is(.vlc-reply-action,.vlc-reply-quote,.vlc-reply-preview button) {
    font:inherit; color:inherit; cursor:pointer; box-sizing:border-box;
}
:is(.vlc-workspace,.vlc-widget) .vlc-reply-action {
    display:inline-flex; align-items:center; justify-content:center; flex-shrink:0;
    background:transparent; border:0; padding:5px; width:28px; height:28px;
    position:absolute; bottom:8px; margin:0; border-radius:50%; text-decoration:none; min-height:28px;
    color:#475569; background:var(--vlc-light,#f1f5f9);
}
:is(.vlc-workspace,.vlc-widget) .vlc-msg-operator > .vlc-reply-action { inset-inline-end:-34px; }
:is(.vlc-workspace,.vlc-widget) .vlc-msg-visitor > .vlc-reply-action { inset-inline-start:-34px; }
@media(hover:hover) and (pointer:fine) {
    :is(.vlc-workspace,.vlc-widget) .vlc-msg > .vlc-reply-action { opacity:0; }
    :is(.vlc-workspace,.vlc-widget) .vlc-msg:is(:hover,:focus-within) > .vlc-reply-action { opacity:1; }
}
:is(.vlc-workspace,.vlc-widget) .vlc-reply-action:hover { background:rgba(0,0,0,.09); }
:is(.vlc-workspace,.vlc-widget) .vlc-reply-quote {
    display:block; width:100%; max-width:100%; text-align:start; white-space:pre-wrap;
    overflow-wrap:anywhere; background:rgba(0,0,0,.09); border:0;
    border-inline-start:3px solid currentColor; padding:8px; border-radius:8px; margin-bottom:8px; font-size:12px;
}
:is(.vlc-workspace,.vlc-widget) .vlc-reply-preview {
    display:flex; align-items:center; gap:12px; padding:12px;
    margin:8px 12px; box-sizing:border-box; min-width:0; flex-shrink:0;
    background:#fff; border:1px solid #e2e8f0; border-inline-start:3px solid var(--vlc-accent);
    border-radius:12px; color:#334155; font-size:12px; line-height:1.7;
    box-shadow:0 2px 8px rgba(15,23,42,.04);
}
:is(.vlc-workspace,.vlc-widget) .vlc-reply-preview[hidden] { display:none; }
:is(.vlc-workspace,.vlc-widget) .vlc-reply-preview-copy { min-width:0; flex:1; overflow:hidden; }
:is(.vlc-workspace,.vlc-widget) .vlc-reply-preview-heading {
    display:block; color:#334155; font-size:12px; font-weight:700;
    overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
:is(.vlc-workspace,.vlc-widget) .vlc-reply-preview-excerpt {
    display:block; margin-top:2px; color:#64748b; font-size:12px;
    overflow:hidden; text-overflow:ellipsis; white-space:nowrap; unicode-bidi:plaintext;
}
:is(.vlc-workspace,.vlc-widget) .vlc-reply-preview button {
    flex-shrink:0; min-height:40px; background:#f8fafc; color:#475569;
    border:1px solid #e2e8f0; border-radius:9px; padding:7px 10px;
    font-size:11px; line-height:1.5;
}
:is(.vlc-workspace,.vlc-widget) .vlc-reply-preview button:hover { background:#f1f5f9; border-color:#94a3b8; color:#0f172a; }
:is(.vlc-workspace,.vlc-widget) .vlc-reply-preview button:focus-visible { outline:2px solid var(--vlc-accent); outline-offset:2px; }
:is(.vlc-workspace,.vlc-widget) .vlc-reference-highlight { outline:3px solid var(--vlc-accent); outline-offset:4px; }
:is(.vlc-workspace,.vlc-widget) :is(.vlc-reply-action,.vlc-reply-quote):focus-visible { outline:2px solid currentColor; outline-offset:2px; }
.vlc-widget #vlc-start { position:relative; margin:14px 16px 14px 28px; border:1px solid var(--vlc-border); border-radius:18px 18px 18px 4px; background:#fff; }
.vlc-widget #vlc-start::after { content:''; position:absolute; bottom:14px; left:-6px; width:10px; height:10px; background:#fff; border-left:1px solid var(--vlc-border); border-bottom:1px solid var(--vlc-border); transform:rotate(45deg); }
@media(max-width:420px) { :is(.vlc-workspace,.vlc-widget) .vlc-messages { padding-inline:43px; } :is(.vlc-workspace,.vlc-widget) .vlc-msg { max-width:calc(100% - 36px); } }


.vlc-widget .vlc-message-viewport.vlc-loading-history::before {
 content:'در حال دریافت پیام‌های قدیمی‌تر…'; position:absolute; top:4px;
 inset-inline:12px; z-index:3; text-align:center; font-size:11px;
 padding:4px 8px; border-radius:12px; background:var(--vlc-light,#f1f5f9);
 color:var(--vlc-ink,#172033); pointer-events:none;
}

/* Patch 22: reactions; semantic status colours unchanged. */
.vlc-reaction-control { position:absolute; bottom:40px; display:inline-block; margin:0; font-size:18px; }
.vlc-msg-operator > .vlc-reaction-control { inset-inline-end:-34px; }
.vlc-msg-visitor > .vlc-reaction-control { inset-inline-start:-34px; }
.vlc-reaction-control summary { width:28px; height:28px; text-align:center; border-radius:50%; background:#f1f5f9; color:#475569; }
.vlc-reaction-control summary { cursor:pointer; list-style:none; opacity:0; }
.vlc-reaction-control summary::-webkit-details-marker { display:none; }
article:hover .vlc-reaction-control summary, .vlc-reaction-control:focus-within summary, .vlc-reaction-control[open] summary { opacity:1; }
.vlc-reaction-picker { position:absolute; z-index:20; bottom:100%; inset-inline-end:0; display:flex; flex-wrap:wrap; width:180px; padding:6px; gap:3px; border:1px solid #d5dae2; border-radius:12px; background:#fff; box-shadow:0 4px 16px #0002; }
.vlc-reaction-picker button,.vlc-reactions button { cursor:pointer; border:1px solid #d5dae2; border-radius:12px; background:#fff; color:#263244; padding:4px 7px; font-size:16px; }
.vlc-reactions { position:absolute; inset-inline-end:8px; bottom:-10px; display:flex; gap:3px; margin:0; z-index:2; }
.vlc-reactions:empty { display:none; }
.vlc-reactions button { display:grid; place-items:center; width:28px; height:28px; padding:0; border-radius:50%; border:1px solid rgba(148,163,184,.36); background:rgba(255,255,255,.86); color:#263244; box-shadow:0 2px 7px rgba(15,23,42,.12); backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px); font-size:16px; line-height:1; outline:none; }
.vlc-reactions button:disabled { opacity:1; cursor:default; }
.vlc-reactions button:focus-visible { outline:2px solid #6366f1; outline-offset:2px; }
.vlc-reactions button[aria-pressed="true"] { border-color:rgba(99,102,241,.45); }
.vlc-msg:has(> .vlc-reactions:not(:empty)) { margin-bottom:16px; }
.vlc-reaction-picker button { touch-action:manipulation; }
.vlc-reaction-picker button:hover { background:#eef2ff; }
.vlc-reaction-picker button:active { transform:scale(.94); }
#vlc-list [hidden] { display:none !important; }
@media (hover:none) { .vlc-reaction-control summary { opacity:1; } }

/* Patch 23: immediate, accessible search progress. */
.vlc-search-busy::before { content:''; display:inline-block; width:12px; height:12px; margin-inline-end:6px; border:2px solid #cbd5e1; border-top-color:var(--vlc-primary,#5141c8); border-radius:50%; vertical-align:middle; animation:vlc-search-spin .8s linear infinite; }
@keyframes vlc-search-spin { to { transform:rotate(360deg); } }
@media(prefers-reduced-motion:reduce) { .vlc-search-busy::before { animation:none; } }

/* Patch 24: viewport overlay, outside isolated message bubbles. */
.vlc-reaction-picker.vlc-reaction-overlay {
 position:fixed; inset:auto; margin:0; z-index:2147483647;
 box-sizing:border-box; width:204px; height:auto; overflow:auto;
 display:flex; flex-wrap:wrap; align-content:start; justify-content:center;
 font:16px/1.4 sans-serif; direction:rtl;
}
.vlc-reaction-overlay::backdrop { background:transparent; pointer-events:none; }
