/*
IC SHIP PASS — generated by icpass.py from the map. edit the CODE; rerun to refresh this.

══════════════════════════════════════════════════════════════════════
 PAGE 0 — TABLE OF CONTENTS  (goldfish pointers)
 jump by SEARCHING the anchor phrase — line numbers drift, names don't.
══════════════════════════════════════════════════════════════════════
  permission tier dial (oz-perm.js) ............. search: "permission tier dial"
  the green button + glow (above-tier gate) ..... search: "the green button + glow"
  the two persistent bar buttons that flank ..... search: "the two persistent bar"
  bot-bar buttons wear the egui arcade PNGs ..... search: "bot-bar buttons wear"
  clioz RUN RESULTS — collapsed ESP bars from ... search: "clioz RUN RESULTS"
══════════════════════════════════════════════════════════════════════

 FOR AI
 ───────
   **OWNS** — This file is the single source of truth for all visual styling of the clioz
   **CLI-tool panel (`.clioz-panel`), the permission tier dial (`.oz-perm-*`), the green bless
   **button (`.ab-bless`) and red stop button (`.card-stop`) that flank the jewels in the bot
   **bar, and the terminal-styled result output (`.cz-result`). It exports no names; it is pure
   **CSS that other files (oz-perm.js, bar-buttons.js, workspace.js, desk.css) depend on to
   **render correctly.
   
   **TOUCH HERE** —
   - Change permission tier dial colors or layout → `.oz-perm*` classes L27–41
   - Change the green "grant" button glow or pulse speed → `.cz-grant` and `@keyframes cz-pulse`
   - L43–46
   - Change the bless button (green, left of jewels) appearance when armed/dim → `.ab-bless*` and
   - `@keyframes ab-bless-pulse` L58–75
   - Change the stop button (red, right of jewels) appearance when armed/dim → `.card-stop*` and
   - `@keyframes ab-stop-pulse` L77–89
   - Change the bar button PNG images (green/red on/off states) → `url(bar/btn-*.png)` L96–100
   - Change clioz panel header, row, or output styling → `.clioz-panel`, `.cz-head`, `.cz-row`,
   - `.cz-out` L2–25
   - Change permission badge colors (read/write/sharp/denied) → `.cz-read`, `.cz-write`,
   - `.cz-sharp`, `.cz-denied` L7–10
   - Change result output terminal styling → `.cz-result .esp-head`, `.cz-result .esp-body`
   - L104–105
   
   **TRAPS** —
   - The `.ab-bless.armed` and `.card-stop.armed` classes are toggled by JavaScript
   - (workspace.js, bar-buttons.js); the CSS here only styles them. Renaming these classes will
   - break the toggle logic.
   - Line 95 hides the old SVG glyphs (`.ab-bless svg`, `.card-stop .stop-glyph`) when PNG
   - backgrounds are enabled. If you remove line 95, both the SVG and PNG will render, creating a
   - double image.
   - Lines 96–100 use `url(bar/btn-*.png)` paths; these files must exist or buttons will be
   - invisible. The paths are relative to the stylesheet location.
   - The animation speed `2.6s` appears in three places (L46, L51, L67) and `1.15s` in one (L85);
   - if you change one, consider whether the others should match for visual consistency.
   - Line 29 comment notes `.ab-esp` law — do not change padding/border/border-radius without
   - checking that file.
   - The `data-n` attribute on `.ab-bless` (L73) is set by JavaScript; the CSS only styles it.
   - Removing the `::after` rule will hide the badge count.
   
   **DO NOT** —
   - Do not edit the HTML structure or class names that JavaScript applies (`.armed`, `.open`,
   - `.cz-collapsed`, `data-n`); those live in oz-perm.js, bar-buttons.js, workspace.js, and
   - desk.css.
   - Do not move or rename the `@keyframes` rules; they are referenced by name in the animation
   - properties and will break if the names change.
   - Do not add layout or positioning logic for the permission dial menu or bless/stop buttons;
   - that belongs in the JavaScript files that create and position them.
   - Do not edit the color tokens (e.g., `var(--lav-deep)`, `var(--text)`) here; those are
   - defined in a theme/design-tokens file and should be changed there for consistency.
   
   
   
   
   
   ---

END IC SHIP PASS
*/

/* 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: var(--surface); border: 1px solid var(--line); border-radius: 999px; cursor: pointer; font-size: var(--fs-ui); line-height: 1; padding: 3px 7px; color: var(--text); display: inline-flex; align-items: center; }   /* the pill seat, white ink — same law as .ab-esp */
.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. */
