/* ═══════════════════════════════════════════════════════════
   TOKENS
═══════════════════════════════════════════════════════════ */
:root {
  --bg:      #070c14;
  --surface: #0c1520;
  --card:    #101c28;
  --card2:   #162031;
  --border:  #1d2e3f;
  --accent:  #7c6df0;
  --accent2: #a78bfa;
  --glow:    rgba(124,109,240,.15);
  --glow2:   rgba(124,109,240,.08);
  --glow3:   rgba(124,109,240,.04);
  --green:   #34d399;
  --yellow:  #fbbf24;
  --red:     #f87171;
  --blue:    #60a5fa;
  --text:    #e8edf3;
  --sub:     #8fa4b8;
  --muted:   #3e5468;
  --r:       12px;
  --bnav-h:  56px;
  --sidebar-w: 224px;
  --safe-top:    env(safe-area-inset-top, 0px);
  --safe-bottom: env(safe-area-inset-bottom, 0px);
}

/* ═══════════════════════════════════════════════════════════
   RESET
═══════════════════════════════════════════════════════════ */
*,*::before,*::after { box-sizing:border-box; margin:0; padding:0 }
html { height:100%; height:-webkit-fill-available }
body {
  min-height:100%; min-height:-webkit-fill-available;
  background:var(--bg); color:var(--text);
  font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',system-ui,sans-serif;
  font-size:14px; line-height:1.5; overflow:hidden;
  -webkit-font-smoothing:antialiased;
  -webkit-tap-highlight-color:transparent;
}

/* Ambient background orbs */
body::before {
  content:''; position:fixed; pointer-events:none; z-index:0;
  top:-280px; left:-200px;
  width:800px; height:800px; border-radius:50%;
  background:radial-gradient(circle, rgba(124,109,240,.07) 0%, transparent 65%);
  filter:blur(60px);
  animation:orb-drift1 18s ease-in-out infinite alternate;
}
body::after {
  content:''; position:fixed; pointer-events:none; z-index:0;
  bottom:-300px; right:-150px;
  width:700px; height:700px; border-radius:50%;
  background:radial-gradient(circle, rgba(96,165,250,.05) 0%, transparent 65%);
  filter:blur(60px);
  animation:orb-drift2 22s ease-in-out infinite alternate;
}

a { color:inherit; text-decoration:none }
button { font-family:inherit; cursor:pointer }
::-webkit-scrollbar { width:4px; height:4px }
::-webkit-scrollbar-track { background:transparent }
::-webkit-scrollbar-thumb { background:var(--border); border-radius:99px }

/* ═══════════════════════════════════════════════════════════
   APP SHELL
═══════════════════════════════════════════════════════════ */
#app { height:100vh; height:100dvh; display:flex; overflow:hidden; position:relative; z-index:1 }

.app-shell {
  display:flex; width:100%; height:100vh; height:100dvh; overflow:hidden;
  position:relative; z-index:1;
}

/* Third ambient orb via app-shell */
.app-shell::before {
  content:''; position:fixed; pointer-events:none; z-index:0;
  top:35%; left:50%;
  width:500px; height:500px; border-radius:50%;
  background:radial-gradient(circle, rgba(139,92,246,.04) 0%, transparent 65%);
  filter:blur(60px);
  animation:orb-drift3 14s ease-in-out infinite alternate;
}

/* ═══════════════════════════════════════════════════════════
   SIDEBAR (desktop)
═══════════════════════════════════════════════════════════ */
.sidebar {
  width:var(--sidebar-w); min-width:var(--sidebar-w);
  background:rgba(10,19,30,.9);
  backdrop-filter:blur(24px); -webkit-backdrop-filter:blur(24px);
  border-right:1px solid rgba(255,255,255,.05);
  display:flex; flex-direction:column; overflow:hidden; flex-shrink:0;
  position:relative; z-index:10;
  box-shadow:inset -1px 0 0 rgba(255,255,255,.03), 4px 0 24px rgba(0,0,0,.25);
}

.sidebar-logo {
  padding:18px 16px 16px;
  display:flex; align-items:center; gap:11px;
  border-bottom:1px solid rgba(255,255,255,.05); flex-shrink:0;
  position:relative;
}

/* Pulsing rings around logo */
.sidebar-logo::before,
.sidebar-logo::after {
  content:''; position:absolute;
  left:16px; top:50%; transform:translate(0,-50%);
  width:34px; height:34px; border-radius:50%;
  border:1px solid rgba(124,109,240,.3);
  animation:logo-ring-pulse 2.8s ease-out infinite;
  pointer-events:none;
}
.sidebar-logo::after { animation-delay:1.4s; }

.logo-icon {
  width:34px; height:34px; border-radius:10px; flex-shrink:0;
  background:linear-gradient(135deg,#7c6df0,#a78bfa);
  display:flex; align-items:center; justify-content:center;
  font-size:16px; font-weight:800; color:#fff;
  box-shadow:0 4px 16px rgba(124,109,240,.45), 0 0 0 1px rgba(255,255,255,.1) inset;
  position:relative; z-index:1;
}
.logo-name { font-size:15px; font-weight:700; color:var(--text); line-height:1.2; letter-spacing:-.2px }
.logo-sub  { font-size:10px; color:var(--sub); letter-spacing:.5px; text-transform:uppercase; opacity:.7 }

.sidebar-nav { padding:10px 8px; flex:1; overflow-y:auto }

.nav-item {
  display:flex; align-items:center; gap:10px;
  padding:9px 12px; border-radius:9px; cursor:pointer;
  color:var(--sub); transition:all .18s; margin-bottom:2px;
  font-size:13px; font-weight:500; user-select:none;
  border:1px solid transparent; position:relative;
}
.nav-item::before {
  content:''; position:absolute;
  left:0; top:50%; transform:translateY(-50%);
  width:3px; height:0; border-radius:0 3px 3px 0;
  background:var(--accent2);
  transition:height .2s cubic-bezier(.34,1.3,.64,1);
}
.nav-item:hover  { background:rgba(255,255,255,.04); color:var(--text) }
.nav-item.active {
  background:var(--glow); color:var(--accent2);
  border-color:rgba(124,109,240,.18);
  box-shadow:0 2px 12px rgba(124,109,240,.08);
}
.nav-item.active::before { height:20px }
.nav-item svg { width:16px; height:16px; flex-shrink:0; opacity:.65; transition:opacity .18s }
.nav-item:hover svg { opacity:.85 }
.nav-item.active svg { opacity:1 }
.nav-item span { flex:1 }

.sidebar-footer {
  padding:10px 8px calc(10px + var(--safe-bottom));
  border-top:1px solid rgba(255,255,255,.05); flex-shrink:0;
}
.svc-label {
  font-size:10px; color:var(--muted); text-transform:uppercase;
  letter-spacing:.6px; font-weight:600; padding:0 6px 6px;
}
.svc-row {
  display:flex; align-items:center; justify-content:space-between;
  padding:3px 6px; border-radius:5px;
}
.svc-name { font-size:11px; color:var(--sub) }

.btn-logout {
  display:flex; align-items:center; gap:7px; width:100%;
  margin-top:8px; padding:8px 10px; border-radius:8px;
  background:none; border:1px solid rgba(255,255,255,.06);
  color:var(--muted); font-size:12px; font-weight:500; transition:all .18s;
}
.btn-logout:hover { border-color:rgba(248,113,113,.4); color:var(--red); background:rgba(248,113,113,.06) }

/* ═══════════════════════════════════════════════════════════
   MAIN CONTENT AREA
═══════════════════════════════════════════════════════════ */
.main-area { flex:1; display:flex; flex-direction:column; overflow:hidden; min-width:0; position:relative; z-index:1 }

/* ═══════════════════════════════════════════════════════════
   TOPBAR
═══════════════════════════════════════════════════════════ */
.topbar {
  height:52px; min-height:52px;
  padding:0 18px; border-bottom:1px solid rgba(255,255,255,.05);
  display:flex; align-items:center; justify-content:space-between;
  background:rgba(10,18,28,.85);
  backdrop-filter:blur(20px); -webkit-backdrop-filter:blur(20px);
  flex-shrink:0; gap:12px;
  box-shadow:0 1px 0 rgba(255,255,255,.03), 0 4px 20px rgba(0,0,0,.2);
}
.topbar-left  { display:flex; align-items:center; gap:10px; min-width:0 }
.topbar-title {
  font-size:15px; font-weight:600; color:var(--text);
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.topbar-right { display:flex; align-items:center; gap:8px; flex-shrink:0 }

/* ═══════════════════════════════════════════════════════════
   VIEW CONTAINER
═══════════════════════════════════════════════════════════ */
.view-container { flex:1; overflow:hidden; display:flex; flex-direction:column; min-height:0 }

/* ═══════════════════════════════════════════════════════════
   BOTTOM NAV (mobile)
═══════════════════════════════════════════════════════════ */
.bottom-nav {
  display:none;
  position:fixed; bottom:0; left:0; right:0;
  height:calc(var(--bnav-h) + var(--safe-bottom));
  padding-bottom:var(--safe-bottom);
  background:rgba(9,15,24,.96); backdrop-filter:blur(24px);
  -webkit-backdrop-filter:blur(24px);
  border-top:1px solid rgba(255,255,255,.05);
  z-index:100; justify-content:space-around; align-items:center;
  box-shadow:0 -4px 24px rgba(0,0,0,.35);
}
.bnav-item {
  flex:1; display:flex; flex-direction:column;
  align-items:center; justify-content:center; gap:3px;
  height:var(--bnav-h); cursor:pointer;
  color:var(--muted); transition:color .18s; min-width:0;
}
.bnav-item.active { color:var(--accent2) }
.bnav-item svg { width:22px; height:22px }
.bnav-label { font-size:10px; font-weight:500; letter-spacing:.1px }

/* ═══════════════════════════════════════════════════════════
   ROUTE TRANSITIONS
═══════════════════════════════════════════════════════════ */
.fade-enter-active, .fade-leave-active { transition:opacity .15s ease }
.fade-enter-from, .fade-leave-to { opacity:0 }
.slide-up-enter-active { transition:all .22s cubic-bezier(.34,1.2,.64,1) }
.slide-up-leave-active { transition:all .15s ease }
.slide-up-enter-from { opacity:0; transform:translateY(8px) }
.slide-up-leave-to   { opacity:0; transform:translateY(-4px) }

/* ═══════════════════════════════════════════════════════════
   ── CHAT ──
═══════════════════════════════════════════════════════════ */
.chat-page { display:flex; flex:1; overflow:hidden; min-height:0 }

/* Context panel */
.ctx-panel {
  width:196px; min-width:196px; flex-shrink:0;
  background:rgba(10,19,30,.85);
  backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px);
  border-right:1px solid rgba(255,255,255,.05);
  display:flex; flex-direction:column; overflow:hidden;
}
.ctx-panel-head {
  padding:12px 12px 10px;
  border-bottom:1px solid rgba(255,255,255,.05);
  display:flex; align-items:center; justify-content:space-between; flex-shrink:0;
}
.ctx-head-title {
  font-size:11px; font-weight:600; color:var(--sub);
  text-transform:uppercase; letter-spacing:.6px;
}
.ctx-list { flex:1; overflow-y:auto; padding:6px }
.ctx-item {
  display:flex; align-items:center; gap:8px;
  padding:9px 10px; border-radius:8px; cursor:pointer;
  font-size:13px; color:var(--sub); transition:all .15s;
  border:1px solid transparent; margin-bottom:2px; min-height:38px;
}
.ctx-item:hover  { background:rgba(255,255,255,.04); color:var(--text) }
.ctx-item.active { background:var(--glow); color:var(--accent2); border-color:rgba(124,109,240,.2) }
.ctx-dot { width:6px; height:6px; border-radius:50%; background:var(--muted); flex-shrink:0 }
.ctx-item.active .ctx-dot { background:var(--accent2) }
.ctx-label { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; line-height:1.4 }
.ctx-empty { padding:16px 10px; font-size:12px; color:var(--muted); text-align:center }

/* Pin button on ctx-item */
.ctx-pin {
  background:none; border:none; color:var(--muted); cursor:pointer;
  font-size:13px; padding:2px 3px; flex-shrink:0; line-height:1;
  opacity:0; transition:opacity .15s, color .15s;
}
.ctx-item:hover .ctx-pin { opacity:1 }
.ctx-pin.active { opacity:1; color:#fbbf24 }

/* Chat main */
.chat-main { flex:1; display:flex; flex-direction:column; overflow:hidden; min-width:0 }

.chat-topbar {
  height:52px; min-height:52px; padding:0 16px;
  border-bottom:1px solid rgba(255,255,255,.05);
  display:flex; align-items:center; justify-content:space-between;
  background:rgba(10,18,28,.85);
  backdrop-filter:blur(20px); -webkit-backdrop-filter:blur(20px);
  flex-shrink:0; gap:10px;
  box-shadow:0 1px 0 rgba(255,255,255,.03);
}
.chat-title {
  font-size:15px; font-weight:600; color:var(--text);
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1;
  cursor:pointer; transition:color .15s; min-width:0;
}
.chat-title:hover { color:var(--accent2) }
.chat-topbar-right { display:flex; align-items:center; gap:6px; flex-shrink:0 }

/* Messages */
.messages-wrap { flex:1; overflow-y:auto; padding:20px; display:flex; flex-direction:column; gap:14px; scroll-behavior:smooth }
.msg { display:flex; gap:10px; max-width:100% }
.msg.user { flex-direction:row-reverse }

.msg-avatar {
  width:30px; height:30px; border-radius:8px; flex-shrink:0;
  display:flex; align-items:center; justify-content:center;
  font-size:11px; font-weight:700; align-self:flex-end; margin-bottom:20px;
}
.msg.user      .msg-avatar { background:linear-gradient(135deg,#7c6df0,#a78bfa); color:#fff; box-shadow:0 3px 10px rgba(124,109,240,.3) }
.msg.assistant .msg-avatar { background:var(--card2); color:var(--accent2); border:1px solid var(--border) }

.msg-body { display:flex; flex-direction:column; max-width:78%; min-width:0 }
.msg.user .msg-body { align-items:flex-end }

.msg-name { font-size:11px; color:var(--sub); margin-bottom:3px; padding:0 2px }

.msg-bubble {
  padding:10px 14px; border-radius:14px; line-height:1.65;
  word-break:break-word; hyphens:auto; font-size:14px;
}
.msg.user .msg-bubble {
  background:linear-gradient(135deg,#7c6df0,#5a4fcf); color:#fff;
  border-radius:14px 14px 3px 14px;
  box-shadow:0 4px 16px rgba(124,109,240,.25);
}
.msg.assistant .msg-bubble {
  background:rgba(16,28,40,.9); color:var(--text);
  border:1px solid rgba(255,255,255,.07); border-radius:14px 14px 14px 3px;
  box-shadow:0 2px 12px rgba(0,0,0,.2);
}

.msg-bubble pre {
  background:rgba(0,0,0,.45); border:1px solid var(--border);
  border-radius:8px; padding:10px 12px; margin:8px 0;
  overflow-x:auto; font-size:12px; line-height:1.5;
  font-family:'SF Mono','Fira Code',monospace;
}
.msg-bubble code {
  background:rgba(0,0,0,.3); padding:1px 5px; border-radius:4px;
  font-family:'SF Mono','Fira Code',monospace; font-size:12px;
}
.msg-bubble pre code { background:none; padding:0 }
.msg-bubble p   { margin:4px 0 }
.msg-bubble h1,.msg-bubble h2,.msg-bubble h3 { font-size:14px; font-weight:600; margin:10px 0 5px; color:var(--accent2) }
.msg.user .msg-bubble h1,.msg.user .msg-bubble h2,.msg.user .msg-bubble h3 { color:rgba(255,255,255,.9) }
.msg-bubble ul,.msg-bubble ol { padding-left:18px; margin:5px 0 }
.msg-bubble li { margin:2px 0 }
.msg-bubble table { border-collapse:collapse; width:100%; margin:8px 0; font-size:12px }
.msg-bubble th,.msg-bubble td { border:1px solid var(--border); padding:5px 8px }
.msg-bubble th { background:rgba(0,0,0,.3); font-weight:600; color:var(--accent2) }
.msg-bubble hr { border:none; border-top:1px solid var(--border); margin:10px 0 }
.msg-bubble a { color:var(--accent2) }

.msg-streaming .msg-bubble::after {
  content:'▋'; display:inline-block; animation:blink .7s infinite; color:var(--accent2); margin-left:2px;
}
.msg.user .msg-streaming .msg-bubble::after { color:rgba(255,255,255,.7) }
.msg-time { font-size:10px; color:var(--muted) }

/* Chat input */
.chat-input-area {
  padding:10px 16px 12px; border-top:1px solid rgba(255,255,255,.05);
  background:rgba(9,16,25,.9);
  backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px);
  flex-shrink:0; position:relative;
}

.input-toolbar {
  display:flex; align-items:center; justify-content:space-between;
  gap:8px; margin-bottom:8px;
}
.input-modes { display:flex; gap:3px; flex-shrink:0 }
.mode-btn {
  padding:3px 10px; border-radius:7px; cursor:pointer;
  background:none; border:1px solid rgba(255,255,255,.07);
  color:var(--muted); font-size:11px; font-weight:600;
  font-family:'SF Mono','Fira Code',monospace;
  transition:all .15s; letter-spacing:.2px; white-space:nowrap;
}
.mode-btn:hover  { color:var(--sub); border-color:rgba(124,109,240,.3) }
.mode-btn.active              { background:var(--glow); color:var(--accent2); border-color:rgba(124,109,240,.4) }
.mbtn-dev.active              { background:rgba(52,211,153,.1); color:var(--green); border-color:rgba(52,211,153,.3) }
.mbtn-admin.active            { background:rgba(251,191,36,.1); color:var(--yellow); border-color:rgba(251,191,36,.3) }

/* Mode switcher button in topbar */
.mode-switcher-btn {
  font-size:11px; font-weight:700; padding:3px 9px; border-radius:7px;
  font-family:'SF Mono','Fira Code',monospace; letter-spacing:.3px; flex-shrink:0;
  border:none; cursor:pointer; display:flex; align-items:center; gap:5px;
  transition:filter .15s, opacity .15s;
}
.mode-switcher-btn:hover { filter:brightness(1.15); opacity:.9; }
.mode-switcher-btn.mode-chat  { background:var(--glow); color:var(--accent2); border:1px solid rgba(124,109,240,.3) }
.mode-switcher-btn.mode-dev   { background:rgba(52,211,153,.1); color:var(--green); border:1px solid rgba(52,211,153,.25) }
.mode-switcher-btn.mode-admin { background:rgba(251,191,36,.1); color:var(--yellow); border:1px solid rgba(251,191,36,.25) }
.mode-switcher-btn.mode-test  { background:rgba(251,146,60,.1); color:#fb923c; border:1px solid rgba(251,146,60,.25) }
.mode-entity-chip { font-weight:400; opacity:.75; font-size:10px; max-width:120px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* Mode dot for mobile dropdown */
.mode-dot { display:inline-block; width:8px; height:8px; border-radius:50%; flex-shrink:0; }
.mode-dot-chat  { background:var(--accent2); }
.mode-dot-dev   { background:var(--green); }
.mode-dot-admin { background:var(--yellow); }
.mode-dot-test  { background:#fb923c; }

/* Mode tabs inside modal */
.mode-tabs {
  display:flex; gap:6px; padding:0 20px 16px; border-bottom:1px solid rgba(255,255,255,.05);
  flex-wrap:wrap;
}
.mode-tab {
  font-size:12px; font-weight:700; padding:5px 14px; border-radius:8px;
  font-family:'SF Mono','Fira Code',monospace; letter-spacing:.3px;
  border:1px solid rgba(255,255,255,.07); background:transparent; color:var(--sub);
  cursor:pointer; transition:all .15s;
}
.mode-tab:hover { color:var(--text); border-color:var(--sub); }
.mode-tab-chat.active  { background:var(--glow); color:var(--accent2); border-color:rgba(124,109,240,.4); }
.mode-tab-dev.active   { background:rgba(52,211,153,.12); color:var(--green); border-color:rgba(52,211,153,.35); }
.mode-tab-admin.active { background:rgba(251,191,36,.12); color:var(--yellow); border-color:rgba(251,191,36,.35); }
.mode-tab-test.active  { background:rgba(251,146,60,.12); color:#fb923c; border-color:rgba(251,146,60,.35); }

/* "Новый" item in entity list */
.dev-entity-new { color:var(--accent2); font-style:italic; border:1px dashed rgba(124,109,240,.3) !important; }
.dev-entity-new:hover { background:var(--glow) !important; }

/* Mode tag on user message */
.msg-mode-tag {
  font-size:9px; font-weight:700; padding:1px 5px; border-radius:5px;
  font-family:'SF Mono','Fira Code',monospace; letter-spacing:.2px;
  vertical-align:middle; margin-left:5px; opacity:.75;
}
.msg-mode-tag.mode-chat  { background:var(--glow); color:var(--accent2) }
.msg-mode-tag.mode-dev   { background:rgba(52,211,153,.12); color:var(--green) }
.msg-mode-tag.mode-admin { background:rgba(251,191,36,.12); color:var(--yellow) }

.chat-status {
  font-size:12px; color:var(--sub);
  display:flex; align-items:center; gap:6px; min-height:16px;
}
.rec-dot {
  width:7px; height:7px; border-radius:50%;
  background:var(--red); flex-shrink:0; animation:pulse .9s infinite;
}
.typing-dots span {
  display:inline-block; width:4px; height:4px; border-radius:50%;
  background:var(--accent2); animation:typing 1.2s infinite;
}
.typing-dots span:nth-child(2) { animation-delay:.2s }
.typing-dots span:nth-child(3) { animation-delay:.4s }

.input-wrap {
  display:flex; flex-direction:column;
  background:rgba(16,28,40,.95); border:1px solid rgba(255,255,255,.07);
  border-radius:14px; padding:12px 10px 8px 14px;
  transition:border-color .2s, box-shadow .2s;
  box-shadow:0 2px 12px rgba(0,0,0,.2);
}
.input-wrap:focus-within {
  border-color:rgba(124,109,240,.45);
  box-shadow:0 0 0 3px rgba(124,109,240,.07), 0 2px 12px rgba(0,0,0,.2);
}
.input-wrap.recording {
  border-color:rgba(248,113,113,.5);
  box-shadow:0 0 0 3px rgba(248,113,113,.07);
}

.chat-textarea {
  background:none; border:none; outline:none;
  color:var(--text); font-size:15px; line-height:1.55;
  resize:none; max-height:200px; min-height:22px;
  font-family:inherit; overflow-y:auto; width:100%;
}
.chat-textarea::placeholder { color:var(--muted); font-size:14px }

.interim-text {
  font-size:13px; color:var(--muted); font-style:italic;
  padding:4px 0 2px; line-height:1.4;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}

.input-actions {
  display:flex; align-items:center; justify-content:flex-end;
  gap:4px; padding-top:6px;
}

.btn-mic {
  min-width:32px; height:32px; border-radius:8px;
  border:1px solid rgba(255,255,255,.07); color:var(--sub);
}
.btn-mic:hover { color:var(--accent2); border-color:rgba(124,109,240,.4) }
.btn-mic.active {
  color:var(--red); border-color:rgba(248,113,113,.45);
  background:rgba(248,113,113,.08); animation:mic-pulse 1.2s ease infinite;
}

.input-hint {
  font-size:10px; color:var(--muted); text-align:right;
  margin-top:5px; opacity:.5;
}

/* Slash commands menu */
.slash-menu {
  position:absolute; bottom:calc(100% + 4px); left:16px; right:16px; z-index:50;
  background:rgba(16,28,40,.97); border:1px solid rgba(255,255,255,.08); border-radius:10px;
  overflow:hidden;
  box-shadow:0 8px 32px rgba(0,0,0,.5);
  backdrop-filter:blur(12px); -webkit-backdrop-filter:blur(12px);
}
.slash-item {
  display:flex; align-items:center; gap:9px; padding:9px 13px;
  cursor:pointer; font-size:13px; color:var(--sub); transition:background .1s;
}
.slash-item.selected,
.slash-item:hover { background:rgba(124,109,240,.08); color:var(--text) }
.slash-name { font-family:'SF Mono','Fira Code',monospace; font-size:12px }

.btn-attach {
  min-width:32px; height:32px; border-radius:8px;
  border:1px solid rgba(255,255,255,.07); color:var(--sub);
}
.btn-attach:hover { color:var(--accent2); border-color:rgba(124,109,240,.4) }
.btn-attach:disabled { opacity:.35; cursor:not-allowed; }

.attach-chips { display:flex; flex-wrap:wrap; gap:5px; padding:0 0 8px; }
.attach-chip {
  display:inline-flex; align-items:center; gap:5px; max-width:220px;
  background:rgba(16,28,40,.9); border:1px solid rgba(124,109,240,.35);
  border-radius:7px; padding:3px 8px; font-size:11.5px; color:var(--accent2);
}
.attach-chip.chip-err { border-color:rgba(248,113,113,.45); color:var(--red) }
.attach-chip.chip-uploading { border-color:rgba(251,191,36,.4); color:var(--yellow) }
.chip-name { overflow:hidden; white-space:nowrap; text-overflow:ellipsis; max-width:130px }
.chip-info { color:var(--muted); font-size:10px; flex-shrink:0 }
.chip-remove { cursor:pointer; color:var(--muted); background:none; border:none; font-size:11px; padding:0 2px; flex-shrink:0; line-height:1 }
.chip-remove:hover { color:var(--red) }

.msg-files { display:flex; flex-wrap:wrap; gap:4px; margin-top:5px }
.msg-file-tag {
  display:inline-flex; align-items:center; gap:3px;
  background:rgba(52,211,153,.08); border:1px solid rgba(52,211,153,.25);
  color:var(--green); border-radius:5px; padding:1px 7px;
  font-size:11px; font-family:'SF Mono','Fira Code',monospace;
}

/* Empty chat state */
.chat-empty {
  flex:1; display:flex; flex-direction:column;
  align-items:center; justify-content:center; gap:14px;
  color:var(--muted); padding:40px 20px; text-align:center;
}
.chat-empty svg { width:48px; height:48px; opacity:.2 }
.chat-empty h3 { font-size:16px; font-weight:600; color:var(--sub) }
.chat-empty p  { font-size:13px; line-height:1.6 }

/* Suggested prompts */
.prompt-cards-wrap {
  flex:none; display:flex; flex-direction:column; align-items:center;
  padding:40px 20px 20px; gap:16px;
}
.prompt-cards-title {
  font-size:13px; color:var(--muted); font-weight:500;
}
.prompt-cards {
  display:grid; grid-template-columns:1fr 1fr; gap:10px; width:100%; max-width:520px;
}
.prompt-card {
  display:flex; align-items:center; gap:10px;
  background:rgba(16,28,40,.9); border:1px solid rgba(255,255,255,.06);
  border-radius:10px; padding:12px 14px; cursor:pointer;
  text-align:left; transition:all .18s; font-family:inherit;
  position:relative; overflow:hidden;
}
.prompt-card::before {
  content:''; position:absolute; inset:0;
  background:linear-gradient(135deg, var(--glow2), transparent);
  opacity:0; transition:opacity .18s;
}
.prompt-card:hover { border-color:rgba(124,109,240,.35); background:rgba(20,32,46,.95) }
.prompt-card:hover::before { opacity:1 }
.prompt-icon { font-size:18px; flex-shrink:0; }
.prompt-text { font-size:12px; color:var(--sub); line-height:1.4; }

/* ═══════════════════════════════════════════════════════════
   ── TOOLS ──
═══════════════════════════════════════════════════════════ */
.tools-page { display:flex; flex-direction:column; flex:1; overflow:hidden }
.tools-content { flex:1; overflow-y:auto; }

.search-bar {
  padding:12px 18px; border-bottom:1px solid rgba(255,255,255,.05);
  background:rgba(10,18,28,.7); display:flex; align-items:center; gap:10px; flex-shrink:0;
}
.search-input-wrap {
  flex:1; background:rgba(16,28,40,.9); border:1px solid rgba(255,255,255,.07);
  border-radius:9px; padding:8px 12px;
  display:flex; align-items:center; gap:8px; transition:border-color .18s, box-shadow .18s;
}
.search-input-wrap:focus-within { border-color:rgba(124,109,240,.4); box-shadow:0 0 0 3px rgba(124,109,240,.06) }
.search-input-wrap input {
  background:none; border:none; outline:none;
  color:var(--text); font-size:16px; width:100%; font-family:inherit;
}
.search-input-wrap input::placeholder { color:var(--muted); font-size:14px }
.count-tag { font-size:12px; color:var(--sub); white-space:nowrap }

/* Заголовок группы категории */
.tool-section-title {
  display:flex; align-items:center; gap:8px;
  font-size:11px; font-weight:700; color:var(--muted);
  text-transform:uppercase; letter-spacing:.6px;
  padding:16px 18px 6px;
}
.tool-section-count {
  background:var(--card2); border:1px solid var(--border);
  border-radius:99px; font-size:10px; padding:1px 6px;
  color:var(--sub); font-weight:500; letter-spacing:0;
}

.tools-grid {
  padding:4px 18px 12px;
  display:grid; grid-template-columns:repeat(auto-fill,minmax(260px,1fr));
  gap:10px; align-content:start;
}
.tool-card {
  background:rgba(16,28,40,.85); border:1px solid rgba(255,255,255,.06);
  border-radius:12px; padding:14px 16px; cursor:pointer;
  transition:border-color .18s, transform .15s, box-shadow .18s;
  position:relative; overflow:hidden; min-height:72px;
  display:flex; flex-direction:column;
  box-shadow:0 2px 8px rgba(0,0,0,.2);
}
.tool-card::before {
  content:''; position:absolute; inset:0;
  background:linear-gradient(135deg, rgba(124,109,240,.09), transparent 60%);
  opacity:0; transition:opacity .18s;
}
.tool-card::after {
  content:''; position:absolute; inset:0;
  background:linear-gradient(90deg, transparent 0%, rgba(255,255,255,.04) 45%, rgba(255,255,255,.04) 55%, transparent 100%);
  transform:translateX(-100%); pointer-events:none;
}
.tool-card:hover { border-color:rgba(124,109,240,.3); transform:translateY(-2px); box-shadow:0 8px 28px rgba(0,0,0,.35), 0 0 0 1px rgba(124,109,240,.1) }
.tool-card:hover::before { opacity:1 }
.tool-card:hover::after { animation:card-shimmer .7s linear forwards }
.tool-card:active { transform:scale(.98); transition-duration:.07s }
.tool-name { font-size:12px; font-weight:600; color:var(--text); font-family:'SF Mono','Fira Code',monospace; margin-bottom:5px }
.tool-title    { font-size:13px; font-weight:600; color:var(--text); margin-bottom:2px; line-height:1.3; position:relative; z-index:1 }
.tool-techname { font-size:10px; color:var(--muted); font-family:'SF Mono','Fira Code',monospace; margin-bottom:5px; position:relative; z-index:1 }
.tool-desc     { font-size:12px; color:var(--sub); line-height:1.5; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; margin-bottom:6px; position:relative; z-index:1 }
.tool-last-run { font-size:10px; color:var(--muted); margin-top:auto; padding-top:4px; position:relative; z-index:1 }
.tool-run-count { color:var(--muted); }

/* Кнопка "Запустить" в модале */
.btn-launch {
  background:linear-gradient(135deg, var(--accent), #5a4fcf); color:#fff; border:none;
  border-radius:7px; padding:5px 12px; font-size:12px;
  font-weight:600; cursor:pointer; transition:opacity .15s, box-shadow .15s; white-space:nowrap;
  box-shadow:0 2px 10px rgba(124,109,240,.3);
}
.btn-launch:hover { opacity:.9; box-shadow:0 4px 16px rgba(124,109,240,.4); }

/* Поиск в dev-modal */
.dev-modal-search-wrap { padding:0 0 10px; }

/* ═══════════════════════════════════════════════════════════
   ── MODAL ──
═══════════════════════════════════════════════════════════ */
.modal-overlay {
  position:fixed; inset:0; background:rgba(0,0,0,.7);
  display:flex; align-items:center; justify-content:center;
  z-index:300; padding:20px;
  backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
}
.modal {
  background:rgba(13,22,34,.97); border:1px solid rgba(255,255,255,.08);
  border-radius:18px; width:100%; max-width:700px; max-height:82vh;
  display:flex; flex-direction:column; overflow:hidden;
  animation:modal-in .2s cubic-bezier(.34,1.4,.64,1);
  box-shadow:0 40px 80px rgba(0,0,0,.6), inset 0 1px 0 rgba(255,255,255,.06);
  backdrop-filter:blur(20px); -webkit-backdrop-filter:blur(20px);
}
.modal-head {
  padding:16px 20px; border-bottom:1px solid rgba(255,255,255,.06);
  display:flex; align-items:center; justify-content:space-between; flex-shrink:0;
}
.modal-drag-handle { display:none; width:36px; height:4px; background:rgba(255,255,255,.12); border-radius:99px; margin:10px auto 0 }
.modal-title { font-size:14px; font-weight:600; font-family:'SF Mono','Fira Code',monospace; color:var(--text) }
.modal-body { padding:20px; overflow-y:auto; flex:1 }

/* Markdown content */
.md { line-height:1.75; color:var(--sub); font-size:13px }
.md h1 { font-size:17px; font-weight:700; color:var(--text); margin:0 0 14px }
.md h2 { font-size:14px; font-weight:600; color:var(--accent2); margin:18px 0 8px }
.md h3 { font-size:13px; font-weight:600; color:var(--text); margin:14px 0 6px }
.md p  { margin:6px 0 }
.md code { background:rgba(0,0,0,.35); padding:2px 6px; border-radius:5px; font-size:12px; font-family:'SF Mono','Fira Code',monospace; color:var(--accent2) }
.md pre { background:rgba(4,10,18,.8); border:1px solid var(--border); border-radius:9px; padding:12px; margin:10px 0; overflow-x:auto }
.md pre code { background:none; padding:0; color:var(--text) }
.md ul,.md ol { padding-left:20px; margin:6px 0 }
.md li { margin:3px 0 }
.md table { border-collapse:collapse; width:100%; margin:10px 0; font-size:12px }
.md th,.md td { border:1px solid var(--border); padding:6px 10px }
.md th { background:rgba(0,0,0,.3); font-weight:600; color:var(--accent2) }
.md strong { color:var(--text) }
.md hr { border:none; border-top:1px solid var(--border); margin:14px 0 }
.md a { color:var(--accent2) }

/* ═══════════════════════════════════════════════════════════
   ── WEB PROJECTS ──
═══════════════════════════════════════════════════════════ */
.catalog-page { display:flex; flex-direction:column; flex:1; overflow:hidden }
.catalog-tabs-bar {
  display:flex; gap:2px; padding:10px 14px 0;
  background:rgba(10,18,28,.7); flex-shrink:0;
  border-bottom:1px solid rgba(255,255,255,.05);
}
.ctab {
  padding:7px 18px 8px; border:none; background:none;
  color:var(--muted); font-size:13px; font-weight:500; font-family:inherit;
  cursor:pointer; border-radius:8px 8px 0 0;
  border-bottom:2px solid transparent;
  transition:color .18s, border-color .18s;
}
.ctab:hover { color:var(--text) }
.ctab.active { color:var(--accent2); border-bottom-color:var(--accent2) }

.projects-page { display:flex; flex-direction:column; flex:1; overflow:hidden }
.projects-grid {
  padding:16px 18px; overflow-y:auto; flex:1;
  display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr));
  gap:12px; align-content:start;
}
.project-card {
  background:rgba(16,28,40,.85); border:1px solid rgba(255,255,255,.06);
  border-radius:14px; padding:18px 20px;
  transition:border-color .18s, box-shadow .18s, transform .15s;
  position:relative; overflow:hidden;
  box-shadow:0 2px 12px rgba(0,0,0,.2);
}
.project-card::after {
  content:''; position:absolute; top:0; left:0; right:0; height:2px;
  background:linear-gradient(90deg,#7c6df0,#a78bfa,#60a5fa); opacity:0; transition:opacity .2s;
}
.project-card::before {
  content:''; position:absolute; inset:0;
  background:linear-gradient(135deg, rgba(124,109,240,.06), transparent 60%);
  opacity:0; transition:opacity .18s;
}
.project-card:hover { border-color:rgba(124,109,240,.25); transform:translateY(-2px); box-shadow:0 10px 30px rgba(0,0,0,.35) }
.project-card:hover::after { opacity:1 }
.project-card:hover::before { opacity:1 }
.project-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:12px; position:relative; z-index:1 }
.project-name { font-size:15px; font-weight:700 }
.status-pill {
  font-size:11px; font-weight:500; padding:3px 9px; border-radius:99px;
  display:flex; align-items:center; gap:5px;
}
.status-pill.on  { background:rgba(52,211,153,.1); color:var(--green); border:1px solid rgba(52,211,153,.2) }
.status-pill.off { background:rgba(248,113,113,.08); color:var(--red); border:1px solid rgba(248,113,113,.18) }
.status-dot { width:5px; height:5px; border-radius:50%; background:currentColor }
.status-pill.on  .status-dot { box-shadow:0 0 6px currentColor; animation:status-glow 2s infinite }
.project-meta { display:flex; flex-direction:column; gap:5px; margin-bottom:14px; position:relative; z-index:1 }
.meta-row { display:flex; align-items:center; gap:7px; font-size:12px; color:var(--sub) }
.meta-icon { width:13px; height:13px; opacity:.55; flex-shrink:0 }
.project-actions { display:flex; gap:8px; position:relative; z-index:1 }

/* ═══════════════════════════════════════════════════════════
   ── SPRINTS PAGE ──
═══════════════════════════════════════════════════════════ */
.sprints-page { display:flex; flex-direction:column; flex:1; overflow:hidden }

.sp-filter-tabs { display:flex; gap:2px; background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.07); border-radius:8px; padding:2px }
.sp-tab { background:none; border:none; color:var(--sub); font-size:12px; padding:4px 10px; border-radius:6px; cursor:pointer; transition:all .15s }
.sp-tab.active { background:rgba(255,255,255,.08); color:var(--text) }

.sp-list { flex:1; overflow-y:auto; padding:14px 16px; display:flex; flex-direction:column; gap:10px }
.sp-empty { color:var(--sub); font-size:13px; text-align:center; padding:40px 0 }

.sp-card {
  background:rgba(16,28,40,.85); border:1px solid rgba(255,255,255,.06); border-radius:12px;
  padding:14px 16px; display:flex; flex-direction:column; gap:7px;
  transition:border-color .18s, background .18s, transform .15s;
  box-shadow:0 2px 8px rgba(0,0,0,.15);
}
.sp-card.clickable { cursor:pointer }
.sp-card.clickable:hover { border-color:rgba(124,109,240,.3); background:rgba(20,33,48,.95); transform:translateY(-1px) }

.sp-card-head { display:flex; align-items:center; justify-content:space-between; gap:8px }
.sp-id-row { display:flex; align-items:center; gap:7px; flex-wrap:wrap }
.sp-id { font-size:11px; font-weight:600; color:var(--accent2); font-family:monospace; letter-spacing:.03em }
.sp-type { font-size:10px }

.sp-chat-link { display:flex; align-items:center; gap:4px; font-size:11px; color:var(--accent); opacity:.75; flex-shrink:0 }
.sp-card.clickable:hover .sp-chat-link { opacity:1 }

.sp-title  { font-size:13px; font-weight:600; color:var(--text); line-height:1.4 }
.sp-entity { font-size:11px; color:var(--accent2); opacity:.7 }
.sp-goal   { font-size:12px; color:var(--sub); line-height:1.5 }

.sp-progress { display:flex; align-items:center; gap:10px; margin-top:2px }
.sp-progress-bar  { flex:1; height:3px; background:rgba(255,255,255,.06); border-radius:99px; overflow:hidden }
.sp-progress-fill {
  height:100%; background:linear-gradient(90deg, var(--accent) 0%, var(--accent2) 100%);
  border-radius:99px; transition:width .4s cubic-bezier(.4,0,.2,1);
  position:relative; overflow:hidden;
}
.sp-progress-fill::after {
  content:''; position:absolute; inset:0;
  background:linear-gradient(90deg, transparent 0%, rgba(255,255,255,.3) 50%, transparent 100%);
  animation:shimmer 2s linear infinite; transform:translateX(-100%);
}
.sp-progress-label { font-size:11px; color:var(--sub); flex-shrink:0 }

/* ═══════════════════════════════════════════════════════════
   ── OUTPUT PAGE ──
═══════════════════════════════════════════════════════════ */
.output-page { display:flex; flex-direction:column; flex:1; overflow:hidden }

.output-filters {
  display:flex; gap:8px; align-items:center;
  padding:10px 16px; border-bottom:1px solid rgba(255,255,255,.05); flex-shrink:0;
}
.output-search-wrap {
  flex:1; display:flex; align-items:center; gap:7px;
  background:rgba(16,28,40,.9); border:1px solid rgba(255,255,255,.07); border-radius:8px;
  padding:0 10px; height:32px; min-width:0;
}
.output-search {
  flex:1; background:none; border:none; outline:none;
  font-size:13px; color:var(--text); min-width:0;
}
.output-search::placeholder { color:var(--muted) }
.output-select {
  background:rgba(16,28,40,.9); border:1px solid rgba(255,255,255,.07); border-radius:8px;
  color:var(--sub); font-size:12px; height:32px; padding:0 8px;
  cursor:pointer; outline:none; flex-shrink:0;
}

.output-content { flex:1; overflow-y:auto; }
.output-list { display:flex; flex-direction:column; }
.output-item {
  display:flex; align-items:center; gap:12px;
  padding:10px 16px; cursor:pointer; transition:background .12s;
  border-bottom:1px solid rgba(255,255,255,.04);
}
.output-item:hover { background:rgba(255,255,255,.03) }
.output-item-left { display:flex; align-items:center; gap:10px; min-width:0; flex:1 }
.output-item-info { display:flex; flex-direction:column; gap:2px; min-width:0 }
.output-item-name {
  font-size:13px; color:var(--text); font-family:'SF Mono','Fira Code',monospace;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.output-item-meta { display:flex; align-items:center; gap:8px; flex-wrap:wrap }
.output-tool { font-size:11px; color:var(--accent2) }
.output-date,.output-size { font-size:11px; color:var(--muted) }

.output-empty {
  display:flex; flex-direction:column; align-items:center;
  justify-content:center; padding:60px 20px; gap:10px;
}

.output-json {
  font-family:'SF Mono','Fira Code',monospace; font-size:12px; line-height:1.5;
  color:var(--text); background:rgba(4,10,18,.8); border-radius:8px;
  padding:14px; overflow:auto; max-height:60vh;
  border:1px solid var(--border); white-space:pre; margin:0;
}
.output-preview-img { max-width:100%; border-radius:8px; display:block; margin:0 auto }
.output-preview-msg { text-align:center; padding:30px 20px; font-size:14px; color:var(--muted) }

/* ═══════════════════════════════════════════════════════════
   ── HEALTH ──
═══════════════════════════════════════════════════════════ */
.health-page { display:flex; flex-direction:column; flex:1; overflow:hidden }
.health-content { padding:16px 18px; display:flex; flex-direction:column; gap:14px; overflow-y:auto; flex:1 }

.metrics-row { display:grid; grid-template-columns:repeat(3,1fr); gap:12px }
.metric-card {
  background:rgba(16,28,40,.85); border:1px solid rgba(255,255,255,.06); border-radius:14px;
  padding:18px 20px; position:relative; overflow:hidden;
  box-shadow:0 2px 12px rgba(0,0,0,.2); transition:border-color .18s, transform .15s;
}
.metric-card:hover { border-color:rgba(255,255,255,.1); transform:translateY(-1px) }
.metric-label { font-size:10px; color:var(--sub); text-transform:uppercase; letter-spacing:.7px; margin-bottom:10px; font-weight:600 }
.metric-value { font-size:32px; font-weight:700; margin-bottom:8px; line-height:1; letter-spacing:-1px }
.metric-value.good   { color:var(--green); text-shadow:0 0 20px rgba(52,211,153,.3) }
.metric-value.warn   { color:var(--yellow); text-shadow:0 0 20px rgba(251,191,36,.3) }
.metric-value.danger { color:var(--red); text-shadow:0 0 20px rgba(248,113,113,.3) }
.metric-bar-wrap { height:4px; background:rgba(255,255,255,.06); border-radius:99px; overflow:hidden; margin-bottom:8px }
.metric-bar { height:100%; border-radius:99px; transition:width .6s cubic-bezier(.4,0,.2,1); position:relative; overflow:hidden }
.metric-bar::after {
  content:''; position:absolute; inset:0;
  background:linear-gradient(90deg, transparent, rgba(255,255,255,.25), transparent);
  animation:shimmer 2.5s linear infinite; transform:translateX(-100%);
}
.metric-bar.good   { background:linear-gradient(90deg, #34d399, #6ee7b7) }
.metric-bar.warn   { background:linear-gradient(90deg, #fbbf24, #fde68a) }
.metric-bar.danger { background:linear-gradient(90deg, #f87171, #fca5a5) }
.metric-sub { font-size:11px; color:var(--sub); line-height:1.6 }
.sparkline-wrap { margin-top:10px }
.sparkline-wrap svg { width:100%; height:36px; display:block }

.info-row   { display:grid; grid-template-columns:repeat(2,1fr); gap:12px }
.info-card  { background:rgba(16,28,40,.85); border:1px solid rgba(255,255,255,.06); border-radius:14px; padding:16px 18px; box-shadow:0 2px 8px rgba(0,0,0,.15) }
.info-title { font-size:10px; color:var(--sub); text-transform:uppercase; letter-spacing:.6px; font-weight:600; margin-bottom:12px }
.info-grid  { display:grid; grid-template-columns:1fr 1fr; gap:10px }
.info-item  { display:flex; flex-direction:column; gap:2px }
.info-key   { font-size:11px; color:var(--muted) }
.info-val   { font-size:13px; font-weight:500 }
.svcs-grid  { display:grid; grid-template-columns:repeat(auto-fill,minmax(120px,1fr)); gap:7px }
.svc-card   { background:rgba(20,34,50,.9); border:1px solid rgba(255,255,255,.06); border-radius:8px; padding:9px 12px; display:flex; align-items:center; justify-content:space-between }
.svc-card-name { font-size:12px; color:var(--sub); font-weight:500 }

/* Expandable service cards */
.svcs-list { display:flex; flex-direction:column; gap:5px }
.svc-expand-card { background:rgba(16,28,40,.85); border:1px solid rgba(255,255,255,.06); border-radius:9px; overflow:hidden }
.svc-expand-head {
  display:flex; align-items:center; gap:9px; padding:10px 13px;
  cursor:pointer; transition:background .12s;
}
.svc-expand-head:hover { background:rgba(255,255,255,.03) }
.svc-expand-name { flex:1; font-size:13px; color:var(--text); font-weight:500 }
.svc-expand-chevron { font-size:18px; color:var(--muted); transition:transform .2s; display:inline-block; line-height:1 }
.svc-expand-chevron.open { transform:rotate(90deg) }
.svc-expand-body { border-top:1px solid rgba(255,255,255,.05); padding:10px 13px; display:flex; flex-direction:column; gap:8px }
.svc-log-pre {
  font-family:'SF Mono','Fira Code',monospace; font-size:11px; color:var(--sub);
  line-height:1.5; white-space:pre-wrap; word-break:break-all;
  max-height:180px; overflow-y:auto; margin:0; background:rgba(4,10,18,.8);
  border-radius:6px; padding:8px 10px; border:1px solid var(--border);
}
.svc-log-loading { font-size:12px; color:var(--muted); text-align:center; padding:8px 0 }
.svc-expand-actions { display:flex; gap:8px }
.btn-danger-sm {
  background:rgba(248,113,113,.07); border:1px solid rgba(248,113,113,.18);
  color:var(--red); padding:5px 10px; border-radius:7px; cursor:pointer;
  font-size:12px; font-weight:500; transition:all .15s; white-space:nowrap;
}
.btn-danger-sm:hover { background:rgba(248,113,113,.12); border-color:rgba(248,113,113,.3) }
.btn-danger-sm:disabled { opacity:.45; cursor:not-allowed }

/* Project description */
.project-description { font-size:12px; color:var(--muted); margin-bottom:8px; line-height:1.4 }

/* ═══════════════════════════════════════════════════════════
   ── LOGIN ──
═══════════════════════════════════════════════════════════ */
.login-page {
  position:fixed; inset:0; z-index:500;
  background:#070c14; display:flex; align-items:center; justify-content:center;
  padding:24px 16px calc(24px + var(--safe-bottom)); overflow:hidden;
}

/* Large ambient orbs for login */
.login-page::before {
  content:''; position:absolute; pointer-events:none;
  top:-300px; left:-250px;
  width:900px; height:900px; border-radius:50%;
  background:radial-gradient(circle, rgba(124,109,240,.1) 0%, transparent 65%);
  filter:blur(80px);
  animation:orb-drift1 14s ease-in-out infinite alternate;
}
.login-page::after {
  content:''; position:absolute; pointer-events:none;
  bottom:-300px; right:-200px;
  width:800px; height:800px; border-radius:50%;
  background:radial-gradient(circle, rgba(96,165,250,.07) 0%, transparent 65%);
  filter:blur(80px);
  animation:orb-drift2 18s ease-in-out infinite alternate;
}

.lo-card {
  width:100%; max-width:380px;
  background:rgba(13,22,34,.95);
  border:1px solid rgba(255,255,255,.08);
  border-radius:22px; padding:38px 32px 32px; position:relative; z-index:1;
  box-shadow:0 40px 80px rgba(0,0,0,.6), inset 0 1px 0 rgba(255,255,255,.08);
  backdrop-filter:blur(28px); -webkit-backdrop-filter:blur(28px);
  animation:fade-up .4s cubic-bezier(.34,1.3,.64,1);
}

.lo-logo { display:flex; align-items:center; gap:12px; margin-bottom:28px; position:relative }

/* Pulsing rings around login logo */
.lo-logo::before,
.lo-logo::after {
  content:''; position:absolute;
  left:0; top:50%; transform:translateY(-50%);
  width:40px; height:40px; border-radius:50%;
  border:1px solid rgba(124,109,240,.3);
  animation:logo-ring-pulse 2.6s ease-out infinite;
  pointer-events:none;
}
.lo-logo::after { animation-delay:1.3s; }

.lo-logo-icon {
  width:40px; height:40px; border-radius:12px;
  background:linear-gradient(135deg,#7c6df0,#a78bfa);
  display:flex; align-items:center; justify-content:center;
  font-size:19px; font-weight:800; color:#fff;
  box-shadow:0 6px 20px rgba(124,109,240,.45), inset 0 1px 0 rgba(255,255,255,.15);
  flex-shrink:0; position:relative; z-index:1;
}
.lo-logo-name { font-size:20px; font-weight:700; letter-spacing:-.3px }
.lo-logo-sub  { font-size:12px; color:var(--sub) }
.lo-h1   { font-size:18px; font-weight:600; margin-bottom:6px; letter-spacing:-.2px }
.lo-hint { font-size:13px; color:var(--sub); margin-bottom:24px }
.lo-field { margin-bottom:14px }
.lo-label { display:block; font-size:12px; font-weight:500; color:var(--sub); margin-bottom:6px }
.lo-input {
  width:100%; background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.08);
  border-radius:10px; padding:11px 14px; color:var(--text); font-size:16px;
  font-family:inherit; outline:none; transition:border-color .18s, box-shadow .18s;
  -webkit-appearance:none;
}
.lo-input:focus { border-color:rgba(124,109,240,.5); box-shadow:0 0 0 3px rgba(124,109,240,.1) }
.lo-input::placeholder { color:var(--muted) }
.lo-pass-wrap { position:relative }
.lo-pass-wrap .lo-input { padding-right:44px }
.lo-eye {
  position:absolute; right:0; top:0; bottom:0; width:42px;
  background:none; border:none; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
  color:var(--muted); transition:color .15s;
}
.lo-eye:hover { color:var(--sub) }
.lo-err {
  background:rgba(248,113,113,.08); border:1px solid rgba(248,113,113,.2);
  border-radius:8px; padding:10px 13px; margin-bottom:14px;
  font-size:13px; color:var(--red);
}
.lo-submit {
  width:100%; padding:12px; border:none; border-radius:11px;
  background:linear-gradient(135deg,#7c6df0,#5a4fcf);
  color:#fff; font-size:15px; font-weight:600;
  transition:opacity .15s, transform .1s, box-shadow .15s;
  box-shadow:0 4px 18px rgba(124,109,240,.4);
  margin-top:4px; font-family:inherit; -webkit-appearance:none;
  display:flex; align-items:center; justify-content:center; gap:8px;
}
.lo-submit:hover    { opacity:.92; box-shadow:0 6px 24px rgba(124,109,240,.5) }
.lo-submit:active   { transform:scale(.98) }
.lo-submit:disabled { opacity:.45; cursor:not-allowed; transform:none }

/* ═══════════════════════════════════════════════════════════
   COMMON COMPONENTS
═══════════════════════════════════════════════════════════ */

/* Buttons */
.btn-icon {
  min-width:36px; height:36px; border-radius:9px;
  display:flex; align-items:center; justify-content:center;
  cursor:pointer; transition:all .15s; border:none;
  background:none; color:var(--sub); flex-shrink:0;
}
.btn-icon:hover  { background:rgba(255,255,255,.05); color:var(--text) }
.btn-icon:active { transform:scale(.93) }

.btn-back { display:none }

.btn-send {
  background:linear-gradient(135deg,#7c6df0,#5a4fcf) !important;
  color:#fff !important;
  box-shadow:0 2px 10px rgba(124,109,240,.35);
  min-width:38px; height:38px;
  transition:opacity .15s, box-shadow .15s, transform .1s !important;
}
.btn-send:hover  { opacity:.9; box-shadow:0 4px 16px rgba(124,109,240,.5) !important }
.btn-send:active { transform:scale(.95) !important }
.btn-send:disabled { opacity:.35; cursor:not-allowed; transform:none !important; box-shadow:none !important }

.btn-sm {
  background:none; border:1px solid rgba(255,255,255,.07); color:var(--sub);
  padding:5px 10px; border-radius:7px; cursor:pointer;
  font-size:12px; font-weight:500; transition:all .15s;
  display:flex; align-items:center; gap:5px; white-space:nowrap;
}
.btn-sm:hover { border-color:rgba(124,109,240,.4); color:var(--accent2) }

.btn-link {
  display:inline-flex; align-items:center; gap:5px;
  padding:8px 14px; border-radius:8px; font-size:13px; font-weight:500;
  cursor:pointer; transition:all .15s; border:none;
}
.btn-primary   { background:var(--glow); color:var(--accent2); border:1px solid rgba(124,109,240,.22) }
.btn-primary:hover { background:rgba(124,109,240,.22) }
.btn-secondary { background:rgba(255,255,255,.04); color:var(--sub); border:1px solid rgba(255,255,255,.07) }
.btn-secondary:hover { color:var(--text); background:rgba(255,255,255,.07) }

/* Badges */
.badge { font-size:11px; padding:3px 9px; border-radius:99px; font-weight:500 }
.badge-green  { background:rgba(52,211,153,.12); color:var(--green); border:1px solid rgba(52,211,153,.22) }
.badge-yellow { background:rgba(251,191,36,.12); color:var(--yellow); border:1px solid rgba(251,191,36,.22) }
.badge-red    { background:rgba(248,113,113,.1); color:var(--red); border:1px solid rgba(248,113,113,.2) }
.badge-blue   { background:rgba(96,165,250,.12); color:#60a5fa; border:1px solid rgba(96,165,250,.2) }
.badge-gray   { background:rgba(255,255,255,.05); color:var(--sub); border:1px solid rgba(255,255,255,.08) }

/* Status dots */
.dot { width:6px; height:6px; border-radius:50%; flex-shrink:0 }
.dot.on   { background:var(--green); box-shadow:0 0 6px rgba(52,211,153,.5) }
.dot.off  { background:var(--red) }
.dot.warn { background:var(--yellow); animation:pulse .9s infinite }

/* Spinner */
.spinner {
  width:18px; height:18px; border-radius:50%;
  border:2px solid rgba(255,255,255,.1); border-top-color:var(--accent);
  animation:spin .7s linear infinite; display:inline-block;
}
.spinner-sm { width:14px; height:14px; border-width:1.5px }

/* Skeleton */
.skeleton {
  background:linear-gradient(90deg,rgba(255,255,255,.04) 25%,rgba(255,255,255,.08) 50%,rgba(255,255,255,.04) 75%);
  background-size:200% 100%; animation:shimmer 1.5s infinite; border-radius:6px;
}
.sk-line { height:12px; margin-bottom:9px }

/* Empty state */
.empty-state {
  flex:1; display:flex; flex-direction:column;
  align-items:center; justify-content:center;
  gap:12px; color:var(--muted); padding:40px 20px; text-align:center;
}
.empty-state svg { width:44px; height:44px; opacity:.25 }
.empty-state p   { font-size:14px }

/* ═══════════════════════════════════════════════════════════
   ANIMATIONS
═══════════════════════════════════════════════════════════ */
@keyframes orb-drift1 { from{transform:translate(0,0) scale(1)} to{transform:translate(40px,30px) scale(1.08)} }
@keyframes orb-drift2 { from{transform:translate(0,0) scale(1)} to{transform:translate(-30px,-20px) scale(1.05)} }
@keyframes orb-drift3 { from{transform:translate(0,0) scale(1)} to{transform:translate(20px,-25px) scale(1.06)} }
@keyframes logo-ring-pulse {
  0%   { transform:translateY(-50%) scale(1); opacity:.6 }
  100% { transform:translateY(-50%) scale(2.2); opacity:0 }
}
@keyframes status-glow { 0%,100%{opacity:1} 50%{opacity:.5} }
@keyframes card-shimmer { to { transform:translateX(250%) } }
@keyframes mic-pulse  { 0%,100%{opacity:1} 50%{opacity:.45} }
@keyframes fadeIn     { from{opacity:0;transform:translateY(5px)} to{opacity:1;transform:none} }
@keyframes fade-up    { from{opacity:0;transform:translateY(16px)} to{opacity:1;transform:none} }
@keyframes pulse      { 0%,100%{opacity:1} 50%{opacity:.4} }
@keyframes blink      { 0%,100%{opacity:1} 50%{opacity:0} }
@keyframes typing     { 0%,60%,100%{transform:translateY(0)} 30%{transform:translateY(-5px)} }
@keyframes shimmer    { 0%{transform:translateX(-100%)} 100%{transform:translateX(250%)} }
@keyframes spin       { to{transform:rotate(360deg)} }
@keyframes modal-in   { from{opacity:0;transform:translateY(10px) scale(.97)} to{opacity:1;transform:none} }
@keyframes slide-up   { from{transform:translateY(100%)} to{transform:none} }
@keyframes msg-in     { from{opacity:0;transform:translateY(6px)} to{opacity:1;transform:none} }

.msg { animation:msg-in .18s ease }

/* ═══════════════════════════════════════════════════════════
   ██ MOBILE BREAKPOINT ██
═══════════════════════════════════════════════════════════ */
@media (max-width: 768px) {
  .bottom-nav { display:flex }
  .sidebar    { display:none !important }

  .app-shell {
    flex-direction:column;
    padding-bottom:calc(var(--bnav-h) + var(--safe-bottom));
  }

  /* Topbar */
  .topbar, .chat-topbar { height:48px; min-height:48px; padding:0 14px }
  .topbar-title, .chat-title { font-size:14px }

  /* Chat mobile: full-panel toggle */
  .chat-page              { flex-direction:column }
  .chat-page .ctx-panel   { width:100%; min-width:unset; flex:1; height:100% }
  .chat-page .chat-main   { display:none }

  /* When a chat is open */
  .chat-page.has-context .chat-main { display:flex; flex:1 }
  .chat-page.has-context .ctx-panel {
    position:fixed; left:0; top:0; height:100%; z-index:200;
    width:280px; flex:none; transform:translateX(-100%);
    transition:transform .25s ease; box-shadow:4px 0 32px rgba(0,0,0,.5);
  }
  .chat-page.has-context .ctx-panel.mobile-open { transform:translateX(0) }

  /* Drawer backdrop */
  .ctx-backdrop {
    display:none; position:fixed; inset:0; z-index:199;
    background:rgba(0,0,0,.6); backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px);
  }
  .ctx-backdrop.visible { display:block }

  .btn-close-drawer { display:flex !important }
  .btn-back { display:none !important }
  .chat-page.has-context .btn-back { display:flex !important }
  .btn-open-ctx { display:flex !important }
  .chat-page.has-context .btn-open-ctx { display:none !important }

  .topbar-desktop { display:none !important }
  .topbar-mobile  { display:flex !important }

  .busy-dot {
    width:7px; height:7px; border-radius:50%;
    background:var(--yellow); flex-shrink:0; margin-left:4px;
  }

  .topbar-mobile-menu-wrap { position:relative }
  .topbar-dropdown {
    position:absolute; right:0; top:calc(100% + 6px); z-index:100;
    background:rgba(13,22,34,.97); border:1px solid rgba(255,255,255,.08); border-radius:12px;
    padding:5px; min-width:160px;
    box-shadow:0 12px 32px rgba(0,0,0,.5);
    backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px);
  }
  .topbar-dropdown-item {
    display:flex; align-items:center; gap:8px; padding:9px 12px;
    border-radius:8px; border:none; background:none; color:var(--text);
    font-size:13px; cursor:pointer; width:100%; text-align:left;
    transition:background .12s;
  }
  .topbar-dropdown-item:hover { background:rgba(255,255,255,.05) }

  .app-shell:has(.chat-page.has-context) .bottom-nav { display:none }
  .app-shell:has(.chat-page.has-context) { padding-bottom:0 }
  .chat-page.has-context .chat-main { display:flex; flex:1; min-height:0 }

  .messages-wrap { padding:12px 14px; gap:12px }
  .msg-body { max-width:87% }
  .msg-bubble { padding:9px 13px; font-size:14px }

  .chat-input-area { padding:8px 12px 10px }
  .mode-btn        { padding:3px 8px; font-size:10px }
  .input-hint      { display:none }

  .tools-grid { padding:12px 14px; gap:8px; grid-template-columns:repeat(2,1fr) }
  .tool-card  { padding:12px 13px; min-height:64px }

  .projects-grid { padding:12px 14px; grid-template-columns:1fr }
  .project-card  { padding:16px }

  .output-filters { overflow-x:auto; flex-wrap:nowrap; padding:8px 12px; }
  .output-filters::-webkit-scrollbar { display:none }
  .output-item { padding:9px 12px }
  .output-item-name { font-size:12px }

  .health-content { padding:12px 14px; gap:10px }
  .metrics-row { grid-template-columns:1fr; gap:10px }
  .info-row    { grid-template-columns:1fr; gap:10px }
  .svcs-grid   { grid-template-columns:repeat(3,1fr) }

  .modal-overlay { align-items:flex-end; padding:0 }
  .modal {
    border-radius:22px 22px 0 0; max-height:92vh;
    border-bottom:none; animation:slide-up .28s cubic-bezier(.34,1.2,.64,1);
  }
  .modal-drag-handle { display:block }
  .modal-head { padding:12px 18px 14px }
  .modal-body { padding:16px 18px }

  .btn-new-chat  { padding:5px 6px }
  .btn-new-label { display:none }
}

/* ═══════════════════════════════════════════════════════════
   MESSAGE COPY + CODE COPY
═══════════════════════════════════════════════════════════ */
.msg-meta {
  display:flex; align-items:center; gap:6px; margin-top:4px; padding:0 3px;
  min-height:18px;
}
.msg.user .msg-meta { flex-direction:row-reverse }

.msg-copy {
  background:none; border:none; cursor:pointer; padding:2px 4px; border-radius:4px;
  color:var(--muted); display:none; transition:color .15s, background .15s;
  line-height:1;
}
.msg-copy:hover { color:var(--accent2); background:var(--glow) }
.msg:hover .msg-copy { display:inline-flex; align-items:center }

.copy-code-btn {
  float:right; margin:-2px -4px 4px 8px;
  background:none; border:1px solid rgba(255,255,255,.08); border-radius:5px;
  padding:2px 7px; color:var(--muted); cursor:pointer; font-size:13px;
  transition:all .15s; line-height:1.4; font-family:inherit;
}
.copy-code-btn:hover { color:var(--accent2); border-color:var(--accent); background:var(--glow) }

/* ═══════════════════════════════════════════════════════════
   MESSAGE SEARCH IN TOPBAR
═══════════════════════════════════════════════════════════ */
.msg-search-input {
  flex:1; background:rgba(255,255,255,.05); border:1px solid rgba(124,109,240,.4);
  border-radius:8px; padding:6px 12px; color:var(--text); font-size:14px;
  font-family:inherit; outline:none; min-width:0; max-width:260px;
  transition:border-color .15s, box-shadow .15s;
}
.msg-search-input:focus { border-color:var(--accent); box-shadow:0 0 0 3px rgba(124,109,240,.1) }
.msg-search-input::placeholder { color:var(--muted) }

.search-count {
  font-size:11px; color:var(--muted); white-space:nowrap; flex-shrink:0;
}

/* ═══════════════════════════════════════════════════════════
   CTX ITEM: DATE UNDER TOPIC
═══════════════════════════════════════════════════════════ */
.ctx-content {
  flex:1; min-width:0; display:flex; flex-direction:column; gap:1px;
}
.ctx-date {
  font-size:10px; color:var(--muted); line-height:1.2;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.ctx-preview {
  font-size:11px; color:var(--muted); line-height:1.3;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  margin-top:1px;
}
.ctx-group-header {
  font-size:10px; font-weight:600; color:var(--muted);
  text-transform:uppercase; letter-spacing:.5px;
  padding:12px 10px 4px; user-select:none;
}

/* ═══════════════════════════════════════════════════════════
   CTX PANEL COLLAPSE
═══════════════════════════════════════════════════════════ */
.ctx-panel { transition:width .2s ease, min-width .2s ease }
.ctx-panel.collapsed { width:44px; min-width:44px }
.ctx-panel.collapsed .ctx-panel-head { padding:10px 6px; justify-content:center }

.btn-collapse-ctx {
  width:26px; height:26px; border-radius:6px; flex-shrink:0;
  border:1px solid rgba(255,255,255,.07); color:var(--muted);
}
.btn-collapse-ctx:hover { color:var(--accent2); border-color:rgba(124,109,240,.4) }
.btn-expand-ctx { width:30px; height:30px; border-radius:8px }

/* Mobile-only buttons */
.btn-open-ctx        { display:none }
.btn-close-drawer    { display:none }
.topbar-mobile       { display:none }
.busy-dot            { display:none }
.topbar-mobile-menu-wrap { display:none }

/* Desktop-only buttons */
.topbar-desktop      { display:flex }

/* ═══════════════════════════════════════════════════════════
   CTX SEARCH
═══════════════════════════════════════════════════════════ */
.ctx-search-wrap {
  padding:6px 8px 4px; flex-shrink:0; border-bottom:1px solid rgba(255,255,255,.05);
}
.ctx-search {
  width:100%; background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.07);
  border-radius:7px; padding:6px 10px; color:var(--text); font-size:12px;
  font-family:inherit; outline:none; transition:border-color .15s;
}
.ctx-search:focus { border-color:rgba(124,109,240,.4) }
.ctx-search::placeholder { color:var(--muted) }

/* ═══════════════════════════════════════════════════════════
   SCROLL TO BOTTOM BUTTON
═══════════════════════════════════════════════════════════ */
.chat-main { position:relative }
.btn-scroll-bottom {
  position:absolute; bottom:84px; right:16px; z-index:20;
  width:34px; height:34px; border-radius:50%;
  background:rgba(16,28,40,.95); border:1px solid rgba(255,255,255,.08); color:var(--sub);
  display:flex; align-items:center; justify-content:center;
  cursor:pointer; transition:all .15s;
  box-shadow:0 4px 16px rgba(0,0,0,.5);
  backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
}
.btn-scroll-bottom:hover { color:var(--accent2); border-color:rgba(124,109,240,.4); transform:translateY(-1px) }

/* ═══════════════════════════════════════════════════════════
   ONBOARDING EMPTY STATE
═══════════════════════════════════════════════════════════ */
.chat-empty.onboarding { gap:16px }
.onboard-icon {
  width:64px; height:64px; border-radius:18px; flex-shrink:0;
  background:linear-gradient(135deg,#7c6df0,#a78bfa);
  display:flex; align-items:center; justify-content:center;
  font-size:28px; font-weight:800; color:#fff;
  box-shadow:0 8px 32px rgba(124,109,240,.45), inset 0 1px 0 rgba(255,255,255,.15);
}
.btn-new-chat-hero {
  display:inline-flex; align-items:center; gap:8px;
  padding:11px 22px; border-radius:10px; border:none;
  background:linear-gradient(135deg,#7c6df0,#5a4fcf);
  color:#fff; font-size:14px; font-weight:600; cursor:pointer;
  transition:opacity .15s, transform .1s, box-shadow .15s;
  box-shadow:0 4px 18px rgba(124,109,240,.4);
  font-family:inherit; margin-top:4px;
}
.btn-new-chat-hero:hover  { opacity:.9; box-shadow:0 6px 24px rgba(124,109,240,.5) }
.btn-new-chat-hero:active { transform:scale(.97) }

/* ═══════════════════════════════════════════════════════════
   TOAST NOTIFICATIONS
═══════════════════════════════════════════════════════════ */
.toast-container {
  position:fixed; bottom:calc(16px + var(--safe-bottom)); right:16px;
  z-index:9000; display:flex; flex-direction:column; gap:8px;
  pointer-events:none; max-width:320px;
}
.toast {
  padding:11px 16px; border-radius:12px; font-size:13px; font-weight:500;
  background:rgba(16,28,40,.97); border:1px solid rgba(255,255,255,.1); color:var(--text);
  box-shadow:0 8px 28px rgba(0,0,0,.5); pointer-events:all;
  backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px);
}
.toast-error   { background:rgba(248,113,113,.12); border-color:rgba(248,113,113,.3); color:var(--red) }
.toast-success { background:rgba(52,211,153,.1); border-color:rgba(52,211,153,.25); color:var(--green) }
.toast-enter-active { transition:all .25s cubic-bezier(.34,1.3,.64,1) }
.toast-leave-active { transition:all .18s ease }
.toast-enter-from   { opacity:0; transform:translateX(20px) }
.toast-leave-to     { opacity:0; transform:translateX(20px) }

/* ═══════════════════════════════════════════════════════════
   INLINE RENAME INPUT
═══════════════════════════════════════════════════════════ */
.chat-title-input {
  flex:1; background:rgba(255,255,255,.05); border:1px solid rgba(124,109,240,.5);
  border-radius:7px; padding:4px 10px; color:var(--text);
  font-size:15px; font-weight:600; font-family:inherit;
  outline:none; min-width:0; max-width:300px;
  box-shadow:0 0 0 3px rgba(124,109,240,.1);
}

/* ═══════════════════════════════════════════════════════════
   CTX ITEM DELETE BUTTON
═══════════════════════════════════════════════════════════ */
.ctx-delete {
  display:none; background:none; border:none; padding:0 2px;
  font-size:11px; color:var(--muted); cursor:pointer;
  line-height:1; flex-shrink:0; transition:color .15s;
}
.ctx-delete:hover { color:var(--red) }
.ctx-item:hover .ctx-delete { display:block }

/* ═══════════════════════════════════════════════════════════
   DEV ENTITY MODAL
═══════════════════════════════════════════════════════════ */
.dev-entity-modal { max-width:480px; max-height:88vh; min-height:520px }
.dev-entity-modal .modal-body { overflow-y:auto; display:flex; flex-direction:column; gap:20px; padding:16px 20px 20px }

.dev-entity-section {}
.dev-entity-section-title {
  font-size:11px; font-weight:600; letter-spacing:.06em; text-transform:uppercase;
  color:var(--muted); margin-bottom:8px;
}
.dev-entity-list { display:flex; flex-direction:column; gap:4px }
.dev-entity-item {
  display:flex; align-items:center; gap:8px;
  background:rgba(255,255,255,.03); border:1px solid rgba(255,255,255,.07); border-radius:8px;
  padding:9px 12px; color:var(--text); font-size:13px; text-align:left;
  transition:background .15s, border-color .15s;
}
.dev-entity-item:hover { background:rgba(124,109,240,.08); border-color:rgba(124,109,240,.3) }
.dev-entity-item.active { border-color:var(--accent); background:var(--glow) }

/* Entity badge in toolbar */
.dev-entity-badge {
  display:inline-flex; align-items:center; gap:5px;
  background:var(--glow); border:1px solid rgba(124,109,240,.3);
  border-radius:6px; padding:2px 8px 2px 6px;
  font-size:12px; color:var(--accent2); cursor:pointer;
  max-width:200px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  transition:background .15s;
}
.dev-entity-badge:hover { background:rgba(124,109,240,.2) }
.dev-entity-close {
  opacity:.55; font-size:10px; flex-shrink:0;
  transition:opacity .15s;
}
.dev-entity-close:hover { opacity:1 }

/* ═══════════════════════════════════════════════════════════
   VERY SMALL PHONES
═══════════════════════════════════════════════════════════ */
@media (max-width:380px) {
  .tools-grid  { grid-template-columns:1fr }
  .svcs-grid   { grid-template-columns:repeat(2,1fr) }
  .bnav-label  { font-size:9px }
}

@media (max-width:768px) {
  .toast-container { bottom:calc(var(--bnav-h) + var(--safe-bottom) + 12px); right:12px; left:12px; max-width:none }
  .toast-enter-from { transform:translateY(10px) }
  .toast-leave-to   { transform:translateY(10px) }
  .ctx-delete { display:block }
  .btn-collapse-ctx { display:none }
  .btn-scroll-bottom { bottom:72px; right:12px }
  .ctx-search-wrap { padding:5px 7px 3px }
  .prompt-cards { grid-template-columns:1fr }
}

/* Landscape mobile */
@media (max-width:768px) and (orientation:landscape) and (max-height:500px) {
  .messages-wrap { padding:8px 14px; gap:8px }
  .chat-input-area { padding:6px 14px }
}
