/* ============================================================================
   pbin design system  —  self-hosted, token-driven, light/dark
   Loaded AFTER Tailwind v2 so .pb-* component styles win for the app shell.
   Tailwind + Font Awesome remain for the existing editor/runtime JS.
   See docs/ui-makeover/PROPOSAL.md.
   ========================================================================== */

:root {
  --surface-0:#ffffff; --surface-1:#f6f7f9; --surface-2:#eceef1;
  --border:#e2e4e8; --text:#1b1f24; --text-muted:#6a737d;
  --accent:#4f46e5; --accent-hover:#4338ca; --accent-contrast:#ffffff;
  --danger:#dc2626; --danger-soft:rgba(220,38,38,.12);
  --success:#16a34a; --warning:#b45309;
  --shadow-sm:0 1px 2px rgba(16,24,40,.06), 0 1px 3px rgba(16,24,40,.10);
  --shadow-md:0 8px 24px rgba(16,24,40,.12);
  --radius:8px; --radius-sm:6px; --radius-pill:999px;
  --font-sans:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,Helvetica,Arial,sans-serif;
  --font-mono:ui-monospace,"JetBrains Mono",SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;
  --toolbar-h:52px;
  color-scheme:light;
}
[data-theme="dark"] {
  --surface-0:#121212; --surface-1:#1a1a1d; --surface-2:#232327;
  --border:#2c2c31; --text:#e6e6e6; --text-muted:#9aa0a6;
  --accent:#6366f1; --accent-hover:#7c7ef2; --accent-contrast:#ffffff;
  --danger:#ef4444; --danger-soft:rgba(239,68,68,.16);
  --success:#22c55e; --warning:#f59e0b;
  --shadow-sm:0 1px 2px rgba(0,0,0,.3), 0 2px 6px rgba(0,0,0,.4);
  --shadow-md:0 12px 32px rgba(0,0,0,.5);
  color-scheme:dark;
}

/* keep Tailwind's .hidden authoritative over .pb-* display (JS toggles it) */
.hidden { display:none !important; }

/* ---- shell ---- */
html, body { height:100%; }
body {
  margin:0; background:var(--surface-0); color:var(--text);
  font-family:var(--font-sans); -webkit-font-smoothing:antialiased;
}
.pb-app { display:flex; flex-direction:column; height:100vh; height:100dvh; overflow:hidden; }
@media (prefers-reduced-motion: reduce) { * { transition:none !important; animation-duration:.001ms !important; } }

/* ---- toolbar ---- */
.pb-toolbar {
  display:flex; align-items:center; gap:8px; flex-wrap:wrap;
  min-height:var(--toolbar-h); padding:7px 14px; flex:0 0 auto;
  background:var(--surface-1); border-bottom:1px solid var(--border);
}
.pb-brand { display:inline-flex; align-items:center; gap:8px; font-weight:700; color:var(--text); text-decoration:none; letter-spacing:.2px; }
.pb-brand .pb-logo {
  width:24px; height:24px; border-radius:6px; display:grid; place-items:center;
  background:linear-gradient(135deg,var(--accent),#9333ea); color:#fff; font-size:13px; font-weight:800;
}
.pb-nav { color:var(--text-muted); text-decoration:none; font-size:13px; font-weight:600; padding:6px 9px; border-radius:var(--radius-sm); }
.pb-nav:hover { color:var(--text); background:var(--surface-2); }
.pb-nav.is-active { color:var(--text); }
.pb-sep { width:1px; align-self:stretch; background:var(--border); margin:4px 4px; }
.pb-spacer { flex:1 1 auto; }
.pb-group { display:inline-flex; align-items:center; gap:8px; flex-wrap:wrap; }

/* language picker -> chip-styled native select */
.pb-lang {
  appearance:none; -webkit-appearance:none;
  height:34px; padding:0 28px 0 12px; border-radius:var(--radius-pill);
  background:var(--surface-2) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236a737d' stroke-width='2.5'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right 10px center;
  border:1px solid var(--border); color:var(--text);
  font-family:var(--font-mono); font-size:12.5px; font-weight:600; cursor:pointer;
}
.pb-lang:hover { border-color:var(--text-muted); }
.pb-label { font-size:12.5px; color:var(--text-muted); font-weight:600; }

/* ---- buttons: one primary, ghost everything else, danger only for stop ---- */
.pb-btn {
  display:inline-flex; align-items:center; gap:7px; height:34px; padding:0 13px;
  border:1px solid transparent; border-radius:var(--radius-sm); cursor:pointer;
  font-family:var(--font-sans); font-size:13px; font-weight:600; color:var(--text);
  background:transparent; white-space:nowrap; line-height:1;
  transition:background .12s, border-color .12s, filter .12s, color .12s;
}
.pb-btn i, .pb-btn svg { font-size:13px; width:15px; height:15px; }
.pb-btn:focus-visible, .pb-lang:focus-visible, .pb-iconbtn:focus-visible, .pb-nav:focus-visible {
  outline:2px solid var(--accent); outline-offset:2px;
}
.pb-btn--primary { background:var(--accent); color:var(--accent-contrast); box-shadow:var(--shadow-sm); }
.pb-btn--primary:hover { background:var(--accent-hover); }
.pb-btn--ghost { color:var(--text); }
.pb-btn--ghost:hover { background:var(--surface-2); }
.pb-btn--outline { border-color:var(--border); color:var(--text); }
.pb-btn--outline:hover { background:var(--surface-2); }
.pb-btn--danger { color:var(--danger); }
.pb-btn--danger:hover { background:var(--danger-soft); }
.pb-iconbtn {
  display:inline-flex; align-items:center; justify-content:center;
  width:34px; height:34px; padding:0; border:1px solid transparent; border-radius:var(--radius-sm);
  background:transparent; color:var(--text-muted); cursor:pointer; transition:background .12s, color .12s;
}
.pb-iconbtn:hover { background:var(--surface-2); color:var(--text); }
.pb-iconbtn--sm { width:28px; height:28px; }
.pb-kbd {
  font-family:var(--font-mono); font-size:10.5px; color:var(--text-muted);
  border:1px solid var(--border); border-bottom-width:2px; border-radius:4px;
  padding:1px 5px; background:var(--surface-0);
}
.pb-btn--primary .pb-kbd { color:#fff; background:rgba(255,255,255,.18); border-color:rgba(255,255,255,.35); }
.pb-check { display:inline-flex; align-items:center; gap:6px; font-size:12.5px; color:var(--text-muted); font-weight:600; cursor:pointer; }

/* ---- workspace / split panes ---- */
.pb-workspace { flex:1 1 auto; display:flex; min-height:0; min-width:0; }
.pb-pane { display:flex; flex-direction:column; min-width:0; min-height:0; background:var(--surface-0); }
.pb-pane--editor { flex:1 1 58%; }
.pb-pane--side { flex:1 1 42%; border-left:1px solid var(--border); }
.pb-pane.is-hidden { display:none; }
.pb-gutter { flex:0 0 6px; cursor:col-resize; background:var(--border); position:relative; transition:background .12s; }
.pb-gutter::after { content:""; position:absolute; inset:0 -4px; }
.pb-gutter:hover, .pb-gutter:focus-visible { background:var(--accent); outline:none; }
.pb-pane-head {
  display:flex; align-items:center; justify-content:space-between; gap:10px;
  min-height:38px; padding:4px 12px; flex:0 0 auto;
  background:var(--surface-1); border-bottom:1px solid var(--border);
}
.pb-pane-title { display:inline-flex; align-items:center; gap:8px; font-size:12px; font-weight:700; letter-spacing:.6px; text-transform:uppercase; color:var(--text-muted); }
.pb-pane-meta { font-size:11.5px; color:var(--text-muted); font-family:var(--font-mono); }
.pb-pane-body { flex:1 1 auto; min-height:0; min-width:0; position:relative; }
.pb-pane-body > #monacoContainer,
.pb-pane-body > #aiPromptContainer { width:100%; height:100%; }

/* status dot for output pane */
.pb-dot { width:8px; height:8px; border-radius:50%; background:var(--text-muted); display:inline-block; }
.pb-dot.is-run { background:var(--warning); animation:pb-pulse 1s infinite; }
.pb-dot.is-done { background:var(--success); }
.pb-dot.is-err { background:var(--danger); }
@keyframes pb-pulse { 0%,100%{opacity:1;} 50%{opacity:.35;} }

/* output area uses tokens; markdown view keeps its own light card */
#output { background:var(--surface-0); color:var(--text); font-family:var(--font-mono); font-size:13px; }
[data-theme="dark"] #output .text-gray-600,
[data-theme="dark"] #output .text-gray-500 { color:var(--text-muted) !important; }

/* ---- mobile tab bar ---- */
.pb-tabs { display:none; flex:0 0 auto; background:var(--surface-1); border-top:1px solid var(--border); }
.pb-tabs button {
  flex:1; height:48px; border:0; background:transparent; color:var(--text-muted);
  font-family:var(--font-sans); font-weight:700; font-size:13px; cursor:pointer;
}
.pb-tabs button[aria-selected="true"] { color:var(--accent); box-shadow:inset 0 2px 0 var(--accent); }

/* ---- toasts ---- */
.pb-toast {
  position:fixed; bottom:20px; left:50%; transform:translateX(-50%) translateY(16px);
  background:var(--text); color:var(--surface-0); padding:9px 16px; border-radius:var(--radius-pill);
  font-size:13px; font-weight:600; opacity:0; pointer-events:none; transition:.2s; z-index:60;
}
.pb-toast.is-show { opacity:1; transform:translateX(-50%) translateY(0); }

/* ---- responsive ---- */
@media (max-width:820px) {
  .pb-hide-sm { display:none !important; }
}
@media (max-width:768px) {
  .pb-workspace { flex-direction:column; }
  .pb-gutter { display:none; }
  .pb-pane { flex:1 1 auto !important; border-left:0 !important; }
  .pb-pane--side { display:none; }
  .pb-app.show-side .pb-pane--editor { display:none; }
  .pb-app.show-side .pb-pane--side { display:flex; }
  .pb-tabs { display:flex; }
  .pb-btn, .pb-iconbtn, .pb-lang { min-height:40px; }
}

/* ninja-keys palette themed to tokens */
ninja-keys {
  --ninja-overflow-background:rgba(0,0,0,.45);
  --ninja-width:560px;
  --ninja-backdrop-filter:none;
  --ninja-accent-color:var(--accent);
  --ninja-modal-background:var(--surface-1);
  --ninja-text-color:var(--text);
  --ninja-secondary-text-color:var(--text-muted);
  --ninja-secondary-background-color:var(--surface-2);
  --ninja-selected-background:var(--surface-2);
  --ninja-icon-color:var(--text-muted);
  --ninja-placeholder-color:var(--text-muted);
  --ninja-modal-shadow:var(--shadow-md);
}
