:root { font-family: "Manrope", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; color: #182334; background: #f3f6fa; font-synthesis: none; text-rendering: optimizeLegibility; --navy: #0e1a2d; --ink: #182334; --muted: #7c899b; --line: #e7ecf2; --panel: #ffffff; --blue: #2e6df6; --green: #20a477; --orange: #e09235; --red: #d85c65; --purple: #8967e8; } * { box-sizing: border-box; } body { margin: 0; min-width: 320px; min-height: 100vh; background: #f3f6fa; } button, input, textarea, select { font: inherit; } button { cursor: pointer; } button:disabled { cursor: not-allowed; opacity: 0.55; } .login-page { min-height: 100vh; display: grid; place-items: center; padding: 24px; background: radial-gradient(circle at 20% 10%, #dce8ff 0, transparent 34%), linear-gradient(135deg, #f3f6fa 0%, #eef2f7 100%); } .login-panel { width: min(440px, 100%); padding: 42px; border: 1px solid rgba(255, 255, 255, 0.7); border-radius: 22px; background: rgba(255, 255, 255, 0.86); box-shadow: 0 26px 80px rgba(25, 44, 78, 0.14); backdrop-filter: blur(18px); } .brand-mark { display: grid; place-items: center; width: 46px; height: 46px; border-radius: 13px; color: #fff; background: linear-gradient(140deg, #3c7cff, #6041d8); font-size: 21px; font-weight: 800; box-shadow: 0 9px 18px rgba(61, 103, 236, 0.28); } .brand-mark.small { width: 36px; height: 36px; border-radius: 10px; font-size: 17px; box-shadow: none; } .eyebrow { color: #8a96a7; font: 500 10px / 1.4 "DM Mono", monospace; letter-spacing: 0.14em; } .login-panel h1 { margin: 19px 0 9px; font-size: 32px; letter-spacing: -0.04em; } .muted { margin: 0; color: var(--muted); font-size: 14px; line-height: 1.7; } .login-form { display: grid; gap: 16px; margin-top: 30px; } label { display: grid; gap: 7px; color: #647287; font-size: 12px; font-weight: 700; } input, textarea, select { width: 100%; border: 1px solid #dce3eb; border-radius: 9px; outline: none; color: var(--ink); background: #fff; transition: border-color 0.15s, box-shadow 0.15s; } input, select { height: 42px; padding: 0 12px; } textarea { padding: 11px 12px; resize: vertical; } input:focus, textarea:focus, select:focus { border-color: #7da2ff; box-shadow: 0 0 0 3px rgba(46, 109, 246, 0.1); } .form-error, .global-error { color: #a73b49; border: 1px solid #f1cbd0; border-radius: 8px; background: #fff4f5; } .form-error { padding: 10px 12px; font-size: 12px; } .login-footnote { display: flex; gap: 8px; align-items: center; margin-top: 24px; color: #9aa5b4; font-size: 11px; } .secure-dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: #31b887; box-shadow: 0 0 0 4px rgba(49, 184, 135, 0.12); } .app-shell { display: flex; min-height: 100vh; } .sidebar { position: fixed; inset: 0 auto 0 0; z-index: 2; display: flex; flex-direction: column; width: 240px; padding: 24px 16px 16px; color: #c2ccda; background: var(--navy); } .sidebar-brand { display: flex; align-items: center; gap: 11px; padding: 0 10px 38px; color: #fff; } .sidebar-brand strong { display: block; font-size: 15px; letter-spacing: -0.02em; } .sidebar-brand span { display: block; margin-top: 2px; color: #71819b; font: 10px "DM Mono", monospace; } .nav-caption { padding: 0 12px 10px; color: #667690; font: 500 10px "DM Mono", monospace; letter-spacing: 0.14em; text-transform: uppercase; } nav { display: grid; gap: 4px; } .nav-item { display: flex; gap: 12px; align-items: center; height: 44px; padding: 0 12px; border: 0; border-radius: 9px; color: #8e9bb0; text-align: left; background: transparent; font-size: 13px; font-weight: 600; } .nav-item:hover { color: #fff; background: rgba(255, 255, 255, 0.06); } .nav-item.active { color: #fff; background: #273b60; box-shadow: inset 3px 0 #608cff; } .nav-icon { width: 17px; color: #6885b9; font-size: 17px; text-align: center; } .nav-item.active .nav-icon { color: #94b1ff; } .sidebar-spacer { flex: 1; } .connection-hint { display: flex; gap: 11px; align-items: center; margin: 12px 4px 16px; padding: 13px 11px; border: 1px solid rgba(125, 154, 204, 0.16); border-radius: 10px; background: rgba(255, 255, 255, 0.035); } .connection-hint strong, .connection-hint small, .user-name strong, .user-name small { display: block; } .connection-hint strong { color: #d2dbeb; font-size: 11px; } .connection-hint small { margin-top: 4px; color: #70809a; font-size: 10px; } .user-menu { display: flex; gap: 9px; align-items: center; padding: 14px 7px 0; border-top: 1px solid rgba(255, 255, 255, 0.08); } .avatar, .node-avatar { display: grid; place-items: center; flex: 0 0 auto; width: 30px; height: 30px; border-radius: 9px; color: #315ac3; background: #dfe9ff; font-size: 11px; font-weight: 800; } .user-name { flex: 1; min-width: 0; } .user-name strong { overflow: hidden; color: #e0e7f3; font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .user-name small { margin-top: 3px; color: #70809a; font-size: 10px; } .user-menu button { border: 0; color: #71809a; background: transparent; font-size: 19px; } .main-area { width: calc(100% - 240px); min-width: 0; margin-left: 240px; } .topbar { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; padding: 43px 52px 32px; background: #fff; border-bottom: 1px solid var(--line); } .topbar h2 { margin: 8px 0 5px; color: var(--ink); font-size: 26px; letter-spacing: -0.04em; } .topbar p { margin: 0; color: #8a96a7; font-size: 12px; } .refresh-button { display: flex; gap: 8px; align-items: center; height: 37px; padding: 0 14px; border: 1px solid #dce3ec; border-radius: 8px; color: #506078; background: #fff; font-size: 12px; font-weight: 700; } .refresh-button:hover { border-color: #a9bfe9; color: #2e6df6; background: #f8faff; } .refresh-button span { font-size: 18px; line-height: 1; } .spin { animation: spin 1s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } .page-content { max-width: 1500px; padding: 33px 52px 24px; } .global-error { display: flex; gap: 9px; align-items: center; margin: 18px 52px 0; padding: 11px 14px; font-size: 12px; } .global-error span { display: grid; place-items: center; width: 17px; height: 17px; border-radius: 50%; color: #fff; background: #cf5b66; font-weight: 800; } .global-error button { margin-left: auto; border: 0; color: inherit; background: transparent; font-size: 18px; } .metric-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 15px; } .metric-card { position: relative; overflow: hidden; min-height: 135px; padding: 20px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); } .metric-card::after { position: absolute; right: -25px; bottom: -38px; width: 110px; height: 110px; border-radius: 50%; content: ""; opacity: 0.1; } .metric-card.blue::after { background: #2e6df6; } .metric-card.purple::after { background: #8967e8; } .metric-card.green::after { background: #20a477; } .metric-card.orange::after { background: #e09235; } .metric-card.slate::after { background: #7c899b; } .metric-label { color: #8b97a7; font-size: 12px; font-weight: 700; } .metric-value { margin-top: 16px; color: var(--ink); font-size: 29px; font-weight: 800; letter-spacing: -0.05em; } .metric-detail { margin-top: 9px; color: #9aa5b4; font-size: 11px; } .content-grid { display: grid; gap: 16px; margin-top: 16px; } .two-col { grid-template-columns: repeat(2, 1fr); } .panel { min-width: 0; padding: 22px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); } .full-panel { padding: 24px; } .panel-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; margin-bottom: 19px; } .panel-heading h3 { margin: 0; color: var(--ink); font-size: 15px; letter-spacing: -0.02em; } .panel-heading p { margin: 6px 0 0; color: #9aa5b4; font-size: 11px; } .heading-actions { display: flex; gap: 8px; align-items: center; } .heading-actions select { width: auto; height: 36px; color: #667489; font-size: 11px; } .table-count { color: #8f9aac; font-size: 11px; } .text-button { padding: 0; border: 0; color: #4b76e7; background: transparent; font-size: 11px; font-weight: 700; } .text-button:hover { color: #1e4bc5; } .compact-list { display: grid; } .compact-row { display: flex; gap: 11px; align-items: center; min-width: 0; padding: 12px 0; border-top: 1px solid #eff2f5; } .compact-row:first-child { border-top: 0; } .row-main { flex: 1; min-width: 0; } .row-main strong, .row-main span { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .row-main strong { color: #334156; font-size: 12px; } .row-main span { margin-top: 4px; color: #9aa5b4; font-size: 10px; } .event-icon { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 9px; color: #269b79; background: #e5f7f0; } .event-preview { max-width: 34%; overflow: hidden; color: #788598; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; } .status-badge { display: inline-flex; gap: 6px; align-items: center; padding: 5px 8px; border-radius: 999px; font-size: 10px; font-weight: 700; white-space: nowrap; } .status-badge i { width: 5px; height: 5px; border-radius: 50%; background: currentColor; } .status-badge.positive { color: #168a68; background: #e7f8f2; } .status-badge.warning { color: #b26e1c; background: #fff4e3; } .status-badge.negative { color: #c24d5d; background: #fff0f1; } .status-badge.neutral { color: #6f7d90; background: #edf1f5; } .table-wrap { overflow-x: auto; } .table-wrap table { width: 100%; border-collapse: collapse; min-width: 760px; } .table-wrap th { padding: 0 11px 12px; color: #99a4b2; font: 500 10px "DM Mono", monospace; text-align: left; text-transform: uppercase; white-space: nowrap; } .table-wrap td { padding: 14px 11px; border-top: 1px solid #eef1f4; color: #617086; font-size: 11px; vertical-align: middle; } .table-wrap tr:hover td { background: #fafcff; } .cell-primary { display: flex; gap: 9px; align-items: center; min-width: 150px; } .cell-primary strong, .cell-primary small, .cell-note { display: block; } .cell-primary strong { color: #344156; font-size: 11px; } .cell-primary small { margin-top: 4px; color: #a1aab7; font-size: 10px; } .cell-note { margin-top: 5px; color: #a1aab7; font-size: 10px; } .inline-positive { color: #218e70; font-weight: 700; } .inline-muted { color: #929ead; } .capability-count { color: #4b76e7; font-weight: 800; } .task-symbol { display: grid; place-items: center; width: 29px; height: 29px; border-radius: 8px; color: #7454d6; background: #eeeaff; font-size: 16px; } .danger-button { padding: 5px 9px; border: 1px solid #f2c8ce; border-radius: 6px; color: #c24d5d; background: #fff8f8; font-size: 10px; font-weight: 700; } .danger-button:hover { color: #fff; background: #d85c65; } .error-code { color: #be5360; font-family: "DM Mono", monospace; font-size: 10px; } .cancel-note { color: #b87723; } .seq-pill { padding: 4px 7px; border-radius: 5px; color: #5574b6; background: #edf2ff; font: 10px "DM Mono", monospace; } .event-content { display: block; max-width: 270px; overflow: hidden; color: #425168; text-overflow: ellipsis; white-space: nowrap; } .search-input { width: 240px; height: 35px; font-size: 11px; } .task-id { min-width: 175px; } .primary-button, .secondary-button { height: 37px; padding: 0 14px; border-radius: 8px; font-size: 11px; font-weight: 800; } .primary-button { border: 1px solid #2e6df6; color: #fff; background: #2e6df6; box-shadow: 0 5px 12px rgba(46, 109, 246, 0.18); } .primary-button:hover { background: #205bdc; } .secondary-button { border: 1px solid #dce3eb; color: #647287; background: #fff; } .full { width: 100%; height: 44px; margin-top: 4px; font-size: 12px; } .empty-state { display: grid; justify-items: center; padding: 47px 15px; color: #a0aab8; text-align: center; } .empty-icon { color: #c2ccd9; font-size: 30px; } .empty-state p { margin: 12px 0 0; font-size: 12px; } .timeline { display: grid; } .timeline-row { display: flex; gap: 13px; align-items: center; min-height: 64px; border-bottom: 1px solid #eef1f4; } .timeline-dot { width: 8px; height: 8px; border: 2px solid #7294ef; border-radius: 50%; background: #fff; } .timeline-main { flex: 1; } .timeline-main strong, .timeline-main span { display: block; } .timeline-main strong { color: #44526a; font-size: 11px; } .timeline-main span { margin-top: 5px; color: #a0a9b6; font-size: 10px; } .timeline-meta { display: flex; gap: 13px; align-items: center; color: #9aa5b4; font-size: 10px; } .modal-backdrop { position: fixed; inset: 0; z-index: 5; display: grid; place-items: center; padding: 20px; background: rgba(14, 26, 45, 0.48); } .modal { width: min(540px, 100%); padding: 25px; border-radius: 14px; background: #fff; box-shadow: 0 25px 70px rgba(6, 18, 40, 0.28); } .modal-heading { display: flex; justify-content: space-between; gap: 16px; margin-bottom: 21px; } .modal-heading h3 { margin: 8px 0 5px; font-size: 19px; } .modal-heading p { margin: 0; color: #96a0af; font-size: 11px; } .close-button { align-self: flex-start; border: 0; color: #99a3b0; background: transparent; font-size: 24px; } .task-form { display: grid; gap: 14px; } .modal-actions { display: flex; justify-content: flex-end; gap: 8px; padding-top: 5px; } .footer { display: flex; justify-content: space-between; gap: 20px; padding: 0 52px 30px; color: #a7b0bc; font: 10px "DM Mono", monospace; } @media (max-width: 1100px) { .metric-grid { grid-template-columns: repeat(2, 1fr); } .two-col { grid-template-columns: 1fr; } .topbar, .page-content { padding-left: 30px; padding-right: 30px; } .global-error { margin-left: 30px; margin-right: 30px; } .footer { padding-left: 30px; padding-right: 30px; } } @media (max-width: 720px) { .sidebar { position: static; width: 100%; min-height: auto; padding: 15px; } .sidebar-brand { padding-bottom: 18px; } .sidebar-spacer, .connection-hint { display: none; } nav { grid-template-columns: repeat(5, 1fr); } .nav-item { justify-content: center; height: 36px; padding: 0 4px; font-size: 0; } .nav-icon { font-size: 17px; } .user-menu { margin-top: 13px; } .app-shell { display: block; } .main-area { width: 100%; margin-left: 0; } .topbar { padding: 24px 18px; } .topbar h2 { font-size: 22px; } .page-content { padding: 20px 18px; } .global-error { margin: 15px 18px 0; } .metric-grid { gap: 9px; } .metric-card { min-height: 116px; padding: 14px; } .metric-value { margin-top: 12px; font-size: 23px; } .panel, .full-panel { padding: 16px; } .panel-heading { display: block; } .heading-actions { margin-top: 13px; } .heading-actions select { flex: 1; } .search-input { width: 100%; margin-top: 14px; } .footer { display: block; padding: 0 18px 20px; line-height: 1.8; } .footer span { display: block; } }