:root { --bg: #eef2f0; --surface: #fffefa; --surface-muted: #f5f7f4; --ink: #18221f; --muted: #66736f; --line: #d8e0dc; --line-strong: #bdc9c4; --accent: #27675a; --accent-dark: #1d4e45; --accent-soft: #e7f1ed; --warn: #8a5a10; --warn-soft: #fff4d8; --process: #245f96; --process-soft: #e7f1fb; --ok: #146c43; --ok-soft: #e8f6ed; --bad: #9f2f24; --bad-soft: #fdebea; --shadow: 0 16px 34px rgba(36, 54, 49, 0.08); font-family: Aptos, "PingFang SC", "Microsoft YaHei", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; font-variant-numeric: tabular-nums; } * { box-sizing: border-box; } html { height: 100%; scroll-behavior: smooth; overflow: hidden; } body { height: 100%; margin: 0; overflow: hidden; background: var(--bg); color: var(--ink); } button, input, select, textarea { font: inherit; } .app-shell { width: min(1680px, calc(100vw - 32px)); height: 100dvh; margin: 0 auto; padding: 14px 0 16px; display: grid; grid-template-rows: auto minmax(0, 1fr); gap: 12px; overflow: hidden; } .topbar, .panel { background: var(--surface); border: 1px solid var(--line); border-radius: 8px; box-shadow: var(--shadow); } .topbar { display: flex; align-items: center; justify-content: flex-start; gap: 18px; min-height: 68px; padding: 0 16px; } .brand-block { min-width: 0; display: flex; align-items: center; gap: 10px; } .brand-logo { display: block; width: 190px; height: 52px; object-fit: cover; object-position: center; border-radius: 4px; background: #ffffff; } .top-nav { min-width: 0; height: 100%; flex: 1 1 auto; display: flex; align-items: stretch; } .top-nav-item { display: flex; align-items: center; min-height: 68px; padding: 0 18px; border-bottom: 3px solid transparent; color: var(--muted); font-size: 15px; font-weight: 800; white-space: nowrap; } .top-nav-item.is-active { color: var(--accent-dark); border-bottom-color: var(--accent); background: var(--accent-soft); } .title-block { min-width: 220px; display: grid; gap: 2px; } .eyebrow { color: var(--accent); font-size: 12px; font-weight: 700; letter-spacing: 0; } h1, h2, h3, h4, p { margin: 0; } h1 { font-size: 24px; line-height: 1.18; letter-spacing: 0; } h2 { font-size: 16px; line-height: 1.3; } h3 { font-size: 15px; line-height: 1.35; } h4 { color: #33433e; font-size: 13px; font-weight: 700; } p, .muted, .hint { color: var(--muted); } .top-actions, .actions, .task-card-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; } .top-actions { position: relative; margin-left: auto; justify-content: flex-end; flex-wrap: nowrap; } .state, .task-pill { flex: 0 0 auto; border-radius: 6px; font-size: 12px; font-weight: 700; line-height: 1; } .state { padding: 8px 10px; background: #edf0ee; color: var(--muted); } .state-ok { color: var(--ok); background: var(--ok-soft); } .state-warn { color: var(--warn); background: var(--warn-soft); } .state-bad { color: var(--bad); background: var(--bad-soft); } .status-icon { min-height: 36px; display: inline-flex; align-items: center; gap: 7px; border: 1px solid var(--line-strong); border-radius: 8px; padding: 0 10px; background: #ffffff; color: var(--ink); cursor: pointer; transition: background-color 180ms ease, border-color 180ms ease, color 180ms ease, transform 180ms ease; } .status-icon:hover { border-color: #a9bdb5; background: var(--accent-soft); color: var(--accent-dark); } .status-icon:active { transform: translateY(1px); } .status-icon.state-ok { border-color: #9fc6b5; background: var(--ok-soft); } .status-icon.state-warn { border-color: #e4c98d; } .status-icon.state-bad { border-color: #efb4af; background: var(--bad-soft); } .status-icon.state-ok .status-icon-value { color: var(--ok); } .status-icon.state-warn .status-icon-value { color: var(--warn); } .status-icon.state-bad .status-icon-value { color: var(--bad); } .status-icon-glyph { width: 18px; color: currentColor; font-size: 18px; font-weight: 800; line-height: 1; text-align: center; } .status-icon-label { font-size: 12px; font-weight: 800; white-space: nowrap; } .status-icon-value { color: var(--muted); font-size: 12px; white-space: nowrap; } .status-popover { position: absolute; z-index: 40; top: calc(100% + 10px); right: 0; width: min(390px, calc(100vw - 24px)); padding: 16px; border: 1px solid var(--line-strong); border-radius: 10px; background: #ffffff; box-shadow: 0 18px 48px rgba(26, 48, 40, 0.18); color: var(--ink); } .status-popover::before { position: absolute; top: -6px; right: 28px; width: 10px; height: 10px; border-top: 1px solid var(--line-strong); border-left: 1px solid var(--line-strong); background: #ffffff; content: ''; transform: rotate(45deg); } .status-popover-head, .status-popover-actions { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .status-popover-eyebrow { margin-bottom: 3px; color: var(--muted); font-size: 10px; font-weight: 800; letter-spacing: 0.08em; } .status-popover-close { width: 30px; min-height: 30px; padding: 0; border-color: transparent; background: transparent; color: var(--muted); font-size: 22px; } .status-popover-close:hover { border-color: var(--line); background: var(--surface-muted); color: var(--ink); } .status-popover-body { display: grid; gap: 8px; margin: 14px 0; } .status-detail-summary { margin-bottom: 3px; padding: 10px 12px; border-radius: 7px; font-size: 13px; font-weight: 800; } .status-detail-summary.state-ok { color: var(--ok); background: var(--ok-soft); } .status-detail-summary.state-warn { color: var(--warn); background: var(--warn-soft); } .status-detail-summary.state-bad { color: var(--bad); background: var(--bad-soft); } .status-detail-row { display: grid; grid-template-columns: minmax(96px, 0.42fr) minmax(0, 0.58fr); gap: 12px; padding-bottom: 7px; border-bottom: 1px solid var(--line); font-size: 12px; line-height: 1.45; } .status-detail-row:last-child { padding-bottom: 0; border-bottom: 0; } .status-detail-row span { color: var(--muted); } .status-detail-row strong { min-width: 0; text-align: right; overflow-wrap: anywhere; } .status-popover-actions { justify-content: flex-end; padding-top: 12px; border-top: 1px solid var(--line); } .status-popover .secondary-button { min-height: 32px; border-color: var(--line-strong); background: #ffffff; color: var(--ink); } .status-popover .secondary-button:hover { border-color: var(--accent); background: var(--accent-soft); color: var(--accent-dark); } button { min-height: 36px; border: 1px solid var(--accent); border-radius: 6px; padding: 0 14px; background: var(--accent); color: #ffffff; cursor: pointer; transition: background-color 180ms ease, border-color 180ms ease, transform 180ms ease; } button:hover { background: var(--accent-dark); border-color: var(--accent-dark); } button:active { transform: translateY(1px); } button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible, summary:focus-visible { outline: 3px solid rgba(39, 103, 90, 0.22); outline-offset: 2px; } .secondary { color: var(--ink); background: #ffffff; border-color: var(--line-strong); } .secondary:hover { color: var(--accent-dark); background: var(--accent-soft); border-color: #a9bdb5; } .danger-button { min-height: 30px; border-color: #e0aaa4; padding: 0 10px; color: var(--bad); background: var(--bad-soft); font-size: 12px; } .danger-button:hover { border-color: #c97870; color: #ffffff; background: var(--bad); } button:disabled { opacity: 0.52; cursor: not-allowed; } input, select { width: 100%; border: 1px solid var(--line-strong); border-radius: 6px; padding: 8px 9px; color: var(--ink); background: #ffffff; } textarea { width: 100%; resize: none; border: 1px solid var(--line-strong); border-radius: 8px; padding: 12px; color: var(--ink); background: #fcfdfb; font: 13px/1.55 "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; } #rawInstruction { min-height: 0; height: 100%; } .hint { margin-top: 10px; font-size: 13px; line-height: 1.5; } .workbench-grid { display: grid; grid-template-columns: minmax(0, 0.9fr) minmax(0, 0.76fr) minmax(0, 1.25fr); gap: 10px; align-items: stretch; width: 100%; min-width: 0; min-height: 0; overflow: hidden; } .channel-panel { grid-column: 1 / -1; grid-template-rows: auto auto minmax(0, 1fr) auto; min-height: 0; max-height: 250px; } .channel-panel .panel-head { align-items: flex-start; } .channel-panel .panel-head p { margin-top: 4px; font-size: 12px; } .channel-form { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)) auto; align-items: end; gap: 8px; } .channel-form label { display: grid; gap: 5px; color: var(--muted); font-size: 11px; font-weight: 700; } .channel-form input { min-height: 34px; padding: 6px 8px; font-size: 12px; } .channel-form button { min-height: 34px; white-space: nowrap; } .channel-list { min-height: 0; overflow: auto; display: grid; align-content: start; gap: 6px; } .channel-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 8px 10px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-muted); } .channel-row-main { min-width: 0; display: grid; gap: 2px; } .channel-row-heading { display: flex; align-items: center; gap: 7px; min-width: 0; } .channel-row-heading strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; } .channel-row-main p { font-size: 11px; } .channel-key-state { color: var(--ok); } .channel-error, .channel-message { color: var(--bad); font-size: 11px; } .channel-row-actions { display: flex; flex: 0 0 auto; gap: 6px; } .channel-row-actions button { min-height: 28px; padding: 0 8px; font-size: 11px; } .panel { min-width: 0; min-height: 0; padding: 14px; display: grid; grid-template-rows: auto minmax(0, 1fr); gap: 12px; overflow: hidden; } .instruction-panel { grid-template-rows: auto minmax(0, 1fr) auto; } .instruction-panel .actions { justify-content: center; } .detail-panel { grid-template-rows: auto auto auto; align-content: start; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable; scrollbar-color: #b8cbc2 transparent; scrollbar-width: thin; } .panel-head { min-width: 0; min-height: 32px; display: flex; align-items: center; justify-content: space-between; gap: 12px; } .detail-panel-actions { min-width: 0; max-width: 100%; display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap; } .task-stages { min-width: 0; padding: 2px 0 0; } .task-stage-flow { position: relative; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; } .task-stage-card { position: relative; z-index: 1; min-width: 0; min-height: 46px; display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-muted); } .task-stage-card.is-pending { border-color: #cbd4cf; background: #e9eeeb; } .task-stage-card.is-needs { border-color: #e4c98d; background: var(--warn-soft); } .task-stage-card.is-processing { border-color: #9bbcdf; background: var(--process-soft); } .task-stage-card.is-complete { border-color: #9fc6b5; background: var(--ok-soft); } .task-stage-card.is-failed { border-color: #efb4af; background: var(--bad-soft); } .task-stage-heading { min-width: 0; display: flex; align-items: center; overflow: hidden; } .task-stage-title { min-width: 0; color: var(--ink); font-size: 12px; line-height: 1.25; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .task-stage-status { display: inline-flex; flex: 0 0 auto; align-items: center; min-height: 20px; padding: 2px 5px; border: 1px solid var(--line); border-radius: 4px; color: var(--muted); background: #ffffff; font-size: 10px; line-height: 1.2; white-space: nowrap; } .task-stage-status.is-current { border-color: #d6b56e; color: var(--warn); background: #fffaf0; font-weight: 800; } .task-stage-card.is-complete .task-stage-status.is-current { border-color: #83b59d; color: var(--ok); background: #f5fcf7; } .task-stage-card.is-failed .task-stage-status.is-current { border-color: #dc9188; color: var(--bad); background: #fff7f6; } .task-stage-card.is-processing .task-stage-status.is-current { border-color: #8fb2d8; color: var(--process); background: #f4f8fd; } .task-stage-card.is-pending .task-stage-status.is-current { border-color: #c2ccc7; color: #6a7771; background: #f4f7f5; } .task-cards, .task-detail { min-width: 0; min-height: 0; max-height: none; overflow-x: hidden; overflow-y: auto; padding-right: 2px; } .task-cards { display: grid; align-content: start; gap: 6px; } .task-card { min-width: 0; display: grid; gap: 5px; padding: 7px 8px; border: 1px solid var(--line); border-left: 3px solid transparent; border-radius: 8px; background: var(--surface-muted); cursor: pointer; transition: background-color 180ms ease, border-color 180ms ease, transform 180ms ease; } .task-card:hover { border-color: #b8c8c0; border-left-color: var(--accent); background: #fbfcfa; } .task-card.is-selected { border-color: #9fb9ae; border-left-color: var(--accent); background: var(--accent-soft); } .task-card-head { min-width: 0; display: flex; align-items: center; justify-content: space-between; gap: 10px; } .task-card-title-wrap { min-width: 0; display: grid; gap: 3px; } .task-card-title-row { min-width: 0; display: flex; align-items: center; gap: 5px; } .task-source-tag { flex: 0 0 auto; padding: 2px 5px; border: 1px solid transparent; border-radius: 999px; font-size: 10px; font-weight: 700; line-height: 1.2; white-space: nowrap; } .task-source-tag.agentbus { color: #2e5d88; background: #eaf3fb; border-color: #c9deef; } .task-source-tag.manual { color: #5d675f; background: #eef1ef; border-color: #d7ded9; } .task-card-status { min-width: 0; max-width: 48%; display: flex; align-items: center; justify-content: flex-end; gap: 4px; align-self: center; } .task-card-status .task-pill { min-width: 0; max-width: 100%; flex: 0 1 auto; padding: 4px 6px; overflow: hidden; font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .task-card-title { min-width: 0; font-size: 13px; line-height: 1.25; overflow-wrap: anywhere; } .task-id { color: var(--muted); font: 10px/1.25 "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; overflow-wrap: anywhere; } .task-card-message { color: var(--muted); font-size: 11px; line-height: 1.25; } .task-pill { padding: 6px 8px; background: #edf0ee; color: var(--muted); } .task-pill.running, .task-pill.accepted, .task-pill.queued, .task-pill.awaiting_confirmation, .task-pill.awaiting_user_input, .task-pill.confirmed, .task-pill.paused, .task-pill.created, .task-pill.waiting_extension { color: var(--warn); background: var(--warn-soft); } .task-pill.completed { color: var(--ok); background: var(--ok-soft); } .task-pill.is-failure, .task-pill.blocked, .task-pill.saved_unverified, .task-pill.parse_failed, .task-pill.parse_blocked { color: var(--bad); background: var(--bad-soft); } .task-card-actions button { min-height: 26px; padding: 0 9px; font-size: 12px; } .task-empty, .detail-empty { padding: 14px; color: var(--muted); font-size: 13px; border: 1px dashed var(--line-strong); border-radius: 8px; background: #fbfcfa; } .task-detail { height: auto; min-width: 0; overflow: visible; display: flex; flex-direction: column; gap: 10px; } .task-detail > .task-output-panel:not(.task-lifecycle-panel) { flex: 0 0 auto; } .task-detail > .task-lifecycle-panel { flex: 0 0 auto; min-height: 0; } .task-input-request { min-width: 0; display: grid; gap: 9px; padding: 12px; border: 1px solid #e4c98d; border-radius: 8px; background: var(--warn-soft); } .task-input-request-head, .task-input-request-actions { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; } .task-input-request-head .task-output-label { color: var(--warn); } .task-input-request-state, .task-input-request-status { color: var(--warn); font-size: 12px; line-height: 1.4; } .task-input-request-prompts { display: grid; gap: 4px; color: #6f4b0d; font-size: 12px; line-height: 1.5; } .task-input-request-list { margin: 0; padding-left: 20px; } .task-input-request-form { display: grid; gap: 8px; } .task-reply-input { min-height: 88px; max-height: 180px; resize: vertical; background: #fffdf7; font-family: Aptos, "PingFang SC", "Microsoft YaHei", ui-sans-serif, system-ui, sans-serif; } .task-input-request-actions { justify-content: flex-start; } .task-output-panel { min-width: 0; min-height: 0; display: grid; grid-template-rows: auto minmax(0, 1fr); gap: 6px; } .task-output-heading { min-width: 0; min-height: 26px; display: flex; align-items: center; justify-content: space-between; gap: 10px; } .task-output-label { color: var(--muted); font-size: 12px; font-weight: 800; line-height: 1.25; letter-spacing: 0.02em; } .task-output-heading .task-output-label { min-width: 0; } .task-copy-button { flex: 0 0 auto; min-height: 28px; padding: 0 10px; border-radius: 7px; font-size: 11px; line-height: 1; } .task-copy-button.is-copied { border-color: #83b59d; color: var(--ok); background: var(--ok-soft); } .task-copy-button.is-error { border-color: #dc9188; color: var(--bad); background: var(--bad-soft); } .task-important-message-panel { grid-template-rows: auto auto auto; gap: 8px; padding-bottom: 8px; } .task-important-message-panel > .task-output-label { color: var(--ink); } .task-important-message-card { min-width: 0; padding: 10px 12px; border: 1px solid var(--line); border-left: 3px solid var(--line-strong); border-radius: 8px; background: var(--surface-muted); } .task-important-message-card.state-warn { border-color: #e4c98d; border-left-color: var(--warn); background: var(--warn-soft); } .task-important-message-card.state-bad { border-color: #efb4af; border-left-color: var(--bad); background: #fff7f6; } .task-important-message-card.state-ok { border-color: #9fc6b5; border-left-color: var(--ok); background: var(--ok-soft); } .task-operation-review-panel { grid-template-rows: auto auto; padding-bottom: 8px; } .task-operation-review-card { display: grid; gap: 7px; min-width: 0; padding: 11px 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-muted); } .task-operation-review-card.state-warn { border-color: #e4c98d; background: var(--warn-soft); } .task-operation-review-row { display: grid; grid-template-columns: minmax(92px, 0.28fr) minmax(0, 1fr); gap: 10px; align-items: baseline; } .task-operation-review-key { color: var(--muted); font-size: 11px; font-weight: 800; } .task-operation-review-value { min-width: 0; overflow-wrap: anywhere; color: var(--ink); font-size: 12px; } .task-operation-review-note { margin: 3px 0 0; padding-top: 8px; border-top: 1px solid rgba(151, 112, 38, 0.24); color: var(--muted); font-size: 11px; line-height: 1.55; } .task-operation-timing-panel { grid-template-rows: auto auto auto; gap: 8px; padding-bottom: 8px; } .task-operation-timing-total { flex: 0 0 auto; color: var(--ink); font-size: 12px; font-weight: 800; font-variant-numeric: tabular-nums; } .task-operation-timing-list { min-width: 0; overflow: hidden; border: 1px solid var(--line); border-radius: 8px; background: #fff; } .task-operation-timing-stage { min-width: 0; padding: 9px 11px; border-top: 1px solid var(--line); } .task-operation-timing-stage:first-child { border-top: 0; } .task-operation-timing-stage-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; } .task-operation-timing-stage-name { min-width: 0; display: grid; gap: 2px; } .task-operation-timing-stage-name strong { color: var(--ink); font-size: 12px; } .task-operation-timing-stage-name code { color: var(--muted); font-size: 10px; overflow-wrap: anywhere; } .task-operation-timing-stage-metrics { flex: 0 0 auto; display: grid; justify-items: end; gap: 2px; color: var(--muted); font-size: 10px; font-variant-numeric: tabular-nums; } .task-operation-timing-stage-metrics strong { color: var(--ink); font-size: 13px; } .task-operation-timing-details { display: grid; gap: 4px; margin-top: 7px; padding-top: 7px; border-top: 1px dashed var(--line); } .task-operation-timing-detail { min-width: 0; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; color: var(--muted); font-size: 10px; } .task-operation-timing-detail span { min-width: 0; overflow-wrap: anywhere; } .task-operation-timing-detail strong { color: var(--ink-soft); font-weight: 750; font-variant-numeric: tabular-nums; text-align: right; } .task-operation-timing-note { margin: 0; color: var(--muted); font-size: 10px; line-height: 1.5; } .task-artifact-panel { grid-template-rows: auto auto; padding-bottom: 8px; } .task-artifact-list { display: grid; gap: 6px; } .task-artifact-row { min-width: 0; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 10px 12px; border: 1px solid #c8ddd2; border-radius: 9px; background: #ffffff; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8); } .task-artifact-meta { min-width: 0; display: block; } .task-artifact-name { min-width: 0; overflow-wrap: anywhere; color: var(--ink); font-size: 13px; font-weight: 750; line-height: 1.4; } .task-artifact-pending, .task-artifact-unavailable { color: var(--muted); font-size: 11px; line-height: 1.45; } .task-artifact-pending { margin: 0; padding: 9px 11px; border: 1px dashed var(--line-strong); border-radius: 8px; } .task-artifact-download { flex: 0 0 auto; min-height: 30px; padding: 0 10px; display: inline-flex; align-items: center; text-decoration: none; font-size: 11px; } .task-important-message-heading { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; flex-wrap: wrap; } .task-lifecycle-panel { min-height: 0; } .task-outcome-panel { grid-template-rows: auto auto; padding-bottom: 8px; } .task-outcome-panel > .task-output-label { color: var(--ok); } .task-outcome-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; } .task-outcome-card { min-width: 0; padding: 10px 12px; border: 1px solid var(--line); border-radius: 8px; } .task-outcome-card.state-ok { border-color: #9fc6b5; } .task-outcome-card.state-bad { border-color: #efb4af; } .task-outcome-card.special-record { border-color: #9fc6b5; border-left: 3px solid var(--ok); color: var(--ok); background: var(--ok-soft); } .task-outcome-card.special-record .task-outcome-time, .task-outcome-card.special-record .task-outcome-line { color: #277d56; } .task-outcome-card.special-record .task-outcome-json { border-color: #9fc6b5; color: var(--ok); } .task-outcome-title, .task-outcome-time, .task-outcome-line, .task-outcome-message { display: block; } .task-outcome-title { margin-bottom: 4px; } .task-outcome-time, .task-outcome-line { color: var(--muted); font-size: 12px; line-height: 1.45; } .task-outcome-message { margin: 6px 0 0; color: inherit; font-size: 13px; line-height: 1.5; overflow-wrap: anywhere; } .task-outcome-json { max-height: 120px; margin: 7px 0 0; padding: 8px; overflow: auto; border: 1px solid rgba(38, 58, 52, 0.16); border-radius: 6px; background: rgba(255, 255, 255, 0.48); color: inherit; font: 11px/1.45 "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; white-space: pre-wrap; overflow-wrap: anywhere; } .task-outcome-empty { padding: 10px 12px; border: 1px dashed var(--line-strong); border-radius: 8px; color: var(--muted); font-size: 12px; } .task-lifecycle-console { height: 100%; min-height: 0; max-height: none; margin: 0; overflow-x: hidden; overflow-y: auto; padding: 14px; border: 1px solid #263a34; border-radius: 8px; background: #0d1512; color: #d7f8e7; box-shadow: inset 0 0 0 1px rgba(122, 194, 157, 0.08); font: 12px/1.65 "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; white-space: pre-wrap; word-break: break-word; } .receipt-hero { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(220px, 0.9fr); gap: 16px; padding: 14px; border: 1px solid #7db39c; border-radius: 8px; background: #e5f7ec; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.72); } .receipt-hero-main { min-width: 0; display: grid; gap: 5px; } .receipt-hero-main strong { color: var(--ok); font-size: 28px; line-height: 1.05; overflow-wrap: anywhere; } .receipt-hero-main p { color: #226244; font-size: 13px; font-weight: 700; } .receipt-hero-meta { min-width: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; align-content: center; } .receipt-hero-meta .detail-field strong { color: var(--ink); font-size: 14px; } .detail-hero { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; padding-bottom: 12px; border-bottom: 1px solid var(--line); } .detail-hero-main { min-width: 0; display: grid; gap: 5px; } .detail-label, .metric span, .detail-field span, .mini-table-head span { color: var(--muted); font-size: 12px; font-weight: 700; } .detail-hero-main strong { font-size: 18px; line-height: 1.25; overflow-wrap: anywhere; } .detail-hero-main p { font-size: 13px; line-height: 1.45; } .detail-hero-meta { min-width: 220px; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; align-content: start; } .metric-strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); border: 1px solid var(--line); border-radius: 8px; background: var(--surface-muted); } .metric { min-width: 0; display: grid; gap: 4px; padding: 10px; border-right: 1px solid var(--line); } .metric:last-child { border-right: 0; } .metric strong { min-width: 0; font-size: 14px; line-height: 1.35; overflow-wrap: anywhere; } .detail-block { display: grid; gap: 10px; padding-top: 12px; border-top: 1px solid var(--line); } .receipt-block { padding: 12px; border: 1px solid #9fc6b5; border-radius: 8px; background: #edf8f1; } .receipt-grid { display: grid; grid-template-columns: 1.2fr 1fr 1fr 1fr; gap: 10px 14px; } .receipt-grid .detail-field strong { color: var(--ok); font-size: 16px; } .receipt-title { color: var(--ok); font-size: 13px; font-weight: 700; line-height: 1.4; } .field-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px 14px; } .detail-field { min-width: 0; display: grid; gap: 4px; } .detail-field strong { min-width: 0; font-size: 14px; line-height: 1.35; overflow-wrap: anywhere; } .detail-split { display: grid; grid-template-columns: 1.1fr 0.9fr; gap: 12px; } .detail-subblock { min-width: 0; display: grid; align-content: start; gap: 8px; } .mini-table { border: 1px solid var(--line); border-radius: 8px; overflow: hidden; background: #ffffff; } .mini-table-row { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); border-top: 1px solid var(--line); } .mini-table-row:first-child { border-top: 0; } .mini-table-row span { min-width: 0; padding: 8px 10px; font-size: 13px; line-height: 1.35; overflow-wrap: anywhere; } .mini-table-head { background: var(--surface-muted); } .room-list { display: flex; gap: 8px; flex-wrap: wrap; } .room-chip { display: inline-flex; align-items: center; gap: 6px; min-height: 34px; padding: 0 10px; border: 1px solid var(--line); border-radius: 6px; background: #ffffff; font-size: 13px; } .room-chip span { color: var(--muted); } .finance-total { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 0 0; color: var(--muted); font-size: 13px; } .finance-total strong { color: var(--ink); font-size: 18px; } .task-steps { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; } .task-step { min-width: 0; display: flex; align-items: center; gap: 7px; padding: 8px; border: 1px solid var(--line); border-radius: 8px; background: #ffffff; color: var(--muted); font-size: 12px; } .task-step strong { min-width: 0; overflow-wrap: anywhere; } .step-dot { width: 9px; height: 9px; flex: 0 0 auto; border-radius: 50%; background: #b8c3be; } .task-step.done { color: var(--ok); background: var(--ok-soft); } .task-step.done .step-dot { background: var(--ok); } .task-step.active { color: var(--warn); background: var(--warn-soft); } .task-step.active .step-dot { background: var(--warn); } .task-step.blocked { color: var(--bad); background: var(--bad-soft); } .task-step.blocked .step-dot { background: var(--bad); } .progress-note, .detail-note { font-size: 13px; line-height: 1.5; } .detail-alert { display: grid; gap: 6px; padding: 10px; border: 1px solid #efb4af; border-radius: 8px; color: var(--bad); background: var(--bad-soft); } .detail-alert p { color: inherit; font-size: 13px; line-height: 1.45; } @media (max-width: 1120px) { .workbench-grid { grid-template-columns: minmax(0, 0.9fr) minmax(0, 0.76fr) minmax(0, 1.25fr); } } @media (max-width: 920px) { .app-shell { width: min(100vw - 20px, 760px); padding-top: 10px; } .topbar { display: grid; gap: 0; padding: 0 12px 12px; } .top-nav { min-height: 52px; } .top-nav-item { min-height: 52px; } .task-stage-flow { grid-template-columns: 1fr; } .top-actions { align-items: stretch; } .top-actions button, .top-actions .state { flex: 1 1 140px; } .top-actions .status-popover button { flex: 0 0 auto; } .field-grid, .receipt-hero, .detail-hero, .receipt-grid, .detail-split, .metric-strip, .task-steps, .task-outcome-grid { grid-template-columns: 1fr; } .detail-hero { display: grid; } .detail-hero-meta { min-width: 0; } .workbench-grid { grid-template-columns: minmax(0, 1fr); grid-auto-rows: minmax(320px, auto); overflow-x: hidden; overflow-y: auto; } .channel-panel { max-height: none; } .channel-form { grid-template-columns: repeat(2, minmax(0, 1fr)); } .channel-form button { width: 100%; } .channel-row { align-items: flex-start; flex-direction: column; } .metric { border-right: 0; border-bottom: 1px solid var(--line); } .metric:last-child { border-bottom: 0; } .task-cards, .task-detail { max-height: none; } } :root { --login-bg: #f4f5f7; } /* Component display rules must never override the native hidden attribute. */ [hidden] { display: none !important; } .login-panel { min-height: calc(100vh - 110px); display: grid; place-items: center; padding: 48px 24px; background: var(--login-bg); } .login-card { width: min(420px, 100%); padding: 34px; border: 1px solid rgba(20, 24, 32, .12); border-radius: 18px; background: #fff; box-shadow: 0 18px 60px rgba(20, 24, 32, .12); } .login-card h1 { margin: 6px 0 8px; } .login-card form { display: grid; gap: 14px; margin-top: 24px; } .login-card label { display: grid; gap: 7px; font-size: 13px; color: #4c5563; } .login-card input { width: 100%; box-sizing: border-box; min-height: 42px; padding: 0 12px; border: 1px solid #ccd2dc; border-radius: 9px; font: inherit; } .login-card button { min-height: 44px; border: 0; border-radius: 9px; background: #111827; color: #fff; font: inherit; cursor: pointer; } .login-error { min-height: 20px; margin: 0; color: #b42318; font-size: 13px; } .auth-state { max-width: 180px; overflow: hidden; color: #5d6673; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; } .logout-button { border: 1px solid #ccd2dc; border-radius: 8px; padding: 8px 11px; background: #fff; color: #394150; cursor: pointer; } /* * UI optimization pass: redesign-preserve for the business workbench. * The existing DOM and state classes are intentionally kept intact so this * layer only changes visual hierarchy, density, responsive behavior, and * interaction feedback. */ :root { color-scheme: light; --bg: #edf2f4; --surface: #ffffff; --surface-muted: #f6f9f8; --surface-subtle: #f0f5f3; --ink: #162521; --muted: #60716b; --line: #d8e3df; --line-strong: #b9cbc3; --accent: #176f5d; --accent-dark: #0f5547; --accent-soft: #e7f3ee; --brand-blue: #1d4d8f; --warn: #8a5a10; --warn-soft: #fff5dc; --process: #245f96; --process-soft: #e8f1fb; --ok: #146c43; --ok-soft: #e7f5ec; --bad: #a33b31; --bad-soft: #fceceb; --radius-control: 8px; --radius-panel: 14px; --radius-pill: 999px; --shadow-sm: 0 1px 2px rgba(22, 37, 33, 0.04), 0 7px 20px rgba(22, 37, 33, 0.045); --shadow-md: 0 12px 32px rgba(22, 37, 33, 0.08); font-family: Aptos, "PingFang SC", "Microsoft YaHei", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; } html { scroll-behavior: auto; } body { background: var(--bg); color: var(--ink); } .app-shell { width: min(1600px, calc(100vw - 40px)); padding: 16px 0 18px; gap: 14px; } .topbar, .panel { border-color: var(--line); border-radius: var(--radius-panel); box-shadow: var(--shadow-sm); } .topbar { min-height: 72px; padding: 0 18px; gap: 22px; } .brand-logo { width: 184px; height: 48px; border-radius: 6px; object-position: center 52%; } .top-nav-item { min-height: 72px; padding: 0 20px; border-bottom-width: 2px; color: #6a7974; font-size: 14px; font-weight: 700; transition: color 180ms ease, background-color 180ms ease, border-color 180ms ease; } .top-nav-item.is-active { color: var(--accent-dark); background: linear-gradient(180deg, transparent 0%, var(--accent-soft) 100%); } .top-actions { gap: 9px; } .auth-state { max-width: 200px; padding: 0 4px; color: var(--muted); font-size: 12px; font-weight: 600; } .status-icon { min-height: 38px; gap: 7px; border-color: var(--line-strong); border-radius: var(--radius-control); padding: 0 11px; background: rgba(255, 255, 255, 0.82); box-shadow: 0 1px 1px rgba(22, 37, 33, 0.03); transition: background-color 180ms ease, border-color 180ms ease, color 180ms ease, transform 180ms ease, box-shadow 180ms ease; } .status-icon:hover { border-color: #93b7aa; background: var(--accent-soft); box-shadow: 0 4px 12px rgba(23, 111, 93, 0.1); } .status-icon:active, button:active { transform: translateY(1px) scale(0.99); } .status-icon-label { color: var(--ink); font-size: 11px; font-weight: 700; } .status-icon-value { font-size: 11px; font-weight: 600; } .status-icon-glyph { width: 16px; font-size: 16px; } .status-popover { top: calc(100% + 12px); width: min(400px, calc(100vw - 24px)); padding: 18px; border-color: var(--line-strong); border-radius: 12px; background: #ffffff; box-shadow: var(--shadow-md); } .status-popover-eyebrow, .eyebrow { color: var(--accent); font-size: 10px; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; } .status-popover-close { border-radius: 7px; } button { min-height: 40px; border-radius: var(--radius-control); padding: 0 15px; box-shadow: 0 1px 1px rgba(22, 37, 33, 0.06); font-size: 13px; font-weight: 700; transition: background-color 180ms ease, border-color 180ms ease, color 180ms ease, transform 180ms ease, box-shadow 180ms ease; } button:hover:not(:disabled) { box-shadow: 0 5px 14px rgba(23, 111, 93, 0.14); } button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible, summary:focus-visible { outline: 3px solid rgba(23, 111, 93, 0.24); outline-offset: 2px; } .secondary, .secondary-button, .logout-button { border-color: var(--line-strong); border-radius: var(--radius-control); background: #ffffff; color: var(--ink); } .secondary:hover, .secondary-button:hover, .logout-button:hover { border-color: #91b3a7; background: var(--accent-soft); color: var(--accent-dark); } .danger-button { min-height: 34px; border-radius: var(--radius-control); border-color: #e2b4ae; background: var(--bad-soft); font-weight: 700; } input, select { min-height: 40px; border-color: var(--line-strong); border-radius: var(--radius-control); padding: 8px 11px; background: #ffffff; font-size: 13px; } input::placeholder, textarea::placeholder { color: #8a9993; opacity: 1; } textarea { border-color: var(--line-strong); border-radius: 10px; padding: 14px; background: var(--surface-muted); } #rawInstruction { min-height: 230px; border-color: #c8d8d1; background: linear-gradient(180deg, #fbfdfc 0%, #f4f9f7 100%); box-shadow: inset 0 1px 2px rgba(22, 37, 33, 0.03); font-size: 13px; line-height: 1.65; } .workbench-grid { grid-template-columns: minmax(270px, 0.82fr) minmax(250px, 0.76fr) minmax(470px, 1.42fr); gap: 14px; } .panel { padding: 16px; gap: 14px; background: rgba(255, 255, 255, 0.96); } .instruction-panel { background: linear-gradient(180deg, #ffffff 0%, #fbfdfc 100%); } .panel-head { min-height: 34px; padding-bottom: 11px; border-bottom: 1px solid var(--line); } .panel-head h2 { color: var(--ink); font-size: 14px; font-weight: 800; letter-spacing: 0.01em; } .panel-head .muted { font-size: 12px; font-weight: 600; } .instruction-panel .actions { justify-content: center; padding-top: 2px; } .task-stages { padding-top: 0; } .task-stage-flow { gap: 10px; } .task-stage-card { min-height: 58px; align-items: flex-start; padding: 11px 12px; border-color: var(--line); border-radius: 10px; background: var(--surface-muted); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.72); } .task-stage-title { color: var(--ink); font-size: 12px; font-weight: 700; } .task-stage-status { min-height: 22px; padding: 3px 7px; border-radius: var(--radius-pill); font-size: 10px; font-weight: 700; } .task-cards, .task-detail { padding-right: 4px; scrollbar-color: #b8cbc2 transparent; scrollbar-width: thin; } .task-cards { gap: 8px; } .task-card { gap: 7px; padding: 11px 12px; border-color: var(--line); border-left-width: 3px; border-radius: 10px; background: #fbfdfc; transition: background-color 180ms ease, border-color 180ms ease, transform 180ms ease, box-shadow 180ms ease; } .task-card:hover { border-color: #a9c1b6; border-left-color: var(--accent); background: #ffffff; box-shadow: 0 5px 14px rgba(22, 37, 33, 0.06); transform: translateY(-1px); } .task-card.is-selected { border-color: #92b8a9; border-left-color: var(--accent); background: var(--accent-soft); box-shadow: 0 5px 14px rgba(23, 111, 93, 0.09); } .task-card-title { font-size: 13px; font-weight: 750; } .task-id { color: #72827b; font-size: 10px; } .task-source-tag { border-radius: var(--radius-pill); padding: 3px 7px; font-size: 10px; font-weight: 800; } .task-card-message { color: var(--muted); font-size: 11px; } .task-pill { border-radius: var(--radius-pill); padding: 6px 8px; font-size: 10px; font-weight: 800; } .task-empty, .detail-empty { padding: 18px 14px; border-color: var(--line-strong); border-radius: 10px; background: var(--surface-muted); text-align: center; } .task-detail { gap: 12px; } .task-important-message-card, .task-input-request, .task-outcome-card, .receipt-block, .detail-alert { border-radius: 10px; } .task-important-message-card { padding: 12px 14px; background: var(--surface-muted); } .task-output-label { font-size: 11px; font-weight: 800; letter-spacing: 0.03em; } .task-lifecycle-console { padding: 16px; border-color: #29483d; border-radius: 10px; background: #0d1915; box-shadow: inset 0 0 0 1px rgba(122, 194, 157, 0.1), 0 8px 18px rgba(15, 38, 29, 0.12); color: #d9f6e7; font-size: 11px; line-height: 1.7; } .detail-hero, .receipt-hero { border-radius: 10px; } .detail-hero { padding-bottom: 14px; } .detail-hero-main strong { font-size: 19px; font-weight: 800; } .metric-strip { border-radius: 10px; background: var(--surface-muted); } .metric { padding: 11px 12px; } .metric strong, .detail-field strong { font-weight: 750; } .detail-block { gap: 11px; padding-top: 14px; } .detail-block h3 { color: var(--ink); font-size: 13px; font-weight: 800; } .mini-table, .room-chip { border-radius: 9px; } .mini-table-row span { padding: 9px 11px; } .room-chip { min-height: 36px; background: var(--surface-muted); } .login-panel { min-height: 0; height: 100%; padding: 28px 24px; background: transparent; } .login-card { width: min(440px, 100%); padding: 34px; border-color: var(--line); border-radius: 16px; background: rgba(255, 255, 255, 0.96); box-shadow: var(--shadow-md); } .login-card h1 { margin: 7px 0 9px; font-size: 26px; letter-spacing: -0.02em; } .login-card .muted { font-size: 13px; line-height: 1.6; } .login-card form { gap: 15px; margin-top: 26px; } .login-card label { gap: 8px; color: var(--ink); font-size: 12px; font-weight: 700; } .login-card input { min-height: 44px; border-color: var(--line-strong); border-radius: var(--radius-control); padding: 0 12px; } .login-card button { min-height: 44px; border: 1px solid var(--accent); border-radius: var(--radius-control); background: var(--accent); color: #ffffff; font-weight: 800; } .login-card button:hover:not(:disabled) { background: var(--accent-dark); } .login-error { color: var(--bad); } .logout-button { min-height: 34px; padding: 0 11px; font-size: 12px; } @media (max-width: 1180px) and (min-width: 921px) { .app-shell { width: min(100vw - 28px, 1120px); } .workbench-grid { grid-template-columns: minmax(250px, 0.82fr) minmax(235px, 0.75fr) minmax(400px, 1.35fr); gap: 10px; } .panel { padding: 13px; } .status-icon { padding: 0 8px; } .status-icon-label { display: none; } } @media (max-width: 920px) { .app-shell { width: min(calc(100vw - 20px), 760px); padding-top: 10px; } .topbar { min-height: 0; gap: 0; padding: 0 12px 12px; } .brand-logo { width: 170px; height: 46px; } .top-nav, .top-nav-item { min-height: 48px; } .top-nav-item { padding: 0 12px; } .top-actions { gap: 7px; } .top-actions button, .top-actions .state { min-width: 0; } .workbench-grid { grid-template-columns: minmax(0, 1fr); grid-auto-rows: minmax(320px, auto); gap: 10px; overflow-x: hidden; overflow-y: auto; } .instruction-panel { min-height: 360px; } .task-list-panel { min-height: 320px; } .detail-panel { min-height: 640px; } .task-stage-flow { grid-template-columns: 1fr; } .field-grid, .receipt-hero, .detail-hero, .receipt-grid, .detail-split, .metric-strip, .task-steps, .task-outcome-grid { grid-template-columns: 1fr; } .detail-hero { display: grid; } .detail-hero-meta { min-width: 0; } .metric { border-right: 0; border-bottom: 1px solid var(--line); } .metric:last-child { border-bottom: 0; } } @media (max-width: 620px) { .topbar { padding: 8px 10px 10px; } .brand-logo { width: 156px; height: 42px; } .top-nav-item { padding: 0 10px; font-size: 13px; } .top-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); width: 100%; margin-top: 8px; } .top-actions .auth-state { grid-column: 1 / -1; max-width: none; padding: 0; } .top-actions button { width: 100%; } .status-icon { justify-content: center; } .status-popover { right: -4px; } .panel { padding: 13px; } .panel-head, .detail-panel-actions { align-items: flex-start; } .detail-panel-actions { justify-content: flex-end; } .detail-panel-actions button { flex: 1 1 auto; } .login-card { padding: 26px 22px; } } .automation-toggle { min-height: 36px; border: 1px solid #d7b66a; border-radius: 8px; padding: 0 11px; background: var(--warn-soft); color: var(--warn); cursor: pointer; font-size: 12px; font-weight: 800; white-space: nowrap; transition: background-color 180ms ease, border-color 180ms ease, color 180ms ease, transform 180ms ease; } .automation-toggle:hover:not(:disabled) { border-color: #bd9340; background: #ffefbd; } .automation-toggle:active:not(:disabled) { transform: translateY(1px); } .automation-toggle.is-enabled { border-color: #8fc2a6; background: var(--ok-soft); color: var(--ok); } .automation-toggle.is-enabled:hover:not(:disabled) { border-color: #5da37d; background: #d9f0e2; } .automation-toggle.is-error { border-color: #efb4af; background: var(--bad-soft); color: var(--bad); } .automation-toggle:disabled { cursor: wait; opacity: 0.72; } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; scroll-behavior: auto !important; transition-duration: 0.01ms !important; } } @media (max-width: 920px) { .workbench-grid { grid-auto-rows: auto; } .instruction-panel { min-height: 392px; grid-template-rows: auto minmax(230px, 1fr) auto; } .instruction-panel #rawInstruction { height: auto; min-height: 230px; } } .top-nav-item { color: var(--muted); text-decoration: none; } .top-nav-item.is-active { color: var(--accent-dark); } .panel-title-group { min-width: 0; display: flex; align-items: baseline; gap: 9px; } .task-list-head-actions { min-width: 0; display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap; } .task-history-link { min-height: 32px; display: inline-flex; align-items: center; padding: 0 10px; color: var(--accent-dark); font-size: 12px; font-weight: 800; text-decoration: none; white-space: nowrap; } .history-filters { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(150px, 0.7fr) auto; align-items: end; gap: 9px; padding: 10px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface-muted); } .history-filters label { min-width: 0; display: grid; gap: 5px; color: var(--muted); font-size: 11px; font-weight: 700; } .history-filter-actions { display: flex; align-items: center; gap: 7px; } .history-filter-actions button, .history-pagination button { min-height: 38px; white-space: nowrap; } .history-batch-actions { min-width: 0; display: flex; align-items: center; gap: 10px; padding: 9px 10px; border: 1px solid var(--line); border-radius: 9px; background: #fbfcfa; } .history-select-all { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 7px; color: var(--ink); font-size: 12px; font-weight: 750; cursor: pointer; } .history-select-all input, .task-card-select input { width: 16px; min-height: 16px; margin: 0; padding: 0; accent-color: var(--accent); cursor: pointer; } .history-batch-message { min-width: 0; flex: 1 1 auto; color: var(--muted); font-size: 11px; line-height: 1.35; } .history-batch-message.is-error { color: var(--bad); } .history-batch-message.is-success { color: var(--ok); } .history-batch-actions > .danger-button { flex: 0 0 auto; white-space: nowrap; } .history-pagination { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding-top: 10px; border-top: 1px solid var(--line); } .history-pagination-actions { display: flex; gap: 7px; } .channels-page { min-width: 0; min-height: 0; display: grid; grid-template-columns: minmax(0, 1fr); overflow: auto; } .channels-page .channel-panel { min-height: 100%; max-height: none; grid-template-rows: auto auto minmax(0, 1fr) auto; } .channels-page .channel-list { max-height: none; } .history-page .workbench-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); } .history-page .task-list-panel { grid-template-rows: auto auto auto minmax(0, 1fr) auto; } .history-page .task-card { padding: 10px; } .history-page .task-card.has-history-actions { grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; } .history-page .task-card.is-checked { border-color: #92b8a9; border-left-color: var(--accent); background: #f4faf7; } .task-card-select { align-self: stretch; display: inline-flex; align-items: center; padding: 0 2px; cursor: pointer; } .task-card-delete { min-height: 30px; align-self: center; padding: 0 9px; white-space: nowrap; } @media (max-width: 920px) { .history-page .workbench-grid { grid-template-columns: minmax(0, 1fr); } .history-filters { grid-template-columns: minmax(0, 1fr); } .history-filter-actions { justify-content: flex-end; } .history-batch-actions { flex-wrap: wrap; } .history-batch-message { order: 3; flex-basis: 100%; } .history-pagination { align-items: flex-start; flex-direction: column; } .history-pagination-actions { width: 100%; } .history-pagination-actions button { flex: 1 1 0; } } .parser-routing-page { min-width: 0; min-height: 0; overflow: hidden; } html.parser-routing-page-active, body.parser-routing-page-active { height: auto; min-height: 100%; overflow-x: hidden; overflow-y: auto; } body.parser-routing-page-active .app-shell { height: auto; min-height: 100dvh; grid-template-rows: auto auto; overflow: visible; } body.parser-routing-page-active .parser-routing-page, body.parser-routing-page-active .parser-routing-panel { min-height: 0; overflow: visible; } body.parser-routing-page-active .parser-routing-panel { grid-template-rows: auto auto auto auto; } body.parser-routing-page-active .parser-routing-table-wrap { overflow-x: auto; overflow-y: visible; } .parser-routing-panel { min-height: 100%; padding: 16px; display: grid; grid-template-rows: auto auto minmax(0, 1fr) auto; gap: 12px; overflow: hidden; } .parser-routing-head { align-items: flex-start; } .parser-routing-head h2 { margin: 2px 0 4px; } .parser-emergency-button { min-height: 42px; padding-inline: 16px; white-space: nowrap; } .parser-automation-notice { padding: 10px 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-muted); color: var(--muted); font-size: 13px; line-height: 1.5; } .parser-automation-notice.is-enabled { border-color: #d8b867; background: var(--warn-soft); color: var(--warn); font-weight: 700; } .parser-routing-table-wrap { min-height: 0; overflow: auto; border: 1px solid var(--line); border-radius: 8px; } .parser-routing-table { width: 100%; min-width: 1180px; border-collapse: collapse; font-size: 12px; } .parser-routing-table th, .parser-routing-table td { padding: 11px 10px; border-bottom: 1px solid var(--line); vertical-align: top; text-align: left; } .parser-routing-table th { position: sticky; top: 0; z-index: 1; background: #f0f4f1; color: var(--muted); font-size: 11px; letter-spacing: 0.04em; text-transform: uppercase; } .parser-routing-table tbody tr:last-child td { border-bottom: 0; } .parser-routing-table tbody tr:hover td { background: #fbfcfa; } .parser-business-name, .parser-route-id, .parser-release-order, .parser-version, .parser-revision, .parser-updated-at, .parser-implementation, .parser-gate span, .parser-routing-table td > time, .parser-routing-table td > span { display: block; } .parser-business-name { margin-bottom: 4px; font-size: 13px; } .parser-route-id, .parser-release-order, .parser-version, .parser-revision, .parser-updated-at { margin-top: 4px; color: var(--muted); font-size: 10px; } .parser-release-order { color: var(--accent-dark); font-weight: 700; } .parser-version { max-width: 170px; overflow-wrap: anywhere; } .parser-implementation { width: fit-content; padding: 2px 6px; border-radius: 999px; background: var(--surface-muted); color: var(--muted); font-size: 10px; font-weight: 800; } .parser-implementation.is-ready { background: var(--ok-soft); color: var(--ok); } .parser-mode-select { min-width: 112px; min-height: 34px; border: 1px solid var(--line-strong); border-radius: 7px; background: white; color: var(--ink); font-weight: 800; } .parser-mode-select.mode-shadow { border-color: #7d8ea3; color: #41566e; } .parser-mode-select.mode-auto { border-color: #c59536; color: var(--warn); } .parser-mode-select.mode-program { border-color: #4f927b; color: var(--ok); } .parser-gate { display: grid; gap: 4px; max-width: 260px; } .parser-gate strong { color: var(--warn); } .parser-gate.is-ready strong, .parser-gate-complete { color: var(--ok); } .parser-gate span { color: var(--muted); line-height: 1.45; } .parser-routing-empty { padding: 32px !important; color: var(--muted); text-align: center !important; } .task-parser-tag { display: inline-flex; align-items: center; min-height: 20px; padding: 2px 6px; border-radius: 999px; background: var(--surface-muted); color: var(--muted); font-size: 10px; font-weight: 800; white-space: nowrap; } .task-parser-tag.is-program { background: var(--ok-soft); color: var(--ok); } .task-parser-tag.is-ai { background: var(--process-soft); color: var(--process); } .task-parser-tag.is-fallback { background: var(--warn-soft); color: var(--warn); } .task-parser-tag.is-different { background: var(--bad-soft); color: var(--bad); } .task-parser-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin-top: 10px; } .task-parser-diff, .task-parser-review, .task-parser-reparse { margin-top: 10px; padding: 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-muted); } .task-parser-diff ul { margin: 7px 0 0; padding-left: 20px; color: var(--muted); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 11px; } .task-parser-difference-list { display: grid; gap: 8px; margin-top: 8px; } .task-parser-difference-row { display: grid; gap: 6px; padding: 8px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface); } .task-parser-difference-path { color: var(--muted); font-size: 11px; overflow-wrap: anywhere; } .task-parser-difference-values { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; } .task-parser-difference-value { min-width: 0; } .task-parser-difference-value > span { display: block; margin-bottom: 3px; color: var(--muted); font-size: 10px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; } .task-parser-difference-value pre { max-height: 180px; margin: 0; padding: 7px; overflow: auto; border-radius: 6px; background: var(--code-bg, rgba(15, 23, 42, .06)); white-space: pre-wrap; overflow-wrap: anywhere; font: 11px/1.45 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; } .task-parser-review, .task-parser-reparse { display: flex; align-items: center; justify-content: space-between; gap: 10px; } .task-parser-review-actions { display: flex; gap: 6px; flex-wrap: wrap; justify-content: flex-end; } .danger-secondary-button { border-color: #dbaca7 !important; background: var(--bad-soft) !important; color: var(--bad) !important; } @media (max-width: 920px) { .parser-routing-panel { padding: 12px; } .parser-routing-head, .task-parser-review, .task-parser-reparse { align-items: stretch; flex-direction: column; } .task-parser-grid { grid-template-columns: minmax(0, 1fr); } .task-parser-difference-values { grid-template-columns: minmax(0, 1fr); } .task-parser-review-actions { justify-content: flex-start; } }