:root { color: var(--text-primary); background: var(--bg-page); font-family: var(--font-system); } body { margin: 0; min-width: 320px; background: var(--bg-page); } button, input, select { font: inherit; } #ops-center-root { min-height: 100vh; } .ops-shell { display: grid; min-height: 100vh; grid-template-columns: 236px minmax(0, 1fr); } .ops-sidebar { display: flex; flex-direction: column; gap: var(--space-5); border-right: 1px solid #d9e2ef; background: #ffffff; padding: var(--space-5) var(--space-3); } .ops-brand { display: flex; align-items: center; gap: var(--space-3); padding: 0 var(--space-2); } .ops-brand > span { display: inline-grid; width: 36px; height: 36px; place-items: center; border-radius: 8px; background: #0f766e; color: #fff; font-size: 13px; font-weight: 800; } .ops-brand strong { display: block; font-size: 16px; line-height: 1.25; } .ops-brand small { color: var(--text-tertiary); font-size: 11px; } .ops-nav { display: grid; gap: var(--space-2); } .ops-nav button { display: flex; width: 100%; height: 38px; align-items: center; gap: var(--space-2); border: 0; border-radius: 8px; background: transparent; color: var(--text-secondary); cursor: pointer; padding: 0 var(--space-3); text-align: left; } .ops-nav button:hover, .ops-nav button.is-active { background: #ecfdf5; color: #0f766e; font-weight: 700; } .ops-nav button span { display: inline-grid; width: 22px; height: 22px; place-items: center; border-radius: 6px; background: #e2e8f0; color: #334155; font-size: 12px; font-weight: 800; } .ops-nav button.is-active span { background: #0f766e; color: #fff; } .ops-main { min-width: 0; background: #f6f8fb; } .ops-page { display: grid; gap: var(--space-5); padding: var(--space-6); } .ops-header { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-4); } .ops-header h1 { margin: 0; font-size: 24px; letter-spacing: 0; line-height: 1.25; } .ops-header p, .ops-section__head p { margin: var(--space-1) 0 0; color: var(--text-tertiary); } .ops-status { display: inline-flex; height: 28px; align-items: center; border: 1px solid var(--success-border); border-radius: 999px; background: var(--success-surface); color: var(--success); font-size: 12px; font-weight: 700; padding: 0 var(--space-3); } .ops-status.is-loading { border-color: var(--info-border); background: var(--info-surface); color: var(--info); } .ops-controls, .ops-section, .ops-alert { border: 1px solid var(--border); border-radius: 8px; background: var(--bg-card); box-shadow: var(--shadow-soft); } .ops-controls { display: grid; grid-template-columns: repeat(2, minmax(160px, 1fr)) auto; gap: var(--space-3); padding: var(--space-4); } .ops-controls label { display: grid; gap: var(--space-1); color: var(--text-secondary); font-size: 12px; font-weight: 700; } .ops-controls input, .ops-controls select { height: 34px; border: 1px solid var(--border); border-radius: 8px; background: #fff; color: var(--text-primary); padding: 0 var(--space-3); } .ops-primary-action, .ops-section__actions button, .ops-inline-action, .ops-modal__foot button:last-child { align-self: end; height: 34px; border: 0; border-radius: 8px; background: #0f766e; color: #fff; cursor: pointer; font-weight: 700; padding: 0 var(--space-4); } .ops-primary-action:disabled, .ops-section__actions button:disabled, .ops-inline-action:disabled, .ops-modal__foot button:disabled { cursor: wait; opacity: 0.68; } .ops-inline-action { height: 30px; padding: 0 var(--space-3); } .ops-alert { border-color: var(--warning-border); background: var(--warning-surface); color: var(--warning); font-weight: 700; padding: var(--space-3) var(--space-4); } .ops-overview { display: grid; grid-template-columns: repeat(4, minmax(120px, 1fr)); gap: var(--space-3); } .ops-kpi, .ops-summary-card { display: grid; gap: var(--space-1); border: 1px solid var(--border); border-radius: 8px; background: #fff; padding: var(--space-4); } .ops-kpi span, .ops-summary-card span { color: var(--text-tertiary); font-size: 12px; font-weight: 700; } .ops-kpi strong, .ops-summary-card strong { font-size: 24px; line-height: 1.2; } .ops-section { display: grid; gap: var(--space-4); padding: var(--space-5); } .ops-section__head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-4); } .ops-section__head h2 { margin: 0; font-size: 18px; letter-spacing: 0; } .ops-table-wrap { overflow-x: auto; border: 1px solid var(--border); border-radius: 8px; } .ops-table { width: 100%; min-width: 720px; border-collapse: collapse; } .ops-table th, .ops-table td { border-bottom: 1px solid var(--row-border); padding: 12px 14px; text-align: left; vertical-align: middle; } .ops-table th { background: #f8fafc; color: var(--text-secondary); font-size: 12px; font-weight: 800; } .ops-table td { color: var(--text-primary); font-size: 13px; } .ops-table tr:last-child td { border-bottom: 0; } .ops-empty-cell { height: 140px; color: var(--text-tertiary); text-align: center !important; } .ops-summary-grid { display: grid; grid-template-columns: repeat(3, minmax(180px, 1fr)); gap: var(--space-4); } .ops-summary-card small { color: var(--text-tertiary); } .ops-summary-table { display: grid; gap: var(--space-3); } .ops-summary-table__head h3 { margin: 0; font-size: 15px; line-height: 1.2; } .ops-modal-layer { position: fixed; inset: 0; z-index: 30; display: grid; place-items: center; background: rgba(15, 23, 42, 0.42); padding: var(--space-5); } .ops-modal { box-sizing: border-box; width: min(1440px, calc(100vw - 48px)); max-height: calc(100vh - 48px); overflow: auto; border: 1px solid var(--border); border-radius: 8px; background: #fff; box-shadow: 0 24px 60px rgba(15, 23, 42, 0.24); } .ops-config-modal { scrollbar-gutter: stable; } .ops-modal form, .ops-config-form { display: grid; gap: var(--space-4); padding: var(--space-5); } .ops-modal__head, .ops-modal__foot { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); } .ops-config-head { position: sticky; z-index: 1; top: 0; margin: calc(var(--space-5) * -1) calc(var(--space-5) * -1) 0; padding: var(--space-5); border-bottom: 1px solid var(--border); background: rgba(255, 255, 255, 0.96); backdrop-filter: blur(12px); } .ops-modal__head h2 { margin: 0; font-size: 18px; line-height: 1.3; } .ops-config-title { display: grid; min-width: 0; gap: var(--space-1); } .ops-config-title span { overflow: hidden; color: var(--text-tertiary); font-size: 12px; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; } .ops-modal__head button, .ops-modal__foot button:first-child { height: 34px; border: 1px solid var(--border); border-radius: 8px; background: #fff; color: var(--text-secondary); cursor: pointer; font-weight: 700; padding: 0 var(--space-3); } .ops-config-metrics { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: var(--space-2); } .ops-config-metric { display: grid; min-width: 0; gap: var(--space-1); border: 1px solid var(--border); border-radius: 8px; background: #f8fafc; padding: 10px var(--space-3); } .ops-config-metric span { overflow: hidden; color: var(--text-tertiary); font-size: 12px; font-weight: 800; text-overflow: ellipsis; white-space: nowrap; } .ops-config-metric strong { overflow: hidden; color: var(--text-primary); font-size: 16px; line-height: 1.25; text-overflow: ellipsis; white-space: nowrap; } .ops-config-metric.is-success { border-color: var(--success-border); background: var(--success-surface); } .ops-config-metric.is-success strong { color: var(--success); } .ops-config-metric.is-muted strong { color: var(--text-secondary); } .ops-config-layout { display: grid; grid-template-columns: minmax(300px, 360px) minmax(0, 1fr); align-items: start; gap: var(--space-3); } .ops-config-params, .ops-stage-designer { display: grid; min-width: 0; gap: var(--space-4); } .ops-config-params { position: sticky; top: 88px; } .ops-config-section, .ops-stage-designer { border: 1px solid var(--border); border-radius: 8px; background: #fff; } .ops-config-section { display: grid; gap: var(--space-2); padding: var(--space-3); } .ops-config-section > header, .ops-stage-designer__head { display: flex; min-width: 0; align-items: center; gap: var(--space-3); } .ops-config-section > header { justify-content: flex-start; } .ops-stage-designer__head { justify-content: space-between; } .ops-config-section > header span { display: inline-grid; width: 26px; height: 24px; flex: 0 0 auto; place-items: center; border-radius: 6px; background: var(--neutral-surface); color: var(--text-secondary); font-size: 11px; font-weight: 900; } .ops-config-section h3, .ops-stage-designer__head h3 { margin: 0; color: var(--text-primary); font-size: 15px; line-height: 1.3; } .ops-stage-designer__head { padding: var(--space-3) var(--space-3) 0; } .ops-stage-designer__head > div { display: flex; min-width: 0; align-items: baseline; gap: var(--space-3); } .ops-stage-designer__head span { color: var(--text-tertiary); font-size: 12px; font-weight: 800; } .ops-stage-tabs { display: flex; min-width: 0; gap: var(--space-1); padding: 0 var(--space-3); border-bottom: 1px solid var(--border); } .ops-stage-tab { display: inline-flex; min-width: 0; height: 34px; align-items: center; border: 0; border-bottom: 2px solid transparent; border-radius: 0; background: transparent; color: var(--text-secondary); cursor: pointer; padding: 0 var(--space-4); text-align: center; transition: background var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard); } .ops-stage-tab:hover { background: var(--primary-surface); } .ops-stage-tab.is-active { border-bottom-color: var(--primary); background: transparent; color: var(--text-primary); } .ops-stage-tab.is-active.is-ok { border-bottom-color: var(--success); } .ops-stage-tab.is-active.is-warn { border-bottom-color: var(--warning); } .ops-stage-tab span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .ops-stage-tab span { font-size: 13px; font-weight: 900; line-height: 1.25; } .ops-form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-3); } .ops-form-grid--single { grid-template-columns: minmax(0, 1fr); } .ops-form-grid label { display: grid; gap: var(--space-1); color: var(--text-secondary); font-size: 12px; font-weight: 700; } .ops-form-grid input, .ops-form-grid select { height: 34px; min-width: 0; border: 1px solid var(--border); border-radius: 8px; background: #fff; color: var(--text-primary); padding: 0 var(--space-3); } .ops-form-grid input:disabled { background: #f8fafc; color: var(--text-tertiary); } .ops-stage-stack { display: grid; gap: var(--space-3); padding: var(--space-3); } .ops-stage-block { display: grid; gap: var(--space-2); padding: 0; background: transparent; } .ops-stage-block__head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); } .ops-stage-block__head > div { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--space-3); } .ops-stage-block__head h3 { margin: 0; font-size: 16px; } .ops-stage-block__head span { color: var(--text-secondary); font-weight: 800; } .ops-stage-block__head span.is-ok { color: var(--success); } .ops-stage-block__head span.is-warn { color: var(--warning); } .ops-stage-block__head button, .ops-tier-row button { height: 30px; border: 1px solid var(--border); border-radius: 8px; background: #fff; color: var(--text-secondary); cursor: pointer; font-weight: 700; padding: 0 var(--space-3); } .ops-tier-table { display: grid; min-width: 0; overflow-x: auto; border: 1px solid #dbe4f0; border-radius: 8px; background: #fff; } .ops-tier-head, .ops-tier-row { display: grid; box-sizing: border-box; min-width: 520px; grid-template-columns: minmax(104px, 1fr) minmax(112px, 1fr) minmax(64px, auto) minmax(58px, auto) minmax(56px, auto); align-items: center; gap: var(--space-2); } .ops-tier-head { min-height: 32px; border-bottom: 1px solid var(--row-border); background: #f8fafc; color: var(--text-tertiary); font-size: 12px; font-weight: 900; padding: 0 var(--space-3); } .ops-tier-row { border-bottom: 1px solid var(--row-border); padding: var(--space-2) var(--space-3); } .ops-tier-row:last-child { border-bottom: 0; } .ops-tier-row label { display: grid; gap: var(--space-1); color: var(--text-secondary); font-size: 12px; font-weight: 700; } .ops-tier-row input, .ops-tier-row select { height: 30px; min-width: 0; border: 1px solid var(--border); border-radius: 8px; background: #fff; color: var(--text-primary); padding: 0 var(--space-3); } .ops-tier-row input[readonly] { background: #f8fafc; color: var(--text-secondary); } .ops-tier-field > span { display: none; } .ops-check-field { display: inline-flex !important; grid-template-columns: none !important; align-items: center; gap: var(--space-2) !important; min-height: 30px; white-space: nowrap; } .ops-check-field input { width: 18px; height: 18px; padding: 0; } @media (max-width: 960px) { .ops-shell { grid-template-columns: 1fr; } .ops-sidebar { min-height: auto; } .ops-nav, .ops-overview, .ops-controls, .ops-config-metrics, .ops-stage-tabs, .ops-summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .ops-config-layout { grid-template-columns: minmax(0, 1fr); } .ops-config-params { position: static; } } @media (max-width: 640px) { .ops-modal-layer { padding: var(--space-2); } .ops-modal { width: auto; max-width: 100%; max-height: calc(100vh - var(--space-4)); justify-self: stretch; } .ops-page { padding: var(--space-4); } .ops-header, .ops-section__head { display: grid; } .ops-nav, .ops-overview, .ops-controls, .ops-config-metrics, .ops-form-grid, .ops-stage-tabs, .ops-tier-row, .ops-summary-grid { grid-template-columns: 1fr; } .ops-config-head { margin: calc(var(--space-4) * -1) calc(var(--space-4) * -1) 0; padding: var(--space-4); } .ops-modal form, .ops-config-form { padding: var(--space-4); } .ops-stage-block__head, .ops-stage-block__head > div { align-items: flex-start; flex-direction: column; } }