:root { --bg: #f4f6f9; --panel: #ffffff; --panel-soft: #f9fafc; --line: #e6ebf2; --text: #172033; --text-soft: #5f6b85; --brand: #1958d6; --brand-soft: #edf3ff; --success: #0f8c62; --danger: #c84242; --radius-lg: 20px; --radius-md: 14px; --radius-sm: 10px; --shadow: 0 12px 40px rgba(18, 30, 67, 0.08); } * { box-sizing: border-box; } html, body { margin: 0; min-height: 100%; font-family: "Noto Sans SC", sans-serif; background: var(--bg); color: var(--text); } button, input, select, textarea { font: inherit; } button { cursor: pointer; } a { color: var(--brand); text-decoration: none; } .system-shell { min-height: 100vh; display: grid; grid-template-columns: 220px minmax(0, 1fr); } .main-nav { display: flex; flex-direction: column; gap: 10px; padding: 24px 18px; background: linear-gradient(180deg, #14213f 0%, #1e305d 100%); color: #fff; } .brand { font-size: 22px; font-weight: 800; margin-bottom: 14px; } .nav-btn { border: 1px solid transparent; background: rgba(255, 255, 255, 0.08); color: #eef3ff; border-radius: 14px; padding: 12px 14px; text-align: left; } .nav-btn.active { background: #fff; color: var(--brand); } .nav-btn.danger { margin-top: auto; color: #ffd2d2; border-color: rgba(255,255,255,0.1); } .main-panel { padding: 22px; } .content-shell { display: grid; gap: 18px; } .content-shell.two-col, .content-shell.operator-layout { grid-template-columns: 320px minmax(0, 1fr); } .content-shell.single-col { grid-template-columns: 1fr; } .left-pane, .right-pane, .editor-card, .stats-card { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius-lg); box-shadow: var(--shadow); } .left-pane, .right-pane { padding: 18px; } .right-pane { display: grid; gap: 18px; align-content: start; } .editor-card { padding: 18px; } .pane-head { display: flex; justify-content: space-between; align-items: center; gap: 16px; margin-bottom: 16px; } .pane-head h2, .timeline-head h3 { margin: 0; font-size: 20px; } .pane-actions, .editor-actions, .template-toolbar, .query-bar, .inline-select, .sub-tabs { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; } .muted-line { margin: 6px 0 0; color: var(--text-soft); font-size: 13px; } .scroll-list { display: grid; gap: 12px; max-height: calc(100vh - 150px); overflow: auto; padding-right: 4px; } .list-card { width: 100%; border: 1px solid var(--line); background: var(--panel-soft); border-radius: var(--radius-md); padding: 14px; display: grid; gap: 6px; text-align: left; color: var(--text); } .list-card.active { border-color: var(--brand); background: var(--brand-soft); } .list-card span { color: var(--text-soft); font-size: 13px; } .primary-btn, .ghost-btn, .sub-tab { border-radius: 12px; padding: 10px 14px; border: 1px solid transparent; } .primary-btn { background: var(--brand); color: #fff; } .ghost-btn, .sub-tab { background: var(--panel-soft); color: var(--text); border-color: var(--line); } .danger-btn { color: var(--danger); } .sub-tab.active { background: var(--brand-soft); color: var(--brand); border-color: #cadeff; } .form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; } .form-grid.compact { grid-template-columns: repeat(2, minmax(0, 1fr)); } .field { display: flex; flex-direction: column; gap: 8px; } .field.full { grid-column: 1 / -1; } .field label { font-size: 13px; font-weight: 700; color: var(--text-soft); } .field input, .field select, .field textarea { width: 100%; border: 1px solid #d6deea; border-radius: 12px; background: #fff; color: var(--text); padding: 11px 12px; min-height: 44px; } .field textarea { min-height: 110px; resize: vertical; } .field input:disabled, .field select:disabled, .field textarea:disabled { background: #f3f5f8; color: #79859e; } .switch { position: relative; width: 54px; height: 32px; } .switch input { opacity: 0; width: 0; height: 0; } .switch span { position: absolute; inset: 0; background: #cdd6e4; border-radius: 999px; transition: 0.2s ease; } .switch span::before { content: ""; position: absolute; width: 22px; height: 22px; left: 5px; top: 5px; border-radius: 50%; background: #fff; transition: 0.2s ease; box-shadow: 0 4px 12px rgba(23, 32, 51, 0.18); } .switch input:checked + span { background: var(--brand); } .switch input:checked + span::before { transform: translateX(22px); } .template-toolbar { margin: 16px 0; } .inline-select select { min-width: 180px; } .node-strip { display: flex; gap: 10px; flex-wrap: wrap; padding: 6px 0 2px; } .node-pill { display: grid; gap: 4px; min-width: 160px; padding: 14px; border: 1px solid var(--line); background: var(--panel-soft); border-radius: 16px; text-align: left; } .node-pill.active { border-color: var(--brand); background: var(--brand-soft); } .pill-order { color: var(--brand); font-size: 12px; font-weight: 800; } .pill-name { font-weight: 700; } .pill-tag { color: var(--text-soft); font-size: 12px; } .readonly-tip { margin-bottom: 16px; padding: 12px 14px; border-radius: 12px; background: #fff6e9; color: #8d5a16; border: 1px solid #f2ddbb; } .field-list { display: grid; gap: 12px; margin-top: 16px; } .field-card { border: 1px solid var(--line); border-radius: 16px; background: var(--panel-soft); padding: 14px; } .progress-strip { display: flex; gap: 12px; overflow: auto; padding-bottom: 4px; } .progress-step { min-width: 132px; border: 1px solid var(--line); background: var(--panel-soft); border-radius: 16px; padding: 12px; text-align: left; display: grid; gap: 6px; } .progress-step.active { border-color: var(--brand); background: var(--brand-soft); } .progress-step.done .step-index { background: var(--success); } .step-index { width: 26px; height: 26px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: var(--brand); color: #fff; font-size: 12px; font-weight: 800; } .step-name { font-size: 13px; font-weight: 700; } .chips { display: flex; flex-wrap: wrap; gap: 10px; } .chip-check { display: inline-flex; align-items: center; gap: 8px; padding: 8px 10px; border-radius: 999px; background: var(--panel-soft); border: 1px solid var(--line); } .consumer-tabs { display: flex; gap: 10px; margin-bottom: 16px; } .consumer-shell { background: linear-gradient(180deg, #fefefe 0%, #f5f7fb 100%); border: 1px solid var(--line); border-radius: 22px; padding: 22px; } .consumer-topbar { margin-bottom: 18px; } .consumer-topbar h2 { margin: 0; } .consumer-topbar p { margin: 8px 0 0; color: var(--text-soft); } .timeline-v2 { display: grid; gap: 0; } .timeline-row { display: grid; grid-template-columns: 48px minmax(0, 1fr); gap: 14px; } .timeline-rail { display: flex; flex-direction: column; align-items: center; position: relative; } .timeline-dot { width: 16px; height: 16px; border-radius: 50%; background: #c7d2e7; border: 4px solid #eef3ff; z-index: 1; margin-top: 18px; } .timeline-dot.active { background: var(--brand); } .timeline-line { width: 2px; flex: 1; background: linear-gradient(180deg, #bdd0ff 0%, #e0e8f6 100%); margin-top: 8px; } .timeline-body { margin-bottom: 18px; padding: 18px; border-radius: 18px; border: 1px solid var(--line); background: #fff; } .timeline-head span { display: block; margin-top: 8px; color: var(--text-soft); font-size: 13px; } .timeline-grid, .materials-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin-top: 16px; } .kv-card { padding: 14px; border-radius: 14px; background: var(--panel-soft); border: 1px solid var(--line); display: grid; gap: 6px; } .kv-card span { color: var(--text-soft); font-size: 12px; } .kv-card strong { font-size: 14px; word-break: break-word; } .material-card { border: 1px solid var(--line); background: #fff; border-radius: 18px; padding: 18px; } .stats-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; } .stats-card { padding: 26px; display: grid; gap: 14px; } .stats-card span { color: var(--text-soft); } .stats-card strong { font-size: 40px; line-height: 1; } .empty-panel { min-height: 180px; border: 1px dashed #cfd7e4; border-radius: 16px; display: flex; align-items: center; justify-content: center; color: var(--text-soft); background: var(--panel-soft); } @media (max-width: 1080px) { .system-shell, .content-shell.two-col, .content-shell.operator-layout { grid-template-columns: 1fr; } .main-nav { flex-direction: row; flex-wrap: wrap; align-items: center; } .nav-btn.danger { margin-top: 0; margin-left: auto; } } @media (max-width: 760px) { .main-panel { padding: 14px; } .form-grid, .form-grid.compact, .timeline-grid, .materials-grid, .stats-grid { grid-template-columns: 1fr; } .timeline-row { grid-template-columns: 28px minmax(0, 1fr); gap: 10px; } .node-pill, .progress-step { min-width: 120px; } }