/* dark theme — dataviz tokens: surface #1a1a19, text #fff / #c3c2b7 */ * { box-sizing: border-box; margin: 0; } :root { --surface: #1a1a19; --surface-2: #232322; --border: #33332f; --text: #ffffff; --text-2: #c3c2b7; --accent: #3987e5; --good: #0ca30c; --warning: #fab219; --serious: #ec835a; --critical: #d03b3b; } body { background: var(--surface); color: var(--text); font: 14px/1.45 system-ui, -apple-system, "Segoe UI", sans-serif; } .mono { font-family: ui-monospace, "Cascadia Mono", Consolas, monospace; font-variant-numeric: tabular-nums; } .app { max-width: 1180px; margin: 0 auto; padding: 20px 16px 60px; } header { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 16px; } h1 { font-size: 20px; font-weight: 650; } .header-stats { color: var(--text-2); } .alert { display: flex; gap: 8px; align-items: baseline; background: var(--surface-2); border: 1px solid var(--border); border-left: 3px solid var(--border); border-radius: 6px; padding: 8px 12px; margin-bottom: 8px; color: var(--text-2); } .alert strong { color: var(--text); } .alert-critical { border-left-color: var(--critical); } .alert-critical > span:first-child { color: var(--critical); } .alert-serious { border-left-color: var(--serious); } .alert-serious > span:first-child { color: var(--serious); } .alert-warning { border-left-color: var(--warning); } .alert-warning > span:first-child { color: var(--warning); } .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: 12px; margin-top: 12px; } .card { background: var(--surface-2); border: 1px solid var(--border); border-radius: 8px; padding: 14px; cursor: pointer; transition: border-color 0.15s; } .card:hover { border-color: #4a4a44; } .card-selected { border-color: var(--accent); } .card-head { display: flex; justify-content: space-between; align-items: start; } .card-title { font-size: 16px; font-weight: 650; } .card-sub { color: var(--text-2); font-size: 12px; } .badge { display: inline-flex; gap: 5px; align-items: baseline; font-size: 12px; font-weight: 600; } .badge-text { color: var(--text-2); font-weight: 500; } .tiles { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin: 12px 0; } .pending-chip, .missing-chip { font-size: 11px; padding: 1px 6px; border-radius: 8px; margin-right: 6px; } .pending-chip { color: var(--warning); border: 1px solid var(--warning); } .missing-chip { color: var(--critical); border: 1px solid var(--critical); font-weight: 700; } .tile { background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 8px 10px; } .tile-num { font-size: 22px; font-weight: 650; } .tile-label { color: var(--text-2); font-size: 11px; margin-top: 2px; } .pairs { display: flex; flex-direction: column; gap: 4px; } .pair-row { display: grid; grid-template-columns: 62px 1fr auto; gap: 8px; align-items: baseline; font-size: 12px; padding: 3px 0; border-top: 1px solid var(--border); } .pair-dir { color: var(--text-2); } .pair-label { color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .progress-line { margin: 10px 0 2px; font-size: 12px; color: var(--text-2); } .progress-track { height: 4px; background: var(--surface); border-radius: 2px; margin-top: 6px; overflow: hidden; } .progress-fill { height: 100%; background: var(--accent); border-radius: 2px; transition: width 0.5s; } .panel { margin-top: 24px; background: var(--surface-2); border: 1px solid var(--border); border-radius: 8px; padding: 14px; } .panel-head { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 8px; } .panel h2 { font-size: 15px; font-weight: 650; } .tabs { display: flex; gap: 6px; } .tab { background: var(--surface); color: var(--text-2); border: 1px solid var(--border); border-radius: 6px; padding: 4px 10px; font-size: 12px; cursor: pointer; } .tab-on { color: var(--text); border-color: var(--accent); } table.events { width: 100%; border-collapse: collapse; margin-top: 10px; font-size: 12.5px; } .events th { text-align: left; color: var(--text-2); font-weight: 500; font-size: 11px; border-bottom: 1px solid var(--border); padding: 4px 8px; } .events td { padding: 5px 8px; border-bottom: 1px solid var(--border); vertical-align: top; } .events td.detail { color: var(--text-2); word-break: break-all; } .empty { color: var(--text-2); padding: 16px; text-align: center; }