/* ============================================================ AUGUR — design system A surveillance-instrument console for predictive anomaly detection. The signal trace is the hero; everything else stays quiet. Color encodes meaning: teal = calm/normal, coral = alarm/anomaly, amber = the threshold tripwire. ============================================================ */ :root { --void: #0A0E13; /* cold monitor black */ --panel: #121922; /* raised surface */ --panel-2: #0E141B; /* recessed surface */ --line: #1F2A35; /* hairline grid / dividers */ --line-soft: #18222C; --calm: #56C7BE; /* normal signal — all clear */ --calm-dim: #2E6B66; --alarm: #FF6A5A; /* anomaly — surprise crosses the line */ --amber: #E6A93C; /* sodium-lamp threshold tripwire */ --text: #C8D4DF; --dim: #66768A; --dim-2: #44515F; --font-display: "Space Grotesk", system-ui, sans-serif; --font-mono: "JetBrains Mono", ui-monospace, monospace; } * { box-sizing: border-box; margin: 0; padding: 0; } html, body, #root { height: 100%; } body { background: var(--void); color: var(--text); font-family: var(--font-display); -webkit-font-smoothing: antialiased; /* faint cold vignette so the console feels lit from the center */ background-image: radial-gradient(120% 90% at 50% -10%, #0F1722 0%, var(--void) 60%); } /* ---- shell ---------------------------------------------------- */ .shell { max-width: 1080px; margin: 0 auto; padding: 40px 28px 80px; } /* ---- masthead ------------------------------------------------- */ .masthead { display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; padding-bottom: 28px; border-bottom: 1px solid var(--line); } .wordmark { font-family: var(--font-display); font-weight: 700; font-size: 28px; letter-spacing: 0.42em; text-indent: 0.42em; /* compensate so it stays optically centered */ color: var(--text); } .tagline { margin-top: 10px; font-family: var(--font-mono); font-size: 13px; letter-spacing: 0.02em; color: var(--dim); } /* status chip — live instrument indicator */ .status { display: inline-flex; align-items: center; gap: 9px; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.18em; color: var(--dim); padding: 8px 13px; border: 1px solid var(--line); border-radius: 2px; background: var(--panel-2); white-space: nowrap; } .status .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--dim-2); } .status[data-state="standby"] .dot { background: var(--amber); animation: blink 2.4s ease-in-out infinite; } .status[data-state="reading"] .dot { background: var(--calm); animation: blink 0.7s ease-in-out infinite; } .status[data-state="flagged"] .dot { background: var(--alarm); box-shadow: 0 0 10px var(--alarm); } @keyframes blink { 0%,100%{opacity:1} 50%{opacity:0.25} } /* ---- drop zone ------------------------------------------------ */ .intake { margin-top: 36px; } .dropzone { position: relative; border: 1px dashed var(--line); border-radius: 3px; background: repeating-linear-gradient(45deg, transparent 0 11px, rgba(86,199,190,0.015) 11px 12px), var(--panel-2); padding: 54px 32px; text-align: center; cursor: pointer; transition: border-color 0.18s ease, background-color 0.18s ease; } .dropzone:hover { border-color: var(--calm-dim); } .dropzone[data-drag="true"] { border-color: var(--calm); background-color: rgba(86,199,190,0.04); } .dropzone .eyebrow { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.24em; color: var(--dim); margin-bottom: 14px; } .dropzone .prompt { font-family: var(--font-display); font-weight: 500; font-size: 20px; color: var(--text); margin-bottom: 8px; } .dropzone .sub { font-family: var(--font-mono); font-size: 12px; color: var(--dim-2); } .dropzone .filename { margin-top: 16px; font-family: var(--font-mono); font-size: 13px; color: var(--calm); } .hidden-input { display: none; } .run { margin-top: 18px; display: inline-flex; align-items: center; gap: 10px; font-family: var(--font-mono); font-size: 13px; letter-spacing: 0.12em; color: var(--void); background: var(--calm); border: none; border-radius: 2px; padding: 13px 26px; cursor: pointer; transition: filter 0.15s ease, opacity 0.15s ease; } .run:hover { filter: brightness(1.08); } .run:disabled { opacity: 0.4; cursor: not-allowed; } .error { margin-top: 16px; font-family: var(--font-mono); font-size: 13px; color: var(--alarm); border-left: 2px solid var(--alarm); padding-left: 12px; } /* ---- stat strip ---------------------------------------------- */ .stats { margin-top: 44px; display: grid; grid-template-columns: repeat(4, 1fr); border: 1px solid var(--line); border-radius: 3px; overflow: hidden; background: var(--panel); } .stat { padding: 20px 22px; border-right: 1px solid var(--line); } .stat:last-child { border-right: none; } .stat .k { font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.22em; color: var(--dim); margin-bottom: 10px; } .stat .v { font-family: var(--font-mono); font-weight: 700; font-size: 26px; color: var(--text); line-height: 1; } .stat .v.alarm { color: var(--alarm); } .stat .v.amber { color: var(--amber); } /* ---- trace panel (the signature) ------------------------------ */ .trace { margin-top: 18px; border: 1px solid var(--line); border-radius: 3px; background: linear-gradient(180deg, rgba(86,199,190,0.02), transparent 30%), var(--panel); padding: 22px 20px 14px; } .trace-head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 18px; padding: 0 6px; } .trace-title { font-family: var(--font-display); font-weight: 700; font-size: 15px; letter-spacing: 0.16em; color: var(--text); } .trace-legend { display: flex; gap: 18px; font-family: var(--font-mono); font-size: 11px; color: var(--dim); } .trace-legend .item { display: inline-flex; align-items: center; gap: 7px; } .trace-legend .swatch { width: 14px; height: 2px; display: inline-block; } .swatch.calm { background: var(--calm); } .swatch.amber { background: var(--amber); } .swatch.alarm { background: var(--alarm); height: 8px; opacity: 0.55; } /* idle ambient trace (empty state) */ .idle { height: 280px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 18px; } .idle .scan { width: 100%; height: 1px; background: linear-gradient(90deg, transparent, var(--calm-dim), transparent); opacity: 0.5; animation: sweep 3.4s ease-in-out infinite; } @keyframes sweep { 0%,100%{transform:scaleX(0.2);opacity:0.2} 50%{transform:scaleX(1);opacity:0.55} } .idle .label { font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.2em; color: var(--dim-2); } /* recharts overrides — keep the instrument quiet */ .recharts-cartesian-grid line { stroke: var(--line-soft); } .recharts-text { fill: var(--dim); font-family: var(--font-mono); font-size: 11px; } .recharts-cartesian-axis-line { stroke: var(--line); } /* custom tooltip */ .tip { background: var(--void); border: 1px solid var(--line); border-radius: 2px; padding: 10px 12px; font-family: var(--font-mono); font-size: 12px; } .tip .row { display: flex; gap: 14px; justify-content: space-between; } .tip .lab { color: var(--dim); } .tip .val { color: var(--text); } .tip .val.alarm { color: var(--alarm); } /* ---- responsive ----------------------------------------------- */ @media (max-width: 680px) { .masthead { flex-direction: column; } .stats { grid-template-columns: repeat(2, 1fr); } .stat:nth-child(2) { border-right: none; } .stat:nth-child(1), .stat:nth-child(2) { border-bottom: 1px solid var(--line); } .wordmark { font-size: 22px; letter-spacing: 0.32em; } } @media (prefers-reduced-motion: reduce) { .status .dot, .idle .scan { animation: none; } } /* ---- anomalous moments strip ---------------------------------- */ .moments { margin-top: 18px; } .moments-head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 14px; padding: 0 2px; } .moments-title { font-family: var(--font-display); font-weight: 700; font-size: 14px; letter-spacing: 0.16em; color: var(--text); } .moments-sub { font-family: var(--font-mono); font-size: 11px; color: var(--dim); } .moments-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; } .moment { border: 1px solid var(--line); border-radius: 3px; overflow: hidden; background: var(--panel); transition: border-color 0.15s ease, transform 0.15s ease; } .moment:hover { border-color: var(--alarm); transform: translateY(-2px); } .moment-img { display: block; width: 100%; aspect-ratio: 1; object-fit: cover; image-rendering: pixelated; /* 128x128 büyürken keskin kalsın */ } .moment-cap { display: flex; align-items: center; justify-content: space-between; padding: 9px 11px; font-family: var(--font-mono); font-size: 11px; border-top: 1px solid var(--line); } .moment-frame { color: var(--dim); letter-spacing: 0.08em; } .moment-score { color: var(--alarm); font-weight: 500; } @media (max-width: 680px) { .moments-grid { grid-template-columns: repeat(2, 1fr); } .moments-head { flex-direction: column; gap: 4px; } } /* ---- synced playback -------------------- */ .playback { margin-top: 18px; } .feed-video { width: 100%; max-height: 360px; border: 1px solid var(--line); border-radius: 3px; background: #000; display: block; } .live-readout { display: flex; gap: 18px; align-items: baseline; margin-top: 10px; padding: 0 2px; font-family: var(--font-mono); font-size: 13px; } .lr-frame { color: var(--dim); letter-spacing: 0.08em; } .lr-score { color: var(--calm); } .lr-score.alarm { color: var(--alarm); font-weight: 700; } .lr-warm { color: var(--dim-2); letter-spacing: 0.12em; } /* ---- trace explanation note (append to index.css) ------------- */ .trace-note { font-family: var(--font-mono); font-size: 11px; color: var(--dim); padding: 0 6px 14px; margin-top: -6px; }