forgesight / web /src /styles.css
Ankit
Deploy ForgeSight to Hugging Face Spaces
1d0f191
Raw History Blame Contribute Delete
6.67 kB
@tailwind base;
@tailwind components;
@tailwind utilities;
/**
* Design tokens and base styles.
*
* Modernized with Tailwind CSS and executive dark theme design tokens.
* Detection canvas color variables are preserved.
*/
:root {
--bg: #09090b;
--panel: #121215;
--panel-2: #18181b;
--line: #27272a;
--line-soft: #202024;
--text: #fafafa;
--text-dim: #a1a1aa;
--text-faint: #71717a;
--accent: #38bdf8;
--ok: #4ec9a0;
--warn: #e5b567;
--bad: #ef7a7a;
/* Active release and shadow candidate must not look alike. */
--active: #6aa9ff;
--shadow: #d59bf0;
--added: #4ec9a0;
--missing: #ef7a7a;
--relabelled: #e5b567;
--mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
--sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Inter, sans-serif;
--radius: 6px;
}
* {
box-sizing: border-box;
}
html,
body,
#root {
height: 100%;
margin: 0;
}
body {
background: var(--bg);
color: var(--text);
font: 14px/1.5 var(--sans);
-webkit-font-smoothing: antialiased;
}
a {
color: var(--accent);
}
button {
font: inherit;
color: var(--text);
background: var(--panel-2);
border: 1px solid var(--line);
border-radius: var(--radius);
padding: 6px 12px;
cursor: pointer;
}
button:hover:not(:disabled) {
border-color: var(--accent);
}
button:disabled {
opacity: 0.45;
cursor: not-allowed;
}
button.primary {
background: var(--accent);
border-color: var(--accent);
color: #07101f;
font-weight: 600;
}
button.danger {
border-color: var(--bad);
color: var(--bad);
}
input,
select,
textarea {
font: inherit;
color: var(--text);
background: var(--bg);
border: 1px solid var(--line);
border-radius: var(--radius);
padding: 6px 8px;
width: 100%;
}
/* ---- layout ---- */
.app {
display: flex;
flex-direction: column;
height: 100%;
}
.banner {
padding: 6px 16px;
background: #241d10;
border-bottom: 1px solid #4a3a1a;
color: var(--warn);
font-size: 12.5px;
}
.topbar {
display: flex;
align-items: center;
gap: 12px;
padding: 10px 16px;
border-bottom: 1px solid var(--line);
background: var(--panel);
}
.topbar h1 {
font-size: 15px;
margin: 0;
font-weight: 650;
letter-spacing: 0.2px;
}
.topbar .sub {
color: var(--text-faint);
font-size: 12px;
}
.spacer {
flex: 1;
}
.tabs {
display: flex;
gap: 2px;
padding: 0 16px;
border-bottom: 1px solid var(--line);
background: var(--panel);
}
.tabs button {
border: none;
border-bottom: 2px solid transparent;
border-radius: 0;
background: none;
color: var(--text-dim);
padding: 9px 14px;
}
.tabs button[aria-current="true"] {
color: var(--text);
border-bottom-color: var(--accent);
}
.main {
flex: 1;
overflow: auto;
padding: 16px;
}
.grid {
display: grid;
gap: 14px;
}
.grid.two {
grid-template-columns: minmax(320px, 420px) 1fr;
}
@media (max-width: 900px) {
.grid.two {
grid-template-columns: 1fr;
}
}
.panel {
background: var(--panel);
border: 1px solid var(--line);
border-radius: var(--radius);
padding: 14px;
}
.panel h2 {
margin: 0 0 10px;
font-size: 13px;
text-transform: uppercase;
letter-spacing: 0.6px;
color: var(--text-dim);
font-weight: 600;
}
.panel h3 {
margin: 14px 0 6px;
font-size: 12.5px;
color: var(--text-dim);
font-weight: 600;
}
.row {
display: flex;
gap: 8px;
align-items: center;
}
.row.wrap {
flex-wrap: wrap;
}
.stack {
display: flex;
flex-direction: column;
gap: 8px;
}
/* ---- data ---- */
table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
}
th,
td {
text-align: left;
padding: 6px 8px;
border-bottom: 1px solid var(--line-soft);
vertical-align: top;
}
th {
color: var(--text-faint);
font-weight: 600;
font-size: 11.5px;
text-transform: uppercase;
letter-spacing: 0.4px;
}
td.num,
th.num {
text-align: right;
font-variant-numeric: tabular-nums;
font-family: var(--mono);
font-size: 12.5px;
}
.mono {
font-family: var(--mono);
font-size: 12.5px;
}
.dim {
color: var(--text-dim);
}
.faint {
color: var(--text-faint);
font-size: 12px;
}
.pill {
display: inline-block;
padding: 1px 7px;
border-radius: 999px;
font-size: 11.5px;
font-weight: 600;
border: 1px solid var(--line);
}
.pill.ok {
color: var(--ok);
border-color: #24503f;
background: #12251e;
}
.pill.bad {
color: var(--bad);
border-color: #54292a;
background: #261416;
}
.pill.warn {
color: var(--warn);
border-color: #4d3d1c;
background: #241d10;
}
.pill.info {
color: var(--accent);
border-color: #24405f;
background: #101c29;
}
.pill.synthetic {
color: var(--shadow);
border-color: #4a3560;
background: #1d1526;
}
.bar {
height: 6px;
border-radius: 3px;
background: var(--line);
overflow: hidden;
}
.bar > span {
display: block;
height: 100%;
background: var(--accent);
}
.bar.ok > span {
background: var(--ok);
}
.bar.bad > span {
background: var(--bad);
}
.error {
color: var(--bad);
background: #241416;
border: 1px solid #54292a;
border-radius: var(--radius);
padding: 8px 10px;
font-size: 13px;
white-space: pre-wrap;
}
.notice {
color: var(--text-dim);
background: var(--panel-2);
border: 1px solid var(--line);
border-radius: var(--radius);
padding: 8px 10px;
font-size: 12.5px;
}
/* ---- page viewer ---- */
.viewer {
display: flex;
flex-direction: column;
gap: 8px;
}
.canvas-wrap {
position: relative;
overflow: auto;
max-height: 68vh;
background: #0a0c10;
border: 1px solid var(--line);
border-radius: var(--radius);
}
.canvas-wrap canvas {
display: block;
}
.legend {
display: flex;
gap: 14px;
flex-wrap: wrap;
font-size: 12px;
color: var(--text-dim);
}
.legend i {
display: inline-block;
width: 10px;
height: 10px;
border-radius: 2px;
margin-right: 5px;
vertical-align: -1px;
}
.list {
max-height: 260px;
overflow: auto;
border: 1px solid var(--line-soft);
border-radius: var(--radius);
}
.list button {
display: block;
width: 100%;
text-align: left;
border: none;
border-bottom: 1px solid var(--line-soft);
border-radius: 0;
background: none;
padding: 6px 9px;
font-size: 12.5px;
}
.list button[aria-current="true"] {
background: var(--panel-2);
color: var(--text);
}
.timing {
display: grid;
grid-template-columns: auto 1fr auto;
gap: 3px 10px;
align-items: center;
font-size: 12.5px;
}
.timing .label {
color: var(--text-dim);
}
.timing .value {
font-family: var(--mono);
text-align: right;
font-variant-numeric: tabular-nums;
}
.hint {
color: var(--text-faint);
font-size: 12px;
font-style: italic;
}