SPACE / frontend /src /index.css
e-cagan's picture
Deploy AUGUR
c679d56
Raw
History Blame Contribute Delete
10.3 kB
/* ============================================================
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;
}