Download mindxtrain/operator/coach/static/style.css from PYTHAI/mindXtrain: direct link, hf CLI and curl.
- Browser
- Download file 21.1 kB
-
https://huggingface.co/PYTHAI/mindXtrain/resolve/main/mindxtrain/operator/coach/static/style.css
- Command line
-
hf download hf://PYTHAI/mindXtrain/mindxtrain/operator/coach/static/style.css
-
curl -L -o style.css https://huggingface.co/PYTHAI/mindXtrain/resolve/main/mindxtrain/operator/coach/static/style.css
21.1 kB
| /* mindXtrain Coach — minimal, dark-friendly. No external CSS framework. */ | |
| :root { | |
| color-scheme: light dark; | |
| --bg: #0d1117; | |
| --fg: #e6edf3; | |
| --muted: #8b949e; | |
| --accent: #f7921e; /* AMD orange */ | |
| --accent-2: #2f81f7; /* link blue */ | |
| --card: #161b22; | |
| --border: #30363d; | |
| --code-bg: #010409; | |
| --ok: #2ea043; | |
| --warn: #d29922; | |
| --bad: #f85149; | |
| } | |
| * { box-sizing: border-box; } | |
| body { | |
| margin: 0; | |
| font-family: ui-sans-serif, system-ui, -apple-system, sans-serif; | |
| background: var(--bg); | |
| color: var(--fg); | |
| line-height: 1.5; | |
| } | |
| header { padding: 2rem 1.5rem 1rem; max-width: 1100px; margin: 0 auto; } | |
| h1 { margin: 0 0 0.75rem; font-size: 2rem; } | |
| h1 .muted { color: var(--accent); font-weight: 400; } | |
| h2 { margin: 0; font-size: 1.15rem; } | |
| .muted { color: var(--muted); } | |
| .pipeline { | |
| display: flex; align-items: center; gap: 0.5rem; | |
| margin: 0.75rem 0; | |
| font-size: 0.9rem; | |
| } | |
| .stage { | |
| border: 1px solid var(--border); | |
| border-radius: 6px; | |
| padding: 0.5rem 0.75rem; | |
| background: var(--card); | |
| text-align: center; | |
| min-width: 8rem; | |
| } | |
| .stage.active { | |
| border-color: var(--accent); | |
| box-shadow: 0 0 0 1px var(--accent) inset; | |
| } | |
| .arrow { color: var(--muted); font-size: 1.25rem; } | |
| .lede { color: var(--muted); max-width: 70ch; margin-top: 0.5rem; } | |
| .coach-nav { margin-top: 0.9rem; display: flex; gap: 1.2rem; flex-wrap: wrap; } | |
| .coach-nav a { color: var(--accent-2); font-size: 0.88rem; text-decoration: none; } | |
| .coach-nav a:first-child { color: var(--accent); font-weight: 600; } | |
| .coach-nav a:hover { text-decoration: underline; } | |
| main { | |
| max-width: 1100px; margin: 0 auto; padding: 0 1.5rem 3rem; | |
| display: flex; flex-direction: column; gap: 1.25rem; | |
| } | |
| .card { | |
| background: var(--card); | |
| border: 1px solid var(--border); | |
| border-radius: 8px; | |
| padding: 1.25rem 1.5rem; | |
| transition: border-color 200ms ease, box-shadow 200ms ease, opacity 200ms ease; | |
| scroll-margin-top: 1rem; | |
| } | |
| /* Inline "Check now"-style re-probe trigger in a card header. */ | |
| .link-button { | |
| background: none; | |
| border: none; | |
| color: var(--accent-2); | |
| cursor: pointer; | |
| font: inherit; | |
| padding: 0; | |
| text-decoration: underline; | |
| } | |
| .link-button:hover { color: var(--accent); } | |
| /* Auto-advance step states. .active = the step the user is on; .done = a | |
| completed step (kept visible for context); neither = pending. */ | |
| .card.active { | |
| border-color: var(--accent); | |
| box-shadow: 0 0 0 1px var(--accent) inset, 0 4px 18px rgba(247, 146, 30, 0.12); | |
| } | |
| .card.done { | |
| opacity: 0.78; | |
| border-color: var(--ok); | |
| } | |
| .card.done > header h2 .step { | |
| background: var(--ok); | |
| color: #fff; | |
| } | |
| .card.done > header h2 .step::before { | |
| content: "✓ "; | |
| font-weight: 700; | |
| } | |
| .card:not(.active):not(.done) { | |
| opacity: 0.72; | |
| } | |
| .card:not(.active):not(.done):hover { | |
| opacity: 0.95; | |
| } | |
| .card > header { | |
| display: flex; justify-content: space-between; align-items: baseline; | |
| padding: 0; margin: 0 0 0.75rem; max-width: none; | |
| } | |
| .step { | |
| display: inline-flex; | |
| width: 1.5rem; height: 1.5rem; | |
| border-radius: 50%; | |
| background: var(--accent); | |
| color: #000; | |
| align-items: center; justify-content: center; | |
| font-size: 0.85rem; | |
| font-weight: 600; | |
| margin-right: 0.5rem; | |
| } | |
| .hint { color: var(--muted); font-size: 0.85rem; } | |
| .prose { color: var(--muted); max-width: 75ch; } | |
| button { | |
| font: inherit; | |
| background: var(--accent); | |
| color: #000; | |
| border: 0; | |
| padding: 0.5rem 1rem; | |
| border-radius: 4px; | |
| cursor: pointer; | |
| font-weight: 600; | |
| } | |
| button:disabled { | |
| background: var(--border); | |
| color: var(--muted); | |
| cursor: not-allowed; | |
| } | |
| button:hover:not(:disabled) { filter: brightness(1.1); } | |
| input, textarea { | |
| font: inherit; | |
| background: var(--code-bg); | |
| color: var(--fg); | |
| border: 1px solid var(--border); | |
| border-radius: 4px; | |
| padding: 0.4rem 0.6rem; | |
| } | |
| input[type="number"] { width: 5rem; } | |
| textarea { width: 100%; resize: vertical; } | |
| .code { | |
| background: var(--code-bg); | |
| border: 1px solid var(--border); | |
| padding: 0.75rem 1rem; | |
| border-radius: 4px; | |
| overflow-x: auto; | |
| font-family: ui-monospace, SFMono-Regular, Menlo, monospace; | |
| font-size: 0.85rem; | |
| margin: 0.75rem 0 0; | |
| max-height: 24rem; | |
| } | |
| .grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); | |
| gap: 0.75rem; | |
| margin-bottom: 0.75rem; | |
| } | |
| .recipe { | |
| border: 1px solid var(--border); | |
| border-radius: 6px; | |
| padding: 0.75rem 0.9rem; | |
| background: var(--bg); | |
| cursor: pointer; | |
| transition: border-color 120ms ease; | |
| } | |
| .recipe:hover { border-color: var(--accent-2); } | |
| .recipe.selected { | |
| border-color: var(--accent); | |
| background: rgba(247, 146, 30, 0.05); | |
| } | |
| /* Training session — tiered metrics panel inside #step-train */ | |
| .sea-status { | |
| display: flex; | |
| align-items: center; | |
| gap: 0.6rem; | |
| margin: 0.5rem 0; | |
| padding: 0.5rem 0.7rem; | |
| border: 1px solid var(--border); | |
| border-radius: 6px; | |
| background: var(--code-bg); | |
| font-size: 0.85rem; | |
| } | |
| .sea-status .hint { text-transform: none; letter-spacing: 0; } | |
| .session-headline { | |
| display: flex; | |
| align-items: center; | |
| gap: 0.75rem; | |
| flex-wrap: wrap; | |
| margin: 0.5rem 0 0.75rem; | |
| font-family: ui-monospace, SFMono-Regular, Menlo, monospace; | |
| font-size: 0.9rem; | |
| } | |
| .session-headline .hint { | |
| font-size: 0.7rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| } | |
| .session-headline .mono { color: var(--fg); } | |
| /* --- realtime training feedback: phase line, progress bar, result --- */ | |
| .train-phase { | |
| margin: 0.35rem 0 0.25rem; | |
| font-size: 0.95rem; | |
| font-weight: 500; | |
| color: var(--fg); | |
| } | |
| .train-progress { | |
| margin: 0.25rem 0 0.75rem; | |
| display: flex; | |
| align-items: center; | |
| gap: 0.6rem; | |
| } | |
| .progress-track { | |
| flex: 1; | |
| height: 8px; | |
| background: var(--border); | |
| border-radius: 4px; | |
| overflow: hidden; | |
| } | |
| .progress-fill { | |
| height: 100%; | |
| width: 0%; | |
| background: var(--accent); | |
| transition: width 0.4s ease; | |
| } | |
| .progress-fill.done { background: var(--ok); } | |
| .train-result { | |
| margin: 0.75rem 0; | |
| padding: 0.6rem 0.9rem; | |
| border-radius: 6px; | |
| border-left: 4px solid var(--ok); | |
| background: var(--code-bg); | |
| font-family: ui-monospace, SFMono-Regular, Menlo, monospace; | |
| font-size: 0.9rem; | |
| color: var(--fg); | |
| } | |
| .train-result.failed { border-left-color: var(--bad); } | |
| .core-pip { | |
| display: inline-block; | |
| width: 7px; | |
| height: 7px; | |
| margin-left: 2px; | |
| border-radius: 2px; | |
| background: var(--border); | |
| vertical-align: middle; | |
| } | |
| .core-pip.on { background: var(--accent); } | |
| #session-metrics > summary, | |
| #metrics-table-wrap > summary, | |
| #train-log-wrap > summary { | |
| cursor: pointer; | |
| user-select: none; | |
| font-size: 0.85rem; | |
| color: var(--muted); | |
| margin-bottom: 0.5rem; | |
| } | |
| #session-metrics > summary:hover, | |
| #metrics-table-wrap > summary:hover, | |
| #train-log-wrap > summary:hover { color: var(--fg); } | |
| #metrics-table-wrap { margin-top: 0.75rem; } | |
| #chart-window-note { margin: 0.25rem 0 0; } | |
| /* Create-script (dataset authoring) form. */ | |
| .dataset-form { display: flex; flex-direction: column; gap: 0.6rem; } | |
| .dataset-form label { display: flex; flex-direction: column; gap: 0.25rem; font-size: 0.9rem; } | |
| .dataset-form textarea { | |
| width: 100%; | |
| background: var(--bg); | |
| color: var(--fg); | |
| border: 1px solid var(--border); | |
| border-radius: 6px; | |
| padding: 0.4rem 0.6rem; | |
| font-family: inherit; | |
| } | |
| .dataset-form .train-controls { flex-direction: row; align-items: center; flex-wrap: wrap; } | |
| /* Streaming chat transcript. */ | |
| .chat-transcript { | |
| max-height: 360px; | |
| overflow-y: auto; | |
| border: 1px solid var(--border); | |
| border-radius: 8px; | |
| padding: 0.5rem 0.75rem; | |
| margin: 0.5rem 0; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 0.5rem; | |
| } | |
| .chat-msg { display: flex; flex-direction: column; gap: 0.15rem; } | |
| .chat-role { | |
| font-size: 0.7rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.04em; | |
| color: var(--muted); | |
| } | |
| .chat-text { white-space: pre-wrap; } | |
| .chat-msg.chat-user .chat-text { color: var(--accent-2); } | |
| .chat-msg.chat-assistant .chat-text { color: var(--fg); } | |
| #step-chat textarea { flex: 1; min-width: 16rem; } | |
| .metrics-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); | |
| gap: 0.75rem; | |
| margin: 0.25rem 0 0.75rem; | |
| } | |
| .spark-cell h4 { | |
| margin: 0 0 0.25rem; | |
| font-size: 0.7rem; | |
| letter-spacing: 0.05em; | |
| text-transform: uppercase; | |
| color: var(--muted); | |
| font-weight: 600; | |
| } | |
| .spark-cell svg { | |
| display: block; | |
| background: var(--code-bg); | |
| border: 1px solid var(--border); | |
| border-radius: 4px; | |
| width: 100%; | |
| max-width: 320px; | |
| } | |
| .spark-cell .mono { | |
| display: inline-block; | |
| margin-top: 0.2rem; | |
| font-size: 0.85rem; | |
| color: var(--fg); | |
| } | |
| .chronos-step { background: var(--accent-2); color: #fff; font-size: 0.95rem; } | |
| .chronos-headline { | |
| display: flex; | |
| align-items: center; | |
| gap: 0.75rem; | |
| font-size: 1.1rem; | |
| margin: 0.5rem 0 1rem; | |
| } | |
| .chronos-headline .mono { | |
| font-family: ui-monospace, SFMono-Regular, Menlo, monospace; | |
| font-size: 0.95rem; | |
| } | |
| .chronos-charts { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); | |
| gap: 1rem; | |
| margin: 0.75rem 0; | |
| } | |
| .chronos-chart-wrap h3 { | |
| margin: 0 0 0.25rem; | |
| font-size: 0.85rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| color: var(--muted); | |
| font-weight: 600; | |
| } | |
| .chronos-chart-wrap svg { | |
| display: block; | |
| width: 100%; | |
| max-width: 320px; | |
| background: var(--code-bg); | |
| border: 1px solid var(--border); | |
| border-radius: 4px; | |
| } | |
| .chronos-confidence-row { | |
| display: flex; | |
| align-items: center; | |
| gap: 0.5rem; | |
| margin-top: 0.5rem; | |
| } | |
| /* Consensus tier colors — reused for the headline pill */ | |
| .badge-status.tier-correlated, .badge-status.tier-tight { | |
| background: rgba(46, 160, 67, 0.18); color: var(--ok); | |
| } | |
| .badge-status.tier-degraded, .badge-status.tier-loose { | |
| background: rgba(210, 153, 34, 0.18); color: var(--warn); | |
| } | |
| .badge-status.tier-drifted, .badge-status.tier-divergent, | |
| .badge-status.tier-unavailable, .badge-status.tier-offline { | |
| background: rgba(248, 81, 73, 0.18); color: var(--bad); | |
| } | |
| .badge-status.tier-unknown { background: var(--border); color: var(--muted); } | |
| .backend-badge { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 0.3rem; | |
| font-size: 0.7rem; | |
| font-family: ui-monospace, SFMono-Regular, Menlo, monospace; | |
| font-weight: 500; | |
| letter-spacing: 0.05em; | |
| text-transform: uppercase; | |
| padding: 0.2rem 0.55rem; | |
| border-radius: 999px; | |
| vertical-align: middle; | |
| margin-left: 0.6rem; | |
| border: 1px solid var(--border); | |
| } | |
| .backend-badge::before { | |
| content: ""; | |
| display: inline-block; | |
| width: 0.5rem; height: 0.5rem; | |
| border-radius: 50%; | |
| background: var(--muted); | |
| } | |
| .backend-badge.ready { | |
| color: var(--ok); | |
| border-color: rgba(46, 160, 67, 0.4); | |
| background: rgba(46, 160, 67, 0.08); | |
| } | |
| .backend-badge.ready::before { background: var(--ok); } | |
| .backend-badge.notready { | |
| color: var(--muted); | |
| border-color: var(--border); | |
| background: rgba(139, 148, 158, 0.08); | |
| } | |
| .backend-badge.notready::before { background: var(--warn); } | |
| .recipe.recommended { | |
| border-color: var(--accent-2); | |
| box-shadow: 0 0 0 2px rgba(247, 146, 30, 0.25), 0 0 12px rgba(247, 146, 30, 0.15); | |
| position: relative; | |
| } | |
| .recipe.recommended::after { | |
| content: "recommended"; | |
| position: absolute; | |
| top: 0.4rem; | |
| right: 0.5rem; | |
| font-size: 0.65rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| color: var(--accent); | |
| font-family: ui-monospace, monospace; | |
| } | |
| .recipe h3 { margin: 0 0 0.25rem; font-size: 1rem; font-family: ui-monospace, monospace; } | |
| .recipe .meta { color: var(--muted); font-size: 0.8rem; } | |
| .recipe .badge { | |
| display: inline-block; | |
| padding: 0.05rem 0.4rem; | |
| border-radius: 3px; | |
| background: var(--border); | |
| color: var(--fg); | |
| font-size: 0.7rem; | |
| margin-right: 0.25rem; | |
| } | |
| .summary { | |
| list-style: none; | |
| padding: 0; | |
| margin: 0.75rem 0 0; | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 0.5rem; | |
| } | |
| .summary li { | |
| background: var(--code-bg); | |
| border: 1px solid var(--border); | |
| padding: 0.3rem 0.6rem; | |
| border-radius: 3px; | |
| font-family: ui-monospace, monospace; | |
| font-size: 0.8rem; | |
| } | |
| .cost-controls { | |
| display: flex; gap: 1rem; align-items: center; flex-wrap: wrap; | |
| margin-bottom: 0.75rem; | |
| } | |
| .cost-controls label { display: flex; flex-direction: column; gap: 0.25rem; font-size: 0.85rem; color: var(--muted); } | |
| table { | |
| width: 100%; | |
| border-collapse: collapse; | |
| margin-top: 0.5rem; | |
| } | |
| th, td { | |
| text-align: left; | |
| padding: 0.5rem 0.75rem; | |
| border-bottom: 1px solid var(--border); | |
| font-size: 0.9rem; | |
| } | |
| th { color: var(--muted); font-weight: 500; } | |
| td.fits-yes { color: var(--ok); } | |
| td.fits-no { color: var(--bad); } | |
| .headline { | |
| font-size: 1.15rem; | |
| margin-top: 1rem; | |
| padding: 0.75rem 1rem; | |
| border-left: 3px solid var(--accent); | |
| background: var(--code-bg); | |
| } | |
| #step-chat .hint.ready { color: var(--ok); } | |
| #step-chat .hint.notready { color: var(--warn); } | |
| /* --- step 4: live training -------------------------------------------- */ | |
| .train-controls { | |
| display: flex; gap: 0.75rem; align-items: center; flex-wrap: wrap; | |
| margin-bottom: 0.75rem; | |
| } | |
| .train-controls .mono { font-family: ui-monospace, monospace; font-size: 0.8rem; } | |
| .badge-status { | |
| display: inline-block; | |
| padding: 0.15rem 0.6rem; | |
| border-radius: 3px; | |
| font-size: 0.75rem; | |
| font-family: ui-monospace, monospace; | |
| border: 1px solid var(--border); | |
| background: var(--code-bg); | |
| color: var(--muted); | |
| text-transform: lowercase; | |
| letter-spacing: 0.04em; | |
| } | |
| .badge-status.running { color: var(--accent-2); border-color: var(--accent-2); } | |
| .badge-status.pending, | |
| .badge-status.launching { color: var(--warn); border-color: var(--warn); } | |
| .badge-status.succeeded { color: var(--ok); border-color: var(--ok); } | |
| .badge-status.failed, | |
| .badge-status.cancelled, | |
| .badge-status.disconnected { color: var(--bad); border-color: var(--bad); } | |
| #cancel-train { | |
| background: transparent; | |
| color: var(--bad); | |
| border: 1px solid var(--bad); | |
| } | |
| #cancel-train:hover:not(:disabled) { | |
| background: var(--bad); | |
| color: #000; | |
| filter: none; | |
| } | |
| .chart-wrap { | |
| background: var(--code-bg); | |
| border: 1px solid var(--border); | |
| border-radius: 4px; | |
| padding: 0.75rem; | |
| margin: 0.5rem 0; | |
| } | |
| .chart-wrap canvas { max-width: 100%; } | |
| #metrics-table { | |
| font-family: ui-monospace, monospace; | |
| font-size: 0.8rem; | |
| } | |
| #metrics-table th, #metrics-table td { padding: 0.25rem 0.6rem; } | |
| .log-tail { | |
| max-height: 18rem; | |
| overflow-y: auto; | |
| white-space: pre; | |
| } | |
| /* --- step 6: deploy --------------------------------------------------- */ | |
| .deploy-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(310px, 1fr)); | |
| gap: 0.85rem; | |
| margin-top: 0.75rem; | |
| } | |
| .deploy-card { | |
| border: 1px solid var(--border); | |
| border-radius: 6px; | |
| padding: 0.85rem 1rem; | |
| background: var(--bg); | |
| display: flex; flex-direction: column; | |
| } | |
| .deploy-card h3 { | |
| margin: 0 0 0.4rem; | |
| font-size: 1rem; | |
| font-family: ui-monospace, monospace; | |
| } | |
| .deploy-card .deploy-status { margin: 0; } | |
| .deploy-card .deploy-status.ready { color: var(--ok); } | |
| .deploy-card .deploy-status.notready { color: var(--warn); } | |
| .deploy-target { | |
| margin: 0.4rem 0 0.6rem; | |
| color: var(--muted); | |
| font-size: 0.8rem; | |
| font-family: ui-monospace, monospace; | |
| min-height: 1em; | |
| word-break: break-all; | |
| } | |
| .deploy-target.mono { font-family: ui-monospace, monospace; } | |
| .deploy-controls { | |
| display: flex; | |
| align-items: center; | |
| gap: 0.5rem; | |
| flex-wrap: wrap; | |
| } | |
| .deploy-controls .deploy-opt { | |
| font-size: 0.75rem; | |
| color: var(--muted); | |
| display: inline-flex; align-items: center; gap: 0.25rem; | |
| } | |
| .deploy-card .log-tail { | |
| margin-top: 0.6rem; | |
| max-height: 14rem; | |
| } | |
| [id^="cancel-github"], [id^="cancel-provision"], [id^="cancel-sync"] { | |
| background: transparent; | |
| color: var(--bad); | |
| border: 1px solid var(--bad); | |
| padding: 0.3rem 0.7rem; | |
| font-size: 0.85rem; | |
| } | |
| [id^="cancel-github"]:hover:not(:disabled), | |
| [id^="cancel-provision"]:hover:not(:disabled), | |
| [id^="cancel-sync"]:hover:not(:disabled) { | |
| background: var(--bad); | |
| color: #000; | |
| filter: none; | |
| } | |
| /* Advanced admin card -------------------------------------------------- */ | |
| .admin-card { | |
| border-left: 4px solid var(--accent-2); | |
| background: linear-gradient(180deg, | |
| rgba(47, 129, 247, 0.06) 0%, var(--card) 30%); | |
| } | |
| .admin-card > summary { | |
| cursor: pointer; | |
| list-style: none; | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: baseline; | |
| } | |
| .admin-card > summary::-webkit-details-marker { | |
| display: none; | |
| } | |
| .admin-card > summary h2 { | |
| display: inline-block; | |
| } | |
| .admin-step { | |
| background: var(--accent-2); | |
| color: #fff; | |
| } | |
| .admin-metrics-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); | |
| gap: 0.5rem; | |
| margin: 0.75rem 0; | |
| } | |
| .admin-metric { | |
| background: var(--bg); | |
| border: 1px solid var(--border); | |
| border-radius: 6px; | |
| padding: 0.5rem 0.75rem; | |
| } | |
| .admin-metric-label { | |
| font-size: 0.7rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| color: var(--muted); | |
| } | |
| .admin-metric-value { | |
| font-size: 1.2rem; | |
| font-weight: 600; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .admin-metric.warn { border-color: var(--warn); } | |
| .admin-metric.warn .admin-metric-value { color: var(--warn); } | |
| .admin-metric.bad { border-color: var(--bad); } | |
| .admin-metric.bad .admin-metric-value { color: var(--bad); } | |
| #admin-runs-table { | |
| width: 100%; | |
| border-collapse: collapse; | |
| margin: 0.5rem 0; | |
| font-size: 0.85rem; | |
| } | |
| #admin-runs-table th, #admin-runs-table td { | |
| text-align: left; | |
| padding: 0.25rem 0.5rem; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| #admin-runs-table .status-running { color: var(--accent); } | |
| #admin-runs-table .status-succeeded { color: var(--ok); } | |
| #admin-runs-table .status-failed, | |
| #admin-runs-table .status-cancelled { color: var(--bad); } | |
| #admin-runs-table .status-pending { color: var(--muted); } | |
| #admin-firehose { | |
| font-size: 0.75rem; | |
| background: var(--code-bg); | |
| } | |
| /* Collapsible log fold (.log-tail > details) --------------------------- */ | |
| .log-tail details { | |
| margin-bottom: 0.5rem; | |
| background: rgba(255, 255, 255, 0.03); | |
| border-left: 2px solid var(--muted); | |
| padding: 0.25rem 0.5rem; | |
| border-radius: 4px; | |
| } | |
| .log-tail details summary { | |
| cursor: pointer; | |
| color: var(--muted); | |
| font-size: 0.75rem; | |
| padding: 0.15rem 0; | |
| user-select: none; | |
| } | |
| .log-tail details summary:hover { | |
| color: var(--fg); | |
| } | |
| .log-tail details[open] summary::before { | |
| content: "▾ "; | |
| } | |
| .log-tail details:not([open]) summary::before { | |
| content: "▸ "; | |
| } | |
| .log-tail pre.folded { | |
| margin: 0.25rem 0 0; | |
| padding: 0; | |
| font-size: 0.75rem; | |
| opacity: 0.85; | |
| background: transparent; | |
| border: none; | |
| white-space: pre-wrap; | |
| overflow: visible; | |
| max-height: none; | |
| } | |
| /* Hardware diagnostics card -------------------------------------------- */ | |
| .hw-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); | |
| gap: 0.75rem; | |
| margin: 0.5rem 0 1rem; | |
| } | |
| .hw-panel { | |
| background: var(--bg); | |
| border: 1px solid var(--border); | |
| border-radius: 6px; | |
| padding: 0.75rem 1rem; | |
| } | |
| .hw-panel h3 { | |
| margin: 0 0 0.5rem; | |
| font-size: 1rem; | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: baseline; | |
| } | |
| .hw-panel h3::after { | |
| content: attr(data-status); | |
| font-size: 0.75rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| } | |
| .hw-panel dl { | |
| margin: 0; | |
| display: grid; | |
| grid-template-columns: max-content 1fr; | |
| gap: 0.15rem 0.5rem; | |
| font-size: 0.85rem; | |
| } | |
| .hw-panel dt { | |
| color: var(--muted); | |
| } | |
| .hw-panel dd { | |
| margin: 0; | |
| font-family: ui-monospace, "Roboto Mono", monospace; | |
| font-size: 0.85rem; | |
| } | |
| .hw-panel.hw-ok { | |
| border-color: var(--ok); | |
| } | |
| .hw-panel.hw-off { | |
| opacity: 0.6; | |
| } | |
| .hw-note { | |
| margin: 0.5rem 0 0; | |
| font-style: italic; | |
| font-size: 0.8rem; | |
| } | |
| /* MEI card -------------------------------------------------------------- */ | |
| .mei-headline { | |
| display: flex; | |
| align-items: baseline; | |
| gap: 0.75rem; | |
| margin: 0.5rem 0 1rem; | |
| } | |
| .mei-composite-label { | |
| font-size: 0.85rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.1em; | |
| color: var(--muted); | |
| } | |
| .mei-composite-value { | |
| font-size: 2rem; | |
| font-weight: 700; | |
| color: var(--accent); | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .mei-flag { | |
| font-size: 0.75rem; | |
| padding: 0.15rem 0.5rem; | |
| border-radius: 999px; | |
| background: rgba(210, 153, 34, 0.18); | |
| color: var(--warn); | |
| border: 1px solid var(--warn); | |
| } | |
| .mei-chart-wrap { | |
| max-width: 380px; | |
| margin: 0 auto 1rem; | |
| } | |
| #mei-subindex-list code { | |
| display: inline-block; | |
| min-width: 5rem; | |
| color: var(--muted); | |
| } | |
| .mei-controls { | |
| display: flex; | |
| gap: 0.5rem; | |
| align-items: center; | |
| margin: 0.75rem 0; | |
| } | |
| #mei-promote:disabled { | |
| opacity: 0.45; | |
| cursor: not-allowed; | |
| } | |
| #mei-promote:not(:disabled) { | |
| background: var(--ok); | |
| color: #000; | |
| border-color: var(--ok); | |
| } | |
| #mei-reasons li { | |
| color: var(--bad); | |
| } | |
| #mei-history-table { | |
| width: 100%; | |
| border-collapse: collapse; | |
| margin-top: 0.5rem; | |
| font-size: 0.85rem; | |
| } | |
| #mei-history-table th, | |
| #mei-history-table td { | |
| text-align: left; | |
| padding: 0.3rem 0.5rem; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| #mei-history-table .promoted-mark { | |
| color: var(--ok); | |
| font-weight: 700; | |
| } | |
| footer { | |
| max-width: 1100px; | |
| margin: 2rem auto; | |
| padding: 0 1.5rem; | |
| color: var(--muted); | |
| font-size: 0.85rem; | |
| } | |
| footer a { color: var(--accent-2); } | |