/* AETHER — Nexus interface */
:root{
  --accent:#8b6cff; --accent-2:#ff3d7f; --accent-rgb:139,108,255; --accent-2-rgb:255,61,127;
  --bg:#04040a; --panel:rgba(255,255,255,.028); --line:rgba(255,255,255,.08);
  --ink:#ececf6; --ink-2:#9fa0b6; --ink-3:#858799;
  --sans:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;
  --mono:ui-monospace,'SF Mono',Menlo,Consolas,monospace;
  --rail-l:286px; --rail-r:300px;
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:14px;
  -webkit-font-smoothing:antialiased;overflow:hidden;
}
body::after{
  content:'';position:fixed;inset:0;pointer-events:none;z-index:40;opacity:.3;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='.3'/%3E%3C/svg%3E");
}
button{font-family:inherit;cursor:pointer}
::-webkit-scrollbar{width:7px;height:7px}
::-webkit-scrollbar-thumb{background:rgba(255,255,255,.12);border-radius:4px}
::-webkit-scrollbar-track{background:transparent}

.app{display:grid;grid-template-rows:54px 1fr;height:100vh;height:100dvh}

/* ---------- top bar ---------- */
.top{
  display:flex;align-items:center;gap:16px;padding:0 16px;
  border-bottom:1px solid var(--line);background:rgba(255,255,255,.015);z-index:30;
}
.brand{display:flex;align-items:center;gap:9px;font-size:12px;letter-spacing:.17em;text-transform:uppercase;font-weight:600;color:var(--ink-2)}
.brand .dot{width:17px;height:17px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#fff,var(--accent) 45%,var(--accent-2) 80%,#120b22);box-shadow:0 0 12px rgba(var(--accent-rgb),.6)}
.back{color:var(--ink-3);font-size:12.5px;text-decoration:none;padding:6px 11px;border-radius:8px;border:1px solid transparent}
.back:hover{color:var(--ink);border-color:var(--line)}
.statepill{
  display:flex;align-items:center;gap:8px;padding:6px 14px;border-radius:999px;
  border:1px solid var(--line);background:var(--panel);font-size:12px;color:var(--ink-2);
  letter-spacing:.06em;text-transform:uppercase;font-weight:550;
}
.statepill .led{width:7px;height:7px;border-radius:50%;background:var(--ink-3);transition:.3s}
.statepill[data-state=listening] .led{background:#3ff0a4;box-shadow:0 0 10px #3ff0a4;animation:pulseLed 1s infinite}
.statepill[data-state=thinking]  .led{background:var(--accent);box-shadow:0 0 10px var(--accent);animation:pulseLed .5s infinite}
.statepill[data-state=speaking]  .led{background:var(--accent-2);box-shadow:0 0 10px var(--accent-2);animation:pulseLed .8s infinite}
@keyframes pulseLed{0%,100%{opacity:1}50%{opacity:.3}}
.top .spacer{margin-left:auto}
.swatches{display:flex;gap:6px;align-items:center}
.swatches button{
  width:19px;height:19px;border-radius:50%;border:1.5px solid rgba(255,255,255,.2);padding:0;
  transition:.2s;position:relative;
}
.swatches button:hover{transform:scale(1.16)}
.swatches button[aria-pressed=true]{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,.14)}
.iconbtn{
  display:grid;place-items:center;width:34px;height:34px;border-radius:9px;
  border:1px solid var(--line);background:var(--panel);color:var(--ink-2);font-size:14px;transition:.2s;
}
.iconbtn:hover{color:var(--ink);border-color:rgba(var(--accent-rgb),.5)}
.iconbtn[aria-pressed=true]{background:rgba(var(--accent-rgb),.18);border-color:rgba(var(--accent-rgb),.6);color:#fff}
.iconbtn[aria-current=page]{color:var(--accent);border-color:rgba(var(--accent-rgb),.55);background:rgba(var(--accent-rgb),.1)}
.layouts{display:flex;gap:5px;padding-left:10px;border-left:1px solid var(--line)}

/* ---------- body ---------- */
.body{display:grid;grid-template-columns:var(--rail-l) 1fr var(--rail-r);min-height:0}
.rail{border-right:1px solid var(--line);overflow-y:auto;padding:16px 14px;display:flex;flex-direction:column;gap:22px}
.rail.right{border-right:0;border-left:1px solid var(--line)}
.rail h2{
  font-size:10.5px;letter-spacing:.17em;text-transform:uppercase;color:var(--ink-3);
  margin:0 0 11px;font-weight:600;display:flex;align-items:center;justify-content:space-between;
}
.rail h2 span{color:var(--ink-3);font-family:var(--mono);font-size:10px}

.search{
  width:100%;padding:9px 12px;border-radius:9px;border:1px solid var(--line);
  background:rgba(255,255,255,.03);color:var(--ink);font-size:13px;font-family:inherit;outline:none;
}
.search:focus{border-color:rgba(var(--accent-rgb),.55);background:rgba(var(--accent-rgb),.06)}
.search::placeholder{color:var(--ink-3)}

.plist{display:flex;flex-direction:column;gap:3px}
.proj{
  display:flex;gap:10px;padding:9px 10px;border-radius:10px;cursor:pointer;
  border:1px solid transparent;transition:.16s;align-items:flex-start;
  width:100%;background:none;font:inherit;color:inherit;text-align:left;
}
.proj:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.proj:hover{background:rgba(255,255,255,.045)}
.proj[aria-current=true]{background:rgba(var(--accent-rgb),.12);border-color:rgba(var(--accent-rgb),.34)}
.proj .st{width:7px;height:7px;border-radius:50%;margin-top:6px;flex:0 0 auto;background:var(--ink-3)}
.proj .st.ok{background:#3ff0a4;box-shadow:0 0 7px rgba(63,240,164,.65)}
.proj .st.warn{background:#ffb340;box-shadow:0 0 7px rgba(255,179,64,.6)}
.proj .st.run{background:var(--accent);box-shadow:0 0 7px var(--accent);animation:pulseLed 1.3s infinite}
.proj b{display:block;font-weight:500;font-size:13.2px;line-height:1.35}
.proj small{display:block;color:var(--ink-3);font-size:11.5px;font-family:var(--mono);margin-top:2px}

.tree{font-family:var(--mono);font-size:12px;color:var(--ink-2);line-height:1.95}
.tree div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:default;border-radius:5px;padding-inline:4px}
.tree div:hover{background:rgba(255,255,255,.045);color:var(--ink)}
.tree .dir{color:var(--ink)}
.tree .mut{color:var(--ink-3)}

/* ---------- centre stage ---------- */
.stage{position:relative;display:flex;flex-direction:column;min-height:0;overflow:hidden}
.orbwrap{flex:1;position:relative;min-height:0;display:grid;place-items:center}
#orb{position:absolute;inset:0 0 78px 0;width:100%;height:calc(100% - 78px);cursor:grab}
#orb:active{cursor:grabbing}
.orb-caption{
  position:absolute;left:50%;bottom:16px;transform:translateX(-50%);text-align:center;
  pointer-events:none;width:min(560px,86%);
}
.orb-caption .said{
  font-size:14.5px;color:var(--ink-2);min-height:21px;transition:.25s;
  text-shadow:0 2px 20px #000;
}
.orb-caption .said.interim{color:var(--ink-3);font-style:italic}
.orb-caption .reply{
  font-size:16px;line-height:1.5;margin-top:8px;color:var(--ink);text-shadow:0 2px 24px #000;
  min-height:24px;
}

.feed{
  max-height:30vh;overflow-y:auto;padding:4px 26px 0;display:flex;flex-direction:column;gap:12px;
  mask-image:linear-gradient(180deg,transparent,#000 22px);
}
.msg{display:flex;gap:11px;font-size:13.5px;line-height:1.55;max-width:760px;margin-inline:auto;width:100%}
.msg .who{
  font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);
  flex:0 0 42px;padding-top:3px;font-weight:600;
}
.msg.ai .who{color:var(--accent)}
.msg p{margin:0;color:var(--ink-2)}
.msg.ai p{color:var(--ink)}

/* command bar */
.cmd{padding:14px 26px 20px;border-top:1px solid var(--line);background:rgba(255,255,255,.012)}
.cmd-in{
  display:flex;gap:9px;align-items:center;max-width:760px;margin:0 auto;
  border:1px solid var(--line);border-radius:14px;padding:7px 7px 7px 16px;
  background:rgba(255,255,255,.035);transition:.2s;
}
.cmd-in:focus-within{border-color:rgba(var(--accent-rgb),.6);box-shadow:0 0 0 3px rgba(var(--accent-rgb),.11)}
.cmd-in input{
  flex:1;background:none;border:0;outline:none;color:var(--ink);font-size:14.5px;font-family:inherit;padding:7px 0;
}
.cmd-in input::placeholder{color:var(--ink-3)}
.mic{
  width:38px;height:38px;border-radius:11px;border:1px solid var(--line);background:rgba(255,255,255,.05);
  color:var(--ink-2);display:grid;place-items:center;transition:.2s;font-size:15px;
}
.mic:hover{color:var(--ink);border-color:rgba(var(--accent-rgb),.6)}
.mic[aria-pressed=true]{background:linear-gradient(100deg,var(--accent),var(--accent-2));border-color:transparent;color:#fff;box-shadow:0 0 22px rgba(var(--accent-rgb),.5)}
.send{
  width:38px;height:38px;border-radius:11px;border:0;color:#fff;font-size:15px;display:grid;place-items:center;
  background:linear-gradient(100deg,var(--accent),var(--accent-2));transition:.2s;
}
.send:hover{filter:brightness(1.12)}
.chips{display:flex;gap:7px;flex-wrap:wrap;max-width:760px;margin:11px auto 0;justify-content:center}
.chip{
  padding:6px 13px;border-radius:999px;border:1px solid var(--line);background:rgba(255,255,255,.03);
  color:var(--ink-3);font-size:12.2px;transition:.18s;
}
.chip:hover{color:var(--ink);border-color:rgba(var(--accent-rgb),.5);background:rgba(var(--accent-rgb),.1)}

/* right rail */
.conn{display:flex;flex-direction:column;gap:2px}
.conn-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:9px;transition:.16s}
.conn-row:hover{background:rgba(255,255,255,.04)}
.conn-row .nm{flex:1;font-size:13px}
.conn-row .nm small{display:block;color:var(--ink-3);font-size:11px;font-family:var(--mono)}
.toggle{
  width:34px;height:19px;border-radius:999px;border:1px solid var(--line);background:rgba(255,255,255,.06);
  position:relative;padding:0;transition:.22s;flex:0 0 auto;
}
.toggle::after{content:'';position:absolute;top:2px;left:2px;width:13px;height:13px;border-radius:50%;background:var(--ink-3);transition:.22s}
.toggle[aria-pressed=true]{background:rgba(var(--accent-rgb),.32);border-color:rgba(var(--accent-rgb),.6)}
.toggle[aria-pressed=true]::after{transform:translateX(15px);background:#fff;box-shadow:0 0 9px rgba(var(--accent-rgb),.9)}

.act{display:flex;flex-direction:column;gap:11px}
.act-item{display:flex;gap:10px;font-size:12.4px;line-height:1.5}
.act-item .tm{color:var(--ink-3);font-family:var(--mono);font-size:11px;flex:0 0 42px;padding-top:1px}
.act-item .tx{color:var(--ink-2)}
.act-item .tx b{color:var(--ink);font-weight:500}

.meters{display:flex;flex-direction:column;gap:12px}
.meter .lab{display:flex;justify-content:space-between;font-size:11.5px;color:var(--ink-3);margin-bottom:5px;font-family:var(--mono)}
.meter .bar{height:4px;border-radius:3px;background:rgba(255,255,255,.08);overflow:hidden}
.meter .fill{height:100%;border-radius:3px;background:linear-gradient(90deg,var(--accent),var(--accent-2));transition:width .6s ease}

.note{font-size:11.5px;color:var(--ink-3);line-height:1.6;padding:11px 12px;border-radius:10px;border:1px dashed rgba(255,255,255,.14);background:rgba(255,255,255,.015)}

/* toast */
.toast{
  position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(14px);z-index:60;
  padding:11px 18px;border-radius:11px;background:rgba(20,20,30,.95);border:1px solid var(--line);
  font-size:13px;color:var(--ink-2);opacity:0;pointer-events:none;transition:.3s;backdrop-filter:blur(10px);
}
.toast.on{opacity:1;transform:translateX(-50%) translateY(0)}

.railtoggle{display:none}

@media(max-width:1080px){
  :root{--rail-l:244px;--rail-r:248px}
}
@media(max-width:860px){
  body{overflow:auto}
  /* the page scrolls, so the window height no longer squeezes the project list to a sliver */
  .app{grid-template-rows:auto auto;height:auto;min-height:100vh;min-height:100dvh}
  .top{flex-wrap:wrap;padding:10px 16px;row-gap:10px}
  .body{grid-template-columns:1fr}
  .rail{border:0;border-top:1px solid var(--line);max-height:none}
  .rail.right{border-left:0}
  .stage{min-height:76vh}
  .orbwrap{min-height:340px}
  .nav-only-wide{display:none}
}

/* people who ask their device for less motion: no CSS animation, no smooth scrolling */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
}
