:root { --bg: #f3f6f8; --surface: #ffffff; --surface-soft: #f8fafb; --surface-strong: #edf2f5; --nav: #0d1b2a; --nav-soft: #13263a; --nav-text: #9db0c1; --ink: #16222f; --muted: #6f7f8e; --muted-2: #93a1ad; --line: #dce4e9; --line-strong: #cbd7de; --teal: #0f9f8f; --teal-soft: #e2f7f3; --blue: #2585d9; --blue-soft: #e7f2fc; --amber: #dc8b15; --amber-soft: #fff4dc; --red: #d84d50; --red-soft: #fdecec; --green: #3f9b67; --green-soft: #e9f6ee; --purple: #7c63c8; --purple-soft: #f0edfb; --shadow-sm: 0 1px 2px rgba(15, 33, 48, 0.05); --shadow-md: 0 10px 30px rgba(15, 33, 48, 0.08); --shadow-lg: 0 22px 50px rgba(8, 24, 38, 0.16); --radius-sm: 6px; --radius-md: 10px; --radius-lg: 14px; --sidebar-width: 264px; color-scheme: light; } * { box-sizing: border-box; } [hidden] { display: none !important; } html { min-width: 320px; background: var(--bg); scroll-behavior: smooth; } body { margin: 0; min-width: 320px; min-height: 100vh; color: var(--ink); background: var(--bg); font-family: "Microsoft YaHei", "PingFang SC", "Noto Sans SC", sans-serif; font-size: 16px; line-height: 1.5; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; } button, input { font: inherit; } button { color: inherit; } button, [role="button"] { -webkit-tap-highlight-color: transparent; } button:focus-visible, input:focus-visible, [tabindex]:focus-visible { outline: 2px solid rgba(37, 133, 217, 0.75); outline-offset: 2px; } svg { display: block; } [data-icon] { display: inline-flex; flex: 0 0 auto; align-items: center; justify-content: center; width: 18px; height: 18px; line-height: 1; } [data-icon] svg { width: 100%; height: 100%; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; fill: none; } .app-shell { display: flex; min-height: 100vh; } .sidebar { position: fixed; inset: 0 auto 0 0; z-index: 50; display: flex; width: var(--sidebar-width); flex-direction: column; color: #fff; background: linear-gradient(180deg, rgba(25, 54, 79, 0.9), rgba(10, 25, 39, 0.96)), var(--nav); border-right: 1px solid rgba(255, 255, 255, 0.06); transition: transform 0.25s ease; } .brand { display: flex; align-items: center; gap: 11px; min-height: 74px; padding: 0 20px; border-bottom: 1px solid rgba(255, 255, 255, 0.08); } .brand-mark { display: grid; width: 38px; height: 38px; color: #fff; place-items: center; background: var(--teal); border: 1px solid rgba(255, 255, 255, 0.18); border-radius: 9px; box-shadow: 0 8px 22px rgba(15, 159, 143, 0.3); } .brand-mark [data-icon] { width: 21px; height: 21px; } .brand-copy { display: flex; min-width: 0; flex-direction: column; } .brand-copy strong { font-size: 18px; line-height: 1.25; } .brand-copy span { margin-top: 2px; color: var(--nav-text); font-size: 14px; } .sidebar-close { display: none !important; margin-left: auto; color: var(--nav-text); } .mine-switcher { position: relative; margin: 16px 14px 12px; } .mine-switcher-button { display: flex; width: 100%; align-items: center; gap: 10px; padding: 10px 11px; color: #fff; text-align: left; cursor: pointer; background: rgba(255, 255, 255, 0.055); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 9px; transition: background 0.2s ease, border-color 0.2s ease; } .mine-switcher-button:hover, .mine-switcher.open .mine-switcher-button { background: rgba(255, 255, 255, 0.09); border-color: rgba(255, 255, 255, 0.15); } .mine-switcher-button.static, .mine-switcher-button.static:hover { cursor: default; background: rgba(255, 255, 255, 0.055); border-color: rgba(255, 255, 255, 0.08); } .mine-icon { width: 32px; height: 32px; color: #5ed8c8; background: rgba(15, 159, 143, 0.16); border-radius: 7px; } .mine-copy { display: flex; min-width: 0; flex: 1; flex-direction: column; } .mine-copy small { color: #8ea4b7; font-size: 13px; } .mine-copy strong { overflow: hidden; margin-top: 1px; font-size: 15px; text-overflow: ellipsis; white-space: nowrap; } .chevron { color: #8195a7; transition: transform 0.2s ease; } .mine-switcher.open .chevron { transform: rotate(180deg); } .mine-menu { position: absolute; top: calc(100% + 7px); right: 0; left: 0; z-index: 20; display: none; overflow: hidden; padding: 5px; background: #173047; border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 9px; box-shadow: var(--shadow-lg); } .mine-switcher.open .mine-menu { display: block; animation: dropIn 0.16s ease; } .mine-menu button { display: flex; width: 100%; align-items: center; justify-content: space-between; gap: 8px; padding: 9px 10px; color: #dbe7ee; cursor: pointer; background: transparent; border: 0; border-radius: 6px; } .mine-menu button:hover { background: rgba(255, 255, 255, 0.08); } .mine-menu small { color: #8299aa; font-size: 13px; } .main-nav { overflow-y: auto; padding: 0 12px 20px; scrollbar-width: thin; scrollbar-color: #29475f transparent; } .nav-label { margin: 13px 10px 7px; color: #687f92; font-size: 13px; font-weight: 700; } .nav-label-secondary { margin-top: 24px; } .nav-item { position: relative; display: flex; width: 100%; align-items: center; gap: 11px; min-height: 42px; margin: 3px 0; padding: 0 11px; color: var(--nav-text); text-align: left; cursor: pointer; background: transparent; border: 0; border-radius: 8px; transition: color 0.18s ease, background 0.18s ease, transform 0.18s ease; } .nav-item:hover { color: #fff; background: rgba(255, 255, 255, 0.055); } .nav-item.active { color: #fff; background: linear-gradient(90deg, rgba(15, 159, 143, 0.23), rgba(15, 159, 143, 0.08)); box-shadow: inset 2px 0 0 #35c5b4; } .nav-item.active::after { position: absolute; right: -12px; width: 3px; height: 20px; content: ""; background: #35c5b4; border-radius: 4px 0 0 4px; } .nav-item > [data-icon] { width: 18px; height: 18px; } .nav-text { flex: 1; font-size: 15px; } .nav-badge { min-width: 28px; padding: 1px 6px; color: #bfd0dc; font-size: 13px; text-align: center; background: rgba(255, 255, 255, 0.09); border-radius: 20px; } .nav-badge.alert { color: #ffd0d1; background: rgba(216, 77, 80, 0.2); } .nav-dot { width: 7px; height: 7px; border-radius: 50%; } .nav-dot.danger { background: #ff6d70; box-shadow: 0 0 0 4px rgba(255, 109, 112, 0.12); } .sidebar-status { margin: auto 14px 15px; padding: 12px; background: rgba(255, 255, 255, 0.045); border: 1px solid rgba(255, 255, 255, 0.07); border-radius: 9px; } .status-head { display: flex; align-items: center; gap: 6px; color: #b9cad6; font-size: 13px; } .status-head strong { margin-left: auto; color: #6fe0ce; } .status-track { display: block; height: 4px; margin-top: 9px; overflow: hidden; background: rgba(255, 255, 255, 0.08); border-radius: 5px; } .status-track span { display: block; height: 100%; background: linear-gradient(90deg, #139f8f, #62dacb); border-radius: inherit; } .sidebar-status p { margin: 7px 0 0; color: #71889a; font-size: 13px; } .sidebar-scrim { position: fixed; z-index: 45; display: none; inset: 0; background: rgba(8, 20, 31, 0.5); backdrop-filter: blur(2px); } .workspace { width: calc(100% - var(--sidebar-width)); min-width: 0; margin-left: var(--sidebar-width); } .app-loading { position: fixed; z-index: 34; top: 74px; right: 0; bottom: 0; left: var(--sidebar-width); display: grid; background: var(--bg); place-items: center; } .app-loading-content { display: flex; align-items: center; flex-direction: column; gap: 12px; color: var(--muted); } .loading-spinner { width: 30px; height: 30px; border: 3px solid var(--line-strong); border-top-color: var(--teal); border-radius: 50%; animation: loadingSpin 0.8s linear infinite; } body:not(.api-loading) .app-loading { display: none; } body.api-loading .content-area { visibility: hidden; } @keyframes loadingSpin { to { transform: rotate(360deg); } } .topbar { position: sticky; top: 0; z-index: 35; display: flex; min-height: 74px; align-items: center; gap: 24px; padding: 0 28px; background: rgba(255, 255, 255, 0.96); border-bottom: 1px solid var(--line); backdrop-filter: blur(14px); } .topbar-title { display: flex; min-width: 0; flex: 1; align-items: center; gap: 11px; } .topbar-title h1 { margin: 0; font-size: 20px; line-height: 1.25; } .topbar-title p { overflow: hidden; margin: 4px 0 0; color: var(--muted); font-size: 14px; text-overflow: ellipsis; white-space: nowrap; } .title-line { display: flex; align-items: center; gap: 10px; } .status-pill { display: inline-flex; align-items: center; gap: 5px; padding: 3px 8px; color: #27744e; font-size: 13px; font-weight: 700; background: var(--green-soft); border-radius: 20px; } .live-dot { display: inline-block; width: 6px; height: 6px; background: #3dba75; border-radius: 50%; box-shadow: 0 0 0 3px rgba(61, 186, 117, 0.12); animation: livePulse 2s infinite; } .topbar-actions { display: flex; align-items: center; gap: 10px; } .global-search { display: flex; width: 278px; height: 38px; align-items: center; gap: 8px; padding: 0 10px; color: var(--muted-2); background: var(--surface-soft); border: 1px solid var(--line); border-radius: 8px; transition: border-color 0.2s ease, box-shadow 0.2s ease, background 0.2s ease; } .global-search:focus-within { background: #fff; border-color: rgba(37, 133, 217, 0.5); box-shadow: 0 0 0 3px rgba(37, 133, 217, 0.09); } .global-search input { width: 100%; color: var(--ink); background: transparent; border: 0; outline: 0; } .global-search input::placeholder { color: #9aa8b4; } .global-search kbd { padding: 2px 5px; color: #8e9ba7; font-size: 12px; font-family: inherit; white-space: nowrap; background: #fff; border: 1px solid var(--line); border-radius: 4px; box-shadow: 0 1px 1px rgba(15, 33, 48, 0.04); } .icon-button { position: relative; display: inline-flex; width: 38px; height: 38px; align-items: center; justify-content: center; color: #5f7080; cursor: pointer; background: #fff; border: 1px solid var(--line); border-radius: 8px; transition: color 0.18s ease, border-color 0.18s ease, background 0.18s ease, transform 0.18s ease; } .icon-button:hover { color: var(--ink); background: var(--surface-soft); border-color: var(--line-strong); } .icon-button:active { transform: translateY(1px); } .icon-button.small { width: 30px; height: 30px; } .notification-button i { position: absolute; top: 7px; right: 7px; width: 7px; height: 7px; background: var(--red); border: 2px solid #fff; border-radius: 50%; } .user-menu { display: flex; align-items: center; gap: 8px; padding: 4px 7px 4px 5px; cursor: pointer; background: transparent; border: 0; border-radius: 8px; } .user-menu:hover { background: var(--surface-soft); } .avatar { display: inline-flex; width: 34px; height: 34px; align-items: center; justify-content: center; color: #fff; font-size: 15px; font-weight: 700; background: #325f7f; border-radius: 8px; } .user-copy { display: flex; min-width: 94px; flex-direction: column; align-items: flex-start; } .user-copy strong { font-size: 14px; line-height: 1.3; } .user-copy small { color: var(--muted); font-size: 12px; } .user-menu > [data-icon] { width: 14px; height: 14px; color: var(--muted-2); } .notification-popover { position: absolute; top: 65px; right: 154px; z-index: 60; display: none; width: 370px; padding: 8px; background: #fff; border: 1px solid var(--line); border-radius: 12px; box-shadow: var(--shadow-lg); } .notification-popover.open { display: block; animation: dropIn 0.18s ease; } .popover-head { display: flex; align-items: center; justify-content: space-between; padding: 8px 8px 10px; border-bottom: 1px solid var(--line); } .popover-head button { color: var(--blue); font-size: 14px; cursor: pointer; background: transparent; border: 0; } .notification-item { display: flex; gap: 10px; padding: 12px 8px; border-bottom: 1px solid #edf1f4; } .notification-item:last-child { border-bottom: 0; } .notification-item.unread { background: #f8fbfd; } .notice-icon { display: grid; width: 32px; height: 32px; flex: 0 0 auto; place-items: center; border-radius: 8px; } .notice-icon.danger { color: var(--red); background: var(--red-soft); } .notice-icon.warning { color: var(--amber); background: var(--amber-soft); } .notification-item div { min-width: 0; } .notification-item strong { display: block; font-size: 14px; } .notification-item p { margin: 4px 0 0; color: var(--muted); font-size: 13px; } .mobile-menu { display: none; } .content-area { min-width: 0; padding: 22px 26px 34px; } .view { display: none; min-width: 0; } .view.active { display: block; animation: viewIn 0.25s ease; } .context-bar, .view-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 18px; margin-bottom: 18px; padding: 13px 15px; background: #fff; border: 1px solid var(--line); border-radius: var(--radius-md); box-shadow: var(--shadow-sm); } .context-message, .toolbar-copy { display: flex; min-width: 0; align-items: center; gap: 11px; } .context-icon, .toolbar-icon { display: grid; width: 37px; height: 37px; flex: 0 0 auto; color: var(--teal); place-items: center; background: var(--teal-soft); border-radius: 9px; } .toolbar-icon.red { color: var(--red); background: var(--red-soft); } .toolbar-icon.amber { color: var(--amber); background: var(--amber-soft); } .context-message strong, .toolbar-copy strong { display: block; font-size: 14px; } .context-message p, .toolbar-copy p { margin: 3px 0 0; color: var(--muted); font-size: 13px; } .segmented-control { display: inline-flex; flex: 0 0 auto; padding: 3px; background: var(--surface-soft); border: 1px solid var(--line); border-radius: 8px; } .segmented-control button { padding: 5px 11px; color: var(--muted); font-size: 13px; cursor: pointer; background: transparent; border: 0; border-radius: 5px; } .segmented-control button.active { color: var(--ink); font-weight: 700; background: #fff; box-shadow: 0 1px 4px rgba(15, 33, 48, 0.08); } .toolbar-actions { display: flex; flex: 0 0 auto; align-items: center; gap: 9px; } .primary-button, .secondary-button { display: inline-flex; min-height: 36px; align-items: center; justify-content: center; gap: 7px; padding: 0 13px; font-size: 14px; font-weight: 700; cursor: pointer; border-radius: 7px; transition: transform 0.18s ease, box-shadow 0.18s ease, background 0.18s ease, border-color 0.18s ease; } .primary-button { color: #fff; background: #168f83; border: 1px solid #168f83; box-shadow: 0 5px 14px rgba(15, 159, 143, 0.18); } .primary-button:hover { background: #0d7f75; box-shadow: 0 8px 20px rgba(15, 159, 143, 0.24); } .secondary-button { color: #445564; background: #fff; border: 1px solid var(--line-strong); } .secondary-button:hover { color: var(--ink); background: var(--surface-soft); } .primary-button:active, .secondary-button:active { transform: translateY(1px); } .primary-button [data-icon], .secondary-button [data-icon] { width: 15px; height: 15px; } .kpi-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; margin-bottom: 14px; } .kpi-card { min-width: 0; padding: 15px; background: #fff; border: 1px solid var(--line); border-radius: var(--radius-md); box-shadow: var(--shadow-sm); transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease; } .kpi-card:hover { border-color: #cbd9e1; box-shadow: 0 12px 25px rgba(15, 33, 48, 0.08); transform: translateY(-2px); } .kpi-head { display: flex; align-items: center; justify-content: space-between; } .kpi-icon { display: grid; width: 34px; height: 34px; place-items: center; border-radius: 8px; } .kpi-icon.teal { color: var(--teal); background: var(--teal-soft); } .kpi-icon.red { color: var(--red); background: var(--red-soft); } .kpi-icon.amber { color: var(--amber); background: var(--amber-soft); } .kpi-icon.green { color: var(--green); background: var(--green-soft); } .trend { display: inline-flex; align-items: center; gap: 3px; padding: 2px 6px; font-size: 12px; font-style: normal; font-weight: 700; border-radius: 20px; } .trend [data-icon] { width: 11px; height: 11px; } .trend.up { color: #32835a; background: var(--green-soft); } .trend.down { color: #b4651d; background: var(--amber-soft); } .trend.neutral { color: #607383; background: #eef2f5; } .kpi-card > p { margin: 13px 0 4px; color: var(--muted); font-size: 14px; } .kpi-card > strong { display: flex; align-items: baseline; gap: 4px; font-size: 30px; line-height: 1.1; } .kpi-card > strong small { color: var(--muted); font-size: 14px; font-weight: 500; } .kpi-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 11px; padding-top: 10px; color: var(--muted); font-size: 12px; border-top: 1px solid #edf1f4; } .text-danger { color: var(--red) !important; } .text-success { color: var(--green) !important; } .mini-bars { display: flex; height: 16px; align-items: flex-end; gap: 2px; } .mini-bars i { display: block; width: 3px; background: #b8dcd6; border-radius: 2px 2px 0 0; } .mini-bars i:nth-child(1) { height: 5px; } .mini-bars i:nth-child(2) { height: 9px; } .mini-bars i:nth-child(3) { height: 7px; } .mini-bars i:nth-child(4) { height: 13px; } .mini-bars i:nth-child(5) { height: 16px; background: var(--teal); } .dashboard-grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 14px; } .panel { min-width: 0; padding: 16px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-md); box-shadow: var(--shadow-sm); } .ventilation-panel { grid-column: span 8; } .evaluation-panel { grid-column: span 4; } .sensor-panel { grid-column: span 4; } .diagnosis-panel { grid-column: span 8; } .knowledge-panel { grid-column: span 5; } .tasks-panel { grid-column: span 7; } .panel-head { display: flex; min-width: 0; align-items: flex-start; justify-content: space-between; gap: 14px; margin-bottom: 14px; } .panel-head > div:first-child { min-width: 0; } .eyebrow { display: block; margin-bottom: 3px; color: var(--teal); font-size: 12px; font-weight: 800; text-transform: uppercase; } .panel-head h2, .knowledge-hero h2, .evaluation-summary-copy h2 { margin: 0; font-size: 17px; line-height: 1.35; } .panel-actions { display: flex; align-items: center; gap: 8px; } .subtle-badge { display: inline-flex; flex: 0 0 auto; align-items: center; gap: 5px; padding: 4px 7px; color: #687a89; font-size: 12px; font-weight: 700; background: #f0f4f6; border-radius: 5px; } .subtle-badge.success { color: #327751; background: var(--green-soft); } .text-button { display: inline-flex; flex: 0 0 auto; align-items: center; gap: 4px; padding: 3px 0; color: var(--blue); font-size: 13px; font-weight: 700; cursor: pointer; background: transparent; border: 0; } .text-button:hover { color: #1766af; } .text-button [data-icon] { width: 12px; height: 12px; } .map-legend { display: flex; align-items: center; gap: 10px; } .map-legend span { display: inline-flex; align-items: center; gap: 4px; color: var(--muted); font-size: 12px; } .legend-dot { width: 6px; height: 6px; border-radius: 50%; } .legend-dot.normal { background: #19a994; } .legend-dot.warning { background: #e19a25; } .legend-dot.danger { background: #df5154; } .mine-map { position: relative; min-height: 425px; overflow: hidden; background-color: #0e2334; background-image: radial-gradient(circle at 52% 50%, rgba(31, 121, 146, 0.13), transparent 55%); border: 1px solid #1b3a50; border-radius: 9px; } .map-toolbar { position: absolute; top: 10px; right: 10px; left: 10px; z-index: 5; display: flex; align-items: center; gap: 7px; padding: 6px 7px; background: rgba(9, 28, 43, 0.82); border: 1px solid rgba(144, 190, 214, 0.12); border-radius: 7px; backdrop-filter: blur(8px); } .map-toolbar > span { display: inline-flex; flex: 1; align-items: center; gap: 6px; color: #8eabbd; font-size: 12px; } .map-toolbar button { display: inline-flex; align-items: center; gap: 4px; padding: 5px 7px; color: #9eb7c6; font-size: 12px; cursor: pointer; background: transparent; border: 1px solid transparent; border-radius: 5px; } .map-toolbar button.active { color: #d7faf5; background: rgba(15, 159, 143, 0.18); border-color: rgba(67, 212, 194, 0.22); } .map-toolbar button [data-icon] { width: 12px; height: 12px; } .ventilation-map { width: 100%; min-height: 425px; } .surface-labels text { fill: #547184; font-size: 13px; font-weight: 700; } .tunnel path { fill: none; stroke-linecap: round; stroke-linejoin: round; } .tunnel.tertiary path { stroke: #24465b; stroke-width: 16; } .tunnel.primary path { stroke: #2a5067; stroke-width: 24; } .air-flow path { fill: none; stroke: #38bdf8; stroke-width: 3; stroke-dasharray: 9 12; opacity: 0.8; animation: airflow 2.2s linear infinite; } .map-node { cursor: pointer; outline: none; } .map-node .node-pulse { opacity: 0.15; transform-origin: center; animation: nodePulse 2.4s ease-in-out infinite; } .map-node .node-ring { fill: #112b3e; stroke: #4fd9c7; stroke-width: 2; } .map-node .node-symbol { fill: none; stroke: #6fe4d4; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; } .map-node text { fill: #a5bfcd; font-size: 12px; font-weight: 600; text-anchor: middle; pointer-events: none; } .map-node.normal .node-pulse { fill: #19b59e; } .map-node.warning .node-ring { stroke: #f2a932; } .map-node.warning .node-pulse { fill: #e69b25; } .map-node.warning .node-symbol { stroke: #ffc76b; } .map-node.danger .node-ring { stroke: #f05d60; } .map-node.danger .node-pulse { fill: #df4f52; } .map-node.danger .node-symbol { stroke: #ff989a; } .map-node:hover .node-ring, .map-node.active .node-ring { stroke-width: 3; filter: brightness(1.25); } .map-detail { position: absolute; right: 12px; bottom: 12px; z-index: 6; display: none; width: min(290px, calc(100% - 24px)); padding: 12px; background: rgba(9, 29, 44, 0.94); border: 1px solid rgba(129, 176, 200, 0.18); border-radius: 8px; box-shadow: var(--shadow-lg); backdrop-filter: blur(10px); } .map-detail.show { display: block; animation: slideUp 0.2s ease; } .map-detail-head { display: flex; align-items: center; gap: 8px; color: #fff; font-size: 14px; } .map-detail-head strong { flex: 1; } .map-detail-head button { display: grid; width: 23px; height: 23px; color: #94adbb; cursor: pointer; background: transparent; border: 0; place-items: center; } .detail-status { width: 7px; height: 7px; border-radius: 50%; } .detail-status.danger { background: var(--red); box-shadow: 0 0 0 4px rgba(216, 77, 80, 0.14); } .detail-status.warning { background: var(--amber); box-shadow: 0 0 0 4px rgba(220, 139, 21, 0.14); } .detail-status.normal { background: var(--teal); box-shadow: 0 0 0 4px rgba(15, 159, 143, 0.14); } .map-detail-values { display: grid; grid-template-columns: repeat(3, 1fr); gap: 7px; margin: 11px 0; } .map-detail-values div { display: flex; flex-direction: column; padding: 7px; background: rgba(255, 255, 255, 0.045); border: 1px solid rgba(255, 255, 255, 0.06); border-radius: 6px; } .map-detail-values span { color: #7894a4; font-size: 11px; } .map-detail-values strong { margin-top: 2px; color: #e8f1f5; font-size: 14px; } .map-detail p { margin: 0 0 8px; color: #9bb1be; font-size: 12px; } .map-detail .text-button { color: #62d7c9; } .score-overview { display: flex; align-items: center; gap: 17px; padding: 6px 0 17px; } .score-ring, .evidence-ring { position: relative; display: grid; width: 122px; height: 122px; flex: 0 0 auto; place-items: center; border-radius: 50%; background: conic-gradient(var(--teal) calc(var(--score) * 1%), #e8eef1 0); } .score-ring::after, .evidence-ring::after { position: absolute; width: 94px; height: 94px; content: ""; background: #fff; border-radius: 50%; } .score-ring > div, .evidence-ring > div { position: relative; z-index: 1; display: flex; flex-direction: column; align-items: center; } .score-ring strong, .evidence-ring strong { font-size: 28px; line-height: 1; } .score-ring span, .evidence-ring span { margin-top: 5px; color: var(--muted); font-size: 12px; } .grade-copy { min-width: 0; } .grade-badge { display: inline-flex; padding: 3px 8px; color: #24724e; font-size: 13px; font-weight: 800; background: var(--green-soft); border-radius: 20px; } .grade-copy strong { display: block; margin-top: 8px; font-size: 16px; } .grade-copy p { margin: 5px 0 0; color: var(--muted); font-size: 12px; line-height: 1.6; } .score-list { display: flex; flex-direction: column; gap: 10px; padding-top: 3px; } .score-row { display: grid; grid-template-columns: 52px 1fr 34px; align-items: center; gap: 8px; color: var(--muted); font-size: 12px; } .score-row > div, .quality-track, .model-row > div { height: 5px; overflow: hidden; background: #edf2f4; border-radius: 10px; } .score-row > div i, .quality-track i, .model-row > div i { display: block; height: 100%; background: linear-gradient(90deg, #20ad9b, #63d1c4); border-radius: inherit; } .score-row strong { color: var(--ink); font-size: 13px; text-align: right; } .sensor-grid { display: grid; gap: 9px; } .sensor-metric { display: grid; grid-template-columns: minmax(120px, 1fr) 100px; grid-template-rows: auto auto; align-items: center; gap: 4px 12px; padding: 9px 10px; background: var(--surface-soft); border: 1px solid #eaf0f3; border-radius: 8px; } .sensor-label { display: flex; grid-column: 1; align-items: center; gap: 7px; color: #536574; font-size: 13px; } .sensor-icon { display: grid; width: 25px; height: 25px; place-items: center; border-radius: 6px; } .sensor-icon [data-icon] { width: 14px; height: 14px; } .sensor-icon.gas { color: var(--red); background: var(--red-soft); } .sensor-icon.blue { color: var(--blue); background: var(--blue-soft); } .sensor-icon.amber { color: var(--amber); background: var(--amber-soft); } .sensor-value { display: flex; grid-column: 1; align-items: baseline; gap: 4px; } .sensor-value strong { font-size: 22px; } .sensor-value small { color: var(--muted); font-size: 12px; } .sensor-value .trend { margin-left: auto; font-size: 11px; } .sparkline { grid-column: 2; grid-row: 1 / span 2; width: 100px; height: 38px; overflow: visible; } .sparkline path:last-child { fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; } .sparkline .spark-area { opacity: 0.08; } .danger-line path:last-child { stroke: var(--red); } .danger-line .spark-area { fill: var(--red); } .blue-line path:last-child { stroke: var(--blue); } .blue-line .spark-area { fill: var(--blue); } .amber-line path:last-child { stroke: var(--amber); } .amber-line .spark-area { fill: var(--amber); } .diagnosis-cards { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 8px; } .diagnosis-card { display: flex; min-width: 0; flex-direction: column; align-items: flex-start; padding: 11px; text-align: left; cursor: pointer; background: var(--surface-soft); border: 1px solid #e9eef1; border-radius: 8px; transition: transform 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease; } .diagnosis-card:hover { border-color: #ccd9df; box-shadow: 0 8px 18px rgba(15, 33, 48, 0.07); transform: translateY(-2px); } .diagnosis-card.danger { border-top: 2px solid var(--red); } .diagnosis-card.warning { border-top: 2px solid var(--amber); } .diagnosis-card.normal { border-top: 2px solid var(--teal); } .diagnosis-icon { display: grid; width: 30px; height: 30px; margin-bottom: 9px; color: #526c7c; place-items: center; background: #e9eff3; border-radius: 7px; } .diagnosis-card.danger .diagnosis-icon { color: var(--red); background: var(--red-soft); } .diagnosis-card.warning .diagnosis-icon { color: var(--amber); background: var(--amber-soft); } .diagnosis-card.normal .diagnosis-icon { color: var(--teal); background: var(--teal-soft); } .diagnosis-main { display: flex; min-width: 0; flex-direction: column; } .diagnosis-main strong { overflow: hidden; font-size: 14px; text-overflow: ellipsis; white-space: nowrap; } .diagnosis-main small { overflow: hidden; margin-top: 3px; color: var(--muted); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .diagnosis-score { margin-top: 11px; color: #445764; font-size: 13px; font-weight: 800; } .diagnosis-trend { margin-top: 2px; font-size: 11px; font-weight: 700; } .diagnosis-trend.danger { color: var(--red); } .diagnosis-trend.warning { color: var(--amber); } .diagnosis-trend.normal { color: var(--teal); } .knowledge-count { display: inline-flex; padding: 4px 7px; color: var(--purple); font-size: 12px; font-weight: 700; background: var(--purple-soft); border-radius: 5px; } .knowledge-search { display: flex; align-items: flex-end; gap: 7px; min-height: 38px; padding: 5px 7px 5px 11px; color: var(--purple); background: #faf9fe; border: 1px solid #e5e0f6; border-radius: 8px; } .knowledge-search > [data-icon] { align-self: center; } .knowledge-search textarea { min-width: 0; flex: 1; height: 26px; max-height: 74px; padding: 4px 0; overflow-y: hidden; font: inherit; line-height: 18px; color: inherit; resize: none; background: transparent; border: 0; outline: 0; } .knowledge-search textarea::placeholder { color: #9793a8; } .knowledge-search button { display: grid; width: 27px; height: 27px; color: #fff; cursor: pointer; background: var(--purple); border: 0; border-radius: 6px; place-items: center; } .knowledge-search button [data-icon] { width: 14px; height: 14px; } .prompt-chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 9px 0; } .prompt-chips button { padding: 5px 8px; color: #6a6679; font-size: 11px; cursor: pointer; background: #f6f4fb; border: 1px solid #e8e4f3; border-radius: 20px; } .prompt-chips button:hover { color: var(--purple); border-color: #d5cbed; } .answer-preview { padding: 10px; background: #fafbfc; border-left: 2px solid var(--purple); border-radius: 0 7px 7px 0; } .answer-head { display: flex; align-items: center; gap: 6px; } .answer-head [data-icon] { width: 14px; height: 14px; color: var(--purple); } .answer-head strong { font-size: 13px; } .answer-head > span:last-child { margin-left: auto; color: var(--muted); font-size: 11px; } .answer-preview p { margin: 7px 0; color: #566775; font-size: 12px; line-height: 1.7; } .answer-sources { display: flex; flex-wrap: wrap; gap: 5px; } .answer-sources span { padding: 3px 5px; color: #6f6a80; font-size: 11px; background: #f0edfa; border-radius: 4px; } .task-list { display: grid; gap: 6px; } .task-row { display: grid; grid-template-columns: 26px minmax(0, 1fr) auto 16px; align-items: center; gap: 9px; width: 100%; padding: 9px 8px; text-align: left; cursor: pointer; background: var(--surface-soft); border: 1px solid #e9eef1; border-radius: 7px; transition: background 0.18s ease, border-color 0.18s ease, transform 0.18s ease; } .task-row:hover { background: #fff; border-color: #cdd9df; transform: translateX(2px); } .task-priority { display: grid; width: 23px; height: 23px; font-size: 12px; font-weight: 800; place-items: center; border-radius: 6px; } .task-priority.high { color: var(--red); background: var(--red-soft); } .task-priority.medium { color: var(--amber); background: var(--amber-soft); } .task-priority.low { color: #607585; background: #edf1f4; } .task-main { display: flex; min-width: 0; flex-direction: column; } .task-main strong { overflow: hidden; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; } .task-main small { margin-top: 3px; color: var(--muted); font-size: 11px; } .task-state { padding: 3px 6px; font-size: 11px; font-style: normal; font-weight: 700; border-radius: 5px; } .task-state.processing { color: #236cae; background: var(--blue-soft); } .task-state.pending { color: #aa6915; background: var(--amber-soft); } .task-row > [data-icon] { width: 13px; height: 13px; color: var(--muted-2); } .source-grid, .object-grid, .knowledge-category-grid, .settings-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 13px; margin-bottom: 14px; } .source-card { padding: 14px; background: #fff; border: 1px solid var(--line); border-radius: var(--radius-md); box-shadow: var(--shadow-sm); } .source-card-button { display: block; width: 100%; color: inherit; text-align: left; cursor: pointer; transition: transform 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease; } .source-card-button:hover { border-color: #cfbfe9; box-shadow: 0 10px 24px rgba(58, 41, 94, 0.1); transform: translateY(-2px); } .facility-overview-banner { position: relative; display: flex; align-items: center; justify-content: space-between; gap: 28px; overflow: hidden; margin-bottom: 14px; padding: 22px 24px; color: #effcfb; background: linear-gradient(112deg, rgba(8, 62, 74, 0.98), rgba(10, 35, 56, 0.99)), #0b293b; border: 1px solid rgba(81, 210, 195, 0.3); border-radius: 10px; box-shadow: 0 18px 38px rgba(8, 33, 49, 0.2); } .facility-overview-banner::after { position: absolute; inset: 0; pointer-events: none; content: ""; background: linear-gradient(90deg, transparent 0 67%, rgba(94, 218, 204, 0.05) 67% 67.2%, transparent 67.2%), repeating-linear-gradient(180deg, rgba(255, 255, 255, 0.025) 0 1px, transparent 1px 12px); mask-image: linear-gradient(90deg, transparent 38%, #000 100%); } .facility-overview-banner > * { position: relative; z-index: 1; } .facility-overview-banner h2 { margin: 5px 0 0; font-size: 23px; letter-spacing: 0; } .facility-overview-banner p { max-width: 790px; margin: 7px 0 0; color: #abc7cf; font-size: 13px; } .facility-overview-banner .eyebrow { color: #63ddcf; } .facility-overview-meta { display: grid; min-width: 205px; align-items: center; gap: 4px; padding: 13px 15px; background: rgba(255, 255, 255, 0.07); border: 1px solid rgba(120, 226, 213, 0.18); border-radius: 8px; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04); } .facility-live-state { display: inline-flex; align-items: center; gap: 6px; color: #65ddd0; font-size: 12px; font-weight: 700; } .facility-overview-meta strong { font-size: 14px; } .facility-overview-meta small { color: #91adb7; font-size: 11px; } .facility-summary-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-bottom: 18px; } .facility-summary-card { position: relative; display: grid; grid-template-columns: 44px minmax(0, 1fr); align-items: center; gap: 12px; overflow: hidden; min-height: 92px; padding: 15px 16px 14px; background: linear-gradient(180deg, #fff, #fbfdfd); border: 1px solid var(--line); border-radius: 8px; box-shadow: 0 1px 2px rgba(15, 33, 48, 0.04); transition: transform 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease; } .facility-summary-card:hover { border-color: #c8d8df; box-shadow: 0 10px 22px rgba(15, 33, 48, 0.08); transform: translateY(-2px); } .facility-summary-card::after { position: absolute; top: 0; left: 0; right: 0; height: 3px; content: ""; background: var(--teal); } .facility-summary-online::after { background: var(--green); } .facility-summary-alarm::after { background: var(--red); } .facility-summary-offline::after { background: var(--amber); } .facility-summary-icon { display: grid; width: 42px; height: 42px; color: var(--teal); background: var(--teal-soft); border-radius: 8px; place-items: center; } .facility-summary-icon [data-icon] { width: 21px; height: 21px; } .facility-summary-online .facility-summary-icon { color: var(--green); background: var(--green-soft); } .facility-summary-alarm .facility-summary-icon { color: var(--red); background: var(--red-soft); } .facility-summary-offline .facility-summary-icon { color: var(--amber); background: var(--amber-soft); } .facility-summary-card div { display: grid; min-width: 0; } .facility-summary-card strong { margin-top: 1px; font-size: 26px; line-height: 1.1; } .facility-summary-card small { overflow: hidden; margin-top: 3px; color: var(--muted); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .facility-section-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin: 5px 0 11px; } .facility-section-head h2 { margin: 3px 0 0; font-size: 18px; } .facility-layout { display: grid; grid-template-columns: minmax(0, 1.45fr) minmax(320px, 0.85fr); align-items: start; gap: 14px; } .facility-category-panel { min-width: 0; } .facility-category-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin-bottom: 18px; } .facility-category-card { position: relative; grid-template-columns: 50px minmax(0, 1fr) auto; min-height: 94px; padding: 14px; overflow: hidden; color: var(--ink); text-align: left; cursor: pointer; background: #fff; border: 1px solid var(--line); border-radius: 8px; box-shadow: 0 1px 2px rgba(15, 33, 48, 0.04); transition: transform 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease, background 0.18s ease; } .facility-category-card::after { position: absolute; top: 0; bottom: 0; left: 0; width: 3px; content: ""; background: #18a696; opacity: 0; transition: opacity 0.18s ease; } .facility-category-card:hover, .facility-category-card.active { background: #fbfefe; border-color: #9bd8d0; box-shadow: 0 11px 24px rgba(15, 33, 48, 0.09); transform: translateY(-2px); } .facility-category-card.active::after { opacity: 1; } .facility-category-icon { width: 48px; height: 48px; color: #0c8e81; background: #e5f7f4; border-radius: 8px; } .facility-category-card:nth-child(4n + 2) .facility-category-icon { color: #246fbd; background: var(--blue-soft); } .facility-category-card:nth-child(4n + 3) .facility-category-icon { color: #8c67d2; background: var(--purple-soft); } .facility-category-card:nth-child(4n + 4) .facility-category-icon { color: #b8770f; background: var(--amber-soft); } .facility-category-icon [data-icon] { width: 24px; height: 24px; } .facility-category-copy { display: grid; align-content: center; gap: 5px; } .facility-category-title { display: flex; align-items: center; gap: 7px; } .facility-category-title i { width: 7px; height: 7px; border-radius: 50%; background: var(--green); } .facility-category-title i.warning { background: var(--red); box-shadow: 0 0 0 3px rgba(216, 77, 80, 0.12); } .facility-category-title i.offline { background: var(--amber); box-shadow: 0 0 0 3px rgba(220, 139, 21, 0.12); } .facility-category-copy small { overflow: hidden; color: var(--muted); font-size: 12px; text-overflow: ellipsis; white-space: nowrap; } .facility-category-counts { display: grid; grid-template-columns: repeat(3, minmax(46px, auto)); gap: 5px; align-items: center; padding-left: 8px; } .facility-category-counts > span { display: grid; justify-items: center; min-height: 46px; align-content: center; padding: 5px 7px; color: var(--muted); background: #f6f9fa; border-radius: 6px; } .facility-category-counts b { color: var(--ink); font-size: 16px; line-height: 1.05; } .facility-category-counts small { margin-top: 3px; font-size: 10px; white-space: nowrap; } .facility-detail-panel { min-height: 250px; padding: 18px; background: linear-gradient(180deg, #fff 0%, #fcfefe 100%); } .facility-detail-panel .facility-detail-list { grid-template-columns: minmax(0, 1fr); } .facility-detail-subtitle { margin: 4px 0 0; color: var(--muted); font-size: 12px; } .facility-detail-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 9px; } .facility-detail-row { display: grid; grid-template-columns: 34px minmax(0, 1fr) auto; align-items: center; padding: 11px 12px; background: #f9fbfc; border: 1px solid #e7edf0; border-radius: 7px; transition: border-color 0.18s ease, background 0.18s ease; } .facility-detail-row:hover { background: #fff; border-color: #cfdce3; } .facility-detail-device-icon { display: grid; width: 30px; height: 30px; color: var(--teal); background: var(--teal-soft); border-radius: 7px; place-items: center; } .facility-detail-device-icon [data-icon] { width: 16px; height: 16px; } .facility-detail-copy { min-width: 0; } .facility-detail-copy strong { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .facility-detail-state { display: inline-flex; align-items: center; gap: 5px; padding: 4px 8px; font-size: 11px; font-weight: 700; border-radius: 999px; white-space: nowrap; } .facility-detail-state i { width: 6px; height: 6px; background: currentColor; border-radius: 50%; } .facility-detail-state.normal { color: #397d56; background: var(--green-soft); } .facility-detail-state.warning { color: #a56d13; background: var(--amber-soft); } .facility-detail-state.offline { color: var(--red); background: var(--red-soft); } @media (min-width: 1680px) { .facility-category-panel .facility-category-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } } @media (max-width: 1180px) { .facility-summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 980px) { .facility-layout { grid-template-columns: minmax(0, 1fr); } .facility-detail-panel .facility-detail-list { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 680px) { .facility-overview-banner { align-items: flex-start; flex-direction: column; gap: 16px; padding: 19px 18px; } .facility-overview-meta { width: 100%; min-width: 0; } .facility-summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } .facility-summary-card { grid-template-columns: 38px minmax(0, 1fr); gap: 9px; min-height: 84px; padding: 13px 12px; } .facility-summary-icon { width: 36px; height: 36px; } .facility-summary-card strong { font-size: 22px; } .facility-category-grid, .facility-detail-panel .facility-detail-list { grid-template-columns: 1fr; } .facility-category-card { grid-template-columns: 50px minmax(0, 1fr); min-height: 0; } .facility-category-counts { grid-column: 1 / -1; padding: 9px 0 0; border-top: 1px solid #edf1f3; } } .safety-overview-strip { position: relative; display: flex; align-items: center; justify-content: space-between; gap: 24px; overflow: hidden; margin-bottom: 14px; padding: 21px 23px; color: #effcfb; background: linear-gradient(112deg, rgba(8, 61, 75, 0.98), rgba(11, 42, 62, 0.99)), #0b293b; border: 1px solid rgba(81, 210, 195, 0.28); border-radius: 10px; box-shadow: 0 17px 36px rgba(8, 33, 49, 0.18); } .safety-overview-strip::after { position: absolute; inset: 0; pointer-events: none; content: ""; background: linear-gradient(90deg, transparent 0 72%, rgba(94, 218, 204, 0.06) 72% 72.15%, transparent 72.15%), repeating-linear-gradient(180deg, rgba(255, 255, 255, 0.024) 0 1px, transparent 1px 12px); mask-image: linear-gradient(90deg, transparent 34%, #000 100%); } .safety-overview-strip > * { position: relative; z-index: 1; } .safety-overview-copy h2 { margin: 4px 0 0; font-size: 22px; } .safety-overview-copy p { max-width: 780px; margin: 7px 0 0; color: #abc7cf; font-size: 13px; } .safety-overview-copy .eyebrow { color: #63ddcf; } .safety-overview-status { display: flex; min-width: 214px; align-items: center; gap: 10px; padding: 12px 14px; background: rgba(255, 255, 255, 0.07); border: 1px solid rgba(120, 226, 213, 0.18); border-radius: 8px; } .safety-overview-status > div { display: grid; min-width: 0; } .safety-overview-status strong { overflow: hidden; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; } .safety-overview-status small { margin-top: 2px; overflow: hidden; color: #91adb7; font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .safety-summary-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-bottom: 14px; } .safety-summary-card { position: relative; display: grid; grid-template-columns: 42px minmax(0, 1fr); align-items: center; gap: 11px; min-height: 88px; overflow: hidden; padding: 14px; background: #fff; border: 1px solid var(--line); border-radius: 8px; box-shadow: 0 1px 2px rgba(15, 33, 48, 0.04); } .safety-summary-card::before { position: absolute; top: 0; bottom: 0; left: 0; width: 3px; content: ""; background: var(--teal); } .safety-summary-card.online::before { background: var(--green); } .safety-summary-card.warning::before { background: var(--amber); } .safety-summary-card.latency::before { background: var(--blue); } .safety-summary-icon { display: grid; width: 40px; height: 40px; color: var(--teal); background: var(--teal-soft); border-radius: 8px; place-items: center; } .safety-summary-icon [data-icon] { width: 20px; height: 20px; } .safety-summary-card.online .safety-summary-icon { color: var(--green); background: var(--green-soft); } .safety-summary-card.warning .safety-summary-icon { color: var(--amber); background: var(--amber-soft); } .safety-summary-card.latency .safety-summary-icon { color: var(--blue); background: var(--blue-soft); } .safety-summary-card > div { display: grid; min-width: 0; } .safety-summary-card small { color: var(--muted); font-size: 11px; } .safety-summary-card strong { margin-top: 1px; font-size: 24px; line-height: 1.1; } .safety-summary-card p { overflow: hidden; margin: 2px 0 0; color: var(--muted-2); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; } .safety-monitoring-layout { display: grid; grid-template-columns: minmax(0, 1.65fr) minmax(330px, 0.75fr); align-items: start; gap: 14px; margin-bottom: 14px; } .safety-chart-panel, .safety-insight-panel { min-width: 0; } .safety-chart-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 13px; } .safety-chart-head h2 { margin: 3px 0 0; font-size: 19px; } .safety-chart-head p { margin: 4px 0 0; color: var(--muted); font-size: 12px; } .safety-chart-current { display: grid; min-width: 124px; justify-items: end; padding-left: 16px; border-left: 1px solid var(--line); } .safety-chart-current span { color: var(--muted); font-size: 11px; } .safety-chart-current strong { margin-top: 1px; font-size: 25px; line-height: 1.1; } .safety-chart-current small { color: var(--muted); font-size: 11px; } .safety-chart-toolbar { display: flex; flex-direction: column; align-items: stretch; gap: 12px; margin-bottom: 12px; } .safety-metric-tabs { display: grid; min-width: 0; flex: 1; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; } .safety-chart-toolbar .segmented-control { align-self: flex-end; } .safety-metric-tab { position: relative; display: grid; grid-template-columns: 30px minmax(0, 1fr) 60px; align-items: center; gap: 6px; min-width: 0; padding: 9px 8px; color: var(--ink); text-align: left; cursor: pointer; background: #f8fafb; border: 1px solid #e5ebee; border-radius: 7px; transition: background 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease; } .safety-metric-tab:hover, .safety-metric-tab.active { background: #fff; border-color: #a5d9d2; box-shadow: 0 7px 18px rgba(15, 33, 48, 0.07); } .safety-metric-tab.active::after { position: absolute; right: 8px; bottom: -1px; left: 8px; height: 2px; content: ""; background: var(--teal); border-radius: 2px 2px 0 0; } .safety-metric-tab-icon { display: grid; width: 30px; height: 30px; color: var(--teal); background: var(--teal-soft); border-radius: 7px; place-items: center; } .safety-metric-tab-icon [data-icon] { width: 16px; height: 16px; } .safety-metric-tab[data-tone="red"] .safety-metric-tab-icon { color: var(--red); background: var(--red-soft); } .safety-metric-tab[data-tone="blue"] .safety-metric-tab-icon { color: var(--blue); background: var(--blue-soft); } .safety-metric-tab[data-tone="amber"] .safety-metric-tab-icon { color: var(--amber); background: var(--amber-soft); } .safety-metric-tab[data-tone="purple"] .safety-metric-tab-icon { color: var(--purple); background: var(--purple-soft); } .safety-metric-tab[data-tone="green"] .safety-metric-tab-icon { color: var(--green); background: var(--green-soft); } .safety-metric-tab-copy { display: grid; min-width: 0; gap: 2px; } .safety-metric-tab-copy > span { display: flex; min-width: 0; align-items: baseline; justify-content: space-between; gap: 5px; } .safety-metric-tab-copy strong { overflow: hidden; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; } .safety-metric-tab-copy small { color: var(--muted); font-size: 9px; white-space: nowrap; } .safety-metric-tab-copy > span small { display: none; } .safety-metric-tab-copy b { display: block; min-width: 0; overflow: hidden; font-size: 14px; text-overflow: ellipsis; white-space: nowrap; } .safety-metric-tab-copy b small { font-size: 9px; font-weight: 500; } .safety-sparkline { width: 60px; height: 28px; color: var(--teal); } .safety-sparkline polyline { fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; } .safety-sparkline.red { color: var(--red); } .safety-sparkline.blue { color: var(--blue); } .safety-sparkline.amber { color: var(--amber); } .safety-sparkline.purple { color: var(--purple); } .safety-sparkline.green { color: var(--green); } .safety-chart-shell { min-height: 260px; overflow: hidden; background: linear-gradient(180deg, rgba(248, 251, 252, 0.78), rgba(255, 255, 255, 0.2)), #fff; border: 1px solid #e7edf0; border-radius: 8px; } .safety-chart-svg { display: block; width: 100%; height: auto; } .safety-chart-grid-line { stroke: #e8eef1; stroke-width: 1; stroke-dasharray: 3 5; } .safety-chart-axis-label, .safety-chart-time-label { fill: #8a99a5; font-size: 10px; } .safety-chart-threshold { stroke-width: 1.2; stroke-dasharray: 5 5; } .safety-chart-threshold.warning { stroke: rgba(220, 139, 21, 0.65); } .safety-chart-threshold.alarm { stroke: rgba(216, 77, 80, 0.72); } .safety-chart-threshold-label { font-size: 9px; font-weight: 700; } .safety-chart-threshold-label.warning { fill: #ad7213; } .safety-chart-threshold-label.alarm { fill: #b43e42; } .safety-chart-actual-path { fill: none; stroke: var(--teal); stroke-width: 3; stroke-linecap: round; stroke-linejoin: round; } .safety-chart-actual-path.red { stroke: var(--red); } .safety-chart-actual-path.blue { stroke: var(--blue); } .safety-chart-actual-path.amber { stroke: var(--amber); } .safety-chart-actual-path.purple { stroke: var(--purple); } .safety-chart-actual-path.green { stroke: var(--green); } .safety-chart-forecast-path { fill: none; stroke: #7c63c8; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 7 5; } .safety-chart-now-line { stroke: #a9b6bf; stroke-width: 1; stroke-dasharray: 3 4; } .safety-chart-current-point { fill: var(--teal); stroke: #fff; stroke-width: 2; } .safety-chart-current-point.red { fill: var(--red); } .safety-chart-current-point.blue { fill: var(--blue); } .safety-chart-current-point.amber { fill: var(--amber); } .safety-chart-current-point.purple { fill: var(--purple); } .safety-chart-current-point.green { fill: var(--green); } .safety-chart-current-halo { fill: none; stroke: var(--teal); stroke-width: 1; opacity: 0.25; } .safety-chart-current-halo.red { stroke: var(--red); } .safety-chart-current-halo.blue { stroke: var(--blue); } .safety-chart-current-halo.amber { stroke: var(--amber); } .safety-chart-current-halo.purple { stroke: var(--purple); } .safety-chart-current-halo.green { stroke: var(--green); } .safety-chart-legend { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 10px; color: var(--muted); font-size: 11px; } .safety-chart-legend span { display: inline-flex; align-items: center; gap: 6px; } .safety-chart-legend i { width: 18px; height: 2px; border-radius: 2px; } .safety-chart-legend i.actual { background: var(--teal); } .safety-chart-legend i.forecast { background: repeating-linear-gradient(90deg, var(--purple) 0 5px, transparent 5px 8px); } .safety-chart-legend i.threshold { background: repeating-linear-gradient(90deg, var(--red) 0 4px, transparent 4px 7px); } .safety-insight-panel { min-height: 100%; } .safety-risk-summary { display: grid; grid-template-columns: 104px minmax(0, 1fr); align-items: center; gap: 16px; padding: 14px; background: #f8fafb; border: 1px solid #e8eef1; border-radius: 8px; } .safety-risk-ring { --risk-progress: 0%; --risk-color: var(--green); position: relative; display: grid; width: 96px; height: 96px; align-content: center; justify-items: center; background: conic-gradient(var(--risk-color) var(--risk-progress), #e6ecef 0); border-radius: 50%; } .safety-risk-ring[data-level="warning"] { --risk-color: var(--amber); } .safety-risk-ring[data-level="alarm"], .safety-risk-ring[data-level="offline"] { --risk-color: var(--red); } .safety-risk-ring::before { position: absolute; inset: 8px; content: ""; background: #fff; border-radius: 50%; } .safety-risk-ring strong, .safety-risk-ring small { position: relative; z-index: 1; } .safety-risk-ring strong { font-size: 27px; line-height: 1; } .safety-risk-ring small { margin-top: 4px; color: var(--muted); font-size: 10px; } .safety-risk-summary > div:last-child { min-width: 0; } .safety-risk-label { display: inline-flex; align-items: center; padding: 3px 7px; color: #327751; font-size: 11px; font-weight: 700; background: var(--green-soft); border-radius: 5px; } .safety-risk-label.warning { color: #9b6810; background: var(--amber-soft); } .safety-risk-label.alarm, .safety-risk-label.offline { color: #ad3d41; background: var(--red-soft); } .safety-risk-summary p { margin: 7px 0 0; color: var(--muted); font-size: 11px; line-height: 1.65; } .safety-insight-block { display: flex; gap: 10px; margin-top: 13px; padding: 12px; color: #5f5591; background: var(--purple-soft); border-radius: 7px; } .safety-insight-block > [data-icon] { width: 17px; height: 17px; flex: 0 0 auto; color: var(--purple); } .safety-insight-block strong { display: block; color: #4e4678; font-size: 12px; } .safety-insight-block p { margin: 4px 0 0; color: #766d9e; font-size: 11px; line-height: 1.65; } .safety-recommendations { display: grid; gap: 8px; margin-top: 13px; } .safety-recommendation-item { display: grid; grid-template-columns: 24px minmax(0, 1fr); align-items: start; gap: 8px; padding: 9px 10px; background: #fbfcfd; border: 1px solid #e8eef1; border-radius: 7px; } .safety-recommendation-item > span { display: grid; width: 24px; height: 24px; color: #28766d; font-size: 9px; font-weight: 800; background: var(--teal-soft); border-radius: 6px; place-items: center; } .safety-recommendation-item p { margin: 2px 0 0; color: #526574; font-size: 11px; line-height: 1.55; } .safety-bottom-grid { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr); gap: 14px; } .safety-sensor-list, .safety-alarm-list { display: grid; gap: 8px; } .safety-sensor-row { display: grid; grid-template-columns: 34px minmax(0, 1fr) auto auto; align-items: center; gap: 9px; width: 100%; padding: 10px 11px; color: var(--ink); text-align: left; cursor: pointer; background: #fafcfd; border: 1px solid #e8eef1; border-radius: 7px; transition: background 0.18s ease, border-color 0.18s ease; } .safety-sensor-row:hover { background: #fff; border-color: #b9dcd7; } .safety-sensor-icon { display: grid; width: 32px; height: 32px; color: var(--teal); background: var(--teal-soft); border-radius: 7px; place-items: center; } .safety-sensor-icon [data-icon] { width: 16px; height: 16px; } .safety-sensor-copy, .safety-sensor-value { display: grid; min-width: 0; } .safety-sensor-copy strong, .safety-sensor-value strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .safety-sensor-copy strong { font-size: 12px; } .safety-sensor-copy small, .safety-sensor-value small { color: var(--muted); font-size: 10px; } .safety-sensor-value { justify-items: end; } .safety-sensor-value strong { font-size: 14px; } .safety-sensor-state { display: inline-flex; align-items: center; gap: 5px; min-width: 48px; padding: 4px 7px; color: #397d56; font-size: 10px; font-weight: 700; background: var(--green-soft); border-radius: 999px; } .safety-sensor-state i { width: 5px; height: 5px; background: currentColor; border-radius: 50%; } .safety-sensor-state.warning { color: #a56d13; background: var(--amber-soft); } .safety-sensor-state.alarm, .safety-sensor-state.offline { color: var(--red); background: var(--red-soft); } .safety-alarm-row { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: start; gap: 9px; padding: 10px 11px; background: #fafcfd; border: 1px solid #e8eef1; border-radius: 7px; } .safety-alarm-level { padding: 4px 6px; color: #9b6810; font-size: 10px; font-weight: 700; background: var(--amber-soft); border-radius: 5px; white-space: nowrap; } .safety-alarm-level.high { color: #ad3d41; background: var(--red-soft); } .safety-alarm-level.low { color: #397d56; background: var(--green-soft); } .safety-alarm-row > div { min-width: 0; } .safety-alarm-row strong { display: block; overflow: hidden; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; } .safety-alarm-row p { margin: 4px 0 0; color: var(--muted); font-size: 10px; line-height: 1.55; } .safety-alarm-row time { color: var(--muted-2); font-size: 10px; white-space: nowrap; } .safety-empty-state { display: grid; min-height: 130px; align-content: center; justify-items: center; color: var(--muted); background: #fafcfd; border: 1px dashed #dce5e9; border-radius: 8px; } .safety-empty-state [data-icon] { width: 23px; height: 23px; color: var(--green); } .safety-empty-state p { margin: 7px 0 0; font-size: 12px; } @media (max-width: 1320px) { .safety-monitoring-layout { grid-template-columns: minmax(0, 1.45fr) minmax(310px, 0.8fr); } .safety-metric-tabs { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 1080px) { .safety-summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .safety-monitoring-layout, .safety-bottom-grid { grid-template-columns: minmax(0, 1fr); } } @media (max-width: 760px) { .safety-overview-strip, .safety-chart-head, .safety-chart-toolbar { align-items: flex-start; flex-direction: column; } .safety-overview-status { width: 100%; min-width: 0; } .safety-chart-current { width: 100%; justify-items: start; padding: 10px 0 0; border-top: 1px solid rgba(220, 228, 233, 0.8); border-left: 0; } .safety-metric-tabs { grid-template-columns: repeat(2, minmax(0, 1fr)); } .safety-chart-toolbar .segmented-control { width: 100%; } .safety-chart-toolbar .segmented-control button { flex: 1; } .safety-risk-summary { grid-template-columns: 92px minmax(0, 1fr); } .safety-risk-ring { width: 84px; height: 84px; } } @media (max-width: 560px) { .safety-summary-grid, .safety-metric-tabs { grid-template-columns: minmax(0, 1fr); } .safety-sensor-row { grid-template-columns: 32px minmax(0, 1fr) auto; } .safety-sensor-state { grid-column: 2 / -1; justify-self: start; } .safety-alarm-row { grid-template-columns: auto minmax(0, 1fr); } .safety-alarm-row time { grid-column: 2; } } .video-summary-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-bottom: 14px; } .video-module-tabs { display: flex; gap: 8px; margin-bottom: 13px; padding: 5px; background: #edf3f6; border: 1px solid var(--line); border-radius: 8px; width: fit-content; } .video-module-tabs button { display: inline-flex; align-items: center; gap: 6px; min-height: 34px; padding: 0 12px; color: #637584; font-size: 13px; font-weight: 700; cursor: pointer; background: transparent; border: 0; border-radius: 6px; } .video-module-tabs button.active { color: var(--teal); background: #fff; box-shadow: 0 1px 4px rgba(15, 33, 48, 0.08); } .video-module-tabs [data-icon] { width: 15px; height: 15px; } .video-summary-card { display: grid; grid-template-columns: 42px minmax(0, 1fr); align-items: center; gap: 11px; min-height: 88px; padding: 14px; background: #fff; border: 1px solid var(--line); border-radius: 8px; box-shadow: 0 1px 2px rgba(15, 33, 48, 0.04); } .video-summary-icon { display: grid; width: 40px; height: 40px; color: var(--blue); background: var(--blue-soft); border-radius: 8px; place-items: center; } .video-summary-icon [data-icon] { width: 20px; height: 20px; } .video-summary-card.online .video-summary-icon { color: var(--green); background: var(--green-soft); } .video-summary-card.warning .video-summary-icon { color: var(--amber); background: var(--amber-soft); } .video-summary-card.ai .video-summary-icon { color: var(--purple); background: var(--purple-soft); } .video-summary-card > div { display: grid; min-width: 0; } .video-summary-card small { color: var(--muted); font-size: 11px; } .video-summary-card strong { margin-top: 1px; font-size: 24px; } .video-summary-card p { overflow: hidden; margin: 2px 0 0; color: var(--muted-2); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; } .video-platform-layout { display: grid; grid-template-columns: 250px minmax(0, 1fr); align-items: start; gap: 14px; } .video-device-panel { display: flex; min-width: 0; flex-direction: column; } .video-channel-search { display: flex; align-items: center; gap: 7px; height: 36px; margin-bottom: 11px; padding: 0 10px; background: #f8fafb; border: 1px solid var(--line); border-radius: 7px; } .video-channel-search [data-icon] { width: 15px; height: 15px; color: var(--muted); } .video-channel-search input { min-width: 0; flex: 1; color: var(--ink); background: transparent; border: 0; outline: 0; } .video-device-tree { display: grid; align-content: start; min-height: 0; flex: 1; gap: 12px; overflow-y: auto; padding-right: 3px; } .video-tree-group { display: grid; gap: 7px; } .video-tree-group-head { display: flex; align-items: center; gap: 6px; color: #536574; font-size: 12px; } .video-tree-group-head [data-icon] { width: 14px; height: 14px; color: var(--blue); } .video-tree-group-head small { margin-left: auto; color: var(--muted); } .video-tree-channels { display: grid; align-content: start; gap: 9px; } .video-tree-flat { height: fit-content; } .video-tree-channel { align-self: start; } .video-tree-channel { display: grid; grid-template-columns: 8px minmax(0, 1fr) auto; align-items: center; gap: 8px; width: 100%; padding: 11px 9px; color: var(--ink); text-align: left; cursor: pointer; background: #fafcfd; border: 1px solid transparent; border-radius: 7px; } .video-tree-channel:hover, .video-tree-channel.active { background: #fff; border-color: #a9d9d2; } .video-tree-channel > i { width: 7px; height: 7px; background: var(--green); border-radius: 50%; } .video-tree-channel > i.offline { background: var(--amber); } .video-tree-channel > span { display: grid; min-width: 0; } .video-tree-channel strong { overflow: hidden; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; } .video-tree-channel small { overflow: hidden; color: var(--muted); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; } .video-tree-channel em { color: var(--muted); font-size: 10px; font-style: normal; } .video-main-column { display: grid; min-width: 0; gap: 14px; } .video-primary-layout { display: grid; grid-template-columns: minmax(0, 1fr); align-items: start; gap: 14px; } .video-side-column { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); min-width: 0; gap: 14px; } .video-status-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; } .video-status-item { position: relative; display: grid; min-height: 68px; align-content: center; justify-items: center; padding: 9px; background: #f7fafb; border: 1px solid #e7edf0; border-radius: 7px; } .video-status-item strong { color: var(--ink); font-size: 21px; line-height: 1; } .video-status-item span { margin-top: 5px; color: var(--muted); font-size: 11px; } .video-status-item small { position: absolute; top: 6px; right: 7px; color: var(--muted-2); font-size: 9px; } .video-wall-panel { display: flex; min-width: 0; flex-direction: column; } .video-wall { display: grid; flex: 1; align-content: start; gap: 8px; } .video-wall.layout-1 { grid-template-columns: minmax(0, 1fr); } .video-wall.layout-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .video-wall.layout-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .video-wall.layout-6 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .video-wall.layout-9 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .video-tile { min-width: 0; overflow: hidden; background: #071a26; border: 1px solid #173c4d; border-radius: 8px; } .video-tile-stage { position: relative; aspect-ratio: 16 / 9; overflow: hidden; background: linear-gradient(145deg, rgba(16, 56, 72, 0.8), rgba(5, 23, 35, 0.95)), #071a26; } .video-tile-placeholder { position: absolute; inset: 0; display: grid; align-content: center; justify-items: center; color: #8fb1bd; text-align: center; } .video-tile-placeholder [data-icon] { width: 30px; height: 30px; color: #4fd0c1; } .video-tile-placeholder strong { margin-top: 8px; color: #e8f5f7; font-size: 13px; } .video-tile-placeholder small { margin-top: 4px; color: #7f9ba7; font-size: 10px; } .video-tile-status { position: absolute; top: 9px; left: 9px; display: inline-flex; align-items: center; gap: 5px; padding: 3px 7px; color: #b9ead4; font-size: 10px; background: rgba(4, 24, 33, 0.72); border-radius: 5px; } .video-tile-status i { width: 6px; height: 6px; background: var(--green); border-radius: 50%; } .video-tile.offline .video-tile-status i { background: var(--amber); } .video-tile-player { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; background: #04141d; } .video-tile-status, .video-tile-copy, .video-tile-tools { z-index: 2; } .video-tile.fault .video-tile-status i { background: var(--red); } .video-tile-copy { position: absolute; right: 9px; bottom: 9px; left: 9px; display: grid; color: #fff; } .video-tile-copy strong { overflow: hidden; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; } .video-tile-copy small { overflow: hidden; color: #aac2cb; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; } .video-tile-tools { position: absolute; top: 8px; right: 8px; display: flex; gap: 4px; opacity: 0; transition: opacity 0.18s ease; } .video-tile:hover .video-tile-tools { opacity: 1; } .video-tile-tools button { display: grid; width: 28px; height: 28px; color: #dcecf0; cursor: pointer; background: rgba(5, 25, 36, 0.76); border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 6px; place-items: center; } .video-tile-tools [data-icon] { width: 14px; height: 14px; } .video-stream-note { display: flex; gap: 7px; margin-top: 10px; color: #796a3d; background: var(--amber-soft); border-radius: 7px; padding: 9px 10px; } .video-stream-note [data-icon] { width: 15px; height: 15px; flex: 0 0 auto; } .video-stream-note p { margin: 0; font-size: 11px; } .video-event-list { display: grid; gap: 8px; } .video-event-row { display: grid; grid-template-columns: 60px minmax(0, 1fr); align-items: start; gap: 9px; padding: 10px; background: #fafcfd; border: 1px solid #e8eef1; border-radius: 7px; } .video-event-row.success { background: #effaf4; border-color: #d3eedf; } .video-event-row.warning { background: #fff8e8; border-color: #f3e1b6; } .video-event-row.danger { background: #fff0f0; border-color: #f1cfd0; } .video-event-row.gray { background: #f7f9fa; border-color: #e8eef1; } .video-event-level { padding: 4px 6px; color: #9b6810; font-size: 10px; font-weight: 700; background: var(--amber-soft); border-radius: 5px; white-space: nowrap; } .video-event-level.high { color: #ad3d41; background: var(--red-soft); } .video-event-row strong { display: block; overflow: hidden; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; } .video-event-row p { margin: 4px 0 0; color: var(--muted); font-size: 10px; line-height: 1.55; } .video-event-row time { color: var(--muted-2); font-size: 10px; white-space: nowrap; } .video-event-row > p { margin: 0; } .video-filter-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 14px 0; padding: 11px 13px; background: #fff; border: 1px solid var(--line); border-radius: 8px; box-shadow: var(--shadow-sm); } .video-filter-bar-inline { margin: 0 0 13px; padding: 10px; background: #f8fafb; border-color: #e7edf0; box-shadow: none; } .video-filter-bar label { display: inline-flex; align-items: center; gap: 6px; color: var(--muted); font-size: 11px; } .video-filter-bar input, .video-filter-bar select { height: 32px; padding: 0 8px; color: var(--ink); background: #fff; border: 1px solid var(--line-strong); border-radius: 6px; } .video-filter-bar > button, .video-filter-actions button { min-height: 32px; padding: 0 10px; color: #526574; font-size: 11px; font-weight: 700; cursor: pointer; background: #f7fafb; border: 1px solid var(--line-strong); border-radius: 6px; } .video-filter-actions { display: flex; gap: 8px; margin-left: auto; } .video-filter-actions .primary-button { color: #fff; background: var(--teal); border-color: var(--teal); } .video-insight-row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); align-items: stretch; gap: 14px; margin-top: 22px; margin-bottom: 14px; } /* 状态总览 / 视频分析事件 / 通行与操作记录 三个面板等高 */ .video-status-panel, .video-event-panel, .video-records-panel { display: flex; flex-direction: column; } .video-status-grid { flex: 1; align-content: stretch; } .video-event-list { flex: 1; min-height: 0; overflow-y: auto; align-content: start; } .video-event-pagination { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; margin-top: 10px; padding-top: 9px; color: var(--muted); font-size: 10px; border-top: 1px solid #edf1f4; } .video-event-pagination > div { display: flex; flex-wrap: wrap; gap: 3px; } .video-event-pagination button { display: grid; min-width: 24px; height: 24px; padding: 0 6px; color: #627483; font-size: 10px; cursor: pointer; background: #fff; border: 1px solid var(--line); border-radius: 5px; place-items: center; } .video-event-pagination button.active { color: #fff; background: var(--purple); border-color: var(--purple); } .video-event-pagination button:disabled { cursor: not-allowed; opacity: 0.5; } .video-record-table { flex: 1; min-height: 0; } .video-bottom-layout { display: grid; grid-template-columns: minmax(0, 1fr); align-items: start; gap: 14px; } .video-thumbnail-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; } .video-thumb-card { min-width: 0; overflow: hidden; background: #fff; border: 1px solid #e3eaee; border-radius: 7px; } .video-thumb-stage { position: relative; display: grid; aspect-ratio: 16 / 9; color: #86a6b1; background: linear-gradient(145deg, rgba(20, 67, 82, 0.92), rgba(7, 31, 45, 0.96)), #071a26; place-items: center; } .video-thumb-link { display: block; color: inherit; text-decoration: none; } .video-thumb-stage img { width: 100%; height: 100%; object-fit: cover; } .video-thumb-stage [data-icon] { width: 24px; height: 24px; } .video-thumb-stage time { position: absolute; right: 6px; bottom: 5px; color: #d9e9ed; font-size: 9px; } .video-thumb-copy { display: grid; min-width: 0; padding: 7px 8px; } .video-thumb-copy strong, .video-thumb-copy small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .video-thumb-copy strong { font-size: 10px; } .video-thumb-copy small { margin-top: 2px; color: var(--muted); font-size: 9px; } .video-record-tabs { display: flex; gap: 4px; margin-bottom: 9px; border-bottom: 1px solid var(--line); } .video-record-tabs button { padding: 7px 9px; color: var(--muted); font-size: 11px; cursor: pointer; background: transparent; border: 0; border-bottom: 2px solid transparent; } .video-record-tabs button.active { color: var(--teal); font-weight: 700; border-bottom-color: var(--teal); } .video-record-table { overflow: auto; } .video-record-table table { width: 100%; border-collapse: collapse; } .video-record-table th, .video-record-table td { padding: 8px 7px; font-size: 10px; text-align: left; border-bottom: 1px solid #edf1f3; white-space: nowrap; } .video-record-table th { color: #667887; font-weight: 700; background: #f7fafb; } .video-empty-state { display: grid; min-height: 120px; align-content: center; justify-items: center; color: var(--muted); } .video-empty-state [data-icon] { width: 22px; height: 22px; color: var(--green); } .video-empty-state p { margin: 7px 0 0; font-size: 12px; } @media (max-width: 1180px) { .video-summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .video-platform-layout { grid-template-columns: minmax(0, 1fr); } .video-primary-layout, .video-bottom-layout, .video-side-column, .video-insight-row { grid-template-columns: minmax(0, 1fr); } .video-device-tree { max-height: 360px; } .video-device-panel, .video-main-column, .video-primary-layout, .video-wall-panel { height: auto; } } @media (max-width: 680px) { .video-summary-grid, .video-wall.layout-4, .video-wall.layout-6, .video-wall.layout-9 { grid-template-columns: minmax(0, 1fr); } .video-wall-panel .panel-head { align-items: flex-start; flex-direction: column; } .video-module-tabs { width: 100%; overflow-x: auto; } .video-thumbnail-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } .business-kpi-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 13px; margin-bottom: 14px; } .business-kpi-card { display: grid; grid-template-columns: 42px minmax(0, 1fr); align-items: center; gap: 11px; padding: 14px; background: #fff; border: 1px solid var(--line); border-radius: var(--radius-md); box-shadow: var(--shadow-sm); } .business-kpi-icon { display: grid; width: 40px; height: 40px; grid-row: 1 / span 2; place-items: center; border-radius: 9px; } .business-kpi-icon.purple { color: var(--purple); background: var(--purple-soft); } .business-kpi-icon.teal { color: var(--teal); background: var(--teal-soft); } .business-kpi-icon.blue { color: var(--blue); background: var(--blue-soft); } .business-kpi-icon.amber { color: var(--amber); background: var(--amber-soft); } .business-kpi-card > div { min-width: 0; } .business-kpi-card strong { display: block; font-size: 22px; line-height: 1.15; } .business-kpi-card p { margin: 2px 0 0; color: var(--muted); font-size: 12px; } .business-kpi-card > small { grid-column: 2; color: var(--muted-2); font-size: 11px; } .business-data-layout { display: grid; grid-template-columns: 205px minmax(500px, 1fr) minmax(330px, 0.68fr); gap: 14px; align-items: start; } .business-category-panel, .business-list-panel, .business-detail-panel { min-height: 625px; } .business-category-panel { position: sticky; top: 92px; } .business-category-list { display: grid; gap: 4px; } .business-category-list button { display: flex; width: 100%; align-items: center; justify-content: space-between; gap: 8px; padding: 9px 10px; color: #607280; cursor: pointer; background: transparent; border: 0; border-radius: 7px; transition: color 0.18s ease, background 0.18s ease; } .business-category-list button:hover { color: var(--ink); background: var(--surface-soft); } .business-category-list button.active { color: #6849a4; font-weight: 800; background: var(--purple-soft); } .business-category-list button > span { display: flex; min-width: 0; align-items: center; gap: 8px; font-size: 13px; } .business-category-list button i[data-icon] { width: 15px; height: 15px; } .business-category-list button b { color: var(--muted); font-size: 11px; } .business-category-list button.active b { color: #6849a4; } .business-storage { margin-top: 17px; padding: 11px; background: var(--surface-soft); border: 1px solid #e9eef1; border-radius: 8px; } .business-storage-head { display: flex; align-items: center; justify-content: space-between; color: #5b6d7b; font-size: 12px; } .business-storage-head strong { color: var(--purple); } .business-storage-track { height: 5px; margin: 9px 0 7px; overflow: hidden; background: #e7e1f3; border-radius: 10px; } .business-storage-track i { display: block; height: 100%; background: linear-gradient(90deg, #785dc0, #9b86dc); border-radius: inherit; } .business-storage p { margin: 0; color: var(--muted); font-size: 11px; } .document-search { display: flex; height: 38px; align-items: center; gap: 8px; margin-bottom: 10px; padding: 0 7px 0 10px; color: var(--muted); background: var(--surface-soft); border: 1px solid var(--line); border-radius: 8px; } .document-search:focus-within { background: #fff; border-color: rgba(124, 99, 200, 0.45); box-shadow: 0 0 0 3px rgba(124, 99, 200, 0.08); } .document-search input { min-width: 0; flex: 1; background: transparent; border: 0; outline: 0; } .document-search button { display: grid; width: 27px; height: 27px; color: var(--muted); cursor: pointer; background: #fff; border: 1px solid #e2e8eb; border-radius: 5px; place-items: center; } .document-search button [data-icon] { width: 13px; height: 13px; } .document-list { display: grid; gap: 5px; } .document-row { display: grid; grid-template-columns: 40px minmax(0, 1fr) auto 44px 15px; align-items: center; gap: 10px; width: 100%; padding: 10px; text-align: left; cursor: pointer; background: #fff; border: 1px solid #e9eef1; border-radius: 8px; transition: background 0.18s ease, border-color 0.18s ease, transform 0.18s ease; } .document-row:hover { border-color: #cec4e5; transform: translateX(2px); } .document-row.active { background: #faf9fe; border-color: #bca9df; box-shadow: inset 2px 0 0 var(--purple); } .document-type { display: grid; width: 38px; height: 38px; flex: 0 0 auto; color: #fff; font-size: 11px; font-weight: 800; place-items: center; border-radius: 7px; } .document-type.pdf { background: #d95659; } .document-type.doc { background: #287cc4; } .document-type.xls { background: #329565; } .document-main { display: flex; min-width: 0; flex-direction: column; } .document-main strong { overflow: hidden; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; } .document-main small { overflow: hidden; margin-top: 3px; color: var(--muted); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .document-main .document-search-snippet { color: #64558f; } .document-search-snippet b { margin-right: 5px; color: var(--purple); font-size: 10px; } .document-extraction { display: inline-flex; align-items: center; gap: 4px; padding: 3px 6px; font-size: 11px; font-weight: 700; border-radius: 5px; white-space: nowrap; } .document-extraction i { width: 5px; height: 5px; background: currentColor; border-radius: 50%; } .document-extraction.success { color: #397d56; background: var(--green-soft); } .document-extraction.running { color: #276fab; background: var(--blue-soft); } .document-extraction.pending { color: #a56d13; background: var(--amber-soft); } .document-extraction.failed { color: var(--red); background: var(--red-soft); } .document-fields { display: flex; flex-direction: column; align-items: flex-end; } .document-fields b { font-size: 14px; } .document-fields small { color: var(--muted); font-size: 11px; } .document-row > [data-icon] { width: 13px; height: 13px; color: var(--muted-2); } .document-actions { display: grid; justify-items: center; gap: 2px; } .document-edit, .document-delete { display: grid; width: 23px; height: 23px; color: var(--muted-2); border-radius: 6px; place-items: center; } .document-edit:hover, .document-edit:focus-visible { color: var(--blue); background: var(--blue-soft); } .document-delete:hover, .document-delete:focus-visible { color: var(--red); background: var(--red-soft); } .document-edit [data-icon], .document-delete [data-icon] { width: 13px; height: 13px; } .document-list-footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 12px; padding-top: 11px; color: var(--muted); font-size: 11px; border-top: 1px solid #edf1f4; } .document-list-footer > div { display: flex; gap: 3px; } .document-list-footer button { display: grid; min-width: 25px; height: 25px; padding: 0 6px; color: #627483; font-size: 11px; cursor: pointer; background: #fff; border: 1px solid var(--line); border-radius: 5px; place-items: center; } .document-list-footer button.active { color: #fff; background: var(--purple); border-color: var(--purple); } .business-detail-panel { padding: 0; overflow: hidden; } .business-detail-panel > .panel-head { margin: 0; padding: 15px; border-bottom: 1px solid var(--line); } .business-detail-status { display: inline-flex; padding: 4px 7px; font-size: 11px; font-weight: 800; border-radius: 5px; } .business-detail-status.success { color: #397d56; background: var(--green-soft); } .business-detail-status.running { color: #276fab; background: var(--blue-soft); } .business-detail-status.pending { color: #a56d13; background: var(--amber-soft); } .business-document-title { display: flex; gap: 11px; padding: 15px; background: #fafbfc; border-bottom: 1px solid var(--line); } .business-document-title h3 { margin: 0; font-size: 14px; line-height: 1.5; } .business-document-title p { margin: 4px 0 0; color: var(--muted); font-size: 11px; } .business-document-meta { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; padding: 13px 15px; border-bottom: 1px solid var(--line); } .business-document-meta > div { display: flex; flex-direction: column; padding: 8px; background: var(--surface-soft); border-radius: 6px; } .business-document-meta span { color: var(--muted); font-size: 11px; } .business-document-meta strong { margin-top: 2px; font-size: 12px; } .business-section { padding: 14px 15px; border-bottom: 1px solid var(--line); } .business-section-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 10px; } .business-section-head h3 { margin: 0; font-size: 13px; } .business-field-groups { display: grid; gap: 8px; } .business-field-group { overflow: hidden; border: 1px solid var(--line); border-radius: 8px; } .business-field-group summary { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 12px; cursor: pointer; background: var(--surface-soft); list-style: none; } .business-field-group summary::-webkit-details-marker { display: none; } .business-field-group summary::after { content: "+"; color: var(--muted); font-size: 16px; line-height: 1; } .business-field-group[open] summary::after { content: "−"; } .business-field-group summary strong { font-size: 12px; } .business-field-group summary span { margin-left: auto; color: var(--muted); font-size: 11px; } .business-field-group .business-field-list { padding: 0 12px; } .business-field-list { display: grid; gap: 2px; } .business-field-row { display: grid; grid-template-columns: 100px minmax(0, 1fr); align-items: start; gap: 7px; padding: 7px 0; border-bottom: 1px solid #edf1f4; } .business-field-row:last-child { border-bottom: 0; } .business-field-row span { color: var(--muted); font-size: 11px; } .business-field-row strong { font-size: 12px; line-height: 1.55; overflow-wrap: anywhere; white-space: normal; } .business-field-value { display: block; min-width: 0; } .business-field-display { display: block; word-break: break-word; } .business-field-input { display: none; width: 100%; height: 32px; padding: 0 8px; color: var(--ink); background: var(--surface); border: 1px solid var(--line-strong); border-radius: 6px; } .business-field-input:focus { border-color: var(--teal); outline: 2px solid rgba(15, 159, 143, 0.12); } .business-section.editing .business-field-display { display: none; } .business-section.editing .business-field-input { display: block; } .business-section.editing .business-field-group summary { cursor: default; } .business-document-note { display: flex; gap: 8px; margin: 14px 15px; padding: 10px; color: #695c89; background: #f5f2fb; border-radius: 7px; } .business-document-note p { max-height: 220px; overflow-y: auto; white-space: pre-line; } .business-document-note [data-icon] { width: 15px; height: 15px; flex: 0 0 auto; color: var(--purple); } .business-document-note p { margin: 0; font-size: 11px; line-height: 1.7; } .business-detail-actions { display: flex; gap: 8px; padding: 0 15px 15px; } .business-detail-actions button { flex: 1; } .source-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; } .source-icon, .category-icon, .integration-icon, .setting-icon { display: grid; width: 34px; height: 34px; place-items: center; border-radius: 8px; } .source-icon.teal, .category-icon.teal, .integration-icon.teal, .setting-icon.teal { color: var(--teal); background: var(--teal-soft); } .source-icon.blue, .category-icon.blue, .integration-icon.blue { color: var(--blue); background: var(--blue-soft); } .source-icon.amber, .category-icon.amber, .integration-icon.amber, .setting-icon.amber { color: var(--amber); background: var(--amber-soft); } .source-icon.purple, .category-icon.purple, .integration-icon.purple, .setting-icon.purple { color: var(--purple); background: var(--purple-soft); } .category-icon.red { color: var(--red); background: var(--red-soft); } .source-status, .connection-status { display: inline-flex; align-items: center; gap: 4px; padding: 3px 6px; font-size: 11px; font-weight: 700; border-radius: 20px; } .source-status.online, .connection-status.online { color: #337c55; background: var(--green-soft); } .source-status.sync, .connection-status.warning { color: #a86717; background: var(--amber-soft); } .connection-status i { width: 5px; height: 5px; background: currentColor; border-radius: 50%; } .source-card > strong { display: block; font-size: 14px; } .source-card > p { min-height: 31px; margin: 5px 0 12px; color: var(--muted); font-size: 12px; line-height: 1.7; } .source-foot { display: flex; justify-content: space-between; padding-top: 10px; color: #526473; font-size: 12px; border-top: 1px solid #eef2f4; } .two-column-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; margin-bottom: 14px; } .quality-list { display: grid; gap: 14px; padding: 5px 0 16px; } .quality-row { display: grid; grid-template-columns: 85px 1fr 44px; align-items: center; gap: 10px; color: #536573; font-size: 13px; } .quality-dot { display: inline-block; width: 6px; height: 6px; margin-right: 6px; border-radius: 50%; } .quality-dot.teal { background: var(--teal); } .quality-dot.blue { background: var(--blue); } .quality-dot.amber { background: var(--amber); } .quality-dot.purple { background: var(--purple); } .quality-row strong { color: var(--ink); text-align: right; } .quality-alert { display: flex; align-items: center; gap: 9px; padding: 10px; color: #9b641b; background: var(--amber-soft); border-radius: 7px; } .quality-alert > [data-icon] { width: 17px; height: 17px; } .quality-alert > div { min-width: 0; flex: 1; } .quality-alert strong { display: block; font-size: 12px; } .quality-alert p { margin: 3px 0 0; color: #9f773e; font-size: 11px; } .extraction-list { display: grid; gap: 4px; } .extraction-row { display: grid; grid-template-columns: 38px minmax(0, 1fr) auto; align-items: center; gap: 10px; padding: 10px 5px; border-bottom: 1px solid #edf1f4; } .extraction-row:last-child { border-bottom: 0; } .file-type { display: grid; width: 36px; height: 36px; color: #fff; font-size: 11px; font-weight: 800; place-items: center; border-radius: 7px; } .file-type.pdf { background: #d95659; } .file-type.doc { background: #287cc4; } .file-type.xls { background: #329565; } .file-type.file { background: #7b8794; } .extraction-row strong { display: block; overflow: hidden; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; } .extraction-row p { margin: 3px 0 0; color: var(--muted); font-size: 11px; } .extraction-status { font-size: 11px; font-weight: 700; } .extraction-status.success { color: var(--green); } .extraction-status.running { color: var(--blue); } .extraction-status.pending { color: var(--muted); } .extraction-status.failed { color: var(--red); } .object-grid { grid-template-columns: repeat(5, minmax(0, 1fr)); margin-bottom: 0; } .object-card { display: grid; grid-template-columns: 34px 1fr auto; align-items: center; gap: 9px; padding: 12px; background: var(--surface-soft); border: 1px solid #e9eef1; border-radius: 8px; } .object-card > [data-icon] { display: grid; width: 32px; height: 32px; color: #487188; place-items: center; background: #e7eef2; border-radius: 7px; } .object-card strong { font-size: 13px; } .object-card b { grid-row: 1 / span 2; grid-column: 3; font-size: 20px; } .object-card small { color: var(--muted); font-size: 11px; } .knowledge-hero { display: flex; align-items: center; justify-content: space-between; gap: 24px; margin-bottom: 14px; padding: 22px 24px; color: #fff; background: radial-gradient(circle at 80% -20%, rgba(124, 99, 200, 0.38), transparent 45%), linear-gradient(120deg, #10283c, #123b49 60%, #164459); border-radius: var(--radius-lg); box-shadow: var(--shadow-md); } .knowledge-hero .eyebrow { color: #76dbcf; } .knowledge-hero h2 { font-size: 23px; } .knowledge-hero-copy p { max-width: 590px; margin: 8px 0 0; color: #b5cad5; font-size: 13px; } .knowledge-hero-stats { display: flex; flex: 0 0 auto; gap: 28px; } .knowledge-hero-stats div { display: flex; flex-direction: column; align-items: flex-end; } .knowledge-hero-stats strong { font-size: 24px; } .knowledge-hero-stats span { margin-top: 3px; color: #8da9b8; font-size: 12px; } .knowledge-console { display: flex; align-items: flex-end; gap: 10px; margin-bottom: 14px; padding: 9px 9px 9px 15px; background: #fff; border: 1px solid var(--line); border-radius: var(--radius-md); box-shadow: var(--shadow-sm); } .console-icon { align-self: center; color: var(--purple); } .knowledge-console textarea { min-width: 0; flex: 1; min-height: 24px; max-height: 96px; padding: 0; overflow-y: hidden; font: inherit; line-height: 22px; color: var(--ink); resize: none; background: transparent; border: 0; outline: 0; } .knowledge-grid { grid-template-columns: minmax(0, 1.35fr) minmax(360px, 0.65fr); align-items: stretch; } .knowledge-answer-panel { display: flex; height: var(--knowledge-answer-fixed-height, auto); max-height: var(--knowledge-answer-fixed-height, none); min-height: 0; flex-direction: column; overflow: hidden; } .knowledge-answer-panel .ai-answer { min-height: 0; flex: 1; padding-right: 6px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: #c8c3d8 transparent; } .knowledge-answer-panel .ai-answer::-webkit-scrollbar { width: 8px; } .knowledge-answer-panel .ai-answer::-webkit-scrollbar-track { background: transparent; } .knowledge-answer-panel .ai-answer::-webkit-scrollbar-thumb { background: #c8c3d8; border: 2px solid transparent; border-radius: 999px; background-clip: padding-box; } .knowledge-answer-panel .ai-answer-body { min-width: 0; overflow-wrap: anywhere; } .rag-answer-text { white-space: pre-wrap; } .rag-thinking { margin: 6px 0 12px; color: #536675; background: #f7f9fb; border: 1px solid #e3e9ef; border-radius: 7px; } .rag-thinking[hidden] { display: none; } .rag-thinking summary { display: flex; align-items: center; gap: 6px; padding: 8px 10px; font-size: 12px; font-weight: 700; cursor: pointer; list-style: none; } .rag-thinking summary::-webkit-details-marker { display: none; } .rag-thinking summary [data-rag-thinking-state] { margin-left: auto; color: var(--muted); font-size: 11px; font-weight: 500; } .rag-thinking-content { max-height: 180px; padding: 0 10px 10px; overflow-y: auto; font-size: 12px; line-height: 1.7; white-space: pre-wrap; } .rag-answer-markdown { color: #445765; font-size: 14px; line-height: 1.8; } .rag-answer-markdown p { margin: 0 0 10px; } .rag-answer-markdown h1, .rag-answer-markdown h2, .rag-answer-markdown h3, .rag-answer-markdown h4, .rag-answer-markdown h5, .rag-answer-markdown h6 { margin: 14px 0 8px; color: var(--ink); line-height: 1.45; } .rag-answer-markdown h1 { font-size: 19px; } .rag-answer-markdown h2 { font-size: 17px; } .rag-answer-markdown h3 { font-size: 15px; } .rag-answer-markdown ul, .rag-answer-markdown ol { margin: 4px 0 12px; padding-left: 22px; } .rag-answer-markdown li { margin: 4px 0; } .rag-answer-markdown code { padding: 2px 5px; font-family: Consolas, "Courier New", monospace; font-size: 0.92em; background: #f0f3f6; border-radius: 4px; } .rag-answer-markdown pre { margin: 8px 0 12px; padding: 10px 12px; overflow-x: auto; background: #162331; border-radius: 7px; } .rag-answer-markdown pre code { padding: 0; color: #e7eef5; background: transparent; } .rag-answer-markdown a { color: var(--blue); text-decoration: none; } .ai-answer { display: flex; gap: 11px; } .ai-avatar { display: grid; width: 34px; height: 34px; flex: 0 0 auto; color: #fff; place-items: center; background: var(--purple); border-radius: 8px; } .ai-answer-body { min-width: 0; flex: 1; } .ai-answer-body > p { margin: 2px 0 12px; color: #445765; font-size: 14px; line-height: 1.8; } .answer-steps { display: grid; gap: 6px; margin-bottom: 13px; } .answer-steps > div { display: flex; align-items: center; gap: 8px; padding: 8px 9px; background: var(--surface-soft); border-radius: 7px; } .answer-steps span { display: grid; width: 20px; height: 20px; flex: 0 0 auto; color: #fff; font-size: 11px; font-weight: 800; background: #5e7290; border-radius: 5px; place-items: center; } .answer-steps p { margin: 0; color: #526674; font-size: 12px; } .source-citations { display: flex; flex-wrap: wrap; gap: 6px; } .source-citations[hidden] { display: none; } .source-citations button { display: inline-flex; align-items: center; gap: 5px; padding: 6px 8px; color: #576772; font-size: 11px; cursor: pointer; background: #fff; border: 1px solid var(--line); border-radius: 6px; } .source-citations button:hover { border-color: #b8cbdb; } .source-citations [data-icon] { width: 12px; height: 12px; color: var(--blue); } .source-citations b { color: var(--green); } .graph-canvas { min-height: 310px; } .graph-canvas svg { width: 100%; height: 310px; } .graph-links path { fill: none; stroke: #c1cdd6; stroke-width: 1.2; stroke-dasharray: 5 4; } .graph-center circle { fill: #e7f7f4; stroke: #23a492; stroke-width: 2; } .graph-center text { fill: #22685f; font-size: 14px; font-weight: 800; text-anchor: middle; } .graph-node circle { fill: #eef5fb; stroke: #5b9acd; stroke-width: 1.5; } .graph-node.amber-node circle { fill: #fff6e4; stroke: #d99a32; } .graph-node text { fill: #4d6373; font-size: 11px; font-weight: 700; text-anchor: middle; } .graph-legend { display: flex; align-items: center; justify-content: center; gap: 14px; color: var(--muted); font-size: 11px; } .graph-legend span { display: inline-flex; align-items: center; gap: 4px; } .graph-legend-dot { width: 7px; height: 7px; border-radius: 50%; } .graph-legend-dot.center { background: var(--teal); } .graph-legend-dot.cause { background: var(--amber); } .graph-legend-dot.data { background: var(--blue); } .knowledge-category-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); margin-bottom: 0; } .category-card { display: flex; align-items: center; gap: 11px; padding: 13px; cursor: pointer; background: #fff; border: 1px solid var(--line); border-radius: var(--radius-md); transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease; } .category-card:hover, .category-card:focus-visible { border-color: #b9d4ea; outline: none; box-shadow: 0 8px 20px rgba(37, 78, 116, 0.1); transform: translateY(-1px); } .category-card > div { display: grid; min-width: 0; flex: 1; grid-template-columns: 1fr auto; align-items: center; } .category-card strong { font-size: 14px; } .category-card b { grid-row: 1 / span 2; grid-column: 2; font-size: 19px; } .category-card p { overflow: hidden; margin: 3px 0 0; color: var(--muted); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .category-card button { display: grid; width: 25px; height: 25px; color: var(--muted); cursor: pointer; background: var(--surface-soft); border: 0; border-radius: 5px; place-items: center; } .category-card button [data-icon] { width: 12px; height: 12px; } .knowledge-catalog-modal { position: fixed; z-index: 120; display: grid; inset: 0; padding: 24px; place-items: center; } body.knowledge-catalog-open { overflow: hidden; } .knowledge-catalog-modal[hidden] { display: none; } .knowledge-catalog-scrim { position: absolute; background: rgba(8, 20, 34, 0.52); inset: 0; } .knowledge-catalog-dialog { position: relative; display: flex; width: min(940px, calc(100vw - 32px)); height: min(760px, calc(100vh - 48px)); min-height: 420px; flex-direction: column; overflow: hidden; background: #fff; border: 1px solid #dce4eb; border-radius: 8px; box-shadow: 0 24px 60px rgba(12, 31, 52, 0.22); } .knowledge-catalog-head { display: flex; align-items: flex-start; justify-content: space-between; padding: 18px 20px 14px; border-bottom: 1px solid var(--line); } .knowledge-catalog-head h2 { margin: 3px 0 0; font-size: 20px; } .knowledge-catalog-head p { margin: 5px 0 0; color: var(--muted); font-size: 12px; } .knowledge-catalog-search { display: flex; align-items: center; gap: 8px; margin: 14px 20px 0; padding: 7px 8px 7px 12px; background: #f7f9fb; border: 1px solid #dfe6ec; border-radius: 7px; } .knowledge-catalog-search > [data-icon] { color: var(--blue); } .knowledge-catalog-search input { min-width: 0; flex: 1; color: var(--ink); background: transparent; border: 0; outline: 0; } .knowledge-catalog-content { min-height: 0; flex: 1; padding: 14px 20px; overflow-y: auto; } .knowledge-catalog-list { display: grid; gap: 8px; } .knowledge-catalog-item { display: flex; align-items: center; gap: 10px; width: 100%; padding: 11px 12px; text-align: left; cursor: pointer; background: #fff; border: 1px solid var(--line); border-radius: 7px; } .knowledge-catalog-item:hover { background: #f8fbfd; border-color: #b9d4ea; } .knowledge-catalog-item-icon { display: grid; width: 32px; height: 32px; flex: 0 0 auto; color: var(--blue); background: var(--blue-soft); border-radius: 6px; place-items: center; } .knowledge-catalog-item-copy { min-width: 0; flex: 1; } .knowledge-catalog-item-copy strong { display: block; overflow: hidden; color: var(--ink); font-size: 13px; text-overflow: ellipsis; white-space: nowrap; } .knowledge-catalog-item-copy p { overflow: hidden; margin: 3px 0 0; color: var(--muted); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .knowledge-catalog-item-meta { flex: 0 0 auto; color: var(--muted); font-size: 11px; } .knowledge-catalog-empty { padding: 60px 20px; color: var(--muted); text-align: center; } .knowledge-catalog-pager { display: flex; min-height: 46px; align-items: center; justify-content: flex-end; gap: 6px; padding: 8px 20px; border-top: 1px solid var(--line); } .knowledge-catalog-pager button { min-width: 30px; height: 30px; padding: 0 8px; color: #506271; cursor: pointer; background: #fff; border: 1px solid var(--line); border-radius: 5px; } .knowledge-catalog-pager button.active { color: #fff; background: var(--blue); border-color: var(--blue); } .knowledge-catalog-pager button:disabled { cursor: not-allowed; opacity: 0.45; } .knowledge-catalog-detail-head { display: flex; align-items: flex-start; gap: 10px; margin-bottom: 12px; } .knowledge-catalog-detail-head h3 { margin: 0; font-size: 17px; } .knowledge-catalog-detail-tags { display: flex; flex-wrap: wrap; gap: 5px; margin: 8px 0 14px; } .knowledge-catalog-detail-tags span { padding: 3px 6px; color: #647586; font-size: 11px; background: var(--surface-soft); border-radius: 4px; } .knowledge-catalog-detail-body { color: #405362; font-size: 14px; line-height: 1.85; } .knowledge-catalog-detail-body h1, .knowledge-catalog-detail-body h2, .knowledge-catalog-detail-body h3 { margin: 16px 0 8px; color: var(--ink); } .knowledge-catalog-detail-body p { margin: 0 0 10px; } .knowledge-catalog-detail-body ul, .knowledge-catalog-detail-body ol { padding-left: 22px; } .diagnosis-summary { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 13px; margin-bottom: 14px; } .summary-card { display: flex; min-width: 0; align-items: center; gap: 11px; padding: 14px; background: #fff; border: 1px solid var(--line); border-radius: var(--radius-md); } .summary-card > [data-icon] { display: grid; width: 36px; height: 36px; flex: 0 0 auto; padding: 9px; border-radius: 8px; } .summary-card.risk > [data-icon] { color: var(--red); background: var(--red-soft); } .summary-card.warning > [data-icon] { color: var(--amber); background: var(--amber-soft); } .summary-card.normal > [data-icon] { color: var(--green); background: var(--green-soft); } .summary-card.model > [data-icon] { color: var(--blue); background: var(--blue-soft); } .summary-card > div { min-width: 0; flex: 1; } .summary-card strong { display: block; font-size: 23px; line-height: 1.1; } .summary-card p { margin: 2px 0 0; color: var(--muted); font-size: 12px; } .summary-card small { color: var(--muted); font-size: 11px; white-space: nowrap; } .diagnosis-workspace { margin-bottom: 14px; padding: 0; overflow: hidden; } .diagnosis-tabs { display: flex; gap: 5px; padding: 12px 14px 0; overflow-x: auto; border-bottom: 1px solid var(--line); scrollbar-width: thin; } .diagnosis-tabs button { display: inline-flex; flex: 0 0 auto; align-items: center; gap: 5px; padding: 8px 10px 10px; color: var(--muted); font-size: 13px; cursor: pointer; background: transparent; border: 0; border-bottom: 2px solid transparent; } .diagnosis-tabs button span { display: inline-flex; min-width: 17px; height: 17px; align-items: center; justify-content: center; font-size: 11px; background: #edf1f4; border-radius: 20px; } .diagnosis-tabs button.active { color: var(--teal); font-weight: 800; border-bottom-color: var(--teal); } .diagnosis-tabs button.active span { color: #fff; background: var(--teal); } .diagnosis-table-head, .diagnosis-row { display: grid; grid-template-columns: minmax(280px, 2.1fr) minmax(88px, 0.8fr) 95px 105px 70px 30px; align-items: center; gap: 10px; } .diagnosis-table-head { padding: 10px 15px; color: var(--muted); font-size: 11px; font-weight: 800; background: #f8fafb; border-bottom: 1px solid var(--line); } .diagnosis-row { width: 100%; padding: 11px 15px; text-align: left; cursor: pointer; background: #fff; border: 0; border-bottom: 1px solid #edf1f4; transition: background 0.18s ease; } .diagnosis-row:last-child { border-bottom: 0; } .diagnosis-row:hover { background: #f9fbfc; } .defect-name { display: flex; min-width: 0; align-items: center; gap: 9px; } .defect-name > span { display: flex; min-width: 0; flex-direction: column; } .defect-name strong { overflow: hidden; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; } .defect-name small { margin-top: 3px; color: var(--muted); font-size: 11px; } .severity { width: 4px; height: 28px; flex: 0 0 auto; border-radius: 4px; } .severity.high { background: var(--red); } .severity.medium { background: var(--amber); } .severity.low { background: var(--blue); } .scene-tag, .state-tag { display: inline-flex; padding: 3px 6px; font-size: 11px; font-style: normal; font-weight: 700; border-radius: 5px; } .scene-tag.red { color: var(--red); background: var(--red-soft); } .scene-tag.orange { color: #bd6d1e; background: #fff0df; } .scene-tag.yellow { color: #a56d13; background: var(--amber-soft); } .scene-tag.blue { color: #276fab; background: var(--blue-soft); } .scene-tag.teal { color: #177e72; background: var(--teal-soft); } .state-tag.processing { color: #276fab; background: var(--blue-soft); } .state-tag.pending { color: #a56d13; background: var(--amber-soft); } .state-tag.closed { color: #397d56; background: var(--green-soft); } .evidence-icons { display: flex; align-items: center; gap: 5px; } .evidence-icons i { display: grid; width: 23px; height: 23px; color: #607787; place-items: center; background: #edf2f5; border-radius: 5px; } .evidence-icons i[data-icon] { width: 23px; height: 23px; } .evidence-icons i svg { width: 12px; height: 12px; } .confidence { display: flex; align-items: center; gap: 7px; } .confidence b { min-width: 37px; font-size: 12px; } .confidence > i { width: 46px; height: 4px; overflow: hidden; background: #edf1f4; border-radius: 10px; } .confidence > i em { display: block; height: 100%; background: var(--teal); border-radius: inherit; } .row-action { display: grid; width: 24px; height: 24px; color: var(--muted); place-items: center; border-radius: 5px; } .row-action [data-icon] { width: 13px; height: 13px; } .model-list { display: grid; gap: 14px; padding: 4px 0; } .model-row { display: grid; grid-template-columns: minmax(150px, 1fr) minmax(100px, 1fr) 43px; align-items: center; gap: 10px; color: #526472; font-size: 12px; } .model-row > span { display: flex; align-items: center; gap: 6px; } .model-dot { width: 6px; height: 6px; border-radius: 50%; } .model-dot.red { background: var(--red); } .model-dot.orange { background: #e37a32; } .model-dot.blue { background: var(--blue); } .model-dot.yellow { background: var(--amber); } .model-dot.teal { background: var(--teal); } .model-row strong { color: var(--ink); text-align: right; } .evidence-health { display: flex; align-items: center; gap: 20px; padding: 5px 0; } .evidence-ring { width: 110px; height: 110px; background: conic-gradient(var(--blue) calc(var(--score) * 1%), #e8eef1 0); } .evidence-ring::after { width: 84px; height: 84px; } .evidence-ring strong { font-size: 24px; } .evidence-copy { display: grid; min-width: 0; flex: 1; gap: 8px; } .evidence-copy > div { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding-bottom: 7px; color: var(--muted); font-size: 12px; border-bottom: 1px solid #edf1f4; } .evidence-copy strong { color: var(--ink); } .hazard-overview { display: flex; align-items: center; justify-content: space-between; gap: 24px; margin-bottom: 14px; padding: 17px 18px; background: #f8fafb; border: 1px solid var(--line); border-radius: var(--radius-md); } .hazard-overview-copy { min-width: 0; } .hazard-overview-copy h2 { margin: 4px 0 0; font-size: 20px; } .hazard-overview-copy p { max-width: 760px; margin: 6px 0 0; color: var(--muted); font-size: 12px; line-height: 1.65; } .hazard-overview-stats { display: grid; min-width: min(520px, 46vw); grid-template-columns: repeat(4, minmax(82px, 1fr)); flex: 0 0 auto; } .hazard-overview-stats > div { min-width: 0; padding: 2px 14px; text-align: right; border-left: 1px solid var(--line); } .hazard-overview-stats strong { display: block; color: var(--ink); font-size: 23px; line-height: 1.1; } .hazard-overview-stats span { display: block; margin-top: 4px; color: var(--muted); font-size: 11px; white-space: nowrap; } .hazard-scenario-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px; margin-bottom: 14px; } .hazard-scenario-card { position: relative; min-width: 0; min-height: 102px; padding: 16px 13px 12px; overflow: hidden; text-align: left; cursor: pointer; background: #fff; border: 1px solid var(--line); border-radius: 8px; box-shadow: var(--shadow-sm); transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease; } .hazard-scenario-card::before { position: absolute; top: 0; right: 13px; left: 13px; height: 3px; background: var(--scene-color); border-radius: 0 0 4px 4px; content: ""; } .hazard-scenario-card:hover { border-color: var(--scene-color); box-shadow: 0 7px 18px rgba(22, 34, 47, 0.08); transform: translateY(-1px); } .hazard-scenario-card.active { background: var(--scene-soft); border-color: var(--scene-color); box-shadow: 0 0 0 2px color-mix(in srgb, var(--scene-color) 14%, transparent); } .hazard-scenario-card.local { --scene-color: #dc7a25; --scene-soft: #fff4e9; } .hazard-scenario-card.facility { --scene-color: #bd8a16; --scene-soft: #fff8e5; } .hazard-scenario-card.system { --scene-color: #168f83; --scene-soft: #e9f8f5; } .hazard-scenario-card.volume { --scene-color: #2585d9; --scene-soft: #edf5fc; } .hazard-scenario-card.disaster { --scene-color: #d84d50; --scene-soft: #fdeeee; } .hazard-scenario-top, .hazard-agent-card-head, .hazard-agent-card-foot, .hazard-result-meta, .hazard-risk-actions { display: flex; align-items: center; } .hazard-scenario-top { justify-content: space-between; gap: 8px; } .hazard-scenario-icon, .hazard-agent-icon { display: grid; flex: 0 0 auto; color: var(--scene-color); place-items: center; background: var(--scene-soft); border-radius: 8px; } .hazard-scenario-icon { width: 31px; height: 31px; } .hazard-scenario-icon [data-icon], .hazard-agent-icon [data-icon] { width: 16px; height: 16px; } .hazard-scenario-count { color: var(--muted); font-size: 11px; font-weight: 700; } .hazard-scenario-card strong { display: block; overflow: hidden; margin-top: 11px; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; } .hazard-scenario-card p { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin: 6px 0 0; color: var(--muted); font-size: 11px; } .hazard-scenario-card p b { color: var(--scene-color); font-size: 13px; } .hazard-console-grid { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(340px, 0.72fr); align-items: start; gap: 14px; margin-bottom: 14px; } .hazard-agent-panel, .hazard-risk-panel { overflow: hidden; } .hazard-agent-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 11px; padding-top: 2px; } .hazard-agent-card { --scene-color: #168f83; --scene-soft: #e9f8f5; display: flex; min-width: 0; min-height: 220px; flex-direction: column; gap: 11px; padding: 13px; background: #fff; border: 1px solid var(--line); border-radius: 8px; transition: border-color 0.18s ease, box-shadow 0.18s ease; } .hazard-agent-card.local { --scene-color: #dc7a25; --scene-soft: #fff4e9; } .hazard-agent-card.facility { --scene-color: #bd8a16; --scene-soft: #fff8e5; } .hazard-agent-card.system { --scene-color: #168f83; --scene-soft: #e9f8f5; } .hazard-agent-card.volume { --scene-color: #2585d9; --scene-soft: #edf5fc; } .hazard-agent-card.disaster { --scene-color: #d84d50; --scene-soft: #fdeeee; } .hazard-agent-card.running { border-color: var(--scene-color); box-shadow: 0 0 0 2px color-mix(in srgb, var(--scene-color) 13%, transparent); } .hazard-agent-card.completed { background: #fcfefd; } .hazard-agent-card-head { align-items: flex-start; gap: 10px; } .hazard-agent-icon { width: 36px; height: 36px; } .hazard-agent-title { min-width: 0; flex: 1; } .hazard-agent-title strong { display: block; overflow: hidden; font-size: 13px; line-height: 1.4; text-overflow: ellipsis; white-space: nowrap; } .hazard-agent-title span { display: block; margin-top: 3px; color: var(--muted); font-size: 10px; } .hazard-agent-status { display: inline-flex; min-width: 44px; align-items: center; justify-content: center; padding: 3px 6px; color: #6c7b88; font-size: 10px; font-weight: 800; white-space: nowrap; background: #edf1f4; border-radius: 5px; } .hazard-agent-status.running { color: #276fab; background: var(--blue-soft); } .hazard-agent-status.completed { color: #397d56; background: var(--green-soft); } .hazard-agent-status.risk { color: var(--red); background: var(--red-soft); } .hazard-agent-status.clear { color: #397d56; background: var(--green-soft); } .hazard-agent-description { min-height: 34px; margin: 0; color: #586a78; font-size: 11px; line-height: 1.55; } .hazard-agent-meta { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; } .hazard-agent-meta div { min-width: 0; padding: 7px 8px; background: #f8fafb; border-radius: 6px; } .hazard-agent-meta span { display: block; color: var(--muted); font-size: 9px; } .hazard-agent-meta strong { display: block; overflow: hidden; margin-top: 2px; font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .hazard-agent-sources { display: flex; min-height: 22px; flex-wrap: wrap; gap: 5px; } .hazard-agent-sources span { padding: 3px 6px; color: #5d6f7c; font-size: 10px; background: #f2f6f8; border-radius: 5px; } .hazard-agent-card-foot { justify-content: space-between; gap: 10px; margin-top: auto; padding-top: 10px; border-top: 1px solid #edf1f4; } .hazard-agent-card-foot > span { min-width: 0; overflow: hidden; color: var(--muted); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; } .hazard-run-button { display: inline-flex; min-width: 74px; min-height: 30px; flex: 0 0 auto; align-items: center; justify-content: center; gap: 5px; padding: 0 10px; color: #fff; font-size: 11px; font-weight: 800; cursor: pointer; background: var(--scene-color); border: 0; border-radius: 6px; } .hazard-run-button:disabled { cursor: wait; opacity: 0.72; } .hazard-run-button [data-icon] { width: 13px; height: 13px; } .hazard-result-panel { min-width: 0; } .hazard-agent-result { min-height: 314px; } .hazard-result-empty { display: flex; min-height: 280px; align-items: center; justify-content: center; flex-direction: column; color: var(--muted); text-align: center; background: #f8fafb; border: 1px dashed var(--line-strong); border-radius: 8px; } .hazard-result-empty > [data-icon] { width: 34px; height: 34px; color: #91a2af; } .hazard-result-empty strong { margin-top: 10px; color: #4e6070; font-size: 13px; } .hazard-result-empty p { margin: 5px 0 0; font-size: 11px; } .hazard-result-loading { display: grid; min-height: 280px; place-items: center; text-align: center; background: #f8fafb; border-radius: 8px; } .hazard-result-loading [data-icon] { width: 30px; height: 30px; margin: 0 auto; color: var(--teal); animation: hazardSpin 1s linear infinite; } .hazard-result-loading strong { display: block; margin-top: 9px; font-size: 13px; } .hazard-result-loading span { display: block; margin-top: 4px; color: var(--muted); font-size: 11px; } .hazard-result-verdict { display: flex; align-items: flex-start; gap: 10px; padding: 12px; background: #f8fafb; border: 1px solid var(--line); border-radius: 8px; } .hazard-result-verdict.risk { background: #fff8f8; border-color: #f2cccc; } .hazard-result-verdict.clear { background: #f4fbf7; border-color: #cfe8d8; } .hazard-result-verdict > [data-icon] { width: 28px; height: 28px; flex: 0 0 auto; padding: 7px; color: var(--teal); background: var(--teal-soft); border-radius: 7px; } .hazard-result-verdict.risk > [data-icon] { color: var(--red); background: var(--red-soft); } .hazard-result-verdict div { min-width: 0; } .hazard-result-verdict strong { display: block; font-size: 13px; } .hazard-result-verdict p { margin: 4px 0 0; color: var(--muted); font-size: 11px; line-height: 1.55; } .hazard-result-meta { justify-content: space-between; gap: 8px; margin: 10px 0; padding: 9px 0; color: var(--muted); font-size: 10px; border-top: 1px solid #edf1f4; border-bottom: 1px solid #edf1f4; } .hazard-result-meta b { color: var(--ink); } .hazard-result-checks { display: grid; gap: 7px; } .hazard-result-checks h3, .hazard-result-findings h3 { margin: 0 0 2px; font-size: 12px; } .hazard-check-row { display: grid; grid-template-columns: 18px minmax(0, 1fr) auto; align-items: center; gap: 7px; padding: 7px 8px; background: #fafbfc; border-radius: 6px; } .hazard-check-row > [data-icon] { width: 15px; height: 15px; color: var(--teal); } .hazard-check-row.warning > [data-icon] { color: var(--amber); } .hazard-check-row.danger > [data-icon] { color: var(--red); } .hazard-check-row span { display: flex; min-width: 0; flex-direction: column; } .hazard-check-row strong { font-size: 10px; } .hazard-check-row small { overflow: hidden; margin-top: 2px; color: var(--muted); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; } .hazard-check-row b { color: var(--muted); font-size: 9px; } .hazard-result-findings { margin-top: 12px; } .hazard-result-finding { display: flex; align-items: flex-start; justify-content: space-between; gap: 9px; padding: 9px 0; border-top: 1px solid #edf1f4; } .hazard-result-finding strong { display: block; font-size: 11px; } .hazard-result-finding p { margin: 3px 0 0; color: var(--muted); font-size: 10px; line-height: 1.5; } .hazard-result-finding span { flex: 0 0 auto; color: var(--red); font-size: 10px; font-weight: 800; } .hazard-risk-summary { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 13px; margin-bottom: 14px; } .hazard-metric { display: flex; min-width: 0; align-items: center; gap: 11px; padding: 13px 14px; background: #fff; border: 1px solid var(--line); border-radius: var(--radius-md); } .hazard-metric > [data-icon] { display: grid; width: 36px; height: 36px; flex: 0 0 auto; padding: 9px; color: var(--blue); background: var(--blue-soft); border-radius: 8px; } .hazard-metric.high > [data-icon] { color: var(--red); background: var(--red-soft); } .hazard-metric.medium > [data-icon] { color: var(--amber); background: var(--amber-soft); } .hazard-metric.low > [data-icon] { color: var(--teal); background: var(--teal-soft); } .hazard-metric strong { display: block; font-size: 23px; line-height: 1.05; } .hazard-metric p { margin: 3px 0 0; color: var(--muted); font-size: 11px; } .hazard-risk-panel { padding: 0; } .hazard-risk-panel > .panel-head { align-items: flex-end; margin: 0; padding: 14px 15px 12px; border-bottom: 1px solid var(--line); } .hazard-risk-actions { justify-content: flex-end; gap: 9px; } .hazard-risk-filters { display: inline-flex; align-items: center; gap: 3px; padding: 3px; background: #f1f5f7; border-radius: 7px; } .hazard-risk-filters button { min-height: 28px; padding: 0 9px; color: var(--muted); font-size: 10px; font-weight: 700; cursor: pointer; background: transparent; border: 0; border-radius: 5px; } .hazard-risk-filters button.active { color: var(--ink); background: #fff; box-shadow: 0 1px 4px rgba(15, 33, 48, 0.08); } .hazard-scene-select { display: inline-flex; height: 34px; align-items: center; gap: 7px; padding: 0 8px; background: #fff; border: 1px solid var(--line-strong); border-radius: 7px; } .hazard-scene-select span { color: var(--muted); font-size: 10px; } .hazard-scene-select select { max-width: 118px; color: var(--ink); font-size: 11px; font-weight: 700; cursor: pointer; background: transparent; border: 0; outline: 0; } .hazard-risk-table-head, .hazard-risk-row { display: grid; grid-template-columns: minmax(250px, 1.65fr) 76px minmax(145px, 0.95fr) 92px 105px 72px 28px; align-items: center; gap: 10px; } .hazard-risk-table-head { padding: 10px 15px; color: var(--muted); font-size: 10px; font-weight: 800; background: #f8fafb; border-bottom: 1px solid var(--line); } .hazard-risk-row { width: 100%; padding: 11px 15px; text-align: left; cursor: pointer; background: #fff; border: 0; border-bottom: 1px solid #edf1f4; transition: background 0.18s ease; } .hazard-risk-row:last-child { border-bottom: 0; } .hazard-risk-row:hover { background: #f9fbfc; } .hazard-risk-row.is-new { animation: hazardRiskEnter 0.65s ease; } .hazard-risk-source, .hazard-risk-evidence { min-width: 0; } .hazard-risk-source { display: flex; align-items: center; gap: 6px; } .hazard-risk-source > span { display: flex; min-width: 0; flex-direction: column; } .hazard-risk-source strong { overflow: hidden; font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .hazard-risk-source small { overflow: hidden; margin-top: 2px; color: var(--muted); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; } .hazard-risk-evidence .evidence-icons i { width: 21px; height: 21px; } .hazard-risk-row .confidence { width: 105px; } .hazard-risk-empty { display: flex; min-height: 150px; align-items: center; justify-content: center; flex-direction: column; color: var(--muted); font-size: 12px; background: #fff; } .hazard-risk-empty [data-icon] { width: 26px; height: 26px; margin-bottom: 7px; color: #91a2af; } @keyframes hazardSpin { to { transform: rotate(360deg); } } @keyframes hazardRiskEnter { 0% { background: #fff7e1; } 100% { background: #fff; } } @media (max-width: 1450px) { .hazard-scenario-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } .hazard-console-grid { grid-template-columns: minmax(0, 1.35fr) minmax(330px, 0.75fr); } .hazard-risk-table-head, .hazard-risk-row { grid-template-columns: minmax(220px, 1.5fr) 70px minmax(130px, 0.9fr) 82px 96px 66px 24px; } } @media (max-width: 1180px) { .hazard-overview { align-items: flex-start; flex-direction: column; } .hazard-overview-stats { width: 100%; min-width: 0; } .hazard-overview-stats > div { text-align: left; } .hazard-console-grid { grid-template-columns: 1fr; } .hazard-agent-result { min-height: 0; } .hazard-result-empty, .hazard-result-loading { min-height: 220px; } } @media (max-width: 760px) { .hazard-overview-stats, .hazard-risk-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); } .hazard-overview-stats > div:nth-child(odd) { border-left: 0; } .hazard-scenario-grid { display: flex; padding-bottom: 4px; overflow-x: auto; scrollbar-width: thin; } .hazard-scenario-card { min-width: 176px; flex: 0 0 176px; } .hazard-agent-grid { grid-template-columns: 1fr; } .hazard-risk-panel > .panel-head { align-items: flex-start; flex-direction: column; } .hazard-risk-actions { width: 100%; align-items: stretch; flex-direction: column; } .hazard-risk-filters { width: 100%; justify-content: space-between; } .hazard-risk-filters button { flex: 1; } .hazard-scene-select { width: 100%; justify-content: space-between; } .hazard-risk-table-head { display: none; } .hazard-risk-row { grid-template-columns: minmax(0, 1fr) auto; gap: 8px 10px; padding: 13px; } .hazard-risk-row > .defect-name { grid-column: 1 / -1; } .hazard-risk-row > .hazard-risk-source { grid-column: 1; } .hazard-risk-row > .risk-severity { grid-column: 2; grid-row: 2; } .hazard-risk-row > .confidence { width: auto; grid-column: 1; grid-row: 3; } .hazard-risk-row > .hazard-risk-evidence { display: none; } .hazard-risk-row > .hazard-risk-state { grid-column: 2; grid-row: 3; } .hazard-risk-row .row-action { display: none; } } .evaluation-banner { display: flex; align-items: center; gap: 22px; margin-bottom: 14px; padding: 20px 22px; color: #fff; background: radial-gradient(circle at 92% 5%, rgba(55, 194, 175, 0.27), transparent 36%), linear-gradient(120deg, #10283c, #153c4a 65%, #174b55); border-radius: var(--radius-lg); box-shadow: var(--shadow-md); } .evaluation-grade { display: flex; width: 118px; flex: 0 0 auto; flex-direction: column; align-items: center; padding-right: 21px; border-right: 1px solid rgba(255, 255, 255, 0.14); } .evaluation-grade span { color: #98b3c2; font-size: 12px; } .evaluation-grade strong { margin: 2px 0; color: #66dfce; font-size: 50px; line-height: 1; } .evaluation-grade em { color: #c3d9df; font-size: 12px; font-style: normal; } .evaluation-summary-copy { min-width: 0; flex: 1; } .evaluation-summary-copy .eyebrow { color: #6fd9cc; } .evaluation-summary-copy h2 { font-size: 20px; } .evaluation-summary-copy p { margin: 7px 0 11px; color: #adc4ce; font-size: 13px; } .evaluation-tags { display: flex; flex-wrap: wrap; gap: 6px; } .evaluation-tags span { padding: 4px 7px; color: #b8d1d8; font-size: 11px; background: rgba(255, 255, 255, 0.07); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 4px; } .evaluation-grid { display: grid; grid-template-columns: minmax(360px, 0.85fr) minmax(460px, 1.15fr); gap: 14px; margin-bottom: 14px; } .radar-wrap svg { width: 100%; max-height: 340px; } .radar-grid polygon, .radar-grid path { fill: none; stroke: #d8e1e6; stroke-width: 1; } .radar-area { fill: rgba(15, 159, 143, 0.16); } .radar-line { fill: none; stroke: var(--teal); stroke-width: 2; } .radar-points circle { fill: #fff; stroke: var(--teal); stroke-width: 2; } .radar-labels text { fill: #5a6e7b; font-size: 13px; font-weight: 700; } .dimension-list { display: grid; gap: 2px; } .dimension-row { display: grid; grid-template-columns: 38px minmax(0, 1fr) 77px; align-items: center; gap: 10px; padding: 10px 4px; border-bottom: 1px solid #edf1f4; } .dimension-row:last-child { border-bottom: 0; } .dimension-icon { display: grid; width: 34px; height: 34px; place-items: center; border-radius: 8px; } .dimension-icon.green { color: var(--green); background: var(--green-soft); } .dimension-icon.blue { color: var(--blue); background: var(--blue-soft); } .dimension-icon.amber { color: var(--amber); background: var(--amber-soft); } .dimension-icon.purple { color: var(--purple); background: var(--purple-soft); } .dimension-icon.teal { color: var(--teal); background: var(--teal-soft); } .dimension-row > div:nth-child(2) { min-width: 0; } .dimension-row strong { font-size: 13px; } .dimension-row p { overflow: hidden; margin: 3px 0 0; color: var(--muted); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .dimension-score { display: flex; align-items: flex-end; flex-direction: column; } .dimension-score b { font-size: 17px; } .dimension-score span { display: inline-flex; align-items: center; gap: 2px; font-size: 11px; } .dimension-score span [data-icon] { width: 9px; height: 9px; } .dimension-score .up { color: var(--green); } .dimension-score .down { color: var(--red); } .evaluation-agent-panel { display: flex; align-items: center; gap: 16px; margin-bottom: 14px; background: linear-gradient(90deg, rgba(240, 237, 251, 0.72), rgba(255, 255, 255, 0.96)), #fff; border-color: #ded8f1; } .agent-orb { display: grid; width: 48px; height: 48px; flex: 0 0 auto; color: #fff; place-items: center; background: linear-gradient(135deg, #8266cf, #5b93c9); border-radius: 12px; box-shadow: 0 9px 23px rgba(124, 99, 200, 0.26); } .agent-orb [data-icon] { width: 23px; height: 23px; } .agent-copy { min-width: 0; flex: 1; } .agent-copy .eyebrow { color: var(--purple); } .agent-copy h2 { margin: 0; font-size: 16px; } .agent-copy > p { margin: 7px 0 10px; color: #526474; font-size: 13px; line-height: 1.7; } .agent-suggestions { display: flex; flex-wrap: wrap; gap: 7px; } .agent-suggestions span { display: inline-flex; align-items: center; gap: 5px; color: #655b84; font-size: 11px; } .agent-suggestions i { display: grid; width: 16px; height: 16px; color: #fff; font-size: 11px; font-style: normal; background: var(--purple); border-radius: 4px; place-items: center; } .chart-legend { display: flex; align-items: center; gap: 13px; color: var(--muted); font-size: 11px; } .chart-legend span { display: inline-flex; align-items: center; gap: 5px; } .legend-line { width: 15px; height: 2px; border-radius: 2px; } .legend-line.teal { background: var(--teal); } .legend-line.amber { background: var(--amber); } .line-chart { position: relative; display: grid; grid-template-columns: 30px 1fr; grid-template-rows: 235px 24px; gap: 0 8px; } .chart-y-axis { display: flex; grid-row: 1; flex-direction: column; justify-content: space-between; padding: 9px 0 6px; color: var(--muted-2); font-size: 11px; text-align: right; } .line-chart svg { width: 100%; height: 235px; } .chart-grid path { stroke: #e6ecef; stroke-width: 1; stroke-dasharray: 3 4; } .chart-area { fill: rgba(15, 159, 143, 0.08); } .chart-line { fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; } .teal-line { stroke: var(--teal); } .amber-line { stroke: var(--amber); } .chart-points circle { fill: #fff; stroke: var(--teal); stroke-width: 2; } .chart-x-axis { display: flex; grid-column: 2; grid-row: 2; align-items: center; justify-content: space-between; color: var(--muted); font-size: 11px; } .kanban-board { display: grid; grid-template-columns: repeat(4, minmax(245px, 1fr)); gap: 13px; overflow-x: auto; padding-bottom: 8px; } .kanban-column { min-width: 245px; padding: 10px; background: #edf2f4; border: 1px solid #e2e9ed; border-radius: 10px; } .kanban-head { display: flex; align-items: center; justify-content: space-between; padding: 3px 3px 10px; } .kanban-head > span { display: inline-flex; align-items: center; gap: 6px; color: #4e6271; font-size: 13px; font-weight: 800; } .kanban-head b { display: inline-flex; min-width: 18px; height: 18px; align-items: center; justify-content: center; color: #667987; font-size: 11px; background: rgba(255, 255, 255, 0.75); border-radius: 20px; } .kanban-head button { display: grid; width: 25px; height: 25px; color: #667987; cursor: pointer; background: transparent; border: 0; border-radius: 5px; place-items: center; } .kanban-head button:hover { background: rgba(255, 255, 255, 0.75); } .kanban-head button [data-icon] { width: 14px; height: 14px; } .column-dot { width: 7px; height: 7px; border-radius: 50%; } .column-dot.pending { background: var(--amber); } .column-dot.processing { background: var(--blue); } .column-dot.review { background: var(--purple); } .column-dot.closed { background: var(--green); } .work-card { display: block; width: 100%; margin-bottom: 9px; padding: 12px; text-align: left; cursor: pointer; background: #fff; border: 1px solid #e1e8ec; border-left: 3px solid #aebdc7; border-radius: 8px; box-shadow: 0 3px 9px rgba(15, 33, 48, 0.04); transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease; } .work-card:hover { border-color: #c9d6de; box-shadow: 0 9px 20px rgba(15, 33, 48, 0.09); transform: translateY(-2px); } .work-card.priority-high { border-left-color: var(--red); } .work-card.priority-medium { border-left-color: var(--amber); } .work-card.priority-low { border-left-color: var(--blue); } .work-card-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 7px; color: var(--muted); font-size: 11px; } .work-tag { padding: 3px 6px; font-size: 11px; font-weight: 800; border-radius: 4px; } .work-tag.high { color: var(--red); background: var(--red-soft); } .work-tag.medium { color: #a56d13; background: var(--amber-soft); } .work-tag.low { color: #2d72ad; background: var(--blue-soft); } .work-tag.closed { color: #397d56; background: var(--green-soft); } .work-card > strong { display: block; font-size: 14px; line-height: 1.5; } .work-card > p { margin: 6px 0 11px; color: var(--muted); font-size: 12px; line-height: 1.6; } .work-meta { display: flex; align-items: center; gap: 6px; color: var(--muted); font-size: 11px; } .work-meta span:last-child { margin-left: auto; } .avatar.mini { width: 20px; height: 20px; font-size: 11px; background: #4a7088; border-radius: 5px; } .success-text { color: var(--green) !important; font-weight: 700; } .progress-line { height: 4px; margin: 3px 0 10px; overflow: hidden; background: #edf1f4; border-radius: 10px; } .progress-line i { display: block; height: 100%; background: linear-gradient(90deg, var(--blue), #54a5dc); border-radius: inherit; } .settings-layout { display: grid; grid-template-columns: 190px minmax(0, 1fr); gap: 14px; } .settings-nav { display: flex; height: fit-content; flex-direction: column; gap: 4px; padding: 8px; background: #fff; border: 1px solid var(--line); border-radius: var(--radius-md); } .settings-nav button { display: flex; align-items: center; gap: 9px; padding: 10px; color: var(--muted); font-size: 13px; text-align: left; cursor: pointer; background: transparent; border: 0; border-radius: 7px; } .settings-nav button.active { color: #1f6f66; font-weight: 800; background: var(--teal-soft); } .settings-nav [data-icon] { width: 15px; height: 15px; } .settings-content { min-width: 0; } .integration-list { display: grid; gap: 5px; } .integration-row { display: grid; grid-template-columns: 38px minmax(0, 1fr) auto 32px; align-items: center; gap: 11px; padding: 10px 6px; border-bottom: 1px solid #edf1f4; } .integration-row:last-child { border-bottom: 0; } .integration-row strong { display: block; font-size: 13px; } .integration-row p { margin: 3px 0 0; color: var(--muted); font-size: 11px; } .settings-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); margin: 14px 0 0; } .setting-card { display: flex; flex-direction: column; align-items: flex-start; } .setting-card h3 { margin: 11px 0 0; font-size: 14px; } .setting-card > p { min-height: 30px; margin: 5px 0 12px; color: var(--muted); font-size: 12px; } .setting-value { display: flex; width: 100%; align-items: flex-end; justify-content: space-between; margin-bottom: 15px; padding: 9px 0; border-top: 1px solid #edf1f4; border-bottom: 1px solid #edf1f4; } .setting-value strong { font-size: 17px; } .setting-value span { color: var(--muted); font-size: 11px; } .settings-content .primary-button { min-height: 33px; } .evidence-drawer { position: fixed; z-index: 90; display: none; inset: 0; } .evidence-drawer.open { display: block; } .drawer-scrim { position: absolute; inset: 0; background: rgba(8, 20, 31, 0.46); backdrop-filter: blur(2px); animation: viewIn 0.2s ease; } .drawer-panel { position: absolute; top: 0; right: 0; bottom: 0; width: min(520px, 100%); overflow-y: auto; padding: 20px; background: #fff; border-left: 1px solid var(--line); box-shadow: -18px 0 50px rgba(8, 24, 38, 0.18); transform: translateX(100%); transition: transform 0.24s ease; } .evidence-drawer.open .drawer-panel { transform: translateX(0); } .drawer-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; padding-bottom: 14px; border-bottom: 1px solid var(--line); } .drawer-head h2 { margin: 0; font-size: 19px; } .drawer-summary { display: grid; grid-template-columns: 42px minmax(0, 1fr) auto; align-items: start; gap: 12px; margin: 16px 0; padding: 14px; background: #f8fafb; border: 1px solid #e7edf0; border-radius: 9px; } .drawer-summary-icon { display: grid; width: 40px; height: 40px; color: var(--red); place-items: center; background: var(--red-soft); border-radius: 9px; } .drawer-summary-icon [data-icon] { width: 20px; height: 20px; } .drawer-tags { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 6px; } .drawer-tags span { padding: 3px 6px; color: #5f7180; font-size: 11px; font-weight: 700; background: #eaf0f3; border-radius: 4px; } .drawer-summary h3 { margin: 0; font-size: 16px; line-height: 1.55; } .drawer-summary p { margin: 4px 0 0; color: var(--muted); font-size: 12px; } .drawer-summary > strong { color: var(--teal); font-size: 18px; } .drawer-section { padding: 15px 0; border-top: 1px solid #edf1f4; } .drawer-section-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 10px; } .drawer-section-head h3 { margin: 0; font-size: 14px; } .drawer-section-head > span:last-child:not(.subtle-badge) { color: var(--muted); font-size: 11px; } .drawer-conclusion { margin: 0; color: #4f6270; font-size: 13px; line-height: 1.8; } .drawer-evidence-list { display: grid; gap: 7px; } .drawer-evidence-list > div { display: grid; grid-template-columns: 34px minmax(0, 1fr) auto; align-items: center; gap: 9px; padding: 9px; background: var(--surface-soft); border: 1px solid #e9eef1; border-radius: 7px; } .drawer-evidence-icon { display: grid; width: 32px; height: 32px; place-items: center; border-radius: 7px; } .drawer-evidence-icon.blue { color: var(--blue); background: var(--blue-soft); } .drawer-evidence-icon.teal { color: var(--teal); background: var(--teal-soft); } .drawer-evidence-icon.amber { color: var(--amber); background: var(--amber-soft); } .drawer-evidence-icon.purple { color: var(--purple); background: var(--purple-soft); } .drawer-evidence-list p { display: flex; min-width: 0; flex-direction: column; margin: 0; } .drawer-evidence-list strong { font-size: 13px; } .drawer-evidence-list small { margin-top: 2px; color: var(--muted); font-size: 11px; } .drawer-evidence-list b { color: var(--green); font-size: 13px; } .drawer-steps { display: grid; gap: 8px; margin: 0; padding-left: 20px; color: #536573; font-size: 12px; line-height: 1.7; } .drawer-steps li::marker { color: var(--teal); font-weight: 800; } .drawer-actions { display: flex; justify-content: flex-end; gap: 9px; padding-top: 16px; border-top: 1px solid var(--line); } .upload-modal { position: fixed; z-index: 90; inset: 0; display: grid; padding: 24px; place-items: center; } .upload-modal-scrim { position: absolute; inset: 0; background: rgba(8, 20, 31, 0.58); backdrop-filter: blur(3px); } .upload-dialog { position: relative; width: min(720px, 100%); max-height: calc(100vh - 48px); overflow-y: auto; padding: 24px; background: var(--surface); border: 1px solid var(--line); border-radius: 12px; box-shadow: var(--shadow-lg); } .upload-dialog-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; margin-bottom: 20px; } .upload-dialog-head h2 { margin: 4px 0 0; font-size: 20px; } .document-preview-dialog { width: min(1120px, 100%); overflow: hidden; } .document-preview-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; padding-bottom: 12px; border-bottom: 1px solid var(--line); } .document-preview-body { min-height: 320px; max-height: calc(100vh - 220px); overflow: auto; background: #f4f7f8; border: 1px solid #e2e9ec; border-radius: 8px; } .document-preview-body iframe { display: block; width: 100%; height: calc(100vh - 230px); min-height: 520px; background: #fff; border: 0; } .document-preview-text { min-height: 320px; margin: 0; padding: 18px; color: #314352; font-family: "Microsoft YaHei", "PingFang SC", sans-serif; font-size: 13px; line-height: 1.75; white-space: pre-wrap; word-break: break-word; background: #fff; } .document-preview-empty { display: grid; min-height: 320px; align-content: center; justify-items: center; padding: 30px; color: var(--muted); text-align: center; background: #fff; } .document-preview-empty [data-icon] { width: 28px; height: 28px; color: var(--purple); } .document-preview-empty strong { margin-top: 10px; color: var(--ink); font-size: 15px; } .document-preview-empty p { max-width: 520px; margin: 6px 0 0; font-size: 12px; line-height: 1.7; } .document-reprocess-error { display: flex; gap: 10px; margin-bottom: 16px; padding: 12px; color: #9d3e42; background: var(--red-soft); border: 1px solid #f4c9ca; border-radius: 8px; } .document-reprocess-error > [data-icon] { width: 18px; height: 18px; flex: 0 0 auto; } .document-reprocess-error strong { display: block; font-size: 13px; } .document-reprocess-error p { margin: 4px 0 0; color: #a75b5e; font-size: 11px; line-height: 1.6; white-space: pre-wrap; word-break: break-word; } .document-records-dialog { width: min(900px, 100%); } .processing-records-list { max-height: calc(100vh - 250px); overflow-y: auto; padding-right: 4px; } .upload-form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; } .upload-field { display: grid; gap: 6px; } .upload-field-wide { grid-column: 1 / -1; } .upload-field > span { color: var(--muted); font-size: 13px; } .upload-field input, .upload-field select { width: 100%; height: 40px; padding: 0 11px; color: var(--ink); background: var(--surface-soft); border: 1px solid var(--line); border-radius: 7px; } .upload-field select.invalid { border-color: var(--red); box-shadow: 0 0 0 3px rgba(216, 77, 80, 0.1); } .upload-field-error { color: var(--red) !important; font-size: 11px; line-height: 1.5; } .upload-field input:focus, .upload-field select:focus { border-color: var(--teal); outline: 2px solid rgba(15, 159, 143, 0.13); } .upload-file-field { position: relative; display: grid; min-height: 142px; margin-top: 16px; padding: 20px; text-align: center; cursor: pointer; background: var(--surface-soft); border: 1px dashed var(--line-strong); border-radius: 10px; place-items: center; } .parse-mode-fieldset { margin: 16px 0 0; padding: 0; border: 0; } .parse-mode-fieldset legend { margin-bottom: 8px; color: var(--muted); font-size: 13px; } .parse-mode-options { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } .parse-mode-options label { position: relative; display: flex; min-width: 0; gap: 10px; padding: 13px; cursor: pointer; background: var(--surface-soft); border: 1px solid var(--line); border-radius: 8px; } .parse-mode-options label:has(input:checked) { background: var(--teal-soft); border-color: var(--teal); } .parse-mode-options input { margin-top: 3px; accent-color: var(--teal); } .parse-mode-options span { display: grid; gap: 2px; } .parse-mode-options strong { font-size: 14px; } .parse-mode-options small { color: var(--muted); font-size: 12px; } .upload-file-field:hover { border-color: var(--teal); background: var(--teal-soft); } .upload-file-field [data-icon] { width: 30px; height: 30px; color: var(--teal); } .upload-file-field small { color: var(--muted); } .upload-file-field.has-file { background: var(--green-soft); border-color: var(--green); border-style: solid; } .upload-file-field.has-file strong { overflow-wrap: anywhere; } .upload-file-field.has-file [data-icon] { color: var(--green); } .upload-file-field input { position: absolute; width: 1px; height: 1px; overflow: hidden; opacity: 0; } .upload-progress { margin-top: 16px; padding: 13px 14px; background: var(--surface-soft); border: 1px solid var(--line); border-radius: 8px; } .upload-progress > div:first-child { display: flex; align-items: center; justify-content: space-between; gap: 16px; font-size: 13px; } .upload-progress-track { height: 7px; margin-top: 10px; overflow: hidden; background: var(--surface-strong); border-radius: 999px; } .upload-progress-track i { display: block; width: 0; height: 100%; background: var(--teal); border-radius: inherit; transition: width 0.25s ease; } .upload-dialog-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 20px; } .toast-container { position: fixed; right: 22px; bottom: 22px; z-index: 100; display: grid; gap: 8px; pointer-events: none; } .toast { display: flex; min-width: 260px; max-width: 380px; align-items: center; gap: 9px; padding: 11px 13px; color: #eff8fa; background: rgba(13, 27, 42, 0.96); border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 8px; box-shadow: var(--shadow-lg); animation: toastIn 0.22s ease; } .toast [data-icon] { color: #5ed8c8; } .toast span:last-child { font-size: 13px; } .toast.removing { animation: toastOut 0.2s ease forwards; } @keyframes viewIn { from { opacity: 0; transform: translateY(7px); } to { opacity: 1; transform: translateY(0); } } @keyframes dropIn { from { opacity: 0; transform: translateY(-5px) scale(0.99); } to { opacity: 1; transform: translateY(0) scale(1); } } @keyframes slideUp { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } @keyframes livePulse { 0%, 100% { box-shadow: 0 0 0 3px rgba(61, 186, 117, 0.12); } 50% { box-shadow: 0 0 0 6px rgba(61, 186, 117, 0.03); } } @keyframes airflow { to { stroke-dashoffset: -42; } } @keyframes nodePulse { 0%, 100% { transform: scale(0.9); opacity: 0.11; } 50% { transform: scale(1.18); opacity: 0.22; } } @keyframes toastIn { from { opacity: 0; transform: translateX(14px); } to { opacity: 1; transform: translateX(0); } } @keyframes toastOut { to { opacity: 0; transform: translateX(15px); } } @media (max-width: 1450px) { .ventilation-panel { grid-column: span 7; } .evaluation-panel { grid-column: span 5; } .sensor-panel { grid-column: span 5; } .diagnosis-panel { grid-column: span 7; } .diagnosis-cards { grid-template-columns: repeat(3, minmax(0, 1fr)); } .source-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .object-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } .business-data-layout { grid-template-columns: 185px minmax(430px, 1fr) 315px; } } @media (max-width: 1180px) { :root { --sidebar-width: 232px; } .user-copy, .global-search kbd { display: none; } .global-search { width: 220px; } .kpi-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .ventilation-panel, .evaluation-panel, .sensor-panel, .diagnosis-panel, .knowledge-panel, .tasks-panel { grid-column: span 12; } .diagnosis-cards { grid-template-columns: repeat(5, minmax(0, 1fr)); } .two-column-grid, .knowledge-grid, .evaluation-grid { grid-template-columns: 1fr; } .knowledge-category-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .diagnosis-table-head, .diagnosis-row { grid-template-columns: minmax(260px, 2fr) 80px 80px 90px 64px 26px; } .business-data-layout { grid-template-columns: 190px minmax(0, 1fr); } .business-detail-panel { grid-column: 1 / -1; min-height: 0; } } @media (max-width: 900px) { .sidebar { transform: translateX(-102%); } .sidebar.open { transform: translateX(0); box-shadow: var(--shadow-lg); } .sidebar-close, .mobile-menu { display: inline-flex !important; } .sidebar-scrim.show { display: block; } .workspace { width: 100%; margin-left: 0; } .app-loading { left: 0; } .topbar { padding: 0 16px; } .content-area { padding: 16px 14px 28px; } .user-menu { display: none; } .notification-popover { right: 14px; } .source-grid, .diagnosis-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); } .settings-layout { grid-template-columns: 1fr; } .settings-nav { overflow-x: auto; flex-direction: row; } .settings-nav button { flex: 0 0 auto; } .settings-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .business-data-layout { grid-template-columns: 1fr; } .business-category-panel { position: static; min-height: 0; } .business-category-list { grid-template-columns: repeat(3, minmax(0, 1fr)); } .business-storage { display: none; } .kanban-board { grid-template-columns: repeat(4, 265px); } } @media (max-width: 680px) { .upload-modal { padding: 12px; } .upload-dialog { max-height: calc(100vh - 24px); padding: 18px; } .upload-form-grid { grid-template-columns: 1fr; } .parse-mode-options { grid-template-columns: 1fr; } .upload-field-wide { grid-column: auto; } .topbar { min-height: 64px; gap: 9px; } .topbar-title h1 { font-size: 18px; } .topbar-title p, .status-pill, .global-search { display: none; } .topbar-actions { margin-left: auto; } .content-area { padding: 12px 10px 24px; } .context-bar, .view-toolbar { align-items: flex-start; flex-direction: column; } .segmented-control, .toolbar-actions { width: 100%; } .segmented-control button, .toolbar-actions > button { flex: 1; } .kpi-grid, .source-grid, .diagnosis-summary, .knowledge-category-grid, .object-grid, .settings-grid { grid-template-columns: 1fr; } .business-kpi-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .business-category-list { grid-template-columns: repeat(2, minmax(0, 1fr)); } .document-row { grid-template-columns: 38px minmax(0, 1fr) 15px; } .document-row .document-extraction, .document-row .document-fields { grid-column: 2; } .document-row > [data-icon] { grid-column: 3; grid-row: 1; } .kpi-card { padding: 13px; } .panel { padding: 13px; } .panel-head { align-items: flex-start; flex-direction: column; gap: 8px; } .panel-actions { width: 100%; justify-content: space-between; } .mine-map { min-height: 340px; } .ventilation-map { min-height: 340px; } .map-legend { display: none; } .map-toolbar > span { display: none; } .map-toolbar { justify-content: flex-end; } .score-overview { align-items: flex-start; } .score-ring { width: 104px; height: 104px; } .score-ring::after { width: 80px; height: 80px; } .sensor-metric { grid-template-columns: 1fr 82px; } .sparkline { width: 82px; } .diagnosis-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); } .knowledge-hero, .evaluation-banner { align-items: flex-start; flex-direction: column; } .knowledge-hero-stats { width: 100%; justify-content: space-between; gap: 12px; } .knowledge-hero-stats div { align-items: flex-start; } .knowledge-console { align-items: stretch; flex-wrap: wrap; } .knowledge-console .console-icon { align-self: center; } .knowledge-console textarea { min-width: calc(100% - 34px); } .knowledge-console .primary-button { width: 100%; } .graph-canvas svg { height: 260px; } .diagnosis-table-head { display: none; } .diagnosis-row { grid-template-columns: 1fr auto; gap: 8px 12px; padding: 13px; } .diagnosis-row > span:nth-child(2), .diagnosis-row > span:nth-child(3) { grid-column: 1; } .diagnosis-row > span:nth-child(4) { grid-column: 1; } .diagnosis-row > span:nth-child(5) { grid-column: 2; grid-row: 1; } .diagnosis-row .row-action { display: none; } .evaluation-grade { width: 100%; align-items: flex-start; padding: 0 0 14px; border-right: 0; border-bottom: 1px solid rgba(255, 255, 255, 0.14); } .evaluation-banner .primary-button { width: 100%; } .radar-wrap svg { max-height: 280px; } .evaluation-agent-panel { align-items: flex-start; flex-wrap: wrap; } .evaluation-agent-panel .secondary-button { width: 100%; } .evidence-health { align-items: flex-start; flex-direction: column; } .line-chart { grid-template-rows: 190px 24px; } .line-chart svg { height: 190px; } .notification-popover { top: 59px; right: 10px; left: 10px; width: auto; } .toast-container { right: 10px; bottom: 10px; left: 10px; } .toast { min-width: 0; max-width: none; } .drawer-panel { padding: 16px; } .drawer-summary { grid-template-columns: 38px minmax(0, 1fr); } .drawer-summary > strong { grid-column: 2; } } @media (prefers-reduced-motion: reduce) { .loading-spinner { animation: none; } *, *::before, *::after { scroll-behavior: auto !important; animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } }