/* clioz.css — the CLI-tool panel (dry-run) the loop renders into a bot's stream */
.clioz-panel { margin: 8px 0; border: 1px solid var(--lav-deep, #4b3f8f); border-radius: 10px; background: var(--surface-2, #16151f); overflow: hidden; font-size: var(--fs-chrome, 12px); }
.cz-head { padding: 6px 10px; background: linear-gradient(90deg, var(--lav-deep, #4b3f8f), transparent 75%); color: var(--text, #eee); font-weight: 700; }
.cz-dry { opacity: .7; font-weight: 400; font-style: italic; }
.cz-row { display: grid; grid-template-columns: 62px 1fr auto; align-items: center; gap: 8px; padding: 7px 10px; border-top: 1px solid var(--line, #2a2836); }
.cz-badge { text-transform: uppercase; font-size: 13px; font-weight: 700; letter-spacing: .5px; text-align: center; padding: 2px 5px; border-radius: 5px; }
.cz-read .cz-badge   { background: #1f3a2a; color: #6ee7a8; }
.cz-write .cz-badge  { background: #3a331f; color: #e0c05a; }
.cz-sharp .cz-badge  { background: #3a2a1f; color: #e0925a; }
.cz-denied .cz-badge { background: #3a1f1f; color: #f08a8a; }
.cz-cmd { font-family: 'Courier New', monospace; color: var(--text, #eee); white-space: pre-wrap; word-break: break-all; }
.cz-run { background: var(--lav-deep, #4b3f8f); border: 0; color: #fff; border-radius: 6px; padding: 4px 10px; cursor: pointer; font-size: var(--fs-ui); }
.cz-run:hover { filter: brightness(1.15); } .cz-run:disabled { opacity: .5; cursor: default; }
.cz-wall { color: #f08a8a; font-weight: 700; font-size: var(--fs-ui); }
.cz-out { grid-column: 2 / 4; font-family: 'Courier New', monospace; color: var(--text-dim, #9a97a8); white-space: pre-wrap; font-size: var(--fs-ui); }
.cz-out:empty { display: none; }
.cz-foot { padding: 7px 10px; border-top: 1px solid var(--line, #2a2836); }
.cz-feed { background: none; border: 1px solid var(--lav-deep, #4b3f8f); color: var(--lav-bright, #b6a6ff); border-radius: 6px; padding: 4px 10px; cursor: pointer; font-size: var(--fs-ui); }

/* collapsible header (click to free the view) + capped scrollable output */
.cz-head { cursor: pointer; -webkit-user-select: none; user-select: none; }
.cz-caret { display: inline-block; transition: transform .12s ease; font-size: var(--fs-ui); }
.clioz-panel.cz-collapsed .cz-caret { transform: rotate(-90deg); }
.clioz-panel.cz-collapsed .cz-row, .clioz-panel.cz-collapsed .cz-foot { display: none; }
.cz-out { max-height: 200px; overflow: auto; }

/* ── permission tier dial (oz-perm.js) ── */
.oz-perm { position: relative; display: inline-flex; }
.oz-perm-btn { background: none; border: 0; cursor: pointer; font-size: var(--fs-ui); line-height: 1; padding: 2px 4px; }
.oz-perm-btn:hover { filter: brightness(1.2); }
.oz-perm-menu { position: absolute; top: 100%; left: 0; z-index: 50; min-width: 230px; background: var(--surface, #16151f); border: 1px solid var(--lav-deep, #4b3f8f); border-radius: 8px; box-shadow: 0 8px 24px rgba(0,0,0,.5); padding: 4px; display: none; }
.oz-perm.open .oz-perm-menu { display: block; }
.oz-perm-opt { padding: 5px 8px; border-radius: 6px; cursor: pointer; font-size: var(--fs-ui); color: var(--text, #eee); white-space: nowrap; }
.oz-perm-opt:hover { background: var(--surface-2, #222); }
.oz-perm-opt.on { background: var(--lav-deep, #4b3f8f); color: #fff; }
/* rendered PNG tier icons (Sum 2026-07-09) — was emoji */
.oz-perm-opt { display: flex; align-items: center; gap: 8px; }
.oz-perm-ico { flex-shrink: 0; display: inline-flex; align-items: center; }
.oz-perm-ico svg { width: 18px; height: 18px; display: block; }
.oz-perm-btn { padding: 2px 4px; }
.oz-perm-btn .oz-perm-ico svg { width: 22px; height: 22px; }

/* ── the green button + glow (above-tier gate) ── */
.cz-grant { background: #1c7a3a; border: 1px solid #2fae5a; color: #eaffea; border-radius: 7px; padding: 5px 12px; font-size: var(--fs-ui); font-weight: 700; cursor: pointer; animation: cz-pulse 2.6s ease-in-out infinite; }
.cz-grant:hover { background: #23994a; }
@keyframes cz-pulse { 0%,100% { box-shadow: 0 0 0 0 rgba(47,174,90,.55); } 50% { box-shadow: 0 0 12px 3px rgba(47,174,90,.85); } }
/* (Sum 2026-07-09) the RED button blinks to DENY while a green ask waits (solid when it's the run's halt) */
.card-stop.deny-armed { color: #ff5a5a !important; animation: deny-pulse 2.6s ease-in-out infinite; }
@keyframes deny-pulse { 0%,100% { box-shadow: 0 0 0 0 rgba(255,65,54,.5); } 50% { box-shadow: 0 0 11px 3px rgba(255,65,54,.9); } }
.cz-auto { color: var(--text-dim, #9a97a8); font-size: var(--fs-ui); }
.cz-glowlbl { color: #6ee7a8; font-weight: 700; animation: cz-pulse 2.6s ease-in-out infinite; padding: 0 4px; border-radius: 4px; }
.cz-head.cz-glow { box-shadow: inset 0 0 0 1px #2fae5a; }
.cz-row.cz-wants { background: rgba(47,174,90,.08); }

/* ══ the two persistent bar buttons that flank the jewels (bar-buttons.js + mkStop) ══
   green = bless (LEFT of jewels) · red stop = halt (RIGHT). both DIM until they need you. */

/* 🟢 the green BLESS button — always present, dim; glows + blinks ONLY when the bot is waiting on you */
.ab-bless { position: relative; flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; box-sizing: border-box;
  min-width: var(--run-btn-w); width: var(--run-btn-w); height: var(--run-btn-h); padding: 0; border: none; border-radius: 7px;   /* (Sum 2026-07-11) green matches the red stop + card greens — one --run-btn token; NO 1px border (it shrank the dome ~2px under border-box → bots read smaller) */
  background: transparent; color: var(--text-dim, #6b6878); cursor: pointer; opacity: .34;
  transition: opacity .18s ease, color .18s ease, background .18s ease, box-shadow .18s ease; }
.ab-bless svg { display: block; }
.ab-bless:hover { opacity: .72; color: #6ee7a8; }
/* ARMED — a run wants your OK: full green, glow, blink. "press green when it glows." */
.ab-bless.armed { opacity: 1; color: #8dffb4; border-color: #2fae5a; background: rgba(47,174,90,.14);
  animation: ab-bless-pulse 2.6s ease-in-out infinite; }
.ab-bless.armed:hover { background: rgba(47,174,90,.24); color: #b6ffcf; }
@keyframes ab-bless-pulse {
  0%,100% { box-shadow: 0 0 0 0 rgba(47,174,90,.5); }
  50%     { box-shadow: 0 0 12px 3px rgba(47,174,90,.9); } }
/* a little count badge when more than one ask is stacked up */
.ab-bless[data-n]:not([data-n=""])::after { content: attr(data-n); position: absolute; top: -4px; right: -3px;
  min-width: 14px; height: 14px; padding: 0 3px; border-radius: 7px; background: #2fae5a; color: #04220f;
  font-size: 13px; font-weight: 800; line-height: 14px; text-align: center; }

/* 🔴 the STOP glow-up — dark at full stop, glows red ONLY while a run is live (.armed).
   at rest desk.css's :disabled styling dims it; .armed lights it. clioz.css loads last so these win. */
.card-stop { transition: background .18s ease, color .18s ease, box-shadow .18s ease; }
.card-stop .stop-glyph { display: block; }
.card-stop:not(.armed) { background: var(--stop-dis-bg, #2a2833); color: var(--stop-dis-text, #6b6878);
  box-shadow: 0 3px 0 var(--stop-dis-shadow, #1a1922); }
.card-stop.armed { background: var(--inj-red, #d64545); color: #fff;
  box-shadow: 0 3px 0 var(--stop-shadow, #8f2020), 0 0 12px 2px rgba(214,69,69,.7);
  animation: ab-stop-pulse 1.15s ease-in-out infinite; }
.card-stop.armed:hover { background: var(--stop-hover, #e05555); }
@keyframes ab-stop-pulse {
  0%,100% { box-shadow: 0 3px 0 var(--stop-shadow, #8f2020), 0 0 7px 1px rgba(214,69,69,.5); }
  50%     { box-shadow: 0 3px 0 var(--stop-shadow, #8f2020), 0 0 16px 4px rgba(214,69,69,.95); } }

/* ── bot-bar buttons wear the egui arcade PNGs (stolen from the egui oz app, 2026-07-09): ──
   green run/bless + red stop, each lit (armed) / dim (rest). the .armed toggles are unchanged
   (workspace.js · bar-buttons.js) — only the look swaps here. clioz.css loads last, so these win.
   the round PNG carries its own body → hide the old glyph, drop the CSS box; keep the .armed glow. */
.ab-bless svg, .card-stop .stop-glyph { display: none; }
.ab-bless        { background: transparent url(bar/btn-green-off.png) center/contain no-repeat; opacity: 1; border: none; box-shadow: none; }
.ab-bless.armed  { background: transparent url(bar/btn-green-on.png)  center/contain no-repeat; }
.card-stop             { border: none; }
.card-stop:not(.armed) { background: transparent url(bar/btn-red-off.png) center/contain no-repeat; box-shadow: none; }   /* :not(.armed) matches the dark-at-rest rule's specificity so the PNG wins */
.card-stop.armed       { background: transparent url(bar/btn-red-on.png)  center/contain no-repeat; box-shadow: none; }

/* ── clioz RUN RESULTS — collapsed ESP bars from the headless loop (no more inline panel). they reuse the
   injection/fold .esp-bar chrome (🧠 toggles them); a faint terminal tint so they read as command output. ── */
.cz-result .esp-head { color: #7CFC9A; font-family: 'Courier New', monospace; }
.cz-result .esp-body { border-left: 2px solid var(--lav-deep, #4b3f8f); color: var(--text-dim, #9a97a8); }
/* the old .clioz-panel styles above are now dead (the panel is gone) — harmless, cleaned in a later ship pass. */
