/* ============================================================
   HIVE EMPIRE — Borg assimilation terminal
   Fel green on black.
   ============================================================ */
:root{
  /* base — neutral black surfaces */
  --void:#000000;
  --void-2:#050505;
  --panel:rgba(8,8,8,.94);
  --panel-solid:#080808;
  --panel-2:rgba(12,12,12,.96);
  --glass:rgba(0,0,0,.94);

  /* fel green — primary actions / live status */
  --hive:#79ff03;
  --hive-core:#a6ff59;
  --hive-dim:#6fb82f;
  --hive-deep:#2d4716;
  --hive-glow:rgba(149,255,57,.45);
  --hive-faint:rgba(149,255,57,.09);

  /* Secondary green accents (legacy token names retained). */
  --ooze:#8bff26;
  --ooze-core:#97fb40;
  --ooze-dim:#71c924;
  --ooze-deep:#305c0a;
  --ooze-glow:rgba(139,255,38,.48);
  --ooze-faint:rgba(139,255,38,.10);

  /* Green-only gradients */
  --blend:var(--hive);
  --blend-soft:linear-gradient(135deg,rgba(149,255,57,.16),rgba(139,255,38,.16));
  --blend-edge:linear-gradient(180deg,var(--hive-glow),var(--ooze-glow));

  --alert:#88ff20;           /* warnings retain explicit labels */
  --danger:#a0ff4d;          /* destructive actions retain explicit labels */
  --text:#e5e8e2;            /* neutral body text */
  --text-bright:#f4f7f1;
  --muted:#a2ab9a;           /* muted green-grey */
  --muted-2:#77816f;
  --line:rgba(139,255,38,.16);
  --line-2:rgba(149,255,57,.26);
  --line-ooze:rgba(139,255,38,.30);
  --on-accent:#000000;       /* text on bright green fills */
  --radius:4px;              /* hard, technical corners */
  --sidebar-w:290px;
  --font-display:"Orbitron",system-ui,sans-serif;
  --font-body:"Inter",system-ui,sans-serif;
  --font-mono:"JetBrains Mono",ui-monospace,monospace;
}
*{box-sizing:border-box}
html,body{
  height:100%;
  height:100dvh; /* mobile: avoid 100vh cut-off under browser chrome */
  max-height:100dvh;
}
body{
  margin:0;background:var(--void);color:var(--text);
  font-family:var(--font-body);font-size:14px;line-height:1.55;
  -webkit-font-smoothing:antialiased;overflow:hidden;
}
/* Subtle green ambient grid and black scanlines */
body::before{
  content:"";position:fixed;inset:0;z-index:0;pointer-events:none;
  background:
    radial-gradient(circle at 12% 0%,rgba(149,255,57,.07),transparent 42%),
    radial-gradient(circle at 92% 100%,rgba(139,255,38,.10),transparent 48%),
    radial-gradient(circle at 70% 20%,rgba(139,255,38,.04),transparent 40%),
    repeating-linear-gradient(0deg,transparent 0 3px,rgba(0,0,0,.14) 3px 4px);
}
.hidden{display:none!important}

/* ---------- honeycomb texture util ---------- */
.comb-bg{
  background-image:
    linear-gradient(var(--line) 1px,transparent 1px),
    linear-gradient(90deg,var(--line) 1px,transparent 1px);
  background-size:26px 26px;
}

/* ============================================================ LOGIN */
.login{position:fixed;inset:0;z-index:100;display:grid;place-items:center;background:var(--void);overflow:hidden}
.login-glow{position:absolute;inset:0;
  background:
    radial-gradient(ellipse 55% 48% at 38% 40%,var(--hive-faint),transparent 68%),
    radial-gradient(ellipse 50% 45% at 68% 55%,var(--ooze-faint),transparent 70%);
  animation:breathe 6s ease-in-out infinite}
@keyframes breathe{0%,100%{opacity:.5}50%{opacity:1}}
.login-card{position:relative;z-index:1;width:min(92vw,400px);padding:44px 36px;text-align:center;
  background:var(--panel);border:1px solid var(--line-ooze);border-radius:var(--radius);
  backdrop-filter:blur(14px);
  box-shadow:0 0 0 1px rgba(149,255,57,.06),0 0 40px rgba(149,255,57,.08),0 0 70px rgba(139,255,38,.12),inset 0 0 40px rgba(0,0,0,.5)}
.login-card::before,.login-card::after{content:"";position:absolute;width:18px;height:18px}
.login-card::before{top:-1px;left:-1px;border:2px solid var(--hive);border-right:0;border-bottom:0}
.login-card::after{bottom:-1px;right:-1px;border:2px solid var(--ooze);border-left:0;border-top:0}
.hex-badge{width:112px;height:112px;margin:0 auto 20px;display:grid;place-items:center;
  filter:drop-shadow(0 0 14px var(--hive-glow)) drop-shadow(0 0 22px var(--ooze-glow))}
.hex-badge img{width:100%;height:100%;object-fit:contain}
.login-card h1{margin:6px 0 2px;font-family:var(--font-display);font-weight:800;font-size:30px;
  letter-spacing:.14em;
  background:var(--blend);-webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 0 14px var(--ooze-glow))}
.login-card .sub{margin:0 0 26px;font-family:var(--font-mono);font-size:11px;letter-spacing:.28em;
  text-transform:uppercase;color:var(--muted)}
#loginBtn{display:block;padding:13px;background:var(--blend);color:var(--on-accent);text-decoration:none;border:0;border-radius:var(--radius);
  font-family:var(--font-display);font-weight:700;font-size:13px;letter-spacing:.14em;text-transform:uppercase;
  cursor:pointer;transition:.15s;box-shadow:0 0 18px var(--hive-glow),0 0 28px var(--ooze-glow)}
#loginBtn:hover{filter:brightness(1.08);box-shadow:0 0 28px var(--hive-glow),0 0 40px var(--ooze-glow);transform:translateY(-1px)}
.err{color:var(--danger);font-size:12px;margin-top:12px;min-height:16px;font-family:var(--font-mono)}

/* ============================================================ APP SHELL */
.app{
  position:relative;z-index:1;display:grid;grid-template-columns:var(--sidebar-w) 1fr;
  height:100vh;height:100dvh;max-height:100dvh;
  /* iOS notch / Android gesture bar */
  padding-top:env(safe-area-inset-top,0px);
  padding-left:env(safe-area-inset-left,0px);
  padding-right:env(safe-area-inset-right,0px);
}
/* Backdrop only mounts while the drawer is open — never leave a full-screen
   intercept layer around (display:block + pointer-events:none is flaky on
   some Android WebViews and freezes the chat after closing the menu). */
.sidebar-backdrop{display:none;pointer-events:none}

/* ---------- SIDEBAR ---------- */
.sidebar{display:flex;flex-direction:column;min-height:0;background:var(--void-2);
  border-right:1px solid var(--line);position:relative}
.sidebar::after{content:"";position:absolute;top:0;right:-1px;width:1px;height:100%;
  background:var(--blend-edge);opacity:.55}
.brand{display:flex;align-items:center;gap:11px;padding:16px 16px 14px;border-bottom:1px solid var(--line)}
.brand-logo{width:34px;height:34px;max-width:34px;max-height:34px;object-fit:contain;flex:none;display:block;
  filter:drop-shadow(0 0 6px var(--hive-glow)) drop-shadow(0 0 12px var(--ooze-glow))}
.brand span{font-family:var(--font-display);font-weight:800;font-size:15px;letter-spacing:.16em;
  background:var(--blend);-webkit-background-clip:text;background-clip:text;color:transparent;flex:1}
.icon-btn{background:transparent;border:0;color:var(--muted);cursor:pointer;font-size:16px;
  width:30px;height:30px;border-radius:var(--radius);display:grid;place-items:center;transition:.15s}
.icon-btn:hover{color:var(--ooze-core);background:var(--ooze-faint)}

.new-chat{margin:14px 14px 10px;padding:11px 13px;display:flex;align-items:center;gap:9px;
  background:transparent;border:1px solid var(--line-2);border-radius:var(--radius);color:var(--text);
  font-family:var(--font-mono);font-size:12px;letter-spacing:.06em;cursor:pointer;transition:.15s;text-transform:uppercase}
.new-chat:hover{border-color:var(--ooze);color:var(--ooze-core);box-shadow:0 0 18px var(--ooze-faint),0 0 12px var(--hive-faint)}
.hex-dot{width:9px;height:10px;background:var(--blend);
  clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%);
  box-shadow:0 0 8px var(--ooze-glow);flex:none}
.hex-dot.sm{width:7px;height:8px}

/* ---------- PROJECTS (workspaces) ---------- */
.projects-block{padding:0 10px 8px;border-bottom:1px solid var(--line);margin-bottom:4px}
.projects-head{display:flex;align-items:center;justify-content:space-between;padding:4px 4px 6px}
.projects-label{font-family:var(--font-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted-2)}
.icon-btn.sm{width:26px;height:26px;font-size:16px;line-height:1}
.project-list{display:flex;flex-direction:column;gap:2px;max-height:200px;overflow-y:auto}
.project-row{display:flex;align-items:center;gap:6px;padding:7px 7px;border-radius:var(--radius);
  cursor:pointer;color:var(--muted);font-size:12px;border:1px solid transparent;transition:.12s;text-align:left;width:100%;
  background:transparent;font-family:inherit}
.project-row:hover{background:var(--hive-faint);color:var(--text)}
.project-row.active{background:var(--hive-faint);border-color:var(--line-2);color:var(--text-bright)}
.project-row.archived-row{opacity:.65}
.project-row .pdot{width:9px;height:9px;border-radius:50%;flex:none;box-shadow:0 0 8px currentColor}
.project-row .pname{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:500}
.project-row .pcount{font-family:var(--font-mono);font-size:10px;color:var(--muted-2);flex:none}
.project-row .pstar,.project-row .pgear{opacity:0;background:transparent;border:0;color:var(--muted);cursor:pointer;font-size:12px;padding:2px 4px;border-radius:3px;line-height:1}
.project-row:hover .pstar,.project-row:hover .pgear,.project-row.active .pstar,.project-row.active .pgear,.project-row .pstar.on{opacity:1}
.project-row .pstar.on{color:#88ff20}
.project-row .pstar:hover{color:#88ff20}
.project-row .pgear:hover{color:var(--hive)}
.project-filter-all,.project-filter-none{font-family:var(--font-mono);font-size:10px;letter-spacing:.04em;text-transform:uppercase}
.project-archived-toggle{display:block;width:100%;margin-top:4px;padding:5px 8px;background:transparent;border:0;
  color:var(--muted-2);font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;
  cursor:pointer;text-align:left;border-radius:var(--radius)}
.project-archived-toggle:hover{color:var(--hive);background:var(--hive-faint)}
.project-archived-toggle.hidden{display:none}

.topbar-titles{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;justify-content:center}
.project-chip{align-self:flex-start;display:inline-flex;align-items:center;gap:6px;padding:2px 9px 2px 6px;
  background:rgba(0,0,0,.35);border:1px solid var(--line);border-radius:999px;color:var(--text);
  font-family:var(--font-mono);font-size:10px;letter-spacing:.04em;cursor:pointer;max-width:100%;
  text-transform:uppercase}
.project-chip:hover{border-color:var(--line-2)}
.project-chip .pdot{width:7px;height:7px;border-radius:50%;flex:none}
.project-chip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* Project workspace strip under topbar */
.project-workspace{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  padding:10px 16px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,rgba(149,255,57,.04),rgba(139,255,38,.03),transparent);
  border-left:3px solid var(--hive)}
.project-workspace.hidden{display:none}
.pw-left{display:flex;align-items:flex-start;gap:10px;min-width:0;flex:1}
.pw-left .pdot{width:10px;height:10px;border-radius:50%;flex:none;margin-top:5px;box-shadow:0 0 10px currentColor}
.pw-text{min-width:0;flex:1}
.pw-name-row{display:flex;align-items:center;gap:8px}
.pw-name{font-family:var(--font-display);font-weight:700;font-size:14px;letter-spacing:.04em;color:var(--text-bright)}
.pw-star{background:transparent;border:0;color:var(--muted);cursor:pointer;font-size:14px;padding:0 2px;line-height:1}
.pw-star.on,.pw-star:hover{color:#88ff20}
.pw-desc{font-size:12px;color:var(--muted);margin-top:2px;line-height:1.4;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:640px}
.pw-meta{font-family:var(--font-mono);font-size:10px;color:var(--muted-2);margin-top:4px;letter-spacing:.03em;
  display:flex;flex-wrap:wrap;gap:8px}
.pw-meta .pw-pill{display:inline-flex;align-items:center;gap:4px;padding:1px 7px;border:1px solid var(--line);
  border-radius:999px;background:rgba(0,0,0,.25)}
.pw-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}

.project-form{display:flex;flex-direction:column;gap:12px}
.project-form .field{display:flex;flex-direction:column;gap:6px}
.project-form .field>span{font-family:var(--font-mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.project-form .field>span em{font-style:normal;color:var(--muted-2);text-transform:none;letter-spacing:0}
.project-form input,.project-form textarea{
  width:100%;padding:10px 12px;background:rgba(0,0,0,.4);border:1px solid var(--line-2);
  border-radius:var(--radius);color:var(--text);font-family:var(--font-mono);font-size:13px;resize:vertical}
.project-form input:focus,.project-form textarea:focus{outline:none;border-color:var(--hive);box-shadow:0 0 0 2px var(--hive-faint)}
.color-picker{display:flex;flex-wrap:wrap;gap:8px}
.color-swatch{width:28px;height:28px;border-radius:50%;border:2px solid transparent;cursor:pointer;padding:0}
.color-swatch.active{border-color:#ffffff;box-shadow:0 0 0 2px var(--hive)}
.project-files-head{display:flex;align-items:center;gap:10px}
.project-files-head span{font-family:var(--font-mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);flex:1}
.project-files-list{display:flex;flex-direction:column;gap:6px;margin-top:8px;max-height:160px;overflow-y:auto}
.project-file-row{display:flex;align-items:center;gap:8px;padding:7px 10px;background:rgba(0,0,0,.3);
  border:1px solid var(--line);border-radius:var(--radius);font-family:var(--font-mono);font-size:11px;color:var(--text)}
.project-file-row .fname{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.project-file-row .fsize{color:var(--muted-2)}
.project-file-row button{background:none;border:0;color:var(--muted);cursor:pointer;font-size:14px}
.project-file-row button:hover{color:var(--danger)}
.project-form-actions{display:flex;align-items:center;gap:8px;margin-top:4px;flex-wrap:wrap}
.project-form-actions .spacer{flex:1}
.move-project-list{display:flex;flex-direction:column;gap:6px}
.move-project-item{display:flex;align-items:center;gap:10px;padding:11px 12px;background:rgba(0,0,0,.3);
  border:1px solid var(--line);border-radius:var(--radius);cursor:pointer;color:var(--text);font-size:13px;text-align:left;width:100%;
  font-family:inherit}
.move-project-item:hover{border-color:var(--hive);background:var(--hive-faint)}
.move-project-item .pdot{width:10px;height:10px;border-radius:50%;flex:none}
.conv .row-btn.move{font-size:12px}
.conv .proj-tag{font-family:var(--font-mono);font-size:9px;color:var(--muted-2);max-width:64px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.search-wrap{position:relative;margin:0 14px 12px}
.search-ico{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--muted-2)}
#convSearch{width:100%;padding:9px 11px 9px 32px;background:rgba(0,0,0,.4);border:1px solid var(--line);
  border-radius:var(--radius);color:var(--text);font-family:var(--font-mono);font-size:12px}
#convSearch:focus{outline:none;border-color:var(--line-2);box-shadow:0 0 0 2px var(--hive-faint)}

.conv-list{flex:1;overflow-y:auto;padding:0 8px;min-height:0}
.conv-item{padding:9px 11px;margin:2px 0;border-radius:var(--radius);cursor:pointer;font-size:13px;
  color:var(--muted);border-left:2px solid transparent;transition:.12s;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.conv-item:hover{background:var(--hive-faint);color:var(--text)}
.conv-item.active{background:var(--hive-faint);color:var(--hive-core);border-left-color:var(--hive);
  box-shadow:inset 0 0 20px rgba(149,255,57,.05)}

.side-tools{display:grid;grid-template-columns:1fr 1fr;gap:6px;padding:12px 12px 8px;border-top:1px solid var(--line)}
.side-tool-btn{padding:9px 8px;background:rgba(0,0,0,.3);border:1px solid var(--line);border-radius:var(--radius);
  color:var(--muted);font-family:var(--font-mono);font-size:11px;letter-spacing:.04em;cursor:pointer;
  display:flex;align-items:center;gap:6px;justify-content:center;transition:.14s;text-transform:uppercase}
.side-tool-btn:hover{border-color:var(--line-2);color:var(--hive);background:var(--hive-faint)}
.side-tool-btn.icon-only{max-width:44px}
.badge{background:var(--alert);color:#0c1a00;font-size:10px;font-weight:700;padding:1px 6px;border-radius:9px;
  font-family:var(--font-mono);box-shadow:0 0 10px rgba(136,255,32,.5)}

.side-foot{display:flex;align-items:center;gap:8px;padding:12px 16px;border-top:1px solid var(--line);
  font-family:var(--font-mono);font-size:11px;color:var(--muted)}
.status-dot{width:8px;height:8px;border-radius:50%;background:var(--muted-2);flex:none}
.status-dot.online{background:var(--hive);box-shadow:0 0 10px var(--hive-glow);animation:pulse 2s infinite}
.status-dot.offline{background:var(--danger);box-shadow:0 0 8px rgba(160,255,77,.5)}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}
#statusText{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-transform:uppercase;letter-spacing:.05em}
.logout{background:transparent;border:0;color:var(--muted-2);cursor:pointer;font-size:11px;font-family:var(--font-mono)}
.logout:hover{color:var(--danger)}

/* ---------- MAIN ---------- */
.main{display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--void)}
.topbar{display:flex;align-items:center;gap:12px;padding:12px 18px;border-bottom:1px solid var(--line);
  background:var(--glass);backdrop-filter:blur(8px);min-width:0}
/* Always-visible brand mark (sidebar is off-canvas on mobile; topbar is the home row). */
.topbar-logo{width:28px;height:28px;max-width:28px;max-height:28px;object-fit:contain;flex:none;
  filter:drop-shadow(0 0 6px var(--hive-glow)) drop-shadow(0 0 10px var(--ooze-glow));
  display:block}
.topbar-title{font-family:var(--font-display);font-weight:700;font-size:14px;letter-spacing:.1em;
  color:var(--text-bright);min-width:0;text-transform:uppercase;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}
.topbar-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}
.mobile-only{display:none}
.ghost-btn{padding:7px 12px;background:rgba(0,0,0,.3);border:1px solid var(--line);border-radius:var(--radius);
  color:var(--muted);font-family:var(--font-mono);font-size:11px;letter-spacing:.05em;cursor:pointer;transition:.14s;text-transform:uppercase}
.ghost-btn:hover:not(:disabled){border-color:var(--line-2);color:var(--hive)}
.ghost-btn:disabled{opacity:.4;cursor:not-allowed}
.ghost-btn.sm{padding:5px 9px;font-size:10px}
.ghost-btn.ok{color:var(--hive);border-color:var(--line-2)}
.ghost-btn.danger{color:var(--danger);border-color:rgba(160,255,77,.3)}
.ghost-btn.danger:hover{background:rgba(160,255,77,.08);border-color:var(--danger)}

.usage-chip{display:flex;align-items:center;gap:8px;padding:6px 11px;background:rgba(0,0,0,.3);
  border:1px solid var(--line);border-radius:var(--radius);cursor:pointer;font-family:var(--font-mono);font-size:11px}
.usage-chip:hover{border-color:var(--line-2)}
.usage-chip-label{color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
.usage-chip-text{color:var(--hive)}
.usage-chip-bar{width:52px;height:5px;background:rgba(0,0,0,.5);border-radius:3px;overflow:hidden;border:1px solid var(--line)}
.usage-chip-bar i{display:block;height:100%;background:var(--hive);box-shadow:0 0 8px var(--hive-glow)}

/* Shadow PC bridge status (topbar + sidebar) */
.shadow-chip{display:flex;align-items:center;gap:7px;padding:6px 11px;background:rgba(0,0,0,.3);
  border:1px solid var(--line);border-radius:var(--radius);cursor:pointer;font-family:var(--font-mono);font-size:11px;
  transition:border-color .14s,box-shadow .14s,color .14s}
.shadow-chip:hover{border-color:var(--line-2)}
.shadow-chip-label{color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
.shadow-chip-text{color:var(--muted-2);text-transform:uppercase;letter-spacing:.04em;font-weight:600}
.shadow-chip.live{border-color:rgba(149,255,57,.45);box-shadow:0 0 14px rgba(149,255,57,.12)}
.shadow-chip.live .shadow-chip-text{color:var(--hive)}
.shadow-chip.live .status-dot{background:var(--hive);box-shadow:0 0 10px var(--hive-glow);animation:pulse 2s infinite}
.shadow-chip.down{border-color:rgba(160,255,77,.28)}
.shadow-chip.down .shadow-chip-text{color:var(--danger)}
.shadow-chip.down .status-dot{background:var(--danger);box-shadow:0 0 8px rgba(160,255,77,.45)}
.shadow-chip.unknown .shadow-chip-text{color:var(--muted)}
.side-tool-btn.shadow-live{border-color:rgba(149,255,57,.4);color:var(--hive)}
.side-tool-btn.shadow-live .shadow-side-dot{background:var(--hive);box-shadow:0 0 8px var(--hive-glow)}
.side-tool-btn.shadow-down .shadow-side-dot{background:var(--danger);box-shadow:0 0 6px rgba(160,255,77,.4)}

/* ---------- STATUS / USAGE PANELS ---------- */
.status-panel{margin:14px 18px 0;padding:16px;background:var(--panel);border:1px solid var(--line-2);
  border-radius:var(--radius);backdrop-filter:blur(10px);box-shadow:0 0 30px rgba(0,0,0,.4)}
.status-panel-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}
.status-panel h3{margin:0;font-family:var(--font-display);font-size:14px;letter-spacing:.12em;
  color:var(--hive-core);text-transform:uppercase}
.status-meta{margin:3px 0 0;font-family:var(--font-mono);font-size:11px;color:var(--muted)}
.status-panel-actions{display:flex;gap:8px;align-items:center}
.status-host{font-family:var(--font-mono);font-size:12px;color:var(--muted);margin-bottom:10px}
.status-containers{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px}
.usage-body{font-family:var(--font-mono);font-size:12px;color:var(--text)}

/* Dominion tabs + file browser */
.dom-tabs{display:flex;gap:6px;margin:0 0 12px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.dom-tab{
  padding:7px 14px;background:rgba(0,0,0,.3);border:1px solid var(--line);border-radius:var(--radius);
  color:var(--muted);font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;cursor:pointer;
  text-transform:uppercase;transition:.14s
}
.dom-tab:hover{border-color:var(--line-2);color:var(--hive)}
.dom-tab.active{border-color:rgba(149,255,57,.5);color:var(--hive-core);background:var(--hive-faint);box-shadow:0 0 12px rgba(149,255,57,.12)}
.dom-pane.hidden{display:none!important}
.status-panel.dom-files-open{
  display:flex;flex-direction:column;min-height:min(70vh,640px);max-height:min(78vh,720px);overflow:hidden
}
.status-panel.dom-files-open .dom-pane:not(.hidden){flex:1;min-height:0;display:flex;flex-direction:column}
.fs-layout{display:grid;grid-template-columns:160px minmax(0,1fr);gap:12px;flex:1;min-height:0;overflow:hidden}
.fs-sidebar{
  display:flex;flex-direction:column;gap:4px;overflow-y:auto;padding-right:4px;
  border-right:1px solid var(--line);min-height:0
}
.fs-root-btn{
  text-align:left;padding:8px 10px;background:transparent;border:1px solid transparent;border-radius:var(--radius);
  color:var(--muted);font-family:var(--font-mono);font-size:11px;cursor:pointer;line-height:1.3
}
.fs-root-btn:hover{background:var(--hive-faint);color:var(--hive);border-color:var(--line)}
.fs-root-btn.active{background:var(--hive-faint);color:var(--hive-core);border-color:rgba(149,255,57,.35)}
.fs-main{display:flex;flex-direction:column;gap:8px;min-width:0;min-height:0;overflow:hidden}
.fs-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.fs-toolbar-actions{display:flex;gap:6px;margin-left:auto;flex-wrap:wrap}
.fs-breadcrumb{
  display:flex;flex-wrap:wrap;align-items:center;gap:4px;font-family:var(--font-mono);font-size:11px;
  color:var(--muted);min-width:0;flex:1
}
.fs-crumb{
  background:none;border:none;color:var(--hive);cursor:pointer;padding:2px 4px;font:inherit;border-radius:4px
}
.fs-crumb:hover{background:var(--hive-faint)}
.fs-crumb.current{color:var(--text);cursor:default;font-weight:600}
.fs-crumb-sep{opacity:.4;user-select:none}
.fs-list{
  flex:1;min-height:180px;overflow:auto;border:1px solid var(--line);border-radius:var(--radius);
  background:rgba(0,0,0,.35);-webkit-overflow-scrolling:touch
}
.fs-row{
  display:grid;grid-template-columns:32px minmax(0,1fr) 72px 110px;gap:4px;align-items:center;
  padding:7px 10px;border-bottom:1px solid rgba(149,255,57,.06);cursor:pointer;
  font-family:var(--font-mono);font-size:11px;color:var(--text)
}
.fs-row:hover{background:rgba(149,255,57,.06)}
.fs-row.selected{background:rgba(149,255,57,.12)}
.fs-row.fs-head{cursor:default;color:var(--muted-2);font-size:10px;text-transform:uppercase;letter-spacing:.04em;
  position:sticky;top:0;background:rgba(8,12,4,.95);z-index:1}
.fs-row.fs-head:hover{background:rgba(8,12,4,.95)}
.fs-col.check{display:flex;justify-content:center}
.fs-col.name{display:flex;align-items:center;gap:8px;min-width:0;overflow:hidden}
.fs-name-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fs-col.size,.fs-col.date{color:var(--muted);white-space:nowrap;font-size:10px}
.fs-icon{flex-shrink:0;opacity:.9}
.fs-check{accent-color:var(--hive);cursor:pointer}
.fs-hint{margin:0;font-family:var(--font-mono);font-size:10px;color:var(--muted-2);line-height:1.4}
.fs-preview{
  border:1px solid var(--line);border-radius:var(--radius);background:rgba(0,0,0,.4);
  max-height:220px;overflow:auto;padding:10px
}
.fs-preview:has(.fs-preview-md){max-height:min(70vh,640px)}
.fs-preview.hidden{display:none!important}
.fs-preview-head{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;
  font-family:var(--font-mono);font-size:12px;color:var(--hive-core)}
.fs-preview-actions{display:flex;gap:6px;align-items:center}
.fs-preview-img{display:block;max-width:100%;max-height:180px;margin:0 auto;border-radius:6px;object-fit:contain}
.fs-preview-text{
  margin:0;padding:8px;font-family:var(--font-mono);font-size:10.5px;line-height:1.45;color:var(--text);
  white-space:pre-wrap;word-break:break-word;max-height:160px;overflow:auto;background:rgba(0,0,0,.35);
  border-radius:6px
}
.fs-preview-md{
  margin:0;padding:14px 16px;font-size:16px;line-height:1.7;color:var(--text);
  word-break:break-word;max-height:min(60vh,560px);overflow:auto;background:rgba(0,0,0,.28);
  border-radius:8px
}
.fs-preview-md .md-h{font-size:1.25em;margin:1.05em 0 .4em;line-height:1.3}
.fs-preview-md .md-p{margin:.7em 0;line-height:1.7}
.fs-preview-md .md-ul{margin:.55em 0 .8em 1.2em}
.fs-preview-md .md-ul li{margin:.35em 0}
.fs-preview-md .md-table{font-size:14px}
.fs-preview-md img{max-width:100%;max-height:240px;height:auto;object-fit:contain}
.ghost-btn.danger,.ghost-btn.sm.danger{
  border-color:rgba(160,255,77,.45)!important;color:#c1ff8a!important
}
.ghost-btn.danger:hover:not(:disabled),.ghost-btn.sm.danger:hover:not(:disabled){
  background:rgba(160,255,77,.12)!important;border-color:rgba(160,255,77,.7)!important
}
.ghost-btn:disabled{opacity:.4;cursor:not-allowed}
@media (max-width:720px){
  .fs-layout{grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr)}
  .fs-sidebar{
    flex-direction:row;flex-wrap:wrap;border-right:none;border-bottom:1px solid var(--line);
    padding-bottom:8px;max-height:none;overflow:visible
  }
  .fs-root-btn{padding:6px 8px;font-size:10px}
  .fs-row{grid-template-columns:28px minmax(0,1fr) 56px; }
  .fs-col.date{display:none}
  .status-panel.dom-files-open{max-height:min(82vh,800px);min-height:50vh;margin:8px 10px 0}
}

/* ---------- MESSAGES ---------- */
/* Instant scroll during stream — CSS smooth + per-token scrollTop = seizure jank */
.messages{flex:1;overflow-y:auto;padding:22px 0;min-height:0;scroll-behavior:auto}
.load-older-btn{
  display:block;margin:0 auto 16px;padding:8px 14px;
  background:rgba(0,0,0,.35);border:1px solid var(--line);border-radius:var(--radius);
  color:var(--hive);font-family:var(--font-mono);font-size:11px;letter-spacing:.04em;
  cursor:pointer;text-transform:uppercase
}
.load-older-btn:hover{border-color:var(--hive);background:var(--hive-faint)}
.activity-cap{font-family:var(--font-mono);font-size:10px;color:var(--muted-2);margin:6px 0;padding:4px 0}
.welcome{max-width:640px;margin:6vh auto 0;text-align:center;padding:0 20px}
.hex-badge.big{width:96px;height:96px;margin:0 auto 22px;filter:drop-shadow(0 0 22px var(--hive-glow));
  animation:breathe 5s ease-in-out infinite}
.hex-badge.big img{width:100%;height:100%;object-fit:contain}
.welcome h2{font-family:var(--font-display);font-weight:800;font-size:26px;letter-spacing:.06em;
  color:var(--hive-core);margin:0 0 12px;text-shadow:0 0 20px var(--hive-glow)}
.welcome p{color:var(--muted);font-size:14px;margin:0 auto 24px;max-width:520px;line-height:1.7}
.chips{display:flex;flex-wrap:wrap;gap:9px;justify-content:center;margin-bottom:20px}
.chip{padding:9px 15px;background:rgba(0,0,0,.35);border:1px solid var(--line);border-radius:var(--radius);
  color:var(--muted);font-family:var(--font-mono);font-size:12px;cursor:pointer;transition:.14s}
.chip:hover{border-color:var(--hive);color:var(--hive-core);background:var(--hive-faint);
  box-shadow:0 0 16px var(--hive-faint);transform:translateY(-1px)}
.welcome-hint{font-family:var(--font-mono);font-size:11px;color:var(--muted-2);line-height:1.9}
.welcome-hint kbd{background:rgba(0,0,0,.5);border:1px solid var(--line);border-radius:3px;padding:1px 6px;color:var(--hive)}
.welcome-hint code{color:var(--hive-dim)}

.msg{max-width:820px;margin:0 auto 20px;padding:0 24px;display:flex;gap:14px}
/* Avatars — JS emits `.avatar.bot` / `.avatar.user`. Hard-cap the image or a
   full-resolution logo will render at native size and swallow the screen. */
.avatar,.msg-avatar{width:30px;height:30px;flex:none;display:grid;place-items:center;overflow:hidden;
  border-radius:var(--radius);font-family:var(--font-display);font-weight:700;font-size:11px;
  border:1px solid var(--line-2)}
.avatar img,.msg-avatar img{width:100%;height:100%;max-width:30px;max-height:30px;object-fit:contain;display:block}
.avatar.user,.msg.user .msg-avatar{background:var(--ooze-faint);color:var(--ooze-core);border-color:var(--line-ooze)}
.avatar.bot,.msg.assistant .msg-avatar{background:var(--void-2);color:var(--hive-core);border:0;
  clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%);
  box-shadow:0 0 8px var(--hive-faint),0 0 14px var(--ooze-faint)}
.avatar.bot img{filter:drop-shadow(0 0 4px var(--hive-glow)) drop-shadow(0 0 6px var(--ooze-glow))}

/* Inline logo inside the "thinking / working…" indicator — same trap, same cap. */
.indicator img,.msg-content > img[src$="fel-logo.jpg"]{
  width:16px;height:16px;max-width:16px;max-height:16px;object-fit:contain;
  vertical-align:middle;margin-right:6px;display:inline-block}

/* Belt-and-braces: NO image in a message may exceed the column. */
.msg-content img{max-width:100%;height:auto;border-radius:var(--radius)}
.msg-body{flex:1;min-width:0}
.msg-role{font-family:var(--font-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--muted-2);margin-bottom:5px}
.msg.user .msg-role{color:var(--muted)}
.msg.assistant .msg-role{color:var(--hive-dim)}
.msg-content{color:var(--text);font-size:14.5px;line-height:1.7;word-wrap:break-word}
.msg-content p{margin:0 0 12px}
.msg-content h1,.msg-content h2,.msg-content h3{font-family:var(--font-display);color:var(--hive-core);
  letter-spacing:.04em;margin:18px 0 10px}
.msg-content code{background:rgba(0,0,0,.5);border:1px solid var(--line);border-radius:3px;padding:1px 6px;
  font-family:var(--font-mono);font-size:12.5px;color:var(--hive-core)}
.msg-content pre{background:rgba(0,0,0,.6);border:1px solid var(--line-2);border-radius:var(--radius);
  padding:14px;overflow-x:auto;margin:12px 0}
.msg-content pre code{background:transparent;border:0;padding:0;color:var(--text)}
.msg-content a{color:var(--hive);text-decoration:none;border-bottom:1px solid var(--line-2)}
.msg-content a:hover{color:var(--hive-core);border-color:var(--hive)}
/* Phone-tappable share downloads — big hit target, clear affordance */
.msg-content a.share-dl,
.content a.share-dl{
  display:inline-flex;align-items:center;gap:8px;max-width:100%;
  margin:4px 2px;padding:10px 14px;min-height:44px;box-sizing:border-box;
  border:1px solid var(--hive);border-radius:10px;border-bottom:1px solid var(--hive);
  background:var(--hive-faint);color:var(--hive-core);text-decoration:none;
  font-family:var(--font-mono);font-size:13px;line-height:1.3;
  -webkit-tap-highlight-color:transparent;touch-action:manipulation;
  vertical-align:middle;word-break:break-all;
}
.msg-content a.share-dl:hover,
.content a.share-dl:hover,
.msg-content a.share-dl:active,
.content a.share-dl:active{
  background:rgba(119,255,0,.12);border-color:var(--hive-core);color:var(--hive-core);
  box-shadow:0 0 16px var(--hive-faint);
}
.share-dl-icon{
  flex:none;display:grid;place-items:center;width:22px;height:22px;
  border-radius:6px;background:var(--hive);color:#152a02;font-weight:700;font-size:14px;
}
.share-dl-name{flex:1;min-width:0}
.md-table{width:100%;border-collapse:collapse;margin:12px 0;font-size:13px}
.md-table th,.md-table td{border:1px solid var(--line);padding:7px 11px;text-align:left}
.md-table th{background:var(--hive-faint);color:var(--hive-core);font-family:var(--font-mono);
  font-size:11px;text-transform:uppercase;letter-spacing:.05em}

/* thinking indicator — assimilating */
.thinking{display:inline-flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:12px;color:var(--hive-dim)}
.thinking .hex-dot{animation:pulse 1s infinite}

/* ---------- COMPOSER ---------- */
.composer{
  flex-shrink:0;
  padding:14px 24px max(16px, env(safe-area-inset-bottom, 0px));
  border-top:1px solid var(--line);background:var(--glass);backdrop-filter:blur(8px);
}
.attach-tray{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}
.attach-tray:empty{display:none}
.composer-inner{max-width:820px;margin:0 auto;display:flex;align-items:flex-end;gap:8px;
  background:rgba(0,0,0,.4);border:1px solid var(--line-2);border-radius:var(--radius);padding:8px 10px;transition:.15s}
.composer-inner:focus-within{border-color:var(--ooze);box-shadow:0 0 0 3px var(--ooze-faint),0 0 22px var(--hive-faint)}
.attach{background:transparent;border:0;color:var(--muted);cursor:pointer;padding:6px;border-radius:var(--radius);display:grid;place-items:center;transition:.14s}
.attach:hover{color:var(--ooze-core)}
#input{flex:1;background:transparent;border:0;resize:none;color:var(--text-bright);font-family:var(--font-body);
  font-size:14.5px;line-height:1.6;max-height:200px;padding:6px 4px}
#input:focus{outline:none}
#input::placeholder{color:var(--muted-2)}
.send{width:38px;height:38px;background:var(--blend);border:0;border-radius:var(--radius);color:var(--on-accent);cursor:pointer;
  display:grid;place-items:center;transition:.15s;flex:none;box-shadow:0 0 12px var(--hive-faint),0 0 18px var(--ooze-faint)}
.send:hover{filter:brightness(1.1);box-shadow:0 0 20px var(--hive-glow),0 0 28px var(--ooze-glow)}
/* Outbound message queue (type while Hive is working) */
.msg-queue-tray{
  max-width:820px;margin:0 auto 8px;padding:0 4px;
  display:flex;flex-wrap:wrap;align-items:center;gap:6px;
}
.msg-queue-tray.hidden{display:none}
.mq-label{
  font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;
  color:var(--hive-dim);margin-right:2px;
}
.mq-chip{
  display:inline-flex;align-items:center;gap:6px;max-width:min(280px,70vw);
  padding:4px 8px 4px 8px;border-radius:99px;font-size:12px;
  background:rgba(149,255,57,.08);border:1px solid rgba(149,255,57,.22);color:var(--text);
}
.mq-n{font-weight:800;color:var(--hive);font-size:11px}
.mq-t{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px;opacity:.9}
.mq-x{
  border:0;background:transparent;color:var(--muted);cursor:pointer;font-size:14px;
  line-height:1;padding:0 2px;border-radius:4px;
}
.mq-x:hover{color:var(--danger)}
.mq-clear{
  border:0;background:transparent;color:var(--muted);cursor:pointer;font-size:11px;
  text-decoration:underline;font-family:inherit;padding:2px 4px;
}
.mq-clear:hover{color:var(--hive)}
.msg.queued-msg .bubble{border-style:dashed;opacity:.92}
.msg.parallel-run .bubble{border-color:rgba(160,255,77,.35);box-shadow:0 0 0 1px rgba(160,255,77,.12)}
.msg.parallel-run .role{color:#baff7d}
.queued-bar{
  display:flex;align-items:center;gap:10px;margin-top:8px;padding-top:8px;
  border-top:1px dashed var(--line);
}
.queued-tag{
  font-size:11px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;
  color:var(--hive);background:rgba(149,255,57,.1);border:1px solid rgba(149,255,57,.25);
  border-radius:6px;padding:2px 8px;
}
.queued-drop{
  margin-left:auto;border:0;background:transparent;color:var(--muted);cursor:pointer;
  font-size:12px;font-family:inherit;text-decoration:underline;
}
.queued-drop:hover{color:var(--danger)}
/* When busy: send + stop both visible (send queues) */
.composer-inner .send,.composer-inner .stop{flex-shrink:0}
.stop{width:38px;height:38px;background:var(--danger);border:0;border-radius:var(--radius);cursor:pointer;
  display:grid;place-items:center;flex:none}
.stop-sq{width:12px;height:12px;background:#ffffff;border-radius:2px}
.composer-meta{max-width:820px;margin:8px auto 0;display:flex;justify-content:space-between;
  font-family:var(--font-mono);font-size:10px;color:var(--muted-2)}
.composer-hint .linkish{background:transparent;border:0;color:var(--hive-dim);cursor:pointer;text-decoration:underline;font-family:inherit;font-size:inherit}
.char-count{color:var(--muted-2)}

/* ---------- PASTE AS FILE ---------- */
.paste-actions{display:flex;flex-direction:column;gap:8px;margin:4px 0 14px}
.paste-actions .paste-main{width:100%;justify-content:center;padding:12px 14px;font-size:13px;text-align:center}
.paste-remember{display:flex;align-items:center;justify-content:space-between;gap:12px;
  font-family:var(--font-mono);font-size:11px;color:var(--muted);margin-top:4px}
.paste-remember select{background:rgba(0,0,0,.4);border:1px solid var(--line-2);border-radius:var(--radius);
  color:var(--text);font-family:var(--font-mono);font-size:11px;padding:7px 10px;min-width:150px;cursor:pointer}
.paste-remember select:focus{outline:none;border-color:var(--hive)}

/* ---------- MODALS ---------- */
.modal{position:fixed;inset:0;z-index:200;display:grid;place-items:center;
  background:rgba(6,10,3,.84);backdrop-filter:blur(4px);padding:20px}
.modal-card{width:min(94vw,560px);max-height:86vh;overflow-y:auto;background:var(--panel-solid);
  border:1px solid var(--line-ooze);border-radius:var(--radius);padding:22px;position:relative;
  box-shadow:0 0 0 1px rgba(149,255,57,.05),0 0 40px rgba(149,255,57,.08),0 0 60px rgba(139,255,38,.12)}
.modal-card.wide{width:min(94vw,760px)}
.modal-card::before{content:"";position:absolute;top:-1px;left:-1px;width:20px;height:20px;
  border-top:2px solid var(--hive);border-left:2px solid var(--hive)}
.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.modal-head h3{margin:0;font-family:var(--font-display);font-size:15px;letter-spacing:.1em;
  color:var(--hive-core);text-transform:uppercase}
.modal-sub{font-family:var(--font-mono);font-size:11px;color:var(--muted);margin:0 0 16px}
.modal-card h4{font-family:var(--font-display);font-size:12px;letter-spacing:.08em;color:var(--hive);
  text-transform:uppercase;margin:16px 0 8px}
.shortcut-list{list-style:none;padding:0;margin:0;display:grid;gap:8px}
.shortcut-list li{display:flex;align-items:center;gap:12px;font-size:13px;color:var(--text)}
.shortcut-list kbd{background:rgba(0,0,0,.5);border:1px solid var(--line-2);border-radius:3px;padding:2px 8px;
  font-family:var(--font-mono);font-size:11px;color:var(--hive);min-width:24px;text-align:center}
.shortcut-list code{color:var(--hive-dim);font-family:var(--font-mono);font-size:12px}

/* approvals / jobs / cron cards */
.approvals-list{display:flex;flex-direction:column;gap:10px}
.approval-card,.cron-card{border:1px solid var(--line);border-radius:var(--radius);padding:13px;
  background:rgba(0,0,0,.3)}
.approval-head,.cron-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:7px}
.approval-head strong,.cron-head strong{font-family:var(--font-mono);color:var(--text-bright);font-size:13px}
.approval-cmd,.cron-cmdline{font-family:var(--font-mono);font-size:11.5px;color:var(--muted);
  background:rgba(0,0,0,.4);border:1px solid var(--line);border-radius:3px;padding:7px 9px;margin:6px 0;word-break:break-all}
.approval-log,.cron-log{max-height:150px;overflow:auto;background:rgba(0,0,0,.5);border-radius:3px;padding:9px;
  font-family:var(--font-mono);font-size:11px;color:var(--muted);white-space:pre-wrap;margin:6px 0}
.approval-actions,.cron-actions{display:flex;gap:7px;flex-wrap:wrap;margin-top:9px}
.pill{font-family:var(--font-mono);font-size:10px;padding:3px 7px;border-radius:3px;background:rgba(149,255,57,.08);
  color:var(--muted);letter-spacing:.05em;text-transform:uppercase;border:1px solid var(--line)}
.pill-ok{background:rgba(149,255,57,.14);color:var(--hive);border-color:var(--line-2)}
.pill-off{background:rgba(124,157,96,.1);color:var(--muted)}
.pill-run{background:rgba(136,255,32,.14);color:var(--alert);border-color:rgba(136,255,32,.3)}

/* cron runner + form */
.cron-state{font-family:var(--font-mono);font-size:11px;padding:3px 8px;border-radius:3px;letter-spacing:.08em}
.cron-state.on{background:rgba(149,255,57,.14);color:var(--hive);border:1px solid var(--line-2)}
.cron-state.off{background:rgba(124,157,96,.1);color:var(--muted);border:1px solid var(--line)}
.cron-runner{display:flex;align-items:center;gap:10px;padding:11px 13px;margin-bottom:14px;
  border:1px solid var(--line-2);border-radius:var(--radius);background:var(--hive-faint)}
.cron-runner strong{font-family:var(--font-display);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--hive-core)}
.cron-runner .spacer{flex:1}
.cron-form{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-top:8px}
.cron-form input,.cron-form select,.cron-form textarea{width:100%;padding:9px 11px;border-radius:var(--radius);
  border:1px solid var(--line);background:rgba(0,0,0,.4);color:var(--text);font-family:var(--font-mono);font-size:12px}
.cron-form input:focus,.cron-form select:focus,.cron-form textarea:focus{outline:none;border-color:var(--hive);box-shadow:0 0 0 2px var(--hive-faint)}
.cron-form .full{grid-column:1/-1}
.cron-cmd{font-family:var(--font-mono);font-size:11px;max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.artifacts-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}

/* ---------- TOASTS ---------- */
.toasts{position:fixed;bottom:24px;right:24px;z-index:300;display:flex;flex-direction:column;gap:10px}
.toast{padding:12px 16px;background:var(--panel-solid);border:1px solid var(--line-2);border-left:3px solid var(--hive);
  border-radius:var(--radius);color:var(--text);font-family:var(--font-mono);font-size:12px;max-width:340px;
  box-shadow:0 0 30px rgba(0,0,0,.5),0 0 20px var(--hive-faint);animation:toastin .25s ease}
.toast.err{border-left-color:var(--danger);color:#e6ffd0}
@keyframes toastin{from{transform:translateX(20px);opacity:0}to{transform:translateX(0);opacity:1}}

/* ---------- PWA install banner (Add to Home Screen) ---------- */
.a2hs{
  position:fixed;left:14px;right:14px;bottom:calc(14px + env(safe-area-inset-bottom,0px));
  z-index:280;display:flex;align-items:center;gap:12px;
  max-width:560px;margin:0 auto;padding:12px 14px;
  background:var(--panel-solid);border:1px solid var(--line-2);border-radius:10px;
  box-shadow:0 0 40px rgba(0,0,0,.55),0 0 24px var(--hive-faint);
}
.a2hs[hidden]{display:none !important}
.a2hs-icon{border-radius:10px;flex-shrink:0;border:1px solid var(--line)}
.a2hs-copy{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.a2hs-copy strong{font-family:var(--font-display);font-size:13px;color:var(--hive-core);letter-spacing:.04em}
.a2hs-copy span{font-size:12px;color:var(--muted);line-height:1.3}
.a2hs-install{
  flex-shrink:0;padding:8px 14px;border-radius:var(--radius);border:1px solid var(--hive);
  background:var(--hive);color:#152a02;font-family:var(--font-mono);font-size:12px;
  font-weight:600;cursor:pointer;text-transform:uppercase;letter-spacing:.04em
}
.a2hs-install:hover{filter:brightness(1.08)}
.a2hs-dismiss{
  flex-shrink:0;background:transparent;border:0;color:var(--muted);cursor:pointer;
  font-size:14px;padding:6px 4px;line-height:1
}
.a2hs-dismiss:hover{color:var(--text)}
@media (display-mode: standalone){
  .a2hs:not(.notif-prompt){display:none !important}
}
/* Desktop-alert prompt sits above install banner when both would show */
.notif-prompt{bottom:calc(14px + env(safe-area-inset-bottom,0px));z-index:285}
.notif-prompt .a2hs-actions{display:flex;gap:8px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}
@media (max-width:520px){
  .notif-prompt{flex-wrap:wrap}
  .notif-prompt .a2hs-actions{width:100%;justify-content:flex-end}
}

/* action buttons in chat (approve/deny/choices) */
.action-btn{padding:8px 16px;border-radius:var(--radius);font-family:var(--font-mono);font-size:12px;
  cursor:pointer;border:1px solid var(--line-2);background:rgba(0,0,0,.3);color:var(--text);transition:.14s;text-transform:uppercase;letter-spacing:.04em}
.action-btn:hover{border-color:var(--hive);color:var(--hive)}
.action-btn.ok,.action-btn.primary{background:var(--hive);color:#152a02;border-color:var(--hive)}
.action-btn.danger{background:rgba(160,255,77,.1);color:var(--danger);border-color:rgba(160,255,77,.3)}
.action-spinner{width:12px;height:12px;border:2px solid var(--hive-faint);border-top-color:var(--hive);
  border-radius:50%;animation:spin .7s linear infinite;display:inline-block}
@keyframes spin{to{transform:rotate(360deg)}}

/* scrollbars */
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--hive-deep);border-radius:4px}
::-webkit-scrollbar-thumb:hover{background:var(--hive-dim)}

/* jump to latest */
#jumpLatest{position:absolute;bottom:96px;left:50%;transform:translateX(-50%);z-index:5;
  padding:7px 14px;background:var(--panel-solid);border:1px solid var(--hive);border-radius:20px;
  color:var(--hive);font-family:var(--font-mono);font-size:11px;cursor:pointer;box-shadow:0 0 20px var(--hive-faint)}

/* ---------- RESPONSIVE ---------- */
@media(max-width:820px){
  .app{grid-template-columns:1fr}
  .sidebar{position:fixed;left:0;top:0;bottom:0;width:var(--sidebar-w);z-index:50;
    transform:translateX(-100%);transition:transform .24s cubic-bezier(.4,0,.2,1);
    padding-top:env(safe-area-inset-top,0px);
    padding-bottom:env(safe-area-inset-bottom,0px);
    /* Off-screen drawer must not steal taps after close */
    pointer-events:none}
  .app.mobile-open .sidebar{transform:translateX(0);box-shadow:0 0 40px rgba(149,255,57,.12),0 0 60px rgba(139,255,38,.14);
    pointer-events:auto}
  .sidebar-backdrop{position:fixed;inset:0;background:rgba(4,6,2,.72);z-index:40;
    opacity:0;pointer-events:none;transition:opacity .24s;display:none}
  /* Only intercept taps while the drawer is open */
  .app.mobile-open .sidebar-backdrop{display:block;opacity:1;pointer-events:auto}
  .app:not(.mobile-open) .sidebar-backdrop{display:none!important;opacity:0;pointer-events:none!important}
  /* Desktop collapse class must not shove the fixed drawer off while still open */
  .app.collapsed.mobile-open .sidebar{margin-left:0;transform:translateX(0);pointer-events:auto}
  .mobile-only{display:grid}
  .msg,.composer-inner,.composer-meta{padding-left:14px;padding-right:14px}
  .usage-chip-label,.shadow-chip-label,.export-label{display:none}
  /* Extra bottom room: gesture bar + Chrome URL bar collapse/expand */
  .composer{
    padding:12px 12px max(20px, calc(env(safe-area-inset-bottom, 0px) + 12px));
  }
  #jumpLatest{bottom:calc(88px + env(safe-area-inset-bottom, 0px))}
}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ============================================================ COLLECTIVE STATUS + FEATURE PANELS */
.hex-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px;margin-top:12px}
.hex-stat{position:relative;padding:14px 12px;background:rgba(0,0,0,.35);border:1px solid var(--line);
  border-radius:var(--radius);text-align:center;transition:.15s}
.hex-stat:hover{border-color:var(--line-2);box-shadow:0 0 18px var(--hive-faint)}
.hex-stat.ok{border-left:2px solid var(--hive)}
.hex-stat.warn{border-left:2px solid var(--alert)}
.hex-stat.bad{border-left:2px solid var(--danger)}
.hex-stat .v{font-family:var(--font-display);font-size:22px;font-weight:800;color:var(--hive-core);
  text-shadow:0 0 14px var(--hive-glow);line-height:1}
.hex-stat.warn .v{color:var(--alert);text-shadow:0 0 14px rgba(136,255,32,.4)}
.hex-stat.bad .v{color:var(--danger);text-shadow:none}
.hex-stat .k{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--muted);margin-top:6px}
.check-row{display:flex;align-items:center;gap:9px;padding:6px 10px;border-radius:3px;font-family:var(--font-mono);font-size:11.5px}
.check-row:nth-child(odd){background:rgba(0,0,0,.2)}
.check-row .cdot{width:7px;height:8px;flex:none;clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%)}
.check-row.pass .cdot{background:var(--hive);box-shadow:0 0 6px var(--hive-glow)}
.check-row.fail .cdot{background:var(--danger)}
.check-row .cname{flex:1;color:var(--text)}
.check-row .cdetail{color:var(--muted);font-size:10.5px}

/* memory browser */
.mem-tier{margin-bottom:12px}
.mem-tier-head{display:flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:11px;
  text-transform:uppercase;letter-spacing:.08em;color:var(--hive-dim);margin-bottom:6px}
.mem-tier-head .count{color:var(--muted)}
.mem-hit{padding:9px 11px;margin:5px 0;background:rgba(0,0,0,.3);border:1px solid var(--line);
  border-radius:var(--radius);font-size:12px;color:var(--text)}
.mem-hit .src{font-family:var(--font-mono);font-size:10px;color:var(--muted);margin-bottom:4px;display:flex;gap:8px;align-items:center}
.trust-badge{font-family:var(--font-mono);font-size:9px;padding:1px 6px;border-radius:3px;text-transform:uppercase;letter-spacing:.05em}
.trust-trusted{background:rgba(149,255,57,.14);color:var(--hive);border:1px solid var(--line-2)}
.trust-quarantined{background:rgba(136,255,32,.14);color:var(--alert);border:1px solid rgba(136,255,32,.3)}
.trust-untrusted{background:rgba(160,255,77,.12);color:var(--danger);border:1px solid rgba(160,255,77,.3)}
#memSearch{width:100%;padding:10px 12px;background:rgba(0,0,0,.4);border:1px solid var(--line-2);
  border-radius:var(--radius);color:var(--text);font-family:var(--font-mono);font-size:12px;margin-bottom:14px}
#memSearch:focus{outline:none;border-color:var(--hive);box-shadow:0 0 0 2px var(--hive-faint)}

/* preflight verdict on approval cards */
.preflight-verdict{margin:8px 0;padding:8px 11px;border-radius:var(--radius);font-family:var(--font-mono);
  font-size:11px;display:flex;align-items:center;gap:8px}
.preflight-verdict.safe{background:rgba(149,255,57,.1);color:var(--hive);border:1px solid var(--line-2)}
.preflight-verdict.broken{background:rgba(160,255,77,.1);color:var(--danger);border:1px solid rgba(160,255,77,.3)}
.preflight-verdict.none{background:rgba(0,0,0,.3);color:var(--muted);border:1px solid var(--line)}
.preflight-verdict::before{font-size:13px}
.preflight-verdict.safe::before{content:"⬡";color:var(--hive)}
.preflight-verdict.broken::before{content:"⬢";color:var(--danger)}

/* ============================================================
   FUNCTIONAL REPAIR — Borg reskin dropped these class names.
   JS emits: .conv .row .bubble .role .content .thinking-dot
   .turn-status .action-card .approval .msg-actions etc.
   Map legacy honey/comb tokens → hive palette for any leftovers.
   ============================================================ */
:root{
  --honey:var(--hive);
  --amber:var(--alert);
  --comb:rgba(139,255,38,.08);
  --comb-line:var(--line);
  --bg:var(--void);
}

/* layout anchors */
.main{position:relative}
.app.collapsed .sidebar{margin-left:calc(-1 * var(--sidebar-w));transition:margin .2s}
.app.collapsed .brand span,.app.collapsed .new-chat span,
.app.collapsed .projects-block,.app.collapsed .search-wrap,.app.collapsed .side-tools,
.app.collapsed .side-foot #statusText,.app.collapsed .side-foot .logout{display:none}

/* ---------- conversation list (JS: .conv not .conv-item) ---------- */
.conv{
  display:flex;align-items:center;gap:10px;
  padding:10px 12px;margin:2px 0;
  border-radius:var(--radius);cursor:pointer;
  color:var(--muted);font-size:13.5px;
  border-left:2px solid transparent;
  transition:background .12s,color .12s,border-color .12s;
}
.conv:hover{background:var(--hive-faint);color:var(--text)}
.conv.active{background:var(--hive-faint);color:var(--hive-core);border-left-color:var(--hive)}
/* Parallel multi-chat: agent still working while you are in another chat */
.conv.running{border-left-color:var(--hive)}
.conv.running .cell{
  background:var(--hive)!important;
  box-shadow:0 0 8px var(--hive-glow);
  animation:pulse 1.2s ease-in-out infinite;
}
.conv.running .count{
  color:#0a0b09;background:var(--hive);font-weight:700;
  box-shadow:0 0 8px var(--hive-glow);
}
.conv .cell{
  width:8px;height:8px;flex-shrink:0;background:var(--muted-2);
  clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%);
}
.conv.active .cell,.conv:hover .cell,.conv.pinned .cell{background:var(--hive)}
.conv .title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.conv .count{
  font-size:11px;color:var(--muted-2);background:rgba(0,0,0,.4);
  border-radius:20px;padding:1px 7px;margin-left:auto;flex:none;
}
.conv .row-btn,.conv .del{
  opacity:0;background:none;border:none;color:var(--muted);
  font-size:14px;padding:0 3px;cursor:pointer;transition:opacity .12s,color .12s;flex:none;
}
.conv:hover .row-btn,.conv:hover .del{opacity:1}
.conv .row-btn.pin:hover{color:var(--hive)}
.conv .row-btn.del:hover,.conv .del:hover{color:var(--danger)}
.conv.pinned .row-btn.pin{opacity:1;color:var(--hive)}
.conv-empty{padding:18px 16px;color:var(--muted-2);font-size:13px;text-align:center}

/* status connection dot — JS toggles .off and .online/.offline */
.status-dot{width:8px;height:8px;border-radius:50%;flex:none;
  background:var(--hive);box-shadow:0 0 10px var(--hive-glow);animation:pulse 2s infinite}
.status-dot.off,.status-dot.offline{background:var(--danger);box-shadow:0 0 8px rgba(160,255,77,.5);animation:none}
.status-dot.online{background:var(--hive);box-shadow:0 0 10px var(--hive-glow)}

/* ---------- message structure: .msg > .row > (.avatar + .bubble) ---------- */
.msg{max-width:none;margin:0;padding:8px 0 20px;display:block}
.msg .row{max-width:820px;margin:0 auto;padding:0 24px;display:flex;gap:14px;align-items:flex-start}
.bubble{flex:1;min-width:0;padding-top:3px}
.role{font-size:12px;color:var(--muted);font-weight:600;letter-spacing:.04em;margin-bottom:4px;
  font-family:var(--font-mono);text-transform:uppercase}
.msg-time{margin-left:8px;font-size:11px;font-weight:400;color:var(--muted-2);
  letter-spacing:0;font-family:var(--font-body);text-transform:none}
.content{font-size:15px;line-height:1.7;word-wrap:break-word;color:var(--text)}
.content code{font-family:var(--font-mono);font-size:13px;
  background:rgba(0,0,0,.5);border:1px solid var(--line);padding:1px 6px;border-radius:3px;color:var(--hive-core)}
.content pre{background:rgba(0,0,0,.6);border:1px solid var(--line-2);
  border-radius:var(--radius);padding:14px 16px;overflow-x:auto;margin:12px 0}
.content pre code{background:none;border:0;padding:0;color:var(--text)}
.content a{color:var(--hive);text-decoration:underline;text-underline-offset:2px;word-break:break-all}
.content a:hover{color:var(--hive-core)}
.content .md-h{font-family:var(--font-display);color:var(--hive-core);margin:.8em 0 .35em}
.content .md-ul{margin:.4em 0 .6em 1.2em;padding:0}
.content .md-ul li{margin:.25em 0}
.content .md-p{margin:.45em 0;line-height:1.55}
.content .md-table{width:100%;border-collapse:collapse;margin:.6em 0;font-size:13px}
.content .md-table th,.content .md-table td{border:1px solid var(--line);padding:6px 8px;text-align:left}
.content .md-table th{background:var(--hive-faint);color:var(--hive-core);font-family:var(--font-mono);font-size:11px}
.code-block{position:relative;margin:.5em 0}
.code-lang{position:absolute;top:6px;right:10px;font-size:10px;color:var(--muted-2);
  font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em}
.stopped-tag{display:inline-block;font-size:11px;color:var(--alert);
  border:1px solid var(--line);border-radius:20px;padding:1px 8px;margin-left:6px}

/* thinking / activity / working indicator */
.think,.activity{
  margin:8px 0;border:1px solid var(--line);border-radius:var(--radius);
  background:var(--panel);font-size:13px;overflow:hidden;
}
.think summary,.activity summary{
  cursor:pointer;padding:9px 14px;color:var(--muted);list-style:none;
  display:flex;align-items:center;gap:8px;user-select:none;font-family:var(--font-mono);font-size:12px;
}
.think summary::-webkit-details-marker,.activity summary::-webkit-details-marker{display:none}
.think summary .cell,.activity summary .cell{
  width:8px;height:8px;background:var(--alert);flex:none;
  clip-path:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%);
}
.think .body{padding:4px 14px 12px;color:var(--muted-2);font-family:var(--font-mono);
  font-size:12px;line-height:1.6;white-space:pre-wrap;max-height:260px;overflow-y:auto}
.activity .body{padding:4px 14px 12px;font-family:var(--font-mono);font-size:12px;
  color:var(--hive-dim);white-space:pre-wrap;max-height:260px;overflow-y:auto}
.thinking-dot{
  display:inline-flex;align-items:center;gap:8px;color:var(--hive-dim);
  font-size:13px;font-family:var(--font-mono);max-width:100%;flex-wrap:wrap;
}
.thinking-dot img{width:16px;height:16px;max-width:16px;max-height:16px;object-fit:contain;
  animation:pulse 1.1s ease-in-out infinite;flex-shrink:0;display:inline-block;vertical-align:middle}
.thinking-dot .thinking-label{display:inline-flex;align-items:baseline;letter-spacing:.02em}
/* animated ellipsis — width clip is more reliable than content keyframes */
.thinking-dot .thinking-dots::after{
  content:"...";
  display:inline-block;
  width:0;
  overflow:hidden;
  vertical-align:bottom;
  animation:thinking-dots 1.2s steps(4, end) infinite;
}
@keyframes thinking-dots{
  to{width:1.25em}
}
.thinking-dot.stale-warn{color:var(--hive-dim)} /* no amber scare state */}

/* msg actions / copy / errors / turn status */
.msg-actions{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}
.msg-act,.copy-btn{
  background:transparent;border:1px solid var(--line);color:var(--muted);
  border-radius:var(--radius);padding:4px 12px;font-size:12px;font-family:inherit;cursor:pointer;
  transition:border-color .15s,color .15s;
}
.msg-act:hover,.copy-btn:hover{border-color:var(--hive);color:var(--hive)}
.msg-error{color:var(--danger);font-size:14px;margin-top:6px}
.msg-attachments{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 6px}
.session-report .bubble{border-left:2px solid var(--hive-dim);padding-left:10px}

.turn-status{
  margin-top:12px;padding:8px 12px;border-radius:var(--radius);
  font-size:12.5px;font-weight:600;letter-spacing:.02em;
  border:1px solid var(--line);background:var(--panel);color:var(--muted);
  font-family:var(--font-mono);
}
.turn-status.done,.turn-status.resolved{
  color:#ffffff;background:#395c1a;border-color:#588a2d;
}
.turn-status.waiting{
  color:#0c1a00;background:#a0ff4d;border-color:#6be600;
}
.turn-status.partial{
  color:#daffb9;background:rgba(160,255,77,.15);border-color:rgba(160,255,77,.4);
}
.turn-status.stopped,.turn-status.blocked{
  color:var(--danger);background:rgba(160,255,77,.12);border-color:rgba(160,255,77,.35);
}

/* attach / drop / files */
.attach-tray{display:none;max-width:820px;margin:0 auto 8px;padding:0 24px;flex-wrap:wrap;gap:8px}
.attach-tray.has-items{display:flex}
.file-chip{
  display:inline-flex;align-items:center;gap:6px;
  background:rgba(0,0,0,.35);border:1px solid var(--line);color:var(--text);
  border-radius:var(--radius);padding:5px 10px;font-size:12.5px;font-family:var(--font-mono);
}
.file-chip.removable button{background:none;border:none;color:var(--muted);font-size:15px;cursor:pointer;padding:0}
.file-chip.removable button:hover{color:var(--danger)}
.messages.dropping{outline:2px dashed var(--hive);outline-offset:-8px}
.ghost-btn.active{border-color:var(--hive);color:var(--hive)}

/* status panel containers */
.status-host{display:flex;gap:20px;margin-bottom:12px;flex-wrap:wrap}
.status-host .stat,.usage-row .stat{display:flex;flex-direction:column;gap:2px;min-width:90px}
.status-host .stat span,.usage-row .stat span{
  font-size:11px;color:var(--muted-2);text-transform:uppercase;letter-spacing:.05em}
.status-host .stat b,.usage-row .stat b{
  font-family:var(--font-mono);font-size:13px;color:var(--text);font-weight:500}
.ct-row{display:flex;align-items:center;gap:10px;padding:6px 10px;border-radius:var(--radius);font-size:12.5px}
.ct-row:hover{background:var(--hive-faint)}
.ct-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.ct-dot.on{background:var(--hive);box-shadow:0 0 6px var(--hive-glow)}
.ct-dot.off{background:var(--muted-2)}
.ct-name{font-family:var(--font-mono);color:var(--text)}
.ct-status{margin-left:auto;color:var(--muted);font-size:11.5px}

/* usage dashboard extras */
.usage-chip.warn{border-color:var(--alert)}
.usage-chip.hot{border-color:var(--danger);color:var(--danger)}
.usage-chip.warn .usage-chip-bar i{background:var(--alert)}
.usage-chip.hot .usage-chip-bar i{background:var(--danger)}
.usage-panel{max-height:58vh;overflow-y:auto}
.usage-body{display:flex;flex-direction:column;gap:14px}
.sg-weekly{max-width:520px}
.sg-title{margin:0 0 14px;font-size:15px;font-weight:500;color:var(--muted);letter-spacing:.01em;
  font-family:var(--font-display);text-transform:uppercase;font-size:12px;letter-spacing:.1em;color:var(--hive-core)}
.sg-card{background:rgba(0,0,0,.4);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px}
.sg-card-top{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.sg-pct{font-size:15px;color:var(--text)}
.sg-pct strong{font-weight:700;font-size:18px;color:var(--hive-core)}
.sg-pct span{color:var(--muted);font-weight:400}
.sg-reset{font-size:12px;color:var(--muted);white-space:nowrap;font-family:var(--font-mono)}
.sg-bar{height:6px;background:rgba(0,0,0,.5);border-radius:999px;overflow:hidden;border:1px solid var(--line)}
.sg-bar i{display:block;height:100%;background:var(--hive);border-radius:999px;
  box-shadow:0 0 8px var(--hive-glow);transition:width .4s ease}
.sg-features{margin-top:10px;display:flex;flex-direction:column;gap:8px}
.sg-feature{display:flex;align-items:center;gap:10px;background:rgba(0,0,0,.3);
  border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;font-size:13px}
.sg-dot{width:8px;height:8px;border-radius:50%;background:var(--hive);flex-shrink:0;box-shadow:0 0 6px var(--hive-glow)}
.sg-feat-name{color:var(--text);font-weight:500}
.sg-feat-pct{margin-left:auto;color:var(--muted);font-size:12px;font-family:var(--font-mono)}
.sg-note{margin:14px 4px 0;font-size:12px;line-height:1.45;color:var(--muted-2)}
.usage-card{background:rgba(0,0,0,.3);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}
.usage-card-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;font-size:13px;color:var(--muted)}
.usage-card-head b{font-family:var(--font-mono);color:var(--hive);font-weight:600}
.usage-card-head b.muted{color:var(--muted-2)}
.usage-bar{height:8px;background:rgba(0,0,0,.5);border-radius:8px;overflow:hidden;margin-bottom:12px;border:1px solid var(--line)}
.usage-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--hive-dim),var(--hive));border-radius:8px;transition:width .35s ease}
.usage-row{display:flex;flex-wrap:wrap;gap:16px 22px}
.usage-note{margin:10px 0 0;font-size:12px;color:var(--muted-2);line-height:1.45}
.usage-note code{font-family:var(--font-mono);font-size:11px;background:rgba(0,0,0,.5);border-radius:3px;padding:1px 5px;color:var(--hive-core)}
.usage-foot{font-size:11.5px;color:var(--muted-2);padding:0 4px}

/* approvals modal rows (JS: .approval not only .approval-card) */
.approvals-list{display:flex;flex-direction:column;gap:10px;max-height:62vh;overflow-y:auto}
.approval{
  border:1px solid var(--line);border-radius:var(--radius);padding:12px;background:rgba(0,0,0,.3);
}
.approval.pending{border-color:var(--alert)}
.approval.approved,.approval.running{border-color:var(--hive)}
.approval.denied,.approval.failed{opacity:.7;border-color:rgba(160,255,77,.35)}
.ap-head{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px}
.ap-title{font-weight:600;font-size:13.5px;color:var(--text-bright)}
.ap-status{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-family:var(--font-mono)}
.ap-cmd,.ap-out{
  font-family:var(--font-mono);font-size:12px;background:rgba(0,0,0,.5);
  border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px;
  overflow-x:auto;white-space:pre-wrap;word-break:break-all;margin:0 0 8px;color:var(--muted);
}
.ap-out{max-height:160px;overflow-y:auto}
.ap-actions{display:flex;gap:8px;flex-wrap:wrap}
.ghost-btn.ok:hover{border-color:var(--hive);color:var(--hive)}
.ghost-btn.no:hover{border-color:var(--danger);color:var(--danger)}
.badge:not(.hidden){display:inline-grid;place-items:center;min-width:16px;height:16px;
  background:var(--danger);color:#ffffff;border-radius:10px;font-size:10px;font-weight:700;
  padding:0 4px;margin-left:4px;box-shadow:0 0 10px rgba(160,255,77,.4)}

/* artifacts */
.art-card{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;
  cursor:pointer;background:rgba(0,0,0,.3);transition:border-color .15s}
.art-card:hover{border-color:var(--hive);box-shadow:0 0 16px var(--hive-faint)}
.art-card img{width:100%;height:120px;object-fit:cover;display:block}
.art-file{height:120px;display:grid;place-items:center;font-family:var(--font-mono);
  font-size:20px;color:var(--muted);background:rgba(0,0,0,.4)}
.art-meta{padding:7px 9px;display:flex;justify-content:space-between;align-items:center;gap:6px}
.art-name{font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}
.art-tag{font-size:10px;color:var(--muted-2);border:1px solid var(--line);border-radius:10px;padding:1px 6px;flex-shrink:0}

/* jump latest */
.jump-latest,#jumpLatest{
  position:absolute;left:50%;bottom:108px;transform:translateX(-50%);z-index:5;
  background:var(--hive);color:#152a02;border:none;border-radius:999px;
  padding:8px 14px;font-size:12px;font-weight:700;font-family:var(--font-mono);
  box-shadow:0 0 20px var(--hive-glow);cursor:pointer;letter-spacing:.04em;text-transform:uppercase;
}
.jump-latest:hover,#jumpLatest:hover{filter:brightness(1.08)}
.jump-latest.hidden,#jumpLatest.hidden{display:none!important}

/* toast show transition (JS adds .show) */
.toast{opacity:0;transform:translateY(8px);transition:opacity .2s,transform .2s}
.toast.show{opacity:1;transform:translateY(0)}

/* ---------- in-chat action cards ---------- */
.msg.action-msg{max-width:820px;margin:8px auto;padding:0 24px;display:block}
.action-card{
  background:linear-gradient(160deg,rgba(16,22,10,.95),rgba(6,8,5,.98));
  border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;
  box-shadow:0 0 0 1px rgba(149,255,57,.04),0 0 24px rgba(0,0,0,.4);
}
.action-card.pending{border-color:var(--alert)}
.action-card.running{border-color:#a0ff4d}
.action-card.approved,.action-card.answered{border-color:var(--hive)}
.action-card.denied,.action-card.failed{border-color:var(--danger);opacity:.92}
.action-card-head{display:flex;align-items:flex-start;gap:10px;margin-bottom:10px}
.action-badge{
  flex-shrink:0;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  background:rgba(0,0,0,.4);color:var(--hive);border:1px solid var(--line);border-radius:999px;
  padding:3px 8px;margin-top:2px;font-family:var(--font-mono);
}
.action-card.approval-type .action-badge{color:var(--alert)}
.action-title{font-family:var(--font-display);font-size:14px;font-weight:600;color:var(--text-bright);line-height:1.35;letter-spacing:.04em}
.action-status{font-size:13.5px;font-weight:600;color:var(--muted);margin-bottom:10px;line-height:1.4}
.action-card.pending .action-status{color:var(--alert)}
.action-card.running .action-status{color:#baff7e}
.action-card.approved .action-status,.action-card.answered .action-status{color:var(--hive)}
.action-card.denied .action-status,.action-card.failed .action-status{color:var(--danger)}
.action-progress{
  display:flex;align-items:center;gap:10px;margin:0 0 12px;padding:10px 12px;
  border-radius:var(--radius);background:rgba(160,255,77,.1);border:1px solid rgba(160,255,77,.35);
  font-size:12.5px;color:#daffb9;
}
.action-spinner{
  width:16px;height:16px;flex-shrink:0;border:2px solid rgba(186,255,126,.25);
  border-top-color:#baff7e;border-radius:50%;animation:action-spin .8s linear infinite;display:inline-block;
}
@keyframes action-spin{to{transform:rotate(360deg)}}
.action-progress-text{line-height:1.35}
.action-outcome{
  font-size:12.5px;color:var(--muted);margin:0 0 10px;padding:8px 10px;
  border-radius:var(--radius);background:rgba(0,0,0,.3);border:1px solid var(--line);
}
.action-card.approved .action-outcome{border-color:rgba(149,255,57,.35);color:var(--hive)}
.action-card.failed .action-outcome{border-color:rgba(160,255,77,.4);color:var(--danger)}
.action-detail-wrap,.action-output-wrap{
  margin:0 0 12px;border:1px solid var(--line);border-radius:var(--radius);
  background:rgba(0,0,0,.5);overflow:hidden;
}
.action-detail-wrap summary,.action-output-wrap summary{
  cursor:pointer;padding:8px 12px;font-size:12px;font-weight:600;
  color:var(--muted);user-select:none;list-style:none;font-family:var(--font-mono);
}
.action-detail-wrap summary::-webkit-details-marker,
.action-output-wrap summary::-webkit-details-marker{display:none}
.action-detail,.action-output{
  margin:0;padding:0 12px 12px;font-family:var(--font-mono);font-size:11.5px;
  color:#dff0d0;white-space:pre-wrap;word-break:break-word;max-height:180px;overflow:auto;
}
.action-card.running .action-output{color:#f3ffe8;max-height:220px}
.action-card.approved .action-output{max-height:240px}
.action-next{
  margin-top:4px;padding:10px 12px;border-radius:var(--radius);font-size:12.5px;line-height:1.45;
  color:var(--text);background:rgba(149,255,57,.08);border:1px solid rgba(149,255,57,.25);
}
.action-next.fail{background:rgba(160,255,77,.1);border-color:rgba(160,255,77,.35)}
.action-next strong{color:var(--hive)}
.action-next.fail strong{color:var(--danger)}
.action-btns{display:flex;flex-wrap:wrap;gap:8px}
.action-btn{
  font-family:var(--font-mono);font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;
  border-radius:var(--radius);padding:10px 16px;border:1px solid var(--line);
  background:rgba(0,0,0,.3);color:var(--text);cursor:pointer;transition:filter .15s,border-color .15s;
}
.action-btn:hover:not(:disabled){filter:brightness(1.1);border-color:var(--hive);color:var(--hive)}
.action-btn:disabled{opacity:.45;cursor:default}
.action-btn.ok{background:var(--hive);color:#152a02;border-color:var(--hive)}
.action-btn.ok:hover:not(:disabled){filter:brightness(1.06);color:#152a02}
.action-btn.danger{background:transparent;color:var(--danger);border-color:rgba(160,255,77,.4)}
.action-btn.danger:hover:not(:disabled){background:rgba(160,255,77,.12)}
.action-btn.primary{background:#a0ff4d;color:#ffffff;border-color:#a0ff4d}
.action-btn.chosen{outline:2px solid var(--hive);outline-offset:1px;opacity:1!important}

@media(max-width:820px){
  .msg .row{padding:0 14px}
  .msg.action-msg{padding:0 12px}
  .action-btn{flex:1 1 auto;text-align:center}
  .composer-meta{display:none}
  #input{font-size:16px} /* avoid iOS zoom */
  .welcome{margin-top:3vh}
}

@media (max-width:720px){
  /* Five labelled chips + a title do not fit 380px. Drop the chips to
     icon/value only so the conversation name stays readable. */
  .shadow-chip-label,.usage-chip-label{display:none}
  .topbar{gap:8px;padding:10px 12px}
  .topbar-actions{gap:5px}
  .shadow-chip,.usage-chip{padding:5px 7px}
  .usage-chip-bar{display:none}
  .export-btn{display:none}          /* also lives in the side menu */
  .topbar-title{font-size:13px;letter-spacing:.03em}
  /* Shadow remains reachable in the sidebar; its OFF badge is not chat health. */
  #shadowChip{display:none}
  .topbar-actions>button,#menuBtn{min-width:44px;min-height:44px}
  .act-rail>summary{min-height:44px;padding:8px 10px}
  .act-row.has-raw{min-height:44px;align-items:center}
  .act-txt{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .engine-btn{min-height:44px}
}

/* ---------------- activity rail ----------------
   Replaces the stack of per-event <details> cards. One collapsed line per
   turn; expands to the whole run. Tuned for phone width first. */
.act-rail{
  margin:8px 0 10px;border:1px solid var(--line);border-radius:var(--radius);
  background:rgba(0,0,0,.28);overflow:hidden;
}
.act-rail>summary{
  cursor:pointer;list-style:none;padding:7px 12px;
  font-family:var(--font-mono);font-size:11.5px;letter-spacing:.02em;
  color:var(--muted);display:flex;align-items:center;gap:9px;
  white-space:nowrap;overflow:hidden;
}
.act-rail>summary::-webkit-details-marker{display:none}
.act-rail>summary::after{
  content:"\203A";margin-left:auto;color:var(--muted-2);
  transition:transform .16s ease;flex-shrink:0;font-size:15px;
}
.act-rail[open]>summary::after{transform:rotate(90deg)}
.act-rail>summary:hover{background:var(--hive-faint);color:var(--hive-core)}
.act-count{color:var(--hive-dim);font-weight:700;flex-shrink:0}
.act-last{
  color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;
}
.act-rail.live>summary{border-left:2px solid var(--hive);}
.act-rail.live .act-count{color:var(--hive);animation:pulse 1.4s ease-in-out infinite}
.act-rail-body{
  border-top:1px solid var(--line);max-height:320px;overflow-y:auto;
  padding:4px 0;-webkit-overflow-scrolling:touch;
}
.act-row{
  display:flex;align-items:baseline;gap:9px;padding:4px 12px;
  font-family:var(--font-mono);font-size:11.5px;color:var(--muted);line-height:1.5;
}
.act-row.has-raw{cursor:pointer}
.act-row.has-raw:hover{background:var(--hive-faint);color:var(--hive-core)}
.act-errors{color:var(--alert);flex-shrink:0;font-weight:700}
.act-row.act-failed{color:var(--alert);border-left:2px solid var(--alert)}
.act-row.has-raw:focus-visible,.act-rail>summary:focus-visible{outline:2px solid var(--hive);outline-offset:-2px}
.act-idx{color:var(--muted-2);min-width:2.1em;text-align:right;flex-shrink:0;font-size:10.5px}
.act-ic{color:var(--hive-dim);flex-shrink:0}
.act-txt{overflow-wrap:anywhere;min-width:0}
.act-rep{
  margin-left:auto;flex-shrink:0;color:var(--alert);font-size:10.5px;font-weight:700;
  padding-left:8px;
}
.act-raw{
  margin:0 12px 6px;padding:8px 10px;border-radius:var(--radius);
  background:rgba(0,0,0,.45);border:1px solid var(--line);
  font-family:var(--font-mono);font-size:10.5px;color:var(--hive-dim);
  white-space:pre-wrap;max-height:220px;overflow:auto;
}

/* one-tap resume on a cut turn */
@media(max-width:720px){
  .act-rail-body{max-height:min(32dvh,240px);overscroll-behavior:contain}
}

.turn-status.partial{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.turn-continue{
  margin-left:auto;padding:5px 13px;border-radius:var(--radius);cursor:pointer;
  font-family:var(--font-mono);font-size:11.5px;font-weight:700;letter-spacing:.03em;
  color:#0b1304;background:var(--hive);border:1px solid var(--hive-core);
  transition:.14s;
}
.turn-continue:hover{background:var(--hive-core);box-shadow:0 0 16px var(--hive-glow)}
.turn-continue:active{transform:translateY(1px)}

/* ---------- Engine toggle (composer) ---------- */
.composer{position:relative}
.engine-btn{
  --eng:#e5e8e2;
  flex:none;align-self:center;display:inline-flex;align-items:center;gap:6px;
  height:32px;padding:0 10px;margin:0 2px;cursor:pointer;
  background:rgba(255,255,255,.03);color:var(--text-bright);
  border:1px solid color-mix(in srgb,var(--eng) 45%,transparent);border-radius:999px;
  font:600 12px/1 var(--font-mono);letter-spacing:.04em;white-space:nowrap;
  transition:border-color .14s,background .14s;
}
.engine-btn:hover,.engine-btn[aria-expanded="true"]{background:color-mix(in srgb,var(--eng) 12%,transparent)}
.engine-dot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--eng);box-shadow:0 0 8px var(--eng)}
.eng-grok{--eng:#e5e8e2}
.eng-sol{--eng:#79ff03}
.eng-astra{--eng:#a0ff4d}
.engine-menu{
  position:absolute;left:24px;bottom:calc(100% - 6px);z-index:40;
  min-width:260px;max-width:calc(100vw - 32px);padding:6px;
  background:#080808;border:1px solid var(--line-ooze);border-radius:8px;
  box-shadow:0 12px 40px rgba(0,0,0,.55);
}
.engine-menu.hidden{display:none}
.engine-opt{
  display:flex;align-items:center;gap:10px;width:100%;text-align:left;cursor:pointer;
  padding:10px 10px;border:0;border-radius:6px;background:transparent;color:var(--text);
}
.engine-opt:hover{background:rgba(255,255,255,.05)}
.engine-opt.active{background:color-mix(in srgb,var(--eng) 14%,transparent)}
.engine-opt-text{display:flex;flex-direction:column;gap:3px;min-width:0}
.engine-opt-text b{font:700 13px/1.1 var(--font-body);color:var(--text-bright)}
.engine-opt-text small{font:12px/1.25 var(--font-body);color:var(--muted)}
@media (max-width:720px){
  .engine-btn{height:30px;padding:0 8px;font-size:11px;gap:5px}
  .engine-menu{left:12px;right:12px;min-width:0}
  .engine-opt{padding:12px 10px}          /* bigger tap targets on phone */
}

/* The supplied logo already includes its glow on black; avoid a square halo. */
.hex-badge,.hex-badge.big,.brand-logo,.topbar-logo,.avatar.bot img,.indicator img{filter:none}

.side-tool-btn{min-height:44px}

.steer-status { font-size: 12px; color: var(--accent, #66ff00); margin: 6px 0; }
.steer-status.delivery-failed { color: #ddd; }

/* Comfortable composer touch targets on phones. */
@media (max-width: 720px) {
  .composer #attachBtn, .composer #send, .composer #stopBtn { min-width: 44px; width: 44px; min-height: 44px; height: 44px; flex-shrink: 0; }
}
