/* ============================================================================
   Aedan Rose sidebar — WP-10 frontend v1
   Dark-matter galaxy theme, extracted from design/aedan-sidebar-prototype.html.
   EVERYTHING is namespaced under #aedanRoot / .aedan-* so the admin's own CSS
   is untouched and untouchable. No remote resources of any kind (§6.4.2):
   system font stacks + canvas + CSS only.
   ========================================================================== */

#aedanRoot, #aedanSidebar {
  --aedan-void:#07060f; --aedan-panel:#0d0c1c; --aedan-panel-2:#12112a; --aedan-raise:#1a1836;
  --aedan-line:rgba(167,139,250,.12); --aedan-line-2:rgba(167,139,250,.22);
  /* #819 HIGH-5: ink-faint was #6f6a9c = 3.7:1 on the card bg — FAILED WCAG AA
     for axis labels/legends. #8b87b8 measures 5.7:1 and stays clearly quieter
     than ink-mute, so the type hierarchy holds. */
  --aedan-ink:#eceaf7; --aedan-ink-mute:#a39fce; --aedan-ink-faint:#8b87b8;
  --aedan-violet:#a78bfa; --aedan-violet-deep:#8b5cf6; --aedan-violet-glow:rgba(139,92,246,.4);
  --aedan-nebula:#e879f9; --aedan-live:#34d399; --aedan-live-glow:rgba(52,211,153,.3);
  --aedan-read:#7dd3fc; --aedan-gold:#fbbf24; --aedan-danger:#fb7185;
  --aedan-shadow:0 30px 80px -20px rgba(0,0,0,.85);
  --aedan-mono:"SF Mono","JetBrains Mono","Cascadia Code",ui-monospace,Menlo,Consolas,monospace;
  --aedan-sans:"SF Pro Display","Inter","Segoe UI",system-ui,-apple-system,sans-serif;
  font-family:var(--aedan-sans);
}
#aedanRoot, #aedanRoot * , #aedanRoot *::before, #aedanRoot *::after { box-sizing:border-box; }

/* Visible keyboard focus (mouse clicks stay clean via :focus-visible). */
#aedanRoot a:focus-visible, #aedanRoot button:focus-visible, #aedanRoot input:focus-visible,
#aedanRoot textarea:focus-visible, #aedanRoot [tabindex]:focus-visible { outline:2px solid var(--aedan-violet); outline-offset:2px; }

/* ── Collapsed edge tab (violet gem, fixed right, mid-height) ── */
.aedan-tab {
  position:fixed; right:0; top:50%; transform:translateY(-50%);
  z-index:1199; /* below the panel; both below admin modals (lowest modal layer = 1500) */
  display:flex; flex-direction:column; align-items:center; gap:7px;
  padding:12px 8px 13px; border:1px solid var(--aedan-line-2); border-right:none;
  border-radius:13px 0 0 13px; cursor:pointer;
  background:linear-gradient(180deg, rgba(18,17,42,.94), rgba(9,8,20,.96));
  color:var(--aedan-ink); box-shadow:0 12px 34px -12px rgba(0,0,0,.8), 0 0 22px -8px var(--aedan-violet-glow);
  font-family:var(--aedan-sans); transition:box-shadow .2s, border-color .2s, transform .2s;
}
.aedan-tab:hover { border-color:var(--aedan-violet); box-shadow:0 12px 34px -12px rgba(0,0,0,.8), 0 0 30px -6px var(--aedan-violet-glow); }
.aedan-tab .aedan-tab-gem { width:22px; height:22px; display:block; }
.aedan-tab .aedan-tab-label {
  writing-mode:vertical-rl; font-size:10.5px; font-weight:700; letter-spacing:.22em;
  text-transform:uppercase; color:var(--aedan-ink-mute);
}
.aedan-tab[hidden] { display:none; }

/* ── Docked panel ── */
.aedan-panel {
  position:fixed; top:0; right:0; z-index:1200; /* < 1500 = admin .modal-backdrop; every admin modal stays on top */
  width:460px; max-width:100vw; height:100vh; height:100dvh;
  display:flex; flex-direction:column;
  background:
    radial-gradient(700px 460px at 88% -4%, rgba(232,121,249,.08), transparent 55%),
    radial-gradient(640px 520px at 4% 104%, rgba(139,92,246,.11), transparent 55%),
    linear-gradient(180deg, rgba(13,12,28,.97), rgba(9,8,20,.985));
  backdrop-filter:blur(22px) saturate(1.2); -webkit-backdrop-filter:blur(22px) saturate(1.2);
  border-left:1px solid var(--aedan-line-2); box-shadow:var(--aedan-shadow);
  color:var(--aedan-ink); overflow:hidden; /* the panel body NEVER scrolls sideways — §8.6(e)(a) */
  animation:aedan-slidein .45s cubic-bezier(.2,.8,.2,1) both;
}
.aedan-panel[hidden] { display:none; }
@keyframes aedan-slidein { from{transform:translateX(44px);opacity:0;} to{transform:none;opacity:1;} }

/* Bug-3 layering: admin.html's floating setup-guide popup is z-index 9999 —
   above this panel's 1200. The panel can't simply outrank it: admin modals
   (legal re-accept 100000, generic backdrops 1500/2000/10000+) must STAY above
   the copilot. So instead, while the copilot is OPEN (aedan-sidebar.js toggles
   body.aedan-copilot-open in setOpen), demote the setup popup below the panel;
   closed → it returns to its normal 9999 layer. 1150 keeps it above ordinary
   page chrome (≤1002) but under the copilot backdrop (1199) + panel (1200). */
body.aedan-copilot-open .setup-guide-popup { z-index:1150 !important; }

/* ── Header ── */
.aedan-head { padding:14px 16px 12px; border-bottom:1px solid var(--aedan-line); display:flex; flex-direction:column; gap:12px; flex:0 0 auto; }
.aedan-id-row { display:flex; align-items:center; gap:11px; min-width:0; }
.aedan-orb { width:30px; height:30px; flex:0 0 auto; }
.aedan-id-txt { min-width:0; }
.aedan-name { font-weight:700; font-size:15px; line-height:1; white-space:nowrap; display:inline-flex; align-items:center; gap:7px; }
.aedan-name .aedan-rose-grad { background:linear-gradient(90deg,var(--aedan-violet),var(--aedan-nebula)); -webkit-background-clip:text; background-clip:text; color:transparent; }
.aedan-name .aedan-beta { font-family:var(--aedan-mono); font-size:8.5px; font-weight:700; letter-spacing:.1em; color:var(--aedan-gold); border:1px solid rgba(251,191,36,.4); background:rgba(251,191,36,.1); border-radius:5px; padding:2px 5px; line-height:1; transform:translateY(-1px); }
.aedan-sub { font-size:11px; color:var(--aedan-ink-faint); margin-top:4px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.aedan-head-spacer { flex:1 1 0; min-width:0; }
.aedan-icon-btn { width:29px; height:29px; flex:0 0 auto; border-radius:8px; border:1px solid var(--aedan-line); background:transparent; color:var(--aedan-ink-mute); cursor:pointer; display:grid; place-items:center; transition:.16s; padding:0; }
.aedan-icon-btn:hover { background:var(--aedan-raise); color:var(--aedan-ink); border-color:var(--aedan-line-2); }
.aedan-icon-btn svg { width:15px; height:15px; }
.aedan-icon-btn:disabled { opacity:.4; cursor:default; }

/* Session picker dropdown */
.aedan-sess-wrap { position:relative; flex:0 0 auto; }
.aedan-sess-menu {
  position:absolute; top:calc(100% + 6px); right:0; z-index:30; min-width:230px; max-width:min(320px, 86vw);
  background:var(--aedan-panel-2); border:1px solid var(--aedan-line-2); border-radius:11px; padding:5px;
  box-shadow:var(--aedan-shadow); max-height:320px; overflow-y:auto; overflow-x:hidden;
}
.aedan-sess-menu[hidden] { display:none; }
.aedan-sess-h { font-size:9.5px; letter-spacing:.08em; text-transform:uppercase; color:var(--aedan-ink-faint); padding:5px 8px 3px; }
.aedan-sess-note { font-size:10px; color:var(--aedan-ink-faint); padding:4px 8px 5px; line-height:1.35; }
/* comfortable tap targets: rows are ≥40px tall */
.aedan-sess-item { display:flex; align-items:center; gap:8px; width:100%; min-height:40px; text-align:left; background:transparent; border:none; color:var(--aedan-ink); padding:10px 8px; border-radius:8px; cursor:pointer; font-size:12px; font-family:var(--aedan-sans); }
.aedan-sess-item:hover { background:var(--aedan-raise); }
.aedan-sess-item.active { background:rgba(167,139,250,.12); }
.aedan-sess-item .aedan-sess-title { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
/* "New chat" is the FIRST row of the switcher (labeled twin of the header +) */
.aedan-sess-item.aedan-sess-new { color:var(--aedan-violet); font-weight:600; border-bottom:1px solid var(--aedan-line); border-radius:8px 8px 0 0; margin-bottom:3px; padding-bottom:9px; }
/* muted retention footer — the claim is real (server-side 15-day sweep) */
.aedan-sess-foot { font-size:10px; color:var(--aedan-ink-faint); padding:6px 8px 4px; margin-top:3px; border-top:1px solid var(--aedan-line); line-height:1.35; }
/* Conversation rows: select button + per-row archive ✕ (buttons can't nest,
   so the row is a flex div wrapping two sibling buttons). */
.aedan-sess-row { display:flex; align-items:center; gap:2px; border-radius:8px; min-width:0; }
.aedan-sess-row.active { background:rgba(167,139,250,.12); }
.aedan-sess-row .aedan-sess-item { flex:1 1 auto; min-width:0; }
.aedan-sess-row .aedan-sess-time { flex:0 0 auto; font-size:10px; color:var(--aedan-ink-faint); font-variant-numeric:tabular-nums; white-space:nowrap; }
.aedan-sess-x { flex:0 0 auto; width:28px; height:28px; margin-right:3px; border:none; border-radius:6px; background:transparent; color:var(--aedan-ink-faint); cursor:pointer; font-size:11px; line-height:1; display:grid; place-items:center; padding:0; transition:.16s; }
.aedan-sess-x:hover { background:rgba(248,113,113,.14); color:#f87171; }
.aedan-sess-x:disabled { opacity:.4; cursor:default; }

/* Usage bar */
.aedan-usage { padding:10px 12px; border:1px solid var(--aedan-line); border-radius:12px; background:rgba(26,24,54,.5); }
.aedan-usage-top { display:flex; align-items:baseline; justify-content:space-between; gap:8px; margin-bottom:7px; flex-wrap:wrap; }
.aedan-usage-top .aedan-usage-lbl { font-size:10.5px; letter-spacing:.09em; text-transform:uppercase; color:var(--aedan-ink-faint); font-weight:600; }
.aedan-usage-top .aedan-usage-rem { font-family:var(--aedan-mono); font-size:13px; font-weight:600; color:var(--aedan-violet); font-variant-numeric:tabular-nums; }
.aedan-usage-bar { height:7px; border-radius:20px; background:rgba(167,139,250,.14); overflow:hidden; }
.aedan-usage-fill { height:100%; width:0; border-radius:20px; background:linear-gradient(90deg,var(--aedan-violet-deep),var(--aedan-violet),var(--aedan-nebula)); box-shadow:0 0 12px -2px var(--aedan-violet-glow); transition:width .8s cubic-bezier(.3,.8,.3,1); }
.aedan-usage-fill.aedan-pulse { animation:aedan-barpulse 1.6s ease-in-out infinite; }
@keyframes aedan-barpulse { 0%,100%{filter:brightness(1);} 50%{filter:brightness(1.25);} }
.aedan-usage-sub { display:flex; justify-content:space-between; gap:8px; margin-top:6px; font-size:10.5px; color:var(--aedan-ink-faint); font-family:var(--aedan-mono); font-variant-numeric:tabular-nums; flex-wrap:wrap; }
/* Cumulative per-session copilot spend — a quiet running total under the bar. */
.aedan-usage-session { display:block; margin-top:3px; font-size:10.5px; color:var(--aedan-ink-mute); font-family:var(--aedan-mono); font-variant-numeric:tabular-nums; }
.aedan-usage-session:empty { display:none; }

/* ── Stream ── */
.aedan-stream { flex:1 1 0; min-height:0; overflow-y:auto; overflow-x:hidden; overscroll-behavior:contain; padding:16px 16px 8px; display:flex; flex-direction:column; gap:14px; scroll-behavior:smooth; }
/* Every card is a flex child: keep it from ever forcing horizontal body scroll.
   flex-shrink:0 is LOAD-BEARING — .aedan-stream is a column flexbox, so once the
   transcript overflows (any active conversation) the default flex-shrink:1 would
   squash children to fit. The live working card (globe + steps) has overflow:hidden,
   so being shrunk to ~2px clipped the whole thinking animation to an invisible
   sliver — the "thinking animation isn't showing at the bottom" bug. Children must
   keep their natural height and let the container scroll instead. */
.aedan-stream > * { min-width:0; max-width:100%; flex-shrink:0; }
/* Defensive: any unbreakable token (long title, id, hash, name) wraps instead of overflowing. */
.aedan-work, .aedan-card, .aedan-approve, .aedan-limit, .aedan-note, .aedan-msg-user, .aedan-msg-ai { overflow-wrap:anywhere; }
.aedan-stream::-webkit-scrollbar { width:8px; }
.aedan-stream::-webkit-scrollbar-thumb { background:var(--aedan-line-2); border-radius:8px; }
.aedan-scroll-x::-webkit-scrollbar, .aedan-sess-menu::-webkit-scrollbar { width:7px; height:7px; }
.aedan-scroll-x::-webkit-scrollbar-thumb, .aedan-sess-menu::-webkit-scrollbar-thumb { background:var(--aedan-line-2); border-radius:8px; }

/* User bubble — nebula magenta = the user's own voice */
.aedan-msg-user { align-self:flex-end; max-width:86%; background:linear-gradient(135deg,var(--aedan-violet-deep),var(--aedan-nebula)); color:#fff; padding:10px 13px; border-radius:13px 13px 4px 13px; font-size:13.5px; line-height:1.45; box-shadow:0 10px 24px -10px var(--aedan-violet-glow); white-space:pre-wrap; }

/* Continuation seam (FIX B) — a muted, centered divider that replaces the
   robotic "That was approved…" user bubble after an approval auto-continues. */
.aedan-resume { align-self:stretch; display:flex; align-items:center; justify-content:center; gap:10px; margin:3px 0 1px; }
.aedan-resume::before, .aedan-resume::after { content:''; height:1px; flex:1 1 auto; max-width:64px; background:linear-gradient(90deg,transparent,var(--aedan-line-2)); }
.aedan-resume::after { background:linear-gradient(90deg,var(--aedan-line-2),transparent); }
.aedan-resume-t { font-size:10.5px; letter-spacing:.05em; color:var(--aedan-ink-faint); font-family:var(--aedan-sans); white-space:nowrap; }

/* Assistant text — XSS-safe markdown-lite (DOM built via createElement only) */
.aedan-msg-ai { align-self:stretch; font-size:13.5px; line-height:1.55; color:var(--aedan-ink); padding:2px 2px 0; }
.aedan-msg-ai p { margin:0 0 9px; white-space:pre-wrap; }
/* STREAMING FADE-IN: the freshly-arrived tail of a reply spans in from invisible
   → visible, so text reveals progressively as it streams (feels faster + shows
   live progress). A short duration keeps up with fast token streams. Honors
   reduced-motion (the JS skips the fade boundary there, but guard here too). */
.aedan-fade-in { animation:aedan-textfade .32s ease-out both; }
@keyframes aedan-textfade { from{ opacity:0; filter:blur(1.5px); } to{ opacity:1; filter:blur(0); } }
@media (prefers-reduced-motion: reduce) { .aedan-fade-in { animation:none; } }
.aedan-msg-ai p:last-child { margin-bottom:0; }
.aedan-msg-ai ul.aedan-md-list, .aedan-msg-ai ol.aedan-md-list { margin:0 0 9px; padding:0 0 0 20px; }
.aedan-msg-ai .aedan-md-list:last-child { margin-bottom:0; }
.aedan-msg-ai .aedan-md-list li { margin:0 0 4px; padding-left:2px; }
.aedan-msg-ai .aedan-md-list li:last-child { margin-bottom:0; }
.aedan-msg-ai ul.aedan-md-list li::marker { color:var(--aedan-violet); }
.aedan-msg-ai ol.aedan-md-list li::marker { color:var(--aedan-ink-mute); font-variant-numeric:tabular-nums; }
.aedan-md-h { font-weight:700; color:var(--aedan-ink); margin:10px 0 6px; }
.aedan-md-h:first-child { margin-top:0; }
.aedan-md-b { font-weight:700; color:var(--aedan-ink); }
.aedan-md-code { font-family:var(--aedan-mono); font-size:.88em; background:var(--aedan-raise); border:1px solid var(--aedan-line); border-radius:5px; padding:1px 5px; overflow-wrap:anywhere; }

/* ── First-run card (GAP-2): warm greeting + tappable suggestion chips ──── */
.aedan-firstrun {
  position:relative; align-self:stretch; overflow:hidden;
  border:1px solid var(--aedan-line-2); border-radius:16px;
  background:linear-gradient(160deg,rgba(26,24,54,.72),rgba(13,12,28,.72));
  box-shadow:0 20px 50px -24px rgba(0,0,0,.8), inset 0 1px 0 rgba(255,255,255,.04);
  padding:18px 16px 16px;
}
.aedan-firstrun-glow {
  position:absolute; top:-60px; right:-40px; width:180px; height:180px; pointer-events:none;
  background:radial-gradient(circle,var(--aedan-violet-glow),transparent 65%); filter:blur(6px);
}
.aedan-firstrun-greet { position:relative; font-size:13.5px; line-height:1.55; color:var(--aedan-ink); }
.aedan-firstrun-greet b {
  display:block; margin-bottom:5px; font-weight:700; font-size:14.5px;
  background:linear-gradient(90deg,var(--aedan-violet),var(--aedan-nebula));
  -webkit-background-clip:text; background-clip:text; color:transparent;
}
.aedan-firstrun-hint {
  position:relative; margin:14px 0 8px; font-size:10.5px; letter-spacing:.09em;
  text-transform:uppercase; color:var(--aedan-ink-faint); font-weight:600;
}
.aedan-suggest-grid { position:relative; display:flex; flex-wrap:wrap; gap:8px; }
.aedan-suggest {
  flex:1 1 auto; min-width:calc(50% - 4px); max-width:100%; text-align:left;
  font-family:var(--aedan-sans); font-size:12.5px; line-height:1.35; color:var(--aedan-ink);
  background:var(--aedan-raise); border:1px solid var(--aedan-line); border-radius:11px;
  padding:9px 11px; cursor:pointer; overflow-wrap:anywhere;
  transition:border-color .16s, background .16s, transform .16s, box-shadow .16s;
}
.aedan-suggest:hover {
  border-color:var(--aedan-violet); background:var(--aedan-panel-2);
  box-shadow:0 10px 24px -14px var(--aedan-violet-glow); transform:translateY(-1px);
}
.aedan-suggest:active { transform:translateY(0); }
@media (max-width:400px){ .aedan-suggest { min-width:100%; } }

/* ── Working card: hero (neural-mesh globe + live thought) + step feed ── */
.aedan-work { border:1px solid var(--aedan-line); border-radius:16px; background:linear-gradient(180deg,rgba(18,17,42,.72),rgba(11,10,24,.66)); overflow:hidden; animation:aedan-pop .4s cubic-bezier(.2,.9,.3,1) both; }
@keyframes aedan-pop { from{opacity:0;transform:translateY(9px) scale(.99);} to{opacity:1;transform:none;} }
.aedan-hero { display:flex; align-items:center; gap:14px; padding:14px 14px 12px; position:relative; overflow:hidden; }
.aedan-hero::before { content:""; position:absolute; left:-30px; top:-40px; width:150px; height:150px; border-radius:50%; background:radial-gradient(circle, rgba(139,92,246,.22), transparent 68%); pointer-events:none; opacity:.7; }
.aedan-globe { width:96px; height:96px; flex:0 0 auto; position:relative; z-index:1; }
.aedan-hero-txt { flex:1; min-width:0; z-index:1; }
.aedan-think { font-size:13.5px; font-weight:600; line-height:1.42; letter-spacing:.005em; background:linear-gradient(90deg,var(--aedan-ink),var(--aedan-violet) 140%); -webkit-background-clip:text; background-clip:text; }
.aedan-think .aedan-caret { display:inline-block; width:2px; height:14px; margin-left:2px; vertical-align:-2px; background:var(--aedan-violet); animation:aedan-blink 1s steps(1) infinite; }
@keyframes aedan-blink { 50%{opacity:0;} }
.aedan-think-sub { margin-top:6px; font-size:10.5px; letter-spacing:.06em; text-transform:uppercase; color:var(--aedan-ink-faint); font-family:var(--aedan-mono); display:flex; align-items:center; flex-wrap:wrap; gap:4px 7px; }
.aedan-think-sub .aedan-meta { margin-left:auto; color:var(--aedan-ink-mute); text-transform:none; letter-spacing:0; font-variant-numeric:tabular-nums; }
.aedan-think-sub .aedan-phase-dot { width:6px; height:6px; border-radius:50%; background:var(--aedan-violet); box-shadow:0 0 8px var(--aedan-violet-glow); }
.aedan-work.done .aedan-phase-dot { background:var(--aedan-live); box-shadow:0 0 8px var(--aedan-live-glow); }

/* Claude-Code-style collapsed step feed (BUG C): show only the current step,
   fold the rest behind a "+N more" toggle so 24 steps ≠ a giant scroll. */
.aedan-steps-wrap { border-top:1px solid var(--aedan-line); }
.aedan-steps-toggle { display:flex; align-items:center; gap:6px; width:100%; border:none; background:transparent; cursor:pointer; padding:6px 12px 2px; color:var(--aedan-ink-faint); font-family:var(--aedan-mono); font-size:10.5px; letter-spacing:.04em; text-transform:uppercase; }
.aedan-steps-toggle:hover { color:var(--aedan-ink-mute); }
.aedan-steps-toggle .aedan-steps-toggle-caret { display:inline-flex; transition:transform .2s; }
.aedan-steps-toggle[aria-expanded="true"] .aedan-steps-toggle-caret { transform:rotate(180deg); }
.aedan-steps { list-style:none; margin:0; padding:2px 8px 8px; display:flex; flex-direction:column; }
/* Collapsed: every step row is hidden EXCEPT the most-recent (the current one). */
.aedan-steps.is-collapsed .aedan-step { display:none; }
.aedan-steps.is-collapsed .aedan-step:last-child { display:flex; }
.aedan-step { display:flex; align-items:flex-start; gap:10px; padding:7px 8px; border-radius:9px; font-size:12.5px; transition:background .2s; }
.aedan-step .aedan-st-ic { width:17px; height:17px; flex:0 0 auto; margin-top:1px; display:grid; place-items:center; }
.aedan-step .aedan-st-body { flex:1; min-width:0; line-height:1.4; }
.aedan-step .aedan-st-detail { color:var(--aedan-ink-mute); }
.aedan-step .aedan-st-time { font-family:var(--aedan-mono); font-size:10.5px; color:var(--aedan-ink-faint); font-variant-numeric:tabular-nums; margin-left:8px; white-space:nowrap; margin-top:1px; }
/* color semantics: reading=sky, thinking/writing=violet, verifying=emerald ring, done=emerald check, failed=red — §8.6(1)(3) */
.aedan-step[data-state="queued"] .aedan-st-label { color:var(--aedan-ink-faint); }
.aedan-step[data-state="reading"], .aedan-step[data-state="thinking"], .aedan-step[data-state="writing"] { background:rgba(167,139,250,.07); }
.aedan-step[data-state="verifying"] { background:rgba(52,211,153,.07); }
.aedan-step[data-state="failed"] .aedan-st-label { color:var(--aedan-danger); }
.aedan-dot { width:13px; height:13px; border-radius:50%; border:2px solid var(--aedan-line-2); }
.aedan-spin { width:14px; height:14px; border-radius:50%; border:2px solid transparent; animation:aedan-sp .7s linear infinite; }
.aedan-spin.read { border-top-color:var(--aedan-read); border-right-color:var(--aedan-read); }
.aedan-spin.ai { border-top-color:var(--aedan-violet); border-right-color:var(--aedan-violet); }
.aedan-spin.verify { border-top-color:var(--aedan-live); border-right-color:var(--aedan-live); }
@keyframes aedan-sp { to{transform:rotate(360deg);} }
.aedan-check { color:var(--aedan-live); }
.aedan-x { color:var(--aedan-danger); font-weight:700; font-size:13px; line-height:1; }

/* Collapsed one-liner after completion — expand restores the full feed (§8.6(6)) */
.aedan-sum { display:flex; align-items:center; gap:8px; width:100%; text-align:left; border:none; border-top:1px solid var(--aedan-line); background:transparent; color:var(--aedan-ink-mute); font-family:var(--aedan-sans); font-size:12px; padding:10px 12px; cursor:pointer; flex-wrap:wrap; }
.aedan-sum:hover { color:var(--aedan-ink); }
.aedan-sum .aedan-sum-txt { min-width:0; overflow-wrap:anywhere; font-variant-numeric:tabular-nums; }
.aedan-sum .aedan-model-chip { font-family:var(--aedan-mono); font-size:10px; color:var(--aedan-ink-faint); background:var(--aedan-raise); border:1px solid var(--aedan-line); border-radius:20px; padding:2px 8px; white-space:nowrap; }
.aedan-sum .aedan-sum-caret { margin-left:auto; transition:transform .2s; flex:0 0 auto; }
.aedan-work.collapsed .aedan-hero, .aedan-work.collapsed .aedan-steps-wrap { display:none; }
.aedan-work.collapsed .aedan-sum { border-top:none; }
.aedan-work:not(.collapsed) .aedan-sum .aedan-sum-caret { transform:rotate(180deg); }

/* ── Per-response feedback 👍/👎 (INTERNAL health signal, like Claude Code) ── */
/* Low-key until hover: a subtle thumbs row under each finished assistant turn. */
.aedan-fb { display:flex; align-items:center; flex-wrap:wrap; gap:8px; padding:2px 2px 4px; margin-top:-2px; }
.aedan-fb-btns { display:flex; gap:4px; }
.aedan-fb-btn { display:inline-flex; align-items:center; justify-content:center; width:26px; height:26px; padding:0; border:1px solid transparent; border-radius:7px; background:transparent; color:var(--aedan-ink-faint); cursor:pointer; opacity:.55; transition:opacity .15s, color .15s, background .15s, border-color .15s; }
.aedan-fb:hover .aedan-fb-btn { opacity:1; }
.aedan-fb-btn:hover { color:var(--aedan-ink); background:var(--aedan-raise); border-color:var(--aedan-line); }
.aedan-fb-btn:disabled { cursor:default; opacity:.9; }
.aedan-fb-btn.sel-up { color:var(--aedan-live); background:rgba(52,211,153,.12); border-color:rgba(52,211,153,.4); opacity:1; }
.aedan-fb-btn.sel-down { color:var(--aedan-ink-mute); background:var(--aedan-raise); border-color:var(--aedan-line-2); opacity:1; }
.aedan-fb-thanks { font-size:11.5px; color:var(--aedan-live); }
.aedan-fb-cmt { flex:1 1 100%; display:flex; gap:6px; margin-top:2px; }
.aedan-fb-input { flex:1; min-width:0; resize:vertical; max-height:120px; background:var(--aedan-panel-2); border:1px solid var(--aedan-line); border-radius:8px; color:var(--aedan-ink); font-family:var(--aedan-sans); font-size:12px; padding:6px 8px; }
.aedan-fb-input:focus { outline:none; border-color:var(--aedan-line-2); }
.aedan-fb-send { flex:0 0 auto; align-self:flex-start; background:var(--aedan-violet-deep); color:#fff; border:none; border-radius:8px; font-family:var(--aedan-sans); font-size:12px; font-weight:600; padding:6px 12px; cursor:pointer; }
.aedan-fb-send:hover { background:var(--aedan-violet); }

/* ── Overall "Rate Aedan" popover (1–5 stars + comment, category:'overall') ── */
.aedan-rate-pop { position:absolute; top:60px; right:12px; z-index:1460; width:min(280px,calc(100% - 24px)); background:var(--aedan-panel-2); border:1px solid var(--aedan-line-2); border-radius:13px; box-shadow:var(--aedan-shadow); padding:14px; display:flex; flex-direction:column; gap:10px; animation:aedan-pop .28s cubic-bezier(.2,.9,.3,1) both; }
.aedan-rate-h { font-size:13px; font-weight:600; color:var(--aedan-ink); }
.aedan-rate-stars { display:flex; gap:4px; }
.aedan-rate-star { display:inline-flex; padding:2px; border:none; background:transparent; color:var(--aedan-ink-faint); cursor:pointer; transition:color .12s, transform .12s; }
.aedan-rate-star:hover { transform:scale(1.08); }
.aedan-rate-star.on { color:var(--aedan-gold); }
.aedan-rate-actions { display:flex; justify-content:flex-end; gap:8px; }
.aedan-rate-cancel { background:transparent; border:1px solid var(--aedan-line); color:var(--aedan-ink-mute); border-radius:8px; font-family:var(--aedan-sans); font-size:12px; padding:6px 12px; cursor:pointer; }
.aedan-rate-cancel:hover { color:var(--aedan-ink); }
.aedan-rate-submit { background:var(--aedan-violet-deep); border:none; color:#fff; border-radius:8px; font-family:var(--aedan-sans); font-size:12px; font-weight:600; padding:6px 14px; cursor:pointer; }
.aedan-rate-submit:hover { background:var(--aedan-violet); }
.aedan-rate-thanks { font-size:12.5px; color:var(--aedan-live); text-align:center; padding:6px 2px; }
.aedan-sess-item.aedan-sess-rate { color:var(--aedan-ink-mute); }
.aedan-sess-item.aedan-sess-rate:hover { color:var(--aedan-ink); }
.aedan-sess-item.aedan-sess-memory { color:var(--aedan-ink-mute); }
.aedan-sess-item.aedan-sess-memory:hover { color:var(--aedan-ink); }

/* ── Memory panel (GAP-1): remembered preferences + forget × ── */
.aedan-mem-pop { position:absolute; top:60px; right:12px; z-index:1460; width:min(320px,calc(100% - 24px)); max-height:min(60vh,440px); background:var(--aedan-panel-2); border:1px solid var(--aedan-line-2); border-radius:13px; box-shadow:var(--aedan-shadow); padding:14px; display:flex; flex-direction:column; gap:10px; animation:aedan-pop .28s cubic-bezier(.2,.9,.3,1) both; }
.aedan-mem-h { font-size:13px; font-weight:600; color:var(--aedan-ink); }
.aedan-mem-list { display:flex; flex-direction:column; gap:7px; overflow-y:auto; }
.aedan-mem-empty { font-size:12.5px; color:var(--aedan-ink-faint); padding:8px 2px; }
.aedan-mem-row { display:flex; align-items:flex-start; gap:8px; padding:9px 10px; border:1px solid var(--aedan-line); border-radius:10px; background:rgba(18,17,42,.55); }
.aedan-mem-body { flex:1 1 auto; min-width:0; }
.aedan-mem-text { font-size:12.5px; color:var(--aedan-ink); line-height:1.4; word-break:break-word; }
.aedan-mem-meta { font-size:11px; color:var(--aedan-ink-faint); margin-top:3px; }
.aedan-mem-del { flex:0 0 auto; width:22px; height:22px; line-height:1; display:inline-flex; align-items:center; justify-content:center; font-size:16px; border:none; background:transparent; color:var(--aedan-ink-faint); border-radius:6px; cursor:pointer; transition:color .12s, background .12s; }
.aedan-mem-del:hover { color:var(--aedan-danger); background:rgba(251,113,133,.12); }
.aedan-mem-del:disabled { opacity:.4; cursor:default; }
.aedan-mem-foot { font-size:11px; color:var(--aedan-ink-faint); line-height:1.4; border-top:1px solid var(--aedan-line); padding-top:8px; }

/* ── Generic card shell (table / facts / unsupported stub) ── */
.aedan-card { border:1px solid var(--aedan-line); border-radius:14px; background:rgba(18,17,42,.6); overflow:hidden; animation:aedan-pop .4s cubic-bezier(.2,.9,.3,1) both; }
/* in-place refresh (task checklist re-render) — don't replay the pop */
.aedan-noanim { animation:none !important; }
.aedan-card-h { padding:11px 13px; display:flex; align-items:center; flex-wrap:wrap; gap:5px 8px; border-bottom:1px solid var(--aedan-line-2); font-size:12.5px; font-weight:650; color:var(--aedan-ink); letter-spacing:.005em; }
/* The title itself is the first span — full ink, legible as a real card heading. */
.aedan-card-h > span:first-child { color:var(--aedan-ink); font-weight:650; }
.aedan-card-h .aedan-tag { margin-left:auto; font-family:var(--aedan-mono); font-size:9.5px; letter-spacing:.06em; text-transform:uppercase; color:var(--aedan-ink-mute); font-weight:600; white-space:nowrap; padding:2px 7px; border:1px solid var(--aedan-line-2); border-radius:6px; background:rgba(167,139,250,.06); }
/* wide content scrolls INSIDE its own container, never the panel — §8.6(e)(a) */
.aedan-scroll-x { overflow-x:auto; padding:10px 12px; }
.aedan-table { border-collapse:collapse; font-size:12px; min-width:100%; }
.aedan-table th, .aedan-table td { text-align:left; padding:6px 10px; border-bottom:1px solid var(--aedan-line); white-space:nowrap; color:var(--aedan-ink-mute); }
.aedan-table th { color:var(--aedan-ink-faint); font-size:10.5px; letter-spacing:.06em; text-transform:uppercase; font-weight:600; }
.aedan-table td:first-child, .aedan-table th:first-child { color:var(--aedan-ink); }
.aedan-facts { padding:10px 12px; display:flex; flex-direction:column; gap:6px; }
.aedan-fact { display:flex; align-items:baseline; gap:9px; font-size:12.5px; flex-wrap:wrap; }
.aedan-fact .aedan-fact-k { color:var(--aedan-ink-mute); min-width:0; }
.aedan-fact .aedan-fact-v { margin-left:auto; font-family:var(--aedan-mono); color:var(--aedan-ink); font-variant-numeric:tabular-nums; min-width:0; }
.aedan-card-stub { padding:11px 12px; font-size:12px; color:var(--aedan-ink-faint); display:flex; align-items:center; gap:8px; }

/* Enterprise table polish: sticky header, numeric right-align + mono, row hover,
   hairline rows, signed-delta color. Wide tables scroll inside .aedan-scroll-x. */
.aedan-table th, .aedan-table td { border-bottom:1px solid var(--aedan-line); }
.aedan-table thead th { position:sticky; top:0; z-index:1; background:linear-gradient(180deg,rgba(18,17,42,.98),rgba(18,17,42,.92)); backdrop-filter:blur(4px); }
.aedan-table tbody tr:hover td { background:rgba(167,139,250,.06); }
.aedan-table tbody tr:last-child td { border-bottom:none; }
.aedan-table th.num, .aedan-table td.num { text-align:right; font-variant-numeric:tabular-nums; }
.aedan-table td.num { font-family:var(--aedan-mono); font-size:11.5px; color:var(--aedan-ink); }
.aedan-table td.num.up { color:var(--aedan-live); }
.aedan-table td.num.down { color:var(--aedan-danger); }

/* ── METRICS card (the analytical stat-block grid — health summary etc.) ── */
.aedan-metrics { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:1px; background:var(--aedan-line); padding:1px; }
.aedan-metric { display:flex; flex-direction:column; gap:3px; padding:11px 13px; background:rgba(18,17,42,.72); min-width:0; }
.aedan-metric-l { font-size:10px; letter-spacing:.06em; text-transform:uppercase; color:var(--aedan-ink-faint); font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.aedan-metric-vrow { display:flex; align-items:baseline; gap:7px; flex-wrap:wrap; }
.aedan-metric-v { font-family:var(--aedan-mono); font-size:19px; font-weight:700; color:var(--aedan-ink); font-variant-numeric:tabular-nums; line-height:1.05; letter-spacing:-.01em; }
.aedan-metric-delta { display:inline-flex; align-items:center; font-family:var(--aedan-mono); font-size:10.5px; font-weight:700; font-variant-numeric:tabular-nums; padding:1px 6px; border-radius:20px; white-space:nowrap; }
.aedan-metric-delta.up { color:var(--aedan-live); background:rgba(52,211,153,.12); }
.aedan-metric-delta.down { color:var(--aedan-danger); background:rgba(251,113,133,.12); }
.aedan-metric-delta-arr { font-size:9px; margin-right:1px; }
.aedan-metric-sub { font-size:10.5px; color:var(--aedan-ink-mute); font-variant-numeric:tabular-nums; }
.aedan-spark { margin-top:3px; display:block; }
.aedan-spark-line { stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round; }

/* ── TASK CHECKLIST card (task_update events) ──
   One row per task: status icon (color-coded) + readable body-text title +
   optional muted detail + small status chip. Titles are NEVER uppercase/faint
   (that made "completed" tasks look blank in the old metric-grid rendering). */
.aedan-tasks { padding:7px 10px 9px; display:flex; flex-direction:column; }
.aedan-task { display:flex; align-items:flex-start; gap:9px; padding:7px 4px; min-width:0; border-bottom:1px solid var(--aedan-line); }
.aedan-task:last-child { border-bottom:none; }
.aedan-task-ic { flex:0 0 16px; width:16px; text-align:center; font-size:12px; line-height:1.5; font-weight:700; font-family:var(--aedan-mono); }
.aedan-task-body { flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:2px; }
.aedan-task-t { font-size:12.5px; line-height:1.4; color:rgba(255,255,255,.92); overflow-wrap:anywhere; }
.aedan-task-d { font-size:11px; line-height:1.4; color:var(--aedan-ink-mute); overflow-wrap:anywhere; }
.aedan-task-st { flex:0 0 auto; margin-left:auto; margin-top:1px; font-family:var(--aedan-mono); font-size:9px; font-weight:700; letter-spacing:.07em; text-transform:uppercase; padding:2px 7px; border-radius:20px; white-space:nowrap; border:1px solid transparent; }
/* per-state color coding — all AA-visible on the dark galaxy panel */
.aedan-task.is-pending .aedan-task-ic { color:rgba(196,181,253,.7); }
.aedan-task.is-pending .aedan-task-st { color:var(--aedan-ink-mute); border-color:var(--aedan-line-2); background:rgba(167,139,250,.07); }
.aedan-task.is-active .aedan-task-ic { color:var(--aedan-violet); animation:aedan-task-pulse 1.6s ease-in-out infinite; }
.aedan-task.is-active .aedan-task-st { color:var(--aedan-violet); border-color:rgba(167,139,250,.4); background:rgba(139,92,246,.14); }
.aedan-task.is-done .aedan-task-ic { color:var(--aedan-live); }
.aedan-task.is-done .aedan-task-st { color:var(--aedan-live); border-color:rgba(52,211,153,.35); background:rgba(52,211,153,.12); }
.aedan-task.is-failed .aedan-task-ic { color:var(--aedan-danger); }
.aedan-task.is-failed .aedan-task-st { color:var(--aedan-danger); border-color:rgba(251,113,133,.35); background:rgba(251,113,133,.12); }
.aedan-task.is-blocked .aedan-task-ic { color:var(--aedan-gold); }
.aedan-task.is-blocked .aedan-task-st { color:var(--aedan-gold); border-color:rgba(251,191,36,.35); background:rgba(251,191,36,.1); }
.aedan-task.is-bg .aedan-task-ic { color:var(--aedan-read); }
.aedan-task.is-bg .aedan-task-st { color:var(--aedan-read); border-color:rgba(125,211,252,.3); background:rgba(125,211,252,.1); }
.aedan-task.is-cancelled .aedan-task-ic { color:var(--aedan-ink-faint); }
.aedan-task.is-cancelled .aedan-task-t { color:var(--aedan-ink-mute); text-decoration:line-through; }
.aedan-task.is-cancelled .aedan-task-st { color:var(--aedan-ink-faint); border-color:var(--aedan-line-2); }
.aedan-task-empty { padding:12px; font-size:12px; color:var(--aedan-ink-mute); }
/* Empty-state text for charts/tables with no data (parity with task empty). */
.aedan-chart-empty, .aedan-table-empty { padding:16px 12px; font-size:12px; color:var(--aedan-ink-mute); text-align:center; }
/* #819 designed chart empty/error state: glyph + title + hint */
.aedan-chart-empty { display:flex; flex-direction:column; align-items:center; gap:5px; padding:22px 14px 20px; }
.aedan-chart-empty-ic { color:var(--aedan-ink-faint); opacity:.55; line-height:0; }
.aedan-chart-empty-t { font-size:12.5px; font-weight:600; color:var(--aedan-ink-mute); }
.aedan-chart-empty-s { font-size:11px; color:var(--aedan-ink-faint); line-height:1.4; max-width:280px; }
@keyframes aedan-task-pulse { 0%,100% { opacity:1; } 50% { opacity:.45; } }
@media (prefers-reduced-motion:reduce) { .aedan-task.is-active .aedan-task-ic { animation:none; } .aedan-mic-btn.recording { animation:none; } }

/* ── CHART card (SVG data-viz) ── */
.aedan-chart-delta { margin-left:auto; display:inline-flex; align-items:center; font-family:var(--aedan-mono); font-size:11px; font-weight:700; font-variant-numeric:tabular-nums; padding:2px 8px; border-radius:20px; white-space:nowrap; }
.aedan-chart-delta.up { color:var(--aedan-live); background:rgba(52,211,153,.13); border:1px solid rgba(52,211,153,.3); }
.aedan-chart-delta.down { color:var(--aedan-danger); background:rgba(251,113,133,.12); border:1px solid rgba(251,113,133,.3); }
.aedan-chart-delta-arr { font-size:9px; margin-right:1px; }
.aedan-card-h .aedan-chart-delta + .aedan-tag { margin-left:8px; }
.aedan-chart-wrap { overflow-x:auto; overflow-y:hidden; padding:12px 12px 6px; scrollbar-width:thin; }
.aedan-chart-svg { max-width:100%; height:auto; display:block; }
/* #819: a genuinely-huge set scrolls at full vector size instead of being
   squeezed into an unreadable blur by max-width:100% */
.aedan-chart-svg.is-scroll { max-width:none; }
.aedan-chart-grid { stroke:var(--aedan-line); stroke-width:1; }
/* #819: emphasized zero baseline when a series carries negatives */
.aedan-chart-zero { stroke:rgba(236,234,247,.34); stroke-width:1; }
.aedan-chart-ytick, .aedan-chart-xtick { fill:var(--aedan-ink-faint); font-family:var(--aedan-mono); font-size:9.5px; }
.aedan-chart-xtick { fill:var(--aedan-ink-mute); }
/* secondary (right) y-axis ticks — quieter than the left so the split reads clearly */
.aedan-chart-ytick2 { fill:var(--aedan-ink-faint); opacity:0.82; }
.aedan-chart-vlabel { fill:var(--aedan-ink); font-family:var(--aedan-mono); font-size:10px; font-weight:700; }
.aedan-chart-vlabel.hi { fill:var(--aedan-nebula); }
.aedan-chart-vlabel.neg { fill:var(--aedan-danger); }
.aedan-chart-bar { transform-box:fill-box; transform-origin:bottom; }
.aedan-chart-bar.hi { filter:drop-shadow(0 0 6px var(--aedan-violet-glow)); }
.aedan-chart-line { fill:none; stroke-width:2.4; stroke-linecap:round; stroke-linejoin:round; }
.aedan-chart-dot { stroke:var(--aedan-void); stroke-width:1.5; transition:r .12s ease; }
.aedan-chart-area { opacity:.9; }
/* #819 hover affordances on every datapoint (hit nodes carry data-aedan-tip) */
.aedan-chart-hit { cursor:pointer; }
.aedan-chart-bar[data-aedan-tip]:hover, .aedan-chart-hbar[data-aedan-tip]:hover,
.aedan-donut-seg[data-aedan-tip]:hover { filter:brightness(1.22); cursor:pointer; }
.aedan-chart-bar.hi[data-aedan-tip]:hover, .aedan-chart-hbar.hi[data-aedan-tip]:hover { filter:drop-shadow(0 0 6px var(--aedan-violet-glow)) brightness(1.15); }
#aedanRoot [data-aedan-tip]:focus-visible { outline:2px solid var(--aedan-violet); outline-offset:1px; }
.aedan-chart-note { padding:0 13px 9px; font-size:10.5px; color:var(--aedan-ink-faint); line-height:1.4; }
.aedan-chart-legend { display:flex; flex-wrap:wrap; gap:8px 14px; padding:2px 12px 10px; font-size:11px; color:var(--aedan-ink-mute); }
.aedan-chart-lg { display:inline-flex; align-items:center; gap:6px; }
.aedan-chart-sw { width:10px; height:10px; border-radius:3px; flex:0 0 auto; }
.aedan-chart-cap { padding:2px 13px 10px; font-size:11.5px; color:var(--aedan-ink-mute); line-height:1.45; }
.aedan-chart-src { display:flex; flex-wrap:wrap; gap:6px; padding:0 12px 11px; }
.aedan-chart-srcchip { font-family:var(--aedan-mono); font-size:10px; color:var(--aedan-ink-faint); background:var(--aedan-raise); border:1px solid var(--aedan-line); border-radius:20px; padding:2px 8px; white-space:nowrap; max-width:100%; overflow:hidden; text-overflow:ellipsis; }

/* ── #819 body-portaled chart tooltip ──────────────────────────────────────
   Mounted on <body> (NOT inside the overflow-clipping chart wrap — the same
   portal pattern as affiliate.html's #tipPortal), so colors are LITERAL: the
   --aedan-* vars are scoped to #aedanRoot and don't reach it. z 1300 clears
   the panel (1200) and the chart lightbox (1250), stays under admin modals. */
.aedan-tip { position:fixed; z-index:1300; pointer-events:none; opacity:0; transform:translateY(4px);
  transition:opacity .14s ease, transform .14s ease; max-width:264px;
  background:linear-gradient(180deg, #1d1b3e, #131129); border:1px solid rgba(167,139,250,.32);
  border-radius:10px; padding:7px 10px 8px; box-shadow:0 14px 34px -10px rgba(0,0,0,.75), 0 0 18px -6px rgba(139,92,246,.35);
  font-family:"SF Pro Display","Inter","Segoe UI",system-ui,-apple-system,sans-serif; }
.aedan-tip.on { opacity:1; transform:none; }
.aedan-tip.measuring { transition:none; }
.aedan-tip-t { font-size:11px; font-weight:650; color:#eceaf7; margin-bottom:3px; max-width:244px;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.aedan-tip-row { display:flex; align-items:center; gap:6px; font-size:11px; color:#a39fce; white-space:nowrap; }
.aedan-tip-sw { width:8px; height:8px; border-radius:2px; flex:0 0 auto; }
.aedan-tip-v { margin-left:auto; padding-left:12px; font-family:"SF Mono","JetBrains Mono",ui-monospace,Menlo,monospace;
  font-size:11px; font-weight:700; color:#eceaf7; font-variant-numeric:tabular-nums; }
@media (prefers-reduced-motion:reduce) { .aedan-tip { transition:none; transform:none; } }

/* Draw-in: bars grow from baseline, lines/areas/dots fade+rise. Reduced-motion
   skips straight to the shown state (the .aedan-chart-shown class is applied
   on first frame either way; transitions are suppressed under reduce). */
.aedan-chart-bar { transform:scaleY(0); transition:transform .5s cubic-bezier(.2,.8,.2,1); }
.aedan-chart-shown .aedan-chart-bar { transform:scaleY(1); }
.aedan-chart-bar:nth-of-type(2n) { transition-delay:.04s; }
.aedan-chart-bar:nth-of-type(3n) { transition-delay:.08s; }
/* horizontal bars grow from the left */
.aedan-chart-hbar { transform-box:fill-box; transform-origin:left; transform:scaleX(0); transition:transform .5s cubic-bezier(.2,.8,.2,1); }
.aedan-chart-shown .aedan-chart-hbar { transform:scaleX(1); }
.aedan-chart-hbar:nth-of-type(2n) { transition-delay:.04s; }
.aedan-chart-hbar:nth-of-type(3n) { transition-delay:.08s; }
.aedan-chart-hbar.hi { filter:drop-shadow(0 0 6px var(--aedan-violet-glow)); }
.aedan-chart-line, .aedan-chart-area, .aedan-chart-dot { opacity:0; transition:opacity .5s ease .1s; }
.aedan-chart-shown .aedan-chart-line, .aedan-chart-shown .aedan-chart-area, .aedan-chart-shown .aedan-chart-dot { opacity:1; }
.aedan-donut-seg { opacity:0; transition:opacity .45s ease; }
.aedan-chart-shown .aedan-donut-seg { opacity:1; }

/* ── DONUT / PIE ── */
.aedan-donut-wrap { display:flex; gap:14px; align-items:center; padding:14px 12px; flex-wrap:wrap; }
.aedan-donut-svg { flex:0 0 auto; }
.aedan-donut-total { fill:var(--aedan-ink); font-family:var(--aedan-mono); font-size:18px; font-weight:700; }
.aedan-donut-sub { fill:var(--aedan-ink-faint); font-family:var(--aedan-mono); font-size:9px; }
.aedan-donut-legend { flex:1 1 130px; min-width:0; display:flex; flex-direction:column; gap:5px; }
.aedan-dl { display:flex; align-items:center; gap:7px; font-size:11.5px; color:var(--aedan-ink-mute); min-width:0; }
.aedan-dl-sw { width:10px; height:10px; border-radius:3px; flex:0 0 auto; }
.aedan-dl-l { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.aedan-dl-v { margin-left:auto; font-family:var(--aedan-mono); color:var(--aedan-ink); font-variant-numeric:tabular-nums; white-space:nowrap; }

/* ── Chart fullscreen lightbox ──
   Inline chart cards are clickable (zoom-in cursor) with a small ⤢ button that
   fades in on hover / keyboard focus. The lightbox re-RENDERS the same chart at
   larger vector geometry — overlay sits above the panel (1200) and below every
   admin modal (lowest modal layer = 1500). */
.aedan-chart-expandable { cursor:zoom-in; }
.aedan-chart-expand { flex:0 0 auto; width:24px; height:24px; margin-left:6px; display:grid; place-items:center; border:1px solid var(--aedan-line-2); border-radius:6px; background:rgba(167,139,250,.08); color:var(--aedan-ink-mute); font-size:12px; line-height:1; cursor:zoom-in; padding:0; opacity:0; transition:opacity .16s, color .16s, border-color .16s; }
.aedan-chart-expandable:hover .aedan-chart-expand, .aedan-chart-expand:focus-visible { opacity:1; }
.aedan-chart-expand:hover, .aedan-chart-expand:focus-visible { color:var(--aedan-ink); border-color:var(--aedan-violet); }
@media (hover:none) { .aedan-chart-expand { opacity:.7; } } /* touch: always visible */
.aedan-lightbox { position:fixed; inset:0; z-index:1250; background:rgba(7,6,15,.8); backdrop-filter:blur(5px); -webkit-backdrop-filter:blur(5px); display:flex; align-items:center; justify-content:center; padding:26px; }
.aedan-lightbox-box { width:min(920px, 94vw); max-height:92vh; overflow:auto; background:var(--aedan-panel); border:1px solid var(--aedan-line-2); border-radius:16px; box-shadow:var(--aedan-shadow); padding:14px 16px 16px; display:flex; flex-direction:column; gap:10px; animation:aedan-pop .28s cubic-bezier(.2,.9,.3,1) both; }
.aedan-lightbox-h { display:flex; align-items:center; gap:10px; }
.aedan-lightbox-title { flex:1; min-width:0; font-size:14px; font-weight:650; color:var(--aedan-ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.aedan-lightbox-x { flex:0 0 auto; width:30px; height:30px; border:1px solid var(--aedan-line-2); border-radius:8px; background:transparent; color:var(--aedan-ink-mute); cursor:pointer; font-size:13px; line-height:1; display:grid; place-items:center; padding:0; transition:.16s; }
.aedan-lightbox-x:hover, .aedan-lightbox-x:focus-visible { color:var(--aedan-ink); border-color:var(--aedan-violet); background:var(--aedan-raise); }
.aedan-lightbox-body .aedan-card { animation:none; border-color:var(--aedan-line-2); }
.aedan-lightbox-body .aedan-chart-svg { width:100%; height:auto; }
/* bigger donut → scale its center label up to match */
.aedan-lightbox-body .aedan-donut-total { font-size:26px; }
.aedan-lightbox-body .aedan-donut-sub { font-size:12px; }
.aedan-lightbox-body .aedan-donut-legend { font-size:13px; }
@media (max-width:560px) { .aedan-lightbox { padding:10px; } .aedan-lightbox-box { max-height:96vh; } }

/* ── Approval card (gold = approval-needed) ── */
.aedan-approve { border:1px solid rgba(251,191,36,.4); border-radius:14px; background:linear-gradient(180deg,rgba(251,191,36,.06),rgba(18,17,42,.6)); overflow:hidden; animation:aedan-pop .4s cubic-bezier(.2,.9,.3,1) both; }
.aedan-approve-h { padding:11px 13px; display:flex; align-items:center; flex-wrap:wrap; gap:8px 9px; }
.aedan-risk { font-size:10px; font-weight:700; letter-spacing:.05em; text-transform:uppercase; padding:3px 8px; border-radius:20px; color:var(--aedan-gold); background:rgba(251,191,36,.14); border:1px solid rgba(251,191,36,.3); flex:0 0 auto; white-space:nowrap; }
.aedan-risk.t3 { color:var(--aedan-danger); background:rgba(251,113,133,.12); border-color:rgba(251,113,133,.3); }
.aedan-approve-title { font-size:13px; font-weight:600; min-width:0; }
.aedan-approve-body { padding:2px 13px 10px; font-size:12.5px; line-height:1.5; color:var(--aedan-ink-mute); white-space:pre-wrap; }
.aedan-hash { font-family:var(--aedan-mono); font-size:10px; color:var(--aedan-ink-faint); padding:0 13px 4px; }
.aedan-hash code { color:var(--aedan-ink-mute); font-family:inherit; }
.aedan-approve-exp { font-family:var(--aedan-mono); font-size:10px; color:var(--aedan-ink-faint); padding:0 13px 4px; font-variant-numeric:tabular-nums; transition:color .2s; }
/* Expiry urgency: amber under 30s, red + gentle pulse under 10s. */
.aedan-approve-exp.is-soon { color:var(--aedan-gold); }
.aedan-approve-exp.is-urgent { color:var(--aedan-danger); font-weight:600; animation:aedan-exp-pulse 1s ease-in-out infinite; }
@keyframes aedan-exp-pulse { 0%,100%{ opacity:1; } 50%{ opacity:.55; } }
@media (prefers-reduced-motion: reduce) { .aedan-approve-exp.is-urgent { animation:none; } }
.aedan-approve-actions { display:flex; gap:8px; padding:11px 13px 13px; flex-wrap:wrap; }
.aedan-btn { flex:1 1 auto; border:none; border-radius:9px; padding:9px 13px; font-size:12.5px; font-weight:600; font-family:var(--aedan-sans); cursor:pointer; transition:.16s; min-width:0; }
.aedan-btn-primary { background:linear-gradient(135deg,var(--aedan-live),#0ea371); color:#04140d; box-shadow:0 8px 18px -8px var(--aedan-live-glow); }
.aedan-btn-primary:hover { filter:brightness(1.08); transform:translateY(-1px); }
/* Step-up armed: a sensitive (money/access) approve needs one more click. */
.aedan-btn-primary.aedan-btn-stepup { background:linear-gradient(135deg,var(--aedan-gold),#d97706); color:#1a1204; box-shadow:0 8px 18px -8px rgba(251,191,36,.45); }
.aedan-btn-ghost { flex:0 1 auto; background:var(--aedan-raise); color:var(--aedan-ink-mute); border:1px solid var(--aedan-line); }
.aedan-btn-ghost:hover { color:var(--aedan-ink); }
.aedan-btn:disabled { opacity:.45; cursor:default; filter:none; transform:none; }
.aedan-approve-outcome { flex:1; text-align:center; font-size:12.5px; font-weight:600; padding:4px; color:var(--aedan-live); }
.aedan-approve-outcome.rejected { color:var(--aedan-ink-faint); }
.aedan-approve.expired { opacity:.55; filter:saturate(.4); }

/* TASK #818 / F7 — batch reconciliation banner. Shown ONLY when a multi-card
   approval batch partially applied ("3 of 4 applied — 1 didn't run."), so the
   user is never left believing all four landed. Amber, not red: nothing is
   broken and the remainder is one click from retrying.
   NOTE: class is aedan-approve-RECON, not -batch — `.aedan-approve-batch` is
   already the per-row checkbox list inside a bulk approval card. */
.aedan-approve-recon { border:1px solid rgba(251,191,36,.34); border-radius:12px; background:linear-gradient(180deg,rgba(251,191,36,.07),rgba(18,17,42,.6)); padding:11px 13px; display:flex; flex-direction:column; gap:8px; animation:aedan-pop .3s ease both; }
.aedan-approve-recon-h { font-size:12.5px; font-weight:700; color:var(--aedan-ink); }
.aedan-approve-recon-sub { font-size:12px; line-height:1.5; color:var(--aedan-ink-mute); }
.aedan-approve-recon .aedan-btn { align-self:flex-start; }

/* ── Notes (errors, connection loss, taint-style info) — honest, calm ── */
.aedan-note { border:1px solid var(--aedan-line-2); border-radius:12px; background:rgba(26,24,54,.5); padding:11px 13px; display:flex; gap:10px; align-items:flex-start; font-size:12.5px; line-height:1.5; color:var(--aedan-ink-mute); animation:aedan-pop .3s ease both; }
.aedan-note.warn { border-color:rgba(251,191,36,.34); background:linear-gradient(180deg,rgba(251,191,36,.06),rgba(18,17,42,.6)); }
.aedan-note.error { border-color:rgba(251,113,133,.34); background:linear-gradient(180deg,rgba(251,113,133,.06),rgba(18,17,42,.6)); }
.aedan-note b { color:var(--aedan-ink); }
.aedan-note .aedan-note-ic { flex:0 0 auto; margin-top:1px; color:var(--aedan-gold); }
.aedan-note.error .aedan-note-ic { color:var(--aedan-danger); }
.aedan-note .aedan-note-body { min-width:0; flex:1; }
.aedan-note .aedan-note-act { display:block; margin-top:8px; background:var(--aedan-raise); border:1px solid var(--aedan-line-2); color:var(--aedan-ink); border-radius:8px; padding:6px 12px; font-size:12px; font-weight:600; cursor:pointer; font-family:var(--aedan-sans); }
.aedan-note .aedan-note-act:hover { border-color:var(--aedan-violet); color:var(--aedan-violet); }

/* ── Out-of-usage — an enterprise moment, not an error (§10.3; PERCENT ONLY) ── */
.aedan-limit { border:1px solid var(--aedan-line-2); border-radius:16px; background:linear-gradient(180deg,rgba(139,92,246,.12),rgba(18,17,42,.72)); overflow:hidden; animation:aedan-pop .4s cubic-bezier(.2,.9,.3,1) both; }
.aedan-limit-h { display:flex; align-items:center; gap:11px; padding:14px 15px 7px; }
.aedan-limit-badge { width:36px; height:36px; border-radius:10px; display:grid; place-items:center; background:rgba(167,139,250,.16); border:1px solid var(--aedan-line-2); color:var(--aedan-violet); flex:0 0 auto; }
.aedan-limit-title { font-size:14.5px; font-weight:700; line-height:1.2; min-width:0; }
.aedan-limit-sub { font-size:12px; color:var(--aedan-ink-mute); padding:0 15px 11px; line-height:1.5; }
.aedan-limit-sub b { color:var(--aedan-ink); }
.aedan-limit-reset { display:flex; align-items:flex-start; gap:9px; margin:0 15px 12px; padding:10px 12px; border:1px solid var(--aedan-line); border-radius:11px; background:rgba(26,24,54,.5); font-size:12px; color:var(--aedan-ink-mute); line-height:1.45; }
.aedan-limit-reset b { color:var(--aedan-ink); }
.aedan-limit-reset .aedan-cal { color:var(--aedan-gold); flex:0 0 auto; margin-top:1px; }
.aedan-limit-bar { height:7px; border-radius:20px; background:rgba(167,139,250,.14); overflow:hidden; margin:0 15px 5px; }
.aedan-limit-bar i { display:block; height:100%; width:2%; background:linear-gradient(90deg,var(--aedan-violet-deep),var(--aedan-nebula)); border-radius:20px; }
.aedan-limit-lbl { display:flex; justify-content:space-between; gap:8px; font-size:10.5px; color:var(--aedan-ink-faint); font-family:var(--aedan-mono); margin:0 15px 14px; flex-wrap:wrap; }

/* ── Upsell (402) / role (403) states ── */
.aedan-gate { border:1px solid var(--aedan-line-2); border-radius:16px; background:linear-gradient(180deg,rgba(139,92,246,.12),rgba(18,17,42,.72)); padding:16px 15px; animation:aedan-pop .4s cubic-bezier(.2,.9,.3,1) both; overflow-wrap:anywhere; }
.aedan-gate-h { display:flex; align-items:center; gap:11px; margin-bottom:9px; }
.aedan-gate-title { font-size:14.5px; font-weight:700; line-height:1.25; min-width:0; }
.aedan-gate-sub { font-size:12.5px; color:var(--aedan-ink-mute); line-height:1.55; }
.aedan-gate-sub b { color:var(--aedan-ink); }
.aedan-gate-cta { margin-top:13px; width:100%; border:none; border-radius:11px; padding:12px; font-size:13px; font-weight:700; cursor:pointer; color:#fff; font-family:var(--aedan-sans); background:linear-gradient(135deg,var(--aedan-violet-deep),var(--aedan-nebula)); box-shadow:0 10px 22px -10px var(--aedan-violet-glow); }
.aedan-gate-cta:hover { filter:brightness(1.08); transform:translateY(-1px); }

/* ── FOMO blur preview (behind the 402 upsell gate) ── */
.aedan-gate-blur { position:relative; margin:4px 2px 0; padding:16px 14px 40px; border-radius:14px 14px 0 0;
  background:linear-gradient(180deg,rgba(139,92,246,.12),rgba(18,17,42,.55));
  filter:blur(3.5px); opacity:.6; user-select:none; pointer-events:none; overflow:hidden; }
.aedan-gate-blur::after { content:""; position:absolute; inset:0; background:linear-gradient(180deg,rgba(18,17,42,0),rgba(18,17,42,.75)); }
.aedan-gb-row { display:flex; align-items:center; gap:9px; font-size:12px; color:var(--aedan-ink-mute); margin:9px 0; }
.aedan-gb-dot { width:8px; height:8px; border-radius:50%; background:linear-gradient(135deg,var(--aedan-violet-deep),var(--aedan-nebula)); flex:0 0 auto; }
.aedan-gb-card { margin:10px 0; padding:11px 12px; border-radius:11px; border:1px solid var(--aedan-line-2);
  background:rgba(139,92,246,.10); font-size:12.5px; color:var(--aedan-ink); line-height:1.5; }

/* ── Liquid-glass upsell gate (frosted panel over the blurred preview) ── */
.aedan-gate-glass {
  position:relative; margin-top:-26px; z-index:2;
  background:linear-gradient(180deg, rgba(30,26,64,.62), rgba(18,17,42,.78));
  backdrop-filter:blur(22px) saturate(1.3); -webkit-backdrop-filter:blur(22px) saturate(1.3);
  border:1px solid rgba(167,139,250,.32);
  box-shadow:0 18px 50px -18px rgba(0,0,0,.7), 0 0 40px rgba(139,92,246,.14), inset 0 1px 0 rgba(255,255,255,.06);
}
.aedan-gate-glass .aedan-gate-title { font-size:16px; }
.aedan-gate-feats { list-style:none; margin:14px 0 4px; padding:0; display:grid; gap:10px; }
.aedan-gate-feats li { display:flex; align-items:flex-start; gap:10px; font-size:12.5px; color:var(--aedan-ink); line-height:1.45; }
.aedan-gate-feat-i { flex:0 0 auto; width:16px; height:16px; margin-top:1px; color:var(--aedan-violet); display:inline-flex; }
.aedan-gate-feat-i svg { width:16px; height:16px; }
.aedan-gate-offer { margin:16px 0 4px; padding:14px 15px; border-radius:13px;
  border:1px solid rgba(167,139,250,.3); background:linear-gradient(135deg, rgba(139,92,246,.16), rgba(0,212,255,.06)); }
.aedan-gate-price { font-size:26px; font-weight:800; color:#fff; line-height:1; letter-spacing:-.5px; }
.aedan-gate-price span { font-size:14px; font-weight:600; color:var(--aedan-ink-mute); margin-left:3px; }
.aedan-gate-price-sub { margin-top:6px; font-size:11.5px; color:var(--aedan-ink-mute); line-height:1.5; }
.aedan-gate-price-sub b { color:#fff; }
.aedan-gate-glass .aedan-gate-cta {
  margin-top:14px; font-size:13.5px; padding:13px;
  background:linear-gradient(135deg, #8b5cf6, #e879f9); box-shadow:0 14px 30px -10px rgba(232,121,249,.5);
  animation:aedan-cta-pulse 2.6s ease-in-out infinite;
}
@keyframes aedan-cta-pulse { 0%,100%{box-shadow:0 14px 30px -10px rgba(232,121,249,.5);} 50%{box-shadow:0 14px 38px -8px rgba(232,121,249,.75);} }
.aedan-gate-fine { margin-top:10px; text-align:center; font-size:11px; color:var(--aedan-ink-faint); }

/* ── Composer ── */
.aedan-composer { padding:12px 14px 14px; border-top:1px solid var(--aedan-line); flex:0 0 auto; }
.aedan-ctx { font-size:10.5px; color:var(--aedan-ink-faint); margin-bottom:8px; display:flex; align-items:center; gap:6px; justify-content:space-between; flex-wrap:wrap; }
.aedan-inp { display:flex; align-items:flex-end; gap:9px; background:var(--aedan-raise); border:1px solid var(--aedan-line-2); border-radius:12px; padding:9px 12px; }
.aedan-inp textarea { flex:1; min-width:0; background:transparent; border:none; outline:none; color:var(--aedan-ink); font-size:13px; font-family:var(--aedan-sans); resize:none; max-height:120px; line-height:1.4; padding:2px 0; }
.aedan-inp textarea::placeholder { color:var(--aedan-ink-faint); }
.aedan-inp textarea:disabled { opacity:.55; }
.aedan-send { width:30px; height:30px; border-radius:9px; border:none; background:linear-gradient(135deg,var(--aedan-violet-deep),var(--aedan-nebula)); color:#fff; cursor:pointer; display:grid; place-items:center; flex:0 0 auto; padding:0; }
.aedan-send:hover { filter:brightness(1.1); }
.aedan-send:disabled { opacity:.45; cursor:default; filter:none; }
.aedan-send.stop { background:var(--aedan-raise); border:1px solid var(--aedan-line-2); color:var(--aedan-danger); }
/* subtle secondary "Queue" button — shown only while streaming with typed text */
.aedan-queue { display:inline-flex; align-items:center; gap:3px; height:30px; padding:0 10px; border-radius:9px; border:1px solid var(--aedan-line-2); background:var(--aedan-raise); color:var(--aedan-ink); font-size:12.5px; font-weight:600; cursor:pointer; flex:0 0 auto; transition:.16s; }
.aedan-queue:hover { border-color:var(--aedan-violet); color:#fff; }
.aedan-queue svg { width:13px; height:13px; }
.aedan-queue[hidden] { display:none; }
/* parked-message chip below the input row — animates in like sibling transients
   (.aedan-toast/.aedan-rate-pop use aedan-pop); reduced-motion snaps it in. */
.aedan-queued-chip { display:flex; align-items:center; gap:6px; margin-top:8px; padding:6px 10px; border-radius:12px; background:var(--aedan-panel-2, var(--aedan-raise)); border:1px solid var(--aedan-line); color:var(--aedan-ink-mute); font-size:12.5px; max-width:100%; animation:aedan-pop .22s cubic-bezier(.2,.9,.3,1) both; }
.aedan-queued-chip[hidden] { display:none; }
@media (prefers-reduced-motion:reduce) { .aedan-queued-chip { animation:none; } }
.aedan-queued-ic { display:inline-flex; flex:0 0 auto; color:var(--aedan-ink-mute); }
.aedan-queued-txt { flex:1 1 auto; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.aedan-queued-x { flex:0 0 auto; display:inline-grid; place-items:center; width:20px; height:20px; padding:0; border:none; background:transparent; color:var(--aedan-ink-mute); cursor:pointer; border-radius:6px; }
.aedan-queued-x:hover { background:var(--aedan-raise); color:var(--aedan-ink); }
/* voice-to-text mic button — matches .aedan-icon-btn sizing/theme, dark & bordered */
.aedan-mic-btn { width:29px; height:29px; border-radius:9px; border:1px solid var(--aedan-line-2); background:transparent; color:var(--aedan-ink-mute); cursor:pointer; display:grid; place-items:center; flex:0 0 auto; padding:0; transition:.16s; }
.aedan-mic-btn:hover { background:var(--aedan-raise); color:var(--aedan-ink); border-color:var(--aedan-violet); }
.aedan-mic-btn svg { width:15px; height:15px; }
.aedan-mic-btn.recording { background:var(--aedan-live); border-color:var(--aedan-live); color:#04120c; animation:aedan-mic-pulse 1.4s ease-in-out infinite; }
@keyframes aedan-mic-pulse { 0%,100% { box-shadow:0 0 0 0 var(--aedan-live-glow); } 50% { box-shadow:0 0 0 5px transparent; } }
/* #1077 — explicit "Stop mic" control, shown only while listening. Mirrors
   .aedan-queue's pill sizing so the composer row stays visually even. Stops the
   MICROPHONE only; the send button's stop square still stops the answer. */
.aedan-voice-stop { display:inline-flex; align-items:center; gap:4px; height:30px; padding:0 10px; border-radius:9px; border:1px solid var(--aedan-danger); background:var(--aedan-raise); color:var(--aedan-danger); font-size:12.5px; font-weight:600; font-family:var(--aedan-sans); cursor:pointer; flex:0 0 auto; transition:.16s; }
.aedan-voice-stop:hover { background:var(--aedan-danger); color:#1a0409; }
.aedan-voice-stop svg { width:11px; height:11px; }
.aedan-voice-stop[hidden] { display:none; }
/* live waveform canvas — small, rounded, tucked into the composer; hidden by default */
.aedan-waveform { flex:0 0 auto; width:120px; height:26px; border-radius:7px; background:rgba(52,211,153,.08); }
.aedan-waveform[hidden] { display:none; }
.aedan-composer-hint { font-size:10px; color:var(--aedan-ink-faint); margin-top:7px; text-align:center; }

/* Task #974 — attachments: paperclip button (mirrors .aedan-mic-btn), staged
   chips above the input, per-chip status, drop-target ring, user-bubble chips */
.aedan-attach-btn { width:29px; height:29px; border-radius:9px; border:1px solid var(--aedan-line-2); background:transparent; color:var(--aedan-ink-mute); cursor:pointer; display:grid; place-items:center; flex:0 0 auto; padding:0; transition:.16s; }
.aedan-attach-btn:hover { background:var(--aedan-raise); color:var(--aedan-ink); border-color:var(--aedan-violet); }
.aedan-attach-btn svg { width:15px; height:15px; }
.aedan-attach-chips { display:flex; flex-wrap:wrap; gap:6px; margin-bottom:8px; }
.aedan-attach-chips[hidden] { display:none; }
.aedan-attach-chip { display:inline-flex; align-items:center; gap:6px; padding:4px 9px; border-radius:11px; background:var(--aedan-panel-2, var(--aedan-raise)); border:1px solid var(--aedan-line); color:var(--aedan-ink-mute); font-size:12px; max-width:100%; animation:aedan-pop .22s cubic-bezier(.2,.9,.3,1) both; }
@media (prefers-reduced-motion:reduce) { .aedan-attach-chip { animation:none; } }
.aedan-attach-chip .aedan-attach-ic { display:inline-flex; flex:0 0 auto; color:var(--aedan-violet); }
.aedan-attach-chip .aedan-attach-ic svg { width:12px; height:12px; }
.aedan-attach-chip .aedan-attach-name { max-width:150px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--aedan-ink); }
.aedan-attach-chip .aedan-attach-size { font-family:var(--aedan-mono); font-size:10.5px; color:var(--aedan-ink-faint); white-space:nowrap; }
.aedan-attach-chip.uploading { border-color:var(--aedan-violet); }
.aedan-attach-chip.uploading .aedan-attach-size { color:var(--aedan-violet); animation:aedan-attach-busy 1.1s ease-in-out infinite; }
@keyframes aedan-attach-busy { 0%,100% { opacity:1; } 50% { opacity:.45; } }
@media (prefers-reduced-motion:reduce) { .aedan-attach-chip.uploading .aedan-attach-size { animation:none; } }
.aedan-attach-chip.error { border-color:var(--aedan-danger, #f87171); }
.aedan-attach-chip.error .aedan-attach-size { color:var(--aedan-danger, #f87171); }
.aedan-attach-x { flex:0 0 auto; display:inline-grid; place-items:center; width:18px; height:18px; padding:0; border:none; background:transparent; color:var(--aedan-ink-mute); cursor:pointer; border-radius:6px; }
.aedan-attach-x:hover { background:var(--aedan-raise); color:var(--aedan-ink); }
.aedan-attach-err { flex-basis:100%; font-size:12px; color:var(--aedan-danger, #f87171); padding:2px 2px 0; }
.aedan-panel.aedan-dragover .aedan-composer { outline:2px dashed var(--aedan-violet); outline-offset:-4px; border-radius:12px; }
/* small read-only chips inside the sent user bubble (live + transcript replay) */
.aedan-msg-atts { display:flex; flex-wrap:wrap; gap:5px; margin-top:7px; }
.aedan-msg-att { display:inline-flex; align-items:center; gap:5px; padding:3px 8px; border-radius:9px; background:rgba(255,255,255,.16); color:#fff; font-size:11.5px; max-width:100%; }
.aedan-msg-att svg { width:11px; height:11px; flex:0 0 auto; }
.aedan-msg-att span { max-width:150px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* Model switcher */
.aedan-model-switch { position:relative; margin-left:auto; }
.aedan-model-btn { display:inline-flex; align-items:center; gap:6px; background:var(--aedan-raise); border:1px solid var(--aedan-line-2); color:var(--aedan-ink); border-radius:8px; padding:3px 8px; font-size:11px; font-family:var(--aedan-sans); cursor:pointer; max-width:100%; }
.aedan-model-btn:hover { border-color:var(--aedan-violet); }
.aedan-model-btn .aedan-mdot { width:6px; height:6px; border-radius:50%; background:var(--aedan-violet); box-shadow:0 0 6px var(--aedan-violet-glow); flex:0 0 auto; }
.aedan-model-btn .aedan-mname { font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.aedan-model-btn .aedan-mmeta { color:var(--aedan-ink-faint); font-family:var(--aedan-mono); font-size:10px; }
.aedan-model-menu { position:absolute; bottom:100%; right:0; margin-bottom:7px; background:var(--aedan-panel-2); border:1px solid var(--aedan-line-2); border-radius:11px; padding:5px; box-shadow:var(--aedan-shadow); z-index:20; min-width:210px; max-width:min(280px, 86vw); max-height:min(60vh, 420px); overflow-y:auto; overflow-x:hidden; }
.aedan-model-menu[hidden] { display:none; }
.aedan-model-mh { font-size:9.5px; letter-spacing:.08em; text-transform:uppercase; color:var(--aedan-ink-faint); padding:5px 8px 3px; }
.aedan-model-opt { display:flex; flex-direction:column; gap:3px; width:100%; text-align:left; background:transparent; border:none; color:var(--aedan-ink); padding:8px 9px; border-radius:8px; cursor:pointer; font-size:12px; font-family:var(--aedan-sans); }
.aedan-model-opt:hover { background:var(--aedan-raise); }
.aedan-model-top { display:flex; align-items:center; gap:8px; width:100%; }
.aedan-model-opt .aedan-mdot { width:6px; height:6px; border-radius:50%; flex:0 0 auto; }
.aedan-model-opt .aedan-oname { font-weight:600; }
/* cost meter — 3 bars, filled = relative usage rate (cheapest→priciest) */
.aedan-cost-meter { margin-left:auto; display:inline-flex; gap:2px; align-items:flex-end; height:11px; }
.aedan-cost-bar { width:3px; height:5px; border-radius:1px; background:var(--aedan-line-2); }
.aedan-cost-bar:nth-child(2) { height:8px; }
.aedan-cost-bar:nth-child(3) { height:11px; }
/* relative-usage chip — quantifies the meter (e.g. "~15× lightest") */
.aedan-model-rel { flex:0 0 auto; font-family:var(--aedan-mono); font-size:8.5px; font-weight:600; line-height:1;
  padding:2px 5px; border-radius:999px; color:#fbbf24; background:rgba(251,191,36,.12); border:1px solid rgba(251,191,36,.28); white-space:nowrap; }
.aedan-model-rel.base { color:#7dd3fc; background:rgba(125,211,252,.12); border-color:rgba(125,211,252,.28); }
.aedan-model-rel.mid { color:#a78bfa; background:rgba(167,139,250,.12); border-color:rgba(167,139,250,.28); }
.aedan-model-sub { display:flex; align-items:baseline; gap:6px; padding-left:14px; min-width:0; }
.aedan-model-cost { font-family:var(--aedan-mono); font-size:9.5px; font-weight:600; color:var(--aedan-ink-mute); white-space:nowrap; flex:0 0 auto; }
.aedan-model-note { font-size:10px; color:var(--aedan-ink-faint); line-height:1.25; overflow-wrap:anywhere; }
/* per-model "best for" / when-to-use guidance — capability + speed/cost tradeoff */
.aedan-model-use { font-size:10px; color:var(--aedan-ink-mute); line-height:1.3; overflow-wrap:anywhere; font-style:italic; }
.aedan-model-opt.active { background:rgba(167,139,250,.12); }
.aedan-model-opt.active .aedan-oname::after { content:" ✓"; color:var(--aedan-live); font-size:11px; }
.aedan-model-foot { display:flex; align-items:center; justify-content:center; gap:6px; padding:6px 8px 3px; margin-top:2px; border-top:1px solid var(--aedan-line); font-family:var(--aedan-mono); font-size:8.5px; color:var(--aedan-ink-faint); }
.aedan-model-foot-cheap { color:#7dd3fc; } .aedan-model-foot-dear { color:#fbbf24; }

/* Screen-reader-only live announcements */
.aedan-sr-only { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0; }

/* ── DIFF card (§8.3 card 4) — old→new for a write proposal ── */
.aedan-diff-body { padding:4px 12px 10px; }
.aedan-diff-row { display:flex; align-items:baseline; gap:9px; font-size:12px; padding:6px 0; border-top:1px solid var(--aedan-line); flex-wrap:wrap; }
.aedan-diff-body .aedan-diff-row:first-child, .aedan-approve-fields .aedan-diff-row:first-child { border-top:none; }
.aedan-diff-k { color:var(--aedan-ink-mute); min-width:0; }
.aedan-diff-v { margin-left:auto; display:inline-flex; align-items:center; gap:6px; flex-wrap:wrap; min-width:0; font-variant-numeric:tabular-nums; }
.aedan-diff-before { color:var(--aedan-ink-faint); text-decoration:line-through; font-family:var(--aedan-mono); font-size:11.5px; }
.aedan-diff-arr { color:var(--aedan-ink-faint); display:inline-flex; }
.aedan-diff-after { color:var(--aedan-ink); font-family:var(--aedan-mono); font-size:11.5px; font-weight:600; }
.aedan-diff-det { flex-basis:100%; color:var(--aedan-ink-faint); font-family:var(--aedan-mono); font-size:10.5px; }
.aedan-diff-row.c-add .aedan-diff-after { color:var(--aedan-live); }
.aedan-diff-row.c-rem .aedan-diff-after { color:var(--aedan-danger); }
.aedan-diff-row.c-mov .aedan-diff-after { color:var(--aedan-gold); }
.aedan-diff-chips { display:flex; flex-wrap:wrap; gap:6px; padding:10px 12px 4px; }
.aedan-diff-chip { display:inline-flex; align-items:center; gap:5px; font-size:11px; padding:3px 8px; border-radius:20px; border:1px solid var(--aedan-line-2); background:var(--aedan-raise); max-width:100%; overflow-wrap:anywhere; }
.aedan-diff-chip-l { font-weight:600; }
.aedan-diff-chip-d { font-family:var(--aedan-mono); font-size:10px; color:var(--aedan-ink-faint); }
.aedan-diff-chip.add { border-color:rgba(52,211,153,.4); color:var(--aedan-live); }
.aedan-diff-chip.rem { border-color:rgba(251,113,133,.4); color:var(--aedan-danger); text-decoration:line-through; }
.aedan-diff-chip.mov { border-color:rgba(251,191,36,.4); color:var(--aedan-gold); }
.aedan-diff-chip.chg { border-color:var(--aedan-line-2); color:var(--aedan-ink); }

/* ── SCHEDULE week-grid card (§8.6.3) — scrolls INSIDE its own container ── */
.aedan-sched-scroll { overflow-x:auto; padding:10px 10px 6px; }
.aedan-sched-grid { min-width:376px; }
.aedan-sched-row { display:grid; grid-template-columns:84px repeat(7,minmax(34px,1fr)); gap:3px; align-items:stretch; margin-bottom:3px; }
.aedan-sched-row.head span { font-family:var(--aedan-mono); font-size:9px; color:var(--aedan-ink-faint); text-align:center; line-height:1.15; padding-top:1px; }
.aedan-sched-row.head span b { display:block; color:var(--aedan-ink-mute); font-size:10.5px; font-weight:700; }
.aedan-sched-emp { display:flex; flex-direction:column; justify-content:center; gap:1px; padding:1px 4px 1px 7px; border-left:3px solid var(--rc,transparent); border-radius:2px; min-width:0; }
.aedan-sched-en { font-size:11px; color:var(--aedan-ink); font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; line-height:1.12; }
.aedan-sched-er { font-family:var(--aedan-mono); font-size:9.5px; color:var(--aedan-ink-mute); font-variant-numeric:tabular-nums; white-space:nowrap; }
.aedan-sched-cell { min-height:27px; border-radius:5px; background:rgba(167,139,250,.05); display:grid; place-items:center; }
.aedan-sched-cell.on { animation:aedan-cellpop .35s cubic-bezier(.2,.9,.3,1) both; }
@keyframes aedan-cellpop { from{opacity:0;transform:scale(.7);} to{opacity:1;transform:none;} }
.aedan-sched-cell.am  { background:linear-gradient(135deg,rgba(139,92,246,.55),rgba(167,139,250,.34)); }
.aedan-sched-cell.pm  { background:linear-gradient(135deg,rgba(232,121,249,.46),rgba(167,139,250,.28)); }
.aedan-sched-cell.mid { background:linear-gradient(135deg,rgba(251,191,36,.42),rgba(232,121,249,.24)); }
.aedan-sched-cell.off { background:transparent; }
.aedan-sched-cell b { font-family:var(--aedan-mono); font-size:9px; color:#fff; opacity:.96; font-weight:600; letter-spacing:-.01em; }
.aedan-sched-cell.off b { color:var(--aedan-ink-faint); opacity:.45; }
.aedan-sched-row.cover { margin-top:5px; padding-top:6px; border-top:1px solid var(--aedan-line); }
.aedan-sched-row.cover .aedan-sched-emp { border-left:none; padding-left:7px; }
.aedan-sched-cvr { display:grid; place-items:center; font-family:var(--aedan-mono); font-size:10px; color:var(--aedan-ink-mute); font-variant-numeric:tabular-nums; min-height:16px; }
.aedan-sched-cvr.low { color:var(--aedan-gold); font-weight:700; }
.aedan-sched-legend { display:flex; flex-wrap:wrap; gap:9px 12px; padding:7px 12px 4px; font-size:10px; color:var(--aedan-ink-mute); }
.aedan-sched-lg { display:inline-flex; align-items:center; gap:5px; font-variant-numeric:tabular-nums; }
.aedan-sched-sw { width:11px; height:11px; border-radius:3px; flex:0 0 auto; }
.aedan-sched-sw.am { background:linear-gradient(135deg,#8b5cf6,#a78bfa); }
.aedan-sched-sw.pm { background:linear-gradient(135deg,#e879f9,#a78bfa); }
.aedan-sched-sw.mid{ background:linear-gradient(135deg,#fbbf24,#e879f9); }
.aedan-sched-foot { display:flex; align-items:center; flex-wrap:wrap; gap:6px 8px; padding:8px 12px 11px; border-top:1px solid var(--aedan-line); font-size:11px; color:var(--aedan-ink-mute); }
.aedan-sched-foot .aedan-sched-foot-txt { min-width:0; overflow-wrap:anywhere; }
.aedan-sched-sweep { flex:1 1 80px; height:4px; border-radius:20px; background:rgba(52,211,153,.14); overflow:hidden; }
.aedan-sched-sweep i { display:block; height:100%; width:0; background:linear-gradient(90deg,var(--aedan-live),#0ea371); border-radius:20px; box-shadow:0 0 8px var(--aedan-live-glow); transition:width .6s cubic-bezier(.3,.8,.3,1); }
.aedan-sched-foot.done { color:var(--aedan-live); }
.aedan-sched-vok { color:var(--aedan-live); display:inline-flex; vertical-align:-2px; }

/* ── EDITABLE FORM card (§8.3 card 3) ── */
.aedan-form-body { padding:10px 12px 4px; display:flex; flex-direction:column; gap:9px; }
.aedan-form-field { display:flex; flex-direction:column; gap:4px; min-width:0; }
.aedan-form-lbl { font-size:10.5px; letter-spacing:.06em; text-transform:uppercase; color:var(--aedan-ink-faint); font-weight:600; }
.aedan-form-input { width:100%; min-width:0; background:var(--aedan-raise); border:1px solid var(--aedan-line-2); border-radius:9px; color:var(--aedan-ink); font-size:12.5px; font-family:var(--aedan-sans); padding:8px 10px; resize:vertical; }
.aedan-form-input:focus-visible { border-color:var(--aedan-violet); }
.aedan-form-input:read-only { opacity:.7; cursor:default; }
.aedan-form-note { font-size:11px; color:var(--aedan-gold); padding:6px 12px 0; line-height:1.45; }
.aedan-form-actions { display:flex; gap:8px; padding:11px 12px 12px; }
.aedan-form-out { flex:1; text-align:center; font-size:12.5px; font-weight:600; padding:4px; color:var(--aedan-live); }

/* ── COMPLETION report card (§8.3 card 7 / §7.2) — emerald verify-beat ── */
.aedan-report { border:1px solid rgba(52,211,153,.34); border-radius:14px; background:linear-gradient(180deg,rgba(52,211,153,.07),rgba(18,17,42,.6)); overflow:hidden; overflow-wrap:anywhere; animation:aedan-pop .4s cubic-bezier(.2,.9,.3,1) both; }
.aedan-report-h { padding:11px 13px; display:flex; align-items:center; flex-wrap:wrap; gap:5px 9px; font-weight:700; font-size:13px; }
.aedan-report-h .aedan-check { color:var(--aedan-live); flex:0 0 auto; }
.aedan-report-rings { margin-left:auto; font-family:var(--aedan-mono); font-size:11px; color:var(--aedan-ink-mute); font-variant-numeric:tabular-nums; white-space:nowrap; }
.aedan-report-body { padding:0 13px 12px; display:flex; flex-direction:column; gap:6px; }
.aedan-rep-item { display:flex; align-items:flex-start; gap:8px; font-size:12px; color:var(--aedan-ink-mute); }
.aedan-rep-item .aedan-rep-ic { flex:0 0 auto; margin-top:1px; display:inline-flex; }
.aedan-rep-item .aedan-check { color:var(--aedan-live); }
.aedan-rep-item span:last-child { min-width:0; overflow-wrap:anywhere; }
.aedan-rep-item.failed .aedan-x { color:var(--aedan-danger); }
.aedan-rep-item b { color:var(--aedan-ink); font-weight:600; }

/* ── UNDO toast (§8.3 card 10) — pinned inside the panel, 30s ring ── */
.aedan-toast { position:absolute; left:16px; right:16px; bottom:74px; background:var(--aedan-raise); border:1px solid var(--aedan-line-2); border-radius:12px; padding:11px 13px; display:flex; align-items:center; gap:11px; box-shadow:var(--aedan-shadow); animation:aedan-pop .3s ease both; z-index:5; }
.aedan-toast-ring { width:52px; height:52px; flex:0 0 auto; }
.aedan-toast-txt { flex:1; font-size:12.5px; min-width:0; overflow-wrap:anywhere; }
.aedan-toast-txt small { color:var(--aedan-ink-faint); display:block; margin-top:1px; font-family:var(--aedan-mono); font-size:10.5px; }
.aedan-toast-undo { background:transparent; border:1px solid var(--aedan-line-2); color:var(--aedan-ink); border-radius:8px; padding:6px 12px; font-size:12px; font-weight:600; cursor:pointer; flex:0 0 auto; font-family:var(--aedan-sans); }
.aedan-toast-undo:hover { background:var(--aedan-panel); border-color:var(--aedan-violet); }
.aedan-toast-undo:disabled { opacity:.5; cursor:default; }

/* ── UNDO CONFLICT resolver (three-way) ── */
.aedan-conflict-sub { padding:8px 12px 4px; font-size:12px; color:var(--aedan-ink-mute); line-height:1.45; }
.aedan-conflict-opts { padding:4px 12px 12px; display:flex; flex-direction:column; gap:7px; }
.aedan-conflict-opt { display:flex; flex-direction:column; gap:3px; text-align:left; background:var(--aedan-raise); border:1px solid var(--aedan-line-2); border-radius:10px; padding:9px 11px; cursor:pointer; color:var(--aedan-ink); font-family:var(--aedan-sans); }
.aedan-conflict-opt:hover { border-color:var(--aedan-violet); }
.aedan-conflict-opt.picked { border-color:var(--aedan-live); background:rgba(52,211,153,.08); }
.aedan-conflict-lbl { font-size:11px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--aedan-ink-faint); }
.aedan-conflict-opt.picked .aedan-conflict-lbl { color:var(--aedan-live); }
.aedan-conflict-val { font-family:var(--aedan-mono); font-size:11px; color:var(--aedan-ink-mute); overflow-wrap:anywhere; }

/* ── APPROVAL upgrade: badges, field rows, batch toggles ── */
.aedan-approve-badges { display:flex; flex-wrap:wrap; gap:6px; padding:0 13px 8px; }
.aedan-approve-badge { font-size:10.5px; font-weight:600; padding:3px 8px; border-radius:20px; background:rgba(167,139,250,.12); border:1px solid var(--aedan-line-2); color:var(--aedan-ink-mute); white-space:nowrap; }
.aedan-approve-fields { padding:2px 13px 8px; }
.aedan-approve-batch { padding:2px 13px 8px; display:flex; flex-direction:column; gap:5px; max-height:220px; overflow-y:auto; }
.aedan-approve-batch-row { display:flex; align-items:baseline; gap:8px; font-size:12px; cursor:pointer; flex-wrap:wrap; }
.aedan-approve-batch-row input { flex:0 0 auto; accent-color:var(--aedan-live); margin-top:2px; }
.aedan-approve-batch-l { color:var(--aedan-ink); min-width:0; }
.aedan-approve-batch-d { margin-left:auto; font-family:var(--aedan-mono); font-size:10.5px; color:var(--aedan-ink-faint); }

/* ── NAVIGATE announce chip (§9.2) ── */
.aedan-nav { display:flex; align-items:center; gap:9px; border:1px solid var(--aedan-line-2); border-radius:12px; background:rgba(125,211,252,.06); padding:10px 13px; font-size:12.5px; color:var(--aedan-ink); animation:aedan-pop .3s ease both; overflow-wrap:anywhere; }
.aedan-nav .aedan-nav-ic { color:var(--aedan-read); flex:0 0 auto; display:inline-flex; }

/* ── GUIDE / spotlight overlay (§9.3) — dim + cutout + tooltip ── */
.aedan-spot-overlay { position:fixed; inset:0; z-index:1400; pointer-events:none; }
.aedan-spot-cut { position:fixed; border-radius:10px; box-shadow:0 0 0 3px var(--aedan-violet), 0 0 0 9999px rgba(7,6,15,.72); transition:all .18s cubic-bezier(.2,.8,.2,1); pointer-events:none; }
.aedan-spot-tip { position:fixed; max-width:320px; width:max-content; background:var(--aedan-panel-2); border:1px solid var(--aedan-line-2); border-radius:12px; padding:12px 13px; box-shadow:var(--aedan-shadow); pointer-events:auto; z-index:1401; }
.aedan-spot-title { font-size:13px; font-weight:700; color:var(--aedan-ink); margin-bottom:5px; }
.aedan-spot-body { font-size:12px; color:var(--aedan-ink-mute); line-height:1.5; margin-bottom:10px; }
.aedan-spot-actions { display:flex; gap:8px; flex-wrap:wrap; }
.aedan-spot-step { font-family:var(--aedan-mono); font-size:10px; letter-spacing:.06em; text-transform:uppercase; color:var(--aedan-ink-faint); margin-bottom:6px; }

/* ══ P4-1 · CO-DRIVE (§9.4) — animated cursor visual replay ══
   The whole layer is pointer-events:none so it NEVER intercepts a real click
   (the demo aborts on the user's first genuine input); only the banner's Stop
   button opts back in. z below admin modals (1500) like the spotlight band. */
.aedan-codrive-layer { position:fixed; inset:0; z-index:1450; pointer-events:none; }
.aedan-codrive-banner {
  position:fixed; top:14px; left:50%; transform:translateX(-50%); z-index:1452;
  display:flex; align-items:center; gap:10px; max-width:min(94vw,560px);
  padding:9px 12px 9px 14px; border-radius:12px; pointer-events:auto;
  background:linear-gradient(135deg,rgba(139,92,246,.96),rgba(232,121,249,.94));
  color:#fff; box-shadow:0 14px 40px -12px rgba(0,0,0,.7), 0 0 22px -6px var(--aedan-violet-glow);
  font-family:var(--aedan-sans); animation:aedan-pop .3s ease both;
}
.aedan-codrive-btxt { font-size:12px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.aedan-codrive-pulse { width:9px; height:9px; border-radius:50%; background:#fff; flex:0 0 auto; box-shadow:0 0 0 0 rgba(255,255,255,.7); animation:aedan-codrive-beat 1.4s ease-out infinite; }
@keyframes aedan-codrive-beat { 0%{box-shadow:0 0 0 0 rgba(255,255,255,.6);} 70%{box-shadow:0 0 0 8px rgba(255,255,255,0);} 100%{box-shadow:0 0 0 0 rgba(255,255,255,0);} }
.aedan-codrive-stop { flex:0 0 auto; background:rgba(7,6,15,.28); border:1px solid rgba(255,255,255,.5); color:#fff; border-radius:8px; padding:4px 11px; font-size:11px; font-weight:700; cursor:pointer; font-family:var(--aedan-sans); }
.aedan-codrive-stop:hover { background:rgba(7,6,15,.42); }

.aedan-codrive-cursor { position:fixed; left:0; top:0; z-index:1453; width:22px; height:22px; margin:-2px 0 0 -2px; pointer-events:none; will-change:transform; filter:drop-shadow(0 3px 6px rgba(0,0,0,.55)); }
.aedan-codrive-cursor svg { display:block; }
.aedan-codrive-ring { position:absolute; left:2px; top:2px; width:14px; height:14px; border-radius:50%; border:2px solid var(--aedan-violet); opacity:0; pointer-events:none; }
.aedan-codrive-ring.go { animation:aedan-codrive-clk .42s cubic-bezier(.2,.8,.2,1); }
@keyframes aedan-codrive-clk { 0%{opacity:.9;transform:scale(.4);} 100%{opacity:0;transform:scale(3.2);} }

.aedan-codrive-halo { position:fixed; z-index:1451; border-radius:9px; pointer-events:none; box-shadow:0 0 0 2px var(--aedan-violet), 0 0 0 9999px rgba(7,6,15,.42); transition:all .2s cubic-bezier(.2,.8,.2,1); }

.aedan-codrive-cap { position:fixed; left:50%; bottom:22px; transform:translateX(-50%); z-index:1452; max-width:min(92vw,420px); pointer-events:none; background:var(--aedan-panel-2); border:1px solid var(--aedan-line-2); border-radius:11px; padding:9px 13px; font-size:12.5px; line-height:1.45; color:var(--aedan-ink); box-shadow:var(--aedan-shadow); overflow-wrap:anywhere; }

.aedan-codrive-ghost { position:fixed; z-index:1453; pointer-events:none; background:rgba(52,211,153,.14); border:1px dashed var(--aedan-live); color:var(--aedan-live); border-radius:8px; padding:4px 9px; font-family:var(--aedan-mono); font-size:11.5px; max-width:min(80vw,320px); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; box-shadow:0 6px 18px -8px var(--aedan-live-glow); }
.aedan-codrive-done { position:fixed; left:50%; bottom:22px; transform:translateX(-50%); z-index:1452; max-width:min(92vw,440px); pointer-events:none; background:linear-gradient(180deg,rgba(52,211,153,.1),var(--aedan-panel-2)); border:1px solid rgba(52,211,153,.4); border-radius:11px; padding:10px 14px; font-size:12.5px; color:var(--aedan-live); box-shadow:var(--aedan-shadow); overflow-wrap:anywhere; }

@media (prefers-reduced-motion:reduce){
  .aedan-codrive-cursor { transition:none !important; }
  .aedan-codrive-pulse { animation:none !important; }
  .aedan-codrive-ring.go { animation:none !important; }
}

/* ── Defensive: admin.html's ≤767px block forces `overflow-x:hidden !important`
   on every div and `table-layout:fixed / overflow:hidden !important` on every
   table. That would break the §8.6(e) inner-scroll mechanism for wide cards.
   This sheet loads AFTER admin's styles, so these equal-importance overrides
   win by source order. Scoped strictly to .aedan-* — admin untouched. ── */
@media (max-width: 767px) {
  .aedan-scroll-x, .aedan-sched-scroll { overflow-x:auto !important; }
  table.aedan-table { table-layout:auto !important; min-width:100% !important; max-width:none !important; width:auto !important; overflow:visible !important; }
  .aedan-table thead, .aedan-table tbody, .aedan-table tr, .aedan-table th, .aedan-table td { max-width:none !important; overflow:visible !important; }
  /* the schedule grid keeps its intrinsic width and scrolls inside its wrapper */
  .aedan-sched-grid { min-width:376px !important; max-width:none !important; overflow:visible !important; }
}

/* ── Motion & responsive ── */
@media (prefers-reduced-motion:reduce){
  #aedanRoot *, #aedanRoot *::after, #aedanRoot *::before { animation-duration:.001s!important; animation-iteration-count:1!important; transition-duration:.05s!important; }
  /* charts draw in instantly — no scaleY/opacity ramp, no transition-delay */
  .aedan-chart-bar { transform:scaleY(1)!important; transition:none!important; }
  .aedan-chart-hbar { transform:scaleX(1)!important; transition:none!important; }
  .aedan-chart-line, .aedan-chart-area, .aedan-chart-dot, .aedan-donut-seg { opacity:1!important; transition:none!important; }
}
/* ≤380px: metrics fall to a single column so big numbers never clip */
@media (max-width:380px){
  .aedan-metrics { grid-template-columns:1fr; }
  .aedan-metric-v { font-size:18px; }
}
/* ≤560px: the panel takes the full width */
@media (max-width:560px){
  .aedan-panel { width:100vw; max-width:100vw; border-left:none; }
}
/* ≤400px: tighten chrome so cards keep maximum room and nothing clips */
@media (max-width:400px){
  .aedan-stream { padding:12px 11px 6px; gap:12px; }
  .aedan-head { padding:13px 12px 11px; }
  .aedan-hero { gap:11px; padding:12px 12px 10px; }
  .aedan-think { font-size:13px; }
  .aedan-composer { padding:11px 12px 12px; }
  .aedan-globe { width:76px; height:76px; }
}

/* ─── enterprise icon migration (emoji/Unicode glyphs → inline SVG) ───────────
   Sizing/alignment for the icon spans introduced when emoji were replaced with
   the monochrome SVG set. SVGs inherit currentColor so existing state colors
   (is-done/is-failed/etc.) keep working unchanged. */
.aedan-task-ic svg { width:14px; height:14px; display:block; margin:0 auto; }
.aedan-inline-ic { display:inline-flex; vertical-align:-2px; margin-right:5px; }
.aedan-inline-ic svg { width:14px; height:14px; }
.aedan-hash-ic { display:inline-flex; vertical-align:-1px; margin-right:2px; opacity:.85; }
.aedan-hash-ic svg { width:12px; height:12px; }
.aedan-approve-badge { display:inline-flex; align-items:center; gap:4px; }
.aedan-approve-badge-ic { display:inline-flex; }
.aedan-approve-badge-ic svg { width:13px; height:13px; }
.aedan-sess-x svg, .aedan-lightbox-x svg { width:14px; height:14px; }
.aedan-x svg { width:13px; height:13px; display:block; }
/* browser-notifications toggle row in the overflow menu */
.aedan-sess-notif { display:flex; align-items:center; gap:8px; }
.aedan-sess-notif-ic { display:inline-flex; flex:0 0 auto; color:var(--aedan-ink-faint); }
.aedan-sess-notif-ic svg { width:14px; height:14px; }
.aedan-sess-notif.is-on .aedan-sess-notif-ic { color:var(--aedan-live); }

/* ══════════════════════════════════════════════════════════════════════════
   CONNECTORS PANEL (aedan-cx-*) — the in-sidebar integrations overlay opened
   from the header plug button. Dark-glass re-style of admin.html's light cx card.
   Same z-band/backdrop as .aedan-lightbox (1250); full-width on narrow screens.
   ══════════════════════════════════════════════════════════════════════════ */
.aedan-cx-overlay { position:fixed; inset:0; z-index:1250; background:rgba(7,6,15,.8); backdrop-filter:blur(5px); -webkit-backdrop-filter:blur(5px); display:flex; align-items:center; justify-content:center; padding:26px; }
.aedan-cx-box { width:min(560px, 96vw); max-height:92vh; overflow:auto; background:var(--aedan-panel); border:1px solid var(--aedan-line-2); border-radius:16px; box-shadow:var(--aedan-shadow); padding:16px 18px 18px; display:flex; flex-direction:column; gap:12px; animation:aedan-pop .28s cubic-bezier(.2,.9,.3,1) both; }
.aedan-cx-head { display:flex; align-items:center; gap:10px; }
.aedan-cx-title { flex:1; min-width:0; display:flex; align-items:center; gap:9px; font-size:15px; font-weight:650; color:var(--aedan-ink); }
.aedan-cx-title svg { width:17px; height:17px; color:var(--aedan-violet); flex:0 0 auto; }
.aedan-cx-refresh { flex:0 0 auto; display:inline-flex; align-items:center; gap:6px; border:1px solid var(--aedan-line-2); border-radius:8px; background:transparent; color:var(--aedan-ink-mute); cursor:pointer; font-size:11.5px; font-weight:600; font-family:var(--aedan-sans); padding:6px 10px; transition:.16s; }
.aedan-cx-refresh:hover, .aedan-cx-refresh:focus-visible { color:var(--aedan-ink); border-color:var(--aedan-violet); background:var(--aedan-raise); }
.aedan-cx-refresh svg { width:13px; height:13px; }
.aedan-cx-x { flex:0 0 auto; width:30px; height:30px; border:1px solid var(--aedan-line-2); border-radius:8px; background:transparent; color:var(--aedan-ink-mute); cursor:pointer; display:grid; place-items:center; padding:0; transition:.16s; }
.aedan-cx-x:hover, .aedan-cx-x:focus-visible { color:var(--aedan-ink); border-color:var(--aedan-violet); background:var(--aedan-raise); }
.aedan-cx-x svg { width:13px; height:13px; display:block; }
.aedan-cx-lede { margin:0; font-size:12px; line-height:1.55; color:var(--aedan-ink-faint); }
.aedan-cx-body { display:block; }
.aedan-cx-loading { display:flex; align-items:center; gap:8px; font-size:12.5px; color:var(--aedan-ink-faint); padding:16px 2px; }
.aedan-cx-loading svg { width:14px; height:14px; animation:aedan-spin 1s linear infinite; }
@keyframes aedan-spin { to { transform:rotate(360deg); } }

.aedan-cx-grid { display:flex; flex-direction:column; gap:10px; }
.aedan-cx-tile { background:var(--aedan-panel-2); border:1px solid var(--aedan-line); border-radius:13px; padding:13px 14px; display:flex; flex-direction:column; gap:9px; }
.aedan-cx-tile.is-connected { border-color:rgba(52,211,153,.32); }
.aedan-cx-tile.is-error { border-color:rgba(251,191,36,.38); }
.aedan-cx-tile-head { display:flex; align-items:center; gap:10px; }
/* brand marks live on small LIGHT chips (like admin's ico_bg) so multicolor SVGs read on the dark tile */
.aedan-cx-ico { flex:0 0 auto; width:34px; height:34px; border-radius:9px; display:grid; place-items:center; border:1px solid rgba(255,255,255,.06); }
.aedan-cx-tile-id { min-width:0; flex:1; }
.aedan-cx-tile-name { font-size:13.5px; font-weight:650; color:var(--aedan-ink); }
.aedan-cx-chip { flex:0 0 auto; display:inline-flex; align-items:center; gap:5px; font-size:10.5px; font-weight:600; padding:3px 8px; border-radius:999px; border:1px solid var(--aedan-line-2); color:var(--aedan-ink-mute); }
.aedan-cx-dot { width:7px; height:7px; border-radius:50%; flex:0 0 auto; background:var(--aedan-ink-faint); }
.aedan-cx-chip.is-connected { color:var(--aedan-live); border-color:rgba(52,211,153,.4); background:rgba(52,211,153,.08); }
.aedan-cx-chip.is-connected .aedan-cx-dot { background:var(--aedan-live); box-shadow:0 0 6px var(--aedan-live-glow); }
.aedan-cx-chip.is-error { color:var(--aedan-gold); border-color:rgba(251,191,36,.4); background:rgba(251,191,36,.08); }
.aedan-cx-chip.is-error .aedan-cx-dot { background:var(--aedan-gold); }
.aedan-cx-chip.is-none .aedan-cx-dot { background:var(--aedan-ink-faint); }
.aedan-cx-what { font-size:12px; line-height:1.5; color:var(--aedan-ink-mute); }
.aedan-cx-wired { font-size:11.5px; line-height:1.5; color:var(--aedan-ink); background:var(--aedan-raise); border:1px solid var(--aedan-line); border-radius:8px; padding:7px 9px; overflow-wrap:anywhere; }
.aedan-cx-wired b { color:var(--aedan-ink); }
.aedan-cx-wired.is-warn { color:var(--aedan-gold); border-color:rgba(251,191,36,.35); background:rgba(251,191,36,.07); }
.aedan-cx-wired.is-info { color:var(--aedan-read); border-color:rgba(125,211,252,.3); background:rgba(125,211,252,.07); }

.aedan-cx-actions { display:flex; gap:7px; flex-wrap:wrap; }
.aedan-cx-btn { display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:600; font-family:var(--aedan-sans); border-radius:8px; padding:7px 12px; cursor:pointer; border:1px solid var(--aedan-line-2); background:transparent; color:var(--aedan-ink); transition:.16s; }
.aedan-cx-btn svg { width:13px; height:13px; }
.aedan-cx-btn.is-primary { background:linear-gradient(90deg,var(--aedan-violet-deep),var(--aedan-violet)); border-color:transparent; color:#0b0a17; }
.aedan-cx-btn.is-primary:hover { box-shadow:0 0 18px -4px var(--aedan-violet-glow); }
.aedan-cx-btn.is-ghost:hover { border-color:var(--aedan-violet); background:var(--aedan-raise); }
.aedan-cx-btn.is-danger { color:var(--aedan-danger); border-color:rgba(251,113,133,.4); }
.aedan-cx-btn.is-danger:hover { background:rgba(251,113,133,.1); border-color:var(--aedan-danger); }
.aedan-cx-btn:disabled { opacity:.55; cursor:default; }

.aedan-cx-form { display:flex; flex-direction:column; gap:8px; background:var(--aedan-raise); border:1px solid var(--aedan-line); border-radius:10px; padding:11px 12px; }
.aedan-cx-form label { font-size:11px; font-weight:600; color:var(--aedan-ink-mute); }
.aedan-cx-form input { width:100%; box-sizing:border-box; padding:9px 11px; border:1px solid var(--aedan-line-2); border-radius:8px; font-size:12.5px; font-family:var(--aedan-mono); background:var(--aedan-panel); color:var(--aedan-ink); }
.aedan-cx-form input:focus-visible { border-color:var(--aedan-violet); outline:none; }
.aedan-cx-form-row { display:flex; gap:7px; flex-wrap:wrap; }
.aedan-cx-center { justify-content:center; }

.aedan-cx-pairing { text-align:center; }
.aedan-cx-pair-lbl { font-size:10.5px; font-weight:700; letter-spacing:.6px; text-transform:uppercase; color:var(--aedan-ink-faint); }
.aedan-cx-pair-code { font-size:26px; font-weight:800; letter-spacing:6px; font-family:var(--aedan-mono); color:var(--aedan-ink); margin:6px 0 2px; user-select:all; }
.aedan-cx-pair-exp { font-size:11px; color:var(--aedan-ink-faint); margin-bottom:8px; }
.aedan-cx-pair-steps { text-align:left; font-size:12px; color:var(--aedan-ink-mute); margin:0 0 10px 18px; padding:0; line-height:1.5; }
.aedan-cx-pair-steps li { margin:3px 0; }
.aedan-cx-pair-link { font-size:12px; color:var(--aedan-violet); text-decoration:none; }
.aedan-cx-pair-link:hover { text-decoration:underline; }

.aedan-cx-dark { background:rgba(125,211,252,.06); border:1px solid rgba(125,211,252,.22); border-left:4px solid var(--aedan-read); border-radius:12px; padding:16px 18px; font-size:12.5px; color:var(--aedan-ink-mute); line-height:1.6; }
.aedan-cx-dark-h { display:flex; align-items:center; gap:8px; font-weight:700; font-size:13.5px; color:var(--aedan-read); margin-bottom:6px; }
.aedan-cx-dark-h svg { width:16px; height:16px; flex:0 0 auto; }

.aedan-cx-toast { position:fixed; left:50%; bottom:34px; transform:translateX(-50%); z-index:1260; max-width:min(440px, 92vw); background:var(--aedan-raise); border:1px solid var(--aedan-line-2); border-radius:12px; padding:11px 15px; font-size:12.5px; color:var(--aedan-ink); box-shadow:var(--aedan-shadow); animation:aedan-pop .3s ease both; overflow-wrap:anywhere; }
.aedan-cx-toast-success { border-color:rgba(52,211,153,.5); }
.aedan-cx-toast-error { border-color:rgba(251,113,133,.5); }
.aedan-cx-toast-warning { border-color:rgba(251,191,36,.5); }

@media (max-width:560px) {
  .aedan-cx-overlay { padding:0; align-items:stretch; justify-content:stretch; }
  .aedan-cx-box { width:100vw; max-height:100vh; border-radius:0; border:none; }
  .aedan-cx-actions .aedan-cx-btn { flex:1 1 auto; justify-content:center; }
}
@media (prefers-reduced-motion:reduce) {
  .aedan-cx-loading svg { animation:none; }
}
.aedan-sess-notif:disabled { opacity:.5; cursor:default; }
