Files
edu-industry/admin-tools/demo/styles.css
T
lofyerandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 92515928d9 feat: add edu-industry platform demos
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-24 11:19:43 +08:00

3902 lines
61 KiB
CSS

:root {
--ink: #14241e;
--ink-soft: #33463e;
--muted: #718078;
--line: #dfe5df;
--line-soft: #ebefeb;
--surface: #ffffff;
--canvas: #f4f7f3;
--green: #176b4f;
--green-2: #238765;
--green-dark: #102f26;
--green-soft: #e8f4ee;
--lime: #c8ec73;
--lime-soft: #f2f9dc;
--blue: #4d7fa8;
--blue-soft: #eaf2f8;
--amber: #d89527;
--amber-soft: #fff4dd;
--red: #c65a50;
--red-soft: #fff0ed;
--shadow: 0 12px 34px rgba(15, 45, 34, 0.09);
--shadow-high: 0 24px 70px rgba(8, 35, 25, 0.2);
--radius: 16px;
--sidebar: 254px;
color-scheme: light;
font-family:
Inter, "SF Pro Display", "PingFang SC", "Microsoft YaHei",
"Noto Sans CJK SC", sans-serif;
}
* {
box-sizing: border-box;
}
html {
min-width: 320px;
background: var(--canvas);
scroll-behavior: smooth;
}
body {
min-height: 100vh;
margin: 0;
color: var(--ink);
background:
radial-gradient(circle at 84% 0%, rgba(200, 236, 115, 0.08), transparent 24%),
var(--canvas);
font-size: 14px;
}
button,
input,
select,
textarea {
color: inherit;
font: inherit;
}
button,
a {
-webkit-tap-highlight-color: transparent;
}
button {
padding: 0;
background: none;
border: 0;
cursor: pointer;
}
a {
color: inherit;
text-decoration: none;
}
svg {
fill: none;
stroke: currentColor;
stroke-linecap: round;
stroke-linejoin: round;
stroke-width: 1.8;
}
small,
button,
input,
select,
textarea,
th,
td {
font-size: 13px;
}
input,
select,
textarea {
outline: none;
}
input:focus,
select:focus,
textarea:focus {
border-color: #8bc6aa !important;
box-shadow: 0 0 0 3px rgba(35, 135, 101, 0.1);
}
[hidden] {
display: none !important;
}
.app-shell {
min-height: 100vh;
}
.sidebar {
position: fixed;
z-index: 40;
top: 0;
bottom: 0;
left: 0;
display: flex;
width: var(--sidebar);
padding: 22px 15px 16px;
color: #dce9e3;
background:
radial-gradient(circle at 0 100%, rgba(200, 236, 115, 0.08), transparent 24%),
linear-gradient(180deg, #123d31, #0d2d25);
flex-direction: column;
overflow-y: auto;
}
.brand,
.brand > span:last-child {
display: flex;
align-items: center;
}
.brand {
gap: 12px;
padding: 0 9px;
}
.brand > span:last-child {
align-items: flex-start;
flex-direction: column;
}
.brand strong {
color: white;
font-size: 18px;
}
.brand small {
margin-top: 4px;
color: #829f93;
font-size: 13px;
letter-spacing: 0.12em;
}
.brand-mark {
position: relative;
width: 38px;
height: 38px;
flex: 0 0 auto;
}
.brand-mark i {
position: absolute;
display: block;
width: 24px;
height: 9px;
background: var(--lime);
border-radius: 3px 9px 3px 9px;
transform: skewX(-12deg);
}
.brand-mark i:nth-child(1) {
top: 3px;
}
.brand-mark i:nth-child(2) {
top: 15px;
left: 7px;
opacity: 0.75;
}
.brand-mark i:nth-child(3) {
top: 27px;
left: 14px;
opacity: 0.5;
}
.main-nav {
display: flex;
gap: 4px;
margin-top: 30px;
flex-direction: column;
}
.nav-label {
margin: 0 12px 7px;
color: #729087;
font-size: 13px;
font-weight: 700;
}
.nav-item {
position: relative;
display: flex;
min-height: 45px;
align-items: center;
gap: 11px;
padding: 0 12px;
color: #abc0b8;
border-radius: 10px;
font-size: 14px;
text-align: left;
}
.nav-item::before {
position: absolute;
top: 10px;
bottom: 10px;
left: -15px;
width: 4px;
background: transparent;
border-radius: 0 4px 4px 0;
content: "";
}
.nav-item:hover {
color: white;
background: rgba(255, 255, 255, 0.045);
}
.nav-item.active {
color: white;
background: rgba(200, 236, 115, 0.12);
font-weight: 700;
}
.nav-item.active::before {
background: var(--lime);
}
.nav-item svg {
width: 18px;
height: 18px;
flex: 0 0 auto;
}
.nav-item > span {
min-width: 0;
flex: 1;
}
.nav-item em {
display: inline-grid;
min-width: 23px;
height: 23px;
place-items: center;
padding: 0 6px;
color: #bce27c;
background: rgba(200, 236, 115, 0.1);
border-radius: 7px;
font-size: 13px;
font-style: normal;
}
.nav-item em.warning {
color: #ffd17e;
background: rgba(216, 149, 39, 0.15);
}
.nav-live {
width: 8px;
height: 8px;
flex: 0 0 auto;
background: var(--lime);
border-radius: 50%;
box-shadow: 0 0 0 4px rgba(200, 236, 115, 0.11);
}
.sidebar-runtime {
margin-top: auto;
padding: 15px 12px;
color: #819d92;
background: rgba(255, 255, 255, 0.035);
border: 1px solid rgba(255, 255, 255, 0.06);
border-radius: 11px;
}
.sidebar-runtime span,
.sidebar-runtime strong,
.sidebar-runtime small {
display: block;
}
.sidebar-runtime span {
color: #afd0bf;
font-size: 13px;
}
.sidebar-runtime span i {
display: inline-block;
width: 8px;
height: 8px;
margin-right: 7px;
background: #63d49a;
border-radius: 50%;
box-shadow: 0 0 0 4px rgba(99, 212, 154, 0.1);
}
.sidebar-runtime strong {
margin-top: 9px;
color: white;
font-size: 14px;
}
.sidebar-runtime small {
margin-top: 4px;
line-height: 1.5;
}
.workspace {
min-width: 0;
margin-left: var(--sidebar);
}
.topbar {
position: sticky;
z-index: 30;
top: 0;
display: flex;
height: 76px;
align-items: center;
gap: 22px;
padding: 0 30px;
background: rgba(250, 252, 249, 0.92);
border-bottom: 1px solid var(--line);
backdrop-filter: blur(14px);
}
.topbar-context {
display: flex;
min-width: 160px;
flex-direction: column;
}
.topbar-context small {
color: var(--muted);
}
.topbar-context strong {
margin-top: 3px;
font-size: 15px;
}
.mobile-menu {
display: none !important;
}
.icon-button {
position: relative;
display: inline-grid;
width: 40px;
height: 40px;
flex: 0 0 auto;
place-items: center;
color: var(--muted);
background: white;
border: 1px solid var(--line);
border-radius: 10px;
}
.icon-button svg {
width: 18px;
height: 18px;
}
.global-search,
.inline-search {
display: flex;
min-width: 0;
align-items: center;
gap: 8px;
background: white;
border: 1px solid var(--line);
border-radius: 10px;
}
.global-search {
width: min(440px, 35vw);
margin-left: auto;
padding: 0 12px;
}
.global-search svg,
.inline-search svg {
width: 17px;
height: 17px;
flex: 0 0 auto;
color: #829088;
}
.global-search input,
.inline-search input {
width: 100%;
height: 40px;
background: transparent;
border: 0;
}
.topbar-actions {
display: flex;
align-items: center;
gap: 9px;
}
.environment-chip {
display: inline-flex;
min-height: 38px;
align-items: center;
gap: 7px;
padding: 0 11px;
color: var(--green);
background: var(--green-soft);
border: 1px solid #d5e8dc;
border-radius: 9px;
font-size: 13px;
font-weight: 700;
}
.environment-chip i {
width: 8px;
height: 8px;
background: var(--green-2);
border-radius: 50%;
}
#notificationButton b {
position: absolute;
top: -5px;
right: -4px;
display: grid;
width: 22px;
height: 22px;
place-items: center;
color: white;
background: var(--red);
border: 2px solid white;
border-radius: 50%;
font-size: 13px;
}
.operator-card {
display: grid;
min-width: 208px;
grid-template-columns: 38px minmax(0, 1fr) 15px;
align-items: center;
gap: 10px;
padding: 5px 9px 5px 6px;
background: white;
border: 1px solid var(--line);
border-radius: 11px;
text-align: left;
}
.operator-card > span:first-child {
display: grid;
width: 38px;
height: 38px;
place-items: center;
color: white;
background: var(--green);
border-radius: 10px;
font-size: 14px;
font-weight: 800;
}
.operator-card > span:nth-child(2),
.operator-card strong,
.operator-card small {
display: block;
}
.operator-card strong {
font-size: 14px;
}
.operator-card small {
margin-top: 3px;
color: var(--muted);
}
.operator-card svg {
width: 15px;
height: 15px;
}
.main-content {
min-width: 0;
max-width: 1680px;
margin: 0 auto;
padding: 34px 30px 60px;
}
.view {
display: none;
min-width: 0;
}
.view.active {
display: block;
}
.page-heading {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: 28px;
margin-bottom: 24px;
}
.page-heading > div:first-child {
min-width: 0;
}
.eyebrow {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 9px;
color: var(--green-2);
font-size: 13px;
font-weight: 800;
letter-spacing: 0.13em;
}
.eyebrow i {
width: 22px;
height: 2px;
background: var(--green-2);
}
.page-heading h1 {
margin: 0;
font-size: clamp(28px, 2.5vw, 38px);
letter-spacing: -0.03em;
}
.page-heading p {
max-width: 820px;
margin: 9px 0 0;
color: var(--muted);
font-size: 15px;
line-height: 1.7;
}
.heading-actions {
display: flex;
flex: 0 0 auto;
gap: 9px;
}
.button {
display: inline-flex;
min-height: 42px;
align-items: center;
justify-content: center;
gap: 8px;
padding: 0 15px;
border-radius: 10px;
font-size: 13px;
font-weight: 700;
}
.button svg {
width: 17px;
height: 17px;
}
.button.primary {
color: white;
background: var(--green);
box-shadow: 0 8px 18px rgba(23, 107, 79, 0.16);
}
.button.primary:hover {
background: #135f46;
}
.button.secondary {
color: var(--ink-soft);
background: white;
border: 1px solid var(--line);
}
.button.secondary:hover {
border-color: #aecab9;
}
.button.wide {
width: 100%;
}
.text-button {
color: var(--green);
font-size: 13px;
font-weight: 700;
}
.panel {
min-width: 0;
background: white;
border: 1px solid var(--line-soft);
border-radius: var(--radius);
box-shadow: 0 8px 26px rgba(18, 54, 41, 0.045);
}
.panel-head {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 20px;
}
.panel-head > div > span {
color: var(--green-2);
font-size: 13px;
font-weight: 800;
}
.panel-head h2 {
margin: 5px 0 0;
font-size: 20px;
}
.panel-head > em {
color: var(--muted);
font-size: 13px;
font-style: normal;
}
.production-hero {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 35px;
padding: 26px 28px;
color: #dceae4;
background:
radial-gradient(circle at 90% 0%, rgba(200, 236, 115, 0.16), transparent 31%),
linear-gradient(135deg, #174536, #102f26);
border-radius: 18px;
box-shadow: 0 18px 42px rgba(15, 45, 34, 0.14);
}
.hero-kicker {
display: flex;
align-items: center;
gap: 8px;
color: var(--lime);
font-size: 13px;
font-weight: 800;
letter-spacing: 0.12em;
}
.hero-kicker i {
width: 8px;
height: 8px;
background: var(--lime);
border-radius: 50%;
box-shadow: 0 0 0 5px rgba(200, 236, 115, 0.09);
}
.production-hero h2 {
margin: 10px 0 7px;
color: white;
font-size: 25px;
}
.production-hero p {
margin: 0;
color: #9bb3aa;
font-size: 14px;
}
.hero-status-row {
display: flex;
flex-wrap: wrap;
gap: 9px;
margin-top: 20px;
}
.hero-status-row span {
display: flex;
align-items: baseline;
gap: 7px;
padding: 8px 11px;
color: #90aaa0;
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.06);
border-radius: 8px;
font-size: 13px;
}
.hero-status-row strong {
color: white;
font-size: 15px;
}
.hero-score {
display: flex;
align-items: center;
gap: 15px;
padding-left: 25px;
border-left: 1px solid rgba(255, 255, 255, 0.1);
}
.score-ring {
position: relative;
display: grid;
width: 108px;
height: 108px;
place-items: center;
align-content: center;
background: conic-gradient(var(--lime) 0 94.7%, rgba(255, 255, 255, 0.08) 94.7% 100%);
border-radius: 50%;
}
.score-ring::after {
position: absolute;
inset: 7px;
background: #173f32;
border-radius: 50%;
content: "";
}
.score-ring strong,
.score-ring small {
position: relative;
z-index: 1;
display: block;
text-align: center;
}
.score-ring strong {
color: white;
font-size: 27px;
}
.score-ring small {
color: #8ca79c;
}
.hero-score > span:last-child strong,
.hero-score > span:last-child small {
display: block;
}
.hero-score > span:last-child strong {
color: var(--lime);
font-size: 17px;
}
.hero-score > span:last-child small {
margin-top: 5px;
color: #91aaa0;
}
.metric-grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 12px;
margin-top: 14px;
}
.metric-grid article {
position: relative;
min-width: 0;
padding: 18px;
overflow: hidden;
background: white;
border: 1px solid var(--line-soft);
border-radius: 14px;
}
.metric-grid article::after {
position: absolute;
right: -20px;
bottom: -28px;
width: 95px;
height: 95px;
background: radial-gradient(circle, rgba(35, 135, 101, 0.08), transparent 66%);
content: "";
}
.metric-grid span,
.metric-grid strong,
.metric-grid em,
.metric-grid i {
display: block;
}
.metric-grid span {
color: var(--muted);
font-size: 13px;
}
.metric-grid strong {
margin: 9px 0 5px;
font-size: 28px;
}
.metric-grid strong small {
margin-left: 4px;
color: var(--muted);
font-size: 13px;
}
.metric-grid em {
color: var(--muted);
font-size: 13px;
font-style: normal;
}
.metric-grid i {
margin-top: 9px;
font-size: 13px;
font-style: normal;
font-weight: 700;
}
.positive {
color: var(--green-2) !important;
}
.warning {
color: #a16d18 !important;
}
.overview-grid {
display: grid;
grid-template-columns: minmax(0, 1.15fr) minmax(0, 0.85fr);
gap: 14px;
margin-top: 14px;
}
.source-health-panel,
.flow-panel,
.alert-panel {
padding: 21px;
}
.source-health-panel {
grid-row: span 2;
}
.source-health-list {
display: flex;
gap: 8px;
margin-top: 18px;
flex-direction: column;
}
.source-health-item {
display: grid;
grid-template-columns: 39px minmax(0, 1fr) 150px 90px;
align-items: center;
gap: 11px;
padding: 11px;
background: #f8faf8;
border: 1px solid #edf1ee;
border-radius: 10px;
}
.source-health-logo,
.source-logo {
display: grid;
place-items: center;
color: white;
background: var(--green);
border-radius: 9px;
font-size: 13px;
font-weight: 800;
}
.source-health-logo {
width: 39px;
height: 39px;
}
.source-health-logo.commercial,
.source-logo.commercial {
background: #1c4f3e;
}
.source-health-logo.public,
.source-logo.public {
background: var(--blue);
}
.source-health-logo.school,
.source-logo.school {
color: #654409;
background: #f3c871;
}
.source-health-copy strong,
.source-health-copy small {
display: block;
}
.source-health-copy strong {
font-size: 14px;
}
.source-health-copy small {
margin-top: 3px;
color: var(--muted);
}
.health-meter {
display: flex;
align-items: center;
gap: 8px;
}
.health-meter i {
height: 7px;
flex: 1;
overflow: hidden;
background: #e4ebe6;
border-radius: 5px;
}
.health-meter i b {
display: block;
height: 100%;
background: linear-gradient(90deg, var(--green), #72b893);
border-radius: 5px;
}
.health-meter strong {
width: 42px;
color: var(--green);
font-size: 13px;
text-align: right;
}
.status-pill {
display: inline-flex;
min-height: 27px;
align-items: center;
justify-content: center;
padding: 0 8px;
color: var(--green);
background: var(--green-soft);
border-radius: 7px;
font-size: 13px;
font-weight: 700;
white-space: nowrap;
}
.status-pill.running::before {
width: 7px;
height: 7px;
margin-right: 6px;
background: var(--green);
border-radius: 50%;
content: "";
}
.status-pill.attention {
color: #996816;
background: var(--amber-soft);
}
.status-pill.failed {
color: #a54b43;
background: var(--red-soft);
}
.live-label {
display: flex;
align-items: center;
gap: 6px;
color: var(--green-2);
font-size: 13px;
font-weight: 700;
}
.live-label i {
width: 8px;
height: 8px;
background: var(--green-2);
border-radius: 50%;
}
.pipeline-flow {
display: flex;
align-items: center;
justify-content: center;
gap: 6px;
margin-top: 23px;
padding: 16px 10px;
background: #f7f9f7;
border-radius: 11px;
}
.pipeline-flow > span {
min-width: 75px;
text-align: center;
}
.pipeline-flow b,
.pipeline-flow strong,
.pipeline-flow small {
display: block;
}
.pipeline-flow b {
display: grid;
width: 29px;
height: 29px;
margin: 0 auto 7px;
place-items: center;
color: var(--muted);
background: #e8ede9;
border-radius: 8px;
font-size: 13px;
}
.pipeline-flow .done b {
color: white;
background: var(--green);
}
.pipeline-flow .active b {
color: #173a2e;
background: var(--lime);
box-shadow: 0 0 0 5px rgba(200, 236, 115, 0.15);
}
.pipeline-flow strong {
font-size: 13px;
}
.pipeline-flow small {
margin-top: 4px;
color: var(--muted);
white-space: nowrap;
}
.pipeline-flow > i {
width: 25px;
height: 1px;
background: #cfd9d2;
}
.flow-caption {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 7px;
margin-top: 11px;
}
.flow-caption span {
padding: 9px;
color: var(--muted);
background: #fafbfa;
border: 1px solid var(--line-soft);
border-radius: 8px;
font-size: 13px;
}
.flow-caption strong {
display: block;
margin-bottom: 3px;
color: var(--ink);
font-size: 13px;
}
.alert-panel .panel-head > em {
padding: 5px 8px;
color: #a14e46;
background: var(--red-soft);
border-radius: 7px;
font-weight: 700;
}
.alert-list {
display: flex;
gap: 7px;
margin-top: 17px;
flex-direction: column;
}
.alert-list button {
display: grid;
width: 100%;
grid-template-columns: 9px minmax(0, 1fr) auto;
align-items: center;
gap: 10px;
padding: 11px;
background: #fafbfa;
border: 1px solid var(--line-soft);
border-radius: 9px;
text-align: left;
}
.alert-list button > i {
width: 8px;
height: 8px;
border-radius: 50%;
}
.alert-list i.red {
background: var(--red);
}
.alert-list i.amber {
background: var(--amber);
}
.alert-list i.blue {
background: var(--blue);
}
.alert-list strong,
.alert-list small {
display: block;
}
.alert-list strong {
font-size: 14px;
}
.alert-list small {
margin-top: 3px;
color: var(--muted);
}
.alert-list button > em {
color: var(--muted);
font-size: 13px;
font-style: normal;
font-weight: 700;
}
.summary-strip {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 10px;
margin-bottom: 14px;
}
.summary-strip > span {
padding: 16px;
background: white;
border: 1px solid var(--line-soft);
border-radius: 12px;
}
.summary-strip small,
.summary-strip strong,
.summary-strip em {
display: block;
}
.summary-strip small {
color: var(--muted);
}
.summary-strip strong {
margin: 7px 0 4px;
font-size: 21px;
}
.summary-strip em {
color: var(--green-2);
font-size: 13px;
font-style: normal;
}
.source-registry-panel {
padding: 19px;
}
.source-toolbar,
.table-toolbar {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
}
.filter-pills,
.segmented {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.filter-pills button,
.segmented button {
min-height: 34px;
padding: 0 11px;
color: var(--muted);
background: #f3f6f3;
border-radius: 8px;
font-size: 13px;
}
.filter-pills button.active,
.segmented button.active {
color: white;
background: var(--green);
font-weight: 700;
}
.inline-search {
width: min(320px, 38vw);
padding: 0 10px;
}
.inline-search input {
height: 36px;
}
.source-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 11px;
margin-top: 16px;
}
.source-card {
min-width: 0;
padding: 16px;
background: #fafbf9;
border: 1px solid var(--line-soft);
border-radius: 12px;
transition: border-color 0.18s ease, transform 0.18s ease, box-shadow 0.18s ease;
}
.source-card:hover {
border-color: #c6dace;
box-shadow: 0 10px 24px rgba(17, 58, 42, 0.08);
transform: translateY(-2px);
}
.source-card-head {
display: grid;
grid-template-columns: 43px minmax(0, 1fr) auto;
align-items: center;
gap: 10px;
}
.source-logo {
width: 43px;
height: 43px;
}
.source-name strong,
.source-name small {
display: block;
}
.source-name strong {
overflow: hidden;
font-size: 15px;
text-overflow: ellipsis;
white-space: nowrap;
}
.source-name small {
margin-top: 4px;
color: var(--muted);
}
.source-type {
padding: 4px 7px;
color: var(--green);
background: var(--green-soft);
border-radius: 6px;
font-size: 13px;
font-style: normal;
}
.source-type.public {
color: var(--blue);
background: var(--blue-soft);
}
.source-type.school {
color: #996816;
background: var(--amber-soft);
}
.source-card-metrics {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 7px;
margin-top: 14px;
}
.source-card-metrics span {
min-width: 0;
padding: 9px;
background: white;
border: 1px solid #edf1ee;
border-radius: 8px;
}
.source-card-metrics small,
.source-card-metrics strong {
display: block;
}
.source-card-metrics small {
color: var(--muted);
}
.source-card-metrics strong {
margin-top: 4px;
overflow: hidden;
font-size: 14px;
text-overflow: ellipsis;
white-space: nowrap;
}
.source-card-meta {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin-top: 11px;
}
.source-card-meta span {
padding: 5px 7px;
color: var(--muted);
background: #f1f4f1;
border-radius: 6px;
font-size: 13px;
}
.source-card-foot {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
margin-top: 13px;
padding-top: 11px;
border-top: 1px solid var(--line-soft);
}
.source-card-foot > span {
min-width: 0;
overflow: hidden;
color: var(--muted);
font-size: 13px;
text-overflow: ellipsis;
white-space: nowrap;
}
.source-card-foot button {
flex: 0 0 auto;
color: var(--green);
font-size: 13px;
font-weight: 700;
}
.source-card-actions {
display: flex;
flex: 0 0 auto;
align-items: center;
gap: 10px;
}
.source-card-actions button:first-child:not(:last-child) {
color: var(--blue);
}
.list-summary {
margin-top: 14px;
color: var(--muted);
font-size: 13px;
text-align: right;
}
.record-browser-panel {
padding: 18px;
}
.record-layer-tabs {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 9px;
}
.record-layer-tabs button {
min-width: 0;
padding: 14px;
color: var(--muted);
background: #f5f8f5;
border: 1px solid var(--line-soft);
border-radius: 10px;
text-align: left;
}
.record-layer-tabs button span,
.record-layer-tabs button strong,
.record-layer-tabs button small {
display: block;
}
.record-layer-tabs button span {
color: var(--green-2);
font-size: 13px;
font-weight: 800;
letter-spacing: 0.06em;
}
.record-layer-tabs button strong {
margin-top: 5px;
color: var(--ink);
font-size: 15px;
}
.record-layer-tabs button small {
margin-top: 4px;
color: var(--muted);
line-height: 1.45;
}
.record-layer-tabs button.active {
color: white;
background: linear-gradient(135deg, #1a7255, #12523f);
border-color: var(--green);
box-shadow: 0 9px 20px rgba(23, 107, 79, 0.14);
}
.record-layer-tabs button.active span {
color: var(--lime);
}
.record-layer-tabs button.active strong {
color: white;
}
.record-layer-tabs button.active small {
color: #bed6cc;
}
.record-query-bar {
display: grid;
grid-template-columns: 220px 180px minmax(260px, 1fr);
gap: 10px;
margin-top: 15px;
padding: 14px;
background: #f7f9f7;
border: 1px solid var(--line-soft);
border-radius: 10px;
}
.record-query-bar label,
.record-query-bar label > span {
display: block;
}
.record-query-bar label > span {
margin-bottom: 6px;
color: var(--muted);
font-size: 13px;
font-weight: 600;
}
.record-query-bar select,
.record-query-bar input {
width: 100%;
height: 39px;
padding: 0 10px;
background: white;
border: 1px solid var(--line);
border-radius: 8px;
}
.query-service-note {
display: grid;
grid-template-columns: auto auto minmax(0, 1fr);
align-items: center;
gap: 10px;
margin-top: 12px;
padding: 11px 13px;
color: var(--muted);
background: var(--green-soft);
border: 1px solid #d8e8de;
border-radius: 9px;
}
.query-service-note > span {
display: inline-flex;
align-items: center;
gap: 6px;
color: var(--green);
font-size: 13px;
font-weight: 800;
}
.query-service-note > span i {
width: 7px;
height: 7px;
background: #3bc183;
border-radius: 50%;
}
.query-service-note strong {
color: var(--ink);
font-size: 13px;
}
.query-service-note small {
min-width: 0;
line-height: 1.55;
}
.record-table {
min-width: 1140px;
}
.record-title,
.record-source-copy,
.record-time-copy {
display: block;
}
.record-title strong,
.record-title small,
.record-source-copy strong,
.record-source-copy small,
.record-time-copy strong,
.record-time-copy small {
display: block;
}
.record-title strong,
.record-source-copy strong,
.record-time-copy strong {
font-size: 14px;
}
.record-title small,
.record-source-copy small,
.record-time-copy small {
margin-top: 4px;
color: var(--muted);
}
.record-source-copy small,
.record-time-copy small {
font-family: "SFMono-Regular", Consolas, monospace;
}
.record-source-cell {
display: grid;
min-width: 170px;
grid-template-columns: 34px minmax(0, 1fr);
align-items: center;
gap: 8px;
}
.record-source-mark {
display: grid;
width: 34px;
height: 34px;
place-items: center;
color: white;
background: var(--green);
border-radius: 8px;
font-size: 13px;
font-weight: 800;
}
.record-source-mark.public {
background: var(--blue);
}
.record-quality {
display: inline-flex;
min-width: 52px;
align-items: center;
justify-content: center;
padding: 5px 7px;
color: var(--green);
background: var(--green-soft);
border-radius: 7px;
font-size: 13px;
font-weight: 800;
}
.record-quality.attention {
color: #9a650d;
background: var(--amber-soft);
}
.record-list-footer {
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
margin-top: 13px;
color: var(--muted);
}
.record-list-footer span {
color: var(--ink);
font-size: 13px;
font-weight: 700;
}
.record-list-footer small {
text-align: right;
}
.record-drawer {
width: min(860px, 94vw);
}
.record-detail-banner {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
align-items: center;
gap: 20px;
padding: 18px;
color: white;
background: linear-gradient(135deg, #143f32, #0d2d24);
border-radius: 11px;
}
.record-detail-banner span,
.record-detail-banner strong,
.record-detail-banner small {
display: block;
}
.record-detail-banner span {
color: var(--lime);
font-size: 13px;
font-weight: 800;
}
.record-detail-banner strong {
margin: 7px 0 5px;
font-size: 20px;
}
.record-detail-banner small {
color: #a4bbb1;
line-height: 1.55;
}
.record-detail-score {
display: grid !important;
width: 68px;
height: 68px;
place-items: center;
color: var(--green-dark) !important;
background: var(--lime);
border-radius: 50%;
font-size: 18px !important;
font-weight: 900 !important;
}
.record-lineage {
display: grid;
gap: 8px;
}
.record-lineage > span {
display: grid;
grid-template-columns: 30px minmax(0, 1fr);
align-items: center;
gap: 10px;
padding: 10px;
background: #f7f9f7;
border-radius: 8px;
}
.record-lineage > span > span {
display: block;
padding: 0;
background: transparent;
border-radius: 0;
}
.record-lineage b {
display: grid;
width: 30px;
height: 30px;
place-items: center;
color: var(--green);
background: var(--green-soft);
border-radius: 7px;
font-size: 13px;
}
.record-lineage strong,
.record-lineage small {
display: block;
}
.record-lineage small {
margin-top: 3px;
color: var(--muted);
overflow-wrap: anywhere;
}
.record-payload {
max-height: 280px;
margin: 0;
padding: 13px;
overflow: auto;
color: #d7e8e0;
background: #102f26;
border-radius: 9px;
font-family: "SFMono-Regular", Consolas, monospace;
font-size: 13px;
line-height: 1.65;
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.record-source-link {
color: var(--green);
font-weight: 700;
overflow-wrap: anywhere;
}
.collector-metrics {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 11px;
margin-bottom: 14px;
}
.collector-metrics article {
padding: 16px;
background: white;
border: 1px solid var(--line-soft);
border-radius: 12px;
}
.collector-metrics span,
.collector-metrics strong,
.collector-metrics small {
display: block;
}
.collector-metrics span {
color: var(--muted);
font-size: 13px;
}
.collector-metrics span i {
display: inline-block;
width: 8px;
height: 8px;
margin-right: 7px;
border-radius: 50%;
}
.collector-metrics i.green {
background: var(--green);
}
.collector-metrics i.blue {
background: var(--blue);
}
.collector-metrics i.amber {
background: var(--amber);
}
.collector-metrics i.red {
background: var(--red);
}
.collector-metrics strong {
margin: 7px 0 4px;
font-size: 23px;
}
.collector-metrics small {
color: var(--muted);
}
.collector-table-panel,
.audit-table-panel {
padding: 18px;
}
.table-toolbar > span {
color: var(--muted);
font-size: 13px;
}
.table-wrap {
max-width: 100%;
margin-top: 15px;
overflow-x: auto;
border: 1px solid var(--line-soft);
border-radius: 10px;
}
.data-table {
width: 100%;
min-width: 1020px;
border-collapse: collapse;
background: white;
}
.data-table.compact {
min-width: 900px;
}
.data-table th,
.data-table td {
padding: 12px 11px;
border-bottom: 1px solid var(--line-soft);
text-align: left;
vertical-align: middle;
}
.data-table th {
color: var(--muted);
background: #f5f8f5;
font-weight: 600;
}
.data-table tr:last-child td {
border-bottom: 0;
}
.job-title strong,
.job-title small {
display: block;
}
.job-title strong {
font-size: 14px;
}
.job-title small {
margin-top: 4px;
color: var(--muted);
}
.job-strategy span,
.job-strategy small {
display: block;
}
.job-strategy small {
margin-top: 3px;
color: var(--muted);
}
.record-count-link {
margin-top: 5px;
color: var(--green);
font-size: 13px;
font-weight: 700;
}
.job-progress {
min-width: 140px;
}
.job-progress span {
display: flex;
align-items: center;
justify-content: space-between;
color: var(--muted);
font-size: 13px;
}
.job-progress i {
display: block;
height: 7px;
margin-top: 6px;
overflow: hidden;
background: #e7ece8;
border-radius: 5px;
}
.job-progress i b {
display: block;
height: 100%;
background: linear-gradient(90deg, var(--green), #71b991);
}
.row-actions {
display: flex;
align-items: center;
gap: 5px;
}
.row-actions button {
min-height: 31px;
padding: 0 8px;
color: var(--green);
background: var(--green-soft);
border-radius: 7px;
font-size: 13px;
font-weight: 700;
}
.row-actions button.secondary {
color: var(--muted);
background: #f0f3f1;
}
.contract-tabs {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
margin-bottom: 13px;
}
.contract-tabs button {
padding: 15px;
background: white;
border: 1px solid var(--line-soft);
border-radius: 12px;
text-align: left;
}
.contract-tabs button.active {
background: var(--green-soft);
border-color: #b9d9c5;
box-shadow: inset 4px 0 0 var(--green);
}
.contract-tabs span,
.contract-tabs strong,
.contract-tabs small {
display: block;
}
.contract-tabs span {
color: var(--green-2);
font-size: 13px;
font-weight: 800;
}
.contract-tabs strong {
margin: 7px 0 4px;
font-size: 15px;
}
.contract-tabs small {
color: var(--muted);
}
.contract-hero {
display: grid;
grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.8fr);
gap: 12px;
}
.contract-overview,
.contract-release {
padding: 21px;
}
.contract-overview > span {
color: var(--green-2);
font-size: 13px;
font-weight: 800;
}
.contract-overview h2 {
margin: 7px 0 8px;
font-size: 22px;
}
.contract-overview p {
margin: 0;
color: var(--muted);
font-size: 14px;
line-height: 1.7;
}
.contract-meta-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 8px;
margin-top: 17px;
}
.contract-meta-grid span {
padding: 10px;
background: #f7f9f7;
border-radius: 8px;
}
.contract-meta-grid small,
.contract-meta-grid strong {
display: block;
}
.contract-meta-grid small {
color: var(--muted);
}
.contract-meta-grid strong {
margin-top: 4px;
font-size: 14px;
}
.contract-release {
color: #dceae4;
background: linear-gradient(140deg, #173f33, #102f26);
}
.contract-release > span,
.contract-release > strong,
.contract-release > small {
display: block;
}
.contract-release > span {
color: var(--lime);
font-size: 13px;
font-weight: 800;
}
.contract-release > strong {
margin: 9px 0 6px;
color: white;
font-size: 19px;
}
.contract-release > small {
color: #93ada2;
line-height: 1.6;
}
.release-steps {
display: flex;
gap: 6px;
margin-top: 18px;
}
.release-steps span {
flex: 1;
padding: 8px;
color: #9bb3aa;
background: rgba(255, 255, 255, 0.05);
border-radius: 7px;
font-size: 13px;
text-align: center;
}
.release-steps span.done {
color: #15392e;
background: var(--lime);
font-weight: 700;
}
.contract-body-grid {
display: grid;
grid-template-columns: minmax(0, 1fr) 330px;
gap: 12px;
margin-top: 12px;
}
.field-panel,
.contract-rules-panel {
padding: 19px;
}
.field-table {
width: 100%;
min-width: 820px;
border-collapse: collapse;
}
.field-table th,
.field-table td {
padding: 11px 9px;
border-bottom: 1px solid var(--line-soft);
font-size: 13px;
text-align: left;
}
.field-table th {
color: var(--muted);
background: #f5f8f5;
}
.required-mark {
color: var(--red);
font-weight: 800;
}
.field-code {
color: var(--green);
font-family: "SFMono-Regular", Consolas, monospace;
font-size: 13px;
}
.contract-rule-list {
display: flex;
gap: 8px;
margin-top: 15px;
flex-direction: column;
}
.contract-rule-list span {
padding: 11px;
color: var(--muted);
background: #f7f9f7;
border-radius: 9px;
font-size: 13px;
line-height: 1.6;
}
.contract-rule-list strong {
display: block;
margin-bottom: 4px;
color: var(--ink);
font-size: 14px;
}
.exchange-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 13px;
}
.import-panel,
.export-panel,
.recent-exchange-panel {
padding: 20px;
}
.upload-zone {
display: grid;
min-height: 190px;
place-items: center;
align-content: center;
gap: 7px;
margin-top: 17px;
color: var(--muted);
background:
linear-gradient(white, white) padding-box,
repeating-linear-gradient(45deg, #cfe0d5 0 8px, transparent 8px 16px) border-box;
border: 1px dashed transparent;
border-radius: 12px;
cursor: pointer;
text-align: center;
}
.upload-zone.dragging {
background: var(--green-soft);
border-color: var(--green);
}
.upload-zone input {
position: absolute;
width: 1px;
height: 1px;
opacity: 0;
}
.upload-icon {
display: grid;
width: 46px;
height: 46px;
place-items: center;
color: var(--green);
background: var(--green-soft);
border-radius: 12px;
}
.upload-icon svg {
width: 23px;
height: 23px;
}
.upload-zone strong {
color: var(--ink);
font-size: 15px;
}
.upload-zone small {
max-width: 390px;
}
.import-configuration,
.export-form {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
margin-top: 14px;
}
.import-configuration label > span,
.export-form label > span,
.form-grid label > span {
display: block;
margin-bottom: 6px;
color: var(--ink-soft);
font-size: 13px;
font-weight: 600;
}
.import-configuration select,
.export-form input,
.export-form select,
.form-grid input,
.form-grid select,
.form-grid textarea {
width: 100%;
padding: 10px 11px;
background: #fafbf9;
border: 1px solid var(--line);
border-radius: 8px;
}
.import-preview {
display: flex;
align-items: center;
justify-content: space-between;
gap: 14px;
margin-top: 14px;
padding: 13px;
background: #f7f9f7;
border-radius: 9px;
}
.import-preview span,
.import-preview small,
.import-preview strong {
display: block;
}
.import-preview small {
color: var(--muted);
}
.import-preview strong {
margin-top: 4px;
font-size: 14px;
}
.import-preview .button:disabled {
cursor: not-allowed;
opacity: 0.45;
}
.package-includes {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
margin: 17px 0;
}
.package-includes span {
display: flex;
align-items: center;
gap: 8px;
padding: 10px;
color: var(--muted);
background: #f7f9f7;
border-radius: 8px;
font-size: 13px;
}
.package-includes i {
display: grid;
width: 20px;
height: 20px;
place-items: center;
color: white;
background: var(--green);
border-radius: 6px;
font-size: 13px;
font-style: normal;
}
.recent-exchange-panel {
margin-top: 13px;
}
.quality-layout {
display: grid;
grid-template-columns: 360px minmax(0, 1fr);
gap: 12px;
}
.quality-score-card {
display: flex;
align-items: center;
gap: 17px;
padding: 19px;
color: #dceae4;
background: linear-gradient(140deg, #173f33, #102f26);
border-radius: 14px;
}
.quality-ring {
position: relative;
display: grid;
width: 100px;
height: 100px;
flex: 0 0 auto;
place-items: center;
align-content: center;
background: conic-gradient(var(--lime) 0 94.7%, rgba(255, 255, 255, 0.09) 94.7% 100%);
border-radius: 50%;
}
.quality-ring::after {
position: absolute;
inset: 7px;
background: #173f33;
border-radius: 50%;
content: "";
}
.quality-ring strong,
.quality-ring small {
position: relative;
z-index: 1;
display: block;
text-align: center;
}
.quality-ring strong {
color: white;
font-size: 25px;
}
.quality-ring small {
color: #8fa99e;
}
.quality-score-card > div > span,
.quality-score-card > div > strong,
.quality-score-card > div > small {
display: block;
}
.quality-score-card > div > span {
color: var(--lime);
font-size: 13px;
}
.quality-score-card > div > strong {
margin: 7px 0 5px;
color: white;
font-size: 17px;
}
.quality-score-card > div > small {
color: #91aaa0;
line-height: 1.5;
}
.quality-dimensions {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 9px;
}
.quality-dimensions span {
padding: 16px;
background: white;
border: 1px solid var(--line-soft);
border-radius: 12px;
}
.quality-dimensions small,
.quality-dimensions strong,
.quality-dimensions i {
display: block;
}
.quality-dimensions small {
color: var(--muted);
}
.quality-dimensions strong {
margin: 8px 0;
font-size: 20px;
}
.quality-dimensions i {
height: 7px;
overflow: hidden;
background: #e7ece8;
border-radius: 5px;
}
.quality-dimensions i b {
display: block;
height: 100%;
background: linear-gradient(90deg, var(--green), #72b893);
}
.quality-grid {
display: grid;
grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
gap: 12px;
margin-top: 12px;
}
.rule-panel,
.normalization-panel {
padding: 19px;
}
.rule-list,
.normalization-list {
display: flex;
gap: 8px;
margin-top: 15px;
flex-direction: column;
}
.rule-item,
.normalization-item {
display: grid;
align-items: center;
gap: 10px;
padding: 12px;
background: #f8faf8;
border: 1px solid var(--line-soft);
border-radius: 9px;
}
.rule-item {
grid-template-columns: 33px minmax(0, 1fr) auto;
}
.rule-item > b {
display: grid;
width: 32px;
height: 32px;
place-items: center;
color: var(--green);
background: var(--green-soft);
border-radius: 8px;
font-size: 13px;
}
.rule-item strong,
.rule-item small,
.normalization-item strong,
.normalization-item small {
display: block;
}
.rule-item strong,
.normalization-item strong {
font-size: 14px;
}
.rule-item small,
.normalization-item small {
margin-top: 4px;
color: var(--muted);
}
.rule-item em {
color: var(--green);
font-size: 13px;
font-style: normal;
font-weight: 700;
}
.normalization-item {
grid-template-columns: minmax(0, 1fr) 18px minmax(0, 1fr) auto;
}
.normalization-item > i {
color: var(--muted);
font-size: 18px;
font-style: normal;
}
.normalization-item button {
min-height: 31px;
padding: 0 9px;
color: var(--green);
background: var(--green-soft);
border-radius: 7px;
font-size: 13px;
font-weight: 700;
}
.audit-summary {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 10px;
margin-bottom: 13px;
}
.audit-summary article {
padding: 16px;
background: white;
border: 1px solid var(--line-soft);
border-radius: 12px;
}
.audit-summary small,
.audit-summary strong,
.audit-summary em {
display: block;
}
.audit-summary small {
color: var(--muted);
}
.audit-summary strong {
margin: 7px 0 4px;
font-size: 22px;
}
.audit-summary em {
color: var(--green-2);
font-size: 13px;
font-style: normal;
}
.audit-event strong,
.audit-event small {
display: block;
}
.audit-event strong {
font-size: 14px;
}
.audit-event small {
margin-top: 4px;
color: var(--muted);
}
.operations-metrics {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 10px;
margin-bottom: 14px;
}
.operations-metrics article {
min-width: 0;
padding: 16px;
background: white;
border: 1px solid var(--line-soft);
border-radius: 12px;
}
.operations-metrics span,
.operations-metrics strong,
.operations-metrics small {
display: block;
}
.operations-metrics span,
.operations-metrics small {
color: var(--muted);
}
.operations-metrics strong {
margin: 7px 0 4px;
font-size: 23px;
}
.operations-tabs {
display: flex;
gap: 7px;
margin-bottom: 13px;
padding: 6px;
overflow-x: auto;
background: white;
border: 1px solid var(--line-soft);
border-radius: 12px;
}
.operations-tabs button {
min-height: 38px;
flex: 0 0 auto;
padding: 0 14px;
color: var(--muted);
border-radius: 8px;
font-size: 13px;
font-weight: 700;
}
.operations-tabs button.active {
color: white;
background: var(--green);
}
.operations-workspace {
display: none;
min-width: 0;
}
.operations-workspace.active {
display: block;
}
.operations-panel,
.candidate-card,
.approval-card {
padding: 19px;
}
.operations-table {
min-width: 1120px;
}
.operations-impact {
display: block;
max-width: 300px;
color: var(--ink-soft);
line-height: 1.55;
}
.severity-badge {
display: inline-flex;
min-height: 26px;
align-items: center;
padding: 0 8px;
color: #a64c44;
background: var(--red-soft);
border-radius: 7px;
font-size: 13px;
font-weight: 800;
}
.severity-badge.p2 {
color: #996816;
background: var(--amber-soft);
}
.cell-note,
.failure-note {
display: block;
margin-top: 5px;
color: var(--muted);
line-height: 1.45;
}
.failure-note {
max-width: 180px;
color: var(--red);
}
.release-workspace-grid {
display: grid;
grid-template-columns: minmax(0, 1.15fr) minmax(360px, 0.85fr);
gap: 12px;
}
.candidate-version-banner {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 8px;
margin-top: 17px;
}
.candidate-version-banner > span {
min-width: 0;
padding: 13px;
color: #dceae4;
background: linear-gradient(135deg, #173f33, #102f26);
border-radius: 9px;
}
.candidate-version-banner small,
.candidate-version-banner strong {
display: block;
}
.candidate-version-banner small {
color: #91aaa0;
}
.candidate-version-banner strong {
margin-top: 5px;
overflow-wrap: anywhere;
color: white;
font-size: 14px;
}
.release-facts {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
margin-top: 10px;
}
.release-facts > span {
min-width: 0;
padding: 11px;
background: #f7f9f7;
border-radius: 8px;
}
.release-facts small,
.release-facts strong {
display: block;
}
.release-facts small {
color: var(--muted);
}
.release-facts strong {
margin-top: 4px;
overflow-wrap: anywhere;
font-size: 14px;
}
.gate-pass {
color: var(--green);
}
.gate-blocked {
color: var(--red);
}
.release-quality-note,
.delivery-boundary-note {
margin-top: 10px;
padding: 12px;
color: #975f10;
background: var(--amber-soft);
border: 1px solid #f0ddb8;
border-radius: 9px;
font-size: 13px;
line-height: 1.6;
}
.release-quality-note.passed {
color: var(--green);
background: var(--green-soft);
border-color: #d4e8db;
}
.delivery-boundary-note {
color: var(--ink-soft);
background: var(--blue-soft);
border-color: #d8e6f0;
}
.candidate-actions {
display: flex;
align-items: center;
gap: 12px;
margin-top: 13px;
}
.approval-summary {
margin: 15px 0 0;
}
.approval-summary > div {
display: grid;
grid-template-columns: 100px minmax(0, 1fr);
gap: 10px;
padding: 10px 0;
border-bottom: 1px solid var(--line-soft);
}
.approval-summary dt {
color: var(--muted);
}
.approval-summary dd {
min-width: 0;
margin: 0;
overflow-wrap: anywhere;
font-weight: 700;
}
.approval-actions {
display: flex;
align-items: flex-end;
flex-wrap: wrap;
gap: 8px;
margin-top: 16px;
}
.approval-field {
display: block;
min-width: 190px;
flex: 1;
}
.approval-field > span,
.footer-field > span {
display: block;
margin-bottom: 6px;
color: var(--muted);
font-size: 13px;
font-weight: 600;
}
.approval-field select,
.approval-field input,
.footer-field select,
.receipt-input {
width: 100%;
min-height: 40px;
padding: 8px 10px;
background: white;
border: 1px solid var(--line);
border-radius: 8px;
}
.approval-comment {
flex-basis: 100%;
}
.rollback-approval-block {
display: grid;
width: 100%;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px;
padding: 14px;
background: var(--amber-soft);
border: 1px solid #ecd4a4;
border-radius: 10px;
}
.rollback-approval-block > strong,
.rollback-approval-block > small {
grid-column: 1 / -1;
}
.rollback-approval-block > strong {
color: #7f5310;
font-size: 14px;
}
.rollback-approval-block > small {
color: var(--muted);
line-height: 1.55;
}
.rollback-action-row {
grid-column: 1 / -1;
display: flex;
justify-content: flex-end;
gap: 8px;
}
.button:disabled,
.text-button:disabled {
cursor: not-allowed;
opacity: 0.45;
}
.danger-button {
color: var(--red) !important;
border-color: #e8c5c1 !important;
}
.release-final-note,
.footer-guidance {
color: var(--muted);
font-size: 13px;
line-height: 1.5;
}
.delivery-table {
min-width: 1260px;
}
.receipt-input {
min-width: 145px;
}
.receipt-input.hash-input {
min-width: 290px;
font-family: "SFMono-Regular", Consolas, monospace;
}
.hash-copy {
display: block;
max-width: 180px;
overflow: hidden;
font-family: "SFMono-Regular", Consolas, monospace;
font-size: 13px;
text-overflow: ellipsis;
white-space: nowrap;
}
.issue-drawer {
width: min(850px, 94vw);
}
.issue-summary-grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 8px;
}
.issue-summary-grid > span {
min-width: 0;
padding: 12px;
background: white;
border: 1px solid var(--line-soft);
border-radius: 9px;
}
.issue-summary-grid small,
.issue-summary-grid strong {
display: block;
}
.issue-summary-grid small {
color: var(--muted);
}
.issue-summary-grid strong {
margin-top: 5px;
overflow-wrap: anywhere;
font-size: 14px;
}
.quality-disposition-form .button {
margin-top: 12px;
}
.immutable-action {
box-shadow: inset 4px 0 0 var(--blue);
}
.issue-timeline {
display: flex;
flex-direction: column;
}
.issue-timeline > span {
position: relative;
display: grid;
grid-template-columns: 15px minmax(0, 1fr);
gap: 9px;
padding: 3px 0 15px;
}
.issue-timeline > span:not(:last-child)::before {
position: absolute;
top: 12px;
bottom: -2px;
left: 5px;
width: 1px;
background: #cfdcd4;
content: "";
}
.issue-timeline i {
position: relative;
z-index: 1;
width: 11px;
height: 11px;
margin-top: 3px;
background: var(--green);
border: 3px solid var(--green-soft);
border-radius: 50%;
box-sizing: content-box;
}
.issue-timeline strong,
.issue-timeline small,
.issue-timeline em {
display: block;
}
.issue-timeline small {
margin-top: 4px;
color: var(--muted);
line-height: 1.5;
}
.issue-timeline em {
margin-top: 4px;
color: var(--blue);
font-size: 13px;
font-style: normal;
overflow-wrap: anywhere;
}
.issue-drawer-footer {
align-items: flex-end;
flex-wrap: wrap;
}
.footer-field {
min-width: 230px;
}
.notification-list button {
width: 100%;
padding: 11px;
background: #f7f9f7;
border-radius: 8px;
text-align: left;
}
.notification-list button:hover {
background: var(--green-soft);
}
.evidence-tags {
display: flex;
flex-wrap: wrap;
gap: 5px;
}
.evidence-tags span {
padding: 4px 6px;
color: var(--green);
background: var(--green-soft);
border-radius: 5px;
font-size: 13px;
}
.drawer-backdrop,
.modal-backdrop {
position: fixed;
z-index: 100;
inset: 0;
background: rgba(7, 28, 20, 0.56);
backdrop-filter: blur(5px);
opacity: 0;
pointer-events: none;
transition: opacity 0.22s ease;
}
.drawer-backdrop.open,
.modal-backdrop.open {
opacity: 1;
pointer-events: auto;
}
.drawer {
position: absolute;
top: 0;
right: 0;
display: flex;
width: min(820px, 94vw);
height: 100%;
background: #f5f8f5;
box-shadow: -24px 0 80px rgba(7, 29, 21, 0.24);
flex-direction: column;
transform: translateX(24px);
transition: transform 0.22s ease;
}
.drawer-backdrop.open .drawer {
transform: translateX(0);
}
.drawer-header {
display: flex;
flex: 0 0 auto;
align-items: flex-start;
justify-content: space-between;
gap: 20px;
padding: 24px 25px 19px;
background: white;
border-bottom: 1px solid var(--line);
}
.drawer-header > div > span {
color: var(--green-2);
font-size: 13px;
font-weight: 800;
letter-spacing: 0.1em;
}
.drawer-header h2 {
margin: 6px 0 5px;
font-size: 25px;
}
.drawer-header p {
margin: 0;
color: var(--muted);
font-size: 14px;
}
.drawer-tabs {
display: flex;
flex: 0 0 auto;
gap: 5px;
padding: 10px 22px;
overflow-x: auto;
background: white;
border-bottom: 1px solid var(--line);
}
.drawer-tabs button {
min-height: 34px;
flex: 0 0 auto;
padding: 0 10px;
color: var(--muted);
border-radius: 8px;
font-size: 13px;
}
.drawer-tabs button.active {
color: white;
background: var(--green);
font-weight: 700;
}
.drawer-content {
min-height: 0;
flex: 1;
padding: 20px 23px 35px;
overflow-y: auto;
}
.drawer-footer {
display: flex;
flex: 0 0 auto;
justify-content: flex-end;
gap: 8px;
padding: 13px 21px;
background: white;
border-top: 1px solid var(--line);
}
.drawer-stat-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 8px;
}
.drawer-stat-grid > span {
padding: 13px;
background: white;
border: 1px solid var(--line-soft);
border-radius: 10px;
}
.drawer-stat-grid small,
.drawer-stat-grid strong,
.drawer-stat-grid em {
display: block;
}
.drawer-stat-grid small {
color: var(--muted);
}
.drawer-stat-grid strong {
margin: 6px 0 4px;
font-size: 16px;
}
.drawer-stat-grid em {
color: var(--green-2);
font-size: 13px;
font-style: normal;
}
.drawer-card {
margin-top: 10px;
padding: 16px;
background: white;
border: 1px solid var(--line-soft);
border-radius: 11px;
}
.drawer-card h3 {
margin: 0 0 12px;
font-size: 16px;
}
.drawer-card p,
.drawer-card li {
color: var(--muted);
font-size: 14px;
line-height: 1.7;
}
.drawer-card ul {
margin: 0;
padding-left: 20px;
}
.drawer-card dl {
margin: 0;
}
.drawer-card dl > div {
display: grid;
grid-template-columns: 130px minmax(0, 1fr);
gap: 10px;
padding: 9px 0;
border-bottom: 1px solid var(--line-soft);
}
.drawer-card dl > div:last-child {
border-bottom: 0;
}
.drawer-card dt {
color: var(--muted);
font-size: 13px;
}
.drawer-card dd {
margin: 0;
font-size: 14px;
font-weight: 600;
}
.drawer-contract-banner {
padding: 17px;
color: #dceae4;
background: linear-gradient(135deg, #173f33, #102f26);
border-radius: 11px;
}
.drawer-contract-banner span,
.drawer-contract-banner strong,
.drawer-contract-banner small {
display: block;
}
.drawer-contract-banner span {
color: var(--lime);
font-size: 13px;
font-weight: 800;
}
.drawer-contract-banner strong {
margin: 7px 0 5px;
color: white;
font-size: 17px;
}
.drawer-contract-banner small {
color: #91aaa0;
line-height: 1.6;
}
.runtime-list,
.audit-evidence-list {
display: flex;
gap: 8px;
flex-direction: column;
}
.runtime-list span,
.audit-evidence-list span {
padding: 11px;
background: #f7f9f7;
border-radius: 8px;
}
.runtime-list strong,
.runtime-list small,
.audit-evidence-list strong,
.audit-evidence-list small {
display: block;
}
.runtime-list strong,
.audit-evidence-list strong {
font-size: 14px;
}
.runtime-list small,
.audit-evidence-list small {
margin-top: 4px;
color: var(--muted);
}
.mapping-table {
width: 100%;
min-width: 700px;
border-collapse: collapse;
}
.mapping-table th,
.mapping-table td {
padding: 10px 8px;
border-bottom: 1px solid var(--line-soft);
font-size: 13px;
text-align: left;
}
.mapping-table th {
color: var(--muted);
background: #f5f8f5;
}
.modal-backdrop {
display: grid;
place-items: center;
padding: 20px;
}
.modal {
position: relative;
width: min(760px, 100%);
max-height: calc(100vh - 40px);
padding: 28px;
overflow-y: auto;
background: white;
border-radius: 18px;
box-shadow: var(--shadow-high);
transform: translateY(12px) scale(0.985);
transition: transform 0.22s ease;
}
.modal-backdrop.open .modal {
transform: translateY(0) scale(1);
}
.compact-modal {
width: min(620px, 100%);
}
.modal-close {
position: absolute;
top: 17px;
right: 17px;
display: grid;
width: 37px;
height: 37px;
place-items: center;
color: var(--muted);
background: #f1f4f1;
border-radius: 9px;
}
.modal-close svg {
width: 16px;
height: 16px;
}
.modal-kicker {
color: var(--green-2);
font-size: 13px;
font-weight: 800;
letter-spacing: 0.1em;
}
.modal h2 {
margin: 7px 0 7px;
font-size: 27px;
}
.modal > p {
margin: 0;
color: var(--muted);
font-size: 14px;
line-height: 1.7;
}
.form-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 11px;
margin-top: 19px;
}
.form-grid .full {
grid-column: 1 / -1;
}
.form-grid textarea {
resize: vertical;
}
.modal-actions {
display: flex;
justify-content: flex-end;
gap: 8px;
margin-top: 20px;
}
.info-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
margin-top: 16px;
}
.info-grid span {
padding: 11px;
color: var(--muted);
background: #f7f9f7;
border-radius: 8px;
font-size: 13px;
}
.info-grid strong {
display: block;
margin-top: 4px;
color: var(--ink);
font-size: 14px;
}
.info-note {
margin-top: 12px;
padding: 13px;
color: var(--muted);
background: var(--green-soft);
border: 1px solid #d5e7dc;
border-radius: 9px;
font-size: 14px;
line-height: 1.7;
}
.toast-region {
position: fixed;
z-index: 160;
right: 22px;
bottom: 22px;
display: flex;
width: min(380px, calc(100vw - 30px));
gap: 8px;
flex-direction: column;
pointer-events: none;
}
.toast {
display: grid;
grid-template-columns: 34px minmax(0, 1fr);
gap: 10px;
padding: 13px;
color: #dceae4;
background: #12382d;
border: 1px solid rgba(200, 236, 115, 0.18);
border-radius: 11px;
box-shadow: var(--shadow-high);
animation: toast-in 0.22s ease;
}
.toast > span:first-child {
display: grid;
width: 34px;
height: 34px;
place-items: center;
color: #173a2e;
background: var(--lime);
border-radius: 9px;
font-weight: 800;
}
.toast strong,
.toast small {
display: block;
}
.toast strong {
color: white;
font-size: 14px;
}
.toast small {
margin-top: 4px;
color: #a8beb5;
line-height: 1.5;
}
@keyframes toast-in {
from {
opacity: 0;
transform: translateY(8px);
}
}
.sidebar-scrim {
display: none;
}
@media (max-width: 1240px) {
.source-grid {
grid-template-columns: 1fr 1fr;
}
.metric-grid,
.collector-metrics,
.audit-summary,
.operations-metrics {
grid-template-columns: 1fr 1fr;
}
.overview-grid,
.quality-grid,
.release-workspace-grid {
grid-template-columns: 1fr;
}
.record-layer-tabs {
grid-template-columns: 1fr 1fr;
}
.source-health-panel {
grid-row: auto;
}
.contract-body-grid {
grid-template-columns: 1fr;
}
.global-search {
width: min(300px, 28vw);
}
}
@media (max-width: 980px) {
:root {
--sidebar: 0px;
}
.sidebar {
width: 254px;
transform: translateX(-100%);
transition: transform 0.22s ease;
}
body.sidebar-open .sidebar {
transform: translateX(0);
}
.workspace {
margin-left: 0;
}
.mobile-menu {
display: inline-grid !important;
}
.sidebar-scrim {
position: fixed;
z-index: 35;
inset: 0;
display: block;
background: rgba(8, 30, 22, 0.48);
opacity: 0;
pointer-events: none;
transition: opacity 0.22s ease;
}
body.sidebar-open .sidebar-scrim {
opacity: 1;
pointer-events: auto;
}
.quality-layout {
grid-template-columns: 1fr;
}
.exchange-grid,
.contract-hero {
grid-template-columns: 1fr;
}
.contract-tabs {
grid-template-columns: 1fr;
}
.global-search {
display: none;
}
.topbar-context {
margin-right: auto;
}
}
@media (max-width: 720px) {
.topbar {
height: 68px;
gap: 10px;
padding: 0 14px;
}
.topbar-context small,
.environment-chip,
.operator-card > span:nth-child(2),
.operator-card > svg {
display: none;
}
.topbar-context {
min-width: 0;
}
.operator-card {
min-width: 42px;
width: 42px;
grid-template-columns: 1fr;
padding: 2px;
border: 0;
background: transparent;
}
.main-content {
padding: 25px 14px 45px;
}
.page-heading {
align-items: stretch;
flex-direction: column;
gap: 16px;
}
.page-heading h1 {
font-size: 29px;
}
.heading-actions {
align-items: stretch;
flex-direction: column;
}
.heading-actions .button {
width: 100%;
}
.production-hero {
grid-template-columns: 1fr;
padding: 22px 19px;
}
.hero-score {
padding: 16px 0 0;
border-top: 1px solid rgba(255, 255, 255, 0.1);
border-left: 0;
}
.hero-status-row {
display: grid;
grid-template-columns: 1fr 1fr;
}
.metric-grid,
.collector-metrics,
.summary-strip,
.audit-summary,
.operations-metrics,
.quality-dimensions {
grid-template-columns: 1fr 1fr;
}
.source-toolbar,
.table-toolbar {
align-items: stretch;
flex-direction: column;
}
.inline-search {
width: 100%;
}
.source-grid {
grid-template-columns: 1fr;
}
.record-query-bar {
grid-template-columns: 1fr;
}
.query-service-note {
grid-template-columns: 1fr;
align-items: start;
}
.record-list-footer,
.record-detail-banner {
align-items: flex-start;
flex-direction: column;
}
.record-list-footer {
display: flex;
}
.record-list-footer small {
text-align: left;
}
.record-detail-banner {
display: flex;
}
.source-health-item {
grid-template-columns: 39px minmax(0, 1fr) 70px;
}
.health-meter {
grid-column: 2 / -1;
grid-row: 2;
}
.pipeline-flow {
align-items: stretch;
flex-direction: column;
}
.pipeline-flow > span {
display: grid;
grid-template-columns: 35px minmax(0, 1fr) auto;
align-items: center;
text-align: left;
}
.pipeline-flow b {
margin: 0;
}
.pipeline-flow small {
margin: 0;
}
.pipeline-flow > i {
width: 1px;
height: 12px;
margin-left: 24px;
}
.flow-caption,
.contract-meta-grid,
.package-includes {
grid-template-columns: 1fr;
}
.exchange-grid,
.contract-hero,
.contract-body-grid,
.quality-layout,
.quality-grid,
.release-workspace-grid {
grid-template-columns: 1fr;
}
.candidate-version-banner,
.issue-summary-grid {
grid-template-columns: 1fr 1fr;
}
.candidate-actions,
.approval-actions {
align-items: stretch;
flex-direction: column;
}
.approval-field,
.footer-field {
width: 100%;
}
.rollback-approval-block {
grid-template-columns: 1fr;
}
.rollback-approval-block > strong,
.rollback-approval-block > small,
.rollback-action-row {
grid-column: 1;
}
.import-configuration,
.export-form,
.form-grid,
.info-grid {
grid-template-columns: 1fr;
}
.form-grid .full {
grid-column: auto;
}
.drawer {
width: 100vw;
}
.drawer-header {
padding: 20px 17px 16px;
}
.drawer-content {
padding: 16px 14px 30px;
}
.drawer-stat-grid {
grid-template-columns: 1fr 1fr;
}
.drawer-card dl > div {
grid-template-columns: 1fr;
gap: 4px;
}
.modal-backdrop {
padding: 8px;
}
.modal {
max-height: calc(100vh - 16px);
padding: 25px 18px 20px;
border-radius: 15px;
}
.modal-actions {
align-items: stretch;
flex-direction: column;
}
.modal-actions .button {
width: 100%;
}
.normalization-item {
grid-template-columns: minmax(0, 1fr) 14px minmax(0, 1fr);
}
.normalization-item button {
grid-column: 1 / -1;
justify-self: stretch;
}
}
@media (max-width: 440px) {
.metric-grid,
.collector-metrics,
.summary-strip,
.audit-summary,
.operations-metrics,
.quality-dimensions {
grid-template-columns: 1fr;
}
.hero-status-row,
.drawer-stat-grid {
grid-template-columns: 1fr 1fr;
}
.source-card-metrics {
grid-template-columns: 1fr 1fr;
}
.source-card-metrics span:last-child {
grid-column: 1 / -1;
}
.filter-pills,
.segmented {
flex-wrap: nowrap;
padding-bottom: 4px;
overflow-x: auto;
}
.record-layer-tabs {
grid-template-columns: 1fr 1fr;
}
.record-layer-tabs button {
padding: 12px;
}
.toast-region {
right: 15px;
bottom: 15px;
}
.candidate-version-banner,
.release-facts,
.issue-summary-grid {
grid-template-columns: 1fr;
}
.issue-drawer-footer {
align-items: stretch;
flex-direction: column;
}
.issue-drawer-footer .button {
width: 100%;
}
}