/* ============================================================================
 * Telegram Mini App — terminal/brutalist redesign.
 *
 * tg.js writes --tg-* vars from window.Telegram.WebApp.themeParams at runtime.
 * The fallbacks below are dark-by-default to match how Anton actually opens
 * the app (Telegram dark theme); [data-tg-scheme="light"] overrides at the
 * bottom of this file flip the surface tokens for light-theme users without
 * recolouring the semantic palette.
 * ============================================================================ */

:root {
  /* --tg-* fallbacks; tg.js overrides at runtime */
  --tg-bg-color:               #0a0a0c;
  --tg-secondary-bg-color:     #14141a;
  --tg-text-color:             #f3f3f5;
  --tg-hint-color:             #8b8b94;
  --tg-link-color:             #2f80ed;
  --tg-button-color:           #2f80ed;
  --tg-button-text-color:      #ffffff;
  --tg-destructive-text-color: #ef4444;

  --c-font-mono: ui-monospace, "SF Mono", Menlo, "Cascadia Code", Consolas, monospace;
  --c-font-ui:   -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;

  --c-bg:        var(--tg-bg-color);
  --c-panel:     var(--tg-secondary-bg-color);
  --c-text:      var(--tg-text-color);
  --c-text-2:    var(--tg-hint-color);
  --c-text-3:    color-mix(in srgb, var(--c-text-2) 60%, transparent);
  --c-line:      color-mix(in srgb, var(--c-text) 14%, transparent);
  --c-line-soft: color-mix(in srgb, var(--c-text) 7%,  transparent);

  --c-accent:    var(--tg-button-color);
  --c-green:     #22c55e;
  --c-amber:     #f59e0b;
  --c-red:       #ef4444;
  --c-purple:    #8b5cf6;
}

* { box-sizing: border-box; }

/* Custom elements default to display:inline. agents-list overrides to flex
 * below; the rest just need to behave as block-level boxes. */
agent-card,
event-stream,
model-picker,
run-detail,
run-launcher,
run-history,
schedule-editor { display: block; }

html, body {
  margin: 0;
  padding: 0;
  background: var(--c-bg);
  color: var(--c-text);
  font-family: var(--c-font-ui);
  font-size: 14px;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}

main {
  padding: 12px;
  max-width: 720px;
  margin: 0 auto;
}

a    { color: var(--c-accent); }
.muted, .loading { color: var(--c-text-2); }
.error {
  color: var(--c-red);
  padding: 10px 12px;
  border: 1px solid var(--c-red);
  border-radius: 6px;
  background: var(--c-panel);
  font-size: 13px;
}

/* mono helpers used throughout */
code, .mono { font-family: var(--c-font-mono); }

/* ----------------------------------------------------------------------------
 * App header
 * --------------------------------------------------------------------------- */
.app-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  padding: 4px 6px 14px;
  font-family: var(--c-font-mono);
}
.app-header h1 {
  margin: 0;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--c-text);
}
.app-header .app-counter {
  font-size: 11px;
  color: var(--c-text-3);
  font-variant-numeric: tabular-nums;
}

/* ----------------------------------------------------------------------------
 * Agents list
 * --------------------------------------------------------------------------- */
agents-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

/* ----------------------------------------------------------------------------
 * Agent card — bordered block
 * --------------------------------------------------------------------------- */
.card {
  background: var(--c-panel);
  border: 1px solid var(--c-line);
  border-radius: 6px;
  padding: 0;
  font-family: var(--c-font-mono);
  font-size: 12.5px;
  line-height: 1.5;
  outline: none;
}
.card:focus-visible {
  border-color: var(--c-accent);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--c-accent) 28%, transparent);
}

.card-head {
  display: grid;
  grid-template-columns: 16px 1fr auto;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  border-bottom: 1px dashed var(--c-line-soft);
}
.card-indicator {
  font-size: 13px;
  line-height: 1;
  color: var(--c-green);
  text-shadow: 0 0 6px color-mix(in srgb, var(--c-green) 35%, transparent);
}
.card-indicator.off {
  color: var(--c-text-3);
  text-shadow: none;
}
.card-name {
  margin: 0;
  font-family: var(--c-font-mono);
  font-size: 13px;
  font-weight: 600;
  color: var(--c-text);
  letter-spacing: -0.005em;
  word-break: break-word;
}
.card-role {
  display: block;
  margin-top: 1px;
  font-size: 11px;
  color: var(--c-text-3);
  font-weight: 400;
}
.card-status-word {
  font-size: 10.5px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--c-text-3);
  font-weight: 600;
}
.card-status-word.running { color: var(--c-green); }
.card-status-word.idle    { color: var(--c-text-2); }
.card-status-word.paused  { color: var(--c-text-3); }
.card-status-word.crashed { color: var(--c-red); }

.card-detail {
  padding: 8px 12px 10px;
  border-bottom: 1px dashed var(--c-line-soft);
  font-size: 11.5px;
  color: var(--c-text-2);
}
.card-detail-row {
  display: grid;
  grid-template-columns: 60px 1fr;
  gap: 8px;
  padding: 2px 0;
}
.card-detail-row .k { color: var(--c-text-3); }
.card-detail-row .v {
  color: var(--c-text);
  word-break: break-word;
  font-variant-numeric: tabular-nums;
}
.card-detail-row .v code {
  background: transparent;
  padding: 0;
  color: var(--c-text);
  font-size: 11.5px;
}
.card-detail-row .v.summary {
  color: var(--c-text-2);
  font-variant-numeric: normal;
}
.card-detail-row .v.last .ok    { color: var(--c-green); }
.card-detail-row .v.last .fail  { color: var(--c-red); }
.card-detail-row .v.last .never { color: var(--c-text-3); font-style: italic; }

/* ----------------------------------------------------------------------------
 * Card / detail / schedule actions — keyboard-letter button row
 * --------------------------------------------------------------------------- */
.card-actions,
.detail-actions,
.schedule-actions,
.history-actions,
.launcher-actions {
  display: flex;
  margin: 0;
  padding: 0;
}
.card-actions button,
.detail-actions button,
.schedule-actions button,
.history-actions button,
.launcher-actions button {
  flex: 1;
  background: transparent;
  color: var(--c-text);
  border: 0;
  border-right: 1px dashed var(--c-line-soft);
  padding: 11px 4px;
  font: inherit;
  font-family: var(--c-font-mono);
  font-size: 12px;
  text-transform: lowercase;
  letter-spacing: 0.03em;
  cursor: pointer;
  line-height: 1;
}
.card-actions button:last-child,
.detail-actions button:last-child,
.schedule-actions button:last-child,
.history-actions button:last-child,
.launcher-actions button:last-child {
  border-right: 0;
}
.card-actions button:hover,
.detail-actions button:hover,
.schedule-actions button:hover,
.history-actions button:hover,
.launcher-actions button:hover {
  background: color-mix(in srgb, var(--c-accent) 9%, transparent);
}
.card-actions button:focus-visible,
.detail-actions button:focus-visible,
.schedule-actions button:focus-visible,
.history-actions button:focus-visible,
.launcher-actions button:focus-visible {
  outline: 1px solid var(--c-accent);
  outline-offset: -2px;
}
.card-actions .primary,
.detail-actions .primary,
.schedule-actions .primary,
.launcher-actions .primary {
  background: color-mix(in srgb, var(--c-green) 9%, transparent);
  color: var(--c-green);
}
.card-actions .primary:hover,
.detail-actions .primary:hover,
.schedule-actions .primary:hover,
.launcher-actions .primary:hover {
  background: color-mix(in srgb, var(--c-green) 16%, transparent);
}
button[disabled] {
  opacity: 0.4;
  cursor: not-allowed;
}
.key {
  color: var(--c-accent);
  margin-right: 4px;
  font-weight: 500;
}

/* legacy class compat: pre-redesign agent-card emitted .card-detail (button)
 * for "Open last run". The new agent-card uses .open-last instead, but we
 * keep .card-detail neutralised so any cached service-worker shell that still
 * reaches for the selector doesn't accidentally win the cascade. */
.card-actions .card-detail[hidden] { display: none; }

/* ----------------------------------------------------------------------------
 * Dialogs (run-launcher / run-detail / schedule-editor / run-history)
 * --------------------------------------------------------------------------- */
dialog.launcher-dialog,
dialog.detail-dialog,
dialog.schedule-dialog,
dialog.history-dialog {
  background: var(--c-panel);
  color: var(--c-text);
  border: 1px solid var(--c-line);
  border-radius: 6px;
  padding: 0;
  max-width: min(640px, 94vw);
  width: 100%;
  box-shadow: 0 30px 60px -20px rgba(0, 0, 0, 0.55);
  font-family: var(--c-font-mono);
}
dialog::backdrop {
  background: rgba(0, 0, 0, 0.55);
  backdrop-filter: blur(2px);
}
dialog header {
  padding: 12px 14px 10px;
  border-bottom: 1px dashed var(--c-line-soft);
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 12px;
}
dialog header h2 {
  margin: 0;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.02em;
  word-break: break-word;
  overflow-wrap: anywhere;
  line-height: 1.3;
}
dialog .dialog-meta {
  font-size: 11px;
  color: var(--c-text-3);
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

/* ----------------------------------------------------------------------------
 * Run detail — body
 * --------------------------------------------------------------------------- */
.detail-summary {
  padding: 10px 14px 8px;
  border-bottom: 1px dashed var(--c-line-soft);
}
.detail-status {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  font-weight: 600;
  margin: 0 0 8px;
}
.detail-status.completed { color: var(--c-green); }
.detail-status.running   { color: var(--c-amber); }
.detail-status.crashed   { color: var(--c-red); }
.detail-status.pending   { color: var(--c-text-2); }
.detail-status .exit-code {
  margin-left: 6px;
  color: var(--c-text-3);
  font-weight: 400;
}

.run-summary-banner {
  margin: 0 0 10px;
  padding: 8px 10px;
  background: color-mix(in srgb, var(--c-purple) 8%, transparent);
  border-left: 2px solid var(--c-purple);
  border-radius: 0 4px 4px 0;
  font-size: 12px;
  color: var(--c-text);
  line-height: 1.45;
}

.detail-fields {
  display: grid;
  grid-template-columns: 80px 1fr;
  gap: 4px 12px;
  margin: 0;
  font-size: 11.5px;
  font-variant-numeric: tabular-nums;
}
.detail-fields dt {
  color: var(--c-text-3);
  margin: 0;
}
.detail-fields dd {
  margin: 0;
  color: var(--c-text);
  word-break: break-word;
  overflow-wrap: anywhere;
}

/* context gauge (#418) — restyled to fit the terminal aesthetic */
.ctx-gauge {
  position: relative;
  height: 16px;
  margin: 0 0 10px;
  border: 1px solid var(--c-line-soft);
  border-radius: 3px;
  background: color-mix(in srgb, var(--c-text) 4%, transparent);
  overflow: hidden;
  font-family: var(--c-font-mono);
  font-size: 10.5px;
}
.ctx-gauge-bar {
  position: absolute;
  inset: 0 auto 0 0;
  background: color-mix(in srgb, var(--c-green) 30%, transparent);
  transition: width 240ms ease-out, background-color 200ms ease-out;
}
.ctx-gauge.ctx-gauge-warn .ctx-gauge-bar     { background: color-mix(in srgb, var(--c-amber) 38%, transparent); }
.ctx-gauge.ctx-gauge-critical .ctx-gauge-bar { background: color-mix(in srgb, var(--c-red)   42%, transparent); }
.ctx-gauge-label {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--c-text);
  pointer-events: none;
  letter-spacing: 0.03em;
}

/* ----------------------------------------------------------------------------
 * Event stream
 * --------------------------------------------------------------------------- */
.detail-events {
  padding: 10px 14px;
  border-bottom: 1px dashed var(--c-line-soft);
}
.detail-events h3 {
  margin: 0 0 6px;
  font-size: 10.5px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--c-text-3);
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.event-stream-status {
  margin: 0 0 4px;
  font-size: 10.5px;
  color: var(--c-text-3);
  font-family: var(--c-font-mono);
}
.event-stream-status.running   { color: var(--c-amber); }
.event-stream-status.done      { color: var(--c-green); }
.event-stream-status.disconnected,
.event-stream-status.error     { color: var(--c-red); }

.event-stream-list {
  list-style: none;
  margin: 0;
  padding: 6px 8px;
  max-height: 320px;
  overflow-y: auto;
  background: color-mix(in srgb, var(--c-text) 3%, transparent);
  border: 1px solid var(--c-line-soft);
  border-radius: 4px;
  font-family: var(--c-font-mono);
  font-size: 10.5px;
  line-height: 1.5;
}

/* three-column row: time · kind · body */
.event {
  display: grid;
  grid-template-columns: 56px 78px 1fr;
  column-gap: 8px;
  align-items: baseline;
  padding: 1px 0;
  border-bottom: 0;
}
.event-ts   { color: var(--c-text-3); font-variant-numeric: tabular-nums; }
.event-type { color: var(--c-text-2); font-weight: 600; }
.event-summary {
  color: var(--c-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
}

/* kind colouring */
.event-PreToolUse  .event-type { color: var(--c-amber);  }
.event-PostToolUse .event-type { color: var(--c-green);  }
.event-Stop        .event-type,
.event-SessionEnd  .event-type { color: var(--c-purple); }
.event-run_completed .event-type,
.event-run_finished  .event-type { color: var(--c-green);  }
.event-run_crashed .event-type { color: var(--c-red);    }
.event-milestone {
  background: color-mix(in srgb, var(--c-purple) 8%, transparent);
  border-left: 2px solid var(--c-purple);
  padding-left: 6px;
}
.event-milestone .event-type    { color: var(--c-purple); }
.event-milestone .event-summary { font-weight: 500; }

/* ----------------------------------------------------------------------------
 * Run launcher
 * --------------------------------------------------------------------------- */
.launcher-form,
.schedule-form {
  display: flex;
  flex-direction: column;
}
.launcher-form > *:not(.launcher-actions),
.schedule-form > *:not(.schedule-actions):not(header) {
  padding: 10px 14px;
  border-bottom: 1px dashed var(--c-line-soft);
}
.launcher-form label,
.schedule-form label,
.model-picker {
  display: flex;
  flex-direction: column;
  gap: 6px;
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--c-text-3);
}
.launcher-prompt,
.schedule-input,
.model-picker-select {
  background: color-mix(in srgb, var(--c-text) 3%, transparent);
  color: var(--c-text);
  border: 1px solid var(--c-line-soft);
  border-radius: 4px;
  padding: 8px 10px;
  font: inherit;
  font-family: var(--c-font-mono);
  font-size: 12px;
  width: 100%;
  resize: vertical;
}
.launcher-prompt:focus,
.schedule-input:focus,
.model-picker-select:focus {
  outline: none;
  border-color: var(--c-accent);
}
.launcher-prompt {
  min-height: 88px;
  text-transform: none;
  letter-spacing: 0;
}
.launcher-error,
.schedule-error {
  margin: 0;
  padding: 8px 14px;
  font-size: 11.5px;
  color: var(--c-red);
  border-bottom: 1px dashed var(--c-line-soft);
}

/* ----------------------------------------------------------------------------
 * Schedule editor
 * --------------------------------------------------------------------------- */
.schedule-toggle {
  flex-direction: row !important;
  align-items: center;
  gap: 8px;
  text-transform: none !important;
  letter-spacing: 0 !important;
  font-size: 12px !important;
  color: var(--c-text) !important;
}
.schedule-toggle .toggle-box {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 16px;
  height: 16px;
  border: 1px solid var(--c-accent);
  border-radius: 3px;
  font-family: var(--c-font-mono);
  font-size: 11px;
  font-weight: 700;
  color: white;
  background: var(--c-accent);
  line-height: 1;
  transition: background 120ms ease, color 120ms ease;
}
/* keep the checkbox in the a11y tree while hiding it visually */
.schedule-toggle .schedule-enabled {
  position: absolute;
  width: 1px; height: 1px;
  margin: -1px; padding: 0; border: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
}
.schedule-toggle .schedule-enabled:not(:checked) ~ .toggle-box {
  background: transparent;
  color: transparent;
}
.schedule-toggle .schedule-enabled:focus-visible ~ .toggle-box {
  outline: 1px solid var(--c-accent);
  outline-offset: 1px;
}

.schedule-section-label {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin: 0 0 6px;
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--c-text-3);
  font-weight: 600;
}
.schedule-section-label .hint {
  text-transform: none;
  letter-spacing: 0;
  font-weight: 400;
  color: var(--c-text-3);
  font-size: 10px;
}

.schedule-chips {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 6px;
}
.schedule-chip {
  background: color-mix(in srgb, var(--c-text) 3%, transparent);
  color: var(--c-text);
  border: 1px solid var(--c-line-soft);
  padding: 8px 4px;
  border-radius: 4px;
  cursor: pointer;
  font: inherit;
  font-family: var(--c-font-mono);
  font-size: 11.5px;
  line-height: 1.2;
  text-align: center;
  display: flex;
  flex-direction: column;
  gap: 1px;
}
.schedule-chip .freq {
  font-size: 9.5px;
  color: var(--c-text-3);
  text-transform: lowercase;
}
.schedule-chip:hover { border-color: var(--c-line); }
.schedule-chip.active {
  border-color: var(--c-accent);
  color: var(--c-accent);
  background: color-mix(in srgb, var(--c-accent) 8%, transparent);
}
.schedule-chip.active .freq { color: var(--c-accent); }

.schedule-input-wrap {
  display: flex;
  align-items: stretch;
  background: color-mix(in srgb, var(--c-text) 3%, transparent);
  border: 1px solid var(--c-line-soft);
  border-radius: 4px;
  font-family: var(--c-font-mono);
  font-size: 12px;
  overflow: hidden;
}
.schedule-input-wrap:focus-within { border-color: var(--c-accent); }
.schedule-input-wrap .prefix {
  padding: 8px 0 8px 10px;
  color: var(--c-accent);
  user-select: none;
  white-space: pre;
}
.schedule-input-wrap .schedule-input {
  border: 0;
  background: transparent;
  padding: 8px 10px 8px 0;
  flex: 1;
  min-width: 0;
}

.schedule-validation {
  margin: 6px 0 0;
  font-size: 10.5px;
  color: var(--c-text-3);
  font-family: var(--c-font-mono);
}
.schedule-validation.ok    { color: var(--c-green); }
.schedule-validation.error { color: var(--c-red); }

.schedule-preview h3 {
  margin: 0 0 6px;
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--c-text-3);
  font-weight: 600;
}
.schedule-next {
  list-style: none;
  margin: 0;
  padding: 0;
  font-family: var(--c-font-mono);
  font-size: 11.5px;
  font-variant-numeric: tabular-nums;
}
.schedule-next li {
  display: grid;
  grid-template-columns: 22px 1fr auto;
  gap: 8px;
  padding: 2px 0;
  color: var(--c-text-2);
}
.schedule-next li .n     { color: var(--c-text-3); }
.schedule-next li .when  { color: var(--c-text); }
.schedule-next li .delta { color: var(--c-text-3); font-size: 10.5px; }
.schedule-next li.muted  { grid-template-columns: 1fr; color: var(--c-text-3); font-style: italic; }

/* ----------------------------------------------------------------------------
 * Run history
 * --------------------------------------------------------------------------- */
.history-body {
  min-height: 60px;
  max-height: 60vh;
  overflow-y: auto;
  padding: 8px 14px 10px;
}
.run-history-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-family: var(--c-font-mono);
}
.run-history-row { margin: 0; padding: 0; }
.run-history-row-button {
  width: 100%;
  text-align: left;
  background: transparent;
  color: var(--c-text);
  border: 1px solid var(--c-line-soft);
  border-radius: 4px;
  padding: 8px 10px;
  font: inherit;
  font-family: var(--c-font-mono);
  font-size: 11.5px;
  cursor: pointer;
  display: grid;
  grid-template-columns: 90px 1fr auto;
  gap: 10px;
  align-items: baseline;
}
.run-history-row-button:hover,
.run-history-row-button:focus-visible {
  border-color: var(--c-accent);
  outline: none;
}
.run-history-status {
  font-weight: 600;
  text-transform: lowercase;
  letter-spacing: 0.04em;
  font-size: 11px;
}
.run-history-status.status-completed { color: var(--c-green); }
.run-history-status.status-running   { color: var(--c-amber); }
.run-history-status.status-pending   { color: var(--c-text-2); }
.run-history-status.status-crashed   { color: var(--c-red);   }
.run-history-mode {
  color: var(--c-text-3);
  font-size: 11px;
}
.run-history-started {
  color: var(--c-text);
  font-variant-numeric: tabular-nums;
  font-size: 11px;
}
.run-history-events {
  color: var(--c-text-3);
  font-size: 11px;
  font-variant-numeric: tabular-nums;
}

/* ----------------------------------------------------------------------------
 * Light-theme overrides
 * --------------------------------------------------------------------------- */
body[data-tg-scheme="light"] {
  --tg-bg-color:           #f8f9fb;
  --tg-secondary-bg-color: #ffffff;
  --tg-text-color:         #0a0a0c;
  --tg-hint-color:         #5b5b66;
}
body[data-tg-scheme="light"] .ctx-gauge { background: color-mix(in srgb, var(--c-text) 6%, transparent); }
body[data-tg-scheme="light"] .event-stream-list,
body[data-tg-scheme="light"] .schedule-input-wrap,
body[data-tg-scheme="light"] .launcher-prompt,
body[data-tg-scheme="light"] .schedule-input,
body[data-tg-scheme="light"] .model-picker-select,
body[data-tg-scheme="light"] .schedule-chip {
  background: color-mix(in srgb, var(--c-text) 4%, transparent);
}
