engineering-platform 2.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- engineering_platform/ENGINEERING_PLATFORM_CONFIG.json +32 -0
- engineering_platform/ENGINEERING_PLATFORM_VERSION.json +15 -0
- engineering_platform/__init__.py +1 -0
- engineering_platform/__main__.py +7 -0
- engineering_platform/agent_state.py +530 -0
- engineering_platform/agent_trust.py +174 -0
- engineering_platform/assets/dashboard.css +1317 -0
- engineering_platform/assets/dashboard.js +8534 -0
- engineering_platform/assets/dashboard_locales.mjs +4049 -0
- engineering_platform/assets/dashboard_status_store.mjs +41 -0
- engineering_platform/assets/operations-console/apple-touch-icon-dark.png +0 -0
- engineering_platform/assets/operations-console/apple-touch-icon-light.png +0 -0
- engineering_platform/assets/operations-console/icon-dark.png +0 -0
- engineering_platform/assets/operations-console/icon-light.png +0 -0
- engineering_platform/assets/operations-console/icon-transparent.png +0 -0
- engineering_platform/assets/operations-console/manifest.webmanifest +11 -0
- engineering_platform/capability_preflight.py +285 -0
- engineering_platform/capability_review.py +261 -0
- engineering_platform/central_data_transfer.py +195 -0
- engineering_platform/central_database.py +245 -0
- engineering_platform/central_store_migration.py +1672 -0
- engineering_platform/codex_capacity.py +81 -0
- engineering_platform/codex_chat.py +226 -0
- engineering_platform/codex_observability.py +153 -0
- engineering_platform/component_lock.py +40 -0
- engineering_platform/component_logging.py +420 -0
- engineering_platform/console_presentation.py +14 -0
- engineering_platform/console_route_ownership.py +83 -0
- engineering_platform/contracts/__init__.py +38 -0
- engineering_platform/contracts/ep_consumer.py +391 -0
- engineering_platform/contracts/models.py +105 -0
- engineering_platform/contracts/projection.py +401 -0
- engineering_platform/dashboard_browser_validation.py +206 -0
- engineering_platform/dashboard_state.py +630 -0
- engineering_platform/dashboard_supervisor.swift +105 -0
- engineering_platform/dashboard_translation.py +129 -0
- engineering_platform/dependabot_producer.py +349 -0
- engineering_platform/drift_diagnostics.py +144 -0
- engineering_platform/emergency_recovery.py +268 -0
- engineering_platform/engineering_memory.py +139 -0
- engineering_platform/ep_consumer_credentials.py +473 -0
- engineering_platform/evidence_projection.py +213 -0
- engineering_platform/execution_activity.py +218 -0
- engineering_platform/execution_context.py +132 -0
- engineering_platform/execution_errors.py +42 -0
- engineering_platform/execution_evidence.py +24 -0
- engineering_platform/execution_executor.py +730 -0
- engineering_platform/execution_finalization.py +44 -0
- engineering_platform/execution_host.py +3306 -0
- engineering_platform/execution_lease.py +365 -0
- engineering_platform/execution_lifecycle.py +447 -0
- engineering_platform/execution_models.py +43 -0
- engineering_platform/execution_readiness.py +166 -0
- engineering_platform/execution_reporting.py +1607 -0
- engineering_platform/execution_repository.py +253 -0
- engineering_platform/execution_timeout_policy.py +56 -0
- engineering_platform/execution_timing.py +440 -0
- engineering_platform/execution_transaction.py +28 -0
- engineering_platform/external_producer_binding.py +235 -0
- engineering_platform/file_inbox.py +249 -0
- engineering_platform/forensic_attribution.py +338 -0
- engineering_platform/forensic_attribution_v2.py +134 -0
- engineering_platform/forensic_delta.py +299 -0
- engineering_platform/golden_scenario.py +63 -0
- engineering_platform/historical_dashboard_configuration.py +171 -0
- engineering_platform/host_admin.py +199 -0
- engineering_platform/host_preflight.py +231 -0
- engineering_platform/installation_relocation.py +122 -0
- engineering_platform/investigation_ledger.py +89 -0
- engineering_platform/legacy_inbox_migration.py +79 -0
- engineering_platform/lifecycle_worker.py +223 -0
- engineering_platform/live_status.py +267 -0
- engineering_platform/local_api.py +209 -0
- engineering_platform/local_api_keychain.py +51 -0
- engineering_platform/local_repository_binding.py +138 -0
- engineering_platform/managed_autonomy.py +509 -0
- engineering_platform/managed_codex_runtime.py +105 -0
- engineering_platform/parity_context.py +203 -0
- engineering_platform/parity_lifecycle_dispatcher.py +488 -0
- engineering_platform/platform_admin.py +13 -0
- engineering_platform/platform_api.py +428 -0
- engineering_platform/platform_bootstrap.py +385 -0
- engineering_platform/platform_components.py +65 -0
- engineering_platform/platform_version.py +171 -0
- engineering_platform/pr_check_repair.py +276 -0
- engineering_platform/pr_evidence_backfill.py +278 -0
- engineering_platform/producer.py +209 -0
- engineering_platform/project_agent.py +366 -0
- engineering_platform/project_agent_service.py +244 -0
- engineering_platform/project_topology.py +126 -0
- engineering_platform/prompt_history.py +591 -0
- engineering_platform/provider_context.py +136 -0
- engineering_platform/provider_context_benchmark.py +41 -0
- engineering_platform/provider_context_scope.py +90 -0
- engineering_platform/provider_interruption.py +168 -0
- engineering_platform/provider_process_identity.py +80 -0
- engineering_platform/provider_readiness.py +138 -0
- engineering_platform/provider_recovery.py +647 -0
- engineering_platform/provider_usage.py +497 -0
- engineering_platform/providers.py +471 -0
- engineering_platform/qualification.py +220 -0
- engineering_platform/recommendation_handoff.py +238 -0
- engineering_platform/report_analysis.py +193 -0
- engineering_platform/repository_attachment.py +171 -0
- engineering_platform/repository_handoff.py +95 -0
- engineering_platform/resources.py +38 -0
- engineering_platform/reviewer_evidence.py +70 -0
- engineering_platform/schemas/repository-attachment.schema.json +61 -0
- engineering_platform/server.py +3679 -0
- engineering_platform/server_console_services.py +2024 -0
- engineering_platform/server_relay.py +172 -0
- engineering_platform/server_service.py +122 -0
- engineering_platform/status_model.py +135 -0
- engineering_platform/status_reconciliation.py +34 -0
- engineering_platform/storage.py +2440 -0
- engineering_platform/submission_cli.py +77 -0
- engineering_platform/submission_intake.py +45 -0
- engineering_platform/submission_service.py +317 -0
- engineering_platform/telemetry.py +951 -0
- engineering_platform/templates/workspace-config.json +25 -0
- engineering_platform/validation_identity.py +50 -0
- engineering_platform/validation_profile.py +211 -0
- engineering_platform/workspace_preflight.py +263 -0
- engineering_platform/worktree_provenance.py +147 -0
- engineering_platform/worktree_tooling.py +18 -0
- engineering_platform-2.2.0.dist-info/METADATA +18 -0
- engineering_platform-2.2.0.dist-info/RECORD +130 -0
- engineering_platform-2.2.0.dist-info/WHEEL +5 -0
- engineering_platform-2.2.0.dist-info/entry_points.txt +6 -0
- engineering_platform-2.2.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,1317 @@
|
|
|
1
|
+
/* Prevent iOS/iPadOS double-tap zoom while preserving native pinch zoom. */
|
|
2
|
+
html,body{-webkit-text-size-adjust:100%;text-size-adjust:100%;touch-action:manipulation}
|
|
3
|
+
/* Tables use horizontal swipe navigation on small screens. Explicit pan
|
|
4
|
+
gestures keep that navigation while preventing WebKit's tap-to-zoom paint
|
|
5
|
+
and text-callout overlay from being captured by the scrolling surface. */
|
|
6
|
+
:is(.log-table-wrap,.telemetry-scroll,.telemetry-detail-table-scroll){-webkit-overflow-scrolling:auto;overscroll-behavior:contain;touch-action:pan-x pan-y}
|
|
7
|
+
:is(.log-table,.telemetry-table){-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;-webkit-touch-callout:none;text-size-adjust:100%;touch-action:manipulation}
|
|
8
|
+
/* Shared product chrome: change the hue here to retheme controls, notices and status metadata. */
|
|
9
|
+
:root{
|
|
10
|
+
--house-style:#f0b66a;
|
|
11
|
+
--house-style-contrast:#fff0dc;
|
|
12
|
+
--house-style-surface:#4a321f;
|
|
13
|
+
--house-style-focus:#f0b66a47;
|
|
14
|
+
--button-ink:#10151d;
|
|
15
|
+
--dashboard-section-gap:24px;
|
|
16
|
+
--dashboard-scroll-gutter:14px;
|
|
17
|
+
--dashboard-control-label-gap:8px;
|
|
18
|
+
--dashboard-focus-outline-width:1px;
|
|
19
|
+
--dashboard-focus-outline-offset:2px;
|
|
20
|
+
--dashboard-focus-ring-size:4px;
|
|
21
|
+
--dashboard-input-focus-border:var(--house-style);
|
|
22
|
+
--dashboard-input-focus-ring:color-mix(in srgb,var(--house-style) 30%,transparent);
|
|
23
|
+
--dashboard-surface-base:#24242d;
|
|
24
|
+
--dashboard-surface-light:#fff;
|
|
25
|
+
--dashboard-page-surface-light:#e8edf4;
|
|
26
|
+
--dashboard-log-control-surface:#3b281b;
|
|
27
|
+
--dashboard-log-control-surface-light:#fff8ed;
|
|
28
|
+
--dashboard-expanded-content-surface:#24242d;
|
|
29
|
+
--dashboard-expanded-header-strength:14%;
|
|
30
|
+
--dashboard-modal-surface:#24242d;
|
|
31
|
+
--dashboard-modal-document-surface:#f7fbff;
|
|
32
|
+
--dashboard-modal-ink:#f7f3ee;
|
|
33
|
+
--dashboard-modal-muted:#c9d5e4;
|
|
34
|
+
--dashboard-modal-backdrop:#0d1018cc;
|
|
35
|
+
--dashboard-modal-radius:18px;
|
|
36
|
+
--dashboard-modal-panel-padding:24px;
|
|
37
|
+
--dashboard-modal-shadow:0 16px 50px #000a;
|
|
38
|
+
--operations-console-blue:#0a6b9d;
|
|
39
|
+
--operations-console-blue-ink:#fff;
|
|
40
|
+
--operations-console-icon-surface:#11131d;
|
|
41
|
+
--operations-console-mark-blue:#00b8f4;
|
|
42
|
+
}
|
|
43
|
+
html[data-theme="light"]{
|
|
44
|
+
--house-style-contrast:#653a13;
|
|
45
|
+
--house-style-surface:#fff4e6;
|
|
46
|
+
--dashboard-surface-base:#fff;
|
|
47
|
+
--dashboard-expanded-content-surface:#fff;
|
|
48
|
+
--dashboard-modal-surface:#fff;
|
|
49
|
+
--dashboard-modal-document-surface:#f7fbff;
|
|
50
|
+
--dashboard-modal-ink:#182230;
|
|
51
|
+
--dashboard-modal-muted:#415168;
|
|
52
|
+
--operations-console-icon-surface:#e8edf4;
|
|
53
|
+
--operations-console-blue-ink:#182230;
|
|
54
|
+
}
|
|
55
|
+
.log-controls label:has(#logSort){display:none}.log-table th.log-sortable{cursor:pointer;user-select:none}.log-table th.log-sortable::after{color:#8dc7ff;content:attr(data-sort-indicator);font-size:11px;margin-left:6px}.log-table th.log-sortable:focus-visible{outline:2px solid #8dc7ff;outline-offset:-2px}
|
|
56
|
+
.component-log-row,.prompt-history-row{cursor:pointer}.component-log-row{--dashboard-selected-row-color:var(--category-color,#f0b66a)}.prompt-history-row{--dashboard-selected-row-color:var(--category-color,#f29ab2)}.component-log-row:hover>td,.prompt-history-row:hover>td{background:color-mix(in srgb,var(--dashboard-selected-row-color) 16%,var(--dashboard-surface-base))}.component-log-row>td,.prompt-history-row>td{box-shadow:none!important;outline:0!important;user-select:none}.prompt-history-row,.prompt-history-row *{-webkit-touch-callout:none;-webkit-user-select:none;touch-action:manipulation;user-select:none}
|
|
57
|
+
.current-run .card:has(#indicator){background:#2a2530;border-left:3px solid #c7a6ff}.current-run .card:has(#predecessorRun),#currentDiagnostic,.technical-details--diagnostic{background:#302a24;border-left:3px solid #f0b66a}.current-run .card:has(#queueList),.current-run .card:has(#runId),.current-run .card:has(#executionMode){background:#28263a;border-left:3px solid #a78bfa}.current-run .card:has(#currentTime),.current-run .card:has(#executionEstimate){background:#202b34;border-left:3px solid #65c5d9}#processMetrics,#usage,#rateLimits{background:#20332f;border-left:3px solid #54d6a0}#commits{background:#202a36;border-left:3px solid #8dc7ff}#codexChat{background:#292336;border-left:3px solid #d0a4ff}
|
|
58
|
+
body{margin:0;background:#121217;color:#f7f3ee;font:14px system-ui;padding:max(18px,env(safe-area-inset-top)) calc(28px + env(safe-area-inset-right)) max(18px,env(safe-area-inset-bottom)) calc(28px + env(safe-area-inset-left))}button{font-weight:400}.dashboard-grid{display:grid;gap:10px}h1{font-size:28px;line-height:1.1;margin:0 0 18px}.card,.technical-details{background:#24242d;border-left:3px solid #c7a6ff;border-radius:14px;padding:14px;box-shadow:0 4px 18px #0005}.card p{margin:7px 0}.card--operation{background:#2a2530;border-left:3px solid #c7a6ff}.card--monitoring{background:#202b34;border-left:3px solid #65c5d9}.card--context{background:#28263a;border-left:3px solid #a78bfa}.card--resource{background:#20332f;border-left:3px solid #54d6a0}.card--evidence{background:#202a36;border-left:3px solid #8dc7ff}.card--diagnostic,.technical-details--diagnostic{background:#302a24;border-left:3px solid #f0b66a}.card--conversation{background:#292336;border-left:3px solid #d0a4ff}.current-run{background:#1d1d25;border:1px solid #3d3651;border-left:3px solid #c7a6ff;border-radius:18px;padding:14px;box-shadow:0 5px 24px #0006}.current-run__title{border-bottom:1px solid #3d3651;padding:2px 2px 13px}.current-run__title h2{font-size:18px;line-height:1.25;margin:3px 0 0}.current-run__grid{display:grid;gap:10px;margin-top:10px}.current-run .card{box-shadow:none}.field{margin:8px 0 0}.label{display:block;color:#c7a6ff;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;margin-bottom:2px}.estimate-primary{font-size:18px;font-weight:650;margin:8px 0 0}.estimate-meta{color:#b9b6c0;font-size:12px;line-height:1.35;margin:6px 0 0}.final-status{align-items:center;display:flex;gap:7px;margin:0 0 8px}.final-status .label{margin-bottom:0}.indicator--small{height:9px;width:9px}.footer{color:#b9b6c0;font-size:12px;margin:14px 0 4px;text-align:center}.copy,.chat-send{background:#353541;color:#f7f3ee;border:1px solid #57576a;border-radius:8px;padding:6px 9px;font:13px system-ui}.copy{float:right}.technical-details{cursor:pointer}.technical-details summary{list-style:none}.technical-details summary::-webkit-details-marker{display:none}.technical-details summary::before{content:"▸ ";color:#c7a6ff;display:inline-block;font-size:20px;line-height:1;vertical-align:-2px}.technical-details[open] summary::before{content:"▾ "}.technical-grid{display:grid;gap:10px;margin-top:12px}.codex-chat{grid-column:1 / -1}.chat-messages{display:grid;gap:9px;max-height:420px;overflow:auto;margin:12px 0;padding:2px}.chat-message{border-radius:9px;font-family:"Unispace",ui-monospace,monospace;max-width:min(880px,92%);padding:9px 10px;white-space:pre-wrap}.chat-message--user{background:#353541;justify-self:end}.chat-message--assistant{background:#202a36;border:1px solid #37506a;justify-self:start}.chat-message__role{display:block;font-size:11px;font-weight:700;letter-spacing:.04em;margin-bottom:4px;text-transform:uppercase}.chat-message--user .chat-message__role{color:#c7a6ff}.chat-message--assistant .chat-message__role{color:#8dc7ff}.chat-message__body{line-height:1.4}.chat-input{box-sizing:border-box;width:100%;min-height:110px;border:1px solid #57576a;border-radius:8px;background:#18181f;color:#f7f3ee;padding:8px;font:13px "Unispace",ui-monospace,monospace}.chat-status{color:#b9b6c0;font-size:12px}
|
|
59
|
+
strong{color:inherit}.status{display:flex;align-items:center;gap:8px}.queue-list{display:grid;gap:7px;list-style:none;margin:10px 0 0;padding:0;padding-inline-start:0}.queue-item{align-items:start;border-top:1px solid #3d3651;display:grid;gap:6px;grid-template-columns:1.25rem minmax(0,1fr);padding-left:0;padding-top:7px}.queue-item:first-child{border-top:0;padding-top:0}.queue-item__number{color:var(--category-color);font:700 12px ui-monospace,monospace;padding-top:1px;text-align:left}.queue-item__title{display:block;font-weight:600}.queue-item__meta{color:#b9b6c0;font:12px ui-monospace,monospace;margin-top:2px}.queue-empty{color:#b9b6c0;font-size:12px}.indicator{width:12px;height:12px;border-radius:50%;background:#9a9aa3;box-shadow:0 0 8px #9a9aa388;flex:none}.indicator--green{background:#51d88a;box-shadow:0 0 8px #51d88a88}.indicator--yellow{background:#f4d35e;box-shadow:0 0 8px #f4d35e88}.indicator--orange{background:#ff9f43;box-shadow:0 0 8px #ff9f4388}.indicator--red{background:#ff6b6b;box-shadow:0 0 8px #ff6b6b88}.indicator--running{background:transparent;border:3px solid #ff6b6b;border-right-color:transparent;box-sizing:border-box;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
|
|
60
|
+
pre{white-space:pre-wrap;word-break:break-word;margin:5px 0 0;font:12px ui-monospace,monospace}.log-controls{align-items:end;display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}.log-controls label{color:#c7a6ff;display:grid;font-size:11px;font-weight:700;gap:3px;letter-spacing:.04em;text-transform:uppercase}.log-controls input,.log-controls select{background:#18181f;border:1px solid #57576a;border-radius:7px;color:#f7f3ee;font:13px system-ui;padding:6px}.log-controls input{min-width:190px}.log-table-wrap{max-height:420px;overflow-x:auto;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;border:1px solid #3d3651;border-radius:9px;margin-top:10px}.log-table{border-collapse:collapse;font:12px ui-monospace,monospace;min-width:780px;width:max-content;user-select:text}.log-table th{background:#2d2d38;color:#c7a6ff;position:sticky;text-align:left;top:0;z-index:1}.log-table th,.log-table td{border-bottom:1px solid #3d3651;padding:7px 8px;vertical-align:top;white-space:nowrap;word-break:normal}.log-table tr:last-child td{border-bottom:0}.log-line-number{color:#92919b;text-align:right;white-space:nowrap;width:3.25rem;word-break:normal;user-select:none}.log-level{font-weight:700}.log-level--error{color:#ff8585}.log-level--warning{color:#f4d35e}.log-level--info{color:#8dc7ff}.log-level--debug{color:#b9b6c0}.log-empty{color:#b9b6c0;padding:10px}[hidden]{display:none}
|
|
61
|
+
#componentLogs{background:#302a24;border-left:3px solid #f0b66a}#componentLogs .card{background:#24242d;border-left:0}.technical-details:not(#componentLogs){background:#28263a;border-left:3px solid #a78bfa}.technical-details:not(#componentLogs) .card{background:#24242d;border-left:0}.codex-chat{cursor:default}.codex-chat summary{cursor:pointer;list-style:none}.codex-chat summary::-webkit-details-marker{display:none}.codex-chat summary::before{content:"▸ ";color:#d0a4ff}.codex-chat[open] summary::before{content:"▾ "}.codex-chat__details{border-top:1px solid #56446e;margin-top:10px;padding-top:2px}.card,.technical-details{--category-color:#c7a6ff}.card--monitoring,.current-run .card:has(#currentTime),.current-run .card:has(#executionEstimate){--category-color:#65c5d9}.card--context,.technical-details:not(#componentLogs),.current-run .card:has(#queueList),.current-run .card:has(#runId),.current-run .card:has(#executionMode){--category-color:#a78bfa}.card--resource,#processMetrics,#usage,#rateLimits{--category-color:#54d6a0}.card--evidence,#commits{--category-color:#8dc7ff}.card--diagnostic,.technical-details--diagnostic,#currentDiagnostic,#componentLogs,.current-run .card:has(#predecessorRun){--category-color:#f0b66a}.card--conversation,#codexChat{--category-color:#d0a4ff}.technical-details .card{--category-color:inherit}.card>strong,.technical-details>summary>strong,.card .label,.technical-details .label,.technical-details .log-controls label,.technical-details .log-table th,.technical-details summary::before{color:var(--category-color)}.technical-details .log-table th.log-sortable::after{color:var(--category-color)}.technical-details .log-table th.log-sortable:focus-visible{outline-color:var(--category-color)}
|
|
62
|
+
.chat-compose{align-items:stretch;display:flex;gap:8px}.chat-compose .chat-input{flex:1}.chat-compose .chat-send{align-items:center;display:flex;font-size:23px;justify-content:center;min-width:48px;padding:6px}.chat-compose .chat-send:focus-visible{outline:2px solid var(--category-color);outline-offset:2px}.chat-status{display:block;margin:7px 0 0}.skip-link{background:#fff;color:#121217;left:12px;padding:10px 14px;position:fixed;top:-60px;z-index:10}.skip-link:focus{top:12px}.sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;clip:rect(0,0,0,0);white-space:nowrap;width:1px}:where(button,input,select,textarea,summary,[role="button"],[tabindex]):focus-visible{outline:3px solid #fff;outline-offset:3px;box-shadow:0 0 0 6px #121217}button,.copy,.chat-send{min-height:44px;min-width:44px}@media (prefers-reduced-motion:reduce){*,::before,::after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}@media (forced-colors:active){:where(button,input,select,textarea,summary,[role="button"],[tabindex]):focus-visible{outline-color:Highlight;box-shadow:none}.indicator{forced-color-adjust:auto}}
|
|
63
|
+
.workspace-card>summary:focus-visible,#rateLimits>summary:focus-visible,.telemetry>summary:focus-visible,.platform-health>summary:focus-visible,.technical-details>summary:focus-visible,#codexChat>summary:focus-visible,.current-run>summary:focus-visible{outline:2px solid var(--category-color);outline-offset:3px;box-shadow:0 0 0 4px color-mix(in srgb,var(--category-color) 24%,transparent)}
|
|
64
|
+
#componentLogs{position:relative}#componentLogs>summary{padding-right:150px}#loadComponentLogs{position:absolute;right:14px;top:14px}#componentLogs .log-card-header strong{color:var(--category-color)}#componentLogs .log-table-wrap{border-color:color-mix(in srgb,var(--category-color) 55%,#3d3651)}#componentLogs .log-table th,#componentLogs .log-table td{border-bottom-color:color-mix(in srgb,var(--category-color) 30%,#3d3651)}.technical-details>summary>strong,.codex-chat>summary>strong{font-size:18px;line-height:1.25}.card>strong,.card>summary,.technical-details>summary{display:block;padding-bottom:10px}.dashboard-grid>#componentLogs,.dashboard-grid>#codexChat,.dashboard-grid>.technical-details:not(#componentLogs){margin-top:8px}.footer{align-items:baseline;display:flex;gap:6px;justify-content:center;overflow-x:auto;white-space:nowrap}.footer .label{display:inline;margin:0}.technical-details>summary>strong,.codex-chat>summary>strong{font-size:18px;font-weight:700;letter-spacing:.04em;line-height:1.25;text-transform:uppercase}.dashboard-grid>#componentLogs>summary::before,.dashboard-grid>#codexChat>summary::before,.dashboard-grid>.technical-details:not(#componentLogs)>summary::before{font-size:24px;padding-right:8px}#engineering-dashboard-content>.technical-details:not(#componentLogs){--category-color:#65c5d9;background:#202b34;border-left-color:#65c5d9}.footer .label{color:#65c5d9}#rateLimits{cursor:pointer}#rateLimits>summary{cursor:pointer;list-style:none}#rateLimits>summary::-webkit-details-marker{display:none}#rateLimits>summary::before{color:var(--category-color);content:"▸ ";display:inline-block;font-size:24px;line-height:1;padding-right:8px;vertical-align:-2px}#rateLimits[open]>summary::before{content:"▾ "}#rateLimits>summary>strong{font-size:18px;font-weight:700;letter-spacing:.04em;line-height:1.25;text-transform:uppercase}#engineering-dashboard-content>.technical-details:not(#componentLogs) .card,#componentLogs .card,.current-run .card{border:1px solid var(--category-color);border-left:3px solid var(--category-color)}.workspace-card{margin-bottom:16px;cursor:pointer}.workspace-card>summary{cursor:pointer;list-style:none}.workspace-card>summary::-webkit-details-marker{display:none}.workspace-card>summary::before{color:var(--category-color);content:"▸ ";display:inline-block;font-size:24px;line-height:1;padding-right:8px;vertical-align:-2px}.workspace-card[open]>summary::before{content:"▾ "}.workspace-card>summary>strong{font-size:18px;font-weight:700;letter-spacing:.04em;line-height:1.25;text-transform:uppercase}.dashboard-grid{gap:16px}.dashboard-grid>#componentLogs,.dashboard-grid>#codexChat,.dashboard-grid>.technical-details:not(#componentLogs){margin-top:0}
|
|
65
|
+
.workspace-card,#rateLimits,#componentLogs,#codexChat,#engineering-dashboard-content>.technical-details:not(#componentLogs),.telemetry,.platform-health,.current-run{box-shadow:0 10px 28px rgb(15 23 42 / .18),0 3px 9px rgb(15 23 42 / .12)}
|
|
66
|
+
.open-pr-check-repair{align-self:start;background:#3c351f;border:1px solid #f3d36a;border-radius:8px;color:#ffe7a0;cursor:pointer;font:600 13px system-ui;margin-top:10px;padding:9px 12px;width:max-content}.open-pr-check-repair::before{content:"↻";font-size:16px;font-weight:800;line-height:0;margin-right:7px;vertical-align:-1px}.open-pr-check-repair:hover:not(:disabled){background:#f3d36a;color:#2a2415}.open-pr-check-repair:focus-visible{outline:2px solid #f3d36a;outline-offset:2px}.open-pr-check-repair:disabled{cursor:wait;opacity:.65}
|
|
67
|
+
.open-pr-check-repair-progress{align-items:center;color:#ffe7a0;display:flex;flex-wrap:wrap;font:600 13px/1.35 system-ui;gap:7px;margin-top:10px}.open-pr-check-repair-progress__spinner{animation:spin .8s linear infinite;border:2px solid #f3d36a55;border-radius:50%;border-top-color:#f3d36a;display:inline-block;height:14px;width:14px}.open-pr-check-repair-progress a{color:#ffe7a0;font-weight:700;text-decoration-thickness:1px;text-underline-offset:3px}.open-pr-check-repair-progress a:hover{color:#fff4c2;text-decoration-thickness:2px}html[data-theme="light"] .open-pr-check-repair-progress{color:#725311}html[data-theme="light"] .open-pr-check-repair-progress a{color:#725311}
|
|
68
|
+
.workspace-branch-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.workspace-branch-main{background:#3c351f;border:1px solid var(--category-color);border-radius:8px;color:#ffe7a0;cursor:pointer;font:600 13px system-ui;padding:9px 12px}.workspace-branch-main::before{content:"⇄"}.workspace-branch-main::before{font-size:16px;font-weight:800;line-height:0;margin-right:7px;vertical-align:-1px}.workspace-branch-main:hover:not(:disabled){background:var(--category-color);color:#2a2415}.workspace-branch-main:disabled{cursor:wait;opacity:.7}.confirmation-modal__spinner{animation:spin .8s linear infinite;border:2px solid color-mix(in srgb,var(--modal-accent) 32%,transparent);border-radius:50%;border-top-color:var(--modal-accent);display:inline-block;height:16px;margin-top:14px;width:16px}.confirmation-modal__details{border-top:1px solid color-mix(in srgb,var(--modal-accent) 40%,transparent);display:grid;gap:8px;max-height:min(42vh,320px);margin:14px 0 0;overflow:auto;overscroll-behavior:contain;padding:12px 8px 0 24px}.confirmation-modal__details li{display:grid;gap:3px;overflow-wrap:anywhere}.confirmation-modal__details code{color:var(--modal-secondary-accent);font:600 12px ui-monospace,monospace}.confirmation-modal__details span{color:var(--dashboard-modal-muted);font-size:13px;line-height:1.35}.confirmation-modal__details a{color:var(--modal-accent);font-size:13px;font-weight:700;text-decoration-thickness:1px;text-underline-offset:3px;width:max-content}.confirmation-modal__details a:hover{color:var(--modal-secondary-accent)}html[data-theme="light"] .workspace-branch-main{background:#fff8dc;border-color:var(--category-color);color:#725311}
|
|
69
|
+
.workspace-database__content{align-items:start;display:flex;gap:10px;justify-content:space-between;min-width:0}.workspace-database__content pre{min-width:0}.workspace-database__download{flex:0 0 auto;position:static;text-decoration:none}@media(max-width:560px){.workspace-database__content{align-items:flex-start;flex-direction:column}.workspace-database__download{align-self:flex-end}}
|
|
70
|
+
#currentRun .reviewer-agents{grid-column:1/-1}.reviewer-agents__list{display:grid;gap:8px;grid-template-columns:repeat(auto-fit,minmax(min(100%,180px),1fr));margin-top:10px}.reviewer-agent{background:#202b34;border:1px solid var(--category-color);border-left-width:1px;border-radius:8px;min-width:0;padding:10px}.reviewer-agent__header{align-items:center;display:flex;gap:8px;justify-content:space-between}.reviewer-agent__name{color:var(--category-color);font-weight:700;margin:0 0 4px;overflow-wrap:anywhere}.reviewer-agent__status{align-items:center;border-radius:50%;display:inline-flex;flex:0 0 auto;justify-content:center}.reviewer-agent__status--running{border:2px solid color-mix(in srgb,var(--category-color) 34%,transparent);border-top-color:var(--category-color);height:14px;width:14px;animation:spin .8s linear infinite}.reviewer-agent__status--completed{background:#51d88a;color:#11261d;font:800 11px/1 system-ui;height:16px;width:16px;box-shadow:0 0 8px #51d88a66}.reviewer-agent__meta{color:#d3d0d8;font-size:13px;line-height:1.4;margin:0;overflow-wrap:anywhere}.reviewer-agent__meta+.reviewer-agent__meta{margin-top:3px}.workspace-open-prs{background:transparent;border:1px solid color-mix(in srgb,var(--category-color) 48%,transparent);border-radius:10px;margin-top:12px;padding:10px}.workspace-open-prs>strong{color:var(--category-color);display:block;font-size:12px;letter-spacing:.04em;text-transform:uppercase}.workspace-open-prs ul{display:grid;gap:8px;list-style:none;margin:8px 0 0;padding:0}.workspace-open-prs li{display:grid;gap:3px;min-width:0}.workspace-open-prs a{color:#ffe7a0;font-weight:700;overflow-wrap:anywhere;text-underline-offset:3px}.workspace-open-prs code{color:var(--modal-secondary-accent);font-size:12px;overflow-wrap:anywhere}.open-pr-owner-authorization{align-self:start;background:#1c5b42;border:1px solid #54d6a0;border-radius:7px;color:#f1fff7;cursor:pointer;font:400 12px/1.2 system-ui;min-height:30px;padding:6px 9px;width:max-content}.open-pr-owner-authorization:hover:not(:disabled){background:#54d6a0;color:#112a20}.open-pr-owner-authorization:focus-visible{outline:2px solid #54d6a0;outline-offset:2px}.open-pr-owner-authorization:disabled{cursor:wait;opacity:.65}
|
|
71
|
+
.telemetry{--category-color:#fb7185;background:#351f2a;border:1px solid var(--category-color);border-left-width:3px;border-radius:18px;box-shadow:0 5px 24px #0006;cursor:pointer;padding:14px}.telemetry>summary{border-bottom:1px solid var(--category-color);cursor:pointer;display:block;list-style:none;margin-bottom:12px;padding:2px 2px 13px}.telemetry>summary::-webkit-details-marker{display:none}.telemetry>summary::before{color:var(--category-color);content:"▸ ";display:inline-block;font-size:24px;line-height:1;padding-right:8px;vertical-align:-2px}.telemetry[open]>summary::before{content:"▾ "}.telemetry>summary>strong{color:var(--category-color);font-size:17px;font-weight:700;letter-spacing:.04em;line-height:1.25;text-transform:uppercase}.telemetry .category-description{color:#d8c3ca;font-size:14px;line-height:1.4;margin:12px 0}.telemetry-table{border-collapse:collapse;font:12px ui-monospace,monospace;width:100%}.telemetry-table th,.telemetry-table td{border-bottom:1px solid #fb718555;padding:7px;text-align:left;white-space:nowrap}.telemetry-table th{color:var(--category-color)}.telemetry-scroll{overflow-x:auto}.telemetry-empty{color:#b9b6c0;margin:0}
|
|
72
|
+
.platform-health{--category-color:#a3e635;background:#29331d;border:1px solid var(--category-color);border-left-width:3px;border-radius:18px;box-shadow:0 5px 24px #0006;cursor:pointer;padding:14px}.platform-health>summary{border-bottom:1px solid var(--category-color);cursor:pointer;display:block;list-style:none;margin-bottom:12px;padding:2px 2px 13px}.platform-health>summary::-webkit-details-marker{display:none}.platform-health>summary::before{color:var(--category-color);content:"▸ ";display:inline-block;font-size:24px;line-height:1;padding-right:8px;vertical-align:-2px}.platform-health[open]>summary::before{content:"▾ "}.platform-health>summary>strong{color:var(--category-color);font-size:17px;font-weight:700;letter-spacing:.04em;line-height:1.25;text-transform:uppercase}.platform-health .category-description{color:#d4ddc7;font-size:14px;line-height:1.4;margin:12px 0}.platform-health__summary{color:#d4ddc7;font-size:12px;margin-left:8px}.platform-health__components{display:grid;gap:8px}.platform-health__component{align-items:center;background:#1e2518;border:1px solid color-mix(in srgb,var(--category-color) 64%,transparent);border-radius:9px;column-gap:10px;display:grid;grid-template-columns:auto 1fr;padding:9px 10px;row-gap:3px}.platform-health__component .indicator{grid-row:span 2}.platform-health__component-name{color:var(--category-color);font-weight:700}.platform-health__component-detail{color:#d4ddc7;font-size:12px;grid-column:2;line-height:1.35}.platform-health__empty{color:#d4ddc7;margin:0}.platform-health__component[data-health="false"]{--category-color:#ff8585;background:#351f24}
|
|
73
|
+
#codexChat .chat-input,#codexChat .chat-send{border-color:#d0a4ff}
|
|
74
|
+
#codexChat .codex-chat__details{position:relative}#codexChat .codex-chat__details>.estimate-meta{padding-right:52px}
|
|
75
|
+
.component-info{align-items:center;background:transparent;border:1px solid var(--category-color);border-radius:50%;color:var(--category-color);cursor:pointer;display:grid;font:700 15px/1 system-ui;height:32px;justify-items:center;padding:0;width:32px}.component-info:hover{background:color-mix(in srgb,var(--category-color) 16%,transparent)}.platform-health__component{grid-template-columns:auto 1fr auto}.platform-health__component-detail{grid-column:2}.component-modal{background:#15151de8;border:0;height:100dvh;max-height:none;max-width:none;padding:18px;width:100vw}.component-modal[open]{display:grid;place-items:center}.component-modal__panel{border:2px solid var(--modal-accent);box-sizing:border-box;max-height:min(700px,calc(100dvh - 36px));max-width:680px;overflow:auto;padding:20px;position:relative;width:min(680px,calc(100vw - 36px))}.component-modal dl{display:grid;gap:10px;margin:0}.component-modal dt{color:var(--modal-accent);font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase}.component-modal dd{margin:3px 0 0;overflow-wrap:anywhere}.component-modal__endpoint{color:var(--modal-accent);overflow-wrap:anywhere;text-decoration:underline;text-underline-offset:2px}.component-modal__restart{background:#253b17;border:1px solid var(--modal-accent);border-radius:8px;color:#e6ffc0;cursor:pointer;font:14px system-ui;margin-top:18px;padding:9px 12px}.component-modal__restart + .dashboard-modal-shell__action{margin-left:10px;margin-top:18px}.component-modal__restart:disabled{cursor:wait;opacity:.7}.component-modal__status{color:#d4ddc7;font-size:13px;margin:10px 0 0}
|
|
76
|
+
#chatInput:focus-visible{outline:2px solid var(--house-style);outline-offset:2px;box-shadow:0 0 0 4px var(--dashboard-input-focus-ring)}
|
|
77
|
+
:where(input,select,textarea):focus-visible{outline:2px solid var(--category-color);outline-offset:2px;box-shadow:0 0 0 4px color-mix(in srgb,var(--category-color) 24%,transparent)}
|
|
78
|
+
#reportContent{max-height:50dvh;overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.technical-details>summary>strong,.codex-chat>summary>strong,#rateLimits>summary>strong,.workspace-card>summary>strong{font-size:17px}
|
|
79
|
+
#rateLimits>summary>strong{color:var(--category-color)}
|
|
80
|
+
#loadComponentLogs{background:#4a321f;border-color:#f0b66a;color:#fff0dc}
|
|
81
|
+
#engineering-dashboard-content>.technical-details:not(#componentLogs),#engineering-dashboard-content>.technical-details:not(#componentLogs) .card{border-left-width:1px}
|
|
82
|
+
.chat-message--user{background:#243648;border:1px solid #8dc7ff}.chat-message--assistant{background:#34283f;border-color:#d0a4ff}
|
|
83
|
+
#reportContent,#reportAnalysisContent{box-sizing:border-box;max-height:50dvh;overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;background:#18181f;border:1px solid var(--category-color);border-radius:8px;padding:10px;user-select:text}.markdown-document{font-family:system-ui,sans-serif;line-height:1.45}.markdown-document p{margin:0 0 10px}.markdown-document p:last-child{margin-bottom:0}.markdown-document h3,.markdown-document h4{color:var(--category-color);margin:0 0 10px}.markdown-document ul,.markdown-document ol{margin:0 0 10px;padding-left:24px}.markdown-document code,.markdown-document pre{font-family:"Unispace",ui-monospace,monospace}.markdown-document code{background:#24242d;border-radius:4px;padding:1px 4px}.markdown-document pre{background:#24242d;border-radius:6px;margin:0 0 10px;overflow:auto;padding:8px}
|
|
84
|
+
.markdown-copy-wrap{position:relative}.markdown-copy-wrap .markdown-document,.markdown-copy-wrap>#reportContent,.markdown-copy-wrap>#reportAnalysisContent{padding-right:108px}.copy.copy--glyph,.download.download--glyph{align-items:center;background:#24242de6;border-color:var(--category-color);border-radius:50%;box-shadow:0 2px 8px #0008;display:flex;float:none;font-size:0;height:32px;justify-content:center;min-height:32px;min-width:32px;padding:0;position:absolute;top:10px;width:32px;z-index:2}.copy.copy--glyph{right:14px}.download.download--glyph{right:54px}.copy.copy--glyph::before{content:"⧉";font:20px/1 system-ui}.download.download--glyph::before{content:"⇩";font:20px/1 system-ui}.copy.copy--glyph:hover,.download.download--glyph:hover{background:#353541}.copy.copy--glyph:focus-visible,.download.download--glyph:focus-visible{outline-color:var(--category-color)}
|
|
85
|
+
.chat-compose .chat-send{background:#121217;border-color:#d0a4ff;color:#d0a4ff}
|
|
86
|
+
#currentRun .current-run__title>.label{display:inline;color:var(--category-color);font-size:17px;font-weight:700;letter-spacing:.04em;line-height:1.25;text-transform:uppercase}.current-run__prompt-heading{margin:8px 0 0}.current-run__prompt-heading h2{margin:0}.execution-identity__run-id{align-items:center;display:flex;flex-wrap:wrap;gap:7px}.execution-identity__run-id>.label{flex-basis:100%;margin-bottom:0}.execution-identity__run-id>.indicator{margin:0}.current-run__category-description{color:#d6bdca;font-size:14px;line-height:1.4;margin:0 0 14px}#currentRun .current-run__grid{margin-top:0}#currentRun .card:has(#currentTime),#currentRun .card:has(#executionEstimate),#currentRun .card:has(#runId),#currentRun .card:has(#executionMode){--category-color:#f472b6;background:#241b25;border-color:#f472b6}
|
|
87
|
+
#report .field,#reportAnalysis .field{background:#18181f;border:1px solid var(--category-color);border-radius:8px;padding:10px}
|
|
88
|
+
.chat-message__body{font-family:system-ui,sans-serif}.chat-message__body p{margin:0 0 8px}.chat-message__body p:last-child{margin-bottom:0}.chat-message__body h3,.chat-message__body h4{color:#d0a4ff;margin:0 0 8px}.chat-message__body ul,.chat-message__body ol{margin:0 0 8px;padding-left:22px}.chat-message__body code,.chat-message__body pre{font-family:"Unispace",ui-monospace,monospace}.chat-message__body code{background:#18181f;border-radius:4px;padding:1px 4px}.chat-message__body pre{background:#18181f;border-radius:6px;margin:0 0 8px;overflow:auto;padding:8px}
|
|
89
|
+
#componentLogs>summary{padding-right:0}
|
|
90
|
+
.chat-message--user .chat-message__role{color:#8dc7ff}
|
|
91
|
+
.chat-message--assistant .chat-message__role{color:#d0a4ff}.chat-message__timestamp{color:var(--dashboard-modal-muted,#b9b6c0);display:block;font:12px/1.3 system-ui,sans-serif;margin:-1px 0 8px}
|
|
92
|
+
.chat-compose{display:block;position:relative}.chat-compose .chat-input{padding:14px 68px 68px 16px}.chat-compose .chat-send{background:#34283f;border-color:#d0a4ff;border-radius:50%;bottom:14px;color:#eadcff;height:44px;min-width:44px;padding:0;position:absolute;right:14px;width:44px;z-index:1}.chat-compose .chat-send:hover{background:#463653}.chat-compose .chat-send:disabled{cursor:wait;opacity:.7}
|
|
93
|
+
#codexChat label[for="chatInput"]{margin-bottom:10px}.chat-input{font:13px system-ui,sans-serif}
|
|
94
|
+
.chat-message{padding-right:46px;position:relative}.chat-message__copy{align-items:center;background:transparent;border:1px solid currentColor;border-radius:50%;color:inherit;cursor:pointer;display:flex;font:16px/1 system-ui;height:25px;justify-content:center;min-height:25px;min-width:25px;opacity:.72;padding:0;position:absolute;right:8px;top:8px;width:25px}.chat-message__copy:hover{background:#ffffff1a;opacity:1}.chat-message__copy:focus-visible{box-shadow:0 0 0 3px #d0a4ff55;outline:1px solid currentColor;outline-offset:2px}.chat-message--user .chat-message__copy{color:#8dc7ff}.chat-message--assistant .chat-message__copy{color:#d0a4ff}
|
|
95
|
+
.workspace-card{--category-color:#f3d36a;background:#302d20;border-left-color:#f3d36a}
|
|
96
|
+
#engineering-dashboard-content>.technical-details:not(#componentLogs){border-left-width:3px}
|
|
97
|
+
#componentLogs .card{border-left-width:1px}
|
|
98
|
+
.workspace-card>summary,#rateLimits>summary,#componentLogs>summary,#codexChat>summary,#engineering-dashboard-content>.technical-details:not(#componentLogs)>summary{border-bottom:1px solid var(--category-color);margin-bottom:12px;padding-bottom:14px}
|
|
99
|
+
.category-description{color:#b9b6c0;font-size:14px;line-height:1.4;margin:0 0 14px}
|
|
100
|
+
.queue-blocker--error{align-items:center;background:#4a202b;border:1px solid #ff718f;border-radius:10px;color:#ffe9ef;display:flex;gap:12px;justify-content:space-between;margin:0 0 14px;padding:10px 12px}.queue-blocker--error p{color:inherit;font-size:13px;line-height:1.4;margin:0}.queue-blocker__repair{background:#3b281b;border:1px solid #f0b66a;border-radius:8px;color:#fff0dc;flex:none;font:13px system-ui;min-height:32px;padding:8px 10px}.queue-blocker__repair:hover:not(:disabled){background:#f0b66a!important;border-color:#f0b66a!important;color:#201812!important}.queue-blocker__repair:disabled{cursor:wait;opacity:.7}html[data-theme="light"] .queue-blocker--error{background:#fff0f4;color:#8c243b}html[data-theme="light"] .queue-blocker__repair{background:#fff8ef;border-color:#d68b23;color:#643a13}html[data-theme="light"] .queue-blocker__repair:hover:not(:disabled){background:#f0b66a!important;border-color:#f0b66a!important;color:#201812!important}
|
|
101
|
+
.workspace-card,#rateLimits,#componentLogs,#codexChat,#engineering-dashboard-content>.technical-details:not(#componentLogs){border:1px solid var(--category-color);border-left-width:3px}
|
|
102
|
+
.rate-limit-reset{background:#173c31;border:1px solid #54d6a0;border-radius:8px;color:#d9fff0;font:13px system-ui;margin-top:12px;padding:8px 10px}.rate-limit-reset:disabled{cursor:wait;opacity:.7}.rate-limit-reset-status{color:#b9b6c0;font-size:12px;margin:8px 0 0}
|
|
103
|
+
.rate-limit-update-status{color:#b9b6c0;font-size:12px;margin:8px 0 0}
|
|
104
|
+
.rate-limit-provider-path code{display:block;overflow-wrap:anywhere;white-space:pre-wrap}
|
|
105
|
+
.predecessor-retry{background:#3b281b;border:1px solid #f0b66a;border-radius:8px;color:#fff0dc;font:13px system-ui;margin-top:12px;padding:8px 10px}.predecessor-retry:hover:not(:disabled){background:#543721}.predecessor-retry:disabled{cursor:wait;opacity:.7}.predecessor-retry-status{color:#d6c5a8;font-size:12px;margin:8px 0 0}
|
|
106
|
+
.estimate-primary{font-size:inherit}#executionEstimateMeta{white-space:pre-line}
|
|
107
|
+
.workspace-card>summary>strong,#rateLimits>summary>strong,#componentLogs>summary>strong,#codexChat>summary>strong,#engineering-dashboard-content>.technical-details:not(#componentLogs)>summary>strong{font-size:17px;line-height:1.25}.workspace-card>summary,#rateLimits>summary,#componentLogs>summary,#codexChat>summary,#engineering-dashboard-content>.technical-details:not(#componentLogs)>summary{margin-bottom:8px;padding-bottom:10px}
|
|
108
|
+
.workspace-card>summary>strong,#rateLimits>summary>strong,#componentLogs>summary>strong,#codexChat>summary>strong,#engineering-dashboard-content>.technical-details:not(#componentLogs)>summary>strong{color:var(--category-color)}
|
|
109
|
+
.workspace-card>summary,#rateLimits>summary,#componentLogs>summary,#codexChat>summary,#engineering-dashboard-content>.technical-details:not(#componentLogs)>summary,.telemetry>summary,.platform-health>summary{box-sizing:border-box;margin-bottom:8px;min-height:35px;padding:0 0 10px}.workspace-card>summary>strong,#rateLimits>summary>strong,#componentLogs>summary>strong,#codexChat>summary>strong,#engineering-dashboard-content>.technical-details:not(#componentLogs)>summary>strong,.telemetry>summary>strong,.platform-health>summary>strong{font-size:17px;line-height:1.25}
|
|
110
|
+
.workspace-card>summary::before,#rateLimits>summary::before,#componentLogs>summary::before,#codexChat>summary::before,#engineering-dashboard-content>.technical-details:not(#componentLogs)>summary::before,.telemetry>summary::before,.platform-health>summary::before{line-height:1;vertical-align:-2px}
|
|
111
|
+
#currentRun{--category-color:#f472b6;background:#321d2d;border:1px solid var(--category-color);border-left-width:3px;cursor:pointer}#currentRun>summary{cursor:pointer;list-style:none}#currentRun>summary::-webkit-details-marker{display:none}#currentRun>summary::before{color:var(--category-color);content:"▸ ";display:inline-block;font-size:24px;line-height:1;padding-right:8px;vertical-align:-2px}#currentRun[open]>summary::before{content:"▾ "}#currentRun[open]>summary{border-bottom:1px solid var(--category-color);margin-bottom:12px;padding-bottom:14px}#currentRun .card{--category-color:#f472b6;background:#241b25;border:1px solid var(--category-color);border-left-width:1px}#currentRun .current-run__grid>.card{border-left:1px solid var(--category-color)!important}#currentRun .card strong,#currentRun .label,#currentRun .queue-item__title{color:var(--category-color)}#currentRun .queue-item{border-top-color:#6e385d}#currentRun .estimate-meta{color:#d6bdca}
|
|
112
|
+
.log-card-header{align-items:center;display:flex;gap:12px;justify-content:space-between;margin-bottom:10px}.log-card-actions{align-items:center;display:flex;gap:8px}.log-card-actions .dashboard-action{position:static}.clear-component-log:disabled{cursor:wait;opacity:.7}
|
|
113
|
+
.copy.copy--glyph:hover,.download.download--glyph:hover,.prompt-history-report:hover,.prompt-history-analysis:hover,.report-view-modal__close:hover{background:var(--category-color);color:#17151a}
|
|
114
|
+
button:not(.theme-toggle):not(.section-state-toggle):hover:not(:disabled){background:var(--category-color,var(--house-style));color:#17151a}
|
|
115
|
+
#engineering-dashboard-content :is(button,input,select,textarea,[tabindex]){scroll-margin-top:calc(var(--dashboard-sticky-header-height,220px) + 16px)}.log-pagination{align-items:center;display:flex;gap:8px;justify-content:flex-end;margin-top:10px;min-height:32px}.log-pagination__summary{color:#d6c5a8;font-size:12px;margin-right:auto}.log-pagination button{background:#33281d;border:1px solid var(--category-color);border-radius:7px;color:#fff0dc;font:12px system-ui;min-height:32px;padding:5px 9px}.log-pagination button:disabled{cursor:not-allowed;opacity:.45}
|
|
116
|
+
#pullRefresh{align-items:center;background:var(--house-style-surface);border:1px solid var(--house-style);border-radius:999px;box-shadow:0 8px 24px #0009;color:var(--house-style-contrast);display:flex;font:13px system-ui;gap:8px;left:50%;opacity:0;padding:8px 13px;pointer-events:none;position:fixed;top:10px;transform:translate(-50%,-80px);transition:opacity .15s ease,transform .15s ease;z-index:20}#pullRefresh.pull-refresh--visible{opacity:1;transform:translate(-50%,0)}#pullRefresh::before{content:"↓";font-size:18px;line-height:1}@media (prefers-reduced-motion:reduce){#pullRefresh{transition:none}}
|
|
117
|
+
#dashboardSplash{align-items:center;background:#101015;display:flex;inset:0;justify-content:center;padding:24px;position:fixed;text-align:center;transition:opacity .25s ease,visibility .25s ease;z-index:100}#dashboardSplash[hidden]{display:none}body.dashboard-ready #dashboardSplash{opacity:0;pointer-events:none;visibility:hidden}.dashboard-splash__content{align-items:center;display:flex;flex-direction:column;gap:12px;max-width:360px}.dashboard-splash__title{color:#f7f3ee;font:700 clamp(28px,8vw,42px)/1.1 system-ui;margin:0}.dashboard-splash__version{color:#b79aff;font:600 14px/1.3 system-ui;letter-spacing:.04em;text-transform:uppercase}.dashboard-splash__loading{color:#c8c4cc;font:14px system-ui}.dashboard-splash__spinner{animation:dashboard-splash-spin .85s linear infinite;border:3px solid #332a44;border-radius:50%;border-top-color:#b79aff;height:34px;width:34px}@keyframes dashboard-splash-spin{to{transform:rotate(360deg)}}
|
|
118
|
+
.dashboard-splash__icon{border-radius:18px;display:block;height:72px;width:72px}
|
|
119
|
+
#copyToast{align-items:center;background:var(--house-style-surface);border:1px solid var(--house-style);border-radius:999px;box-shadow:0 8px 24px #0009;box-sizing:border-box;color:var(--house-style-contrast);display:flex;font:600 13px system-ui;gap:8px;inset:auto;inset-block-end:max(20px,env(safe-area-inset-bottom));inset-inline-start:50%;margin:0;max-width:calc(100vw - 32px);opacity:0;padding:10px 15px;pointer-events:none;position:fixed;transform:translate(-50%,16px);transition:opacity .16s ease,transform .16s ease;z-index:110}#copyToast::before{content:attr(data-toast-glyph);font:700 17px/1 system-ui}#copyToast.copy-toast--visible{opacity:1;transform:translate(-50%,0)}
|
|
120
|
+
body{overflow-x:hidden}.dashboard-grid,.dashboard-grid>*{min-width:0}.telemetry,.platform-health{min-width:0}.telemetry-scroll{max-width:100%;-webkit-overflow-scrolling:touch}.platform-health__component{min-width:0}.platform-health__component-detail{overflow-wrap:anywhere}.dashboard-titlebar{align-items:center;background:#121217;box-shadow:0 10px 18px #121217;box-sizing:border-box;display:flex;gap:14px;justify-content:space-between;margin:0 0 18px;max-width:100%;padding:8px 16px 12px;position:sticky;top:0;width:100%;z-index:15}.dashboard-titlebar:has(+.dashboard-status-banner:not([hidden])){margin-bottom:0}.dashboard-status-banner{align-items:flex-start;box-sizing:border-box;display:flex;gap:8px;margin:0 0 18px;padding:10px 16px;position:sticky;top:0;width:100%;z-index:14}.dashboard-status-banner[hidden]{display:none}.dashboard-status-banner--usage-limit,.dashboard-status-banner--usage-warning,.dashboard-status-banner--usage-critical{box-shadow:0 10px 18px #121217;font:600 13px/1.45 system-ui}.dashboard-status-banner--usage-limit{background:color-mix(in srgb,var(--house-style) 24%,#241b16);border-bottom:1px solid var(--house-style);color:#fff0dc}.dashboard-status-banner--usage-limit strong{color:var(--house-style)}.dashboard-status-banner--usage-warning{background:#5b4316;border-bottom:1px solid #f4c34f;color:#fff4d6}.dashboard-status-banner--usage-warning strong{color:#ffd768}.dashboard-status-banner--usage-critical{background:#5b1d27;border-bottom:1px solid #ff6b7d;color:#ffe9ed}.dashboard-status-banner--usage-critical strong{color:#ff99a7}.dashboard-status-banner strong{flex:none}.dashboard-status-banner span{min-width:0}.dashboard-titlebar__brand{align-items:center;display:flex;flex:1 1 260px;gap:10px;min-width:0}.dashboard-titlebar h1{font-size:28px;line-height:1.1;margin:0;overflow-wrap:anywhere}.dashboard-titlebar__actions{align-items:center;display:flex;flex:none;gap:12px}.auto-refresh-toggle{align-items:center;color:#b9b6c0;cursor:pointer;display:flex;flex:none;font-size:12px;gap:7px;white-space:nowrap}.auto-refresh-toggle input{accent-color:#54d6a0;height:18px;margin:0;width:18px}.section-state-toggle{align-items:center;background:transparent;border:0;color:#b9b6c0;cursor:pointer;display:flex;font:12px system-ui;gap:7px;margin:0;min-height:44px;min-width:44px;padding:0;position:relative}.section-state-toggle::before{background:#4a4a55;border-radius:999px;content:"";height:24px;transition:background .18s ease;width:42px}.section-state-toggle::after{background:#f7f3ee;border-radius:50%;box-shadow:0 1px 3px #0008;content:"";height:18px;left:3px;position:absolute;top:13px;transform:translateX(0);transition:transform .18s ease;width:18px}.section-state-toggle[aria-checked="true"]::before{background:#8dc7ff}.section-state-toggle[aria-checked="true"]::after{transform:translateX(18px)}.section-state-toggle:focus-visible{box-shadow:none;outline:2px solid #8dc7ff;outline-offset:3px}@media (max-width:1400px){.dashboard-titlebar{align-items:flex-start;flex-wrap:wrap}.dashboard-titlebar__actions{flex:1 1 100%;flex-wrap:wrap;justify-content:flex-end}}@media (max-width:760px){.dashboard-titlebar__actions{justify-content:flex-start}}@media (max-width:620px){.dashboard-status-banner{align-items:stretch;flex-direction:column;margin-bottom:12px;padding:10px 14px}.dashboard-titlebar h1{font-size:25px}.auto-refresh-toggle span,.section-state-toggle__label{display:none}.dashboard-titlebar__actions{gap:8px}}html[data-theme="light"] .dashboard-status-banner--usage-limit{background:color-mix(in srgb,var(--house-style) 18%,#fff);color:#643a13}html[data-theme="light"] .dashboard-status-banner--usage-warning{background:#fff4d6;color:#654600}html[data-theme="light"] .dashboard-status-banner--usage-critical{background:#ffe8eb;color:#7d1726}
|
|
121
|
+
.dashboard-titlebar__brand{align-items:center;display:flex;gap:10px;min-width:0}.dashboard-app-icon{border-radius:9px;display:block;flex:none;height:32px;width:32px}@media (max-width:620px){.dashboard-app-icon{height:28px;width:28px}}
|
|
122
|
+
.inbox-queue{--category-color:#818cf8;background:#25243a;border:2px solid var(--category-color);border-radius:18px;box-shadow:0 5px 24px #0006;cursor:pointer;padding:14px}.inbox-queue>summary{border-bottom:1px solid var(--category-color);box-sizing:border-box;cursor:pointer;display:block;list-style:none;margin-bottom:8px;min-height:35px;padding:0 40px 10px 0;position:relative}.inbox-queue>summary::-webkit-details-marker{display:none}.inbox-queue>summary::before{color:var(--category-color);content:"▸ ";font-size:24px;line-height:1;margin:0;padding:0;position:absolute;right:0;top:0;vertical-align:-2px}.inbox-queue[open]>summary::before{content:"▾ "}.inbox-queue>summary>strong{color:var(--category-color);font-size:17px;font-weight:700;letter-spacing:.04em;line-height:1.25;text-transform:uppercase}.inbox-queue .category-description{color:#c9c7e2;font-size:14px;line-height:1.4;margin:12px 0}.inbox-queue .estimate-meta{color:#c9c7e2}.inbox-queue .queue-item{border-top-color:#48446f}
|
|
123
|
+
.prompt-history{--category-color:#f29ab2;background:#36232d;border:2px solid var(--category-color);border-radius:18px;box-shadow:0 5px 24px #0006;cursor:pointer;padding:14px}.prompt-history>summary{border-bottom:1px solid var(--category-color);box-sizing:border-box;cursor:pointer;display:block;list-style:none;margin-bottom:8px;min-height:35px;padding:0 40px 10px 0;position:relative}.prompt-history>summary::-webkit-details-marker{display:none}.prompt-history>summary::before{color:var(--category-color);content:"▸ ";font-size:24px;line-height:1;margin:0;padding:0;position:absolute;right:0;top:0;vertical-align:-2px}.prompt-history[open]>summary::before{content:"▾ "}.prompt-history>summary>strong{color:var(--category-color);font-size:17px;font-weight:700;letter-spacing:.04em;line-height:1.25;text-transform:uppercase}.prompt-history .category-description{color:#dfc3ce;font-size:14px;line-height:1.4;margin:12px 0}.prompt-history .log-controls label,.prompt-history .log-table th{color:var(--category-color)}.prompt-history .log-table-wrap{border-color:color-mix(in srgb,var(--category-color) 55%,#3d3651)}.prompt-history .log-table th,.prompt-history .log-table td{border-bottom-color:color-mix(in srgb,var(--category-color) 30%,#3d3651)}.prompt-history .log-table th.log-sortable::after{color:var(--category-color)}.prompt-history .log-table th.log-sortable:focus-visible{outline:2px solid var(--category-color);outline-offset:-2px}.prompt-history .log-pagination button{background:#442b37;border-color:var(--category-color);color:#ffe9ef}.prompt-history-report,.prompt-history-analysis{align-items:center;background:transparent;border:1px solid var(--category-color);border-radius:50%;color:var(--category-color);display:inline-flex;font:16px/1 system-ui;justify-content:center;min-height:32px;min-width:32px;padding:0}.prompt-history-report:hover,.prompt-history-analysis:hover{background:var(--category-color);color:#271923}.prompt-history-analysis-actions{align-items:center;display:flex;gap:6px}.prompt-history-status{font-weight:700}.prompt-history-status--complete{color:#54d6a0}.prompt-history-status--blocked{color:#f0b66a}.prompt-history-status--failed{color:#ff718f}.report-view-modal{background:transparent;border:0;max-height:90vh;max-width:min(1000px,94vw);padding:0;width:min(1000px,94vw)}.report-view-modal::backdrop{background:#0d1018bb}.report-view-modal__panel{--category-color:#8dc7ff;background:#24242d;border:2px solid var(--category-color);border-radius:18px;box-shadow:0 16px 50px #000a;color:#f7f3ee;max-height:90vh;overflow:auto;padding:18px;position:relative}.report-view-modal__title{color:var(--category-color);font-size:20px;margin:0 80px 14px 0}.report-view-modal__actions{display:flex;gap:8px;position:absolute;right:16px;top:14px}.report-view-modal__actions .copy,.report-view-modal__actions .download{position:static}.report-view-modal__content{min-height:80px;padding:12px}.report-view-modal__close{background:#24242d;border:1px solid var(--category-color);border-radius:50%;color:var(--category-color);font:22px/1 system-ui;height:32px;min-height:32px;min-width:32px;padding:0}.report-view-modal__close:hover{background:var(--category-color);color:#17151a}
|
|
124
|
+
.prompt-history-details{align-items:center;background:transparent;border:1px solid #8dc7ff;border-radius:50%;color:#8dc7ff;display:inline-flex;font:700 19px/1 system-ui;justify-content:center;min-height:32px;min-width:32px;padding:0}.prompt-history-details:hover{background:#8dc7ff!important;border-color:#8dc7ff!important;color:#172331!important}.prompt-history-run-id-field{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.prompt-history-run-id-field .label{flex-basis:100%}.prompt-history-run-id-field pre{margin:0}.prompt-history-run-id-copy{align-items:center;background:transparent;border:1px solid #8dc7ff;border-radius:50%;color:#8dc7ff;display:inline-flex;font:700 16px/1 system-ui;justify-content:center;min-height:28px;min-width:28px;padding:0}.prompt-history-run-id-copy:hover{background:#8dc7ff!important;border-color:#8dc7ff!important;color:#172331!important}
|
|
125
|
+
#promptHistory .log-table{width:100%}#promptHistory .log-table th:nth-child(2),#promptHistory .log-table td:nth-child(2){width:100%}
|
|
126
|
+
/* Desktop history fills its available surface; the title absorbs spare width
|
|
127
|
+
instead of creating a needless horizontal scrollbar. Mobile preserves each
|
|
128
|
+
column as a readable table and scrolls the complete table as one surface. */
|
|
129
|
+
@media (min-width:621px){
|
|
130
|
+
#promptHistory .log-table{min-width:0;table-layout:fixed;width:100%}
|
|
131
|
+
#promptHistory .log-table th:nth-child(1),#promptHistory .log-table td:nth-child(1){width:6rem}
|
|
132
|
+
#promptHistory .log-table th:nth-child(3),#promptHistory .log-table td:nth-child(3){width:18rem}
|
|
133
|
+
#promptHistory .log-table th:nth-child(4),#promptHistory .log-table td:nth-child(4),#promptHistory .log-table th:nth-child(5),#promptHistory .log-table td:nth-child(5),#promptHistory .log-table th:nth-child(6),#promptHistory .log-table td:nth-child(6),#promptHistory .log-table th:nth-child(8),#promptHistory .log-table td:nth-child(8){width:4rem}
|
|
134
|
+
#promptHistory .log-table th:nth-child(7),#promptHistory .log-table td:nth-child(7){width:24rem}
|
|
135
|
+
#promptHistory .log-table th:nth-child(2),#promptHistory .log-table td:nth-child(2){overflow-wrap:anywhere;white-space:normal;width:auto}
|
|
136
|
+
}
|
|
137
|
+
.history-scroll-hint{display:none}@media (max-width:620px){#promptHistory .log-table{min-width:1080px;table-layout:auto;width:max-content}.history-scroll-hint{align-items:center;color:#dfc3ce;display:flex;font-size:12px;gap:6px;margin:10px 0 0}.history-scroll-hint::before{content:"↔";font-size:16px;line-height:1}#promptHistory .log-table th:first-child,#promptHistory .log-table td:first-child{left:0;position:sticky}#promptHistory .log-table th:first-child{background:#36232d;z-index:3}#promptHistory .log-table td:first-child{background:#36232d;box-shadow:2px 0 8px #1a0f14b3;z-index:1}#promptHistory .prompt-history-row:hover>td:first-child{background:color-mix(in srgb,var(--dashboard-selected-row-color) 16%,transparent)!important}html[data-theme="light"] .history-scroll-hint{color:#7d4057}html[data-theme="light"] #promptHistory .log-table th:first-child{background:#fff1f5}html[data-theme="light"] #promptHistory .log-table td:first-child{background:#fff1f5;box-shadow:2px 0 8px #6f345a2e}}
|
|
138
|
+
/* Run IDs are the stable rose anchor of history rows at every table width.
|
|
139
|
+
They must not inherit the neutral or alternating row surface on wide screens. */
|
|
140
|
+
#promptHistory .log-table th:first-child{background:#36232d}
|
|
141
|
+
#promptHistory .log-table td:first-child{background:#36232d}
|
|
142
|
+
/* A sticky cell needs an opaque surface while its row is hovered; transparent
|
|
143
|
+
colour mixing otherwise lets scrolled columns show through the Run-ID. */
|
|
144
|
+
@media (max-width:620px){#promptHistory .prompt-history-row:hover>td:first-child{background:color-mix(in srgb,var(--dashboard-selected-row-color) 16%,var(--dashboard-surface-base))!important}}
|
|
145
|
+
html[data-theme="light"] #promptHistory .log-table th:first-child,html[data-theme="light"] #promptHistory .log-table td:first-child{background:#fff1f5}
|
|
146
|
+
@media (min-width:621px) and (max-width:1024px){#promptHistory .log-table{min-width:1120px;table-layout:auto;width:max-content}#promptHistory .log-table th:nth-child(3),#promptHistory .log-table td:nth-child(3){min-width:19rem;overflow-wrap:normal;white-space:normal}}
|
|
147
|
+
/* A Run-ID column adds a ninth field. Keep all operational columns at their
|
|
148
|
+
natural readable widths on laptops and use the existing table scroller
|
|
149
|
+
instead of compressing titles and timestamps into each other. */
|
|
150
|
+
@media (min-width:621px){#promptHistory .log-table{min-width:1320px;table-layout:auto;width:max-content}#promptHistory .log-table th:nth-child(3),#promptHistory .log-table td:nth-child(3){min-width:22rem}#promptHistory .log-table th:nth-child(4),#promptHistory .log-table td:nth-child(4){min-width:17rem}#promptHistory .log-table th:nth-child(8),#promptHistory .log-table td:nth-child(8){min-width:7rem}}
|
|
151
|
+
@media (min-width:621px){#promptHistory .log-table th:nth-child(7),#promptHistory .log-table td:nth-child(7){min-width:4rem;width:4rem}#promptHistory .log-table th:nth-child(8),#promptHistory .log-table td:nth-child(8){min-width:14rem;width:auto}}
|
|
152
|
+
@media (min-width:621px){#promptHistory .log-table:not(:has(.execution-history-action)) th:nth-child(8),#promptHistory .log-table:not(:has(.execution-history-action)) td:nth-child(8){min-width:4.5rem;width:4.5rem}}
|
|
153
|
+
@media (min-width:621px){#promptHistory .log-table{width:max(100%,1320px)}#promptHistory .log-table th:nth-child(3),#promptHistory .log-table td:nth-child(3){width:100%}}
|
|
154
|
+
@media (min-width:621px){#promptHistory .log-table{--prompt-history-status-width:7.5rem;--prompt-history-title-width:18rem;table-layout:fixed}#promptHistory .log-table th:nth-child(3),#promptHistory .log-table td:nth-child(3){max-width:var(--prompt-history-title-width);min-width:var(--prompt-history-title-width);overflow:hidden;text-overflow:ellipsis;width:var(--prompt-history-title-width)}#promptHistory .log-table th:nth-child(4),#promptHistory .log-table td:nth-child(4){min-width:13rem;width:13rem}#promptHistory .log-table th:nth-child(9),#promptHistory .log-table td:nth-child(9){min-width:4rem;width:4rem}}
|
|
155
|
+
@media (min-width:621px){#promptHistory .log-table th:nth-child(2),#promptHistory .log-table td:nth-child(2){min-width:var(--prompt-history-status-width);overflow-wrap:normal;white-space:nowrap;width:var(--prompt-history-status-width)}}
|
|
156
|
+
@media (min-width:621px){#promptHistory .prompt-history-title{display:block;max-width:var(--prompt-history-title-width);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}
|
|
157
|
+
/* Keep disclosure arrows at the far edge of top-level dashboard categories. */
|
|
158
|
+
:where(.workspace-card,#queueItems,#rateLimits,#componentLogs,#codexChat,#engineering-dashboard-content>.technical-details:not(#componentLogs),#currentRun,.telemetry,.platform-health)>summary{padding-right:40px;position:relative}:where(.workspace-card,#queueItems,#rateLimits,#componentLogs,#codexChat,#engineering-dashboard-content>.technical-details:not(#componentLogs),#currentRun,.telemetry,.platform-health)>summary::before{margin:0;padding-right:0;position:absolute;right:0;top:0}
|
|
159
|
+
/* Uniform border hierarchy: main categories use 2px all around; nested cards use 1px all around. */
|
|
160
|
+
.card,.technical-details,.current-run,.telemetry,.platform-health{border-left-width:1px}.workspace-card,#rateLimits,#componentLogs,#codexChat,#engineering-dashboard-content>.technical-details:not(#componentLogs),#currentRun,.telemetry,.platform-health{border:2px solid var(--category-color);border-left-width:2px}#engineering-dashboard-content>.technical-details .card,.current-run .card,.reviewer-agent,.platform-health__component{border-left-width:1px;border-width:1px}.category-icon{color:var(--category-color);display:inline-block;font:700 18px/1 system-ui;margin-right:8px;vertical-align:-1px}
|
|
161
|
+
/* The default remains dark; light mode deliberately restyles every surface. */
|
|
162
|
+
html[data-theme="light"] body{background:#f4f7fb;color:#182230}html[data-theme="light"] .dashboard-titlebar{background:#f4f7fb;box-shadow:0 10px 18px #d5deebaa}html[data-theme="light"] .dashboard-titlebar h1{color:#182230}html[data-theme="light"] .auto-refresh-toggle,html[data-theme="light"] .section-state-toggle{color:#415168}html[data-theme="light"] .card,html[data-theme="light"] .technical-details{background:#fff;box-shadow:0 5px 20px #2639551f}html[data-theme="light"] .card--operation,html[data-theme="light"] .current-run{background:#fff3fa}html[data-theme="light"] .card--monitoring,html[data-theme="light"] .platform-health__component{background:#effbfe}html[data-theme="light"] .card--context,html[data-theme="light"] .workspace-card{background:#fff9dc}html[data-theme="light"] .card--resource,html[data-theme="light"] #processMetrics,html[data-theme="light"] #usage,html[data-theme="light"] #rateLimits{background:#effbf5}html[data-theme="light"] .card--evidence,html[data-theme="light"] #commits{background:#f1f7ff}html[data-theme="light"] .card--diagnostic,html[data-theme="light"] .technical-details--diagnostic,html[data-theme="light"] #componentLogs{background:#fff6e9}html[data-theme="light"] .card--conversation,html[data-theme="light"] #codexChat{background:#f8f1ff}html[data-theme="light"] .telemetry{background:#fff0f4}html[data-theme="light"] .inbox-queue{background:#f1f2ff}html[data-theme="light"] .prompt-history{background:#fff1f5}html[data-theme="light"] #currentRun{background:#fff0f8}html[data-theme="light"] #engineering-dashboard-content>.technical-details:not(#componentLogs){background:#effbfe}html[data-theme="light"] .platform-health{background:#f2fae8}html[data-theme="light"] #currentRun .card,html[data-theme="light"] .technical-details .card,html[data-theme="light"] #componentLogs .card,html[data-theme="light"] .reviewer-agent{background:#fff}html[data-theme="light"] .field,html[data-theme="light"] p,html[data-theme="light"] pre,html[data-theme="light"] code{color:#182230}html[data-theme="light"] .estimate-meta,html[data-theme="light"] .category-description,html[data-theme="light"] .queue-empty,html[data-theme="light"] .queue-item__meta,html[data-theme="light"] .footer,html[data-theme="light"] .chat-status,html[data-theme="light"] .reviewer-agent__meta,html[data-theme="light"] .telemetry-empty{color:#58677b}html[data-theme="light"] .chat-input,html[data-theme="light"] .log-controls input,html[data-theme="light"] .log-controls select{background:#fff;color:#182230;border-color:#9aabc3}html[data-theme="light"] .chat-message--user{background:#eaf4ff;border:1px solid #6caee8}html[data-theme="light"] .chat-message--assistant{background:#f4edff;border-color:#b99ae5}html[data-theme="light"] .log-table-wrap{background:#fff;border-color:#aebbd0}html[data-theme="light"] .log-table th{background:#eaf0f8}html[data-theme="light"] .log-table th,html[data-theme="light"] .log-table td{border-bottom-color:#d4deeb;color:#182230}html[data-theme="light"] .log-line-number{color:#728197}html[data-theme="light"] .copy,html[data-theme="light"] .chat-send{background:#fff;color:#182230;border-color:#8596ad}html[data-theme="light"] #pullRefresh{background:#fff;color:#1c4e68}html[data-theme="light"] #dashboardSplash{background:#f4f7fb}html[data-theme="light"] .dashboard-splash__title{color:#182230}html[data-theme="light"] .skip-link{background:#182230;color:#fff}html[data-theme="light"] :where(button,input,select,textarea,summary,[role="button"],[tabindex]):focus-visible{box-shadow:0 0 0 5px #f4f7fb}
|
|
163
|
+
/* Accent headings remain blue in light mode; broad body copy rules must not win. */
|
|
164
|
+
html[data-theme="light"] .reviewer-agent__name,html[data-theme="light"] #currentPrompt{color:var(--category-color)!important}
|
|
165
|
+
/* Reviewer cards are generated inside the active prompt and must retain the
|
|
166
|
+
explicit cyan heading even when a broad light-surface text rule applies. */
|
|
167
|
+
html[data-theme="light"] #activeReviewerAgents .reviewer-agent__name{color:var(--active-execution-label-ink,#187884)!important}
|
|
168
|
+
.dashboard-locale{align-items:center;color:#b9b6c0;display:flex;font:12px system-ui;gap:6px;white-space:nowrap}.dashboard-locale select{background:#252530;border:1px solid #747484;border-radius:7px;color:inherit;font:inherit;min-height:32px;padding:4px 7px}html[data-theme="light"] .dashboard-locale{color:#415168}html[data-theme="light"] .dashboard-locale select{background:#fff;border-color:#9aabc3}@media (max-width:620px){.dashboard-locale>span:first-child{display:none}}
|
|
169
|
+
.theme-toggle{align-items:center;background:transparent;border:0;color:#b9b6c0;cursor:pointer;display:flex;font:12px system-ui;gap:7px;margin:0;min-height:44px;min-width:44px;padding:0;position:relative}.theme-toggle::before{background:#4a4a55;border-radius:999px;content:"";height:24px;transition:background .18s ease;width:42px}.theme-toggle::after{background:#f7f3ee;border-radius:50%;box-shadow:0 1px 3px #0008;content:"☀";font-size:12px;height:18px;left:3px;line-height:18px;position:absolute;text-align:center;top:13px;transform:translateX(0);transition:transform .18s ease;width:18px}.theme-toggle[aria-checked="true"]::before{background:#f0b66a}.theme-toggle[aria-checked="true"]::after{content:"☾";transform:translateX(18px)}.theme-toggle:focus-visible{box-shadow:none;outline:2px solid #8dc7ff;outline-offset:3px}html[data-theme="light"] .theme-toggle{color:#415168}html[data-theme="light"] .theme-toggle::before{background:#f0b66a}@media (max-width:620px){.theme-toggle__label{display:none}}
|
|
170
|
+
:where(button,input,select,textarea,summary,[role="button"],[tabindex]):focus-visible{outline:3px solid var(--category-color,#8dc7ff);outline-offset:3px;box-shadow:0 0 0 6px color-mix(in srgb,var(--category-color,#8dc7ff) 24%,transparent)}
|
|
171
|
+
html[data-theme="light"] .rate-limit-reset{background:#e8fff5;border-color:#259b70;color:#145a42}html[data-theme="light"] .rate-limit-reset:hover{background:#d6f8e8}html[data-theme="light"] :where(button,input,select,textarea,summary,[role="button"],[tabindex]):focus-visible{box-shadow:0 0 0 5px color-mix(in srgb,var(--category-color,#8dc7ff) 24%,transparent)}
|
|
172
|
+
html[data-theme="light"] .log-pagination button{background:#fff;border-color:var(--category-color);color:color-mix(in srgb,var(--category-color) 70%,#182230)}html[data-theme="light"] .log-pagination button:hover:not(:disabled){background:color-mix(in srgb,var(--category-color) 14%,#fff)}html[data-theme="light"] .log-pagination button:disabled{background:color-mix(in srgb,var(--category-color) 12%,#f4f7fb);border-color:color-mix(in srgb,var(--category-color) 48%,#d4deeb);color:color-mix(in srgb,var(--category-color) 45%,#58677b);opacity:1}
|
|
173
|
+
html[data-theme="light"] #technicalDetails .technical-grid>.card{background:#fff!important;color:#182230}html[data-theme="light"] #technicalDetails .technical-grid>.card :is(p,pre,code){color:#182230}
|
|
174
|
+
/* Current-run cards have ID-bearing dark category selectors; explicitly
|
|
175
|
+
override those higher-specificity rules in light mode. */
|
|
176
|
+
html[data-theme="light"] #currentRun .card{background:#fff!important;color:#182230}html[data-theme="light"] #currentRun .card :is(p,pre,code){color:#182230!important}
|
|
177
|
+
html[data-theme="light"] #currentRun{--active-execution-label-ink:#187884}html[data-theme="light"] #currentRun #activeReviewerAgents .reviewer-agent__name{color:var(--active-execution-label-ink)!important}
|
|
178
|
+
html[data-theme="light"] .platform-health__component-detail,html[data-theme="light"] .platform-health__empty,html[data-theme="light"] .platform-health__summary{color:#182230}
|
|
179
|
+
:is(.theme-toggle,.section-state-toggle)[aria-checked="true"]::before{background:var(--house-style)}.auto-refresh-toggle{font:12px system-ui;min-height:44px;min-width:44px}.auto-refresh-toggle input{appearance:none;background:#4a4a55;border:0;border-radius:999px;cursor:pointer;height:24px;margin:0;position:relative;transition:background .18s ease;width:42px}.auto-refresh-toggle input::after{background:#f7f3ee;border-radius:50%;box-shadow:0 1px 3px #0008;content:"";height:18px;left:3px;position:absolute;top:3px;transform:translateX(0);transition:transform .18s ease;width:18px}.auto-refresh-toggle input:checked{background:var(--house-style)}.auto-refresh-toggle input:checked::after{transform:translateX(18px)}.auto-refresh-toggle input:focus-visible{box-shadow:0 0 0 5px var(--house-style-focus);outline:3px solid var(--house-style);outline-offset:3px}html[data-theme="light"] .auto-refresh-toggle input{background:#4a4a55}html[data-theme="light"] .auto-refresh-toggle input:checked{background:var(--house-style)}
|
|
180
|
+
html[data-theme="light"] .component-modal{background:#d8e1edb8}html[data-theme="light"] .component-modal__panel{background:#fff;color:#182230;box-shadow:0 16px 52px #26395540}html[data-theme="light"] .component-modal dd{color:#182230}html[data-theme="light"] .component-modal__close{background:#fff;color:#3c7411}html[data-theme="light"] .component-modal__close:hover{background:#effbdc}html[data-theme="light"] .component-modal__restart{background:#effbdc;color:#244b12}html[data-theme="light"] .component-modal__restart:hover:not(:disabled){background:#def5bd}html[data-theme="light"] .component-modal__status{color:#415168}
|
|
181
|
+
html[data-theme="light"] #componentLogs .log-pagination button{background:#fff8ef!important;border-color:#d68b23!important;color:#643a13!important}html[data-theme="light"] #componentLogs .log-pagination button:hover:not(:disabled){background:var(--category-color)!important;color:#24170d!important}html[data-theme="light"] #componentLogs .log-pagination button:disabled{background:#fff3e2!important;border-color:#e0bd8f!important;color:#8f7457!important;opacity:1}
|
|
182
|
+
/* Report panels are their own readable document surface in both themes. */
|
|
183
|
+
html[data-theme="light"] #reportContent,html[data-theme="light"] #reportAnalysisContent{background:#fff;color:#182230;box-shadow:inset 0 0 0 1px #d8e5f3}html[data-theme="light"] #reportContent :is(p,li,pre,code),html[data-theme="light"] #reportAnalysisContent :is(p,li,pre,code){color:#182230}html[data-theme="light"] #reportContent :is(pre,code),html[data-theme="light"] #reportAnalysisContent :is(pre,code){background:#eef4fb}html[data-theme="light"] .markdown-copy-wrap .copy.copy--glyph,html[data-theme="light"] .markdown-copy-wrap .download.download--glyph{background:#f7fbff;border-color:var(--category-color);box-shadow:0 2px 8px #2639552e;color:#1c4e68}html[data-theme="light"] .markdown-copy-wrap .copy.copy--glyph:hover,html[data-theme="light"] .markdown-copy-wrap .download.download--glyph:hover{background:#e4f0ff}
|
|
184
|
+
/* Resting glyphs need dark category ink on the light dashboard surfaces. */
|
|
185
|
+
html[data-theme="light"] .platform-health .component-info{color:#3c7411}html[data-theme="light"] .chat-message--user .chat-message__copy{color:#1c4e68}html[data-theme="light"] .chat-message--assistant .chat-message__copy{color:#68498a}
|
|
186
|
+
html[data-theme="light"] .report-view-modal__panel{background:#f7fbff;color:#182230}html[data-theme="light"] .report-view-modal__content{background:#fff;color:#182230}html[data-theme="light"] .report-view-modal__close{background:#fff;color:#1c4e68}
|
|
187
|
+
/* Keep the download action compact and legible instead of relying on a font-dependent glyph. */
|
|
188
|
+
.download.download--glyph::before{content:"↓";font:700 21px/1 system-ui}.download.download--glyph::after{content:none}.markdown-copy-wrap .download.download--glyph{align-items:center;justify-content:center;line-height:1}
|
|
189
|
+
.footer .label{color:var(--house-style)}
|
|
190
|
+
#action{font-style:italic}
|
|
191
|
+
.configuration-field .label{align-items:center;display:flex;gap:6px}.configuration-info,.technical-info{align-items:center;border:1px solid currentColor;border-radius:50%;cursor:help;display:inline-flex;font:700 11px/1 system-ui;height:15px;justify-content:center;position:relative;text-transform:none;width:15px}.configuration-info::after,.technical-info::after{background:#161c27;border:1px solid var(--category-color);border-radius:7px;box-sizing:border-box;color:#f7f3ee;content:attr(aria-label);display:none;font:12px/1.35 system-ui;left:22px;min-width:210px;padding:8px;position:absolute;text-transform:none;top:50%;transform:translateY(-50%);width:min(280px,calc(100vw - 80px));z-index:20}.configuration-info:hover::after,.configuration-info:focus-visible::after,.technical-info:hover::after,.technical-info:focus-visible::after{display:block}.configuration-info:focus-visible,.technical-info:focus-visible{outline:2px solid var(--category-color);outline-offset:2px}html[data-theme="light"] :is(.configuration-info,.technical-info)::after{background:#fff;color:#182230}@media (max-width:620px){:is(.configuration-info,.technical-info)[data-tooltip-side]::after{min-width:0;width:var(--configuration-tooltip-width,280px)}:is(.configuration-info,.technical-info)[data-tooltip-side="left"]::after{left:auto;right:22px}:is(.configuration-info,.technical-info)[data-tooltip-side="right"]::after{left:22px;right:auto}}
|
|
192
|
+
.technical-repository-label{align-items:center;display:flex;gap:6px}
|
|
193
|
+
.technical-diagnosis-summary{color:var(--dashboard-modal-ink);font-weight:600;margin:12px 0 0}
|
|
194
|
+
.workspace-database-section{border:1px solid var(--house-style);border-radius:10px;margin:16px 0;padding:12px}.workspace-database-section h2{color:var(--house-style);font-size:14px;margin:0 0 10px}.workspace-database-section .field{margin:0 0 10px}.workspace-database-section .field:last-child{margin-bottom:0}
|
|
195
|
+
.workspace-database-maintenance-field{align-items:center;display:grid;gap:8px;grid-template-columns:minmax(0,1fr) minmax(9rem,14rem)}.workspace-database-maintenance-field .dashboard-select-picker{justify-self:stretch;max-width:14rem;width:100%}.workspace-database-maintenance-field select{max-width:14rem}
|
|
196
|
+
.configuration-readonly-settings{border:1px solid var(--house-style);border-radius:10px;margin:16px 0;padding:12px}.configuration-readonly-settings h2{color:var(--house-style);font-size:14px;margin:0 0 10px}.configuration-readonly-settings .field{margin:0 0 10px}.configuration-readonly-settings .field:last-child{margin-bottom:0}
|
|
197
|
+
.configuration-timeout-policy{border:1px solid color-mix(in srgb,var(--house-style) 62%,transparent);border-radius:10px;margin:16px 0;padding:12px}.configuration-timeout-policy h2{color:var(--category-color);font-size:14px;margin:0 0 6px}.configuration-timeout-policy>p:not(.field){color:var(--dashboard-modal-muted);font-size:13px;margin:0 0 10px}.configuration-timeout-policy .field{margin:0 0 8px}.configuration-timeout-policy .field:last-child{margin-bottom:0}
|
|
198
|
+
.configuration-host-components{border:1px solid var(--house-style);border-radius:10px;margin:16px 0;padding:12px}.configuration-host-components h2{color:var(--house-style);font-size:14px;margin:0 0 10px}.configuration-host-components .field{margin:0 0 10px}.configuration-host-components .field:last-child{margin-bottom:0}
|
|
199
|
+
.platform-health__component-link-icon{display:inline-block;font-size:.86em;font-weight:800;margin-left:.32em;text-decoration:none;vertical-align:.06em}
|
|
200
|
+
.dashboard-health__check-link-icon{display:inline-block;font-size:.86em;font-weight:800;margin-left:.32em;text-decoration:none;vertical-align:.06em}
|
|
201
|
+
/* Product controls share the house style rather than individual category colours. */
|
|
202
|
+
.theme-toggle[aria-checked="true"]::before,.section-state-toggle[aria-checked="true"]::before,.auto-refresh-toggle input:checked{background:var(--house-style)}.theme-toggle:focus-visible,.section-state-toggle:focus-visible{outline-color:var(--house-style);box-shadow:0 0 0 5px var(--house-style-focus)}.rate-limit-reset{background:var(--house-style-surface);border-color:var(--house-style);color:var(--house-style-contrast)}.rate-limit-reset:hover:not(:disabled){background:color-mix(in srgb,var(--house-style-surface) 78%,var(--house-style))}html[data-theme="light"] .rate-limit-reset{background:var(--house-style-surface);border-color:var(--house-style);color:var(--house-style-contrast)}html[data-theme="light"] .rate-limit-reset:hover:not(:disabled){background:color-mix(in srgb,var(--house-style-surface) 78%,var(--house-style))}
|
|
203
|
+
/* Component cards use symmetric vertical padding; the info action belongs at the card centre. */
|
|
204
|
+
.platform-health__component{align-items:start;cursor:pointer;grid-template-areas:"indicator name info" "indicator detail info";grid-template-columns:auto minmax(0,1fr) auto;padding:12px 10px;row-gap:8px}.platform-health__component .indicator{align-self:center;grid-area:indicator}.platform-health__component-name{grid-area:name}.platform-health__component-detail{grid-area:detail;margin:0}.component-info{align-self:center;grid-area:info}
|
|
205
|
+
.chat-input{resize:vertical}
|
|
206
|
+
|
|
207
|
+
/* Round action controls share one elevation treatment, regardless of where
|
|
208
|
+
they appear (cards, dialogs, reports or the composer). */
|
|
209
|
+
:is(.page-refresh,.component-info,.copy.copy--glyph,.download.download--glyph,.prompt-history-report,.prompt-history-analysis,.prompt-history-details,.prompt-history-chat,.report-view-modal__close,.dashboard-modal-shell__close,.dashboard-action,.reset-log-filters,.chat-compose .chat-send,.chat-message__copy){box-shadow:0 3px 9px rgb(15 23 42 / .32),0 1px 2px rgb(15 23 42 / .22)}
|
|
210
|
+
|
|
211
|
+
/* Forge recommendation handoffs are advisory evidence: compact on desktop and
|
|
212
|
+
safely wrapping, keyboard-native details on narrower dashboard surfaces. */
|
|
213
|
+
.prompt-detail-card .recommendation-alternatives{border-top:1px solid color-mix(in srgb,var(--category-color) 45%,transparent);margin-top:10px;padding-top:10px}.prompt-detail-card .recommendation-alternatives summary{cursor:pointer;font-weight:700;overflow-wrap:anywhere}.prompt-detail-card .recommendation-alternatives ol{margin:8px 0 0;padding-inline-start:24px}.prompt-detail-card .recommendation-alternatives li{overflow-wrap:anywhere;padding:3px 0}.prompt-detail-card--wide .field pre{max-width:100%;overflow-wrap:anywhere;white-space:pre-wrap}@media (max-width:620px){.prompt-detail-card .recommendation-alternatives{font-size:15px}.prompt-detail-card--wide{min-width:0}.prompt-detail-card--wide .field{min-width:0}}
|
|
214
|
+
|
|
215
|
+
/* Make a blocked Inbox actionable without sending people to Technical details. */
|
|
216
|
+
.queue-blocker{background:#4d2631;border:1px solid #ff9f43;border-radius:8px;color:#ffd8b1;font-size:14px;line-height:1.4;margin:12px 0;padding:10px}.queue-blocker:empty{display:none}
|
|
217
|
+
html[data-theme="light"] .queue-blocker{background:#fff0df;color:#683e10}
|
|
218
|
+
html[data-theme="light"] .predecessor-retry{background:#fff8ef;border-color:#d68b23;color:#643a13}html[data-theme="light"] .predecessor-retry:hover:not(:disabled){background:#fff0dc}
|
|
219
|
+
|
|
220
|
+
/* Download glyphs share the same single-line circular chrome as peer actions. */
|
|
221
|
+
.download.download--glyph{border-style:solid;border-width:1px;box-sizing:border-box}
|
|
222
|
+
|
|
223
|
+
/* The Execution Host detail close action keeps its own green hover state. */
|
|
224
|
+
|
|
225
|
+
/* Component-log actions need their own light resting surface, not the dark log-card fill. */
|
|
226
|
+
|
|
227
|
+
/* Shared action controls. */
|
|
228
|
+
.dashboard-grid button:not(.component-modal__close):not(.report-view-modal__close):hover{background:var(--category-color,var(--button-fill,#8dc7ff));border-color:var(--category-color,var(--button-fill,#8dc7ff));color:var(--button-ink)}
|
|
229
|
+
#rateLimitReset,#codexCliUpdate{--button-fill:#51d88a;background:#1f5b42;border-color:#51d88a;color:#effff5}
|
|
230
|
+
|
|
231
|
+
/* Advisory-chat controls. */
|
|
232
|
+
.codex-chat__details>.chat-messages{margin-top:0}
|
|
233
|
+
.prompt-chat-modal__actions .dashboard-action[hidden]{display:none}
|
|
234
|
+
|
|
235
|
+
/* The title bar covers scrolling content. Rounded corners leave small gaps at
|
|
236
|
+
the sticky edges, through which the active content can show. */
|
|
237
|
+
.dashboard-titlebar{border-radius:0}
|
|
238
|
+
|
|
239
|
+
/* The dashboard chrome remains visible while its workspace and categories scroll. */
|
|
240
|
+
body{box-sizing:border-box;display:flex;flex-direction:column;height:100vh;height:100dvh;min-height:100dvh;overflow:hidden}
|
|
241
|
+
html:has(body.dashboard-modal-open){overflow:hidden}
|
|
242
|
+
body.dashboard-modal-open{left:0;overflow:hidden!important;position:fixed;right:0;top:var(--dashboard-modal-scroll-top,0);width:100%}
|
|
243
|
+
.dashboard-sticky-header{align-self:start;background:#121217;flex:none;pointer-events:none;position:sticky;top:0;width:100%;z-index:15}.dashboard-sticky-header :is(a,button,input,label,select,summary,textarea,[tabindex]){pointer-events:auto}.dashboard-sticky-header:has(:is(#codexUsageLimitBanner,#codexCapacityReserveBanner,#githubRateLimitBanner):not([hidden])){padding-bottom:7px}.dashboard-titlebar{flex:none;position:relative;z-index:auto}.dashboard-sticky-header .dashboard-status-banner{position:relative;top:auto;z-index:auto}@media (min-width:621px) and (max-width:1400px){.dashboard-sticky-header{z-index:30}}@media (max-width:620px){.dashboard-sticky-header{max-height:calc(100dvh - 160px);overflow-y:auto;overscroll-behavior:contain}}@media (max-height:420px){.dashboard-sticky-header{max-height:calc(100dvh - 96px);overflow-y:auto;overscroll-behavior:contain}}html[data-theme="light"] .dashboard-sticky-header{background:#e8edf4}
|
|
244
|
+
.dashboard-scroll-region{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:0 4px calc(var(--dashboard-footer-height,72px) + 16px);scroll-padding-bottom:calc(var(--dashboard-footer-height,72px) + 16px);scroll-padding-top:calc(var(--dashboard-sticky-header-height,220px) + 16px)}
|
|
245
|
+
.footer{background:#121217;flex:none;margin:14px 0 0;padding:12px 16px calc(12px + env(safe-area-inset-bottom));pointer-events:none;position:relative;z-index:15}
|
|
246
|
+
html[data-theme="light"] .footer{background:#f4f7fb}
|
|
247
|
+
html[data-theme="light"] body,html[data-theme="light"] .dashboard-titlebar,html[data-theme="light"] .footer{background:#e8edf4}
|
|
248
|
+
|
|
249
|
+
/* Keep the reset action light in the light theme while preserving its green affordance. */
|
|
250
|
+
html[data-theme="light"] :is(#rateLimitReset,#codexCliUpdate){background:#e8fff5;color:#145a42}
|
|
251
|
+
|
|
252
|
+
/* The advisory conversation's send action always fills with its purple category. */
|
|
253
|
+
.chat-compose .chat-send:hover:not(:disabled){background:#d0a4ff!important;border-color:#d0a4ff!important;color:#17151a!important}
|
|
254
|
+
|
|
255
|
+
/* Restart is an Execution Host action and retains the platform-health green on hover. */
|
|
256
|
+
.component-modal__restart:hover:not(:disabled){background:#a3e635!important;border-color:#a3e635!important;color:#18230f!important}
|
|
257
|
+
|
|
258
|
+
/* Component details belong to Platform Health, so their information action fills green. */
|
|
259
|
+
.platform-health .component-info:hover{background:#a3e635!important;border-color:#a3e635!important;color:#18230f!important}
|
|
260
|
+
|
|
261
|
+
/* Downloads remain diagnostic-orange; clearing logs is destructive red. */
|
|
262
|
+
#componentLogs .component-log-download:hover:not(:disabled){background:#f0b66a!important;border-color:#f0b66a!important;color:#201812!important}
|
|
263
|
+
|
|
264
|
+
/* The skip-link target remains programmatically focusable without outlining every category. */
|
|
265
|
+
#engineering-dashboard-content,#engineering-dashboard-content:focus,#engineering-dashboard-content:focus-visible{border:0!important;box-shadow:none!important;outline:0!important}
|
|
266
|
+
#diag{white-space:pre-line}
|
|
267
|
+
|
|
268
|
+
/* Report and analysis both open blue evidence modals, not the pink history shell. */
|
|
269
|
+
.prompt-history-report,.prompt-history-analysis{border-color:#8dc7ff;color:#8dc7ff}.prompt-history-report:hover,.prompt-history-analysis:hover{background:#8dc7ff!important;border-color:#8dc7ff!important;color:#172331!important}
|
|
270
|
+
.prompt-detail-status{align-items:center;display:inline-flex;gap:7px}.prompt-detail-status .indicator{display:block;flex:none}
|
|
271
|
+
|
|
272
|
+
/* Historical execution evidence is opened from its table row, not duplicated as a dashboard section. */
|
|
273
|
+
.prompt-history-row{cursor:pointer}.prompt-history-lineage{color:#b9b6c0;display:block;font:11px/1.35 system-ui;margin-top:4px;white-space:normal}
|
|
274
|
+
/* The shared modal shell owns the prompt-detail frame and header. This
|
|
275
|
+
component owns only its evidence layout and its inner document cards. */
|
|
276
|
+
.prompt-detail-modal__panel{display:grid;grid-template-rows:auto auto minmax(0,1fr);height:100%;overflow:hidden}.prompt-detail-modal__content{align-items:start;box-sizing:border-box;display:grid;gap:18px;grid-template-columns:minmax(0,1fr) minmax(280px,.82fr);min-height:0;overflow:auto;overscroll-behavior:contain;padding:0 12px 10px;scrollbar-gutter:stable both-edges}.prompt-detail-leftbar,.prompt-detail-rightbar{align-content:start;align-items:start;display:grid;gap:18px;grid-row:1;min-width:0}.prompt-detail-leftbar{grid-column:1}.prompt-detail-rightbar{grid-column:2}.prompt-detail-leftbar :is(.prompt-detail-card--execution-summary,.prompt-detail-sidebar),.prompt-detail-rightbar :is(.prompt-detail-card--execution-context,.prompt-detail-card--pull-requests){grid-column:auto;grid-row:auto}.prompt-detail-sidebar{align-content:start;align-items:start;display:grid;gap:18px}.prompt-detail-card{border:1px solid var(--category-color);border-radius:14px;padding:18px}.prompt-detail-card--wide{grid-column:1/-1}.prompt-detail-card h3{color:var(--category-color);font-size:18px;margin:0 0 14px}.prompt-detail-card .field{margin:0 0 14px}.prompt-detail-card .field:last-child{margin-bottom:0}.prompt-detail-card pre{overflow-wrap:anywhere;white-space:pre-wrap}.prompt-detail-card--execution-context{min-width:0;overflow:hidden}.prompt-detail-card--execution-context :is(.field,.label,span,li){min-width:0;overflow-wrap:anywhere;word-break:break-word}.detail-list-field ul{margin:6px 0 0;padding-inline-start:22px}@media (max-width:620px){.prompt-detail-modal__content{grid-template-columns:1fr;padding-inline:8px}.prompt-detail-leftbar,.prompt-detail-rightbar{grid-column:1;grid-row:auto}}
|
|
277
|
+
.prompt-detail-provider-review{display:grid;gap:18px;grid-column:1/-1;grid-template-columns:minmax(0,1fr) minmax(260px,.58fr)}@media (max-width:760px){.prompt-detail-provider-review{grid-template-columns:1fr}}
|
|
278
|
+
.prompt-detail-provider-review-stack{display:grid;gap:18px;grid-column:1/-1}.prompt-detail-provider-review>.prompt-detail-card{align-self:stretch;box-sizing:border-box}.prompt-detail-card--commit-timeline{display:flex;flex-direction:column;min-height:0}.prompt-detail-commit-timeline__list{align-content:start;display:grid;flex:1;gap:10px;list-style:none;margin:0;max-height:none;min-height:0;overflow:auto;padding:0 8px 0 0;scrollbar-gutter:stable}.prompt-detail-commit-timeline__item{border-top:1px solid color-mix(in srgb,var(--category-color) 38%,transparent);display:grid;gap:3px;padding-top:10px}.prompt-detail-commit-timeline__item:first-child{border-top:0;padding-top:0}.prompt-detail-commit-timeline__meta{color:var(--dashboard-modal-muted);font-size:12px;line-height:1.35}.prompt-detail-commit-timeline__item code{font-size:12px;overflow-wrap:anywhere}.prompt-detail-commit-timeline__item>span{font-size:13px;line-height:1.4;overflow-wrap:anywhere}
|
|
279
|
+
.prompt-detail-commit-timeline__phase{border-top:1px solid color-mix(in srgb,var(--category-color) 52%,transparent);list-style:none;padding:13px 0 0}.prompt-detail-commit-timeline__phase:first-child{border-top:0;padding-top:0}.prompt-detail-commit-timeline__phase h4{color:var(--category-color);font-size:12px;letter-spacing:.04em;margin:0 0 9px;text-transform:uppercase}.prompt-detail-commit-timeline__phase-entries{display:grid;gap:10px;list-style:none;margin:0;padding:0 0 2px}.prompt-detail-commit-timeline__phase-entries .prompt-detail-commit-timeline__item{border-top:0;padding-top:0}
|
|
280
|
+
.prompt-detail-commit-timeline__phase{--commit-kind-color:#8dc7ff;border-left:3px solid var(--commit-kind-color);padding-left:10px}.prompt-detail-commit-timeline__phase--implementation{--commit-kind-color:#65c5d9}.prompt-detail-commit-timeline__phase--validation{--commit-kind-color:#65d9a3}.prompt-detail-commit-timeline__phase--quality{--commit-kind-color:#c29aff}.prompt-detail-commit-timeline__phase--repair{--commit-kind-color:#f4c34f}.prompt-detail-commit-timeline__phase--finalization{--commit-kind-color:#ff99a7}.prompt-detail-commit-timeline__phase--implementation_merge,.prompt-detail-commit-timeline__phase--finalization_merge,.prompt-detail-commit-timeline__phase--reconciliation_merge{--commit-kind-color:#f3d36a}.prompt-detail-commit-timeline__phase--reconciliation{--commit-kind-color:#73d6b0}.prompt-detail-commit-timeline__phase h4{align-items:center;color:var(--commit-kind-color);display:flex;gap:7px}.prompt-detail-commit-timeline__kind{border:1px solid currentColor;border-radius:999px;font-size:10px;line-height:1;padding:4px 6px}.prompt-detail-commit-timeline__phase-name{color:var(--dashboard-modal-muted);font-size:11px;font-weight:500;letter-spacing:0;text-transform:none}
|
|
281
|
+
|
|
282
|
+
/* Dialog shells may receive programmatic focus, but only their controls need a visible ring. */
|
|
283
|
+
:where(.component-modal,.confirmation-modal,.report-view-modal,.prompt-detail-modal,.prompt-chat-modal):focus,:where(.component-modal,.confirmation-modal,.report-view-modal,.prompt-detail-modal,.prompt-chat-modal):focus-visible{box-shadow:none;outline:none}
|
|
284
|
+
.prompt-detail-modal:focus,.prompt-detail-modal:focus-visible,.prompt-chat-modal:focus,.prompt-chat-modal:focus-visible{box-shadow:none!important;outline:none!important}
|
|
285
|
+
|
|
286
|
+
/* Fit long reports inside the actual small-viewport height, including browser chrome. */
|
|
287
|
+
.report-view-modal,.report-view-modal__panel{box-sizing:border-box;max-height:min(90vh,calc(100dvh - 36px))}.report-view-modal{overflow:hidden}.report-view-modal__panel{overflow:auto}
|
|
288
|
+
|
|
289
|
+
/* Reset consumption is available only intentionally; its hover state must remain unmistakable. */
|
|
290
|
+
:is(#rateLimitReset,#codexCliUpdate):hover:not(:disabled){background:#51d88a!important;border-color:#51d88a!important;color:#112a20!important}
|
|
291
|
+
|
|
292
|
+
/* Report disclosures use the same right-aligned affordance as the main categories. */
|
|
293
|
+
|
|
294
|
+
/* AI-answer copy is part of the advisory conversation, so it fills purple instead of the generic blue. */
|
|
295
|
+
.chat-message--assistant .chat-message__copy:hover{background:#d0a4ff!important;border-color:#d0a4ff!important;color:#17151a!important;opacity:1}
|
|
296
|
+
|
|
297
|
+
/* One run has one fixed horizontal lifecycle. Narrow screens scroll this
|
|
298
|
+
container only, preserving the page width and topology. */
|
|
299
|
+
.execution-lifecycle{--lifecycle-neutral:#9a9aa3;--lifecycle-blue:var(--category-color,#65c5d9);--lifecycle-complete:#51d88a;--lifecycle-blocked:#ff9f43;--lifecycle-failed:#ff6b6b;background:color-mix(in srgb,var(--category-color,#65c5d9) 10%,var(--dashboard-surface-base));border:1px solid var(--category-color,#65c5d9);border-radius:14px;grid-column:1/-1;min-width:0;padding:14px}.execution-lifecycle h3{color:var(--category-color,#65c5d9);font-size:14px;margin:0 0 10px}.execution-lifecycle__scroll{box-sizing:border-box;max-width:100%;min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;width:100%}.execution-lifecycle__path{align-items:flex-start;display:flex;list-style:none;margin:0;min-width:max-content;padding:8px 12px 4px}.execution-lifecycle__item{align-items:center;display:flex;flex:0 0 126px;position:relative}.execution-lifecycle__item:not(:last-child)::after{background:var(--lifecycle-neutral);content:"";height:3px;left:74px;position:absolute;top:30px;width:74px;z-index:0}.execution-lifecycle__item--completed:not(:last-child)::after,.execution-lifecycle__item--active:not(:last-child)::after{background:var(--lifecycle-blue)}.execution-lifecycle__node{-webkit-appearance:none;appearance:none;align-items:center;background:none!important;border:0!important;border-radius:0!important;box-shadow:none!important;color:inherit;cursor:default;display:flex;flex-direction:column;font:12px/1.25 system-ui;gap:7px;min-height:76px;min-width:62px;padding:0;position:relative;z-index:1}.execution-lifecycle__node>span:first-child{align-items:center;background:var(--lifecycle-neutral);border:3px solid var(--lifecycle-neutral);border-radius:50%;box-sizing:border-box;color:#172331;display:flex;font-weight:800;height:52px;justify-content:center;width:52px}.execution-lifecycle__item--completed .execution-lifecycle__node>span:first-child{background:var(--lifecycle-blue);border-color:var(--lifecycle-blue)}.execution-lifecycle__item--active .execution-lifecycle__node>span:first-child{background:var(--dashboard-surface-base);border-color:var(--lifecycle-blue);color:var(--lifecycle-blue)}.execution-lifecycle__item--complete .execution-lifecycle__node>span:first-child{background:var(--lifecycle-complete);border-color:var(--lifecycle-complete)}.execution-lifecycle__item--blocked .execution-lifecycle__node>span:first-child{background:var(--lifecycle-blocked);border-color:var(--lifecycle-blocked)}.execution-lifecycle__item--failed .execution-lifecycle__node>span:first-child{background:var(--lifecycle-failed);border-color:var(--lifecycle-failed)}.execution-lifecycle__node--active>span:first-child{animation:lifecycle-pulse 2s ease-in-out infinite;box-shadow:0 0 0 0 color-mix(in srgb,var(--lifecycle-blue) 55%,transparent)}@keyframes lifecycle-pulse{50%{box-shadow:0 0 0 7px transparent}}.execution-lifecycle__badge{background:var(--house-style);border:2px solid var(--dashboard-surface-base);border-radius:999px;color:var(--button-ink);font-size:11px;font-weight:800;line-height:18px;min-width:18px;position:absolute;right:4px;top:0}.execution-lifecycle__summary,.execution-lifecycle__unavailable{color:#c9d5e4;font-size:13px;margin:12px 0 0}.execution-lifecycle__node:focus-visible{cursor:pointer;outline:3px solid var(--house-style);outline-offset:4px}@media (prefers-reduced-motion:reduce){.execution-lifecycle__node--active>span:first-child{animation:none}}@media (max-width:620px){.execution-lifecycle{padding:12px;min-width:0}.execution-lifecycle__scroll{margin-inline:-4px;padding-inline:4px}.execution-lifecycle__item{flex-basis:118px}.execution-lifecycle__item:not(:last-child)::after{width:66px}.execution-lifecycle__path{padding-inline:8px}}html[data-theme="light"] .execution-lifecycle{background:color-mix(in srgb,var(--category-color,#65c5d9) 8%,#fff);color:#182230}.execution-lifecycle--historical{margin:0}
|
|
300
|
+
|
|
301
|
+
/* Lifecycle geometry, interaction and touch safeguards live beside the state
|
|
302
|
+
tokens above. Long labels cannot affect the fixed circle/connector rhythm. */
|
|
303
|
+
.execution-lifecycle__node>span:first-child{font-size:20px}
|
|
304
|
+
.execution-lifecycle__item{flex:0 0 126px;isolation:isolate;min-width:126px;width:126px}.execution-lifecycle__node,.execution-lifecycle__node:is(:hover,:focus,:focus-visible,:active){-webkit-appearance:none!important;appearance:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important;background:transparent!important;background-image:none!important;border:0!important;border-radius:0!important;box-shadow:none!important;color:var(--dashboard-modal-ink)!important;cursor:pointer;filter:none!important;min-width:0;outline:0!important;transform:none!important;transition:none;width:100%;will-change:auto;z-index:4}.execution-lifecycle__node>span:last-child{color:inherit;font-weight:inherit;max-width:100%;overflow-wrap:anywhere;text-align:center}.execution-lifecycle__node--start>span:first-child{font-size:22px}.execution-lifecycle__item:not(:last-child)::after{content:none}.execution-lifecycle__connector{background:var(--lifecycle-neutral);display:block;height:4px;left:calc(50% + 26px);opacity:1;pointer-events:none;position:absolute;top:24px;width:74px;z-index:3}.execution-lifecycle__connector--reached{background:var(--lifecycle-blue)}.execution-lifecycle__item--active .execution-lifecycle__node>span:first-child{background:var(--lifecycle-blue);border-color:var(--lifecycle-blue);color:#172331}.execution-lifecycle__node--active>span:first-child{box-shadow:0 0 0 0 color-mix(in srgb,var(--lifecycle-blue) 55%,transparent)}.execution-lifecycle__item--operator-wait .execution-lifecycle__node>span:first-child{background:var(--house-style);border-color:var(--house-style);color:var(--button-ink)}.execution-lifecycle__node--operator-wait>span:first-child{box-shadow:0 0 0 0 color-mix(in srgb,var(--house-style) 55%,transparent)}@media (max-width:620px){.execution-lifecycle__item{flex-basis:118px;min-width:118px;width:118px}.execution-lifecycle__connector{left:calc(50% + 26px);width:66px}}
|
|
305
|
+
|
|
306
|
+
/* A user-authored message is evidence-blue, unlike the advisory AI response. */
|
|
307
|
+
.execution-lifecycle__item .execution-lifecycle__node:hover>span:first-child{border-color:var(--house-style)}
|
|
308
|
+
.chat-message--user .chat-message__copy:hover{background:#8dc7ff!important;border-color:#8dc7ff!important;color:#17151a!important;opacity:1}
|
|
309
|
+
|
|
310
|
+
/* Log pagination belongs to diagnostic evidence and shares its orange hover affordance. */
|
|
311
|
+
#componentLogs .log-pagination button:hover:not(:disabled){background:#f0b66a!important;border-color:#f0b66a!important;color:#201812!important}
|
|
312
|
+
|
|
313
|
+
/* Prompt-history navigation is an evidence action and fills with its red category color. */
|
|
314
|
+
#promptHistory .log-pagination button:hover:not(:disabled){background:#ff718f!important;border-color:#ff718f!important;color:#271923!important}
|
|
315
|
+
|
|
316
|
+
/* Terminal execution actions use the explicit operational acknowledgement palette. */
|
|
317
|
+
#promptHistory .execution-history-action{background:#4f453c;border-color:#e7b876;border-radius:7px;color:#f6f3ef;font:12px system-ui;min-height:32px;min-width:0;padding:5px 9px}#promptHistory .execution-history-action:hover:not(:disabled){background:#e7b876;border-color:#e7b876;color:#17151a}
|
|
318
|
+
html[data-theme="light"] #promptHistory .execution-history-action{background:#fff8ef;border-color:#d68b23;color:#643a13}html[data-theme="light"] #promptHistory .execution-history-action:hover:not(:disabled){background:#e7b876;border-color:#e7b876;color:#17151a}
|
|
319
|
+
#promptHistoryRows td:has(.prompt-history-actions){vertical-align:middle}#promptHistoryRows .execution-history-action{margin-top:0}
|
|
320
|
+
#promptHistoryRows .prompt-history-actions{align-items:center;display:flex;flex-wrap:wrap;gap:6px}
|
|
321
|
+
@media (min-width:621px){#promptHistory .log-table:has(.execution-history-action) th:nth-child(8),#promptHistory .log-table:has(.execution-history-action) td:nth-child(8){min-width:26rem;width:26rem}#promptHistoryRows .prompt-history-actions{flex-wrap:nowrap;white-space:nowrap}}
|
|
322
|
+
@media (min-width:621px){#promptHistory .log-table{table-layout:fixed}}
|
|
323
|
+
|
|
324
|
+
/* The header owns a fixed row; only the document pane scrolls beneath it. */
|
|
325
|
+
.report-view-modal__panel{--report-modal-surface:#24242d;display:grid;grid-template-rows:auto minmax(0,1fr);height:min(90vh,calc(100dvh - 36px));overflow:hidden}.report-view-modal__header{background:var(--report-modal-surface);z-index:1}.report-view-modal__actions{grid-column:2;grid-row:1;justify-self:end;position:static}.report-view-modal__content{min-height:0;overflow:auto;overscroll-behavior:contain;padding:12px}html[data-theme="light"] .report-view-modal__panel{--report-modal-surface:#f7fbff}
|
|
326
|
+
|
|
327
|
+
/* A small, decorative glyph gives each modal title a clear visual purpose. */
|
|
328
|
+
:is(.component-modal h2,.confirmation-modal h2,.installation-relocation-modal h2,.report-view-modal__title,.prompt-detail-modal__header h2,.prompt-chat-modal__header h2){--modal-title-glyph-size:20px}:is(.component-modal h2,.confirmation-modal h2,.installation-relocation-modal h2,.report-view-modal__title,.prompt-chat-modal__header h2)::before{display:inline-block;font-size:var(--modal-title-glyph-size);line-height:1;margin-right:.42em;vertical-align:-.04em}.component-modal h2::before{content:"⚙︎"}.confirmation-modal h2::before{content:"ⓘ"}.confirmation-modal#dashboardErrorModal h2::before{content:"×"}.installation-relocation-modal h2[data-modal-glyph="relocate"]::before{content:"↗"}.report-view-modal__title::before{content:"▤"}.prompt-chat-modal__header h2::before{content:"💬"}
|
|
329
|
+
.telemetry-detail-modal #telemetryDetailTitle::before{content:"▥";display:inline-block;font-size:20px;font-weight:700;line-height:1;margin-right:.42em;vertical-align:-.04em}
|
|
330
|
+
.lifecycle-detail-modal #lifecycleDetailTitle::before{content:"●";display:inline-block;font-size:20px;font-weight:700;line-height:1;margin-right:.42em;vertical-align:-.04em}.lifecycle-detail-modal #lifecycleDetailTitle[data-lifecycle-status="completed"]::before,.lifecycle-detail-modal #lifecycleDetailTitle[data-lifecycle-status="complete"]::before{content:"✓"}.lifecycle-detail-modal #lifecycleDetailTitle[data-lifecycle-status="operator-wait"]::before{content:"⌛"}.lifecycle-detail-modal #lifecycleDetailTitle[data-lifecycle-status="blocked"]::before{content:"!"}.lifecycle-detail-modal #lifecycleDetailTitle[data-lifecycle-status="failed"]::before{content:"×"}.lifecycle-detail-modal #lifecycleDetailTitle[data-lifecycle-status="pending"]::before,.lifecycle-detail-modal #lifecycleDetailTitle[data-lifecycle-status="unknown"]::before{content:"○"}
|
|
331
|
+
/* Modal titles use one responsive type scale across every modal family. */
|
|
332
|
+
.confirmation-modal h2[data-modal-glyph="question"]::before{align-items:center;border:2px solid currentColor;border-radius:50%;box-sizing:border-box;display:inline-flex;height:var(--modal-title-glyph-size);justify-content:center;width:var(--modal-title-glyph-size);vertical-align:-.12em}
|
|
333
|
+
.confirmation-modal h2[data-modal-glyph="question"]::before{content:"?"}
|
|
334
|
+
.confirmation-modal h2[data-modal-glyph="warning"]::before{content:"⚠"}
|
|
335
|
+
.report-view-modal__title[data-modal-glyph="analysis"]::before{content:"✦"}
|
|
336
|
+
:is(.component-modal h2,.confirmation-modal h2,.report-view-modal__title,.prompt-detail-modal__header h2,.prompt-chat-modal__header h2){font-size:clamp(18px,2vw,20px);line-height:1.2}
|
|
337
|
+
|
|
338
|
+
/* Confirmation only supplies its compact geometry; the shell owns the header,
|
|
339
|
+
close control, accent and destructive state. */
|
|
340
|
+
.confirmation-modal__panel{border:2px solid var(--modal-accent);max-width:30rem;padding:22px}
|
|
341
|
+
.confirmation-modal__panel #confirmationModalText{line-height:1.55;white-space:pre-line}
|
|
342
|
+
.confirmation-modal__list-label{display:block;margin-top:14px}.confirmation-modal__list{display:grid;gap:5px;margin:6px 0 0;padding-left:22px}.confirmation-modal__list li{overflow-wrap:anywhere}
|
|
343
|
+
|
|
344
|
+
/* Confirmation actions remain anchored inside the dialog on compact iPhone
|
|
345
|
+
viewports. Long explanatory copy scrolls above them instead of pushing the
|
|
346
|
+
cancel/confirm controls behind the browser's bottom chrome. */
|
|
347
|
+
/* Read-only GitHub check projection for the open pull-request context. */
|
|
348
|
+
.open-pr-status{align-items:center;display:inline-flex;font-size:12px;font-weight:700;gap:6px;width:max-content}.open-pr-status__dot{background:#a6a6b2;border-radius:50%;box-shadow:0 0 8px #a6a6b266;height:9px;width:9px}.open-pr-status--issues{color:#ff8585}.open-pr-status--issues .open-pr-status__dot{background:#ff8585;box-shadow:0 0 8px #ff858599}
|
|
349
|
+
@media (max-width:620px){
|
|
350
|
+
.confirmation-modal{box-sizing:border-box;height:100dvh;inset:0;margin:0;max-height:none;max-width:none;padding:max(12px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left));width:100vw}
|
|
351
|
+
.confirmation-modal[open]{display:grid;place-items:center}
|
|
352
|
+
.confirmation-modal__panel{box-sizing:border-box;display:grid;grid-template-rows:auto minmax(0,1fr) auto;max-height:100%;max-width:30rem;overflow:hidden;width:calc(100vw - 24px)}
|
|
353
|
+
.confirmation-modal__panel>p{min-height:0;overflow:auto}
|
|
354
|
+
.confirmation-modal__actions{background:var(--modal-surface);margin-bottom:0;padding-top:20px;position:relative;z-index:1}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/* Platform information glyphs use the same compact diameter as round download actions. */
|
|
358
|
+
.component-info{min-height:32px;min-width:32px}
|
|
359
|
+
|
|
360
|
+
/* Light report modals keep markdown code on readable light surfaces. */
|
|
361
|
+
html[data-theme="light"] .report-view-modal__content :is(pre,code){background:#eef4fb;color:#182230}
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
/* Engineering Platform is a generic platform label and uses the orange house style. */
|
|
365
|
+
.dashboard-splash__version{color:#f0b66a}
|
|
366
|
+
|
|
367
|
+
/* Account limits are readable status copy, not diagnostic output. */
|
|
368
|
+
#rateLimitDetails{font:14px/1.4 system-ui}
|
|
369
|
+
.rate-limit-trend{--rate-limit-trend-label:#f7f3ee;border-top:1px solid color-mix(in srgb,var(--category-color,#54d6a0) 34%,transparent);margin-top:14px;padding-top:14px}.rate-limit-trend__title{color:var(--category-color,#54d6a0);font-size:11px;font-weight:700;letter-spacing:.04em;margin:0 0 3px;text-transform:uppercase}.rate-limit-trend__description{color:var(--dashboard-modal-muted);font-size:12px;line-height:1.45;margin:0}.rate-limit-trend__chart{margin-top:8px;max-width:38rem}.rate-limit-trend__chart svg{display:block;height:auto;width:100%}.rate-limit-trend__grid{stroke:rgb(148 163 184 / .32);stroke-width:1}.rate-limit-trend__line{fill:none;stroke:#48cf99;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.rate-limit-trend__point{fill:#48cf99;stroke:none}.rate-limit-trend__axis-label{fill:var(--rate-limit-trend-label);font:7px system-ui}html[data-theme="light"] .rate-limit-trend{--rate-limit-trend-label:#182230}html[data-theme="light"] .rate-limit-trend__grid{stroke:rgb(100 116 139 / .24)}
|
|
370
|
+
|
|
371
|
+
/* The splash spinner belongs to the generic Engineering Platform house style. */
|
|
372
|
+
.dashboard-splash__spinner{border-color:#5a4325;border-top-color:#f0b66a}
|
|
373
|
+
|
|
374
|
+
/* Active execution uses a compositor-friendly GitHub-style activity ring.
|
|
375
|
+
A native border avoids the conic-gradient mask that can stutter on iPhone. */
|
|
376
|
+
.indicator--running{animation:github-activity-ring 1.1s linear infinite!important;animation-play-state:running!important;background:transparent;border:3px solid #8c723c;border-left-color:var(--house-style);border-top-color:var(--house-style);box-shadow:0 0 8px var(--house-style-focus);transform:translateZ(0);will-change:transform}
|
|
377
|
+
@keyframes github-activity-ring{from{transform:translateZ(0) rotate(0deg)}to{transform:translateZ(0) rotate(360deg)}}
|
|
378
|
+
/* A running execution is live state, not decorative motion. Keep both
|
|
379
|
+
progress rings moving even when the device requests reduced transitions. */
|
|
380
|
+
@media (prefers-reduced-motion:reduce){.indicator--running{animation:github-activity-ring 1.1s linear infinite!important;animation-play-state:running!important}.dashboard-splash__spinner{animation:dashboard-splash-spin .85s linear infinite!important;animation-play-state:running!important}}
|
|
381
|
+
|
|
382
|
+
/* A sending chat action remains visibly in the conversation category while disabled. */
|
|
383
|
+
.chat-compose .chat-send:disabled:hover{background:#d0a4ff!important;border-color:#d0a4ff!important;color:#17151a!important}
|
|
384
|
+
|
|
385
|
+
/* Dashboard UI component layer ------------------------------------------------
|
|
386
|
+
Shared layout, focus and surface tokens keep late UI refinements out of
|
|
387
|
+
one-off overrides and make the component blocks below safe to maintain. */
|
|
388
|
+
|
|
389
|
+
/* Header */
|
|
390
|
+
.dashboard-titlebar__brand{align-items:center;display:flex;flex:1 1 260px;gap:10px;min-width:0}
|
|
391
|
+
.dashboard-titlebar__actions{align-items:center;display:flex;flex:none;gap:12px}
|
|
392
|
+
.page-refresh{align-items:center;background:transparent;border:1px solid var(--house-style);border-radius:50%;color:var(--house-style);cursor:pointer;display:inline-flex;font:22px/1 system-ui;height:32px;justify-content:center;min-height:32px;min-width:32px;padding:0;width:32px}.page-refresh:hover{background:var(--house-style);color:var(--button-ink)}.page-refresh:focus-visible{outline:3px solid var(--house-style);outline-offset:3px}
|
|
393
|
+
.dashboard-locale,.dashboard-project{align-items:center;color:#b9b6c0;display:flex;font:12px system-ui;gap:6px;white-space:nowrap}.dashboard-locale select,.dashboard-project select{background:#252530;border:1px solid #747484;border-radius:7px;color:inherit;font:inherit;min-height:32px;padding:4px 7px}
|
|
394
|
+
.dashboard-locale__native{display:none!important}
|
|
395
|
+
.dashboard-select__native{height:1px!important;margin:-1px!important;opacity:0!important;pointer-events:none!important;position:absolute!important;width:1px!important}.dashboard-select-picker{box-sizing:border-box;min-width:132px;position:relative}.dashboard-select-picker .dashboard-locale__button{width:100%}.configuration-controls .dashboard-select-picker{display:block;max-width:14rem;width:100%}.log-controls .dashboard-select-picker{min-width:132px}
|
|
396
|
+
.dashboard-locale__picker{position:relative}.dashboard-locale__button{align-items:center;background:#fff;border:1px solid #9aabc3;border-radius:7px;color:#1b2b38;cursor:pointer;display:flex;font:400 inherit;gap:14px;justify-content:space-between;min-height:32px;min-width:132px;padding:4px 10px}.dashboard-locale__button:focus-visible{outline:3px solid var(--house-style);outline-offset:3px}.dashboard-locale__menu{background:#fff;border:1px solid #9aabc3;border-radius:0 0 7px 7px;box-shadow:0 8px 18px #0003;box-sizing:border-box;display:grid;left:0;overflow:hidden;position:absolute;top:calc(100% + 2px);width:100%;z-index:20}.dashboard-locale__menu[hidden]{display:none}.dashboard-locale__menu button{background:#fff;border:0;color:#1b2b38;cursor:pointer;font:400 inherit;padding:8px 10px;text-align:left}.dashboard-locale__menu button[aria-selected="true"]{background:transparent;box-shadow:inset 3px 0 0 var(--house-style);color:inherit}.dashboard-locale__menu button:hover,.dashboard-locale__menu button:focus-visible{background:var(--operations-console-mark-blue);color:var(--button-ink);outline:0}
|
|
397
|
+
html[data-theme="dark"] .dashboard-locale__button{background:#252530;border-color:#747484;color:#f7f3ee;color-scheme:dark}html[data-theme="dark"] .dashboard-locale__menu{background:#252530;border-color:#747484;box-shadow:0 10px 22px #0009;color-scheme:dark}html[data-theme="dark"] .dashboard-locale__menu button{background:#252530;color:#f7f3ee}
|
|
398
|
+
html[data-theme="light"] :is(body,.dashboard-titlebar,.footer){background:var(--dashboard-page-surface-light)}
|
|
399
|
+
html[data-theme="light"] :is(.dashboard-locale,.dashboard-project){color:#415168}html[data-theme="light"] :is(.dashboard-locale,.dashboard-project) select{background:var(--dashboard-surface-light);border-color:#9aabc3}
|
|
400
|
+
@media (max-width:1400px){.dashboard-titlebar{align-items:flex-start;flex-wrap:wrap}.dashboard-titlebar__actions{flex:1 1 100%;flex-wrap:wrap;justify-content:flex-end}}
|
|
401
|
+
/* The compact desktop title bar wraps its settings below the brand. Lift the
|
|
402
|
+
refresh action slightly so it remains optically aligned with that brand. */
|
|
403
|
+
@media (max-width:760px){.dashboard-titlebar__actions{justify-content:flex-start}}
|
|
404
|
+
@media (max-width:620px){.dashboard-titlebar h1{font-size:25px}.dashboard-titlebar__actions{gap:8px}:is(.dashboard-locale,.dashboard-project)>span:first-child{display:none}}
|
|
405
|
+
|
|
406
|
+
/* Main sections */
|
|
407
|
+
.dashboard-grid{gap:var(--dashboard-section-gap)}
|
|
408
|
+
.execution-context--primary{background:#1f3140!important;border-color:#65c5d9!important}.execution-context--primary strong{color:#8de1f2!important}.execution-context--primary .field{border-top:1px solid #65c5d955;padding-top:8px}.execution-context--primary .field:first-of-type{border-top:0;padding-top:0}.execution-context__phase{border:1px solid currentColor;border-radius:999px;display:inline-block;font-weight:700;padding:4px 8px}.execution-context__planning-empty{border-top:1px solid #65c5d955;color:var(--dashboard-modal-muted);font-size:14px;line-height:1.45;margin:0;padding-top:10px}
|
|
409
|
+
.execution-mode-field__value{align-items:center;display:flex;gap:10px;justify-content:space-between;min-width:0}.execution-mode-field__value>span{min-width:0;overflow-wrap:anywhere}.execution-mode-info{color:#65c5d9;flex:none;grid-area:auto}.execution-mode-info:hover{background:#65c5d9!important;border-color:#65c5d9!important;color:#162832!important}
|
|
410
|
+
.workspace-card{margin-bottom:0}
|
|
411
|
+
.workspace-card,.inbox-queue,.prompt-history,#rateLimits,#componentLogs,#codexChat,#engineering-dashboard-content>.technical-details:not(#componentLogs),.telemetry,.platform-health,.current-run{box-shadow:none}
|
|
412
|
+
#currentRun>.current-run__title{border-bottom-color:var(--category-color)}
|
|
413
|
+
|
|
414
|
+
/* Scrolling and focus */
|
|
415
|
+
/* The body already owns the iOS safe area. Do not reserve it a second time
|
|
416
|
+
inside the scrolling region, especially in landscape where it is wide. */
|
|
417
|
+
.dashboard-scroll-region{padding-inline:var(--dashboard-scroll-gutter);scrollbar-gutter:auto}
|
|
418
|
+
#engineering-dashboard-content{overflow-anchor:none}
|
|
419
|
+
.footer__item{align-items:baseline;display:inline-flex;gap:4px;min-width:0}
|
|
420
|
+
.technical-grid>.card,.log-table-wrap{min-width:0}.log-table-wrap{box-sizing:border-box;width:100%}
|
|
421
|
+
/* Host paths are machine-generated and can be a single unbroken token. Keep
|
|
422
|
+
them inside their diagnostic card instead of creating page-wide overflow. */
|
|
423
|
+
#executionHostRuntimePath{display:block;max-inline-size:100%;min-inline-size:0;overflow-wrap:anywhere;white-space:pre-wrap;word-break:break-word}
|
|
424
|
+
#promptHistory .log-table-wrap{
|
|
425
|
+
/* Pagination supplies exactly ten rows. Let their natural height define the
|
|
426
|
+
field, so a sparse area is never left below the final visible row. */
|
|
427
|
+
height:auto;
|
|
428
|
+
max-height:none;
|
|
429
|
+
min-height:0;
|
|
430
|
+
overflow-y:hidden;
|
|
431
|
+
}
|
|
432
|
+
@media (max-width:620px) and (orientation:portrait) and (hover:none) and (pointer:coarse){
|
|
433
|
+
/* iOS handles a document scroll more reliably than a nested flex scroller.
|
|
434
|
+
It also lets the title naturally leave the viewport with the content. */
|
|
435
|
+
.dashboard-sticky-header{position:static}.dashboard-titlebar{position:static}
|
|
436
|
+
body{display:block;height:auto;min-height:100dvh;overflow-x:hidden;overflow-y:auto;padding-inline:max(12px,env(safe-area-inset-left)) max(12px,env(safe-area-inset-right))}
|
|
437
|
+
.dashboard-scroll-region{min-height:auto;overflow:visible;padding-inline:6px;scrollbar-gutter:stable both-edges}
|
|
438
|
+
.footer{box-sizing:border-box;display:flex;flex-wrap:wrap;gap:4px 10px;justify-content:center;overflow:visible;padding-inline:6px;text-align:center;white-space:normal}
|
|
439
|
+
.footer__item{justify-content:center}
|
|
440
|
+
.footer__separator{display:none}
|
|
441
|
+
}
|
|
442
|
+
@media (max-height:600px) and (orientation:landscape){
|
|
443
|
+
/* On an iPhone the horizontal safe area already clears the notch/Dynamic
|
|
444
|
+
Island. Keep only a small content gap instead of adding desktop padding. */
|
|
445
|
+
body{padding-inline:max(8px,env(safe-area-inset-left)) max(8px,env(safe-area-inset-right))}
|
|
446
|
+
.dashboard-scroll-region{padding-inline:6px}
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
/* The title bar stays compact on phones: its controls are available from one
|
|
450
|
+
labelled disclosure, then presented as full-width rows rather than unlabeled
|
|
451
|
+
switch glyphs. Desktop keeps the existing inline control strip. */
|
|
452
|
+
.dashboard-titlebar__options{align-items:center;display:flex;flex:0 0 auto;min-width:0}.dashboard-titlebar__options-toggle{display:none}.dashboard-titlebar__options-content{align-items:center;display:flex;flex:0 0 auto;gap:12px}
|
|
453
|
+
/* At the intermediate desktop width the title owns the first row while the
|
|
454
|
+
status, refresh and inline options share the next. A grid prevents the
|
|
455
|
+
refresh button from acquiring a different flex baseline than the status. */
|
|
456
|
+
@media (min-width:1241px) and (max-width:1400px){
|
|
457
|
+
.dashboard-titlebar__actions{align-items:center;display:grid;grid-template-columns:auto auto max-content;justify-content:end}
|
|
458
|
+
.dashboard-titlebar__actions>:is(.dashboard-health,.page-refresh,.dashboard-titlebar__options){align-self:center;margin-block:0}
|
|
459
|
+
}
|
|
460
|
+
@media (max-width:1240px){
|
|
461
|
+
.dashboard-titlebar{align-items:flex-start;flex-wrap:wrap;position:relative}
|
|
462
|
+
.dashboard-titlebar__brand{flex-basis:100%;padding-right:0}
|
|
463
|
+
.dashboard-titlebar__actions{align-items:center;display:grid;flex:1 1 100%;gap:10px 8px;grid-template-columns:auto auto max-content;justify-content:end;margin-left:0;width:100%}
|
|
464
|
+
.page-refresh{position:static;transform:none}
|
|
465
|
+
.dashboard-titlebar__options{display:contents}
|
|
466
|
+
.dashboard-titlebar__options-toggle{-webkit-appearance:none;appearance:none;align-items:center;background-color:#3f4049!important;background-image:none!important;border:1px solid var(--house-style);border-radius:999px;color:var(--operations-console-blue-ink)!important;cursor:pointer;display:flex;font:600 13px/1 system-ui;justify-content:space-between;min-height:36px;min-width:116px;padding:0 12px;width:auto}
|
|
467
|
+
.dashboard-titlebar__options-toggle::after{content:"▾";font-size:16px;line-height:1;transition:transform .18s ease}
|
|
468
|
+
.dashboard-titlebar__options-toggle[aria-expanded="true"]::after{transform:rotate(180deg)}
|
|
469
|
+
.dashboard-titlebar__options-toggle{grid-column:3}
|
|
470
|
+
.dashboard-titlebar__options-content{background:#3f4049;border:1px solid var(--house-style);border-radius:14px;box-shadow:0 12px 30px #0008;display:grid;gap:8px;grid-column:1 / -1;margin:0;padding:14px;position:static;width:auto;z-index:61}
|
|
471
|
+
.dashboard-titlebar__options-content[hidden]{display:none}
|
|
472
|
+
.dashboard-titlebar__options-content>:is(.dashboard-locale,.dashboard-project),.dashboard-titlebar__options-content>.theme-toggle,.dashboard-titlebar__options-content>.section-state-toggle,.dashboard-titlebar__options-content>.auto-refresh-toggle{align-items:center;box-sizing:border-box;display:flex;font:600 13px/1 system-ui;justify-content:space-between;min-height:44px;width:100%}
|
|
473
|
+
.dashboard-titlebar__options-content>:is(.dashboard-locale,.dashboard-project)>span:first-child{display:block}
|
|
474
|
+
.dashboard-titlebar__options-content>:is(.dashboard-locale,.dashboard-project)>span:first-child,
|
|
475
|
+
.dashboard-titlebar__options-content>.theme-toggle .theme-toggle__label,
|
|
476
|
+
.dashboard-titlebar__options-content>.section-state-toggle .section-state-toggle__label,
|
|
477
|
+
.dashboard-titlebar__options-content>.auto-refresh-toggle span{font:600 13px/1 system-ui}
|
|
478
|
+
.dashboard-titlebar__options-content>:is(.dashboard-locale,.dashboard-project)>.dashboard-locale__picker{display:flex}
|
|
479
|
+
.dashboard-titlebar__options-content>.dashboard-locale>.dashboard-locale__picker :is(#dashboardLocaleValue,[aria-hidden]){display:inline}
|
|
480
|
+
.dashboard-titlebar__options-content>.theme-toggle,.dashboard-titlebar__options-content>.section-state-toggle{flex-direction:row;gap:12px;padding:0}
|
|
481
|
+
/* Keep both pseudo-elements on the same end of the full-width row. Without
|
|
482
|
+
this, the track follows the reversed flex layout while its absolute thumb
|
|
483
|
+
remains at the left edge next to the label on iPhone. */
|
|
484
|
+
.dashboard-titlebar__options-content>:is(.theme-toggle,.section-state-toggle)::before{position:absolute;right:0;top:10px}
|
|
485
|
+
.dashboard-titlebar__options-content>:is(.theme-toggle,.section-state-toggle)::after{left:auto;right:21px}
|
|
486
|
+
.dashboard-titlebar__options-content>.theme-toggle .theme-toggle__label,.dashboard-titlebar__options-content>.section-state-toggle .section-state-toggle__label,.dashboard-titlebar__options-content>.auto-refresh-toggle span{display:block}
|
|
487
|
+
.dashboard-titlebar__options-content>.auto-refresh-toggle{flex-direction:row-reverse;gap:12px;white-space:normal}
|
|
488
|
+
.dashboard-titlebar__options-content>.auto-refresh-toggle input{flex:none}
|
|
489
|
+
/* Option rows are flat navigation controls, not raised cards. A direct-touch
|
|
490
|
+
browser may otherwise apply the generic glass shadow to a full-width row
|
|
491
|
+
or locale picker. The switch thumbs keep their own compact elevation. */
|
|
492
|
+
.dashboard-titlebar__options-content>:is(.dashboard-locale,.dashboard-project,.theme-toggle,.section-state-toggle,.auto-refresh-toggle),
|
|
493
|
+
.dashboard-titlebar__options-content .dashboard-locale__button{
|
|
494
|
+
-webkit-backdrop-filter:none!important;
|
|
495
|
+
backdrop-filter:none!important;
|
|
496
|
+
background-image:none!important;
|
|
497
|
+
box-shadow:none!important;
|
|
498
|
+
filter:none!important;
|
|
499
|
+
}
|
|
500
|
+
.dashboard-titlebar__options-content>:is(.theme-toggle,.section-state-toggle):active{transform:none!important}
|
|
501
|
+
html[data-theme="light"] .dashboard-titlebar__options-toggle{background-color:#f1f3f7!important}
|
|
502
|
+
html[data-theme="light"] .dashboard-titlebar__options-content{background:#f1f3f7;border-color:var(--house-style);box-shadow:0 12px 30px #26395533}
|
|
503
|
+
}
|
|
504
|
+
@media (max-width:1240px) and (max-height:600px){
|
|
505
|
+
/* Keep the compact control strip in place, but let its popup own any
|
|
506
|
+
necessary scrolling. The sticky header must never become the scroller,
|
|
507
|
+
otherwise the lower option rows disappear behind the dashboard. */
|
|
508
|
+
.dashboard-sticky-header{overflow:visible}
|
|
509
|
+
.dashboard-titlebar__options-content{max-height:calc(100dvh - 120px);overflow-y:auto;overscroll-behavior:contain}
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
/* Log controls */
|
|
513
|
+
label:has(> :is(input,select,textarea)):not(.dashboard-locale):not(.auto-refresh-toggle),.log-controls label:has(> :is(input,select,textarea)){row-gap:var(--dashboard-control-label-gap)}
|
|
514
|
+
.reset-log-filters{align-self:end;background:var(--dashboard-log-control-surface);border:1px solid #f0b66a;border-radius:50%;color:#fff0dc;font:18px/1 system-ui;height:32px;min-height:32px;min-width:32px;margin-left:8px;padding:0;transform:translateX(4px);width:32px}
|
|
515
|
+
.reset-log-filters:hover:not(:disabled){background:#f0b66a;color:#201812}
|
|
516
|
+
html[data-theme="light"] .reset-log-filters{background:var(--dashboard-log-control-surface-light);border-color:#c17a1f;color:#7a4912}
|
|
517
|
+
html[data-theme="light"] .reset-log-filters:hover:not(:disabled){background:#f0b66a;color:#201812}
|
|
518
|
+
.log-date-control__field{display:block;min-inline-size:0;position:relative}.log-date-control__field input{padding-right:58px}.log-date-control__clear{align-items:center;background:transparent;border:0;border-radius:50%;color:#c8c4cc;cursor:pointer;display:flex;font:21px/1 system-ui;height:24px;justify-content:center;margin:0;min-height:24px;min-width:24px;padding:0;position:absolute;right:32px;top:50%;transform:translateY(-50%);width:24px}.log-date-control__clear[hidden]{display:none}.log-date-control__clear:hover{background:#f0b66a;color:#201812}.log-date-control__clear:focus-visible{outline-offset:1px}html[data-theme="light"] .log-date-control__clear{color:#58677b}html[data-theme="light"] .log-date-control__clear:hover{background:#f0b66a;color:#201812}
|
|
519
|
+
|
|
520
|
+
/* Terminal-state meaning must survive the broad light-table text color. */
|
|
521
|
+
html[data-theme="light"] #promptHistoryRows .prompt-history-status--complete{color:#14865b!important}html[data-theme="light"] #promptHistoryRows .prompt-history-status--blocked{color:#a65a00!important}html[data-theme="light"] #promptHistoryRows .prompt-history-status--failed{color:#b42340!important}
|
|
522
|
+
|
|
523
|
+
/* Preserve the meaning carried by log severity colours after the light-table
|
|
524
|
+
foreground rule makes ordinary table text dark. */
|
|
525
|
+
html[data-theme="light"] .log-level--error{color:#b42340!important}html[data-theme="light"] .log-level--warning{color:#9a5b00!important}html[data-theme="light"] .log-level--info{color:#1769aa!important}html[data-theme="light"] .log-level--debug{color:#566579!important}
|
|
526
|
+
|
|
527
|
+
/* Advisory chat keeps code readable on a light response surface. */
|
|
528
|
+
html[data-theme="light"] .chat-message__body :is(code,pre){background:#e9eef6;color:#182230}
|
|
529
|
+
|
|
530
|
+
/* Fenced advice is distinguished by monospace alone; it is not a nested card. */
|
|
531
|
+
.chat-message__body pre{background:transparent;border-radius:0;padding:0}
|
|
532
|
+
html[data-theme="light"] .chat-message__body pre{background:transparent;color:inherit}
|
|
533
|
+
|
|
534
|
+
/* Inline AI terms are distinguished by monospace alone, never a black chip. */
|
|
535
|
+
.chat-message__body code{background:transparent;border-radius:0;padding:0}
|
|
536
|
+
html[data-theme="light"] .chat-message__body code{background:transparent;color:inherit}
|
|
537
|
+
|
|
538
|
+
/* Run-scoped AI conversation is opened from Prompt History, alongside evidence actions. */
|
|
539
|
+
.prompt-history-chat{align-items:center;background:transparent;border:1px solid #d0a4ff;border-radius:50%;color:#d0a4ff;display:inline-flex;font:16px/1 system-ui;justify-content:center;min-height:32px;min-width:32px;padding:0}.prompt-history-chat:hover,.prompt-history-chat--recorded{background:#d0a4ff;border-color:#d0a4ff;color:#17151a}.prompt-history-chat--recorded{font-weight:800}
|
|
540
|
+
/* The shared modal shell owns the chat frame, header and safe-area sizing.
|
|
541
|
+
Conversation-specific rules begin at the chat surface inside that frame. */
|
|
542
|
+
.prompt-chat-modal__panel{display:grid;grid-template-rows:auto auto minmax(0,1fr);height:100%;overflow:hidden}.prompt-chat-modal #codexChat{align-self:stretch;background:var(--modal-surface);border:0;border-radius:0;box-shadow:none;height:auto;min-height:0;overflow:hidden;padding:0}html[data-theme="light"] .prompt-chat-modal #codexChat{background:var(--modal-surface)}.prompt-chat-modal #codexChat .codex-chat__details{display:grid;grid-template-rows:minmax(0,1fr) auto auto auto;height:100%;min-height:0}.prompt-chat-modal .chat-messages{--chat-bubble-max-block:calc(100% * 2 / 3);max-height:none;min-height:0;overflow:auto}.prompt-chat-modal .chat-compose,.prompt-chat-modal .chat-status,.prompt-chat-modal #codexChat .field{flex:none}
|
|
543
|
+
/* Keep role and timestamp fixed within a long bubble while only its message
|
|
544
|
+
body scrolls. The messages list owns the definite available chat height.
|
|
545
|
+
`auto` deliberately reserves no scrollbar space for a short message. */
|
|
546
|
+
.prompt-chat-modal .chat-message{box-sizing:border-box;display:flex;flex-direction:column;max-block-size:var(--chat-bubble-max-block);min-block-size:0;overflow:hidden}.prompt-chat-modal .chat-message__body{flex:0 1 auto;min-block-size:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:auto;scrollbar-width:thin}
|
|
547
|
+
.prompt-chat-modal .chat-message:not(.chat-message--scrollable){max-block-size:none;overflow:visible}.prompt-chat-modal .chat-message:not(.chat-message--scrollable) .chat-message__body{flex:none;overflow:visible}.prompt-chat-modal .chat-message--scrollable{max-block-size:var(--chat-bubble-max-block);overflow:hidden}.prompt-chat-modal .chat-message--scrollable .chat-message__body{flex:0 1 auto;min-block-size:0;overflow-x:hidden;overflow-y:auto}
|
|
548
|
+
.prompt-chat-modal__header h2::before{content:"⋯"}
|
|
549
|
+
|
|
550
|
+
/* AI antwoorden krijgen een eigen paarse laag, los van de chatmodal. */
|
|
551
|
+
.prompt-chat-modal{--prompt-chat-answer-surface:#3c2a4d}.prompt-chat-modal .chat-message--assistant{background:var(--prompt-chat-answer-surface);border-color:#bd8ee8}html[data-theme="light"] .prompt-chat-modal{--prompt-chat-answer-surface:#f3ebff}
|
|
552
|
+
|
|
553
|
+
/* Keep the fixed close control above long detail content on every viewport. */
|
|
554
|
+
|
|
555
|
+
/* The modal footer remains visible even after a visitor enlarges the question box. */
|
|
556
|
+
.prompt-chat-modal #codexChat{display:grid;grid-template-rows:minmax(0,1fr);min-height:0}.prompt-chat-modal .chat-input{height:clamp(88px,14dvh,128px);max-height:128px;min-height:88px}.prompt-chat-modal #codexChat .codex-chat__details{border-top:0;box-sizing:border-box;grid-template-rows:minmax(0,1fr) auto auto auto;margin-top:0;min-height:0;padding:0 6px 10px}.prompt-chat-modal .chat-question-label{margin-bottom:6px}.prompt-chat-modal .chat-compose{min-height:0}.prompt-chat-modal .chat-meta{align-items:end;display:flex;gap:16px;justify-content:space-between;min-height:2.5rem}.prompt-chat-modal .chat-meta .chat-status{margin:0 0 2px;min-height:1.25em;overflow-wrap:anywhere;text-align:right}.prompt-chat-modal #codexChat .field{margin:6px 0 0;padding-bottom:2px}
|
|
557
|
+
.prompt-chat-modal .chat-meta{align-items:start}.prompt-chat-modal .chat-meta .chat-status{align-self:start;margin:6px 0 0}
|
|
558
|
+
/* iOS Safari zooms the document when a control uses text below 16px. Keep
|
|
559
|
+
every editable dashboard control at that threshold in every renderer. */
|
|
560
|
+
:is(input,select,textarea){font-size:16px}
|
|
561
|
+
|
|
562
|
+
/* A short message must keep its natural height; the scroll region owns spare space. */
|
|
563
|
+
.chat-messages{align-content:start;align-items:start}.chat-message{align-self:start}
|
|
564
|
+
|
|
565
|
+
/* Category colour pairs -----------------------------------------------------
|
|
566
|
+
Every dashboard surface carries a primary accent for its boundary/title and
|
|
567
|
+
a closely related, lighter secondary accent for field labels. This makes
|
|
568
|
+
dense cards scannable without adding an unrelated third colour. */
|
|
569
|
+
.card,.technical-details{--category-secondary:#e2ccff}
|
|
570
|
+
.card--monitoring,.current-run .card:has(#currentTime),.current-run .card:has(#executionEstimate){--category-secondary:#a7e7f2}
|
|
571
|
+
.card--context,.technical-details:not(#componentLogs),.current-run .card:has(#queueList),.current-run .card:has(#runId),.current-run .card:has(#executionMode){--category-secondary:#c7b7ff}
|
|
572
|
+
.card--resource,#processMetrics,#usage,#rateLimits{--category-secondary:#a4f0ca}
|
|
573
|
+
.card--evidence,#commits{--category-secondary:#b9ddff}
|
|
574
|
+
.card--diagnostic,.technical-details--diagnostic,#currentDiagnostic,#componentLogs,.current-run .card:has(#predecessorRun){--category-secondary:#ffd59b}
|
|
575
|
+
.card--conversation,#codexChat{--category-secondary:#e5ccff}
|
|
576
|
+
#currentRun,#currentRun .card:has(#currentTime),#currentRun .card:has(#executionEstimate),#currentRun .card:has(#runId),#currentRun .card:has(#executionMode){--category-secondary:#f9b6d8}
|
|
577
|
+
.workspace-card{--category-secondary:#ffe795}
|
|
578
|
+
.inbox-queue{--category-secondary:#bfc5ff}
|
|
579
|
+
.prompt-history{--category-secondary:#ffc0d0}
|
|
580
|
+
.telemetry{--category-secondary:#ffb0bc}
|
|
581
|
+
.platform-health{--category-secondary:#c8f27f}
|
|
582
|
+
#technicalDetails{--section-secondary:#a7e7f2}
|
|
583
|
+
#technicalDetails{container-name:operational-overview;container-type:inline-size}
|
|
584
|
+
#technicalDetails .technical-grid{grid-template-columns:minmax(0,1fr)}
|
|
585
|
+
@container operational-overview (min-width:760px){#technicalDetails .technical-grid{grid-template-columns:repeat(2,minmax(0,1fr))}#technicalDetails #technicalDiagnosticsCard{grid-column:1 / -1}}
|
|
586
|
+
#componentLogs{--section-secondary:#ffd59b}
|
|
587
|
+
#technicalDetails .card,#componentLogs .card{--category-secondary:var(--section-secondary)}
|
|
588
|
+
#currentRun .card{--category-secondary:#f9b6d8}
|
|
589
|
+
|
|
590
|
+
/* Primary stays with the heading; secondary carries every field caption. */
|
|
591
|
+
:is(.card,.technical-details,.workspace-card,.inbox-queue,.prompt-history,.telemetry,.platform-health,.current-run) .label,
|
|
592
|
+
:is(.technical-details,.prompt-history,.telemetry,.platform-health) .log-controls label,
|
|
593
|
+
:is(.technical-details,.prompt-history,.telemetry,.platform-health) .log-table th{color:var(--category-secondary,var(--category-color))}
|
|
594
|
+
#currentRun .card .label,#currentRun .current-run__grid>.field>.label{color:var(--category-secondary)}
|
|
595
|
+
#currentRun>.current-run__title>.label{color:var(--category-color)}
|
|
596
|
+
|
|
597
|
+
/* The same paired hierarchy remains accessible on the light dashboard. */
|
|
598
|
+
html[data-theme="light"] :is(.card,.technical-details,.workspace-card,.inbox-queue,.prompt-history,.telemetry,.platform-health,.current-run) .label,
|
|
599
|
+
html[data-theme="light"] :is(.technical-details,.prompt-history,.telemetry,.platform-health) .log-controls label,
|
|
600
|
+
html[data-theme="light"] :is(.technical-details,.prompt-history,.telemetry,.platform-health) .log-table th{color:color-mix(in srgb,var(--category-secondary,var(--category-color)) 76%,#182230)}
|
|
601
|
+
html[data-theme="light"] #currentRun .card .label,html[data-theme="light"] #currentRun .current-run__grid>.field>.label{color:color-mix(in srgb,var(--category-secondary) 76%,#182230)}
|
|
602
|
+
html[data-theme="light"] #currentRun>.current-run__title>.label{color:color-mix(in srgb,var(--category-color) 82%,#182230)}
|
|
603
|
+
|
|
604
|
+
/* Table separators are subordinate structure, so every table derives them
|
|
605
|
+
from its parent category's secondary accent rather than a neutral black. */
|
|
606
|
+
:is(.log-table,.telemetry-table){--dashboard-table-divider:color-mix(in srgb,var(--modal-secondary-accent,var(--category-secondary,var(--category-color,#9aabc3))) 52%,transparent)}
|
|
607
|
+
:is(.log-table,.telemetry-table) th,:is(.log-table,.telemetry-table) tbody tr:not(:last-child)>td{border-bottom-color:var(--dashboard-table-divider)!important}
|
|
608
|
+
/* Keep the daily telemetry table in the same bounded scroll field as the
|
|
609
|
+
component logs. The border belongs to the scrolling wrapper so its rounded
|
|
610
|
+
corners remain intact while the wide table is panned on a phone. */
|
|
611
|
+
.telemetry-scroll{border:1px solid color-mix(in srgb,var(--category-color,#fb7185) 55%,#3d3651);border-radius:9px;box-sizing:border-box;overflow-x:auto;overflow-y:hidden}
|
|
612
|
+
/* Data cells must paint their own opaque surface. Leaving them transparent
|
|
613
|
+
lets Mobile Safari composite the card behind a horizontally-scrolled table
|
|
614
|
+
as a misleading glass gradient. */
|
|
615
|
+
:is(.log-table,.telemetry-table){background:var(--dashboard-expanded-content-surface);background-image:none!important}
|
|
616
|
+
:is(.log-table,.telemetry-table) tbody td{background:var(--dashboard-expanded-content-surface);background-image:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important}
|
|
617
|
+
/* Tables share a neutral header band; the first-column rule below deliberately
|
|
618
|
+
replaces it with the category tint to preserve the anchored identifier. */
|
|
619
|
+
:is(.log-table,.telemetry-table) th:not(:first-child){background:#2d2d38}
|
|
620
|
+
html[data-theme="light"] :is(.log-table,.telemetry-table) th:not(:first-child){background:#eaf0f8}
|
|
621
|
+
html[data-theme="light"] :is(.log-table,.telemetry-table) tbody td{background:#fff}
|
|
622
|
+
/* Detail telemetry is rendered inside a modal with its own surface tokens.
|
|
623
|
+
Keep every non-identifier header on the same opaque grey band as its
|
|
624
|
+
dashboard counterpart, rather than inheriting the modal body surface. */
|
|
625
|
+
.telemetry-detail-modal .telemetry-table th:not(:first-child){background-color:#2d2d38!important}
|
|
626
|
+
html[data-theme="light"] .telemetry-detail-modal .telemetry-table th:not(:first-child){background-color:#eaf0f8!important}
|
|
627
|
+
/* Each table keeps its first field visually anchored to its own category.
|
|
628
|
+
Prompt History supplies its stronger rose variant above; the shared rule
|
|
629
|
+
gives logs and telemetry the same readable column structure. */
|
|
630
|
+
:is(.log-table,.telemetry-table) th:first-child,:is(.log-table,.telemetry-table) td:first-child:not([colspan]){background:color-mix(in srgb,var(--category-color,#9aabc3) 12%,var(--dashboard-expanded-content-surface))}
|
|
631
|
+
html[data-theme="light"] :is(.log-table,.telemetry-table) th:first-child,html[data-theme="light"] :is(.log-table,.telemetry-table) td:first-child:not([colspan]){background:color-mix(in srgb,var(--category-color,#9aabc3) 12%,#fff)}
|
|
632
|
+
:is(.log-table,.telemetry-table) tbody tr:hover>td:first-child:not([colspan]){background:color-mix(in srgb,var(--category-color,#9aabc3) 18%,var(--dashboard-expanded-content-surface))}
|
|
633
|
+
html[data-theme="light"] :is(.log-table,.telemetry-table) tbody tr:hover>td:first-child:not([colspan]){background:color-mix(in srgb,var(--category-color,#9aabc3) 18%,#fff)}
|
|
634
|
+
.telemetry-table th.log-sortable{cursor:pointer;user-select:none}.telemetry-table th.log-sortable::after{color:var(--category-color,#fb7185);content:attr(data-sort-indicator);font-size:11px;margin-left:6px}.telemetry-table th.log-sortable:focus-visible{outline:2px solid var(--category-color,#fb7185);outline-offset:-2px}
|
|
635
|
+
|
|
636
|
+
/* Swap the active-operation and technical-detail palettes: live execution is
|
|
637
|
+
monitoring-cyan; static technical evidence is operation-pink. */
|
|
638
|
+
#currentRun{--category-color:#65c5d9;--category-secondary:#a7e7f2;background:#1e2b33}
|
|
639
|
+
#currentRun{container-name:active-execution;container-type:inline-size}
|
|
640
|
+
#currentRun .current-run__grid,#currentRun .current-run__grid>*{min-width:0}
|
|
641
|
+
@container active-execution (min-width:760px){#currentRun .current-run__grid{grid-template-columns:repeat(2,minmax(0,1fr))}#currentRun #currentDiagnostic{grid-column:1 / -1}}
|
|
642
|
+
#currentRun .card,#currentRun .card:has(#currentTime),#currentRun .card:has(#executionEstimate),#currentRun .card:has(#runId),#currentRun .card:has(#executionMode){--category-color:#65c5d9;--category-secondary:#a7e7f2;background:#1b2931;border-color:#65c5d9}
|
|
643
|
+
#currentRun :is(.execution-lifecycle,.execution-context--primary){background:#1b2931!important}
|
|
644
|
+
#engineering-dashboard-content>#technicalDetails{--category-color:var(--house-style);--section-secondary:#a7e7f2;background:#302a24;border-color:var(--house-style)}
|
|
645
|
+
html[data-theme="light"] #currentRun{background:#effbfe}
|
|
646
|
+
html[data-theme="light"] #currentRun :is(.execution-lifecycle,.execution-context--primary){background:#fff!important}
|
|
647
|
+
html[data-theme="light"] #engineering-dashboard-content>#technicalDetails{background:#fff6e9}
|
|
648
|
+
|
|
649
|
+
/* Health remains an accent-led status surface: neutral graphite carries the
|
|
650
|
+
information while green is reserved for health state, borders and actions. */
|
|
651
|
+
html:not([data-theme="light"]) .platform-health__component,
|
|
652
|
+
html:not([data-theme="light"]) .platform-health__component[data-health="false"]{background:#202126}
|
|
653
|
+
html[data-theme="light"] .platform-health__component{background:transparent}
|
|
654
|
+
html:not([data-theme="light"]) .platform-health[open]>summary{background:color-mix(in srgb,var(--category-color) 6%,var(--dashboard-expanded-content-surface))}
|
|
655
|
+
/* Health components are status cards, not glass tiles. Give Safari explicit
|
|
656
|
+
opaque paint layers so the parent section cannot bleed through them while
|
|
657
|
+
the page is scrolled on a narrow touch screen. */
|
|
658
|
+
.platform-health,.platform-health>summary,.platform-health__component{background-image:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important}
|
|
659
|
+
.platform-health__component{isolation:isolate}
|
|
660
|
+
|
|
661
|
+
/* Expanded main categories separate their coloured heading from neutral content.
|
|
662
|
+
Collapsed summaries retain their full category surface as a compact cue. */
|
|
663
|
+
:is(.workspace-card,.inbox-queue,.prompt-history,#currentRun,#rateLimits,.platform-health,.telemetry,#componentLogs,#engineering-dashboard-content>.technical-details:not(#componentLogs))[open]{background:var(--dashboard-expanded-content-surface)!important}
|
|
664
|
+
:is(.workspace-card,.inbox-queue,.prompt-history,#currentRun,#rateLimits,.platform-health,.telemetry,#componentLogs,#engineering-dashboard-content>.technical-details:not(#componentLogs))[open]>summary{background:color-mix(in srgb,var(--category-color) var(--dashboard-expanded-header-strength),var(--dashboard-expanded-content-surface));border-radius:15px 15px 0 0;margin:-14px -14px 12px!important;padding:14px 54px 10px 14px!important}
|
|
665
|
+
:is(.workspace-card,.inbox-queue,.prompt-history,#currentRun,#rateLimits,.platform-health,.telemetry,#componentLogs,#engineering-dashboard-content>.technical-details:not(#componentLogs))[open]>summary::before{right:14px;top:14px}
|
|
666
|
+
html[data-theme="light"] :is(.workspace-card,.inbox-queue,.prompt-history,#currentRun,#rateLimits,.platform-health,.telemetry,#componentLogs,#engineering-dashboard-content>.technical-details:not(#componentLogs))[open]>summary{background:color-mix(in srgb,var(--category-color) 12%,#fff)}
|
|
667
|
+
|
|
668
|
+
/* A collapsed category is a compact summary, so it has no content divider. */
|
|
669
|
+
:is(.workspace-card,.inbox-queue,.prompt-history,#currentRun,#rateLimits,.platform-health,.telemetry,#componentLogs,#codexChat,#engineering-dashboard-content>.technical-details:not(#componentLogs)):not([open])>summary{border-bottom:0!important;margin-bottom:0!important}
|
|
670
|
+
|
|
671
|
+
/* Descriptions are header metadata: they remain useful when the disclosure is
|
|
672
|
+
closed and the ruler still separates that header from expandable content. */
|
|
673
|
+
:is(.workspace-card,.inbox-queue,.prompt-history,#currentRun,#rateLimits,.platform-health,.telemetry,#componentLogs,#engineering-dashboard-content>.technical-details:not(#componentLogs))>summary>.category-description,
|
|
674
|
+
#currentRun>summary>.current-run__category-description{color:#d5d1d7;display:block;font-size:14px;font-weight:400;letter-spacing:normal;line-height:1.4;margin:10px 42px 0 0;text-transform:none}
|
|
675
|
+
html[data-theme="light"] :is(.workspace-card,.inbox-queue,.prompt-history,#currentRun,#rateLimits,.platform-health,.telemetry,#componentLogs,#engineering-dashboard-content>.technical-details:not(#componentLogs))>summary>.category-description,
|
|
676
|
+
html[data-theme="light"] #currentRun>summary>.current-run__category-description{color:#415168}
|
|
677
|
+
|
|
678
|
+
/* Pull-to-refresh is a transient dashboard notice and shares the orange toast treatment. */
|
|
679
|
+
html[data-theme="light"] #pullRefresh{background:var(--house-style-surface);border-color:var(--house-style);color:var(--house-style-contrast)}
|
|
680
|
+
|
|
681
|
+
/* Disclosure glyphs reserve the same column in both states. The right edge
|
|
682
|
+
therefore remains still when the triangle changes from closed to open. */
|
|
683
|
+
:where(.workspace-card,.inbox-queue,.prompt-history,#currentRun,#rateLimits,#componentLogs,#engineering-dashboard-content>.technical-details:not(#componentLogs),.telemetry,.platform-health)>summary::before{box-sizing:border-box;text-align:center;width:1em}
|
|
684
|
+
|
|
685
|
+
/* The native dialog defaults add margins around a content-box width. Make the
|
|
686
|
+
full-screen component backdrop a viewport-sized border box, then centre its
|
|
687
|
+
panel inside it so iPhone side gutters always match. */
|
|
688
|
+
.component-modal{box-sizing:border-box;inset:0;margin:0}
|
|
689
|
+
|
|
690
|
+
/* Modal components ---------------------------------------------------------
|
|
691
|
+
All modal families consume this shared surface contract. Individual
|
|
692
|
+
components below only define their geometry and contextual accent. */
|
|
693
|
+
:is(.prompt-detail-modal__description,.prompt-chat-modal__description){border-bottom:1px solid var(--category-color);color:var(--dashboard-modal-muted);margin:16px 0 18px;padding-bottom:18px}
|
|
694
|
+
|
|
695
|
+
/* Report modal: a fixed header with one scrolling document surface. */
|
|
696
|
+
.report-view-modal__panel{--report-modal-surface:var(--dashboard-modal-surface)}
|
|
697
|
+
html[data-theme="light"] .report-view-modal__panel{--report-modal-surface:var(--dashboard-modal-document-surface)}
|
|
698
|
+
/* The document belongs to its modal surface; padding must not read as a second panel. */
|
|
699
|
+
.report-view-modal__content,.report-view-modal :is(#reportContent,#reportAnalysisContent){background:var(--report-modal-surface);box-shadow:none}
|
|
700
|
+
html[data-theme="light"] .report-view-modal__content,html[data-theme="light"] .report-view-modal :is(#reportContent,#reportAnalysisContent){background:var(--report-modal-surface);box-shadow:none}
|
|
701
|
+
|
|
702
|
+
/* Run-scoped advisory conversation: the dialog stays neutral; only replies
|
|
703
|
+
carry the purple conversation tint. */
|
|
704
|
+
@media (max-height:600px) and (orientation:landscape){
|
|
705
|
+
/* One compact landscape contract for iPhone dialogs. Safe-area anchoring,
|
|
706
|
+
component sizing and the single-line chat composer stay together so a
|
|
707
|
+
late viewport override cannot silently undo one of the other rules. */
|
|
708
|
+
:is(.confirmation-modal,.report-view-modal,.prompt-detail-modal,.prompt-chat-modal){
|
|
709
|
+
box-sizing:border-box;
|
|
710
|
+
inset-inline-start:max(12px,env(safe-area-inset-left));
|
|
711
|
+
inset-inline-end:max(12px,env(safe-area-inset-right));
|
|
712
|
+
margin-inline:0;
|
|
713
|
+
max-width:none;
|
|
714
|
+
width:auto;
|
|
715
|
+
}
|
|
716
|
+
.confirmation-modal[open]{display:grid;place-items:center}
|
|
717
|
+
.confirmation-modal__panel{box-sizing:border-box;margin-inline:auto;max-width:100%;width:min(30rem,100%)}
|
|
718
|
+
.component-modal__panel{
|
|
719
|
+
max-width:calc(100vw - env(safe-area-inset-left) - env(safe-area-inset-right) - 24px);
|
|
720
|
+
width:min(680px,calc(100vw - env(safe-area-inset-left) - env(safe-area-inset-right) - 24px));
|
|
721
|
+
}
|
|
722
|
+
.prompt-chat-modal .chat-compose{align-items:center;display:flex;gap:8px}
|
|
723
|
+
.prompt-chat-modal .chat-compose .chat-input{flex:1;height:44px;max-height:44px;min-height:44px;padding:10px 12px;resize:none}
|
|
724
|
+
.prompt-chat-modal .chat-compose .chat-send{flex:none;height:44px;min-height:44px;position:static;width:44px}
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
/* Shared modal shell -------------------------------------------------------
|
|
728
|
+
Report, execution detail and AI chat use the same structural contract.
|
|
729
|
+
Their modifiers intentionally supply only the contextual accent; geometry
|
|
730
|
+
and modal-surface behaviour live here once. */
|
|
731
|
+
.dashboard-modal-shell{--modal-default-accent:#8dc7ff;--modal-accent:var(--modal-parent-accent,var(--modal-default-accent));--modal-secondary-accent:color-mix(in srgb,var(--modal-accent) 62%,#fff);--modal-subcontainer-surface:color-mix(in srgb,var(--modal-accent) 8%,var(--modal-surface));--modal-subcontainer-border:color-mix(in srgb,var(--modal-accent) 55%,transparent);--modal-surface:var(--dashboard-modal-surface);--modal-header-inset:var(--modal-panel-padding,var(--dashboard-modal-panel-padding));--modal-header-bottom:var(--modal-header-inset);--modal-header-surface:color-mix(in srgb,var(--modal-accent) 12%,var(--modal-surface));--modal-action-height:44px;--modal-outer-gutter:16px;--modal-panel-max-width:680px;--modal-shell-inset:0px;--modal-shell-padding:max(var(--modal-outer-gutter),env(safe-area-inset-top)) max(var(--modal-outer-gutter),env(safe-area-inset-right)) max(var(--modal-outer-gutter),env(safe-area-inset-bottom)) max(var(--modal-outer-gutter),env(safe-area-inset-left));background:transparent;border:0;box-sizing:border-box;color:var(--dashboard-modal-ink);height:calc(100dvh - (var(--modal-shell-inset) * 2));inset:var(--modal-shell-inset);margin:0;max-height:none;max-width:none;padding:var(--modal-shell-padding);position:fixed;width:calc(100vw - (var(--modal-shell-inset) * 2))}
|
|
732
|
+
.dashboard-modal-shell--component{--modal-default-accent:#a3e635}
|
|
733
|
+
.dashboard-modal-shell--confirmation{--modal-default-accent:var(--house-style);--modal-panel-max-width:30rem}
|
|
734
|
+
.dashboard-modal-shell--evidence{--modal-default-accent:#8dc7ff;--category-color:var(--modal-accent)}
|
|
735
|
+
.configuration-controls{display:grid;gap:12px;margin:16px 0}.configuration-controls h2{font-size:16px;margin:0}.configuration-controls label{align-items:center;display:grid;gap:8px;grid-template-columns:minmax(0,1fr) minmax(9rem,14rem)}.configuration-controls .label{align-items:center;display:flex;gap:6px;margin:0}.configuration-field-status{color:#54d6a0;font-size:12px;grid-column:2;justify-self:end;min-height:1em}.configuration-field-status:not(.configuration-status--saved){color:#ff9fb0}.configuration-controls label:has(input[type="checkbox"]){display:flex;grid-template-columns:none}.configuration-controls select{max-width:14rem}#configurationStatus:empty{display:none}.configuration-inbox-field{align-items:center;display:grid;gap:4px 8px;grid-template-columns:minmax(0,1fr) minmax(9rem,14rem)}.configuration-inbox-field>.label,.configuration-inbox-location{grid-column:1}.configuration-inbox-location{color:var(--dashboard-modal-muted);font:12px ui-monospace,monospace;overflow-wrap:anywhere}.configuration-inbox-open{align-self:center;background:#25243a;border:1px solid #818cf8;border-radius:8px;color:#ececff;font:400 13px system-ui;grid-column:2;grid-row:1 / span 2;justify-self:stretch;padding:9px 12px}.configuration-inbox-open::before{content:"⌖";font:16px/1 system-ui;margin-right:7px;vertical-align:-1px}.configuration-inbox-open:hover:not(:disabled){background:#818cf8;color:#171729}.configuration-inbox-open:disabled{cursor:not-allowed;opacity:.55}.configuration-inbox-unavailable{color:var(--dashboard-modal-muted);font-size:12px;grid-column:1 / -1;margin:4px 0 0}.configuration-inbox-modal .dashboard-modal-shell__panel{overflow:hidden}.configuration-inbox-modal__field{display:grid;gap:8px;margin:18px 0}.configuration-inbox-modal__field label{color:var(--modal-secondary-accent);font-size:13px;font-weight:700}.configuration-inbox-modal__field input{box-sizing:border-box;min-width:0;width:100%}.configuration-inbox-modal__browse{justify-self:start}.configuration-inbox-modal__browse::before{content:"⌖";font:16px/1 system-ui;margin-right:7px;vertical-align:-1px}.configuration-inbox-modal pre{overflow-wrap:anywhere;white-space:pre-wrap}html[data-theme="light"] .configuration-inbox-open{background:#f1f2ff;border-color:#6366c9;color:#3b3d82}html[data-theme="light"] .configuration-inbox-open:hover:not(:disabled){background:#c9cdfd;color:#171729}
|
|
736
|
+
.configuration-card{margin-bottom:0}
|
|
737
|
+
.configuration-subsection-description{color:var(--dashboard-modal-muted);font-size:13px;line-height:1.4;margin:6px 0 0}.configuration-subsection-description+.configuration-controls{margin-top:16px}
|
|
738
|
+
.configuration-server-settings{border:1px solid color-mix(in srgb,var(--house-style) 72%,transparent);border-radius:12px;margin:16px 0;padding:14px}.configuration-server-settings h2{color:var(--house-style);font-size:16px;margin:0}.configuration-server-settings .configuration-controls{margin:16px 0 0}.configuration-server-settings .configuration-controls label>span:first-child{color:var(--house-style);font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase}
|
|
739
|
+
.configuration-central-database{border:1px solid color-mix(in srgb,var(--house-style) 72%,transparent);border-radius:12px;display:grid;gap:14px;margin:16px 0;padding:14px}.configuration-central-database__header{align-items:start;display:grid;gap:12px;grid-template-columns:minmax(0,1fr) auto}.configuration-central-database__header h2{color:var(--house-style);font-size:16px;margin:0}.configuration-central-database__header p{color:var(--dashboard-modal-muted);font-size:13px;line-height:1.4;margin:5px 0 0}.configuration-central-database__header .dashboard-action{align-self:start;white-space:nowrap}.configuration-central-database__facts{display:grid;gap:10px 16px;grid-template-columns:repeat(auto-fit,minmax(min(100%,11rem),1fr));margin:0}.configuration-central-database__facts>div{min-width:0}.configuration-central-database__facts dt{color:#f3d36a!important;font-size:11px;font-weight:700;letter-spacing:.04em;margin:0;text-transform:uppercase}.configuration-central-database__facts dd{margin:3px 0 0;min-width:0}.configuration-central-database__location{grid-column:1/-1}.configuration-central-database__location-link{display:block;font:12px ui-monospace,monospace;min-width:0;white-space:pre-wrap}.configuration-central-database__maintenance{align-items:center;border-top:1px solid color-mix(in srgb,var(--house-style) 42%,transparent);display:grid;gap:12px;grid-template-columns:minmax(0,1fr) minmax(9rem,14rem);padding-top:14px}.configuration-central-database__maintenance .label{color:#f3d36a;margin:0}.configuration-central-database__maintenance p{color:var(--dashboard-modal-muted);font-size:12px;line-height:1.35;margin:4px 0 0}.configuration-central-database__maintenance select{justify-self:end;max-width:14rem;width:100%}.configuration-central-database__maintenance .dashboard-select-picker{justify-self:end;max-width:14rem;width:100%}.configuration-central-database #centralDatabaseMaintenanceStatus{color:#54d6a0;font-size:12px;margin:0;min-height:1em}.configuration-central-database #centralDatabaseMaintenanceStatus:empty{display:none}.configuration-central-database select[aria-busy="true"]{cursor:wait;opacity:.7}
|
|
740
|
+
.inbox-queue>.configuration-inbox-field,.inbox-queue>.queue-project-settings{border-top:1px solid color-mix(in srgb,var(--category-color) 40%,transparent);margin-top:16px;padding-top:16px}.inbox-queue>.queue-project-settings{margin-bottom:0}
|
|
741
|
+
.configuration-status--saved{color:#54d6a0!important}
|
|
742
|
+
.capacity-reserve-configuration,.telemetry-retention,.log-settings,.platform-settings,.configuration-provider-readiness-settings{border-top:1px solid color-mix(in srgb,var(--category-color) 40%,transparent);margin-top:16px;padding-top:16px}
|
|
743
|
+
.configuration-provider-status{border:1px solid var(--house-style);border-radius:10px;display:grid;gap:8px;margin:16px 0;padding:12px}.configuration-provider-status h2{color:var(--category-color);font-size:14px;margin:0}.configuration-provider-status__row{align-items:center;display:grid;gap:8px;grid-template-columns:auto minmax(0,1fr) auto auto;min-height:36px}.configuration-provider-status__dot{background:#9a9aa3;border-radius:50%;grid-column:1;height:10px;width:10px}.configuration-provider-status__row>strong{color:var(--dashboard-modal-ink);grid-column:2;justify-self:start}.configuration-provider-status__details{display:grid;gap:6px;grid-column:2 / -1;padding-bottom:3px}.configuration-provider-status__details .configuration-validation-environment__detail{grid-template-columns:112px minmax(0,1fr)}.configuration-provider-status__row[data-provider-state="READY"] .configuration-provider-status__dot{background:#54d6a0;box-shadow:0 0 8px #54d6a066}.configuration-provider-status__row[data-provider-state="AUTH_REQUIRED"] .configuration-provider-status__dot{background:#f0b66a}.configuration-provider-status__row[data-provider-state="UNAVAILABLE"],.configuration-provider-status__row[data-provider-state="CHECK_FAILED"]{color:#ff7899}.configuration-provider-status__row[data-provider-state="UNAVAILABLE"] .configuration-provider-status__dot,.configuration-provider-status__row[data-provider-state="CHECK_FAILED"] .configuration-provider-status__dot{background:#ff7899}.configuration-provider-status__label{font-size:13px;grid-column:3;text-align:right}.configuration-provider-status__logout{background:transparent;border:1px solid #ff7899;border-radius:8px;color:#ffd8df;cursor:pointer;font:400 12px/1 system-ui;grid-column:4;min-height:32px;padding:0 10px;white-space:nowrap}.configuration-provider-status__logout:hover:not(:disabled){background:#ff718f!important;border-color:#ff718f!important;color:#23131a!important}.configuration-provider-status__logout:focus-visible{box-shadow:0 0 0 4px #ff91a188;outline:2px solid #ff91a1;outline-offset:2px}.configuration-provider-status__logout:disabled{cursor:not-allowed;opacity:.45}html[data-theme="light"] .configuration-provider-status__logout{border-color:#b8354c;color:#8e2639}html[data-theme="light"] .configuration-provider-status__logout:hover:not(:disabled){background:#ff718f!important;border-color:#ff718f!important;color:#23131a!important}
|
|
744
|
+
.configuration-validation-environment{border:1px solid color-mix(in srgb,var(--house-style) 62%,transparent);border-radius:10px;display:grid;gap:8px;margin:0 0 16px;padding:12px}.configuration-validation-environment h3{color:var(--category-color);font-size:14px;margin:0}.configuration-validation-environment__details{display:grid;gap:6px;padding-left:18px}.configuration-validation-environment__detail{align-items:baseline;display:grid;gap:8px;grid-template-columns:92px minmax(0,1fr);font-size:12px}.configuration-validation-environment__detail>span{color:var(--dashboard-modal-muted)}.configuration-validation-environment__detail code{min-width:0;overflow-wrap:anywhere}
|
|
745
|
+
.configuration-card{--configuration-heading-color:var(--house-style);--configuration-label-color:#f3d36a}.configuration-card :is(.configuration-provider-status h2,.configuration-validation-environment h3,.configuration-timeout-policy h2){color:var(--configuration-heading-color)}.configuration-card .configuration-controls label>span:first-child,.configuration-card .configuration-field .label,.configuration-card .configuration-central-database__maintenance .label{color:var(--configuration-label-color)}.configuration-card .configuration-server-settings .configuration-controls label>span:first-child{color:var(--configuration-label-color)}
|
|
746
|
+
@media (max-width:620px){
|
|
747
|
+
/* Long configuration labels and their values must each own a full row on
|
|
748
|
+
direct-touch screens. This prevents the controls from squeezing into—or
|
|
749
|
+
visually overlapping—the label column. */
|
|
750
|
+
.configuration-controls label{grid-template-columns:minmax(0,1fr)}
|
|
751
|
+
.configuration-central-database__header,.configuration-central-database__maintenance{grid-template-columns:minmax(0,1fr)}
|
|
752
|
+
/* The database backup is a glyph action, not a full-width form control. */
|
|
753
|
+
.configuration-central-database__header .dashboard-action{justify-self:start;width:32px}
|
|
754
|
+
.configuration-central-database__maintenance select,.configuration-central-database__maintenance .dashboard-select-picker{justify-self:start;width:min(100%,14rem)}
|
|
755
|
+
.workspace-database-maintenance-field{grid-template-columns:minmax(0,1fr)}
|
|
756
|
+
.configuration-inbox-field{grid-template-columns:minmax(0,1fr)}
|
|
757
|
+
.configuration-inbox-open{grid-column:1;grid-row:auto;justify-self:stretch;width:100%}
|
|
758
|
+
.configuration-provider-status__row{grid-template-columns:auto minmax(0,1fr) auto}.configuration-provider-status__logout{grid-column:2 / -1;justify-self:start}
|
|
759
|
+
/* A value control may use its own row on a phone, but it remains a compact
|
|
760
|
+
picker. Full-width controls make the configuration scan poorly and used
|
|
761
|
+
to leave the listbox visually detached from its trigger. */
|
|
762
|
+
.configuration-controls .dashboard-select-picker{justify-self:start;max-width:14rem;width:min(100%,14rem)}
|
|
763
|
+
.workspace-database-maintenance-field .dashboard-select-picker{justify-self:start;width:min(100%,14rem)}
|
|
764
|
+
.configuration-controls .dashboard-select-picker:has(.dashboard-locale__button[aria-expanded="true"]){z-index:30}
|
|
765
|
+
.configuration-controls .dashboard-locale__button{
|
|
766
|
+
-webkit-backdrop-filter:none!important;
|
|
767
|
+
backdrop-filter:none!important;
|
|
768
|
+
background-image:none!important;
|
|
769
|
+
box-shadow:none!important;
|
|
770
|
+
filter:none!important;
|
|
771
|
+
transform:none!important;
|
|
772
|
+
}
|
|
773
|
+
.configuration-controls .dashboard-locale__menu{box-shadow:none}
|
|
774
|
+
/* The native multi-select remains the accessible event filter. Constrain
|
|
775
|
+
its label and control as one grid item so iOS cannot size it past the
|
|
776
|
+
Logs card when it displays the selected-item summary. */
|
|
777
|
+
#componentLogControls{display:grid;grid-template-columns:minmax(0,1fr)}
|
|
778
|
+
#componentLogControls>label{min-width:0;width:100%}
|
|
779
|
+
#componentLogControls>label[hidden]{display:none}
|
|
780
|
+
#componentLogControls>label:has(#logEventFilter){grid-column:auto;width:100%}
|
|
781
|
+
#componentLogControls #logEventFilter{box-sizing:border-box;max-width:100%;min-width:0;width:100%}
|
|
782
|
+
#componentLogControls>label:has(:is(#logSpecificDate,#logDateFrom,#logDateTo)){grid-column:auto;max-inline-size:100%;min-inline-size:0;overflow:clip}
|
|
783
|
+
/* Safari can include native date-picker affordances outside a 100% control.
|
|
784
|
+
Keep the wrapper, input and clear action inside their label's content box
|
|
785
|
+
without making the normal filter controls visually narrower. */
|
|
786
|
+
#componentLogControls .log-date-control__field{box-sizing:border-box;display:block;inline-size:100%;max-inline-size:100%;min-inline-size:0;min-width:0}
|
|
787
|
+
#componentLogControls :is(#logSpecificDate,#logDateFrom,#logDateTo){box-sizing:border-box;inline-size:100%;max-inline-size:100%;min-inline-size:0;min-width:0;width:100%}
|
|
788
|
+
#componentLogControls .reset-log-filters{justify-self:start;margin-left:0}
|
|
789
|
+
}
|
|
790
|
+
@media (max-width:900px){
|
|
791
|
+
/* The version, refresh time and connection state are independent status
|
|
792
|
+
facts. Stack them before the narrow layout can make their text overlap. */
|
|
793
|
+
.footer{display:grid;gap:4px;justify-items:center;overflow:visible;white-space:normal}
|
|
794
|
+
.footer__item{justify-content:center;max-width:100%;overflow-wrap:anywhere;text-align:center}
|
|
795
|
+
.footer__separator{display:none}
|
|
796
|
+
}
|
|
797
|
+
.execution-mode-modal__panel{max-height:min(700px,100%);overflow:auto;width:min(680px,100%)}.execution-mode-modal__content{display:grid;gap:16px;padding-top:18px}.execution-mode-modal__content>p{color:var(--dashboard-modal-muted);line-height:1.5;margin:0}.execution-mode-modal__definition{background:var(--modal-subcontainer-surface);border:1px solid var(--modal-subcontainer-border);border-radius:12px;padding:14px}.execution-mode-modal__definition h3{color:var(--modal-accent);font-size:16px;margin:0 0 7px}.execution-mode-modal__definition p{line-height:1.5;margin:0}
|
|
798
|
+
|
|
799
|
+
/* Operations Console chrome: the blue title bar distinguishes the persistent
|
|
800
|
+
application controls from the execution cards below it in both themes. */
|
|
801
|
+
.dashboard-titlebar{background:var(--operations-console-icon-surface);box-shadow:0 10px 18px rgb(4 52 78 / .38)}
|
|
802
|
+
.dashboard-titlebar h1{color:var(--operations-console-blue-ink)}
|
|
803
|
+
.dashboard-titlebar .auto-refresh-toggle,.dashboard-titlebar .theme-toggle,.dashboard-titlebar .section-state-toggle,.dashboard-titlebar :is(.dashboard-locale,.dashboard-project){color:var(--operations-console-blue-ink)}
|
|
804
|
+
.dashboard-titlebar select{background:#fff;color:#1b2b38}
|
|
805
|
+
.dashboard-titlebar .section-state-toggle::before{background:#4a4a55}
|
|
806
|
+
.dashboard-titlebar .section-state-toggle::after{background:#f7f3ee}
|
|
807
|
+
.dashboard-titlebar .section-state-toggle[aria-checked="true"]::before{background:var(--house-style)}
|
|
808
|
+
.dashboard-titlebar .section-state-toggle:focus-visible{outline-color:var(--house-style)}
|
|
809
|
+
|
|
810
|
+
/* Enabled switches share the Operations Console palette: house-style orange
|
|
811
|
+
track with a blue thumb, regardless of the selected page theme. */
|
|
812
|
+
:is(.theme-toggle,.section-state-toggle)[aria-checked="true"]::after,
|
|
813
|
+
.auto-refresh-toggle input:checked::after{background:var(--operations-console-blue);color:#fff}
|
|
814
|
+
.theme-toggle[aria-checked="false"]::after{color:var(--house-style)}
|
|
815
|
+
.theme-toggle[aria-checked="true"]::after{color:#fff}
|
|
816
|
+
.dashboard-modal-shell--chat{--modal-default-accent:#d0a4ff;--modal-panel-max-width:960px;--category-color:var(--modal-accent)}
|
|
817
|
+
.dashboard-modal-shell--destructive{--modal-default-accent:#ff718f}
|
|
818
|
+
.dashboard-modal-shell::backdrop{background:var(--dashboard-modal-backdrop)}
|
|
819
|
+
.dashboard-modal-shell__panel{--modal-panel-padding:var(--dashboard-modal-panel-padding);background:var(--modal-surface);border:2px solid var(--modal-accent);border-radius:var(--dashboard-modal-radius);box-shadow:var(--dashboard-modal-shadow);box-sizing:border-box;color:var(--dashboard-modal-ink);max-height:min(90dvh,100%);max-width:var(--modal-panel-max-width)!important;min-height:0;padding:var(--modal-panel-padding);width:min(var(--modal-panel-max-width),100%)!important}
|
|
820
|
+
.dashboard-modal-shell.report-view-modal{--modal-panel-max-width:1000px}.dashboard-modal-shell.prompt-detail-modal{--modal-panel-max-width:1100px}
|
|
821
|
+
.dashboard-modal-shell__header{align-items:start;background:var(--modal-header-surface);border-bottom:1px solid var(--modal-accent);display:grid;gap:16px;grid-template-columns:minmax(0,1fr) max-content;margin:calc(-1 * var(--modal-header-inset)) calc(-1 * var(--modal-header-inset)) 0;padding:var(--modal-header-bottom) var(--modal-header-inset);position:relative;z-index:2}
|
|
822
|
+
.dashboard-modal-shell__header h2{color:var(--modal-accent);margin:0;min-width:0}
|
|
823
|
+
.prompt-detail-modal__actions{align-items:center;display:flex;gap:8px}.prompt-detail-modal__actions .dashboard-action{position:static}.prompt-detail-download{font-size:12px!important;font-weight:700!important}
|
|
824
|
+
.dashboard-modal-shell__close{align-items:center;background:#24242d!important;border:1px solid #92919b!important;border-radius:50%;color:#f7f3ee!important;cursor:pointer;display:inline-flex;font:18px/1 system-ui;grid-column:2;grid-row:1;height:32px;justify-content:center;min-height:32px;min-width:32px;padding:0;position:static;width:32px}
|
|
825
|
+
.dashboard-modal-shell__close:hover{background:#4a4a55!important;border-color:#b9b6c0!important;color:#fff!important}
|
|
826
|
+
.dashboard-modal-shell__actions{align-items:center;display:flex;gap:10px;justify-content:flex-end;margin-top:20px}
|
|
827
|
+
.dashboard-modal-shell__action{align-self:center;background:color-mix(in srgb,var(--modal-accent) 12%,var(--modal-surface))!important;border:1px solid var(--modal-accent)!important;border-radius:8px;box-sizing:border-box;color:var(--dashboard-modal-ink)!important;cursor:pointer;font:13px system-ui;height:var(--modal-action-height);min-height:var(--modal-action-height);padding:8px 14px}
|
|
828
|
+
.dashboard-modal-shell__action--primary{background:color-mix(in srgb,var(--modal-accent) 22%,var(--modal-surface))!important;color:var(--dashboard-modal-ink)!important}
|
|
829
|
+
.dashboard-modal-shell__action:hover:not(:disabled){background:var(--modal-accent)!important;border-color:var(--modal-accent)!important;color:#201812!important}
|
|
830
|
+
#dashboardErrorModalRecover:hover:not(:disabled){background:#f0b66a!important;border-color:#f0b66a!important;color:#201812!important}
|
|
831
|
+
html[data-theme="light"] .dashboard-modal-shell{--modal-surface:var(--dashboard-modal-document-surface);color:#182230}
|
|
832
|
+
html[data-theme="light"] .dashboard-modal-shell__panel{color:#182230}
|
|
833
|
+
html[data-theme="light"] .dashboard-modal-shell__close{background:#f7fbff!important;border-color:#728197!important;color:#27364a!important}
|
|
834
|
+
html[data-theme="light"] .dashboard-modal-shell__close:hover{background:#e9eef6!important;border-color:#58677b!important;color:#182230!important}
|
|
835
|
+
/* Closing a panel is a product-level action, so every close control shares
|
|
836
|
+
the house-style orange hover rather than its surrounding category colour. */
|
|
837
|
+
:is(.component-modal__close,.report-view-modal__close,.dashboard-modal-shell__close):hover{background:var(--house-style)!important;border-color:var(--house-style)!important;color:var(--button-ink)!important}
|
|
838
|
+
html[data-theme="light"] :is(.component-modal__close,.report-view-modal__close,.dashboard-modal-shell__close):hover{background:var(--house-style)!important;border-color:var(--house-style)!important;color:var(--button-ink)!important}
|
|
839
|
+
html[data-theme="light"] .dashboard-modal-shell__action{background:color-mix(in srgb,var(--modal-accent) 12%,var(--modal-surface))!important;color:var(--dashboard-modal-ink)!important}
|
|
840
|
+
html[data-theme="light"] .dashboard-modal-shell__action--primary{background:color-mix(in srgb,var(--modal-accent) 22%,var(--modal-surface))!important}
|
|
841
|
+
/* Secondary modal text and embedded containers stay within their parent
|
|
842
|
+
accent family; no modal may fall back to the dashboard's purple label. */
|
|
843
|
+
.dashboard-modal-shell :is(.label,.field>.label){color:var(--modal-secondary-accent)}
|
|
844
|
+
html[data-theme="light"] .dashboard-modal-shell :is(.label,.field>.label){color:color-mix(in srgb,var(--modal-secondary-accent) 76%,#182230)}
|
|
845
|
+
/* Labels carry the parent accent family; factual values retain the document
|
|
846
|
+
ink so operational evidence never reads as a second semantic state. */
|
|
847
|
+
.dashboard-modal-shell .field>:not(.label){color:var(--dashboard-modal-ink)}
|
|
848
|
+
|
|
849
|
+
/* Waiting for a merge is an operator action, not evidence content: its two
|
|
850
|
+
actions therefore use the shared orange action language rather than blue. */
|
|
851
|
+
#operatorMergeWaitModal .dashboard-modal-shell__action{text-decoration:none}
|
|
852
|
+
#confirmationModal.dashboard-modal-shell--destructive .dashboard-modal-shell__action--destructive{background:#3a2028!important;border-color:#ff718f!important;color:#ffd9e1!important}#confirmationModal.dashboard-modal-shell--destructive .dashboard-modal-shell__action--destructive:hover:not(:disabled){background:#ff718f!important;border-color:#ff718f!important;color:#23131a!important}html[data-theme="light"] #confirmationModal.dashboard-modal-shell--destructive .dashboard-modal-shell__action--destructive{background:#fff1f4!important;border-color:#ff718f!important;color:#b32649!important}
|
|
853
|
+
#operatorMergeWaitModal .dashboard-modal-shell__action{border-color:#f0b66a!important;color:#fff0dc!important}#operatorMergeWaitModal .dashboard-modal-shell__action--primary{background:#3b281b!important;border-color:#f0b66a!important;color:#fff0dc!important}#operatorMergeWaitModal .dashboard-modal-shell__action--destructive{background:#3a2028!important;border-color:#ff718f!important;color:#ffd9e1!important}#operatorMergeWaitModal .dashboard-modal-shell__action--primary:hover:not(:disabled){background:var(--house-style)!important;border-color:var(--house-style)!important;color:var(--button-ink)!important}#operatorMergeWaitModal .dashboard-modal-shell__action--destructive:hover:not(:disabled){background:#ff718f!important;border-color:#ff718f!important;color:#23131a!important}html[data-theme="light"] #operatorMergeWaitModal .dashboard-modal-shell__action{background:#fff!important;border-color:#d68b23!important;color:#643a13!important}html[data-theme="light"] #operatorMergeWaitModal .dashboard-modal-shell__action--primary{background:#fff8ef!important}html[data-theme="light"] #operatorMergeWaitModal .dashboard-modal-shell__action--destructive{background:#fff1f4!important;border-color:#ff718f!important;color:#b32649!important}
|
|
854
|
+
/* Every modal uses a header tint derived from its own accent. The component
|
|
855
|
+
modal retains the same structure, with extra space below its ruler. */
|
|
856
|
+
html:not([data-theme="light"]) .dashboard-modal-shell{--modal-header-surface:color-mix(in srgb,var(--modal-accent) 18%,var(--modal-surface))}
|
|
857
|
+
.confirmation-modal__panel{overflow:hidden}
|
|
858
|
+
.merge-wait-context{border-top:1px solid color-mix(in srgb,var(--modal-accent) 45%,transparent);display:grid;gap:10px;margin:18px 0 0;padding-top:16px}.merge-wait-context>p{color:var(--dashboard-modal-ink);margin:0}.merge-wait-context dl{display:grid;gap:10px;margin:0}.merge-wait-context dl>div{display:grid;gap:3px;min-width:0}.merge-wait-context dt{color:var(--modal-secondary-accent);font-size:11px;font-weight:800;letter-spacing:.07em;text-transform:uppercase}.merge-wait-context dd{color:var(--dashboard-modal-ink);margin:0;overflow-wrap:anywhere}html[data-theme="light"] .merge-wait-context dt{color:color-mix(in srgb,var(--modal-secondary-accent) 76%,#182230)}
|
|
859
|
+
#componentModalContent{padding-top:22px}
|
|
860
|
+
/* The panel itself owns the rounded clipping boundary. Only the detail list
|
|
861
|
+
may scroll, keeping the header and its close action in the panel. */
|
|
862
|
+
.component-modal__panel{display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;overflow:hidden}
|
|
863
|
+
#componentModalContent{min-height:0;overflow:auto;overscroll-behavior:contain}
|
|
864
|
+
/* Keep a small visual gutter before a scroll track begins below a modal ruler. */
|
|
865
|
+
:is(.report-view-modal__content,.prompt-detail-modal__content){margin-top:12px}
|
|
866
|
+
.component-modal__restart::before{content:"↻";font:700 17px/1 system-ui;margin-right:8px;vertical-align:-1px}
|
|
867
|
+
.rate-limit-reset::before{content:"↻";font:700 17px/1 system-ui;margin-right:8px;vertical-align:-1px}
|
|
868
|
+
#codexCliUpdate::before{content:"↓";font-size:21px}
|
|
869
|
+
.predecessor-retry::before{content:"↻";font:700 17px/1 system-ui;margin-right:8px;vertical-align:-1px}
|
|
870
|
+
.execution-dismiss::before{content:"⊘"}
|
|
871
|
+
#componentLogs .log-table{table-layout:auto;width:100%}#componentLogs .log-table th:last-child,#componentLogs .log-table td:last-child{width:100%}
|
|
872
|
+
#queueList .queue-item{grid-template-columns:1.25rem minmax(0,1fr) auto}.queue-defer{background:#3b281b;border:1px solid #f0b66a;border-radius:8px;color:#fff0dc;font:600 12px system-ui;min-height:32px;padding:5px 9px}.queue-defer:hover:not(:disabled){background:var(--house-style)!important;border-color:var(--house-style)!important;color:#201812!important}.queue-defer:disabled{cursor:wait;opacity:.7}html[data-theme="light"] .queue-defer{background:#fff8ef;border-color:#d68b23;color:#643a13}html[data-theme="light"] .queue-defer:hover:not(:disabled){background:var(--house-style)!important;border-color:var(--house-style)!important;color:#201812!important}
|
|
873
|
+
|
|
874
|
+
/* Shared semantic action variants prevent individual surfaces from drifting. */
|
|
875
|
+
.dashboard-action{align-items:center;border:1px solid;border-radius:50%;box-sizing:border-box;display:inline-flex;font:18px/1 system-ui;height:32px;justify-content:center;min-height:32px;min-width:32px;padding:0;width:32px}
|
|
876
|
+
.dashboard-action--download{background:#3b281b!important;border-color:#f0b66a!important;color:#fff0dc!important}
|
|
877
|
+
.dashboard-action--download:hover:not(:disabled){background:#f0b66a!important;border-color:#f0b66a!important;color:#201812!important}
|
|
878
|
+
.dashboard-action--copy{background:#34283f!important;border-color:#d0a4ff!important;color:#eadcff!important}
|
|
879
|
+
.dashboard-action--copy:hover:not(:disabled){background:#d0a4ff!important;border-color:#d0a4ff!important;color:#17151a!important}
|
|
880
|
+
.dashboard-action--destructive{background:#3a2028!important;border-color:#ff718f!important;color:#ffd9e1!important}
|
|
881
|
+
.dashboard-action--destructive:hover:not(:disabled){background:#ff718f!important;border-color:#ff718f!important;color:#23131a!important}
|
|
882
|
+
.operator-merge-wait{grid-column:1/-1}.operator-merge-wait__actions{align-items:stretch;display:flex;flex-wrap:wrap;gap:10px}.operator-merge-wait__actions .dashboard-action{border-radius:10px;flex:1 1 15rem;font:700 15px/1.25 system-ui;height:auto;justify-content:center;min-height:40px;min-width:0;padding:8px 14px;text-align:center;text-decoration:none;width:auto}.operator-merge-wait__actions .dashboard-action--primary{background:#3b281b!important;border-color:#f0b66a!important;color:#fff0dc!important}.operator-merge-wait__actions .dashboard-action--primary:hover:not(:disabled){background:#f0b66a!important;border-color:#f0b66a!important;color:#201812!important}
|
|
883
|
+
.operator-merge-wait__actions :is(.dashboard-action--primary,.dashboard-action--destructive),#operatorMergeWaitModal :is(.dashboard-modal-shell__action--primary,.dashboard-modal-shell__action--destructive){align-items:center;display:inline-flex;font-weight:400!important;justify-content:center;text-align:center}.operator-merge-wait__actions :is(.dashboard-action--primary,.dashboard-action--destructive)::before,#operatorMergeWaitModal :is(.dashboard-modal-shell__action--primary,.dashboard-modal-shell__action--destructive)::before{display:block;flex:0 0 auto;font-size:1.15em;font-weight:800;line-height:1;margin-right:9px}.operator-merge-wait__actions .dashboard-action--primary::before,#operatorMergeWaitModal .dashboard-modal-shell__action--primary::before{content:"↗"}.operator-merge-wait__actions .dashboard-action--destructive::before,#operatorMergeWaitModal .dashboard-modal-shell__action--destructive::before{content:"⊘"}
|
|
884
|
+
#operatorMergeStatusCheck,#operatorMergeWaitModalStatusCheck{align-items:center;display:inline-flex;font-weight:400;justify-content:center;text-align:center}#operatorMergeStatusCheck::before,#operatorMergeWaitModalStatusCheck::before{content:"↻";display:block;flex:0 0 auto;font-size:1.15em;font-weight:800;line-height:1;margin-right:9px}
|
|
885
|
+
.operator-merge-wait__actions #operatorMergeStatusCheck,#operatorMergeWaitModal #operatorMergeWaitModalStatusCheck{background:#202a36!important;border-color:#8dc7ff!important;color:#d8ecff!important}.operator-merge-wait__actions #operatorMergeStatusCheck:hover:not(:disabled),#operatorMergeWaitModal #operatorMergeWaitModalStatusCheck:hover:not(:disabled){background:#8dc7ff!important;border-color:#8dc7ff!important;color:#172331!important}
|
|
886
|
+
html[data-theme="light"] .dashboard-action--download{background:#fff8ef!important;border-color:#d68b23!important;color:#643a13!important}
|
|
887
|
+
html[data-theme="light"] .operator-merge-wait__actions .dashboard-action--primary{background:#fff8ef!important;border-color:#d68b23!important;color:#643a13!important}
|
|
888
|
+
/* Some system fonts draw the prohibition symbol much lighter than its declared
|
|
889
|
+
weight. Give that destructive glyph a tiny symmetric stroke so it remains
|
|
890
|
+
optically as bold as the neighbouring arrow. */
|
|
891
|
+
.operator-merge-wait__actions .dashboard-action--destructive::before,#operatorMergeWaitModal .dashboard-modal-shell__action--destructive::before{text-shadow:.35px 0 currentColor,-.35px 0 currentColor}
|
|
892
|
+
html[data-theme="light"] .dashboard-action--copy{background:#fff7ff!important;border-color:#b99ae5!important;color:#68498a!important}
|
|
893
|
+
html[data-theme="light"] .dashboard-action--copy:hover:not(:disabled){background:#d0a4ff!important;border-color:#d0a4ff!important;color:#17151a!important}
|
|
894
|
+
html[data-theme="light"] .dashboard-action--destructive{background:#fff1f4!important;border-color:#ff718f!important;color:#b32649!important}
|
|
895
|
+
|
|
896
|
+
/* Keep late modal-family rules from drifting the shared title scale. */
|
|
897
|
+
.dashboard-modal-shell :is(.component-modal h2,.execution-mode-modal h2,.confirmation-modal h2,.report-view-modal__title,.prompt-detail-modal__header h2,.prompt-chat-modal__header h2){font-size:clamp(18px,2vw,20px)!important;line-height:1.2}
|
|
898
|
+
|
|
899
|
+
/* Scrollbars use the same quiet chrome as the dashboard surfaces instead of
|
|
900
|
+
the browser's high-contrast default rail. */
|
|
901
|
+
:root{scrollbar-color:#697384 #18181f;scrollbar-width:thin}
|
|
902
|
+
::-webkit-scrollbar{height:10px;width:10px}
|
|
903
|
+
::-webkit-scrollbar-track{background:#18181f;border-radius:999px}
|
|
904
|
+
::-webkit-scrollbar-thumb{background:#697384;border:2px solid #18181f;border-radius:999px}
|
|
905
|
+
::-webkit-scrollbar-thumb:hover{background:#8dc7ff}
|
|
906
|
+
html[data-theme="light"]{scrollbar-color:#8b9aae #edf2f8}
|
|
907
|
+
html[data-theme="light"] ::-webkit-scrollbar-track{background:#edf2f8}
|
|
908
|
+
html[data-theme="light"] ::-webkit-scrollbar-thumb{background:#8b9aae;border-color:#edf2f8}
|
|
909
|
+
html[data-theme="light"] ::-webkit-scrollbar-thumb:hover{background:#0a6b9d}
|
|
910
|
+
|
|
911
|
+
/* Button labels and glyphs are controls, not selectable page content. */
|
|
912
|
+
:where(button,[role="button"]),:where(button,[role="button"]) *{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}
|
|
913
|
+
|
|
914
|
+
/* Touch controls stay on their authored, opaque surface. Mobile Safari must
|
|
915
|
+
not add a shared glass gradient or blur that changes button/pulldown colour. */
|
|
916
|
+
@media (hover:none) and (pointer:coarse){
|
|
917
|
+
.dashboard-titlebar :is(.theme-toggle,.section-state-toggle,.auto-refresh-toggle,.auto-refresh-toggle input,.dashboard-locale__button){touch-action:manipulation}
|
|
918
|
+
button:not(:disabled):not(.execution-lifecycle__node),[role="button"]:not([aria-disabled="true"]):not(.execution-lifecycle__node){
|
|
919
|
+
-webkit-tap-highlight-color:transparent;
|
|
920
|
+
transition:background-color 120ms ease-out,color 120ms ease-out,filter 120ms ease-out;
|
|
921
|
+
}
|
|
922
|
+
button:not(:disabled):not(.execution-lifecycle__node):active,[role="button"]:not([aria-disabled="true"]):not(.execution-lifecycle__node):active{
|
|
923
|
+
filter:brightness(1.06);
|
|
924
|
+
}
|
|
925
|
+
.reset-log-filters:not(:disabled):active{transform:translateX(4px) translateY(-1px) scale(1.045)}
|
|
926
|
+
/* Keep the history surface opaque during momentum scrolling. */
|
|
927
|
+
#promptHistory .log-table-wrap,
|
|
928
|
+
#promptHistory .log-table,
|
|
929
|
+
#promptHistory .log-table tbody,
|
|
930
|
+
#promptHistory .log-table td{
|
|
931
|
+
background:var(--dashboard-expanded-content-surface);
|
|
932
|
+
}
|
|
933
|
+
#promptHistory .log-table-wrap{isolation:isolate}
|
|
934
|
+
#promptHistory .log-table-wrap :is(button,[role="button"]){
|
|
935
|
+
-webkit-backdrop-filter:none;
|
|
936
|
+
backdrop-filter:none;
|
|
937
|
+
background-image:none;
|
|
938
|
+
}
|
|
939
|
+
/* Telemetry run IDs are text links in a data table, never glass controls.
|
|
940
|
+
Otherwise Mobile Safari gives each ID a bright rectangular shadow. */
|
|
941
|
+
.telemetry-detail-modal .telemetry-run-link{
|
|
942
|
+
-webkit-backdrop-filter:none;
|
|
943
|
+
backdrop-filter:none;
|
|
944
|
+
background-image:none;
|
|
945
|
+
box-shadow:none;
|
|
946
|
+
filter:none;
|
|
947
|
+
will-change:auto;
|
|
948
|
+
}
|
|
949
|
+
.telemetry-detail-modal .telemetry-run-link:active{
|
|
950
|
+
box-shadow:none;
|
|
951
|
+
filter:none;
|
|
952
|
+
transform:none;
|
|
953
|
+
}
|
|
954
|
+
/* Sortable table headers are part of the scrolling document, not floating
|
|
955
|
+
controls. Keeping them opaque avoids Safari compositing the glass layer
|
|
956
|
+
as a vertical gradient while an iOS table is scrolled. */
|
|
957
|
+
#engineering-dashboard-content .log-table th{
|
|
958
|
+
-webkit-backdrop-filter:none;
|
|
959
|
+
backdrop-filter:none;
|
|
960
|
+
background-image:none;
|
|
961
|
+
box-shadow:none;
|
|
962
|
+
will-change:auto;
|
|
963
|
+
}
|
|
964
|
+
#engineering-dashboard-content .log-table th:is([tabindex],[role="button"]):active{
|
|
965
|
+
filter:none;
|
|
966
|
+
transform:none;
|
|
967
|
+
}
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
/* Keep the input contract last: individual cards may colour their content,
|
|
971
|
+
but they must never replace the selected-control border. */
|
|
972
|
+
:where(input,select,textarea):is(:focus,:focus-visible){border-color:var(--dashboard-input-focus-border)!important;outline:var(--dashboard-focus-outline-width) solid var(--dashboard-input-focus-border)!important;outline-offset:var(--dashboard-focus-outline-offset)!important;box-shadow:0 0 0 var(--dashboard-focus-ring-size) var(--dashboard-input-focus-ring)!important}
|
|
973
|
+
:where(button,summary,[role="button"],[tabindex]):not(#engineering-dashboard-content):not(:where(.dashboard-modal-shell,.component-log-row,.prompt-history-row,.telemetry-row,.execution-lifecycle__node,.theme-toggle,.section-state-toggle,.auto-refresh-toggle,.log-sortable,.log-table-wrap,.telemetry-scroll,.telemetry-detail-table-scroll)):is(:focus,:focus-visible){outline:var(--dashboard-focus-outline-width) solid var(--dashboard-input-focus-border)!important;outline-offset:var(--dashboard-focus-outline-offset)!important;box-shadow:0 0 0 var(--dashboard-focus-ring-size) var(--dashboard-input-focus-ring)!important}
|
|
974
|
+
/* Every dialog owns a full-viewport, safe-area-aware shell. The visible panel
|
|
975
|
+
is therefore always separated from iPhone edges, including modal families
|
|
976
|
+
added after the original report/detail implementations. */
|
|
977
|
+
.dashboard-modal-shell[open]{display:grid;place-items:center}
|
|
978
|
+
|
|
979
|
+
/* A dialog shell is not a selected input. Its heading is the neutral focus
|
|
980
|
+
target; controls retain the visible keyboard focus treatment. */
|
|
981
|
+
.dashboard-modal-shell:is(:focus,:focus-visible){box-shadow:none!important;outline:0!important;outline-offset:0!important}
|
|
982
|
+
.telemetry-row{--dashboard-selected-row-color:var(--category-color,#f29ab2);cursor:pointer;scroll-margin-top:12rem}.telemetry-row>td{box-shadow:none!important;outline:0!important}.telemetry-row:hover>td{background:color-mix(in srgb,var(--dashboard-selected-row-color) 16%,var(--dashboard-surface-base))}.telemetry-detail-modal__panel{max-width:min(1120px,94vw)}.telemetry-detail-modal__content{display:grid;gap:18px;max-height:72vh;overflow-x:hidden;overflow-y:auto}.telemetry-detail-modal__content section{min-width:0}.telemetry-detail-modal__content h3{color:var(--category-color,#8dc7ff);font-size:16px;margin:0 0 10px}.telemetry-detail-modal__content .telemetry-table{min-width:700px}.telemetry-detail-table-scroll{background:var(--dashboard-expanded-content-surface);border:1px solid var(--category-color,#fb7185);border-radius:9px;box-sizing:border-box;max-width:100%;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain}.telemetry-detail-modal__content .technical-grid{grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}@media(max-width:620px){.telemetry-row{scroll-margin-top:9rem}.telemetry-detail-modal__panel{max-width:100vw;width:100vw}.telemetry-detail-modal__content{max-height:78vh}.telemetry-detail-modal__content section{overflow-x:visible}.telemetry-table{font-size:12px}}
|
|
983
|
+
/* Telemetry can contain multiple long tables. Keep its outer dialog within
|
|
984
|
+
the visual viewport and scroll only its evidence body on small screens. */
|
|
985
|
+
.telemetry-detail-modal{--modal-accent:#fb7185;--category-color:var(--modal-accent);--modal-outer-gutter:24px;--modal-panel-max-width:1120px;--modal-shell-inset:24px;--modal-shell-padding:0}.telemetry-detail-modal__panel{--modal-header-inset:var(--dashboard-modal-panel-padding);display:grid;grid-template-rows:auto auto minmax(0,1fr);height:100%;max-height:100%;overflow:hidden;width:min(1120px,100%)}.telemetry-detail-modal__content{max-height:none;min-height:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;padding:0 4px 4px}@media(max-width:620px){.telemetry-detail-modal__panel{--modal-header-inset:18px;padding:18px}.telemetry-detail-modal__content{padding-inline:2px}}
|
|
986
|
+
.lifecycle-detail-modal{--modal-default-accent:#65c5d9}.lifecycle-detail-modal__panel{background:var(--modal-surface);border:2px solid var(--modal-accent);border-radius:var(--dashboard-modal-radius);box-sizing:border-box;color:var(--dashboard-modal-ink);display:grid;grid-template-rows:auto minmax(0,1fr);max-width:min(680px,calc(100vw - 32px));overflow:hidden;padding:var(--dashboard-modal-panel-padding);width:100%}.lifecycle-detail-modal__content{color:var(--dashboard-modal-ink);display:grid;gap:18px;max-height:none;min-height:0;overflow:auto;overscroll-behavior:contain;padding:4px}.lifecycle-detail-modal__content .field>span:last-child{color:var(--dashboard-modal-ink)}.lifecycle-detail-modal__content h3{color:var(--modal-accent);font-size:16px;margin:0 0 8px}.lifecycle-detail-modal :is(.label,.lifecycle-detail-modal__phase-list strong){color:var(--modal-secondary-accent)}.lifecycle-detail-modal__phase-list{display:grid;gap:8px;list-style:none;margin:0;padding:0}.lifecycle-detail-modal__phase-list li{align-items:baseline;border-bottom:1px solid color-mix(in srgb,var(--modal-accent) 32%,transparent);display:flex;gap:12px;justify-content:space-between;padding:8px 0}.lifecycle-detail-modal__phase-list li:last-child{border-bottom:0}.lifecycle-detail-modal__phase-list span{color:var(--dashboard-modal-muted);text-align:end}html[data-theme="light"] .lifecycle-detail-modal :is(.label,.lifecycle-detail-modal__phase-list strong){color:color-mix(in srgb,var(--modal-secondary-accent) 76%,#182230)}@media(max-width:620px){.lifecycle-detail-modal__panel{max-width:calc(100vw - 32px);padding:18px}.lifecycle-detail-modal__phase-list li{align-items:flex-start;flex-direction:column;gap:4px}.lifecycle-detail-modal__phase-list span{text-align:start}}
|
|
987
|
+
/* A telemetry Run-ID is a redundant activator inside an interactive row.
|
|
988
|
+
The row owns its continuous rose selection surface, never the text itself. */
|
|
989
|
+
.telemetry-run-link{-webkit-appearance:none;appearance:none;background:transparent;border:0;color:inherit;cursor:pointer;font:inherit;line-height:inherit;min-height:0;min-width:0;padding:0;text-align:left;text-decoration:none;white-space:nowrap}.telemetry-run-link:is(:hover,:active){background:transparent!important;color:inherit!important}.telemetry-run-link:is(:focus,:focus-visible){border-color:transparent!important;box-shadow:none!important;outline:0!important}
|
|
990
|
+
/* A glyph is visual control language, not body copy. Keep all icon-only
|
|
991
|
+
actions and disclosure markers at one deliberate, legible weight. */
|
|
992
|
+
:is(.category-icon,.page-refresh>span,.dashboard-action,.component-info,.prompt-history-report,.prompt-history-analysis,.prompt-history-details,.prompt-history-chat,.dashboard-modal-shell__close,.report-view-modal__close,.chat-send>span){font-weight:700}:is(.technical-details,.codex-chat,.telemetry,.platform-health,#currentRun,.inbox-queue,.prompt-history)>summary::before,:is(.copy.copy--glyph,.download.download--glyph,.component-modal__restart,.rate-limit-reset,.predecessor-retry,.execution-dismiss,.operator-merge-wait__actions :is(.dashboard-action--primary,.dashboard-action--destructive),#operatorMergeWaitModal :is(.dashboard-modal-shell__action--primary,.dashboard-modal-shell__action--destructive),.component-modal h2,.confirmation-modal h2,.report-view-modal__title,.prompt-chat-modal__header h2)::before{font-weight:700}
|
|
993
|
+
|
|
994
|
+
/* Relocation and component actions keep their position while optional actions change. */
|
|
995
|
+
.component-modal__actions{display:grid;gap:10px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:18px}.component-modal__actions .component-modal__restart{margin:0;min-height:44px;min-width:0;width:100%}.component-modal__actions .dashboard-modal-shell__action{grid-column:2;margin:0;min-width:0;width:100%}.installation-relocation-modal{padding:max(16px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) max(16px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left))!important}.installation-relocation-modal .dashboard-modal-shell__panel{display:grid;gap:18px;overflow:hidden}.installation-relocation-modal .dashboard-modal-shell__panel>p{margin:0}.installation-relocation-modal__locations{display:grid;gap:12px;margin:0}.installation-relocation-modal__locations div{display:grid;gap:4px}.installation-relocation-modal__locations dt{color:var(--modal-secondary-accent);font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase}.installation-relocation-modal__locations dd{margin:0;overflow-wrap:anywhere}.installation-relocation-modal .dashboard-modal-shell__actions{justify-content:flex-start;margin-top:0}.installation-relocation-modal .dashboard-modal-shell__action{min-width:10rem}.configuration-central-database__actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}
|
|
996
|
+
.footer__version-word{font-weight:400;text-transform:none}
|
|
997
|
+
.installation-relocation-modal .dashboard-modal-shell__header{grid-template-columns:minmax(0,1fr) auto}.installation-relocation-modal .dashboard-modal-shell__header h2::before{content:"⚙︎";display:inline-block;font-size:20px;line-height:1;margin-right:.42em;vertical-align:-.04em}
|
|
998
|
+
.configuration-central-database__location-value{align-items:center;display:flex;flex-wrap:wrap;gap:10px}.configuration-central-database__location-link{flex:1 1 28rem}.configuration-central-database__export,.configuration-central-database__relocate{align-items:center;background-color:color-mix(in srgb,currentColor 14%,var(--dashboard-button-fill-surface));border:1px solid var(--house-style);border-radius:7px;color:var(--house-style);cursor:pointer;display:inline-flex;flex:none;font:600 13px/1 system-ui;gap:7px;min-height:34px;padding:7px 10px;text-decoration:none;white-space:nowrap}.configuration-central-database__export::before,.configuration-central-database__relocate::before{font-size:16px;font-weight:700;line-height:1}.configuration-central-database__export::before{content:"↓"}.configuration-central-database__relocate::before{content:"↗"}.configuration-central-database__export:hover:not(:disabled),.configuration-central-database__relocate:hover:not(:disabled){background:var(--house-style);color:var(--button-ink)}@media (max-width:620px){.configuration-central-database__export,.configuration-central-database__relocate{flex-basis:100%;justify-content:center}.configuration-central-database__location-link{flex-basis:100%}}
|
|
999
|
+
.configuration-card :is(.configuration-provider-status h2,.configuration-validation-environment h3,.configuration-central-database__header h2,.configuration-server-settings h2,.configuration-readonly-settings h2,.configuration-timeout-policy h2,.configuration-controls h2,.configuration-dashboard-settings h2,.configuration-provider-login-status h2){font-size:16px;line-height:1.25}
|
|
1000
|
+
/* A stored run-scoped conversation gets a filled, heavier history glyph. */
|
|
1001
|
+
.prompt-history-chat--recorded{font-weight:800}
|
|
1002
|
+
/* A recorded conversation is an available action, not a muted indicator. */
|
|
1003
|
+
.prompt-history-chat--recorded{background-color:#d0a4ff!important;border-color:#d0a4ff!important;color:#17151a!important}
|
|
1004
|
+
/* Categories are navigation surfaces, not selected inputs. Their disclosure
|
|
1005
|
+
state is already communicated by the open/closed glyph and header surface. */
|
|
1006
|
+
:is(.workspace-card,.inbox-queue,.prompt-history,#currentRun,#rateLimits,.platform-health,.telemetry,#componentLogs,#codexChat,#engineering-dashboard-content>.technical-details:not(#componentLogs))>summary:is(:focus,:focus-visible){box-shadow:none!important;outline:0!important;outline-offset:0!important}
|
|
1007
|
+
/* Open pull-request states distinguish review readiness from merge readiness. */
|
|
1008
|
+
.open-pr-status--draft{color:#a6a6b2}.open-pr-status--draft .open-pr-status__dot{background:#a6a6b2;box-shadow:0 0 8px #a6a6b266}.open-pr-status--waiting_for_checks{color:#f7bc64}.open-pr-status--waiting_for_checks .open-pr-status__dot{background:#f7bc64;box-shadow:0 0 8px #f7bc6499}.open-pr-status--ready_for_review{color:#8dc7ff}.open-pr-status--ready_for_review .open-pr-status__dot{background:#8dc7ff;box-shadow:0 0 8px #8dc7ff99}.open-pr-status--ready_to_merge{color:#62dfa0}.open-pr-status--ready_to_merge .open-pr-status__dot{background:#62dfa0;box-shadow:0 0 8px #62dfa099}.open-pr-status--branch_update_required{color:#ff8585}.open-pr-status--branch_update_required .open-pr-status__dot{background:#ff8585;box-shadow:0 0 8px #ff858599}
|
|
1009
|
+
.open-pr-approval{font-size:12px;font-weight:700}.open-pr-approval--not_required{color:#62dfa0}.open-pr-approval--pending{color:#8dc7ff}.open-pr-approval--approved{color:#62dfa0}.open-pr-approval--changes_requested{color:#ff8585}.operator-merge-wait__pr-status{margin-bottom:4px}.operator-merge-wait>.open-pr-approval{margin-top:0}
|
|
1010
|
+
/* The Workspace PR projection is nested in a context card. Its dark base
|
|
1011
|
+
surface needs its own light-theme treatment; otherwise it remains a dark
|
|
1012
|
+
block when the surrounding Workspace card is light. */
|
|
1013
|
+
html[data-theme="light"] .workspace-open-prs{background:transparent;border-color:#d3b349}html[data-theme="light"] .workspace-open-prs a{color:#725311}html[data-theme="light"] .workspace-open-prs code{color:#415168}html[data-theme="light"] .workspace-open-prs .open-pr-status--draft{color:#5e6470}html[data-theme="light"] .workspace-open-prs .open-pr-status--waiting_for_checks{color:#8f5700}html[data-theme="light"] .workspace-open-prs .open-pr-status--ready_for_review{color:#1763aa}html[data-theme="light"] .workspace-open-prs .open-pr-status--ready_to_merge{color:#187843}html[data-theme="light"] .workspace-open-prs .open-pr-status--issues,html[data-theme="light"] .workspace-open-prs .open-pr-status--branch_update_required{color:#b42335}html[data-theme="light"] .workspace-open-prs .open-pr-approval--not_required,html[data-theme="light"] .workspace-open-prs .open-pr-approval--approved{color:#187843}html[data-theme="light"] .workspace-open-prs .open-pr-approval--pending{color:#1763aa}html[data-theme="light"] .workspace-open-prs .open-pr-approval--changes_requested{color:#b42335}html[data-theme="light"] .open-pr-owner-authorization{background:#e9fff4;color:#145a42}
|
|
1014
|
+
html[data-theme="light"] .open-pr-check-repair{background:#fff8dc;border-color:#d3b349;color:#725311}
|
|
1015
|
+
/* GitHub quota is an external delivery blocker, displayed directly below the title bar. */
|
|
1016
|
+
.dashboard-titlebar:has(~:is(#codexUsageLimitBanner,#githubRateLimitBanner):not([hidden])){margin-bottom:0}.dashboard-status-banner:is(.dashboard-status-banner--usage-limit,.dashboard-status-banner--github-rate-limit){align-items:center;background:#5b1d27;border-bottom:1px solid #ff6b7d;color:#ffe9ed}.dashboard-status-banner:is(.dashboard-status-banner--usage-limit,.dashboard-status-banner--github-rate-limit) strong{color:#ff99a7}.github-rate-limit-banner__refresh{align-items:center;background:#7a2230!important;border:1px solid #ff91a1!important;border-radius:50%;color:#fff0f2!important;cursor:pointer;display:inline-flex;flex:none;font:400 17px/1 system-ui;height:30px;justify-content:center;margin-left:auto;min-height:30px;min-width:30px;padding:0;width:30px}.github-rate-limit-banner__refresh:hover:not(:disabled){background:#a92b40!important;border-color:#ffc0c9!important;color:#fff!important}.github-rate-limit-banner__refresh:focus-visible{box-shadow:0 0 0 4px #ff91a188!important;outline:2px solid #ff91a1!important;outline-offset:2px}.github-rate-limit-banner__refresh:disabled{cursor:wait;opacity:.65}html[data-theme="light"] .dashboard-status-banner:is(.dashboard-status-banner--usage-limit,.dashboard-status-banner--github-rate-limit){background:#ffe8eb;color:#7d1726}html[data-theme="light"] .dashboard-status-banner:is(.dashboard-status-banner--usage-limit,.dashboard-status-banner--github-rate-limit) strong{color:#a51e3d}html[data-theme="light"] .github-rate-limit-banner__refresh{background:#fff0f2!important;border-color:#b42335!important;color:#8a1728!important}html[data-theme="light"] .github-rate-limit-banner__refresh:hover:not(:disabled){background:#ffd6dc!important;border-color:#8a1728!important;color:#6d1020!important}html[data-theme="light"] .github-rate-limit-banner__refresh:focus-visible{box-shadow:0 0 0 4px #b4233544!important;outline-color:#b42335!important}@media (max-width:620px){.github-rate-limit-banner__refresh{align-self:flex-end;margin-top:-2px}}
|
|
1017
|
+
.dashboard-titlebar:has(~#codexCapacityReserveBanner:not([hidden])){margin-bottom:0}.dashboard-status-banner--capacity-reserve{align-items:center;background:#5b4316;border-bottom:1px solid #f4c34f;color:#fff4d6;font:600 13px/1.45 system-ui}.dashboard-status-banner--capacity-reserve strong{color:#ffd768}.codex-capacity-reserve-banner__action{color:inherit;font-weight:700;margin-left:auto;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;white-space:nowrap}.codex-capacity-reserve-banner__action:hover{color:#fff!important;text-decoration-thickness:2px}html[data-theme="light"] .dashboard-status-banner--capacity-reserve{background:#fff4d6;color:#654600}html[data-theme="light"] .dashboard-status-banner--capacity-reserve strong{color:#805900}html[data-theme="light"] .codex-capacity-reserve-banner__action:hover{color:#3d2800!important}@media (max-width:620px){.codex-capacity-reserve-banner__action{align-self:flex-start;margin-left:0}}
|
|
1018
|
+
/* A table row is a selection surface, not a focused control. Keep the
|
|
1019
|
+
category tint continuous across cells and use just one leading marker. */
|
|
1020
|
+
:where(.component-log-row,.prompt-history-row,.telemetry-row):is([aria-selected="true"],[data-selected="true"],:focus,:focus-visible){box-shadow:none!important;outline:0!important;outline-offset:0!important}
|
|
1021
|
+
:where(.component-log-row,.prompt-history-row,.telemetry-row):is([aria-selected="true"],[data-selected="true"],:focus,:focus-visible)>td{background:color-mix(in srgb,var(--dashboard-selected-row-color) 16%,var(--dashboard-surface-base))!important;box-shadow:none!important;outline:0!important}
|
|
1022
|
+
:where(.component-log-row,.prompt-history-row,.telemetry-row):is([aria-selected="true"],[data-selected="true"],:focus,:focus-visible)>td:first-child{box-shadow:inset 2px 0 0 var(--dashboard-selected-row-color)!important}
|
|
1023
|
+
:where(.component-log-row,.prompt-history-row,.telemetry-row):is(:hover,[aria-selected="true"],[data-selected="true"],:focus,:focus-visible)>td:first-child:not([colspan]){background:color-mix(in srgb,var(--dashboard-selected-row-color) 16%,var(--dashboard-surface-base))!important}
|
|
1024
|
+
/* Interactive log rows keep one continuous hover surface; the generic
|
|
1025
|
+
first-column table anchor must not create a second shade. */
|
|
1026
|
+
:is(.component-log-row,.prompt-history-row,.telemetry-row):hover>td:first-child:not([colspan]){background:color-mix(in srgb,var(--dashboard-selected-row-color) 16%,var(--dashboard-surface-base))!important}
|
|
1027
|
+
/* Rose pagination follows the same filled-hover contrast as its history
|
|
1028
|
+
actions, even though its base label colour has higher selector weight. */
|
|
1029
|
+
.prompt-history .log-pagination button:hover:not(:disabled){color:#271923}
|
|
1030
|
+
/* Download glyphs use the dashboard's dark ink on the shared amber hover,
|
|
1031
|
+
rather than retaining their high-contrast resting label colour. */
|
|
1032
|
+
#componentLogs .component-log-download:hover:not(:disabled){color:#201812}
|
|
1033
|
+
/* Native dialog autofocus must never become a visible selected border. */
|
|
1034
|
+
dialog.dashboard-modal-shell,dialog.dashboard-modal-shell:is(:focus,:focus-visible){box-shadow:none!important;outline:0!important;outline-offset:0!important}
|
|
1035
|
+
/* Focus is product-wide navigation language, never a category accent. Keep
|
|
1036
|
+
every visible interactive focus treatment in the house-style orange,
|
|
1037
|
+
including anchor actions inside dialogs. Deliberately non-focusing shells,
|
|
1038
|
+
table-row selection surfaces and lifecycle geometry remain excluded above. */
|
|
1039
|
+
:where(a[href],button,input,select,textarea,[role="button"],[tabindex]):not(:where(.dashboard-modal-shell,.component-log-row,.prompt-history-row,.telemetry-row,.execution-lifecycle__node,.theme-toggle,.section-state-toggle,.auto-refresh-toggle,.log-sortable,.log-table-wrap,.telemetry-scroll,.telemetry-detail-table-scroll)):is(:focus,:focus-visible){border-color:var(--house-style)!important;outline-color:var(--house-style)!important;box-shadow:0 0 0 var(--dashboard-focus-ring-size) var(--dashboard-input-focus-ring)!important}
|
|
1040
|
+
/* Table scrollers are keyboard-scroll targets, not selected controls. Their
|
|
1041
|
+
outer surface never receives a focus ring; only independently interactive
|
|
1042
|
+
sortable headers retain their contained focus edge. */
|
|
1043
|
+
:is(.log-table-wrap,.telemetry-scroll,.telemetry-detail-table-scroll){--dashboard-table-focus-border:#8dc7ff;--dashboard-table-focus-ring:#8dc7ff44}
|
|
1044
|
+
html[data-theme="light"] :is(.log-table-wrap,.telemetry-scroll,.telemetry-detail-table-scroll){--dashboard-table-focus-border:#1763aa;--dashboard-table-focus-ring:#1763aa33}
|
|
1045
|
+
:is(.log-table-wrap,.telemetry-scroll,.telemetry-detail-table-scroll):is(:focus,:focus-visible){box-shadow:none!important;outline:0!important;outline-offset:0!important}
|
|
1046
|
+
.log-table th.log-sortable:focus,.log-table th.log-sortable:focus-visible,.telemetry-table th.log-sortable:focus,.telemetry-table th.log-sortable:focus-visible{box-shadow:inset 0 0 0 1px var(--dashboard-table-focus-border,#8dc7ff)!important;outline:0!important;outline-offset:0!important;z-index:2}
|
|
1047
|
+
/* Title-bar labels are part of their switch control, not a separate focus
|
|
1048
|
+
target. Keep the compact house-style ring on the track for all three. */
|
|
1049
|
+
.dashboard-titlebar .theme-toggle:is(:focus,:focus-visible),.dashboard-titlebar .section-state-toggle:is(:focus,:focus-visible){box-shadow:none!important;outline:0!important;outline-color:var(--house-style)!important}
|
|
1050
|
+
.dashboard-titlebar .theme-toggle:is(:focus,:focus-visible)::before,.dashboard-titlebar .section-state-toggle:is(:focus,:focus-visible)::before{box-shadow:0 0 0 5px var(--house-style-focus);outline:2px solid var(--house-style);outline-offset:3px}
|
|
1051
|
+
.sr-only{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.dashboard-health{position:relative}.dashboard-health__button{align-items:center;background:transparent;border:0;border-radius:50%;cursor:pointer;display:inline-flex;height:36px;justify-content:center;min-height:36px;min-width:36px;padding:0;width:36px}.dashboard-health__dot{background:#9aa5b5;border:2px solid #d8e5f4;border-radius:50%;box-shadow:0 0 0 3px #9aa5b544;display:block;height:12px;width:12px}.dashboard-health__button[data-health-state="ready"] .dashboard-health__dot{background:#54d6a0;box-shadow:0 0 0 3px #54d6a044}.dashboard-health__button[data-health-state="active"] .dashboard-health__dot{background:#63c8ec;box-shadow:0 0 0 3px #63c8ec44}.dashboard-health__button[data-health-state="blocked"] .dashboard-health__dot{background:#f4c34f;box-shadow:0 0 0 3px #f4c34f44}.dashboard-health__button[data-health-state="error"] .dashboard-health__dot{background:#ff718b;box-shadow:0 0 0 3px #ff718b44}.dashboard-health__button:focus-visible{outline:2px solid var(--house-style);outline-offset:3px}.dashboard-health__tooltip{background:#20222d;border:1px solid #7095bb;border-radius:10px;box-shadow:0 12px 30px #0008;color:#eef5ff;display:none;font:400 13px/1.35 system-ui;min-width:255px;padding:12px;position:absolute;right:0;top:calc(100% + 8px);width:max-content;z-index:60}.dashboard-health:hover .dashboard-health__tooltip,.dashboard-health:focus-within .dashboard-health__tooltip,.dashboard-health.dashboard-health--open .dashboard-health__tooltip{display:block}.dashboard-health__tooltip strong{color:#9ed6ff;display:block;font:600 13px/1.35 system-ui;margin:0 0 8px}.dashboard-health__tooltip ul{display:grid;gap:5px;list-style:none;margin:0;padding:0}.dashboard-health__tooltip li{align-items:center;display:flex;gap:16px;justify-content:space-between}.dashboard-health__tooltip li span:first-child{color:#cbd7e5}.dashboard-health__tooltip li span:last-child{font-weight:600;text-align:right}.dashboard-health__tooltip li[data-health="good"] span:last-child{color:#69e3ae}.dashboard-health__tooltip li[data-health="warning"] span:last-child{color:#ffd768}.dashboard-health__tooltip li[data-health="bad"] span:last-child{color:#ff9cab}.dashboard-health__tooltip li[data-health="unknown"] span:last-child{color:#c6d1df}@media (max-width:620px){.dashboard-health__tooltip{left:auto;max-width:calc(100vw - 28px);min-width:240px;right:0}}html[data-theme="light"] .dashboard-health__tooltip{background:#fff;border-color:#6286ad;box-shadow:0 12px 30px #26395533;color:#182230}html[data-theme="light"] .dashboard-health__tooltip strong{color:#1c5d8e}html[data-theme="light"] .dashboard-health__tooltip li span:first-child{color:#415168}html[data-theme="light"] .dashboard-health__dot{border-color:#415168}
|
|
1052
|
+
/* The Run-ID button delegates selection to its table row. This final
|
|
1053
|
+
override also neutralises WebKit's touch/focus paint after all shared
|
|
1054
|
+
focus rules have been applied. */
|
|
1055
|
+
#telemetryDetailContent .telemetry-run-link{-webkit-tap-highlight-color:transparent;user-select:none}
|
|
1056
|
+
#telemetryDetailContent .telemetry-run-link:is(:focus,:focus-visible,:active){border-color:transparent!important;box-shadow:none!important;outline:0!important}
|
|
1057
|
+
/* Phase timing is comparative evidence: retain the neutral table surface at
|
|
1058
|
+
rest and show the complete row accent only while it is being inspected. */
|
|
1059
|
+
.telemetry-detail-modal .telemetry-phase-table tbody tr:is(:hover,:focus,:focus-visible)>td{background:color-mix(in srgb,var(--category-color,#fb7185) 16%,transparent)!important}
|
|
1060
|
+
/* Detail tables remain subordinate to the parent telemetry table: one quiet
|
|
1061
|
+
divider, rather than a second full-strength modal frame. */
|
|
1062
|
+
.telemetry-detail-table-scroll{border-color:color-mix(in srgb,#ffb0bc 52%,transparent);border-width:1px}
|
|
1063
|
+
/* Run IDs are compact identifiers. Fixing their width keeps the first mobile
|
|
1064
|
+
column narrow while the execution title receives the remaining table space. */
|
|
1065
|
+
#promptHistory .log-table{--prompt-history-run-id-width:7rem}#promptHistory .log-table th:nth-child(1),#promptHistory .log-table td:nth-child(1){max-width:var(--prompt-history-run-id-width);min-width:var(--prompt-history-run-id-width);overflow:hidden;text-overflow:ellipsis;width:var(--prompt-history-run-id-width)}
|
|
1066
|
+
/* Actions communicate through their shape, colour and iconography. Button
|
|
1067
|
+
labels stay at the normal text weight across every dashboard surface. */
|
|
1068
|
+
:is(button,input[type="button"],input[type="submit"],input[type="reset"],.dashboard-action,.dashboard-modal-shell__action){font-weight:400!important}
|
|
1069
|
+
|
|
1070
|
+
/* Historical lifecycle evidence belongs to the same neutral card family as
|
|
1071
|
+
the other prompt-detail evidence. The active execution lifecycle keeps its
|
|
1072
|
+
separate monitoring surface above. */
|
|
1073
|
+
.prompt-detail-modal__content .execution-lifecycle--historical{background:var(--dashboard-surface-base);padding:18px}
|
|
1074
|
+
.prompt-detail-modal__content .execution-lifecycle--historical h3{font-size:18px;margin:0 0 14px}
|
|
1075
|
+
html[data-theme="light"] .prompt-detail-modal__content .execution-lifecycle--historical{background:#fff}
|
|
1076
|
+
|
|
1077
|
+
/* A blocked predecessor is a terminal warning, not a monitoring-cyan active
|
|
1078
|
+
execution card. Its amber boundary must stay continuous on all four sides. */
|
|
1079
|
+
#currentRun #predecessorGate{--category-color:var(--house-style);border-color:var(--house-style)}
|
|
1080
|
+
/* Lifecycle detail mirrors the workflow-node status colours without relying on text alone. */
|
|
1081
|
+
.indicator--blue{background:#65c5d9;box-shadow:0 0 8px #65c5d988}.lifecycle-detail-modal__status{align-items:center;display:inline-flex;gap:7px}.lifecycle-detail-modal__status-indicator{display:block;flex:none}.lifecycle-detail-modal__status-value{color:var(--dashboard-modal-ink)!important}
|
|
1082
|
+
/* A completed check can become pending after a new push. Keep the manual
|
|
1083
|
+
refresh beside the PR heading, without turning the whole card into an action. */
|
|
1084
|
+
.workspace-open-prs__header{align-items:center;display:flex;gap:8px;justify-content:space-between}.workspace-open-prs__header>strong{color:var(--category-color);display:block;font-size:12px;letter-spacing:.04em;text-transform:uppercase}.workspace-open-prs__refresh{align-items:center;background:transparent;border:1px solid color-mix(in srgb,var(--category-color) 72%,transparent);border-radius:50%;color:var(--category-color);cursor:pointer;display:inline-flex;font:400 16px/1 system-ui;height:28px;justify-content:center;min-height:28px;min-width:28px;padding:0;width:28px}.workspace-open-prs__refresh:hover:not(:disabled){background:var(--category-color);color:#2a2415}.workspace-open-prs__refresh:focus-visible{outline:2px solid var(--category-color);outline-offset:2px}.workspace-open-prs__refresh:disabled{cursor:wait;opacity:.65}
|
|
1085
|
+
.workspace-open-prs ul{max-height:min(21rem,35vh);overflow-y:auto;overscroll-behavior:contain;padding:0 8px 0 0;scrollbar-gutter:stable}.workspace-open-prs li{border-bottom:1px solid color-mix(in srgb,var(--category-color) 32%,transparent);padding-bottom:16px}
|
|
1086
|
+
.workspace-open-prs li,.workspace-worktrees li{row-gap:10px}
|
|
1087
|
+
|
|
1088
|
+
/* Local worktrees are a read-only workspace projection and intentionally
|
|
1089
|
+
share the bounded, flat treatment of the adjacent pull-request summary. */
|
|
1090
|
+
.workspace-worktrees{background:transparent;border:1px solid color-mix(in srgb,var(--category-color) 48%,transparent);border-radius:10px;margin-top:12px;padding:10px}.workspace-worktrees__header{align-items:center;display:flex;justify-content:space-between;gap:8px}.workspace-worktrees__header>strong{color:var(--category-color);display:block;font-size:12px;letter-spacing:.04em;text-transform:uppercase}.workspace-worktrees__refresh{align-items:center;background:transparent;border:1px solid color-mix(in srgb,var(--category-color) 72%,transparent);border-radius:50%;color:var(--category-color);cursor:pointer;display:inline-flex;font:400 16px/1 system-ui;height:28px;justify-content:center;min-height:28px;min-width:28px;padding:0;width:28px}.workspace-worktrees__refresh:hover:not(:disabled){background:var(--category-color);color:#2a2415}.workspace-worktrees__refresh:disabled{cursor:wait;opacity:.65}.workspace-worktrees ul{display:grid;gap:8px;list-style:none;margin:8px 0 0;max-height:min(21rem,35vh);overflow-y:auto;overscroll-behavior:contain;padding:0 8px 0 0;scrollbar-gutter:stable}.workspace-worktrees li{border-bottom:1px solid color-mix(in srgb,var(--category-color) 32%,transparent);display:grid;gap:3px;min-width:0;padding-bottom:16px}.workspace-worktrees__branch{color:#ffe7a0;font-size:13px;font-weight:700;overflow-wrap:anywhere}.workspace-worktrees__path,.workspace-worktrees__commit{color:var(--modal-secondary-accent);font-size:12px;overflow-wrap:anywhere}.workspace-worktrees__analysis{color:var(--dashboard-modal-muted);font-size:12px;line-height:1.35;margin:2px 0 0}.workspace-worktrees__analysis--removable{color:#69e6ad}.workspace-worktrees__analysis--keep{color:#f3d36a}.workspace-worktrees__pr{color:var(--category-color);font-size:12px;font-weight:700;text-underline-offset:3px;width:max-content}.workspace-worktrees__remove{background:#4d242c;border:1px solid #f08095;border-radius:7px;color:#ffd9df;cursor:pointer;font:700 12px system-ui;margin-top:3px;padding:7px 10px;width:max-content}.workspace-worktrees__remove::before{content:"⌫";font-size:14px;margin-right:6px}.workspace-worktrees__remove:hover{background:#f08095;color:#32151b}.workspace-worktrees__empty{color:var(--dashboard-modal-muted);font-size:13px;margin:8px 0 0}html[data-theme="light"] .workspace-worktrees{background:transparent;border-color:#d3b349}html[data-theme="light"] .workspace-worktrees__branch{color:#725311}html[data-theme="light"] .workspace-worktrees__path,html[data-theme="light"] .workspace-worktrees__commit{color:#415168}html[data-theme="light"] .workspace-worktrees__analysis--removable{color:#187843}html[data-theme="light"] .workspace-worktrees__analysis--keep{color:#8f5700}html[data-theme="light"] .workspace-worktrees__remove{background:#fff0f2;color:#8c2034}
|
|
1091
|
+
.workspace-worktrees .workspace-worktrees__remove:hover:not(:disabled){background:#ff718f!important;border-color:#ff718f!important;color:#23131a!important}
|
|
1092
|
+
.workspace-worktrees__switch{background:#3c351f;border:1px solid var(--category-color);border-radius:8px;color:#ffe7a0;cursor:pointer;font:600 13px system-ui;margin-top:10px;padding:9px 12px;width:max-content}.workspace-worktrees__switch::before{content:"⇄";font-size:16px;margin-right:7px}.workspace-worktrees__switch:hover:not(:disabled){background:var(--category-color);color:#2a2415}html[data-theme="light"] .workspace-worktrees__switch{background:#fff8dc;color:#725311}
|
|
1093
|
+
.workspace-worktrees__active{color:#69e6ad;display:inline-block;font:700 14px/1 system-ui;margin-right:7px;vertical-align:1px}html[data-theme="light"] .workspace-worktrees__active{color:#187843}
|
|
1094
|
+
/* Local paths remain text controls. Their only action is copying the displayed
|
|
1095
|
+
path, so the dashboard neither opens Finder nor follows file:// URLs. */
|
|
1096
|
+
.local-folder-link{-webkit-appearance:none;appearance:none;background:transparent!important;border:0;color:var(--modal-secondary-accent)!important;cursor:pointer;font:inherit;overflow-wrap:anywhere;padding:0;text-align:left;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}.local-folder-link:is(:hover,:active,:focus,:focus-visible):not(:disabled){background:transparent!important;box-shadow:none!important;color:var(--modal-secondary-accent)!important;text-decoration-thickness:2px}.local-folder-link:focus-visible{outline:2px solid var(--category-color);outline-offset:3px}.local-folder-link:disabled{cursor:default;opacity:1;text-decoration:none}.workspace-database__content .local-folder-link,.rate-limit-provider-path .local-folder-link{display:block;min-width:0;white-space:pre-wrap}
|
|
1097
|
+
.runtime-directory-link{font-family:ui-monospace,SFMono-Regular,Menlo,monospace!important}
|
|
1098
|
+
|
|
1099
|
+
/* The Inbox location chooser inherits the exact indigo accent of its queue. */
|
|
1100
|
+
.configuration-inbox-modal{--modal-default-accent:#818cf8;--category-color:#818cf8}.configuration-inbox-modal .dashboard-modal-shell__close,.configuration-inbox-modal .dashboard-modal-shell__action{background:#25243a!important;border-color:#818cf8!important;color:#ececff!important}.configuration-inbox-modal .dashboard-modal-shell__action--primary{background:#313052!important}.configuration-inbox-modal :is(.dashboard-modal-shell__close,.dashboard-modal-shell__action):hover:not(:disabled){background:#818cf8!important;border-color:#818cf8!important;color:#171729!important}html[data-theme="light"] .configuration-inbox-modal .dashboard-modal-shell__close,html[data-theme="light"] .configuration-inbox-modal .dashboard-modal-shell__action{background:#f1f2ff!important;border-color:#6366c9!important;color:#3b3d82!important}html[data-theme="light"] .configuration-inbox-modal .dashboard-modal-shell__action--primary{background:#dde0ff!important}html[data-theme="light"] .configuration-inbox-modal :is(.dashboard-modal-shell__close,.dashboard-modal-shell__action):hover:not(:disabled){background:#c9cdfd!important;border-color:#6366c9!important;color:#171729!important}
|
|
1101
|
+
|
|
1102
|
+
/* Owner approval is a Workspace action. Keep its affordance and confirmation
|
|
1103
|
+
in the same yellow family as the surrounding pull-request controls. */
|
|
1104
|
+
.open-pr-owner-authorization{background:#3c351f;border-color:#f3d36a;color:#ffe7a0}.open-pr-owner-authorization:hover:not(:disabled){background:#f3d36a;color:#2a2415}.open-pr-owner-authorization:focus-visible{outline-color:#f3d36a}html[data-theme="light"] .open-pr-owner-authorization{background:#fff8dc;color:#725311}
|
|
1105
|
+
|
|
1106
|
+
#confirmationModal.dashboard-modal-shell--owner-authorization .dashboard-modal-shell__action{background:#3c351f!important;border-color:#f3d36a!important;color:#ffe7a0!important}#confirmationModal.dashboard-modal-shell--owner-authorization .dashboard-modal-shell__action--primary{background:#4b4323!important}#confirmationModal.dashboard-modal-shell--owner-authorization .dashboard-modal-shell__action:hover:not(:disabled){background:#f3d36a!important;border-color:#f3d36a!important;color:#2a2415!important}html[data-theme="light"] #confirmationModal.dashboard-modal-shell--owner-authorization .dashboard-modal-shell__action{background:#fffdf3!important;border-color:#d3b349!important;color:#725311!important}html[data-theme="light"] #confirmationModal.dashboard-modal-shell--owner-authorization .dashboard-modal-shell__action--primary{background:#fff8dc!important}html[data-theme="light"] #confirmationModal.dashboard-modal-shell--owner-authorization .dashboard-modal-shell__action:hover:not(:disabled){background:#f3d36a!important;border-color:#b89025!important;color:#2a2415!important}
|
|
1107
|
+
|
|
1108
|
+
/* Repairing failed checks is a bounded, reviewable action. It uses the
|
|
1109
|
+
Workspace warning family rather than the red destructive-action treatment. */
|
|
1110
|
+
#confirmationModal.dashboard-modal-shell--check-repair .dashboard-modal-shell__action{background:#3c351f!important;border-color:#f3d36a!important;color:#ffe7a0!important}#confirmationModal.dashboard-modal-shell--check-repair .dashboard-modal-shell__action--primary{background:#4b4323!important}#confirmationModal.dashboard-modal-shell--check-repair .dashboard-modal-shell__action:hover:not(:disabled){background:#f3d36a!important;border-color:#f3d36a!important;color:#2a2415!important}html[data-theme="light"] #confirmationModal.dashboard-modal-shell--check-repair .dashboard-modal-shell__action{background:#fffdf3!important;border-color:#d3b349!important;color:#725311!important}html[data-theme="light"] #confirmationModal.dashboard-modal-shell--check-repair .dashboard-modal-shell__action--primary{background:#fff8dc!important}html[data-theme="light"] #confirmationModal.dashboard-modal-shell--check-repair .dashboard-modal-shell__action:hover:not(:disabled){background:#f3d36a!important;border-color:#b89025!important;color:#2a2415!important}
|
|
1111
|
+
|
|
1112
|
+
/* Telemetry actions belong to the table toolbar. Align them with the log
|
|
1113
|
+
actions so exports and destructive controls consistently sit at the right. */
|
|
1114
|
+
.telemetry-actions{justify-content:flex-end;margin:0 0 10px}
|
|
1115
|
+
|
|
1116
|
+
/* Keep every export action on the same modest arrow glyph. The visible text in
|
|
1117
|
+
older controls is intentionally suppressed so historic markup cannot drift. */
|
|
1118
|
+
.dashboard-action--download{font-size:0!important}.dashboard-action--download::before{content:"↓";display:block;font:18px/1 system-ui}
|
|
1119
|
+
#promptHistoryDetailDownloadJson,#telemetryDetailDownloadJson{font:14px/1 ui-monospace,SFMono-Regular,Menlo,monospace!important}
|
|
1120
|
+
#promptHistoryDetailDownloadJson::before,#telemetryDetailDownloadJson::before{content:none;display:none}
|
|
1121
|
+
.dashboard-sticky-header:has(#codexProviderReadinessBanner:not([hidden])),.dashboard-sticky-header:has(#githubProviderReadinessBanner:not([hidden])){padding-bottom:7px}.dashboard-status-banner--provider-readiness{align-items:center;background:#5b1d27;border-bottom:1px solid #ff6b7d;color:#ffe9ed}.dashboard-status-banner--provider-readiness strong{color:#ff99a7}.dashboard-status-banner--provider-auth_required{background:#5b4316;color:#fff4d6;border-color:#f4c34f}.dashboard-status-banner--provider-auth_required strong{color:#ffd768}.provider-readiness-banner__action{align-items:center;background:#7a2230;border:1px solid #ff91a1;border-radius:8px;color:#fff0f2;cursor:pointer;display:inline-flex;flex:none;font:400 13px/1 system-ui;justify-content:center;margin-left:auto;min-height:30px;padding:0 10px}.provider-readiness-banner__action[hidden]{display:none}.provider-readiness-banner__action:hover:not(:disabled){background:#a92b40;border-color:#ffc0c9;color:#fff}.provider-readiness-banner__action:focus-visible{box-shadow:0 0 0 4px #ff91a188;outline:2px solid #ff91a1;outline-offset:2px}.provider-readiness-banner__action:disabled{cursor:wait;opacity:.65}html[data-theme="light"] .dashboard-status-banner--provider-readiness{background:#ffe8eb;color:#7d1726}html[data-theme="light"] .dashboard-status-banner--provider-readiness strong{color:#a51e3d}@media (max-width:620px){.provider-readiness-banner__action{align-self:flex-end;margin-top:-2px}}
|
|
1122
|
+
.provider-readiness-banner__action[hidden]{display:none}
|
|
1123
|
+
.dashboard-status-banner--execution-runtime{align-items:center;background:#5b1d27;border-bottom:1px solid #ff6b7d;color:#ffe9ed}.dashboard-status-banner--execution-runtime strong{color:#ff99a7}html[data-theme="light"] .dashboard-status-banner--execution-runtime{background:#ffe8eb;color:#7d1726}html[data-theme="light"] .dashboard-status-banner--execution-runtime strong{color:#a51e3d}
|
|
1124
|
+
#executionRuntimeRepair:hover:not(:disabled),#executionRuntimeRepair:focus-visible{background:#a92b40!important;border-color:#ffc0c9!important;color:#fff!important}
|
|
1125
|
+
/* Recovery controls are operationally consequential across Python, Codex and
|
|
1126
|
+
GitHub. Their hover/focus treatment is consistently red, never amber. */
|
|
1127
|
+
.dashboard-status-banner--provider-auth_required .provider-readiness-banner__action:hover:not(:disabled),.dashboard-status-banner--provider-auth_required .provider-readiness-banner__action:focus-visible,.configuration-provider-status__row[data-provider-state="AUTH_REQUIRED"] .configuration-provider-status__repair:hover:not(:disabled),.configuration-provider-status__row[data-provider-state="AUTH_REQUIRED"] .configuration-provider-status__repair:focus-visible{background:#a92b40!important;border-color:#ffc0c9!important;color:#fff!important}
|
|
1128
|
+
html[data-theme="light"] .dashboard-status-banner--provider-auth_required .provider-readiness-banner__action:hover:not(:disabled),html[data-theme="light"] .dashboard-status-banner--provider-auth_required .provider-readiness-banner__action:focus-visible,html[data-theme="light"] .configuration-provider-status__row[data-provider-state="AUTH_REQUIRED"] .configuration-provider-status__repair:hover:not(:disabled),html[data-theme="light"] .configuration-provider-status__row[data-provider-state="AUTH_REQUIRED"] .configuration-provider-status__repair:focus-visible{background:#ffd6dc!important;border-color:#8a1728!important;color:#6d1020!important}
|
|
1129
|
+
|
|
1130
|
+
/* The absence of a selected project is neutral context, kept visible with
|
|
1131
|
+
the other operational banners rather than as a scrolling dashboard card. */
|
|
1132
|
+
.dashboard-sticky-header:has(#noProjectSelected:not([hidden])){padding-bottom:7px}.dashboard-status-banner--no-project{align-items:center;background:#163b59;border-bottom:1px solid #62bdf0;color:#e7f5ff;font:600 13px/1.45 system-ui}.dashboard-status-banner--no-project strong{color:#9bd7ff}.no-project-selected__dismiss{align-items:center;background:transparent!important;border:1px solid currentColor!important;border-radius:50%;color:inherit!important;cursor:pointer;display:inline-flex;flex:none;font:22px/1 system-ui;height:30px;justify-content:center;margin-left:auto;min-height:30px;min-width:30px;padding:0;width:30px}.no-project-selected__dismiss:hover,.no-project-selected__dismiss:focus-visible{background:#9bd7ff!important;border-color:#9bd7ff!important;color:#123a58!important}.no-project-selected__dismiss:focus-visible{box-shadow:0 0 0 4px #9bd7ff55!important;outline:2px solid #9bd7ff!important;outline-offset:2px!important}html[data-theme="light"] .dashboard-status-banner--no-project{background:#e2f3ff;color:#12466b}html[data-theme="light"] .dashboard-status-banner--no-project strong{color:#075985}html[data-theme="light"] .no-project-selected__dismiss:hover,html[data-theme="light"] .no-project-selected__dismiss:focus-visible{background:#075985!important;border-color:#075985!important;color:#fff!important}
|
|
1133
|
+
|
|
1134
|
+
/* Managed PR evidence remains a normal link, positioned under execution
|
|
1135
|
+
context so both current and historical operational context stay scannable. */
|
|
1136
|
+
.prompt-detail-card--pull-requests,.active-run-pull-requests{grid-column:2}.prompt-detail-pr-link{border-bottom:1px solid currentColor;color:var(--category-color);font-weight:400;text-decoration:none}.prompt-detail-pr-link:hover{background:transparent;color:var(--category-color);outline:0}.prompt-detail-pr-link:focus-visible{background:transparent;color:var(--category-color);outline:2px solid var(--category-color);outline-offset:2px}.prompt-detail-pr-metrics{color:var(--dashboard-modal-muted);display:flex;flex-wrap:wrap;font-size:12px;gap:5px 12px;margin-top:7px}.prompt-detail-pr-metric{white-space:nowrap}@media (max-width:620px){.prompt-detail-card--pull-requests,.active-run-pull-requests{grid-column:1;grid-row:auto}}
|
|
1137
|
+
|
|
1138
|
+
/* Authentication is a recoverable warning, not a destructive provider failure. */
|
|
1139
|
+
.dashboard-status-banner--provider-auth_required .provider-readiness-banner__action{background:transparent!important;border-color:#ffd768!important;color:#fff4d6!important}.dashboard-status-banner--provider-auth_required .provider-readiness-banner__action:hover:not(:disabled),.dashboard-status-banner--provider-auth_required .provider-readiness-banner__action:focus-visible{background:#f4c34f!important;border-color:#ffd768!important;color:#2a2415!important}.dashboard-status-banner--provider-auth_required .provider-readiness-banner__action:focus-visible{box-shadow:0 0 0 4px #f4c34f88;outline-color:#ffd768}
|
|
1140
|
+
|
|
1141
|
+
/* Provider installation is a confirmed operational action, not a destructive
|
|
1142
|
+
sign-out. It therefore uses the shared compact orange treatment. */
|
|
1143
|
+
.configuration-provider-status__repair{background:#3b281b;border:1px solid var(--house-style);border-radius:8px;color:#fff0dc;cursor:pointer;font:400 12px/1 system-ui;grid-column:4;min-height:32px;padding:0 10px;white-space:nowrap}.configuration-provider-status__repair:hover:not(:disabled){background:var(--house-style);border-color:var(--house-style);color:var(--button-ink)}.configuration-provider-status__repair:focus-visible{box-shadow:0 0 0 4px var(--house-style-focus);outline:2px solid var(--house-style);outline-offset:2px}.configuration-provider-status__repair:disabled{cursor:wait;opacity:.65}html[data-theme="light"] .configuration-provider-status__repair{background:#fff8ef;border-color:#d68b23;color:#643a13}html[data-theme="light"] .configuration-provider-status__repair:hover:not(:disabled){background:var(--house-style);border-color:var(--house-style);color:var(--button-ink)}@media (max-width:620px){.configuration-provider-status__repair{grid-column:2 / -1;justify-self:start}}
|
|
1144
|
+
.configuration-provider-status__row[data-provider-state="AUTH_REQUIRED"] .configuration-provider-status__repair{background:transparent!important;border-color:#ffd768!important;color:#fff4d6!important}.configuration-provider-status__row[data-provider-state="AUTH_REQUIRED"] .configuration-provider-status__repair:hover:not(:disabled),.configuration-provider-status__row[data-provider-state="AUTH_REQUIRED"] .configuration-provider-status__repair:focus-visible{background:#f4c34f!important;border-color:#ffd768!important;color:#2a2415!important}html[data-theme="light"] .configuration-provider-status__row[data-provider-state="AUTH_REQUIRED"] .configuration-provider-status__repair{background:transparent!important;border-color:#b89025!important;color:#643a13!important}html[data-theme="light"] .configuration-provider-status__row[data-provider-state="AUTH_REQUIRED"] .configuration-provider-status__repair:hover:not(:disabled),html[data-theme="light"] .configuration-provider-status__row[data-provider-state="AUTH_REQUIRED"] .configuration-provider-status__repair:focus-visible{background:#f4c34f!important;border-color:#b89025!important;color:#2a2415!important}
|
|
1145
|
+
|
|
1146
|
+
/* On phones the titlebar actions can begin at either edge. Anchor the status
|
|
1147
|
+
popover to the titlebar rather than its small trigger, so it always remains
|
|
1148
|
+
inside the viewport regardless of where the action row wraps. */
|
|
1149
|
+
@media (max-width:620px){
|
|
1150
|
+
.dashboard-health{position:static}
|
|
1151
|
+
.dashboard-health__tooltip{box-sizing:border-box;left:14px;min-width:0;right:14px;width:auto}
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1154
|
+
/* The sticky titlebar disables hit testing by default. The health popover is
|
|
1155
|
+
deliberately interactive so its hover state survives moving from the dot
|
|
1156
|
+
into the status text. Give the titlebar its own stacking context and raise
|
|
1157
|
+
this control within it: compact layouts place cards immediately below the
|
|
1158
|
+
header, which must never paint over the status explanation. */
|
|
1159
|
+
.dashboard-sticky-header{isolation:isolate}
|
|
1160
|
+
.dashboard-titlebar__actions{position:relative;z-index:2}
|
|
1161
|
+
.dashboard-health{isolation:isolate;pointer-events:auto;z-index:3}
|
|
1162
|
+
.dashboard-health:is(:hover,:focus-within),.dashboard-health.dashboard-health--open{z-index:4}
|
|
1163
|
+
.dashboard-health__tooltip{pointer-events:auto;z-index:1}
|
|
1164
|
+
|
|
1165
|
+
/* Platform status is an explicit disclosure. In compact layouts it occupies
|
|
1166
|
+
the same titlebar flow as Options, so dashboard cards can never cover it. */
|
|
1167
|
+
.dashboard-health__tooltip{display:none}
|
|
1168
|
+
.dashboard-health.dashboard-health--open + .dashboard-health__tooltip{display:block}
|
|
1169
|
+
.dashboard-health__tooltip .dashboard-health__check{align-items:start}
|
|
1170
|
+
.dashboard-health__tooltip .dashboard-health__check--component{cursor:pointer}
|
|
1171
|
+
.dashboard-health__tooltip .dashboard-health__check--component:focus-visible{outline:1px solid var(--house-style);outline-offset:2px}
|
|
1172
|
+
.dashboard-health__tooltip .dashboard-health__value{font-weight:600;text-align:right}
|
|
1173
|
+
.dashboard-health__tooltip .dashboard-health__check[data-health="good"] .dashboard-health__value{color:#69e3ae}
|
|
1174
|
+
.dashboard-health__tooltip .dashboard-health__check[data-health="warning"] .dashboard-health__value{color:#ffd768}
|
|
1175
|
+
.dashboard-health__tooltip .dashboard-health__check[data-health="bad"] .dashboard-health__value{color:#ff9cab}
|
|
1176
|
+
.dashboard-health__tooltip .dashboard-health__check[data-health="unknown"] .dashboard-health__value{color:#c6d1df}
|
|
1177
|
+
.dashboard-health__tooltip .dashboard-health__reason{color:#cbd7e5;font-size:12px;grid-column:1 / -1;line-height:1.3;overflow-wrap:anywhere}
|
|
1178
|
+
.dashboard-health__tooltip .dashboard-health__section{border-top:1px solid #ffffff2b;color:#9ed6ff;font-size:11px;font-weight:800;letter-spacing:.06em;margin-top:4px;padding-top:7px;text-transform:uppercase}
|
|
1179
|
+
html[data-theme="light"] .dashboard-health__tooltip .dashboard-health__reason{color:#415168}
|
|
1180
|
+
@media (min-width:1241px){
|
|
1181
|
+
.dashboard-titlebar__actions>.dashboard-health__tooltip{left:0;right:auto;top:calc(100% + 8px)}
|
|
1182
|
+
}
|
|
1183
|
+
@media (max-width:1240px){
|
|
1184
|
+
.dashboard-titlebar__actions{grid-template-columns:36px 32px minmax(0,1fr);justify-content:stretch}
|
|
1185
|
+
.dashboard-titlebar__actions>.dashboard-health{grid-column:1;grid-row:1}
|
|
1186
|
+
.dashboard-titlebar__actions>.page-refresh{grid-column:2;grid-row:1}
|
|
1187
|
+
.dashboard-titlebar__actions>.dashboard-titlebar__options-toggle{grid-column:3;grid-row:1}
|
|
1188
|
+
.dashboard-titlebar__options-toggle{min-width:0;width:100%}
|
|
1189
|
+
.dashboard-titlebar__actions>.dashboard-health__tooltip{box-sizing:border-box;grid-column:1 / -1;grid-row:2;max-width:100%;min-width:0;position:static;width:auto}
|
|
1190
|
+
.dashboard-health__tooltip li,.dashboard-health__tooltip li span{min-width:0;overflow-wrap:anywhere}
|
|
1191
|
+
.dashboard-health.dashboard-health--open~.dashboard-titlebar__options .dashboard-titlebar__options-content{grid-row:3}
|
|
1192
|
+
}
|
|
1193
|
+
|
|
1194
|
+
/* Unified focus contract: one product-coloured, one-pixel edge. Do not
|
|
1195
|
+
combine a native border with an outline and halo. Evidence tables retain
|
|
1196
|
+
their deliberately quiet blue navigation treatment. */
|
|
1197
|
+
:where(a[href],button,input,select,textarea,[role="button"],[tabindex]):not(:where(.dashboard-modal-shell,.component-log-row,.prompt-history-row,.telemetry-row,.execution-lifecycle__node,.log-sortable,.log-table-wrap,.telemetry-scroll,.telemetry-detail-table-scroll,.local-folder-link,.theme-toggle,.section-state-toggle,.dashboard-health__button,.auto-refresh-toggle input)):is(:focus,:focus-visible),
|
|
1198
|
+
:is(#chatInput,.page-refresh,.dashboard-locale__button,.configuration-provider-status__repair,.platform-health__component):is(:focus,:focus-visible){
|
|
1199
|
+
border-color:var(--house-style)!important;
|
|
1200
|
+
box-shadow:none!important;
|
|
1201
|
+
outline:0!important;
|
|
1202
|
+
outline-offset:0!important;
|
|
1203
|
+
}
|
|
1204
|
+
/* A missing provider is a blocking error. The generic button hover/focus
|
|
1205
|
+
rule above otherwise wins by specificity and turns the repair action
|
|
1206
|
+
orange, which incorrectly reads as a recoverable warning. */
|
|
1207
|
+
.dashboard-status-banner--provider-unavailable .provider-readiness-banner__action{background:#7a2230!important;border-color:#ff91a1!important;color:#fff0f2!important}
|
|
1208
|
+
.dashboard-status-banner--provider-unavailable .provider-readiness-banner__action:hover:not(:disabled){background:#a92b40!important;border-color:#ffc0c9!important;color:#fff!important}
|
|
1209
|
+
.dashboard-status-banner--provider-unavailable .provider-readiness-banner__action:is(:focus,:focus-visible){box-shadow:0 0 0 4px #ff91a188!important;outline:2px solid #ff91a1!important;outline-color:#ff91a1!important;outline-offset:2px!important}
|
|
1210
|
+
:is(#codexProviderReadinessBanner,#githubProviderReadinessBanner).dashboard-status-banner--provider-unavailable .provider-readiness-banner__action:is(:focus,:focus-visible){box-shadow:0 0 0 4px #ff91a188!important;outline:2px solid #ff91a1!important;outline-color:#ff91a1!important;outline-offset:2px!important}
|
|
1211
|
+
html[data-theme="light"] .dashboard-status-banner--provider-unavailable .provider-readiness-banner__action{background:#fff0f2!important;border-color:#b42335!important;color:#8a1728!important}
|
|
1212
|
+
html[data-theme="light"] .dashboard-status-banner--provider-unavailable .provider-readiness-banner__action:hover:not(:disabled){background:#ffd6dc!important;border-color:#8a1728!important;color:#6d1020!important}
|
|
1213
|
+
/* Component cards use a shorthand border in the health surface. Restate that
|
|
1214
|
+
shorthand for the complete selected interaction so its green status border
|
|
1215
|
+
cannot survive beside the single orange edge. */
|
|
1216
|
+
.platform-health__component:is(:hover,:focus,:focus-visible){
|
|
1217
|
+
border:1px solid var(--house-style)!important;
|
|
1218
|
+
box-shadow:none!important;
|
|
1219
|
+
outline:0!important;
|
|
1220
|
+
outline-offset:0!important;
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
/* Native date editors otherwise inherit the muted category colour from their
|
|
1224
|
+
label. They are values, so use the same high-contrast ink as every field. */
|
|
1225
|
+
#componentLogControls :is(input[type="date"],input[type="datetime-local"]){
|
|
1226
|
+
color:#f7f3ee!important;
|
|
1227
|
+
color-scheme:dark;
|
|
1228
|
+
}
|
|
1229
|
+
#componentLogControls :is(input[type="date"],input[type="datetime-local"])::-webkit-datetime-edit,
|
|
1230
|
+
#componentLogControls :is(input[type="date"],input[type="datetime-local"])::-webkit-datetime-edit-fields-wrapper,
|
|
1231
|
+
#componentLogControls :is(input[type="date"],input[type="datetime-local"])::-webkit-datetime-edit-text,
|
|
1232
|
+
#componentLogControls :is(input[type="date"],input[type="datetime-local"])::-webkit-datetime-edit-year-field,
|
|
1233
|
+
#componentLogControls :is(input[type="date"],input[type="datetime-local"])::-webkit-datetime-edit-month-field,
|
|
1234
|
+
#componentLogControls :is(input[type="date"],input[type="datetime-local"])::-webkit-datetime-edit-day-field,
|
|
1235
|
+
#componentLogControls :is(input[type="date"],input[type="datetime-local"])::-webkit-datetime-edit-hour-field,
|
|
1236
|
+
#componentLogControls :is(input[type="date"],input[type="datetime-local"])::-webkit-datetime-edit-minute-field{
|
|
1237
|
+
color:#f7f3ee!important;
|
|
1238
|
+
}
|
|
1239
|
+
html[data-theme="light"] #componentLogControls :is(input[type="date"],input[type="datetime-local"]){
|
|
1240
|
+
color:#182230!important;
|
|
1241
|
+
color-scheme:light;
|
|
1242
|
+
}
|
|
1243
|
+
html[data-theme="light"] #componentLogControls :is(input[type="date"],input[type="datetime-local"])::-webkit-datetime-edit,
|
|
1244
|
+
html[data-theme="light"] #componentLogControls :is(input[type="date"],input[type="datetime-local"])::-webkit-datetime-edit-fields-wrapper,
|
|
1245
|
+
html[data-theme="light"] #componentLogControls :is(input[type="date"],input[type="datetime-local"])::-webkit-datetime-edit-text,
|
|
1246
|
+
html[data-theme="light"] #componentLogControls :is(input[type="date"],input[type="datetime-local"])::-webkit-datetime-edit-year-field,
|
|
1247
|
+
html[data-theme="light"] #componentLogControls :is(input[type="date"],input[type="datetime-local"])::-webkit-datetime-edit-month-field,
|
|
1248
|
+
html[data-theme="light"] #componentLogControls :is(input[type="date"],input[type="datetime-local"])::-webkit-datetime-edit-day-field,
|
|
1249
|
+
html[data-theme="light"] #componentLogControls :is(input[type="date"],input[type="datetime-local"])::-webkit-datetime-edit-hour-field,
|
|
1250
|
+
html[data-theme="light"] #componentLogControls :is(input[type="date"],input[type="datetime-local"])::-webkit-datetime-edit-minute-field{
|
|
1251
|
+
color:#182230!important;
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
/* The desktop filter grid gives labels an explicit display value. Keep the
|
|
1255
|
+
conditional date controls truly absent until their selected preset needs them. */
|
|
1256
|
+
#componentLogControls>label[hidden]{display:none!important}
|
|
1257
|
+
/* Controls whose visible shape is a pseudo-element or a native checkbox have
|
|
1258
|
+
no normal border to recolour, so receive the same one-pixel edge directly. */
|
|
1259
|
+
:is(.dashboard-titlebar .theme-toggle,.dashboard-titlebar .section-state-toggle):is(:focus,:focus-visible)::before,
|
|
1260
|
+
:is(.dashboard-health__button,.auto-refresh-toggle input,.local-folder-link):is(:focus,:focus-visible){
|
|
1261
|
+
box-shadow:none!important;
|
|
1262
|
+
outline:1px solid var(--house-style)!important;
|
|
1263
|
+
outline-offset:0!important;
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
/* Owner approval and focused check repair are sibling PR actions. Their
|
|
1267
|
+
dimensions deliberately match so the approval gate does not look secondary. */
|
|
1268
|
+
.open-pr-owner-authorization,
|
|
1269
|
+
.open-pr-check-repair{
|
|
1270
|
+
align-items:center;
|
|
1271
|
+
display:inline-flex;
|
|
1272
|
+
font:600 13px/1.2 system-ui;
|
|
1273
|
+
min-height:46px;
|
|
1274
|
+
padding:9px 12px;
|
|
1275
|
+
}
|
|
1276
|
+
.open-pr-owner-authorization::before{
|
|
1277
|
+
content:"✓";
|
|
1278
|
+
font-size:16px;
|
|
1279
|
+
font-weight:800;
|
|
1280
|
+
line-height:1;
|
|
1281
|
+
margin-right:7px;
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
/* Dashboard actions are inline-flex by default. Native `hidden` must still
|
|
1285
|
+
win for retry actions after a successful reload or regeneration. */
|
|
1286
|
+
#promptHistoryReportReload[hidden],
|
|
1287
|
+
#promptHistoryReportRetry[hidden]{display:none!important}
|
|
1288
|
+
|
|
1289
|
+
/* Bubble scrolling is owned by the prompt-history modal's definite message
|
|
1290
|
+
area. Do not add a later global bubble scroller: it would force short
|
|
1291
|
+
messages to reserve scrollbar chrome and defeat the 2/3 area limit. */
|
|
1292
|
+
@media (max-width:620px){.dashboard-status-banner{position:static}}
|
|
1293
|
+
.platform-attention{background:#5b4316;border-bottom:1px solid #f4c34f;color:#fff4d6;margin:0 0 18px}.platform-attention[hidden]{display:none}.platform-attention>summary{align-items:center;cursor:pointer;display:flex;gap:9px;list-style:none;padding:10px 16px}.platform-attention>summary::-webkit-details-marker{display:none}.platform-attention>summary::after{content:"▸";margin-left:auto}.platform-attention[open]>summary::after{content:"▾"}.platform-attention>summary strong{color:#ffd768}.platform-attention>summary span{background:#f4c34f;border-radius:999px;color:#2a2415;font-size:12px;font-weight:800;min-width:1.4rem;padding:2px 5px;text-align:center}.platform-attention__items{display:grid;gap:8px;padding:0 12px 12px}.platform-attention__items .dashboard-status-banner{margin:0;position:static}.platform-attention__items .dashboard-status-banner--provider-readiness{align-items:flex-start}.platform-attention__items .provider-readiness-banner__action{align-self:center}
|
|
1294
|
+
|
|
1295
|
+
/* Buttons are controls, not text links: every visible action gets a modest
|
|
1296
|
+
fill derived from its own ink/border colour. Semantic local-file links and
|
|
1297
|
+
telemetry links deliberately remain links; their underline is the affordance. */
|
|
1298
|
+
:root{--dashboard-button-fill-surface:#24242d}
|
|
1299
|
+
html[data-theme="light"]{--dashboard-button-fill-surface:#fff}
|
|
1300
|
+
button:where(:not(.theme-toggle,.section-state-toggle,.local-folder-link,.telemetry-run-link)){
|
|
1301
|
+
background-color:color-mix(in srgb,currentColor 14%,var(--dashboard-button-fill-surface));
|
|
1302
|
+
}
|
|
1303
|
+
:is(.component-info,.chat-message__copy,.prompt-history-report,.prompt-history-analysis,.prompt-history-details,.prompt-history-run-id-copy,.prompt-history-chat,.page-refresh,.configuration-provider-status__logout,.workspace-open-prs__refresh,.workspace-worktrees__refresh,.dashboard-health__button,.no-project-selected__dismiss){
|
|
1304
|
+
background-color:color-mix(in srgb,currentColor 14%,var(--dashboard-button-fill-surface));
|
|
1305
|
+
}
|
|
1306
|
+
:is(.dashboard-locale__menu button[aria-selected="true"]){
|
|
1307
|
+
background-color:color-mix(in srgb,var(--house-style) 14%,var(--dashboard-button-fill-surface));
|
|
1308
|
+
}
|
|
1309
|
+
:is(.page-refresh,.dashboard-health__button){border:1px solid color-mix(in srgb,currentColor 68%,transparent)}
|
|
1310
|
+
/* Authentication remains amber, but no longer looks like an unfilled link. */
|
|
1311
|
+
.dashboard-status-banner--provider-auth_required .provider-readiness-banner__action,
|
|
1312
|
+
.configuration-provider-status__row[data-provider-state="AUTH_REQUIRED"] .configuration-provider-status__repair{
|
|
1313
|
+
background-color:color-mix(in srgb,#ffd768 18%,#5b4316)!important;
|
|
1314
|
+
}
|
|
1315
|
+
html[data-theme="light"] :is(.dashboard-status-banner--provider-auth_required .provider-readiness-banner__action,.configuration-provider-status__row[data-provider-state="AUTH_REQUIRED"] .configuration-provider-status__repair){
|
|
1316
|
+
background-color:color-mix(in srgb,#b89025 14%,#fff)!important;
|
|
1317
|
+
}
|