/* Secondary pages (Dashboard / Active Jobs / Inventory) — shares tokens with theme.css and the .btn/table/sidebar idioms from workspace.css. */ /* App shell: same sidebar as the workspace, scrollable content column. */ .app { display: flex; min-height: 100vh; } .content { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; } /* Page header. */ .page-head { padding: 32px; border-bottom: 1px solid var(--outline-variant); background: var(--surface); } .page-head h1 { font-family: var(--font-head); font-weight: 800; font-size: 32px; letter-spacing: -0.02em; margin: 0; color: var(--on-surface); } .page-head p { margin: 6px 0 0; color: var(--secondary); } .page-body { padding: 32px; display: flex; flex-direction: column; gap: 24px; } /* KPI cards. */ .kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; } .kpi { background: var(--surface-container-lowest); border: 1px solid var(--outline-variant); border-radius: 12px; padding: 24px; } .kpi .label { font-family: var(--font-head); font-size: 12px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--secondary); font-weight: 700; margin: 0; } .kpi .value { font-family: var(--font-head); font-size: 40px; font-weight: 800; letter-spacing: -0.02em; margin: 8px 0 0; color: var(--on-surface); } .kpi .sub { margin: 6px 0 0; font-size: 14px; color: var(--secondary); } .kpi--dark { background: #2d3133; border-color: #2d3133; } .kpi--dark .label { color: #bbc8d0; } .kpi--dark .value, .kpi--dark .sub { color: #fff; } .kpi--alert { border-left: 4px solid var(--error); } .kpi--alert .label, .kpi--alert .value { color: var(--error); } /* Card wrapper for tables / lists. */ .card { background: var(--surface-container-lowest); border: 1px solid var(--outline-variant); border-radius: 12px; overflow: hidden; } .card-head { display: flex; align-items: center; justify-content: space-between; padding: 18px 24px; border-bottom: 1px solid var(--outline-variant); background: var(--surface-container-low); } .card-head h2 { font-family: var(--font-head); font-size: 18px; margin: 0; color: var(--on-surface); } /* Tables on pages have no rounded inner border (the card supplies it). */ .card table { border: 0; border-radius: 0; } /* Chips / badges. */ .chip { display: inline-flex; align-items: center; gap: 6px; padding: 3px 10px; border-radius: 999px; font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; } .chip--cat { background: var(--tertiary-fixed); color: var(--on-tertiary-container); } .chip--ok { background: rgba(34, 197, 94, 0.12); color: #15803d; } .chip--low { background: #ffdad6; color: #93000a; } .mono { font-family: var(--font-mono); font-size: 13px; } /* Stock bar. */ .stock { display: flex; flex-direction: column; gap: 4px; width: 140px; } .stock .meter { height: 6px; background: var(--surface-container-high); border-radius: 999px; overflow: hidden; } .stock .meter span { display: block; height: 100%; background: var(--primary-container); } .stock.is-low .meter span { background: var(--error); } .stock .nums { display: flex; justify-content: space-between; font-size: 11px; font-weight: 700; } /* Empty state. */ .empty { padding: 48px 24px; text-align: center; color: var(--secondary); } .empty .material-symbols-outlined { font-size: 40px; color: var(--outline); display: block; margin: 0 0 8px; } .empty a { color: var(--primary); font-weight: 700; } /* Filter row for the catalog. */ .filters { display: flex; gap: 8px; flex-wrap: wrap; } .filter { padding: 4px 12px; border-radius: 999px; border: 1px solid var(--outline-variant); background: transparent; color: var(--secondary); font-size: 12px; font-weight: 700; cursor: pointer; font-family: var(--font-body); } .filter.active { border-color: var(--primary); color: var(--on-primary); background: var(--primary); }