@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&family=Space+Grotesk:wght@500;700&display=swap"); :root { --bg: #eef2f4; --surface: #f7fafc; --ink: #101a25; --muted: #5c6b79; --accent: #0b7a68; --line: #d5dce3; --critical: #bf2d3f; } * { box-sizing: border-box; } html, body, #root { margin: 0; min-height: 100%; background: radial-gradient(circle at 0% 0%, #ffffff 0%, transparent 50%), radial-gradient(circle at 100% 20%, #e7f5f1 0%, transparent 45%), var(--bg); color: var(--ink); font-family: "IBM Plex Sans", system-ui, sans-serif; } .app-shell { display: grid; grid-template-columns: 250px 1fr; min-height: 100vh; } .sidebar { border-right: 1px solid var(--line); padding: 18px 14px; background: linear-gradient(180deg, #f8fbfd, #eef2f5); } .brand { font-family: "Space Grotesk", sans-serif; font-size: 1.2rem; font-weight: 700; letter-spacing: 0.02em; margin-bottom: 14px; } .sidebar nav { display: flex; flex-direction: column; gap: 6px; } .sidebar button { text-align: left; border: none; background: transparent; padding: 8px 10px; color: var(--muted); border-left: 2px solid transparent; cursor: pointer; } .sidebar button.active { color: var(--ink); border-left-color: var(--accent); background: #e8f2ec; } .workspace { padding: 24px; } .page h1 { margin: 0 0 8px; font-family: "Space Grotesk", sans-serif; font-size: clamp(1.4rem, 1.8vw, 2rem); } .muted { color: var(--muted); } .hero-line { height: 6px; max-width: 360px; margin: 14px 0; background: linear-gradient(90deg, var(--accent), #8ec7a8); } .actions { display: flex; gap: 10px; margin-bottom: 14px; } .page { animation: reveal 320ms ease-out; } button { border: 1px solid var(--line); background: var(--surface); color: var(--ink); padding: 8px 12px; font-weight: 600; cursor: pointer; border-radius: 8px; transition: background 120ms ease, transform 120ms ease; } button:hover { background: #edf3f8; transform: translateY(-1px); } .grid { display: grid; grid-template-columns: repeat(2, minmax(260px, 1fr)); gap: 12px; } .panel { background: var(--surface); border: 1px solid var(--line); padding: 12px; border-radius: 14px; box-shadow: 0 10px 24px -20px rgba(16, 26, 37, 0.45); } .panel h3 { margin: 0 0 8px; font-size: 0.95rem; text-transform: uppercase; letter-spacing: 0.04em; color: #2b3f36; } pre { margin: 0; overflow: auto; font-size: 0.78rem; } table { width: 100%; border-collapse: collapse; } th, td { padding: 4px 6px; border-bottom: 1px solid var(--line); text-align: left; font-size: 0.82rem; } .list { margin: 0; padding-left: 16px; } .kpi { font-family: "Space Grotesk", sans-serif; font-size: 1.6rem; margin: 0; } .grid-mini { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-bottom: 10px; } .grid-mini p { margin: 2px 0 0; font-weight: 700; } .workbench-page { max-width: 1480px; } .workbench-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 14px; } .workbench-header p { margin: 0; } .range-chip, .status-chip, .panel-heading span { border: 1px solid var(--line); background: #edf6f3; color: #24564d; border-radius: 999px; padding: 5px 9px; font-size: 0.78rem; font-weight: 700; white-space: nowrap; } .control-strip { display: grid; grid-template-columns: minmax(180px, 1fr) 140px minmax(240px, 1.2fr) auto; gap: 10px; align-items: end; margin-bottom: 12px; } .field { display: flex; flex-direction: column; gap: 5px; min-width: 0; } .field span { color: var(--muted); font-size: 0.76rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; } select, input { min-height: 38px; width: 100%; border: 1px solid var(--line); border-radius: 8px; background: #fff; color: var(--ink); padding: 8px 10px; font: inherit; } select:focus, input:focus, button:focus { outline: 2px solid rgba(11, 122, 104, 0.24); outline-offset: 1px; } button:disabled { cursor: not-allowed; opacity: 0.55; transform: none; } button.secondary { color: #24564d; background: #eef7f4; } .workbench-grid { display: grid; grid-template-columns: minmax(300px, 1.1fr) minmax(300px, 0.9fr); gap: 12px; align-items: start; } .panel-wide { grid-column: 1 / -1; } .panel-tall { min-height: 310px; } .panel-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 10px; } .panel-heading h3 { margin-bottom: 0; } .kpi-grid { display: grid; grid-template-columns: repeat(6, minmax(110px, 1fr)); gap: 8px; } .kpi-grid div, .selected-action div { min-height: 68px; border: 1px solid var(--line); border-radius: 8px; background: #fff; padding: 10px; } .kpi-grid span, .selected-action span { display: block; color: var(--muted); font-size: 0.76rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; } .kpi-grid strong, .selected-action strong { display: block; margin-top: 6px; overflow-wrap: anywhere; } .candidate-list, .history-list, .event-log { display: flex; flex-direction: column; gap: 7px; max-height: 264px; overflow: auto; } .candidate-row { display: grid; grid-template-columns: minmax(130px, 1fr) minmax(90px, 0.8fr) 64px; align-items: center; gap: 8px; width: 100%; min-height: 52px; text-align: left; background: #fff; } .candidate-row span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .candidate-row strong { display: block; color: #24564d; } .candidate-row.selected { border-color: var(--accent); background: #edf8f5; box-shadow: inset 3px 0 0 var(--accent); } .selected-action { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-bottom: 10px; } .action-console .field { margin-bottom: 8px; } .button-row { display: flex; gap: 8px; flex-wrap: wrap; } .reward-panel { overflow: hidden; } .reward-bars { display: flex; flex-direction: column; gap: 7px; max-height: 264px; overflow: auto; } .reward-row { display: grid; grid-template-columns: minmax(150px, 0.8fr) minmax(120px, 1fr) 56px; align-items: center; gap: 8px; font-size: 0.78rem; } .reward-row span { color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .reward-row strong { text-align: right; font-family: "Space Grotesk", sans-serif; } .reward-track { height: 7px; border-radius: 999px; background: #dfe7ed; overflow: hidden; } .reward-fill { height: 100%; border-radius: 999px; background: linear-gradient(90deg, var(--accent), #4f9f8d); transition: width 260ms ease; } .history-item, .event-log div { border: 1px solid var(--line); border-radius: 8px; background: #fff; padding: 9px 10px; font-size: 0.82rem; } .history-item strong { display: block; margin-bottom: 4px; } .history-item span { color: var(--muted); } .event-log { max-height: 170px; } .error-banner { margin-bottom: 12px; border: 1px solid rgba(191, 45, 63, 0.35); border-radius: 8px; background: #fff1f3; color: var(--critical); padding: 10px 12px; font-weight: 700; } @keyframes reveal { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } } @media (max-width: 900px) { .app-shell { grid-template-columns: 1fr; } .sidebar { border-right: none; border-bottom: 1px solid var(--line); } .grid { grid-template-columns: 1fr; } .workbench-header, .button-row { align-items: stretch; flex-direction: column; } .control-strip, .workbench-grid, .kpi-grid, .selected-action { grid-template-columns: 1fr; } .range-chip { align-self: flex-start; } }