/* correx.css — Correx TUI. Chrome modes driven by [data-chrome] on the root. */ * { box-sizing: border-box; margin: 0; padding: 0; } .crx { position: absolute; inset: 0; background: var(--bg); color: var(--fg); font-family: var(--font); font-size: 13px; line-height: var(--line); font-variant-ligatures: none; -webkit-font-smoothing: antialiased; display: grid; grid-template-rows: auto 1fr auto; overflow: hidden; user-select: none; } .crx ::selection { background: var(--accent); color: var(--bg-deep); } /* faint global texture for warmth (subtle, not slop) */ .crx::after { content: ""; position: absolute; inset: 0; pointer-events: none; background: radial-gradient(120% 90% at 50% -10%, rgb(var(--glow) / 0.05), transparent 60%); z-index: 0; } /* ───────────────────────── top status line ───────────────────────── */ .crx-top { position: relative; z-index: 2; display: flex; align-items: center; gap: 16px; padding: 8px 14px; background: var(--bg-deep); border-bottom: 1px solid var(--border); font-size: 12px; } .crx[data-chrome="soft"] .crx-top { background: var(--panel); border-bottom: none; } .crx[data-chrome="bare"] .crx-top { background: transparent; border-bottom: 1px solid var(--border); } .crx-brand { color: var(--accent); font-weight: 700; letter-spacing: 0.06em; } .crx-brand b { color: var(--fg-strong); } .crx-top .dot { color: var(--faint); } .crx-top .seg { color: var(--dim); white-space: nowrap; } .crx-top .seg b { color: var(--fg); font-weight: 500; } .crx-spacer { flex: 1; } .crx-state { padding: 1px 8px; border-radius: 999px; font-size: 11px; letter-spacing: 0.04em; color: var(--warn); border: 1px solid color-mix(in oklab, var(--warn), transparent 60%); background: color-mix(in oklab, var(--warn), transparent 88%); } .crx-budget { display: flex; align-items: center; gap: 7px; color: var(--dim); } .crx-meter { width: 84px; height: 6px; border-radius: 3px; background: var(--faint); overflow: hidden; } .crx-meter > i { display: block; height: 100%; background: var(--accent); } /* ───────────────────────── main grid ───────────────────────── */ .crx-main { position: relative; z-index: 1; display: grid; grid-template-columns: 1.7fr 1fr; gap: var(--gap); padding: var(--gap); min-height: 0; overflow: hidden; } /* ───────────────────────── panel chrome ───────────────────────── */ .panel { position: relative; display: flex; flex-direction: column; min-height: 0; background: var(--panel); border-radius: var(--radius); } .panel-h { display: flex; align-items: center; gap: 8px; padding: 5px 11px; flex: 0 0 auto; color: var(--dim); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; } .panel-h .pn { color: var(--faint); } .panel-h .pt { color: var(--fg); letter-spacing: 0.08em; } .panel-h .ph-r { margin-left: auto; text-transform: none; letter-spacing: 0; color: var(--faint); } .panel-b { flex: 1 1 auto; min-height: 0; overflow: auto; padding: 4px 11px 10px; } .panel-b::-webkit-scrollbar { width: 7px; } .panel-b::-webkit-scrollbar-thumb { background: var(--faint); border-radius: 4px; } .panel-b::-webkit-scrollbar-track { background: transparent; } /* boxed: full border, active = accent border, lazygit label tab */ .crx[data-chrome="boxed"] .panel { border: 1px solid var(--border); } .crx[data-chrome="boxed"] .panel.active { border-color: var(--accent); box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--accent), transparent 70%); } .crx[data-chrome="boxed"] .panel-h { border-bottom: 1px solid var(--border); background: var(--bg-deep); } .crx[data-chrome="boxed"] .panel.active .panel-h { color: var(--accent); } /* soft: rounded, padded, lighter panel, no hard header rule */ .crx[data-chrome="soft"] .panel { border: 1px solid var(--border); padding: var(--panel-pad); } .crx[data-chrome="soft"] .panel.active { border-color: color-mix(in oklab, var(--accent), transparent 35%); box-shadow: 0 0 0 1px color-mix(in oklab,var(--accent),transparent 55%), 0 6px 28px -18px rgb(var(--glow)/0.6); } .crx[data-chrome="soft"] .panel-h { padding: 8px 12px 4px; } .crx[data-chrome="soft"] .panel.active .panel-h .pt { color: var(--accent); } .crx[data-chrome="soft"] .panel-b { padding: 2px 12px 12px; } /* bare: no box; just a header with a thin bottom rule */ .crx[data-chrome="bare"] .panel { background: transparent; } .crx[data-chrome="bare"] .panel-h { border-bottom: 1px solid var(--border); padding-left: 2px; padding-right: 2px; } .crx[data-chrome="bare"] .panel.active .panel-h { color: var(--accent); } .crx[data-chrome="bare"] .panel.active .panel-h::before { content: "▌"; color: var(--accent); margin-right: -3px; } .crx[data-chrome="bare"] .panel-b { padding-left: 2px; padding-right: 6px; } /* ───────────────────────── conversation ───────────────────────── */ .msg { padding: 7px 0; display: grid; grid-template-columns: 64px 1fr; gap: 10px; align-items: start; } .msg + .msg { border-top: 1px solid color-mix(in oklab, var(--border), transparent 30%); } .crx[data-chrome="bare"] .msg + .msg { border-top: none; } .msg-gut { font-size: 11px; color: var(--faint); text-align: right; padding-top: 1px; } .msg-gut .who { display: block; font-weight: 600; letter-spacing: 0.02em; } .msg.user .who { color: var(--fg); } .msg.assistant .who { color: var(--accent); } .msg.kernel .who { color: var(--accent-2); } .msg-body { color: var(--fg); text-wrap: pretty; } .msg.kernel .msg-body { color: var(--dim); font-size: 12px; } .msg.kernel .msg-body::before { content: "» "; color: var(--accent-2); } .msg .cursor { display: inline-block; width: 7px; height: 1.05em; vertical-align: text-bottom; background: var(--accent); margin-left: 2px; animation: blink 1.05s steps(1) infinite; } @keyframes blink { 50% { opacity: 0; } } /* ───────────────────────── event stream ───────────────────────── */ .ev { display: grid; grid-template-columns: auto auto 1fr; gap: 8px; align-items: baseline; padding: 2.5px 0; font-size: 12px; cursor: pointer; border-radius: 4px; } .ev:hover { background: var(--sel); } .ev.sel { background: var(--sel); box-shadow: inset 2px 0 0 var(--accent); } .ev-t { color: var(--faint); font-size: 11px; } .ev-cat { font-size: 10px; letter-spacing: 0.03em; padding: 0 5px; border-radius: 3px; white-space: nowrap; } .ev-tx { color: var(--fg); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .ev-tx b { color: var(--dim); font-weight: 400; } .ev.pending .ev-tx { color: var(--warn); } .cat-Lifecycle { color: var(--accent-2); background: color-mix(in oklab,var(--accent-2),transparent 86%); } .cat-Context { color: #c98fd9; background: color-mix(in oklab,#c98fd9,transparent 86%); } .cat-Inference { color: var(--accent); background: color-mix(in oklab,var(--accent),transparent 86%); } .cat-Tool { color: var(--ok); background: color-mix(in oklab,var(--ok),transparent 86%); } .cat-Domain { color: #e8b765; background: color-mix(in oklab,#e8b765,transparent 86%); } .cat-Approval { color: var(--warn); background: color-mix(in oklab,var(--warn),transparent 84%); } .spin { display: inline-block; color: var(--accent); } /* ───────────────────────── footer keybind bar ───────────────────────── */ .crx-foot { position: relative; z-index: 2; display: flex; align-items: center; gap: 4px; flex-wrap: wrap; padding: 6px 12px; background: var(--bg-deep); border-top: 1px solid var(--border); font-size: 12px; } .crx[data-chrome="soft"] .crx-foot { background: var(--panel); border-top: none; } .kb { display: inline-flex; align-items: baseline; gap: 5px; padding: 1px 8px; border-radius: 5px; color: var(--dim); } .kb:hover { background: var(--sel); color: var(--fg); } .kb kbd { font: inherit; font-size: 11px; color: var(--bg-deep); background: var(--accent); padding: 0 5px; border-radius: 3px; font-weight: 600; min-width: 14px; text-align: center; } .crx[data-chrome="bare"] .kb kbd { background: transparent; color: var(--accent); padding: 0; } .crx[data-chrome="bare"] .kb kbd::before { content: "["; } .crx[data-chrome="bare"] .kb kbd::after { content: "]"; } .kb b { color: var(--fg); font-weight: 400; } .foot-mode { margin-left: auto; color: var(--faint); letter-spacing: 0.08em; } .foot-mode b { color: var(--accent); } /* ───────────────────────── overlays ───────────────────────── */ .scrim { position: absolute; inset: 0; z-index: 40; background: rgb(0 0 0 / 0.55); backdrop-filter: blur(1.5px); display: flex; align-items: flex-start; justify-content: center; padding: 7vh 16px 16px; } .scrim.center { align-items: center; padding-top: 16px; } .ovl { position: relative; width: min(760px, 94%); max-height: 82vh; display: flex; flex-direction: column; background: var(--panel); color: var(--fg); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: 0 24px 80px -28px #000, 0 0 0 1px color-mix(in oklab,var(--accent),transparent 80%); animation: pop 0.14s cubic-bezier(.2,.9,.3,1); } .crx[data-chrome="soft"] .ovl { border-radius: 14px; } @keyframes pop { from { transform: translateY(-8px) scale(0.99); } } .ovl-h { display: flex; align-items: center; gap: 10px; padding: 11px 15px; border-bottom: 1px solid var(--border); } .ovl-h .tag { color: var(--accent); font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; font-size: 11px; } .ovl-h .ti { color: var(--fg-strong); } .ovl-h .esc { margin-left: auto; color: var(--faint); font-size: 11px; } .ovl-b { padding: 13px 15px; overflow: auto; } .ovl-b::-webkit-scrollbar { width: 8px; } .ovl-b::-webkit-scrollbar-thumb { background: var(--faint); border-radius: 4px; } /* command palette */ .cmd-input { display: flex; align-items: center; gap: 9px; padding: 12px 15px; border-bottom: 1px solid var(--border); } .cmd-input .pr { color: var(--accent); font-weight: 700; } .cmd-input input { flex: 1; background: transparent; border: none; outline: none; color: var(--fg-strong); font: inherit; font-size: 14px; } .cmd-input input::placeholder { color: var(--faint); } .cmd-list { padding: 6px; overflow: auto; max-height: 50vh; } .cmd-it { display: flex; align-items: center; gap: 11px; padding: 8px 11px; border-radius: 7px; cursor: pointer; } .cmd-it.sel { background: var(--sel); } .cmd-it.sel .ci-l { color: var(--fg-strong); } .crx[data-chrome="boxed"] .cmd-it { border-radius: 0; } .crx[data-chrome="boxed"] .cmd-it.sel { box-shadow: inset 2px 0 0 var(--accent); } .ci-k { font-size: 11px; color: var(--bg-deep); background: var(--accent); padding: 1px 6px; border-radius: 3px; min-width: 22px; text-align: center; font-weight: 600; } .ci-l { flex: 1; color: var(--fg); } .ci-h { color: var(--dim); font-size: 11px; } /* approval modal */ .appr { width: min(620px, 94%); } .appr-tier { display: flex; align-items: center; gap: 12px; padding: 13px 16px; background: color-mix(in oklab,var(--warn),transparent 90%); border-bottom: 1px solid color-mix(in oklab,var(--warn),transparent 70%); } .appr-badge { font-size: 22px; font-weight: 800; color: var(--warn); letter-spacing: 0.04em; } .appr-tier .lab { color: var(--fg-strong); } .appr-tier .lab b { color: var(--warn); } .appr-tier .sub { color: var(--dim); font-size: 12px; } .appr-cmd { margin: 13px 0; padding: 11px 13px; background: var(--bg-deep); border-radius: 6px; border: 1px solid var(--border); color: var(--fg-strong); font-size: 13px; white-space: pre-wrap; word-break: break-all; } .appr-cmd .pr { color: var(--accent); } .kv { display: grid; grid-template-columns: 96px 1fr; gap: 4px 12px; font-size: 12.5px; margin: 9px 0; } .kv dt { color: var(--dim); } .kv dd { color: var(--fg); } .risk { color: var(--warn); font-size: 12.5px; padding: 1.5px 0; } .risk::before { content: "▲ "; font-size: 10px; } .steer { margin-top: 12px; display: flex; gap: 8px; align-items: center; } .steer input { flex: 1; background: var(--bg-deep); border: 1px solid var(--border); border-radius: 6px; padding: 8px 11px; color: var(--fg-strong); font: inherit; font-size: 12.5px; outline: none; } .steer input:focus { border-color: var(--accent); } .appr-acts { display: flex; gap: 8px; padding: 12px 16px; border-top: 1px solid var(--border); flex-wrap: wrap; } .btn { font: inherit; font-size: 12.5px; padding: 7px 14px; border-radius: 6px; border: 1px solid var(--border); background: var(--panel-2); color: var(--fg); cursor: pointer; display: inline-flex; gap: 7px; align-items: center; } .btn:hover { border-color: var(--accent); color: var(--fg-strong); } .btn kbd { font: inherit; font-size: 10px; color: var(--dim); } .btn.ok { background: color-mix(in oklab,var(--ok),transparent 84%); border-color: color-mix(in oklab,var(--ok),transparent 55%); color: var(--ok); } .btn.ok:hover { background: color-mix(in oklab,var(--ok),transparent 72%); } .btn.bad { color: var(--bad); border-color: color-mix(in oklab,var(--bad),transparent 60%); } .btn.ghost { background: transparent; } .btn .sp { margin-left: auto; } /* generic rows used in inspectors */ .row { display: grid; gap: 10px; align-items: baseline; padding: 6px 0; border-bottom: 1px solid color-mix(in oklab,var(--border),transparent 40%); } .row:last-child { border-bottom: none; } .mono-bar { height: 7px; border-radius: 3px; background: var(--faint); overflow: hidden; } .mono-bar > i { display: block; height: 100%; background: var(--accent); } .tag-tier { font-size: 10px; padding: 0 5px; border-radius: 3px; font-weight: 600; } .tier-T0,.tier-T1 { color: var(--ok); background: color-mix(in oklab,var(--ok),transparent 85%); } .tier-T2 { color: var(--accent-2); background: color-mix(in oklab,var(--accent-2),transparent 85%); } .tier-T3 { color: var(--warn); background: color-mix(in oklab,var(--warn),transparent 84%); } .tier-T4 { color: var(--bad); background: color-mix(in oklab,var(--bad),transparent 84%); } .pill { font-size: 11px; padding: 1px 8px; border-radius: 999px; border: 1px solid var(--border); color: var(--dim); } .pill.on { color: var(--ok); border-color: color-mix(in oklab,var(--ok),transparent 55%); } .pill.off { color: var(--faint); } .pill.live { color: var(--accent); border-color: color-mix(in oklab,var(--accent),transparent 50%); } /* ───────────────────────── router prompt bar ───────────────────────── */ .prompt { display: flex; align-items: center; gap: 9px; flex: 0 0 auto; padding: 8px 11px; border-top: 1px solid var(--border); } .crx[data-chrome="bare"] .prompt { padding-left: 2px; padding-right: 6px; } .crx[data-chrome="soft"] .prompt { margin: 2px; border-top: 1px solid var(--border); } .prompt .pr { color: var(--accent); font-weight: 700; } .prompt.foc { box-shadow: inset 0 1px 0 var(--accent); } .crx[data-chrome="soft"] .prompt.foc { box-shadow: inset 0 0 0 1px color-mix(in oklab,var(--accent),transparent 55%); border-radius: 8px; border-top-color: transparent; } .prompt input { flex: 1; background: transparent; border: none; outline: none; color: var(--fg-strong); font: inherit; font-size: 13px; } .prompt input::placeholder { color: var(--faint); } .prompt .ph { color: var(--faint); font-size: 11px; white-space: nowrap; } .prompt .ph kbd { font: inherit; font-size: 10px; color: var(--accent); } .hint-empty { color: var(--faint); font-size: 12px; padding: 14px 4px; text-align: center; } .kbd-inline { font-size: 11px; color: var(--bg-deep); background: var(--accent); padding: 0 5px; border-radius: 3px; font-weight: 600; } .crx[data-chrome="bare"] .kbd-inline { background: transparent; color: var(--accent); padding: 0; }