:root {
  --bg: #f5f6f7;
  --surface: #ffffff;
  --ink: #333333;
  --muted: #666666;
  --line: #eaecf0;
  --green: #157f57;
  --green-soft: #e5f3ec;
  --success: #12b76a;
  --warning: #f79009;
  --danger: #f04438;
  --info: #0ba5ec;
  --coral: #df765d;
  --amber: #d39735;
  --blue: #4385a8;
  --sidebar: #17231e;
  --sidebar-muted: #91a199;
  --shadow: 0 2px 8px rgba(28, 40, 48, .06);
}

.modal.metric-similarity-modal { width: min(760px, 100%); }
.metric-similarity-intro { margin: 0 0 16px; color: var(--muted); font-size: 11px; line-height: 1.65; }
.metric-similarity-peer-label, .metric-similarity-business-label { display: flex; align-items: center; gap: 9px; color: #53625a; font-size: 10px; }
.metric-similarity-peer-label select { min-width: 0; flex: 1; }
.metric-similarity-comparison { margin: 14px 0; display: grid; grid-template-columns: minmax(0, 1fr) 34px minmax(0, 1fr); gap: 9px; align-items: stretch; }
.metric-similarity-card { min-width: 0; padding: 12px; border: 1px solid #e0e7e3; border-radius: 5px; background: #f8faf9; }
.metric-similarity-card strong, .metric-similarity-card code, .metric-similarity-card small, .metric-similarity-card span { display: block; }
.metric-similarity-card strong { color: var(--ink); font-size: 11px; overflow-wrap: anywhere; }
.metric-similarity-card code { margin-top: 4px; color: #527063; font-size: 9px; overflow-wrap: anywhere; }
.metric-similarity-card small { margin-top: 8px; color: var(--muted); font-size: 9px; overflow-wrap: anywhere; }
.metric-similarity-card span { margin-top: 8px; color: #5b6c62; font-size: 9px; line-height: 1.45; overflow-wrap: anywhere; }
.metric-similarity-vs { align-self: center; color: #a85b31; font-size: 10px; font-weight: 800; text-align: center; }
.metric-similarity-reason { grid-column: 1 / -1; margin: 0; color: #9b6b51; font-size: 9px; }
.metric-similarity-modal textarea { min-height: 72px; }
.metric-similarity-actions { margin-top: 16px; padding-top: 14px; display: flex; align-items: end; justify-content: space-between; gap: 12px; border-top: 1px solid var(--line); }
.metric-similarity-actions > div { display: flex; align-items: end; gap: 8px; }
.metric-similarity-business-label { flex-direction: column; align-items: stretch; gap: 5px; }
.metric-similarity-business-label select { min-width: 220px; }

* { box-sizing: border-box; }
[hidden] { display: none !important; }
button:disabled { cursor: wait; opacity: .6; }
.auth-screen { position: relative; min-height: 100vh; display: grid; place-items: center; padding: 24px; overflow: hidden; background: #f2f5f3; }
.auth-panel { position: relative; z-index: 1; width: min(400px, 100%); padding: 28px 30px 30px; border: 1px solid #dfe6e2; border-radius: 8px; background: rgba(255,255,255,.96); box-shadow: 0 20px 52px rgba(29, 48, 39, .11); }
.auth-brand { display: flex; align-items: center; gap: 10px; padding-bottom: 22px; border-bottom: 1px solid #edf1ef; color: var(--ink); font-size: 15px; font-weight: 800; }
.auth-main { padding-top: 28px; text-align: center; }
.auth-dingtalk-mark { width: 48px; height: 48px; margin: 0 auto 18px; display: grid; place-items: center; border-radius: 8px; color: #fff; background: #1677ff; box-shadow: 0 8px 20px rgba(22,119,255,.22); font-size: 21px; font-weight: 800; }
.auth-panel h1 { margin: 0; font-size: 25px; }
.auth-copy { margin: 9px 0 26px; color: var(--muted); font-size: 12px; line-height: 1.6; }
.login-form { display: grid; gap: 8px; }
.login-form label { margin-top: 9px; color: #4d5c54; font-size: 11px; font-weight: 700; }
.login-form input { width: 100%; height: 42px; padding: 0 12px; border: 1px solid #d9e1dc; border-radius: 5px; outline: 0; color: var(--ink); background: #fcfdfc; font: inherit; font-size: 13px; }
.login-form input:focus { border-color: var(--green); box-shadow: 0 0 0 3px rgba(21,127,87,.12); }
.login-button { height: 40px; min-width: 96px; border: 0; border-radius: 5px; color: #fff; background: var(--green); font-size: 12px; font-weight: 750; cursor: pointer; }
.login-button:hover { background: #0e6947; }
.dingtalk-login-button { height: 44px; display: flex; align-items: center; justify-content: center; border: 1px solid #1677ff; border-radius: 5px; color: #fff; background: #1677ff; font-size: 13px; font-weight: 750; text-decoration: none; }
.dingtalk-login-button:hover { background: #0f68df; }
.dingtalk-login-button:focus-visible, .account-login-button:focus-visible { outline: 3px solid rgba(22,119,255,.2); outline-offset: 2px; }
.account-login-button { width: 100%; height: 42px; margin-top: 10px; border: 1px solid #d6dfda; border-radius: 5px; color: #425149; background: #fff; font-size: 12px; font-weight: 700; cursor: pointer; }
.account-login-button:hover { border-color: #9ab5a8; background: #f7faf8; }
.auth-panel.is-dingtalk-unavailable .account-login-button { margin-top: 0; border-color: var(--green); color: #fff; background: var(--green); }
.auth-panel.is-dingtalk-unavailable .auth-dingtalk-mark { color: #fff; background: var(--green); box-shadow: 0 8px 20px rgba(21,127,87,.18); }
.auth-error, .login-error { margin: 12px 0 0; color: #b34d40; font-size: 11px; line-height: 1.5; text-align: left; }
.auth-modal-backdrop { position: fixed; inset: 0; z-index: 3; display: grid; place-items: center; padding: 20px; background: rgba(20,31,26,.44); }
.auth-login-modal { width: min(420px, 100%); padding: 24px; border-radius: 8px; background: #fff; box-shadow: 0 24px 70px rgba(12,24,18,.24); text-align: left; }
.auth-login-head { display: flex; align-items: start; justify-content: space-between; gap: 20px; padding-bottom: 16px; border-bottom: 1px solid #edf1ef; }
.auth-login-head h2 { margin: 0; font-size: 19px; }
.auth-login-head p { margin: 6px 0 0; color: var(--muted); font-size: 11px; }
.auth-close-button { width: 30px; height: 30px; flex: none; border: 0; border-radius: 4px; color: #67736d; background: transparent; font-size: 20px; cursor: pointer; }
.auth-close-button:hover { background: #f1f4f2; }
.auth-login-modal .login-form { padding-top: 10px; }
.auth-login-actions { margin-top: 16px; display: flex; justify-content: flex-end; gap: 8px; }
.account-login-cancel { height: 40px; min-width: 72px; border: 1px solid #d6dfda; border-radius: 5px; color: #4d5c54; background: #fff; font-size: 12px; font-weight: 700; cursor: pointer; }
.account-login-cancel:hover { background: #f5f8f6; }
.boot-screen { min-height: 100vh; display: grid; place-content: center; justify-items: center; gap: 9px; color: #6b746f; background: #f4f6f4; font-size: 11px; }
.boot-screen strong { color: #263b31; font-size: 15px; }
.boot-screen span:last-child { font-size: 10px; }
.boot-mark { width: 34px; height: 34px; padding: 7px; display: flex; gap: 3px; align-items: end; border-radius: 7px; background: #f1d46b; }
.boot-mark i { display: block; width: 5px; border-radius: 2px 2px 0 0; background: var(--sidebar); animation: boot-pulse 1.1s ease-in-out infinite; }
.boot-mark i:nth-child(1) { height: 10px; animation-delay: -.2s; }.boot-mark i:nth-child(2) { height: 19px; animation-delay: -.1s; }.boot-mark i:nth-child(3) { height: 14px; }
@keyframes boot-pulse { 0%, 100% { opacity: .45; transform: scaleY(.75); } 50% { opacity: 1; transform: scaleY(1); } }
html { min-width: 320px; background: var(--bg); }
body { min-height: 100vh; margin: 0; color: var(--ink); background: var(--bg); font-family: Inter, "PingFang SC", "Microsoft YaHei", system-ui, sans-serif; font-size: 14px; font-variant-numeric: tabular-nums; }
button, input, select { font: inherit; }
button { color: inherit; }
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }

.app-shell { min-height: 100vh; display: grid; grid-template-columns: 232px minmax(0, 1fr); }
.app-loading { margin: 12px 32px -2px; padding: 9px 12px; border: 1px solid #dce9e1; border-radius: 5px; color: #507061; background: #f1f8f4; font-size: 11px; }
.sidebar { position: fixed; inset: 0 auto 0 0; z-index: 20; width: 232px; padding: 25px 16px 18px; display: flex; flex-direction: column; background: var(--sidebar); color: #fff; }
.brand { height: 38px; padding: 0 10px; display: flex; align-items: center; gap: 11px; font-size: 17px; font-weight: 700; }
.brand-mark { width: 27px; height: 27px; padding: 5px; display: flex; gap: 3px; align-items: end; border-radius: 6px; background: #f1d46b; }
.brand-mark i { display: block; width: 4px; border-radius: 2px 2px 0 0; background: var(--sidebar); }
.brand-mark i:nth-child(1) { height: 7px; }.brand-mark i:nth-child(2) { height: 14px; }.brand-mark i:nth-child(3) { height: 10px; }
.nav { margin-top: 37px; overflow-y: auto; padding-right: 3px; scrollbar-width: thin; scrollbar-color: #40544a transparent; }
.nav-label { margin: 0 12px 10px; color: #687b72; font-size: 11px; font-weight: 700; text-transform: uppercase; }
.nav-label-spaced { margin-top: 30px; }
.nav-group-toggle { width: 100%; height: 44px; margin: 3px 0; padding: 0 12px; display: grid; grid-template-columns: 18px 1fr 18px; align-items: center; gap: 12px; border: 0; border-radius: 6px; color: var(--sidebar-muted); background: transparent; cursor: pointer; text-align: left; }.nav-group-toggle:hover, .nav-group-toggle[aria-expanded="true"] { color: #fff; background: rgba(255,255,255,.055); }.nav-chevron { display: grid; place-items: center; font-size: 15px; transition: transform .18s; }.nav-group-toggle[aria-expanded="true"] .nav-chevron { transform: rotate(180deg); }
.nav-submenu { margin: 1px 12px 7px; }.nav-submenu[hidden] { display: none; }.nav-subitem { height: 36px; margin: 1px 0; padding-left: 42px; font-size: 12px; }.nav-subitem[data-nav-current="true"] { box-shadow: inset 2px 0 #f1d46b; }
.nav-item { width: 100%; height: 44px; margin: 3px 0; padding: 0 12px; display: flex; align-items: center; gap: 12px; border: 0; border-radius: 6px; color: var(--sidebar-muted); background: transparent; cursor: pointer; text-align: left; transition: background .18s, color .18s; }
.nav-submenu .nav-subitem { width: 100%; padding: 0 8px 0 26px; }
.nav-item:hover { background: rgba(255,255,255,.055); color: #fff; }
.nav-item[data-nav-current="true"] { color: #fff; background: #293a33; box-shadow: inset 3px 0 #f1d46b; }
.published-directory-nav { margin: 0; }.published-directory-nav[hidden] { display: none; }.published-directory-toggle { width: 100%; margin: 3px 0; }.published-directory-toggle[data-nav-current="true"] { color: #fff; background: #293a33; }.published-directory-toggle.is-empty { color: #74877e; }.published-directory-toggle.is-empty:hover { color: #aebdb5; }.published-directory-branch { margin: 0; }.published-directory-branch[hidden] { display: none; }.published-directory-item { min-height: 36px; height: 36px; color: var(--sidebar-muted); }.published-directory-item:hover { color: #fff; }.published-directory-item[data-nav-current="true"] { color: #fff; background: #293a33; box-shadow: inset 3px 0 #f1d46b; }
.nav-icon { width: 18px; height: 18px; display: inline-grid; place-items: center; flex: none; color: currentColor; font-size: 17px; }
.chart-icon { display: flex; gap: 2px; align-items: end; justify-content: center; }
.chart-icon i { width: 3px; border-radius: 1px; background: currentColor; }.chart-icon i:nth-child(1){height:7px}.chart-icon i:nth-child(2){height:13px}.chart-icon i:nth-child(3){height:10px}
.sidebar-foot { margin-top: auto; padding: 17px 8px 0; display: grid; grid-template-columns: 34px 1fr 28px; gap: 10px; align-items: center; border-top: 1px solid rgba(255,255,255,.09); }
.avatar-button { width: 34px; height: 34px; padding: 0; border: 0; border-radius: 50%; background: transparent; cursor: pointer; }
.avatar-button:hover .avatar { box-shadow: 0 0 0 3px rgba(241,212,107,.24); }
.avatar { width: 34px; height: 34px; display: grid; place-items: center; border-radius: 50%; color: #17231e; background: #f1d46b; font-size: 11px; font-weight: 800; }
.sidebar-foot strong, .sidebar-foot span, .sidebar-foot small { display: block; }.sidebar-foot strong { font-size: 12px; }.sidebar-foot span, .sidebar-foot small { margin-top: 2px; color: #768b81; font-size: 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }.sidebar-foot small { color: #5f756a; font-size: 9px; }

.main { grid-column: 2; min-width: 0; }
.topbar { height: 66px; padding: 0 34px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid var(--line); background: rgba(255,255,255,.94); position: sticky; top: 0; z-index: 10; backdrop-filter: blur(10px); }
.topbar-left, .topbar-actions, .heading-actions { display: flex; align-items: center; }
.breadcrumb { display: flex; gap: 9px; align-items: center; color: #87908b; font-size: 12px; }.breadcrumb b { color: #c7cdca; }.breadcrumb strong { color: #343e39; }
.menu-button { display: none; width: 38px; height: 38px; border: 1px solid var(--line); border-radius: 6px; background: #fff; cursor: pointer; }
.topbar-actions { gap: 12px; }
.topbar-user { min-width: 0; display: flex; align-items: center; gap: 8px; padding-left: 4px; border-left: 1px solid var(--line); }
.topbar-user-copy { min-width: 0; max-width: 148px; }
.topbar-user-copy strong, .topbar-user-copy span, .topbar-user-copy small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.topbar-user-copy strong { color: var(--ink); font-size: 12px; }
.topbar-user-copy span { margin-top: 2px; color: var(--muted); font-size: 10px; }
.topbar-user-copy small { margin-top: 2px; color: #8a938e; font-size: 9px; }
.global-search { position: relative; width: 230px; flex: none; }
.search { width: 100%; height: 36px; padding: 0 11px; display: flex; align-items: center; gap: 8px; border: 1px solid var(--line); border-radius: 6px; background: #fafbfa; color: #858e89; }
.search input { width: 100%; border: 0; outline: 0; background: transparent; color: var(--ink); font-size: 12px; }.search input::placeholder { color: #9ba39f; }
.global-search:focus-within .search { border-color: #9bbcaf; background: #fff; box-shadow: 0 0 0 2px rgba(72, 125, 101, .1); }
.global-search-results { position: absolute; top: calc(100% + 7px); left: 0; z-index: 30; width: min(360px, calc(100vw - 32px)); max-height: min(420px, calc(100vh - 96px)); padding: 5px; overflow-y: auto; border: 1px solid #d7dfda; border-radius: 6px; background: #fff; box-shadow: 0 14px 34px rgba(35, 55, 45, .14); }
.global-search-result { width: 100%; min-height: 47px; padding: 7px 9px; display: grid; grid-template-columns: 28px minmax(0, 1fr); gap: 9px; align-items: center; border: 0; border-radius: 4px; color: var(--ink); background: transparent; text-align: left; cursor: pointer; }
.global-search-result:hover, .global-search-result.is-active { background: #edf4f0; }
.global-search-result-icon { width: 28px; height: 28px; display: grid; place-items: center; border-radius: 4px; color: #37634f; background: #e5f0ea; font-size: 12px; font-weight: 800; }
.global-search-result-copy { min-width: 0; }
.global-search-result-copy strong, .global-search-result-copy small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.global-search-result-copy strong { font-size: 12px; }
.global-search-result-copy small { margin-top: 3px; color: var(--muted); font-size: 9px; }
.global-search-empty { min-height: 58px; display: grid; place-items: center; color: var(--muted); font-size: 11px; }
.workspace-search-highlight { animation: workspace-search-highlight 1.8s ease-out; }
@keyframes workspace-search-highlight { 0%, 35% { box-shadow: 0 0 0 3px rgba(218, 167, 42, .42); } 100% { box-shadow: none; } }
.business-line-control { height: 36px; padding: 0 8px 0 10px; display: flex; align-items: center; gap: 7px; border: 1px solid var(--line); border-radius: 6px; background: #fafbfa; color: #7c8781; font-size: 10px; white-space: nowrap; }
.business-line-control select { min-width: 74px; padding: 0 17px 0 0; border: 0; outline: 0; color: var(--ink); background: transparent; font-size: 12px; cursor: pointer; }
.business-line-control select:disabled { color: #68756e; cursor: not-allowed; }
.icon-button { width: 34px; height: 34px; padding: 0; display: grid; place-items: center; border: 0; border-radius: 6px; background: transparent; cursor: pointer; }
.icon-button:hover { background: #edf1ef; }
.alert-button { position: relative; color: #74807a; font-size: 11px; }.alert-button i { position: absolute; top: 7px; right: 7px; width: 6px; height: 6px; border: 1px solid #fff; border-radius: 50%; background: var(--coral); }

.dashboard { width: min(2400px, 100%); margin: 0 auto; padding: 12px 32px 52px; }
.published-dashboard-panel { margin-bottom: 14px; overflow: hidden; }
.published-dashboard-filter-bar { min-height: 58px; padding: 10px 16px; display: flex; align-items: center; justify-content: space-between; gap: 18px; border-bottom: 1px solid #edf0ee; background: #f8faf9; }
.published-dashboard-filter-title { min-width: 132px; }
.published-dashboard-filter-title strong, .published-dashboard-filter-title span { display: block; }
.published-dashboard-filter-title strong { color: #35433c; font-size: 11px; }
.published-dashboard-filter-title span { margin-top: 3px; color: #87918c; font-size: 9px; white-space: nowrap; }
.published-dashboard-filter-actions { min-width: 0; display: flex; align-items: center; justify-content: flex-end; gap: 6px; }
.published-dashboard-filter-actions .dashboard-bound-filters { justify-content: flex-end; }
.published-dashboard-filter-actions .dashboard-filter-control { background: #fff; }
.published-dashboard-filter-actions .icon-button { flex: none; border: 1px solid #dce3df; background: #fff; }
.published-dashboard-scroll { padding: 0 14px 14px; overflow-x: auto; }
.published-dashboard-canvas { min-width: 0; min-height: 0; background-color: #f8faf9; }
.published-dashboard-canvas .dashboard-canvas-empty { min-height: 0; }
.published-canvas-component { overflow: visible; }
.published-canvas-component:has(.panel-menu-trigger[aria-expanded="true"]) { z-index: 10; }
.published-canvas-component .canvas-component-head { cursor: default; }
.published-canvas-component .canvas-component-body { pointer-events: auto; }
.published-canvas-component:not(.canvas-component-text) .canvas-component-head { padding-right: 42px; padding-left: 10px; }
.panel-menu.published-component-menu { position: absolute; z-index: 8; top: 4px; right: 4px; }
.published-component-menu .panel-menu-trigger { width: 25px; height: 23px; border-color: transparent; background: rgba(255,255,255,.92); font-size: 16px; }
.published-component-menu .panel-menu-popover { min-width: 142px; }
.published-canvas-component.has-insight .canvas-component-body { inset: 31px 0 29px; }
.published-canvas-component.is-title-hidden.has-insight .canvas-component-body { inset: 0 0 29px; }
.published-component-insight { position: absolute; right: 8px; bottom: 5px; left: 8px; height: 19px; margin: 0; display: flex; align-items: center; gap: 5px; overflow: hidden; border-top: 1px solid #edf0ee; color: #75817b; font-size: 8px; line-height: 1; }
.published-component-insight span { flex: none; color: #7c8781; font-size: 7px; font-weight: 800; letter-spacing: 0; }
.published-component-insight .module-insight-source { min-width: 34px; padding: 2px 4px; border: 1px solid #dce5df; border-radius: 3px; background: #f4f6f4; text-align: center; }
.published-component-insight strong { min-width: 0; overflow: hidden; font-size: 8px; font-weight: 500; text-overflow: ellipsis; white-space: nowrap; }
.business-line-empty { width: min(1440px, 100%); margin: 0 auto; padding: 34px 36px 56px; }
.business-line-empty .empty-state { min-height: 180px; display: grid; place-content: center; gap: 8px; text-align: center; }
.business-line-empty .empty-state strong { color: var(--ink); font-size: 16px; }
.business-line-empty .empty-state span { color: var(--muted); font-size: 12px; }
.page-heading { margin-bottom: 20px; display: flex; justify-content: space-between; align-items: end; gap: 20px; }
.dashboard > .page-heading { min-height: 32px; margin-bottom: 6px; align-items: center; flex-wrap: wrap; row-gap: 6px; }
.dashboard-heading-copy { min-width: 280px; display: flex; flex: 1 1 320px; align-items: baseline; gap: 10px; white-space: nowrap; }
.dashboard > .page-heading .heading-actions { max-width: 100%; margin-left: auto; flex: none; }
.dashboard-heading-copy h1 { flex: none; font-size: 20px; line-height: 1.2; }
.dashboard-heading-copy p { min-width: 0; margin: 0; padding-left: 10px; overflow: hidden; border-left: 1px solid #d8dfdb; font-size: 11px; line-height: 1.3; text-overflow: ellipsis; white-space: nowrap; }
.eyebrow { margin-bottom: 7px; color: var(--green); font-size: 10px; font-weight: 800; letter-spacing: 1.4px; }
h1 { margin: 0; font-family: "PingFang SC", "Microsoft YaHei", system-ui, sans-serif; font-size: 24px; line-height: 1.25; font-weight: 700; letter-spacing: 0; }
.page-heading p { margin: 7px 0 0; color: var(--muted); font-size: 13px; }
.heading-actions { gap: 10px; flex-wrap: wrap; }
.freshness { color: var(--muted); font-size: 11px; white-space: nowrap; }.status-dot { width: 7px; height: 7px; margin-right: 6px; display: inline-block; border-radius: 50%; background: #2ba672; box-shadow: 0 0 0 3px #dff2e9; }
.select-control select { height: 36px; min-width: 108px; padding: 0 30px 0 11px; border: 1px solid #dce3df; border-radius: 6px; outline: 0; background: #fff; color: #3d4943; font-size: 12px; cursor: pointer; }
.dashboard-filter-control { height: 36px; padding: 0 8px 0 10px; display: flex; align-items: center; gap: 7px; border: 1px solid #dce3df; border-radius: 6px; background: #fff; color: #7c8781; font-size: 10px; white-space: nowrap; }
.dashboard-filter-control select { min-width: 80px; padding: 0 17px 0 0; border: 0; outline: 0; color: #3d4943; background: transparent; font-size: 12px; cursor: pointer; }
.dashboard-bound-filters { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }.dashboard-bound-filters[hidden] { display: none; }.dashboard-date-range-filter { min-height: 40px; padding: 4px 7px 4px 10px; display: flex; align-items: center; gap: 10px; border: 1px solid #dce3df; border-radius: 6px; background: #fff; }.dashboard-date-range-label { flex: none; color: #6f7c75; font-size: 10px; }.dashboard-date-range-inputs { display: flex; align-items: center; gap: 6px; }.dashboard-date-range-inputs input[type="date"] { width: 132px; height: 30px; box-sizing: border-box; padding: 0 6px; border: 1px solid #dce3df; border-radius: 4px; outline: 0; color: #314239; background: #fbfcfb; font-size: 10px; cursor: pointer; }.dashboard-date-range-inputs input[type="date"]:focus { border-color: #83b89f; box-shadow: 0 0 0 3px rgba(21,127,87,.08); background: #fff; }.dashboard-date-range-inputs b { color: #919d97; font-size: 9px; font-weight: 500; }
.dashboard-multi-filter { position: relative; height: 36px; }
.dashboard-multi-filter summary { height: 36px; min-width: 136px; box-sizing: border-box; padding: 0 9px 0 10px; display: flex; align-items: center; gap: 10px; border: 1px solid #dce3df; border-radius: 6px; color: #7c8781; background: #fff; cursor: pointer; list-style: none; font-size: 10px; }
.dashboard-multi-filter summary::-webkit-details-marker { display: none; }
.dashboard-multi-filter summary::after { content: '⌄'; margin-left: auto; color: #77827c; }
.dashboard-multi-filter[open] summary { border-color: #9bc7b4; box-shadow: 0 0 0 3px rgba(21,127,87,.08); }
.dashboard-multi-filter[open] summary::after { transform: rotate(180deg); }
.dashboard-multi-filter summary strong { max-width: 100px; overflow: hidden; color: #3d4943; font-size: 11px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.dashboard-multi-filter-menu { position: absolute; top: 41px; right: 0; z-index: 20; width: max-content; min-width: 190px; max-width: min(320px, calc(100vw - 32px)); max-height: 260px; padding: 6px; overflow-y: auto; border: 1px solid #d7e0db; border-radius: 6px; background: #fff; box-shadow: 0 12px 28px rgba(28,45,36,.16); }
.dashboard-multi-filter-menu label { min-height: 32px; padding: 0 8px; display: flex; align-items: center; gap: 8px; border-radius: 4px; color: #405149; cursor: pointer; font-size: 11px; }
.dashboard-multi-filter-menu label:hover { background: #f0f6f2; }
.dashboard-multi-filter-menu label.is-all { margin-bottom: 4px; border-bottom: 1px solid #edf1ef; border-radius: 4px 4px 0 0; color: #267759; font-weight: 700; }
.dashboard-multi-filter-menu input { width: 14px; height: 14px; margin: 0; accent-color: #157f57; }

.metric-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; }
.metric-module { margin-bottom: 14px; }
.module-insight { min-height: 34px; margin: 0; padding: 9px 16px 10px; display: flex; align-items: baseline; gap: 8px; border-top: 1px solid #edf0ee; color: #68756e; font-size: 11px; line-height: 1.5; }
.module-insight span { flex: none; color: #7c8781; font-size: 9px; font-weight: 800; letter-spacing: .2px; }
.module-insight .module-insight-source { min-width: 44px; padding: 2px 5px; border: 1px solid #dce5df; border-radius: 3px; color: #6d7972; background: #f4f6f4; text-align: center; letter-spacing: 0; }
.module-insight .module-insight-source.is-model, .published-component-insight .module-insight-source.is-model { border-color: #b9e0ca; color: #157f57; background: #eaf7ef; }
.module-insight strong { color: #68756e; font-size: 11px; font-weight: 500; }
.panel > .module-insight { margin: 0 16px; padding-right: 0; padding-left: 0; }
.module-head { min-height: 58px; padding: 0 2px 12px; display: flex; align-items: end; justify-content: space-between; gap: 16px; }
.module-head h2 { margin: 0; font-size: 14px; font-weight: 750; }
.module-head p { margin: 5px 0 0; color: #87908b; font-size: 10px; }
.metric-card { min-height: 148px; padding: 17px 18px 15px; position: relative; overflow: hidden; border: 1px solid var(--line); border-radius: 6px; background: var(--surface); box-shadow: var(--shadow); }
.metric-card:before { content: ""; position: absolute; left: 0; top: 22px; width: 3px; height: 35px; background: var(--accent, var(--green)); }
.metric-top { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.metric-label { color: var(--muted); font-size: 12px; font-weight: 600; }
.metric-value { margin-top: 14px; overflow: hidden; font-family: Georgia, "Times New Roman", serif; font-size: 28px; font-weight: 700; line-height: 1.1; text-overflow: ellipsis; white-space: nowrap; }
.metric-comparison { margin-top: 12px; display: flex; align-items: center; gap: 18px; }
.metric-trend { display: inline-flex; align-items: baseline; gap: 5px; }.metric-trend small { color: #8a938e; font-size: 10px; }.metric-trend strong { font-size: 10px; font-weight: 750; }.metric-trend.up strong { color: #267759; }.metric-trend.down strong { color: #b15a49; }.metric-trend.flat strong, .metric-trend-empty strong { color: #7c8781; }.metric-trend-empty { gap: 9px; }
.metric-target { margin-top: 11px; padding-top: 9px; display: flex; align-items: baseline; justify-content: space-between; gap: 8px; border-top: 1px solid #edf0ee; color: #8a938e; font-size: 10px; }.metric-target span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.metric-target strong { flex: none; color: #626d67; font-size: 10px; }

.analysis-grid { margin-top: 16px; display: grid; grid-template-columns: minmax(0, 1.75fr) minmax(310px, .85fr); gap: 16px; }
.lower-grid { margin-top: 16px; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
.panel { border: 1px solid var(--line); border-radius: 6px; background: var(--surface); box-shadow: var(--shadow); }
.panel-head { min-height: 74px; padding: 18px 20px; display: flex; align-items: start; justify-content: space-between; gap: 16px; border-bottom: 1px solid #edf0ee; }.panel-head-tools { display: flex; align-items: center; gap: 10px; }
.panel-head.compact { min-height: 68px; align-items: center; }
.panel h2 { margin: 0; font-size: 14px; font-weight: 750; }.panel-head p { margin: 5px 0 0; color: #87908b; font-size: 10px; }
.legend { display: flex; align-items: center; gap: 15px; color: var(--muted); font-size: 10px; }.legend span { display: inline-flex; align-items: center; gap: 5px; }
.legend-dot { width: 7px; height: 7px; display: inline-block; border-radius: 50%; }.legend-dot.actual { background: var(--green); }.legend-dot.target { background: #b9c0bd; }
.chart-wrap { position: relative; }.large-chart { height: 302px; padding: 14px 16px 12px 8px; }.chart-wrap canvas { width: 100%; height: 100%; display: block; }
.chart-tooltip { padding: 8px 10px; position: absolute; display: none; z-index: 3; border-radius: 5px; color: #fff; background: #1e2b25; box-shadow: 0 5px 20px rgba(0,0,0,.2); pointer-events: none; font-size: 10px; line-height: 1.6; white-space: nowrap; }

.donut-layout { min-height: 302px; padding: 24px 18px; display: grid; grid-template-columns: 150px 1fr; gap: 16px; align-items: center; }
.donut-wrap { width: 150px; height: 150px; position: relative; }.donut-wrap canvas { width: 100%; height: 100%; }.donut-center { position: absolute; inset: 0; display: grid; place-content: center; text-align: center; pointer-events: none; }.donut-center strong { font-family: Georgia, serif; font-size: 19px; }.donut-center span { margin-top: 3px; color: var(--muted); font-size: 9px; }
.channel-list { display: grid; gap: 13px; }.channel-row { display: grid; grid-template-columns: 8px 1fr auto; gap: 8px; align-items: center; cursor: pointer; }.channel-row:hover strong { color: var(--green); }.channel-row.off { opacity: .32; }.channel-color { width: 7px; height: 7px; border-radius: 2px; }.channel-row span { color: var(--muted); font-size: 10px; }.channel-row strong { font-size: 11px; }

.segmented { padding: 2px; display: flex; border: 1px solid var(--line); border-radius: 5px; background: #f4f6f4; }.segmented button { height: 25px; min-width: 42px; padding: 0 10px; border: 0; border-radius: 3px; background: transparent; color: var(--muted); font-size: 10px; cursor: pointer; transition: color .15s, background .15s, box-shadow .15s; }.segmented button.active { color: var(--ink); background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.08); }
.region-list { padding: 17px 20px 19px; display: grid; gap: 14px; }.region-row { display: grid; grid-template-columns: 45px minmax(80px, 1fr) 72px 48px; gap: 10px; align-items: center; font-size: 10px; }.region-name { font-weight: 700; }.region-track { height: 7px; overflow: hidden; border-radius: 4px; background: #eef1ef; }.region-bar { height: 100%; border-radius: inherit; background: var(--green); }.region-value { text-align: right; font-weight: 700; }.region-change { color: #267759; text-align: right; }
.quarter-tag { padding: 5px 8px; border-radius: 4px; color: #976922; background: #fbf0dc; font-size: 9px; font-weight: 700; }
.target-list { padding: 19px 20px 22px; display: grid; gap: 19px; }.target-meta { margin-bottom: 8px; display: flex; justify-content: space-between; align-items: baseline; }.target-meta span { color: var(--muted); font-size: 10px; }.target-meta strong { font-size: 11px; }.target-track { height: 7px; overflow: hidden; border-radius: 4px; background: #eef1ef; }.target-bar { height: 100%; border-radius: inherit; background: var(--accent); }

.table-panel { margin-top: 16px; }.text-button { height: 32px; padding: 0 12px; border: 1px solid #cfd8d3; border-radius: 5px; background: #fff; color: #395047; font-size: 10px; font-weight: 700; cursor: pointer; }.text-button:hover { border-color: var(--green); color: var(--green); }.panel-menu { position: relative; }.panel-menu-trigger { width: 32px; height: 32px; display: grid; place-items: center; border: 1px solid #cfd8d3; border-radius: 5px; color: #5c6d64; background: #fff; font-size: 18px; line-height: 1; letter-spacing: 2px; cursor: pointer; }.panel-menu-trigger:hover, .panel-menu-trigger[aria-expanded="true"] { border-color: var(--green); color: var(--green); background: #f3f8f5; }.panel-menu-popover { min-width: 116px; padding: 5px; position: absolute; z-index: 5; top: calc(100% + 6px); right: 0; border: 1px solid #d6dfda; border-radius: 5px; background: #fff; box-shadow: 0 8px 22px rgba(28,44,36,.14); }.panel-menu-popover button { width: 100%; height: 30px; padding: 0 9px; border: 0; border-radius: 3px; color: #42554b; background: transparent; text-align: left; font-size: 10px; cursor: pointer; }.panel-menu-popover button:hover, .panel-menu-popover button:focus-visible { color: var(--green); background: #eef6f1; outline: 0; }
.table-scroll { max-width: 100%; overflow-x: auto; }table { width: 100%; min-width: 100%; border-collapse: collapse; }th { height: 38px; padding: 0 20px; color: #8a938e; background: #fafbfa; font-size: 9px; font-weight: 700; text-align: left; text-transform: uppercase; }td { height: 52px; padding: 0 20px; border-top: 1px solid #edf0ee; color: #48534d; font-size: 11px; }tbody tr:hover { background: #fbfcfb; }.product-cell { display: flex; align-items: center; gap: 10px; color: var(--ink); font-weight: 700; }.product-swatch { width: 28px; height: 28px; display: grid; place-items: center; border-radius: 5px; color: #fff; font-size: 9px; }.trend-up { color: #267759; }.trend-down { color: #b85c49; }.status { padding: 4px 7px; border-radius: 4px; color: #267759; background: #e9f5ef; font-size: 9px; font-weight: 700; }.status.watch { color: #9d6c22; background: #fbf0dc; }.empty-state { padding: 36px; color: var(--muted); text-align: center; }
.profile-page { width: min(1120px, 100%); margin: 0 auto; padding: 28px 32px 52px; }
.profile-heading { margin-bottom: 24px; display: flex; justify-content: space-between; align-items: end; gap: 20px; }
.profile-heading p { margin: 7px 0 0; color: var(--muted); font-size: 13px; }
.profile-heading .text-button { display: inline-flex; align-items: center; gap: 7px; }
.profile-heading .text-button span { font-size: 15px; line-height: 1; }
.profile-summary { min-height: 112px; padding: 22px 24px; display: flex; align-items: center; gap: 14px; border: 1px solid var(--line); border-radius: 7px; background: #fff; box-shadow: var(--shadow); }
.profile-avatar { width: 52px; height: 52px; font-size: 15px; }
.profile-summary-copy { min-width: 210px; }
.profile-summary-copy strong, .profile-summary-copy span { display: block; }
.profile-summary-copy strong { font-size: 15px; }
.profile-summary-copy span { margin-top: 5px; color: var(--muted); font-size: 11px; }
.profile-meta { margin: 0 0 0 auto; display: flex; gap: 42px; }
.profile-meta div { min-width: 86px; }
.profile-meta dt { color: #8a938e; font-size: 10px; }
.profile-meta dd { margin: 7px 0 0; color: var(--ink); font-size: 12px; font-weight: 700; }
.activity-panel { margin-top: 14px; }
.activity-actions { display: flex; align-items: center; gap: 8px; }
.activity-table-wrap { max-width: 100%; overflow-x: auto; }
.activity-table { min-width: 0; table-layout: fixed; }
.activity-table .activity-time-column { width: 16%; }.activity-table .activity-action-column { width: 17%; }.activity-table .activity-object-column { width: 23%; }.activity-table .activity-account-column { width: 25%; }.activity-table .activity-ip-column { width: 19%; }
.activity-table th, .activity-table td { padding-right: 14px; padding-left: 14px; white-space: normal; overflow-wrap: anywhere; }
.executor-cell strong, .executor-cell small { display: block; }.executor-cell strong { color: var(--ink); }.executor-cell small { margin-top: 3px; color: var(--muted); font-size: 10px; }
.activity-action { color: var(--ink); font-weight: 700; }
.activity-empty { padding: 48px 20px; color: var(--muted); font-size: 12px; text-align: center; }
.toast { position: fixed; right: 24px; bottom: 24px; z-index: 50; padding: 11px 15px; border-radius: 6px; color: #fff; background: #1b2822; opacity: 0; transform: translateY(10px); pointer-events: none; transition: .22s; font-size: 11px; box-shadow: 0 8px 26px rgba(0,0,0,.2); }.toast.show { opacity: 1; transform: translateY(0); }

.datasets-page, .management-page { width: 100%; max-width: none; margin: 0 auto; padding: 28px 32px 52px; }
.management-actions { gap: 9px; }
.management-stats { margin-bottom: 16px; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; }
.management-stat { min-height: 80px; padding: 16px 18px; display: flex; flex-direction: column; justify-content: space-between; border: 1px solid var(--line); border-radius: 6px; background: #fff; box-shadow: var(--shadow); }.management-stat span { color: var(--muted); font-size: 10px; }.management-stat strong { font-family: Inter, "PingFang SC", "Microsoft YaHei", system-ui, sans-serif; font-size: 24px; line-height: 1; }
.dashboard-admin-table, .directory-table, .metric-table, .business-metric-table, .user-table, .data-source-table, .dataset-table, .rds-table { min-width: 0; table-layout: fixed; }.dashboard-admin-table td:first-child strong, .dashboard-admin-table td:first-child small, .metric-table td:first-child strong, .metric-table td:first-child small, .business-metric-table td:first-child strong, .business-metric-table td:first-child small, .knowledge-table td:first-child strong, .knowledge-table td:first-child small, .directory-tree-node strong, .directory-tree-node small { display: block; }.dashboard-admin-table td:first-child strong, .metric-table td:first-child strong, .business-metric-table td:first-child strong, .knowledge-table td:first-child strong, .directory-tree-node strong { color: var(--ink); }.dashboard-admin-table td:first-child small, .metric-table td:first-child small, .business-metric-table td:first-child small, .knowledge-table td:first-child small, .directory-tree-node small { margin-top: 4px; color: var(--muted); font-size: 10px; }.dashboard-admin-table tr.is-disabled, .directory-table tr.is-disabled, .business-metric-table tr.is-disabled, .knowledge-table tr.is-disabled { opacity: .52; }
.metric-audit-stats .management-stat.warning strong { color: #a85b31; }.metric-table th, .metric-table td { padding: 10px 12px; vertical-align: top; white-space: normal; overflow-wrap: anywhere; }.metric-table th { white-space: normal; }.metric-table td { min-width: 0; line-height: 1.55; }.metric-table code { padding: 3px 5px; border-radius: 3px; color: #42554b; background: #f2f5f3; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 10px; }.metric-reference { color: var(--muted); font-size: 10px; }.metric-reference strong, .metric-source strong, .metric-source small { display: block; }.metric-reference strong, .metric-source strong { margin-bottom: 3px; color: var(--ink); font-size: 11px; }.metric-source small, .metric-field-type { margin-top: 4px; color: var(--muted); font-size: 10px; }.metric-list-value { color: #40544a; }.metric-aggregation { color: #40544a; font-weight: 700; }.metric-warning-row { background: #fffaf5; }.metric-similar-item + .metric-similar-item { margin-top: 7px; }.metric-similar-item strong, .metric-similar-item span { display: block; }.metric-similar-item strong { color: #74432b; font-size: 10px; }.metric-similar-item span { margin-top: 2px; color: #9b6b51; font-size: 9px; }.metric-check { display: inline-flex; padding: 4px 7px; border: 0; border-radius: 4px; font-size: 9px; font-weight: 750; white-space: nowrap; }.metric-check.clear { color: #267759; background: #e9f5ef; }.metric-check.warning { color: #a85b31; background: #fff0e5; cursor: pointer; }.metric-check.warning:hover { background: #ffe4d2; }.metric-check.resolved { color: #5b6c62; background: #edf1ef; }
.metric-usage { min-width: 0; color: var(--muted); font-size: 10px; }.metric-usage-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }.metric-usage-count { color: var(--ink); font-size: 11px; font-weight: 750; white-space: nowrap; }.metric-usage-preview { max-width: 100%; margin-top: 3px; display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.metric-usage-open { padding: 2px 0; border: 0; color: var(--green); background: transparent; font-size: 9px; font-weight: 750; cursor: pointer; }.metric-usage-open:hover { text-decoration: underline; }
.metric-business-binding { width: 100%; min-width: 0; height: 30px; padding: 0 6px; border: 1px solid #d8e0dc; border-radius: 4px; color: #40544a; background: #fff; font-size: 9px; text-overflow: ellipsis; }
.business-metric-table th, .business-metric-table td { padding: 10px 12px; vertical-align: middle; white-space: normal; overflow-wrap: anywhere; }.business-metric-definition { color: #526159; line-height: 1.6; }.business-lineage-open { max-width: 100%; padding: 3px 0; border: 0; color: var(--green); background: transparent; font-size: 10px; font-weight: 750; text-align: left; cursor: pointer; }.business-lineage-open:hover { text-decoration: underline; }.business-lineage-open:disabled { color: var(--muted); cursor: default; text-decoration: none; }
.modal.metric-usage-modal { width: min(720px, 100%); overflow: hidden; }.metric-usage-modal-meta { margin: 18px 0 12px; display: flex; flex-wrap: wrap; gap: 8px 20px; color: var(--muted); font-size: 10px; }.metric-usage-modal-meta span { display: flex; align-items: center; gap: 5px; }.metric-usage-modal-meta strong { color: var(--ink); font-size: 11px; }.metric-usage-modal-scroll { max-height: calc(100vh - 210px); overflow: auto; border: 1px solid var(--line); border-radius: 6px; }.metric-usage-table { width: 100%; min-width: 100%; table-layout: fixed; }.metric-usage-table th, .metric-usage-table td { padding: 11px 14px; text-align: left; }.metric-usage-table th { position: sticky; top: 0; z-index: 1; color: #737e78; background: #f7f9f8; font-size: 10px; }.metric-usage-table td { color: #40544a; white-space: normal; overflow-wrap: anywhere; }.metric-usage-table th:first-child, .metric-usage-table td:first-child { width: 46%; }.metric-usage-modal-empty { padding: 30px 14px !important; color: var(--muted) !important; text-align: center !important; }
.modal.business-lineage-modal { width: min(1180px, 100%); }.business-lineage-meta { margin: 14px 0 10px; display: flex; flex-wrap: wrap; gap: 7px 18px; color: var(--muted); font-size: 10px; }.business-lineage-meta strong { color: var(--ink); }.business-lineage-system-bar { min-height: 38px; display: flex; align-items: center; justify-content: space-between; gap: 10px; border-bottom: 1px solid var(--line); }.business-lineage-tabs { min-width: 0; display: flex; flex-wrap: wrap; gap: 3px; }.business-lineage-tabs button { height: 34px; padding: 0 12px; border: 0; border-bottom: 2px solid transparent; color: #6d7972; background: transparent; font-size: 10px; font-weight: 700; cursor: pointer; }.business-lineage-tabs button.active { border-bottom-color: var(--green); color: var(--green); }.business-lineage-no-system { color: var(--muted); font-size: 10px; }
.business-lineage-tree { min-height: 250px; padding: 16px 0; }.business-lineage-tree-head { margin-bottom: 12px; display: flex; align-items: baseline; gap: 10px; }.business-lineage-tree-head strong { color: var(--ink); font-size: 12px; }.business-lineage-tree-head span { color: var(--muted); font-size: 9px; }.business-lineage-tree-grid { display: grid; grid-template-columns: minmax(0, 1fr) 170px minmax(0, 1fr); gap: 18px; align-items: start; }.business-lineage-tree-grid > section { min-width: 0; }.business-lineage-tree-grid h3 { margin: 0 0 6px; color: #68766e; font-size: 10px; }.business-lineage-branch-head { min-height: 24px; margin-bottom: 7px; display: flex; align-items: center; justify-content: space-between; gap: 8px; color: #87928c; font-size: 8px; }.business-lineage-branch-head > div { display: flex; gap: 3px; }.business-lineage-branch-head button { height: 22px; padding: 0 6px; border: 1px solid #dbe3df; border-radius: 3px; color: #617068; background: #fff; font-size: 8px; cursor: pointer; }.business-lineage-branch-head button:hover { border-color: #a8bdb2; color: var(--green); background: #f5faf7; }.business-lineage-tree-grid ul { margin: 0; padding: 0; display: grid; gap: 7px; list-style: none; }.business-lineage-tree-grid ul ul { margin: 7px 0 0 12px; padding-left: 10px; border-left: 1px solid #dce5e0; }.business-lineage-root > li > .business-lineage-node, .business-lineage-details > ul > li > .business-lineage-node { margin-left: 12px; }.business-lineage-details > summary { min-width: 0; display: grid; grid-template-columns: 12px minmax(0, 1fr); align-items: center; cursor: pointer; list-style: none; }.business-lineage-details > summary::-webkit-details-marker { display: none; }.business-lineage-details > summary:focus-visible { outline: 2px solid rgba(21,127,87,.35); outline-offset: 2px; }.business-lineage-chevron { color: #75877d; font-size: 16px; line-height: 1; transform: rotate(0deg); transition: transform .16s; }.business-lineage-details[open] > summary > .business-lineage-chevron { transform: rotate(90deg); }.business-lineage-details > summary > .business-lineage-node { grid-column: 2; grid-row: 1; }.business-lineage-branch-summary { grid-column: 2; margin: 3px 8px 0; color: #87948d; font-size: 8px; }.business-lineage-details[open] > summary > .business-lineage-branch-summary { display: none; }.business-lineage-node { min-width: 0; padding: 9px 10px; border-left: 3px solid #9bb9aa; background: #f5f8f6; }.business-lineage-node-title { display: flex; align-items: center; justify-content: space-between; gap: 8px; }.business-lineage-node-title em { flex: none; color: #718078; font-size: 8px; font-style: normal; font-weight: 600; }.business-lineage-node strong, .business-lineage-node small, .business-lineage-node span { display: block; }.business-lineage-node strong { min-width: 0; color: #31473c; font-size: 10px; overflow-wrap: anywhere; }.business-lineage-node small { margin-top: 2px; color: #849089; font-size: 8px; }.business-lineage-node span { margin-top: 5px; color: #65746c; font-size: 9px; line-height: 1.45; overflow-wrap: anywhere; }.business-lineage-node .business-lineage-cycle { color: #a25b42; }.business-lineage-current { min-height: 92px; padding: 14px 12px; position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; border: 2px solid var(--green); border-radius: 6px; background: #edf7f1; text-align: center; }.business-lineage-current::before, .business-lineage-current::after { content: "→"; width: 18px; position: absolute; top: 50%; color: #6f9f89; font-size: 20px; font-weight: 700; line-height: 1; text-align: center; transform: translateY(-50%); }.business-lineage-current::before { right: 100%; }.business-lineage-current::after { left: 100%; }.business-lineage-current span, .business-lineage-current small { color: #718078; font-size: 8px; }.business-lineage-current strong { margin: 6px 0 4px; color: #164d37; font-size: 13px; }.business-lineage-empty, .business-lineage-empty-list, .business-lineage-empty-branch { margin: 0; color: var(--muted); font-size: 10px; }.business-lineage-empty { min-height: 220px; display: grid; place-items: center; border: 1px dashed #d8e1dc; }
.business-lineage-manage { padding: 15px 0; display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(280px, .65fr); gap: 18px; border-top: 1px solid var(--line); }.business-lineage-form { margin: 0; padding-right: 18px; }.business-lineage-form + .business-lineage-form { padding: 0 0 0 18px; border-left: 1px solid var(--line); }.business-lineage-section-head { margin-bottom: 11px; display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }.business-lineage-section-head strong { color: var(--ink); font-size: 11px; }.business-lineage-section-head span { color: var(--muted); font-size: 9px; }.business-lineage-form .modal-actions { padding-top: 0; }.business-lineage-relations { padding-top: 14px; border-top: 1px solid var(--line); }.business-lineage-relation { min-height: 42px; padding: 6px 0; display: flex; align-items: center; justify-content: space-between; gap: 15px; border-bottom: 1px solid #edf0ee; color: #506159; font-size: 10px; }.business-lineage-relation span { min-width: 0; }.business-lineage-relation small { margin-top: 3px; display: block; color: var(--muted); font-size: 9px; }
.knowledge-panel { display: grid; grid-template-columns: 190px minmax(0, 1fr); overflow: hidden; }
.knowledge-directory-pane { min-width: 0; border-right: 1px solid #e2e8e4; background: #f8faf9; }
.knowledge-directory-head { min-height: 57px; box-sizing: border-box; padding: 13px 14px; border-bottom: 1px solid #e4e9e6; }.knowledge-directory-head strong, .knowledge-directory-head span { display: block; }.knowledge-directory-head strong { color: var(--ink); font-size: 11px; }.knowledge-directory-head span { margin-top: 4px; color: var(--muted); font-size: 9px; }
.knowledge-directory-tree { padding: 7px; display: grid; gap: 2px; }.knowledge-directory-row { min-width: 0; height: 34px; padding-left: calc(var(--knowledge-depth, 0) * 13px); display: flex; align-items: center; }.knowledge-directory-toggle, .knowledge-directory-toggle-spacer { width: 23px; height: 34px; flex: none; }.knowledge-directory-toggle { padding: 0; display: grid; place-items: center; border: 0; border-radius: 4px; color: #738179; background: transparent; cursor: pointer; }.knowledge-directory-toggle:hover { color: #116341; background: #e8f1ec; }.knowledge-directory-toggle span { display: block; font-size: 13px; transition: transform .15s; }.knowledge-directory-toggle[aria-expanded="false"] span { transform: rotate(-90deg); }.knowledge-directory-item { min-width: 0; height: 34px; padding: 0 8px 0 3px; display: flex; flex: 1; align-items: center; justify-content: space-between; gap: 8px; border: 0; border-radius: 4px; color: #526159; background: transparent; font-size: 10px; text-align: left; cursor: pointer; }.knowledge-directory-item:hover { color: #1b6849; background: #edf4f0; }.knowledge-directory-item.is-active { color: #116341; background: #e1efe8; font-weight: 750; }.knowledge-directory-row.has-active-descendant > .knowledge-directory-toggle { color: #116341; }.knowledge-directory-item span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.knowledge-directory-item small { min-width: 18px; flex: none; color: #89948e; font-size: 9px; text-align: right; }
.knowledge-list-pane { min-width: 0; }.knowledge-list-head { min-height: 57px; box-sizing: border-box; padding: 0 16px; display: flex; align-items: center; gap: 8px; border-bottom: 1px solid #e4e9e6; }.knowledge-list-head strong { color: var(--ink); font-size: 12px; }.knowledge-list-head span { color: var(--muted); font-size: 9px; }
.knowledge-table { min-width: 0; table-layout: fixed; }.knowledge-table .knowledge-title-column { width: 190px; }.knowledge-table .knowledge-source-column { width: 200px; }.knowledge-table .knowledge-line-column { width: 80px; }.knowledge-table .knowledge-status-column { width: 64px; }.knowledge-table .knowledge-updated-column { width: 100px; }.knowledge-table .knowledge-actions-column { width: 132px; }.knowledge-table th, .knowledge-table td { height: auto; padding: 10px 12px; }.knowledge-table td { vertical-align: top; white-space: normal; line-height: 1.5; overflow-wrap: anywhere; }.knowledge-table th:nth-child(3), .knowledge-table td:nth-child(3), .knowledge-table th:nth-child(5), .knowledge-table td:nth-child(5) { text-align: center; }.knowledge-content-preview { max-height: 36px; overflow: hidden; color: #59675f; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }.knowledge-source-cell strong, .knowledge-source-cell span, .knowledge-source-cell a, .knowledge-source-cell small { display: block; }.knowledge-source-cell strong { color: #34483e; font-size: 10px; }.knowledge-source-cell span, .knowledge-source-cell a { margin-top: 3px; color: #557166; font-size: 10px; }.knowledge-source-cell a:hover { color: var(--green); }.knowledge-source-cell small { margin-top: 2px; color: var(--muted); font-size: 9px; }.knowledge-form-hint { align-self: end; margin: 0; }
.modal.knowledge-detail-modal { width: min(860px, 100%); overflow: hidden; }.knowledge-detail-meta { margin: 18px 0 12px; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px; border: 1px solid var(--line); border-radius: 6px; overflow: hidden; background: var(--line); }.knowledge-detail-meta div { min-width: 0; padding: 10px 12px; background: #f8faf9; }.knowledge-detail-meta span, .knowledge-detail-meta strong { display: block; }.knowledge-detail-meta span { color: var(--muted); font-size: 9px; }.knowledge-detail-meta strong { margin-top: 4px; color: var(--ink); font-size: 10px; overflow-wrap: anywhere; }.knowledge-detail-source { min-height: 38px; padding: 8px 11px; display: flex; align-items: center; gap: 10px; border-left: 3px solid #88ad9b; color: #53645b; background: #f2f7f4; font-size: 10px; }.knowledge-detail-source span { color: var(--muted); }.knowledge-detail-source strong { min-width: 0; overflow-wrap: anywhere; }.knowledge-detail-source a { margin-left: auto; flex: none; color: var(--green); font-weight: 750; }.knowledge-detail-content { margin-top: 14px; }.knowledge-detail-content h3 { margin: 0 0 8px; color: #536159; font-size: 11px; }.knowledge-detail-content > div { max-height: calc(100vh - 390px); min-height: 160px; padding: 16px; overflow: auto; border: 1px solid var(--line); border-radius: 6px; color: #3e5047; background: #fbfcfb; font-size: 12px; line-height: 1.85; white-space: pre-wrap; overflow-wrap: anywhere; }
.knowledge-split-toolbar { margin-top: -5px; display: flex; align-items: center; justify-content: space-between; gap: 14px; }.knowledge-split-toolbar .form-hint { margin: 0; }.knowledge-split-toolbar .text-button { flex: none; }.knowledge-split-preview { max-height: min(46vh, 430px); padding: 0 12px 12px; overflow-y: auto; border: 1px solid #dbe5df; border-radius: 6px; background: #f8fbf9; }.knowledge-split-head { position: sticky; top: 0; z-index: 1; min-height: 42px; display: flex; align-items: center; justify-content: space-between; gap: 12px; border-bottom: 1px solid #dfe7e2; background: #f8fbf9; }.knowledge-split-head strong { color: #244a39; font-size: 11px; }.knowledge-split-head span { color: var(--muted); font-size: 9px; }.knowledge-split-entry { padding: 11px 0; display: grid; grid-template-columns: minmax(0, 1fr) 150px; gap: 9px 12px; border-bottom: 1px solid #e1e8e4; }.knowledge-split-entry:last-child { border-bottom: 0; }.knowledge-split-entry-head { grid-column: 1 / -1; display: flex; align-items: center; justify-content: space-between; }.knowledge-split-entry-head strong { color: #53645a; font-size: 9px; }.knowledge-split-entry-head .icon-button { width: 26px; height: 26px; }.knowledge-split-entry label:last-child { grid-column: 1 / -1; }.knowledge-split-entry textarea { resize: vertical; }
.user-table tr.is-disabled > td:not(:last-child) { opacity: .55; }.user-account-cell strong, .user-account-cell small, .user-permission-summary strong, .user-permission-summary small { display: block; }.user-account-cell strong, .user-permission-summary strong { color: var(--ink); }.user-account-cell small, .user-permission-summary small { max-width: 100%; margin-top: 4px; overflow: hidden; color: var(--muted); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }.user-source { margin-left: 6px; padding: 2px 4px; border-radius: 3px; color: #267759; background: #e9f5ef; font-size: 8px; font-weight: 750; vertical-align: 1px; }.user-role { display: inline-flex; padding: 4px 7px; border-radius: 4px; color: #52635a; background: #eef2f0; font-size: 9px; font-weight: 750; }.user-role.admin { color: #8c6223; background: #fbf0dc; }.user-role.data_center { color: #267759; background: #e9f5ef; }.user-status-action.enable { border-color: #9ccab8; color: var(--green); }.user-status-action.danger { border-color: #e2b6b1; color: #b0443a; }.user-status-action.danger:hover { border-color: var(--danger); color: var(--danger); }
.user-list-toolbar { min-height: 52px; padding: 9px 12px; display: flex; align-items: center; justify-content: space-between; gap: 14px; border-bottom: 1px solid var(--line); }.user-list-search { width: min(420px, 100%); height: 34px; padding: 0 10px; display: flex; align-items: center; gap: 7px; border: 1px solid #d9e1dc; border-radius: 5px; background: #fff; }.user-list-search:focus-within { border-color: var(--green); box-shadow: 0 0 0 2px rgba(31, 132, 91, .1); }.user-list-search span { flex: none; color: var(--muted); font-size: 14px; }.user-list-search input { min-width: 0; height: 100%; padding: 0; flex: 1; border: 0; outline: 0; color: var(--ink); background: transparent; font-size: 10px; }.user-list-toolbar > span { flex: none; color: var(--muted); font-size: 9px; }
.directory-sync-bar { min-height: 50px; margin-bottom: 14px; padding: 10px 14px; display: flex; align-items: center; justify-content: space-between; gap: 16px; border: 1px solid var(--line); border-radius: 6px; background: #fff; }.directory-sync-bar > div { min-width: 0; display: flex; align-items: center; gap: 10px; }.directory-sync-bar strong { min-width: 0; overflow: hidden; color: #35483e; font-size: 10px; font-weight: 650; text-overflow: ellipsis; white-space: nowrap; }.directory-sync-bar small { flex: none; color: var(--muted); font-size: 9px; }
.user-modal { width: min(760px, 100%); }.user-role-switch-modal { width: min(500px, 100%); }.role-switch-target { margin: 0; padding: 11px 12px; border: 1px solid #e1e8e3; border-radius: 5px; color: var(--muted); background: #fafcfb; font-size: 10px; }.role-switch-target strong { margin-left: 4px; color: var(--ink); font-weight: 650; }.user-permission-fieldset { margin: 0; padding: 12px; border: 1px solid #dfe6e1; border-radius: 6px; background: #fafcfb; }.user-permission-fieldset legend { padding: 0 5px; color: #53645a; font-size: 10px; font-weight: 750; }.user-permission-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; }.user-permission-toolbar input { min-width: 0; flex: 1; }.user-permission-toolbar > div { display: flex; gap: 6px; }.user-permission-toolbar .text-button { height: 34px; padding: 0 9px; }.user-permission-list { max-height: min(50vh, calc(100vh - 360px)); margin-top: 10px; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); overflow-y: auto; border-top: 1px solid #e3e9e5; }.user-permission-list.is-disabled { opacity: .5; }.user-permission-option { min-width: 0; min-height: 50px; padding: 8px 10px; display: flex !important; align-items: center; gap: 9px !important; border-bottom: 1px solid #e3e9e5; cursor: pointer; }.user-permission-option:nth-child(odd) { border-right: 1px solid #e3e9e5; }.user-permission-option input { width: 15px !important; height: 15px !important; flex: none; accent-color: var(--green); }.user-permission-option span, .user-permission-option strong, .user-permission-option small { min-width: 0; display: block; }.user-permission-option strong, .user-permission-option small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.user-permission-option strong { color: #3d5046; font-size: 10px; }.user-permission-option small { margin-top: 3px; color: var(--muted); font-size: 9px; font-weight: 500; }.user-permission-empty { grid-column: 1 / -1; margin: 0; padding: 28px 10px; color: var(--muted); font-size: 10px; text-align: center; }
.permission-roles-modal { width: min(680px, 100%); }.permission-roles-modal .modal-head p, .dashboard-permission-roles-modal .modal-head p { margin: 6px 0 0; color: var(--muted); font-size: 10px; }.permission-section-head { min-height: 38px; display: flex; align-items: center; justify-content: space-between; gap: 12px; }.permission-section-head strong { color: var(--ink); font-size: 11px; }.permission-section-head span { color: var(--muted); font-size: 9px; }.permission-role-list { max-height: 220px; margin-bottom: 12px; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; overflow-y: auto; }.permission-role-item { min-width: 0; min-height: 48px; padding: 7px 9px; display: flex; align-items: center; justify-content: space-between; gap: 8px; border: 1px solid #dce4df; border-radius: 5px; color: #3e554a; background: #fff; text-align: left; cursor: pointer; }.permission-role-item.is-active { border-color: #6eaa8e; background: #eef7f2; }.permission-role-item span, .permission-role-item strong, .permission-role-item small { min-width: 0; display: block; }.permission-role-item strong { overflow: hidden; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }.permission-role-item small { margin-top: 3px; color: var(--muted); font-size: 8px; }.permission-role-item em { flex: none; color: var(--muted); font-size: 8px; font-style: normal; }.dashboard-permission-roles-modal { width: min(600px, 100%); }.dashboard-permission-role-list { max-height: min(52vh, 420px); margin-top: 16px; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 7px; overflow-y: auto; }.dashboard-permission-role-option { min-width: 0; min-height: 58px; padding: 9px 10px; display: flex !important; align-items: center; gap: 9px !important; border: 1px solid #dfe6e1; border-radius: 5px; background: #fafcfb; cursor: pointer; }.dashboard-permission-role-option:has(input:checked) { border-color: #6eaa8e; background: #eef7f2; }.dashboard-permission-role-option input { width: 15px !important; height: 15px !important; flex: none; accent-color: var(--green); }.dashboard-permission-role-option span, .dashboard-permission-role-option strong, .dashboard-permission-role-option small, .dashboard-role-summary strong, .dashboard-role-summary small { min-width: 0; display: block; }.dashboard-permission-role-option strong, .dashboard-role-summary strong { color: var(--ink); font-size: 10px; }.dashboard-permission-role-option small, .dashboard-role-summary small { margin-top: 3px; overflow: hidden; color: var(--muted); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
.permission-role-table-scroll { max-height: min(42vh, 310px); margin-bottom: 12px; overflow-y: auto; border: 1px solid #e1e8e3; border-radius: 5px; }.permission-role-table { min-width: 0; table-layout: fixed; }.permission-role-table th, .permission-role-table td { box-sizing: border-box; padding-right: 12px; padding-left: 12px; white-space: normal; overflow-wrap: anywhere; }.permission-role-table th { height: 36px; color: #738078; background: #f7f9f8; font-size: 9px; }.permission-role-table td { height: 50px; color: #526159; font-size: 10px; }.permission-role-table td:first-child strong, .permission-role-table td:first-child small { display: block; }.permission-role-table td:first-child strong { color: var(--ink); font-size: 10px; }.permission-role-table td:first-child small { margin-top: 3px; overflow: hidden; color: var(--muted); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }.permission-role-row { cursor: pointer; outline: 0; }.permission-role-row:hover, .permission-role-row:focus-visible { background: #f4f9f6; }.permission-role-row.is-active { background: #eef7f2; }.permission-role-row.is-active td:first-child { box-shadow: inset 3px 0 #6eaa8e; }.permission-role-table td:nth-child(2), .permission-role-table td:nth-child(3) { color: #66736c; }.permission-role-empty { height: 100px !important; color: var(--muted) !important; text-align: center; }
.permission-center-layout { min-height: 560px; display: grid; grid-template-columns: minmax(220px, 280px) minmax(0, 1fr); overflow: hidden; }.permission-subject-pane { min-width: 0; border-right: 1px solid #e1e8e3; background: #fbfcfb; }.permission-subject-tabs { padding: 12px; display: grid; grid-template-columns: 1fr 1fr; gap: 4px; border-bottom: 1px solid #e5ebe7; }.permission-subject-tabs button { height: 32px; border: 0; border-radius: 4px; color: #77847c; background: transparent; font-size: 11px; font-weight: 700; cursor: pointer; }.permission-subject-tabs button.active { color: #1f6045; background: #e6f3eb; }.permission-subject-list { max-height: 490px; overflow-y: auto; }.permission-subject-item { width: 100%; min-height: 56px; padding: 9px 14px; display: block; border: 0; border-bottom: 1px solid #edf1ef; color: #405149; background: transparent; text-align: left; cursor: pointer; }.permission-subject-item:hover { background: #f1f7f3; }.permission-subject-item.is-active { box-shadow: inset 3px 0 #2e8c64; background: #eaf5ef; }.permission-subject-item strong, .permission-subject-item small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.permission-subject-item strong { color: #253b31; font-size: 11px; }.permission-subject-item small { margin-top: 4px; color: #7c8981; font-size: 9px; }.permission-subject-empty { margin: 0; padding: 28px 14px; color: #8a958e; font-size: 10px; text-align: center; }.permission-directory-pane { min-width: 0; display: flex; flex-direction: column; }.permission-directory-head { min-height: 70px; padding: 17px 20px; display: flex; align-items: center; justify-content: space-between; gap: 12px; border-bottom: 1px solid #e5ebe7; }.permission-directory-head strong, .permission-directory-head span { display: block; }.permission-directory-head strong { color: #243a2f; font-size: 13px; }.permission-directory-head span { margin-top: 4px; color: #7d8982; font-size: 10px; }.permission-directory-count { flex: none; margin: 0 !important; padding: 4px 8px; border-radius: 4px; color: #287858 !important; background: #e8f5ed; font-size: 9px !important; }.permission-directory-tree { min-height: 0; flex: 1; padding: 12px 20px; overflow: auto; }.permission-directory-branch { margin-bottom: 10px; padding-left: calc(var(--permission-depth, 0) * 16px); }.permission-directory-title { min-height: 32px; padding: 0 9px; display: flex; align-items: center; gap: 7px; border-bottom: 1px solid #dfe8e2; color: #2f493b; background: #f5f9f6; }.permission-directory-title span { color: #789086; font-size: 11px; }.permission-directory-title strong { font-size: 11px; }.permission-dashboard-row { min-height: 47px; padding: 6px 9px 6px 25px; display: grid; grid-template-columns: minmax(0, 1fr) 70px 70px; align-items: center; gap: 8px; border-bottom: 1px solid #edf1ef; }.permission-dashboard-row:hover { background: #fbfdfb; }.permission-dashboard-name { min-width: 0; }.permission-dashboard-name strong, .permission-dashboard-name small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.permission-dashboard-name strong { color: #35483e; font-size: 10px; }.permission-dashboard-name small { margin-top: 3px; color: #9aa49e; font-size: 8px; }.permission-dashboard-row label { display: flex; align-items: center; gap: 5px; color: #65736b; font-size: 10px; cursor: pointer; }.permission-dashboard-row input { width: 14px; height: 14px; margin: 0; accent-color: #1e875a; }.permission-dashboard-row input:disabled + * { color: #b2bbb5; }.permission-center-actions { padding: 12px 20px; display: flex; justify-content: flex-end; border-top: 1px solid #e5ebe7; background: #fbfcfb; }
.permission-subject-pane { display: flex; flex-direction: column; }
.permission-subject-tabs { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.permission-search { height: 34px; margin: 10px 12px; padding: 0 9px; display: flex; align-items: center; gap: 7px; border: 1px solid #d9e1dc; border-radius: 4px; background: #fff; }
.permission-search:focus-within { border-color: var(--green); box-shadow: 0 0 0 2px rgba(31, 132, 91, .1); }
.permission-search > span { flex: none; color: var(--muted); font-size: 14px; }
.permission-search input { min-width: 0; width: 100%; height: 100%; padding: 0; border: 0; outline: 0; color: var(--ink); background: transparent; font-size: 10px; }
.permission-subject-list { min-height: 0; max-height: 430px; flex: 1; }
.permission-subject-row { min-width: 0; min-height: 50px; padding-left: calc(8px + var(--permission-subject-depth, 0) * 16px); display: grid; grid-template-columns: 26px minmax(0, 1fr); align-items: stretch; border-bottom: 1px solid #edf1ef; }
.permission-subject-item { min-width: 0; min-height: 50px; padding: 8px 10px 8px 4px; border-bottom: 0; }
.permission-subject-item.is-active { box-shadow: none; }
.permission-subject-row:has(.permission-subject-item.is-active) { box-shadow: inset 3px 0 #2e8c64; background: #eaf5ef; }
.permission-subject-row:hover { background: #f1f7f3; }
.permission-subject-row:hover .permission-subject-item { background: transparent; }
.permission-tree-toggle, .permission-tree-toggle-spacer { width: 26px; min-height: 32px; align-self: center; }
.permission-tree-toggle { padding: 0; display: grid; place-items: center; border: 0; border-radius: 3px; color: #738179; background: transparent; cursor: pointer; }
.permission-tree-toggle:hover { color: var(--green); background: #e3f0e9; }
.permission-tree-toggle span { display: block; font-size: 12px; transition: transform .15s; }
.permission-tree-toggle[aria-expanded="false"] span { transform: rotate(-90deg); }
.permission-tree-toggle-spacer { display: block; }
.permission-dashboard-search { width: min(420px, calc(100% - 40px)); margin: 10px 20px 0; flex: none; }
.permission-directory-tree { padding-top: 10px; }
.permission-directory-branch { margin-bottom: 4px; padding-left: 0; }
.permission-directory-title { padding-left: calc(7px + var(--permission-depth, 0) * 16px); }
.permission-directory-title .permission-tree-toggle { flex: none; }
.permission-dashboard-row { padding-left: calc(42px + var(--permission-dashboard-depth, 0) * 16px); }
.dashboard-admin-table .dataset-row-actions { min-width: 0; flex-wrap: wrap; }
.modal.dashboard-versions-modal { width: min(1120px, 100%); }
.version-history-scroll { max-width: 100%; margin-top: 14px; overflow-x: auto; border: 1px solid var(--line); border-radius: 6px; }
.version-history-table { min-width: 0; width: 100%; table-layout: fixed; }
.version-history-table th, .version-history-table td { padding: 11px 13px; vertical-align: middle; white-space: normal; overflow-wrap: anywhere; }
.version-history-table td:first-child strong, .version-history-table td:first-child small, .version-history-table td:nth-child(3) small { display: block; }
.version-history-table td:first-child small, .version-history-table td:nth-child(3) small { margin-top: 4px; color: var(--muted); font-size: 10px; }
.version-current-note { color: var(--muted); font-size: 10px; }
.directory-table th, .directory-table td { box-sizing: border-box; padding-right: 16px; padding-left: 16px; vertical-align: middle; white-space: nowrap; }.directory-table th { height: 42px; color: #737e78; background: #f7f9f8; font-size: 10px; letter-spacing: 0; text-transform: none; }.directory-table td { height: 56px; }.directory-table th:nth-child(3), .directory-table td:nth-child(3) { text-align: center; }.directory-table .dataset-row-actions { min-width: 0; flex-wrap: nowrap; gap: 6px; }.directory-table .table-action { flex: none; padding: 0 9px; white-space: nowrap; }
.directory-publication-status { display: flex; align-items: center; gap: 6px; }.directory-publication-status small { color: #916d2c; font-size: 9px; }
.directory-level-row { background: #f4f8f5; }.directory-level-row td { height: 58px; border-top-color: #dce6e0; }.directory-level-row:hover { background: #eef5f1; }.directory-item-row { background: #fff; }.directory-tree-node { min-width: 0; padding-left: calc(var(--directory-depth, 0) * 4em); overflow: hidden; }.directory-tree-node strong, .directory-tree-node small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.directory-level-row .directory-tree-node strong { color: #20382d; font-size: 12px; font-weight: 760; }.directory-level-row .directory-tree-node small { color: #74817a; }.directory-module-node { position: relative; }.directory-module-node::before { content: ''; position: absolute; left: calc((var(--directory-depth, 1) * 4em) - 14px); top: 5px; width: 6px; height: 6px; border: 1px solid #aebcb4; border-radius: 2px; background: #fff; }.directory-module-node strong { color: #34483e; font-size: 11px; font-weight: 680; }.directory-no-mount { color: #a1aaa5; }.directory-mount-select { width: 100%; min-width: 0; height: 32px; padding: 0 28px 0 9px; overflow: hidden; border: 1px solid #d2dbd6; border-radius: 4px; color: #3e554a; background: #fff; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
.directory-level-row[draggable="true"], .directory-item-row[draggable="true"] { cursor: grab; }.directory-level-row[draggable="true"]:active, .directory-item-row[draggable="true"]:active { cursor: grabbing; }.directory-level-row:hover, .directory-item-row:hover { background: #f0f6f2; }
.component-version { margin: 5px 0 0; color: var(--muted); font-size: 10px; }
.modal-backdrop.component-editor-backdrop { padding: 0; background: #edf1ef; }
.modal.component-editor-modal { width: 100vw; height: 100vh; max-height: none; padding: 0; overflow: hidden; border-radius: 0; box-shadow: none; background: #f3f5f4; }
.component-editor-head { height: 66px; padding: 0 20px; display: flex; align-items: center; gap: 13px; border-bottom: 1px solid #dce3df; background: #fff; }
.component-editor-title { min-width: 0; }.component-editor-title h2 { margin: 0; overflow: hidden; font-size: 15px; text-overflow: ellipsis; white-space: nowrap; }.component-editor-title .eyebrow { margin-bottom: 3px; }
.component-editor-actions { margin-left: auto; display: flex; gap: 8px; }
.component-editor-grid { height: calc(100vh - 66px); display: grid; grid-template-columns: clamp(190px, 12vw, 240px) clamp(260px, 18vw, 340px) minmax(0, 1fr); overflow: hidden; }.component-editor-grid.text-mode { grid-template-columns: clamp(260px, 20vw, 340px) minmax(0, 1fr); }.component-editor-grid.text-mode .component-field-pane { display: none; }
.component-editor-grid.boxplot-mode .component-measure-row { grid-template-columns: 18px minmax(0, 1fr) 46px 25px; }.component-editor-grid.boxplot-mode [data-measure-aggregation] { display: none; }
.component-editor-pane { min-width: 0; padding: 14px; overflow-y: auto; border-right: 1px solid #dce3df; background: #fff; }
.component-config-pane { display: flex; flex-direction: column; }
.component-property-tabs { position: sticky; top: -14px; z-index: 7; margin: -2px -14px 14px; padding: 0 14px; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); border-bottom: 1px solid #dce3df; background: rgba(255,255,255,.98); backdrop-filter: blur(8px); }
.component-property-tabs button { position: relative; height: 38px; border: 0; color: #748078; background: transparent; font-size: 11px; font-weight: 750; cursor: pointer; }
.component-property-tabs button::after { position: absolute; right: 18%; bottom: -1px; left: 18%; height: 2px; content: ''; background: transparent; }
.component-property-tabs button.active { color: var(--green); }.component-property-tabs button.active::after { background: var(--green); }
.component-property-panel[hidden] { display: none; }
.component-config-actions { position: sticky; bottom: -14px; z-index: 8; margin: 14px -14px -14px; padding: 10px 14px; display: flex; gap: 8px; border-top: 1px solid #dce3df; background: rgba(255,255,255,.97); box-shadow: 0 -5px 14px rgba(31,47,39,.06); backdrop-filter: blur(8px); }
.component-config-actions { flex: none; justify-content: flex-end; }
.component-config-actions button { min-width: 132px; flex: 0 0 auto; justify-content: center; }
.editor-pane-head, .component-list-head, .component-preview-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.editor-pane-head { margin-bottom: 14px; }.editor-pane-head strong, .component-list-head strong, .component-preview-head strong { color: var(--ink); font-size: 13px; }.editor-pane-head span, .component-list-head span, .component-preview-head span { color: var(--muted); font-size: 10px; }
.editor-control { margin-bottom: 12px; display: grid; gap: 6px; color: #65716b; font-size: 11px; font-weight: 700; }
.editor-control input, .editor-control select, .editor-control textarea { width: 100%; box-sizing: border-box; padding: 0 9px; border: 1px solid #d8e0dc; border-radius: 4px; outline: 0; color: var(--ink); background: #fff; font-size: 12px; }.editor-control input, .editor-control select { height: 34px; }.editor-control textarea { min-height: 88px; padding-top: 9px; line-height: 1.55; resize: vertical; }.editor-control input:focus, .editor-control select:focus, .editor-control textarea:focus { border-color: var(--green); box-shadow: 0 0 0 3px rgba(21,127,87,.09); }
.field-search { height: 34px; margin-bottom: 16px; padding: 0 9px; display: flex; align-items: center; gap: 7px; border: 1px solid #dce3df; border-radius: 4px; color: var(--muted); background: #f8faf9; }.field-search input { min-width: 0; flex: 1; border: 0; outline: 0; background: transparent; font-size: 10px; }
.field-groups { display: grid; gap: 14px; }.field-group { display: grid; gap: 5px; }.field-group-head { display: flex; justify-content: space-between; color: #7c8882; font-size: 10px; font-weight: 750; text-transform: uppercase; }.field-item { position: relative; min-width: 0; min-height: 32px; display: grid; grid-template-columns: minmax(0, 1fr) 26px; align-items: center; border-radius: 4px; color: #46534c; background: transparent; }.field-item:hover { color: var(--green); background: #eef6f1; }.field-item-main { min-width: 0; min-height: 32px; padding: 6px 4px 6px 7px; display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: 6px; align-items: center; border: 0; color: inherit; background: transparent; text-align: left; cursor: pointer; }.field-menu-toggle { width: 24px; height: 24px; padding: 0; display: grid; place-items: center; border: 0; border-radius: 3px; color: #7d8982; background: transparent; font-size: 14px; cursor: pointer; }.field-menu-toggle:hover, .field-menu-toggle[aria-expanded="true"] { color: var(--green); background: #dfeee6; }.field-item-menu { position: absolute; top: 30px; right: 2px; z-index: 20; width: 138px; padding: 4px; border: 1px solid #d8e1dc; border-radius: 5px; background: #fff; box-shadow: 0 8px 22px rgba(34,51,42,.16); }.field-item-menu[hidden] { display: none; }.field-item-menu button { width: 100%; min-height: 30px; padding: 0 8px; border: 0; border-radius: 3px; color: #47584f; background: transparent; font-size: 9px; text-align: left; cursor: pointer; }.field-item-menu button:hover { color: var(--green); background: #edf6f1; }.field-item-menu button.delete:hover { color: #b24e42; background: #faece8; }.field-item.derived { background: #f5f9f7; }.field-type-icon { width: 18px; height: 18px; display: grid; place-items: center; border-radius: 3px; color: #34725a; background: #e7f2ec; font-size: 8px; font-weight: 800; }.field-item.measure .field-type-icon { color: #9b6a24; background: #fbf0dc; }.field-item-copy { min-width: 0; }.field-item-copy strong, .field-item-copy small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.field-item-copy strong { font-size: 11px; }.field-item-copy small { margin-top: 2px; color: #97a09b; font-size: 9px; font-weight: 400; }.editor-loading { padding: 24px 8px; color: var(--muted); font-size: 10px; text-align: center; }
.chart-type-fieldset { margin: 0 0 16px; padding: 0; border: 0; }.chart-type-fieldset legend { margin-bottom: 8px; color: #65716b; font-size: 10px; font-weight: 700; }.chart-type-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 7px; }.chart-type-button { min-height: 56px; padding: 7px 4px; display: grid; place-items: center; gap: 3px; border: 1px solid #dce3df; border-radius: 4px; color: #66736c; background: #fff; cursor: grab; }.chart-type-button:active { cursor: grabbing; }.chart-type-button span { font-size: 14px; line-height: 1; }.chart-type-button strong { font-size: 9px; }.chart-type-button:hover, .chart-type-button.active { border-color: var(--green); color: var(--green); background: #f0f7f3; box-shadow: inset 0 0 0 1px rgba(21,127,87,.12); }.component-title-toggle { margin: -5px 0 15px; font-size: 10px !important; }
.component-measure-control { margin-bottom: 14px; }.component-measure-head { min-height: 24px; display: flex; align-items: center; justify-content: space-between; gap: 10px; color: #65716b; font-size: 10px; font-weight: 700; }.component-measure-head button { padding: 3px 0; border: 0; color: var(--green); background: transparent; font-size: 9px; font-weight: 750; cursor: pointer; }.component-measure-head button:disabled { color: #adb5b1; cursor: not-allowed; }.component-measure-rows { display: grid; gap: 6px; }.component-measure-row { min-width: 0; display: grid; grid-template-columns: 18px minmax(0, 1fr) 76px 46px 25px; gap: 4px; align-items: center; }.component-measure-row.has-axis { grid-template-columns: 18px minmax(0, 1fr) 70px 54px 46px 25px; }.component-measure-row select { min-width: 0; width: 100%; height: 34px; padding: 0 5px; overflow: hidden; border: 1px solid #d8e0dc; border-radius: 4px; color: var(--ink); background: #fff; font-size: 9px; text-overflow: ellipsis; }.component-measure-row select:focus { border-color: var(--green); outline: 0; box-shadow: 0 0 0 2px rgba(21,127,87,.09); }.component-measure-index { width: 18px; height: 18px; display: grid; place-items: center; border-radius: 3px; color: #267759; background: #e9f4ee; font-size: 8px; font-weight: 800; }.component-measure-row button { width: 25px; height: 25px; display: grid; place-items: center; border: 0; border-radius: 4px; color: #89938e; background: transparent; font-size: 15px; cursor: pointer; }.component-measure-row button:hover { color: #b24e42; background: #faece8; }.component-measure-row button:disabled { opacity: .3; cursor: default; }.component-measure-order { display: grid; grid-template-columns: repeat(2, 22px); gap: 1px; }.component-measure-order button { width: 22px; color: #61736a; font-size: 11px; }.component-measure-order button:not(:disabled):hover { color: var(--green); background: #edf6f1; }.component-measure-empty { padding: 12px 8px; border: 1px dashed #d8e0dc; border-radius: 4px; color: var(--muted); font-size: 9px; text-align: center; }.component-measure-control > p { margin: 6px 0 0 23px; color: var(--muted); font-size: 8px; line-height: 1.4; }
.component-tab-control { margin-bottom: 14px; padding: 10px; border: 1px solid #dce3df; border-radius: 5px; background: #fafbfa; }.component-tab-control .editor-control { margin-bottom: 10px; }.component-tab-hint { margin: 4px 0 0; color: var(--muted); font-size: 8px; line-height: 1.5; }
.component-collapsible-section > .component-style-section-head { min-height: 24px; margin-bottom: 0; }.component-section-toggle { width: 24px; height: 24px; margin-left: auto; padding: 0; display: grid; place-items: center; border: 0; border-radius: 4px; color: #718078; background: transparent; font-size: 14px; line-height: 1; cursor: pointer; transition: transform .16s ease, color .16s ease, background .16s ease; }.component-section-toggle:hover { color: var(--green); background: #eaf4ee; }.component-section-toggle[aria-expanded="true"] { transform: rotate(180deg); color: var(--green); background: #eaf4ee; }.component-section-body { margin-top: 10px; }.component-section-body[hidden] { display: none; }.component-collapsible-section:has(.component-section-body[hidden]) { padding-bottom: 7px; }
.component-title-style-control, .component-appearance-control, .component-chart-style-control, .component-number-style-control, .component-chart-field-control, .component-field-section { margin: 0 0 10px; padding: 10px; border: 1px solid #dce3df; border-radius: 5px; background: #fafbfa; }
.component-default-filter-control .component-style-section-head { margin-bottom: 8px; }.component-default-filter-add { width: 25px; height: 25px; padding: 0; display: grid; place-items: center; border: 1px solid #cfe1d7; border-radius: 4px; color: var(--green); background: #edf7f1; font-size: 14px; cursor: pointer; }.component-default-filter-add:hover { border-color: var(--green); background: #e1f1e8; }.component-default-filter-list { display: grid; gap: 7px; }.component-default-filter-empty { padding: 10px 7px; border: 1px dashed #d8e2dc; border-radius: 4px; color: #829089; font-size: 9px; text-align: center; }.component-default-filter-row { min-width: 0; display: grid; grid-template-columns: 18px minmax(0, 1.1fr) minmax(0, .9fr) minmax(0, 1fr) 24px; gap: 4px; align-items: center; }.component-default-filter-row select, .component-default-filter-row input { min-width: 0; width: 100%; height: 30px; box-sizing: border-box; padding: 0 5px; border: 1px solid #d8e0dc; border-radius: 4px; color: var(--ink); background: #fff; font-size: 9px; }.component-default-filter-row select:focus, .component-default-filter-row input:focus { border-color: var(--green); outline: 0; box-shadow: 0 0 0 2px rgba(21,127,87,.09); }.component-default-filter-index { width: 18px; height: 18px; display: grid; place-items: center; border-radius: 3px; color: #39735b; background: #e7f2ec; font-size: 8px; font-weight: 800; }.component-default-filter-row > button { width: 24px; height: 24px; padding: 0; border: 0; border-radius: 3px; color: #8a9690; background: transparent; font-size: 15px; cursor: pointer; }.component-default-filter-row > button:hover { color: #b24e42; background: #faece8; }.component-default-filter-dates { min-width: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 4px; }.component-default-filter-dates label { min-width: 0; color: #829089; font-size: 8px; }.component-default-filter-dates input { display: block; margin-top: 2px; font-size: 8px; }.component-default-filter-hint { margin: 7px 0 0; color: var(--muted); font-size: 8px; line-height: 1.45; }
.component-style-section-head { margin-bottom: 11px; display: flex; align-items: center; justify-content: space-between; gap: 8px; }.component-style-section-head strong { color: #435249; font-size: 11px; }.component-style-section-head span { color: var(--muted); font-size: 9px; }
.component-style-grid, .component-style-specific { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 8px; }.component-style-specific { padding-top: 10px; border-top: 1px solid #e0e6e2; }.component-style-specific[hidden] { display: none; }.component-style-specific .check-label { min-height: 34px; margin-bottom: 12px; align-self: end; color: #65716b; font-size: 9px; font-weight: 700; }
.component-title-options .check-label, .component-appearance-control .check-label { min-height: 34px; margin-bottom: 12px; align-self: end; color: #65716b; font-size: 9px; font-weight: 700; }.component-title-options .editor-control { grid-column: 1 / -1; }.component-content-position-control { grid-column: 1 / -1; }.component-common-style-control { margin: 1px 0 10px; padding: 8px 9px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(108px, 1fr); gap: 8px; align-items: end; border: 1px solid #e0e6e2; border-radius: 4px; background: #fff; }.component-common-style-control[hidden] { display: none; }.component-common-style-control legend { padding: 0 4px; color: #596a61; font-size: 9px; font-weight: 750; }.component-common-style-control .check-label, .component-common-style-control .editor-control { min-height: 34px; margin: 0; align-items: center; color: #65716b; font-size: 9px; }.component-tooltip-toggle { min-height: 28px; margin: 0 0 8px; color: #65716b; font-size: 9px !important; font-weight: 700; }
.component-number-optional-fields { margin: 2px 0 0; padding: 8px 9px; display: grid; gap: 7px; border: 1px solid #e0e6e2; border-radius: 4px; background: #fff; }.component-number-optional-fields legend { padding: 0 4px; color: #596a61; font-size: 9px; font-weight: 750; }.component-number-optional-fields .check-label { margin: 0; color: #65716b; font-size: 9px; }
.component-analysis-line-control { margin-top: 2px; }.component-analysis-line-control .editor-control[hidden] { display: none; }
.component-bar-condition-control { grid-template-columns: 1fr; }.component-bar-condition-toggle { margin: 0 0 8px !important; }.component-bar-condition-options { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 8px; }.component-bar-condition-options .editor-control:first-child { grid-column: 1 / -1; }.component-bar-condition-options.is-disabled { opacity: .5; }
.component-label-toggle { min-height: 28px; margin: -3px 0 8px; color: #536159; font-size: 9px !important; font-weight: 750; }
.component-label-options { align-items: end; }.component-label-template-control { grid-column: 1 / -1; }.component-label-template-control textarea { min-height: 58px; resize: vertical; }
.component-label-overlap-row { padding-top: 9px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(126px, 1fr); gap: 8px; align-items: end; border-top: 1px solid #e0e6e2; }.component-label-overlap-row .check-label, .component-label-overlap-row .editor-control { min-height: 34px; margin: 0; }.component-label-overlap-row .check-label { align-items: center; color: #65716b; font-size: 9px; font-weight: 700; }
.component-chart-field-control.is-disabled .component-label-options, .component-chart-field-control.is-disabled .component-label-overlap-row { opacity: .55; }
.component-color-control > span { height: 34px; padding: 0 8px; display: flex; align-items: center; gap: 8px; border: 1px solid #d8e0dc; border-radius: 4px; background: #fff; }.component-color-control input[type="color"] { width: 24px; height: 24px; padding: 2px; border: 0; border-radius: 3px; cursor: pointer; }.component-color-control output { color: #59675f; font-size: 9px; font-variant-numeric: tabular-nums; }
.dimension-range-modal { width: min(520px, 100%); }.dimension-boundary-control { margin: 0; padding: 10px; border: 1px solid #dce4df; border-radius: 5px; }.dimension-boundary-control legend { padding: 0 5px; color: #53645a; font-size: 10px; font-weight: 750; }.dimension-range-rows { display: grid; gap: 6px; }.dimension-range-row { display: grid; grid-template-columns: 22px minmax(0, 1fr) 30px; gap: 6px; align-items: center; }.dimension-range-row > span { color: #87928c; font-size: 9px; text-align: center; }.dimension-range-row input { width: 100%; height: 32px; box-sizing: border-box; padding: 0 9px; border: 1px solid #d8e0dc; border-radius: 4px; outline: 0; }.dimension-range-row input:focus { border-color: var(--green); box-shadow: 0 0 0 3px rgba(21,127,87,.09); }.dimension-range-row button { width: 30px; height: 30px; border: 0; border-radius: 4px; color: #8b9690; background: transparent; font-size: 16px; cursor: pointer; }.dimension-range-row button:hover { color: #b24e42; background: #faece8; }.dimension-boundary-control .text-button { margin: 8px 0 0 28px; }.dimension-range-preview { min-height: 36px; padding: 8px; display: flex; flex-wrap: wrap; gap: 5px; border: 1px solid #dfe7e2; border-radius: 5px; background: #f7faf8; }.dimension-range-preview span { padding: 4px 6px; border-radius: 3px; color: #35624e; background: #e4f1ea; font-size: 9px; }
.component-palette-control { margin-bottom: 12px; }.component-palette-label { margin-bottom: 6px; display: block; color: #5f6c65; font-size: 9px; font-weight: 700; }.component-palette-option { min-height: 38px; padding: 5px 7px; display: grid; grid-template-columns: 14px minmax(54px, 1fr) auto; align-items: center; gap: 7px; border: 1px solid #b8d7c8; border-radius: 4px; background: #f5faf7; cursor: pointer; }.component-palette-option input { width: 14px; height: 14px; margin: 0; accent-color: var(--green); }.component-palette-copy strong { display: block; color: #35483e; font-size: 10px; white-space: nowrap; }.component-palette-swatches { display: grid; grid-template-columns: repeat(8, 9px); gap: 1px; }.component-palette-swatches i { width: 9px; height: 20px; display: block; border-radius: 1px; background: var(--swatch); }
.component-tooltip-field-control select[multiple] { height: auto; min-height: 92px; padding: 5px 7px; line-height: 1.55; }.component-tooltip-field-control option { padding: 3px 4px; }.component-tooltip-field-control small { color: var(--muted); font-size: 8px; font-weight: 500; line-height: 1.5; }
.table-component-control { margin-bottom: 14px; padding: 10px; border: 1px solid #dce3df; border-radius: 5px; background: #fafbfa; }.table-component-control .editor-control { margin-bottom: 10px; }.table-dimension-control select[multiple] { height: auto; min-height: 78px; padding: 5px 7px; line-height: 1.55; }.table-dimension-control option { padding: 3px 4px; }.selected-field-order { margin: -4px 0 10px; display: grid; gap: 3px; }.selected-field-order:empty, .selected-field-order[hidden] { display: none; }.selected-field-order > span { color: #7a8680; font-size: 8px; font-weight: 700; }.selected-field-order > div { min-height: 26px; padding: 2px 3px 2px 7px; display: grid; grid-template-columns: minmax(0, 1fr) 22px 22px; gap: 2px; align-items: center; border: 1px solid #e1e7e3; border-radius: 4px; background: #fff; }.selected-field-order strong { overflow: hidden; color: #536159; font-size: 8px; font-weight: 650; text-overflow: ellipsis; white-space: nowrap; }.selected-field-order button { width: 22px; height: 22px; border: 0; border-radius: 3px; color: #61736a; background: transparent; cursor: pointer; }.selected-field-order button:not(:disabled):hover { color: var(--green); background: #edf6f1; }.selected-field-order button:disabled { opacity: .3; cursor: default; }.table-sort-control, .table-number-format-control { margin: 2px 0 9px; padding: 9px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(90px, .6fr); gap: 8px 10px; align-items: end; border: 1px solid #dce3df; border-radius: 5px; background: #fff; }.table-sort-control legend, .table-number-format-control legend { padding: 0 4px; color: #596a61; font-size: 9px; font-weight: 750; }.table-sort-control .editor-control, .table-number-format-control .editor-control { margin: 0; }.table-number-format-control .check-label { min-height: 34px; margin: 0; align-items: center; white-space: nowrap; }.component-table-hint { margin: 4px 0 0; color: var(--muted); font-size: 8px; line-height: 1.5; }
.component-text-control { margin-bottom: 14px; padding: 11px; border: 1px solid #dce3df; border-radius: 5px; background: #fafbfa; }.component-text-control .editor-control:last-of-type { margin-bottom: 10px; }.component-text-bold { min-height: 28px; margin-bottom: 9px; font-size: 10px !important; }.component-text-alignment { height: 32px; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border: 1px solid #d8e0dc; border-radius: 4px; overflow: hidden; }.component-text-alignment button { border: 0; border-right: 1px solid #d8e0dc; color: #68746e; background: #fff; font-size: 9px; cursor: pointer; }.component-text-alignment button:last-child { border-right: 0; }.component-text-alignment button.active { color: var(--green); background: #eaf4ee; font-weight: 750; }
.component-editor-workspace { min-width: 0; min-height: 0; padding: 10px; display: flex; flex-direction: column; gap: 8px; overflow: hidden; }
.dashboard-canvas-panel, .dashboard-global-filter-panel { min-width: 0; overflow: hidden; border: 1px solid #dce3df; border-radius: 6px; background: #fff; box-shadow: 0 2px 8px rgba(27,40,34,.04); }
.dashboard-global-filter-panel { flex: none; }.dashboard-global-filter-list { min-height: 54px; padding: 9px 12px; display: flex; align-items: center; gap: 8px; overflow-x: auto; }.dashboard-global-filter-empty { color: #89948e; font-size: 9px; }.dashboard-global-filter-item { min-width: 240px; max-width: 340px; min-height: 42px; padding: 7px 8px; display: grid; grid-template-columns: 28px minmax(0, 1fr) auto; gap: 8px; align-items: center; border: 1px solid #dce3df; border-radius: 5px; background: #fafcfb; }.dashboard-global-filter-icon { width: 28px; height: 28px; display: grid; place-items: center; border-radius: 4px; color: #267759; background: #e9f4ee; font-size: 12px; }.dashboard-global-filter-item strong, .dashboard-global-filter-item small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.dashboard-global-filter-item strong { color: #34473d; font-size: 10px; }.dashboard-global-filter-item small { margin-top: 3px; color: #7d8982; font-size: 8px; }.dashboard-global-filter-item > div { display: flex; gap: 3px; }.dashboard-global-filter-item button { height: 24px; padding: 0 6px; border: 0; border-radius: 3px; color: #61736a; background: transparent; font-size: 8px; cursor: pointer; }.dashboard-global-filter-item button:hover { color: var(--green); background: #edf6f1; }
.dashboard-canvas-panel { min-height: 0; flex: 1; display: flex; flex-direction: column; }
.dashboard-canvas-head { min-height: 48px; padding: 0 14px; display: flex; align-items: center; justify-content: space-between; gap: 12px; border-bottom: 1px solid #e4eae6; }.dashboard-canvas-head > div { display: grid; gap: 3px; }.dashboard-canvas-head strong { color: var(--ink); font-size: 11px; }.dashboard-canvas-head span { color: var(--muted); font-size: 9px; }
.dashboard-canvas-scroll { min-height: 0; flex: 1; overflow: auto; background: #edf1ef; }
.dashboard-design-canvas { position: relative; width: 100%; min-width: 560px; min-height: 540px; background-color: #f8faf9; background-image: linear-gradient(to right, rgba(82,105,94,.08) 1px, transparent 1px), linear-gradient(to bottom, rgba(82,105,94,.08) 1px, transparent 1px); background-size: calc(100% / 12) 72px; }
.dashboard-design-canvas.is-drop-target { background-color: #f0f7f3; box-shadow: inset 0 0 0 2px rgba(21,127,87,.24); }
.dashboard-design-canvas.is-drop-target::after { content: "松开放置组件"; position: absolute; z-index: 5; left: var(--drop-preview-left); top: var(--drop-preview-top); width: var(--drop-preview-width); height: var(--drop-preview-height); box-sizing: border-box; display: grid; place-items: center; border: 2px dashed #2f9b70; border-radius: 5px; color: #176e4d; background: rgba(223,244,233,.82); font-size: 10px; font-weight: 750; pointer-events: none; }
.dashboard-canvas-empty { position: absolute; inset: 0; min-height: 430px; display: grid; place-content: center; gap: 7px; color: #89948e; text-align: center; pointer-events: none; }.dashboard-canvas-empty strong { color: #5d6b64; font-size: 13px; }.dashboard-canvas-empty span { font-size: 10px; }
.canvas-component { position: absolute; min-width: 0; min-height: 0; overflow: hidden; border: 1px solid var(--component-border, #d9e1dc); border-radius: 5px; background: var(--component-background, #fff); box-shadow: 0 2px 7px rgba(31,47,39,.08); transition: border-color .15s, box-shadow .15s; user-select: none; -webkit-user-drag: none; }.canvas-component * { -webkit-user-drag: none; }.canvas-component:hover { border-color: var(--component-border, #aebdb5); box-shadow: 0 5px 14px rgba(31,47,39,.11); }.canvas-component.is-selected { border-color: var(--green); box-shadow: 0 0 0 2px rgba(21,127,87,.13), 0 5px 14px rgba(31,47,39,.1); }.canvas-component.is-moving { z-index: 4; transition: none; opacity: .9; box-shadow: 0 12px 28px rgba(31,47,39,.2); }.canvas-component.is-invalid { border-color: #c45b4b; box-shadow: 0 0 0 2px rgba(196,91,75,.17); }
.canvas-component.is-displaced { border-color: #a9caba; transition: top .12s ease, border-color .12s ease, box-shadow .12s ease; box-shadow: 0 4px 12px rgba(21,127,87,.1); }
.canvas-component-head { height: 30px; padding: 0 6px 0 8px; display: flex; align-items: center; gap: 6px; border-bottom: 1px solid #edf0ee; background: var(--component-background, #fff); cursor: grab; touch-action: none; }.canvas-component-head:active { cursor: grabbing; }.canvas-component-drag { color: #9aa49f; font-size: 12px; line-height: 1; }.canvas-component-title { min-width: 0; flex: 1; overflow: hidden; color: #34443c; font-size: var(--component-title-size, 11px); font-weight: var(--component-title-weight, 750); text-overflow: ellipsis; white-space: nowrap; }.canvas-component-title.is-hidden { display: none; }.canvas-component-actions { display: flex; gap: 1px; }.canvas-component-action { width: 23px; height: 23px; display: grid; place-items: center; border: 0; border-radius: 4px; color: #77837d; background: transparent; font-size: 11px; cursor: pointer; }.canvas-component-action:hover { color: var(--green); background: #eef6f1; }.canvas-component-action.delete:hover { color: #b24e42; background: #faece8; }
.canvas-component-actions { margin-right: 12px; }
.canvas-component-body { position: absolute; inset: 31px 0 0; padding: var(--component-padding, 8px); overflow: hidden; pointer-events: none; }.canvas-component-loading, .canvas-component-error { height: 100%; display: grid; place-content: center; color: #8a9590; font-size: 9px; text-align: center; }.canvas-component-error { color: #ad5849; }
.canvas-component.is-title-hidden .canvas-component-body { inset: 0; }
.canvas-component.is-title-hidden:not(.published-canvas-component) .canvas-component-head { position: absolute; z-index: 5; top: 4px; right: 4px; width: auto; height: 27px; padding: 0 3px; border: 1px solid #dce3df; border-radius: 4px; background: rgba(255,255,255,.96); box-shadow: 0 2px 7px rgba(31,47,39,.12); opacity: 0; pointer-events: none; transition: opacity .15s; }
.canvas-component.is-title-hidden:not(.published-canvas-component):hover .canvas-component-head, .canvas-component.is-title-hidden.is-selected .canvas-component-head, .canvas-component.is-title-hidden:not(.published-canvas-component) .canvas-component-head:focus-within { opacity: 1; pointer-events: auto; }
.component-chart-shell { width: 100%; height: 100%; min-height: 0; display: grid; grid-template-rows: auto minmax(0, 1fr); }.component-metric-tabs { min-height: 27px; padding: 2px; display: inline-flex; justify-self: end; align-items: center; gap: 2px; border: 1px solid #dce3df; border-radius: 5px; background: #f4f6f4; }.component-metric-tabs button { min-width: 42px; height: 22px; padding: 0 9px; border: 0; border-radius: 3px; color: #7b8881; background: transparent; font-size: 9px; cursor: pointer; transition: color .15s, background .15s, box-shadow .15s; }.component-metric-tabs button.active { color: #263b31; background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.08); }.component-metric-tabs.is-compact { min-height: 23px; }.component-metric-tabs.is-compact button { min-width: 34px; height: 18px; padding: 0 6px; font-size: 8px; }.bi-echart { width: 100%; height: 100%; min-width: 0; min-height: 120px; }.canvas-component-body .bi-echart { pointer-events: auto; }.preview-echart { height: 180px; min-height: 180px; }.canvas-echart { min-height: 100%; }
.canvas-component-number .canvas-component-body, .canvas-component-number.is-short .canvas-component-body, .canvas-component-pie .canvas-component-body { padding: var(--component-padding, 8px); }
.canvas-number-card, .preview-number-card { position: relative; height: 100%; display: grid; grid-template-rows: repeat(3, auto); align-content: center; justify-items: stretch; gap: 7px; padding-left: 12px; text-align: var(--component-content-align, left); }
.content-position-top .canvas-number-card, .content-position-top .wordcloud-tags { align-content: start; }.content-position-bottom .canvas-number-card, .content-position-bottom .wordcloud-tags { align-content: end; }
.canvas-number-card { container-type: size; }
.canvas-number-card::before, .preview-number-card::before { content: ""; position: absolute; top: 2px; bottom: 2px; left: 0; width: 3px; border-radius: 2px; background: var(--green); }
.canvas-number-main, .preview-number-main { width: 100%; display: grid; gap: 4px; }
.canvas-number-main span, .preview-number-main span { overflow: hidden; color: #68756e; font-size: var(--number-label-size, 10px); font-weight: var(--number-label-weight, 650); text-overflow: ellipsis; white-space: nowrap; }
.canvas-number-main span { font-size: clamp(8px, min(3.4cqw, 6cqh, var(--number-label-size, 16px)), var(--number-label-size, 16px)); }
.canvas-number-main strong { overflow: hidden; color: #18251f; font-family: Georgia, serif; font-size: clamp(14px, min(17cqw, 34cqh, var(--number-value-size, 82px)), var(--number-value-size, 82px)); font-variant-numeric: tabular-nums; font-weight: var(--number-value-weight, 700); line-height: 1.02; text-overflow: ellipsis; white-space: nowrap; }
.canvas-number-card.has-medium-value .canvas-number-main strong { font-size: clamp(14px, min(14cqw, 34cqh, var(--number-value-size, 72px)), var(--number-value-size, 72px)); }
.canvas-number-card.has-long-value .canvas-number-main strong { font-size: clamp(14px, min(11cqw, 34cqh, var(--number-value-size, 62px)), var(--number-value-size, 62px)); }
.preview-number-main strong { color: #18251f; font-family: Georgia, serif; font-size: var(--number-value-size, 42px); font-weight: var(--number-value-weight, 700); }
.canvas-number-comparisons, .preview-number-comparisons { display: flex; align-items: baseline; justify-content: flex-start; gap: 18px; }
.canvas-number-comparisons { gap: clamp(9px, 3.2cqw, 22px); justify-content: var(--component-content-justify, flex-start); }
.canvas-number-trend, .preview-number-trend { display: inline-flex; align-items: baseline; gap: 4px; }
.canvas-number-trend small { color: #8a938e; font-size: clamp(8px, min(2.5cqw, 4.5cqh), 12px); }
.preview-number-trend small { color: #8a938e; font-size: 9px; }
.canvas-number-trend strong { font-size: clamp(9px, min(2.9cqw, 5cqh), 13px); }
.preview-number-trend strong { font-size: 10px; }
.canvas-number-trend.up strong, .preview-number-trend.up strong { color: #267759; }
.canvas-number-trend.down strong, .preview-number-trend.down strong { color: #b15a49; }
.canvas-number-trend.flat strong, .canvas-number-trend.empty strong, .preview-number-trend.flat strong, .preview-number-trend.empty strong { color: #7c8781; }
.canvas-number-target, .preview-number-target { display: flex; align-items: baseline; justify-content: var(--component-target-justify, space-between); gap: 8px; padding-top: 7px; border-top: 1px solid #edf0ee; color: #8a938e; font-size: 9px; }
.canvas-number-target { padding-top: clamp(5px, 2.4cqh, 10px); font-size: clamp(8px, min(2.5cqw, 4.5cqh), 12px); }
.canvas-number-target strong { flex: none; color: #626d67; font-size: clamp(9px, min(2.9cqw, 5cqh), 13px); }
.preview-number-target strong { color: #626d67; font-size: 10px; }
.canvas-component.is-compact .canvas-number-card { gap: 3px; padding-left: 7px; }
.canvas-component.is-compact .canvas-number-main { gap: 2px; }
.canvas-component.is-compact .canvas-number-main strong { font-size: clamp(14px, min(14cqw, 30cqh, var(--number-value-size, 42px)), var(--number-value-size, 42px)); line-height: 1; }
.canvas-component.is-compact .canvas-number-card.has-medium-value .canvas-number-main strong { font-size: clamp(14px, min(11cqw, 30cqh, var(--number-value-size, 36px)), var(--number-value-size, 36px)); }
.canvas-component.is-compact .canvas-number-card.has-long-value .canvas-number-main strong { font-size: clamp(14px, min(8.5cqw, 30cqh, var(--number-value-size, 30px)), var(--number-value-size, 30px)); }
.canvas-component.is-compact .canvas-number-main span { font-size: clamp(8px, min(3.1cqw, var(--number-label-size, 11px)), var(--number-label-size, 11px)); }
.canvas-component.is-compact .canvas-number-comparisons { gap: clamp(7px, 2cqw, 11px); }
.canvas-component.is-compact .canvas-number-trend small { font-size: clamp(7px, 2.3cqw, 9px); }
.canvas-component.is-compact .canvas-number-trend strong { font-size: clamp(8px, 2.8cqw, 10px); }
.canvas-component.is-compact .canvas-number-target { font-size: clamp(7px, 2.3cqw, 9px); }
.canvas-component.is-short .canvas-number-card { grid-template-rows: auto minmax(0, 1fr); align-content: center; }
.canvas-component.is-short .canvas-number-main { align-self: center; }
.canvas-component.is-short .canvas-number-comparisons, .canvas-component.is-short .canvas-number-target { display: none; }
.canvas-text-component, .preview-text-component { width: 100%; height: 100%; box-sizing: border-box; display: flex; flex-direction: column; justify-content: center; overflow: hidden; color: #1f3028; line-height: 1.35; overflow-wrap: anywhere; }.preview-text-component { min-height: 180px; padding: 18px; }.canvas-text-component.bold, .preview-text-component.bold { font-weight: 750; }.canvas-text-component.regular, .preview-text-component.regular { font-weight: 400; }
.canvas-chart-series { height: 100%; display: grid; grid-template-rows: auto minmax(0, 1fr); }.canvas-series-legend, .preview-series-legend { min-width: 0; display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 5px 10px; color: #65716b; font-size: 8px; }.canvas-series-legend span, .preview-series-legend span { min-width: 0; display: flex; align-items: center; gap: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.canvas-series-legend i, .preview-series-legend i { width: 7px; height: 7px; flex: none; border-radius: 2px; }.canvas-bars { min-height: 0; display: flex; align-items: stretch; gap: 5px; padding: 7px 4px 16px; border-bottom: 1px solid #dfe5e1; }.canvas-bar-group { position: relative; min-width: 14px; min-height: 0; flex: 1; display: grid; grid-template-rows: minmax(0, 1fr) auto; gap: 3px; }.canvas-bar-columns { min-height: 0; display: flex; align-items: end; justify-content: center; gap: 2px; }.canvas-bar-column { min-width: 2px; max-width: 24px; height: 100%; flex: 1; display: flex; align-items: end; }.canvas-bar-column i { width: 100%; min-height: 2px; border-radius: 2px 2px 0 0; }.canvas-bar-label { position: absolute; right: 0; bottom: -13px; left: 0; overflow: hidden; color: #7f8984; font-size: 7px; text-align: center; text-overflow: ellipsis; white-space: nowrap; }
.canvas-line { height: 100%; display: grid; grid-template-rows: auto minmax(0, 1fr) auto; align-content: center; gap: 4px; }.canvas-line svg { width: 100%; height: 100%; min-height: 70px; overflow: visible; }.canvas-line-grid { stroke: #e4e9e6; stroke-width: 1; }.canvas-line-path { fill: none; stroke-width: 3; stroke-linejoin: round; stroke-linecap: round; vector-effect: non-scaling-stroke; }.canvas-line-dot { fill: #fff; stroke-width: 2; vector-effect: non-scaling-stroke; }.canvas-line-labels { display: flex; justify-content: space-between; gap: 10px; overflow: hidden; color: #7f8984; font-size: 7px; }.canvas-line-labels span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.canvas-pie { height: 100%; display: grid; grid-template-columns: minmax(70px, 1fr) minmax(75px, .8fr); gap: 12px; align-items: center; }.canvas-pie-chart { width: min(150px, 85%); aspect-ratio: 1; justify-self: center; border-radius: 50%; box-shadow: inset 0 0 0 26px #fff; }.canvas-pie-legend { display: grid; gap: 5px; overflow: hidden; }.canvas-pie-row { display: grid; grid-template-columns: 7px minmax(0, 1fr); gap: 5px; align-items: center; color: #66726c; font-size: 8px; }.canvas-pie-row i { width: 6px; height: 6px; border-radius: 2px; }.canvas-pie-row span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wordcloud-job { width: 100%; height: 100%; }.canvas-wordcloud, .preview-wordcloud { width: 100%; height: 100%; min-height: 0; display: grid; grid-template-rows: minmax(0, 1fr) auto; gap: 5px; overflow: hidden; }.wordcloud-tags { min-width: 0; min-height: 0; display: flex; align-content: center; align-items: baseline; justify-content: center; flex-wrap: wrap; gap: 5px 12px; overflow: hidden; line-height: 1.05; }.wordcloud-tags span { max-width: 100%; display: inline-block; overflow: hidden; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }.wordcloud-source { display: flex; align-items: center; justify-content: flex-end; gap: 5px; color: #87928c; font-size: 8px; }.wordcloud-source span { padding: 2px 4px; border: 1px solid #b9e0ca; border-radius: 3px; color: #157f57; background: #eaf7ef; font-size: 7px; font-weight: 750; }.wordcloud-feedback { width: 100%; height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; color: #7d8983; font-size: 9px; line-height: 1.6; text-align: center; }.wordcloud-feedback span { max-width: 320px; }.wordcloud-feedback button { height: 25px; padding: 0 10px; border: 1px solid #cfd9d3; border-radius: 4px; color: #40544a; background: #fff; font-size: 9px; cursor: pointer; pointer-events: auto; }.wordcloud-feedback button:hover { border-color: #7daf96; color: #176e4d; background: #f3faf6; }.preview-wordcloud { min-height: 180px; }.preview-wordcloud .wordcloud-source { font-size: 9px; }.preview-wordcloud .wordcloud-source span { font-size: 8px; }
.canvas-table-scroll { width: 100%; height: 100%; overflow: auto; }.canvas-table { min-width: 100%; table-layout: fixed; font-size: 8px; }.canvas-table th, .canvas-table td { height: 25px; padding: 0 7px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.canvas-table th { font-size: 7px; }
.canvas-table .table-dimension-cell, .preview-table .table-dimension-cell { text-align: center; }.canvas-table .table-number-cell, .preview-table .table-number-cell { text-align: right; font-variant-numeric: tabular-nums; }
.canvas-resize-handle { position: absolute; z-index: 6; width: 18px; height: 18px; opacity: .45; touch-action: none; transition: opacity .15s; }.canvas-component:hover .canvas-resize-handle, .canvas-component.is-selected .canvas-resize-handle { opacity: 1; }.canvas-resize-handle::before { content: ''; position: absolute; width: 7px; height: 7px; border-color: #718078; border-style: solid; }
.canvas-resize-handle.is-nw { top: 0; left: 0; cursor: nwse-resize; }.canvas-resize-handle.is-nw::before { top: 4px; left: 4px; border-width: 2px 0 0 2px; }
.canvas-resize-handle.is-ne { top: 0; right: 0; cursor: nesw-resize; }.canvas-resize-handle.is-ne::before { top: 4px; right: 4px; border-width: 2px 2px 0 0; }
.canvas-resize-handle.is-sw { bottom: 0; left: 0; cursor: nesw-resize; }.canvas-resize-handle.is-sw::before { bottom: 4px; left: 4px; border-width: 0 0 2px 2px; }
.canvas-resize-handle.is-se { right: 0; bottom: 0; cursor: nwse-resize; }.canvas-resize-handle.is-se::before { right: 4px; bottom: 4px; border-width: 0 2px 2px 0; }
.component-preview-empty { min-height: 300px; display: grid; place-content: center; gap: 7px; color: #8a9590; text-align: center; }.component-preview-empty strong { color: #64706a; font-size: 13px; }.component-preview-empty span { font-size: 10px; }
.preview-number { min-height: 260px; display: grid; place-content: center; gap: 10px; text-align: center; }
.preview-chart-series { min-height: 300px; display: grid; grid-template-rows: auto minmax(0, 1fr); gap: 8px; }.preview-series-legend { min-height: 20px; font-size: 9px; }.preview-bars { min-height: 260px; display: flex; align-items: stretch; gap: 10px; padding: 8px 12px 28px; border-bottom: 1px solid #dfe5e1; }.preview-bar-group { position: relative; min-width: 44px; height: 230px; flex: 1; display: grid; grid-template-rows: minmax(0, 1fr) auto; gap: 5px; }.preview-bar-columns { min-height: 0; display: flex; align-items: end; justify-content: center; gap: 4px; }.preview-bar-column { min-width: 8px; max-width: 46px; height: 100%; flex: 1; display: flex; flex-direction: column; justify-content: end; align-items: center; gap: 4px; }.preview-bar-column em { max-width: 100%; overflow: hidden; color: #63716a; font-size: 8px; font-style: normal; text-overflow: ellipsis; white-space: nowrap; }.preview-bar-column i { width: 100%; min-height: 3px; border-radius: 3px 3px 0 0; }.preview-bar-label { position: absolute; right: 0; bottom: -20px; left: 0; overflow: hidden; color: #7f8984; font-size: 9px; text-align: center; text-overflow: ellipsis; white-space: nowrap; }
.preview-line { min-height: 300px; display: grid; grid-template-rows: auto minmax(0, 1fr) auto; align-content: center; gap: 7px; }.preview-line svg { width: 100%; height: 240px; overflow: visible; }.preview-line-grid { stroke: #e4e9e6; stroke-width: 1; }.preview-line-path { fill: none; stroke-width: 3; stroke-linejoin: round; stroke-linecap: round; }.preview-line-path.is-target, .canvas-line-path.is-target { stroke-dasharray: 7 5; opacity: .72; }.preview-line-dot { fill: #fff; stroke-width: 2; }.preview-line-labels { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 4px; color: #7f8984; font-size: 9px; text-align: center; }
.preview-pie { min-height: 300px; display: grid; grid-template-columns: minmax(190px, 300px) minmax(180px, 1fr); gap: 36px; place-content: center; align-items: center; }.preview-pie-chart { width: min(260px, 100%); aspect-ratio: 1; justify-self: center; border-radius: 50%; box-shadow: inset 0 0 0 44px #fff; }.preview-pie-legend { display: grid; gap: 10px; }.preview-pie-row { display: grid; grid-template-columns: 9px minmax(0, 1fr) auto; gap: 8px; align-items: center; color: #66726c; font-size: 10px; }.preview-pie-row i { width: 8px; height: 8px; border-radius: 2px; }
.preview-table-scroll { width: 100%; max-height: 300px; overflow: auto; }.preview-table { min-width: 100%; table-layout: fixed; }.preview-table th, .preview-table td { height: 38px; padding: 0 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.preview-table th { position: sticky; top: 0; z-index: 1; }.preview-table thead tr:nth-child(2) th { top: 38px; }
.dataset-actions { gap: 9px; }
.primary-button { height: 36px; padding: 0 14px; border: 0; border-radius: 5px; color: #fff; background: var(--green); font-size: 11px; font-weight: 750; cursor: pointer; }.primary-button:hover { background: #0e6947; }.primary-button:disabled { opacity: .55; cursor: wait; }
.dataset-stats { margin-bottom: 14px; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; }
.dataset-stat { min-height: 80px; padding: 17px 19px; display: flex; flex-direction: column; justify-content: space-between; border: 1px solid var(--line); border-radius: 7px; background: #fff; box-shadow: var(--shadow); }.dataset-stat span { color: var(--muted); font-size: 10px; }.dataset-stat strong { font-family: Georgia, serif; font-size: 24px; line-height: 1; }
.dataset-panel, .data-source-panel, .rds-table-panel { margin-top: 14px; }.dataset-table td:first-child strong, .dataset-table td:first-child small, .data-source-table td:first-child strong, .data-source-table td:first-child small { display: block; }.dataset-table td:first-child strong, .data-source-table td:first-child strong { color: var(--ink); }.dataset-table td:first-child small, .data-source-table td:first-child small { margin-top: 4px; color: var(--muted); font-size: 10px; }.dataset-table th, .dataset-table td, .data-source-table th, .data-source-table td, .rds-table th, .rds-table td, .user-table th, .user-table td, .dashboard-admin-table th, .dashboard-admin-table td { padding-right: 12px; padding-left: 12px; white-space: normal; overflow-wrap: anywhere; }.dataset-table code, .data-source-table code, .rds-table code { padding: 3px 5px; border-radius: 3px; color: #42554b; background: #f2f5f3; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 10px; overflow-wrap: anywhere; }.dataset-table tr.is-disabled, .data-source-table tr.is-disabled { opacity: .52; }.dataset-row-actions { display: flex; flex-wrap: wrap; gap: 7px; }.table-action { height: 28px; padding: 0 8px; border: 1px solid #d2dbd6; border-radius: 4px; color: #3e554a; background: #fff; font-size: 10px; cursor: pointer; white-space: nowrap; }.table-action:hover { border-color: var(--green); color: var(--green); }.table-action.sync-history-action { border-color: #b9ccc2; color: #285f49; background: #f7fbf9; }.table-action.sync-history-action:hover { border-color: var(--green); background: #edf7f1; }.table-action.sync-history-action.has-failure { border-color: #e2b8ae; color: #a34d3d; background: #fff7f5; }.table-action.sync-history-action.has-failure:hover { border-color: #c6604d; background: #fff0ec; }.table-action:disabled { opacity: .45; cursor: not-allowed; }.table-action.table-icon-action { width: 30px; height: 30px; padding: 0; position: relative; display: inline-grid; place-items: center; flex: 0 0 30px; border-radius: 4px; font-size: 15px; line-height: 1; }.table-action.table-icon-action > span { display: block; transform: translateY(-.5px); }.table-action.table-icon-action::after { content: attr(data-tooltip); position: absolute; right: 0; bottom: calc(100% + 7px); z-index: 30; width: max-content; max-width: 180px; padding: 6px 8px; border-radius: 4px; color: #fff; background: #1f2d26; box-shadow: 0 5px 16px rgba(0,0,0,.18); font-size: 10px; font-weight: 500; line-height: 1.2; opacity: 0; pointer-events: none; transform: translateY(3px); transition: opacity .15s, transform .15s; white-space: nowrap; }.table-action.table-icon-action:hover::after, .table-action.table-icon-action:focus-visible::after { opacity: 1; transform: translateY(0); }.table-action.table-icon-action:focus-visible { outline: 2px solid rgba(21,127,87,.25); outline-offset: 1px; }
.dataset-status { display: inline-flex; padding: 4px 7px; border-radius: 4px; color: #6d7772; background: #f1f3f2; font-size: 9px; font-weight: 750; }.dataset-status.success, .dataset-status.published { color: #267759; background: #e9f5ef; }.dataset-status.running, .dataset-status.draft { color: #916d2c; background: #fbf0dc; }.dataset-status.failed, .dataset-status.disabled { color: #b15b49; background: #faece8; }.dataset-bound { color: #267759; font-size: 10px; font-weight: 700; }.dataset-unbound { color: var(--muted); font-size: 10px; }
.rds-directory-row td { height: auto; padding: 0; background: #f5f8f6; }
.rds-directory-row button { width: 100%; min-height: 42px; padding: 6px 16px; display: flex; align-items: center; gap: 9px; border: 0; color: #30463b; background: transparent; text-align: left; cursor: pointer; }
.rds-directory-row button:hover { background: #edf4f0; }
.rds-directory-row button > span:last-child { min-width: 0; }
.rds-directory-row strong, .rds-directory-row small { display: block; }
.rds-directory-row strong { overflow: hidden; font-size: 11px; text-overflow: ellipsis; white-space: nowrap; }
.rds-directory-row small { margin-top: 2px; color: #849088; font-size: 8px; }
.rds-directory-chevron { width: 14px; flex: none; color: #738179; font-size: 12px; text-align: center; transition: transform .15s; }
.rds-directory-row button[aria-expanded="false"] .rds-directory-chevron { transform: rotate(-90deg); }
.rds-project-directory-row td { border-top-color: #e3e9e5; background: #fafcfb; }
.rds-project-directory-row button { min-height: 38px; padding-left: 40px; }
.rds-project-directory-row strong { font-size: 10px; font-weight: 700; }
.rds-department-directory-row td { border-top-color: #e8edea; background: #fff; }
.rds-department-directory-row button { min-height: 34px; padding-left: 64px; }
.rds-department-directory-row strong { font-size: 10px; font-weight: 650; }
.rds-table-leaf-row td:first-child { padding-left: 78px; }
.rds-table-name { display: flex; align-items: center; gap: 8px; }
.rds-table-name > span { width: 9px; height: 9px; flex: none; border: 1px solid #b8c5be; border-radius: 2px; background: #fff; }
.rds-preview-modal { width: min(980px, 100%); }
.rds-preview-meta { margin: 18px 0 10px; color: var(--muted); font-size: 11px; }
.rds-preview-scroll { max-height: calc(100vh - 190px); overflow: auto; }
.rds-preview-scroll table { min-width: 100%; }
.rds-preview-scroll th, .rds-preview-scroll td { white-space: nowrap; }.rds-preview-scroll th { height: 48px; text-transform: none !important; }.rds-preview-scroll th strong, .rds-preview-scroll th small { display: inline; }.rds-preview-scroll th strong { color: #55635c; font-size: 9px; }.rds-preview-scroll th small { margin-left: 3px; color: #8b9690; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 8px; font-weight: 600; }
.rds-preview-state { padding: 28px 12px !important; color: var(--muted) !important; text-align: center !important; }
.modal-backdrop { position: fixed; inset: 0; z-index: 60; display: grid; place-items: center; padding: 22px; background: rgba(18, 31, 25, .42); }
.modal-backdrop[hidden] { display: none; }
.modal { width: min(620px, 100%); max-height: calc(100vh - 44px); overflow: auto; padding: 24px; border-radius: 8px; background: #fff; box-shadow: 0 18px 60px rgba(0,0,0,.22); }
.modal-head { display: flex; align-items: start; justify-content: space-between; gap: 20px; }
.modal-head h2 { margin: 0; font-size: 20px; }
.modal-head .eyebrow { margin-bottom: 5px; }
.dataset-form { margin-top: 22px; display: grid; gap: 14px; }
.dataset-form label { display: grid; gap: 7px; color: #5f6c65; font-size: 10px; font-weight: 700; }
.dataset-form input, .dataset-form textarea, .dataset-form select { width: 100%; box-sizing: border-box; padding: 0 10px; border: 1px solid #d9e1dc; border-radius: 5px; outline: 0; color: var(--ink); background: #fbfcfb; font-size: 12px; }
.dataset-form input, .dataset-form select { height: 38px; }
.dataset-form textarea { padding-top: 9px; resize: vertical; }
.dataset-form input:focus, .dataset-form textarea:focus, .dataset-form select:focus { border-color: var(--green); box-shadow: 0 0 0 3px rgba(21,127,87,.1); }
.form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.schedule-fields { align-items: end; }
.check-label { min-height: 38px; display: flex !important; align-items: center; gap: 8px !important; }
.check-label input { width: 15px; height: 15px; accent-color: var(--green); }
.form-hint { margin: -3px 0 0; color: var(--muted); font-size: 10px; line-height: 1.5; }
.form-error { margin: 0; color: #b34d40; font-size: 11px; }
.modal-actions { display: flex; justify-content: end; gap: 9px; padding-top: 4px; }
.dataset-runs-modal { width: min(1080px, 100%); }.sync-failure-detail { margin: 12px 0; padding: 12px 14px; border-left: 3px solid #c6604d; border-radius: 4px; color: #7c3f34; background: #fff5f2; }.sync-failure-detail strong { font-size: 10px; }.sync-failure-detail p { margin: 5px 0 0; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 10px; line-height: 1.6; white-space: pre-wrap; overflow-wrap: anywhere; }.dataset-runs-scroll { max-height: calc(100vh - 220px); overflow: auto; }.dataset-runs-table { min-width: 0; table-layout: fixed; }.dataset-runs-table th, .dataset-runs-table td { padding: 10px 12px; vertical-align: top; white-space: normal; overflow-wrap: anywhere; }.dataset-runs-table .sync-run-message { min-width: 0; max-width: none; white-space: normal; overflow-wrap: anywhere; }.dataset-runs-table .sync-run-message.failed { color: #a34d3d; }
.dashboard-filter-settings { margin: 0; padding: 12px; border: 1px solid #dfe6e1; border-radius: 6px; background: #fafcfb; }
.dashboard-filter-settings legend { padding: 0 5px; color: #53645a; font-size: 10px; font-weight: 750; }
.dashboard-filter-setting-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-bottom: 10px; }
.dashboard-filter-targets, .component-filter-builder { margin: 0; padding: 12px; border: 1px solid #dfe6e1; border-radius: 6px; background: #fafcfb; }
.dashboard-filter-targets legend, .component-filter-builder legend { padding: 0 5px; color: #53645a; font-size: 10px; font-weight: 750; }
.dashboard-filter-targets > div { max-height: min(45vh, calc(100vh - 300px)); display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; overflow-y: auto; }
.dashboard-filter-targets label { min-height: 42px; padding: 6px 8px; display: flex; align-items: center; gap: 8px; border: 1px solid #e0e6e2; border-radius: 5px; background: #fff; cursor: pointer; }
.dashboard-filter-targets input { width: 14px; height: 14px; flex: none; accent-color: var(--green); }
.dashboard-filter-targets span, .dashboard-filter-targets strong, .dashboard-filter-targets small { min-width: 0; display: block; }
.dashboard-filter-targets strong, .dashboard-filter-targets small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dashboard-filter-targets strong { color: #384b41; font-size: 10px; }
.dashboard-filter-targets small { margin-top: 3px; color: #87928c; font-size: 8px; font-weight: 500; }
.dashboard-filter-targets p { margin: 0; color: var(--muted); font-size: 10px; }
.component-filter-modal { width: min(680px, 100%); }
.component-filter-modal .modal-head p { margin: 6px 0 0; color: var(--muted); font-size: 10px; }
.component-filter-list { min-height: 72px; }
.component-filter-list-head { margin-bottom: 7px; display: flex; justify-content: space-between; gap: 12px; color: #405149; font-size: 10px; }
.component-filter-list-head span { color: var(--muted); font-size: 9px; }
.component-filter-item { min-height: 36px; padding: 5px 5px 5px 10px; display: flex; align-items: center; justify-content: space-between; gap: 10px; border-bottom: 1px solid #e7ece9; color: #3e5047; font-size: 11px; }
.component-filter-item button { width: 26px; height: 26px; flex: none; border: 0; border-radius: 4px; color: #87938d; background: transparent; cursor: pointer; }
.component-filter-item button:hover { color: #ad4f42; background: #faeeeb; }
.component-filter-empty { min-height: 72px; display: grid; place-content: center; gap: 4px; color: #829089; text-align: center; }
.component-filter-empty strong { color: #53635b; font-size: 11px; }
.component-filter-empty span { font-size: 9px; }
.component-filter-builder { display: grid; gap: 10px; }
.component-filter-builder > .text-button { justify-self: start; }
.sql-test-result { min-width: 0; padding: 12px; border: 1px solid #d9e1dc; border-radius: 6px; background: #f8faf8; }.sql-test-result-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 10px; color: var(--ink); font-size: 11px; }.sql-test-result-head span { color: var(--muted); font-size: 10px; }.sql-test-result .table-scroll { max-height: min(45vh, calc(100vh - 260px)); overflow: auto; }.sql-test-result table { min-width: 100%; border-collapse: collapse; font-size: 10px; }.sql-test-result th, .sql-test-result td { padding: 7px 9px; border-bottom: 1px solid #e7ece8; text-align: left; white-space: nowrap; }.sql-test-result th { color: #44584d; background: #eef3ef; }.sql-test-result th small { display: block; margin-top: 3px; color: var(--muted); font-size: 9px; font-weight: 400; }.sql-test-result td { color: #5f6c65; }
.source-test-result { margin: 0; padding: 9px 11px; border: 1px solid #d9e1dc; border-radius: 5px; color: #a04f42; background: #fff8f6; font-size: 11px; }.source-test-result.success { color: #267759; border-color: #cce5d8; background: #f1faf5; }

@media (max-width: 1100px) {
  .metric-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .dataset-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .analysis-grid { grid-template-columns: 1fr; }.donut-layout { min-height: auto; grid-template-columns: 180px 1fr; }.donut-wrap { justify-self: center; }
  .component-editor-grid { grid-template-columns: 190px 250px minmax(420px, 1fr); overflow: auto; }.component-editor-grid.text-mode { grid-template-columns: 270px minmax(420px, 1fr); }.component-editor-workspace { min-width: 420px; }
  .published-dashboard-scroll { padding: 8px; overflow-x: hidden; }
  .published-dashboard-canvas { height: auto !important; min-width: 0; min-height: 0; padding: 8px; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-flow: dense; gap: 10px; align-content: start; background-color: #eef2f0; }
  .published-dashboard-canvas .published-canvas-component { position: relative !important; inset: auto !important; order: var(--layout-order); width: auto !important; height: 280px !important; grid-column: 1 / -1; }
  .published-dashboard-canvas .canvas-component-number { height: 160px !important; grid-column: auto; }
  .published-dashboard-canvas .canvas-component-text { min-height: 88px; height: auto !important; grid-column: 1 / -1; }
  .published-dashboard-canvas .canvas-component-table { height: 320px !important; }
  .published-dashboard-canvas .canvas-component-gauge { height: 240px !important; }
}
@media (max-width: 760px) {
  .permission-roles-layout { grid-template-columns: 1fr; }
  .permission-center-layout { grid-template-columns: 1fr; }
  .permission-subject-pane { border-right: 0; border-bottom: 1px solid #e1e8e3; }
  .permission-subject-list { max-height: 240px; display: block; overflow-x: hidden; overflow-y: auto; }
  .permission-subject-item { width: 100%; min-width: 0; border-right: 0; }
  .permission-dashboard-search { width: auto; margin-right: 14px; margin-left: 14px; }
  .permission-directory-tree { padding: 12px 14px; }
  .permission-directory-head { padding-right: 14px; padding-left: 14px; }
  .permission-center-actions { padding-right: 14px; padding-left: 14px; }
  .permission-roles-layout > section + section { padding: 16px 0 0; border-top: 1px solid var(--line); border-left: 0; }
  .permission-role-list, .knowledge-split-entry { grid-template-columns: 1fr; }
  .knowledge-split-toolbar { align-items: stretch; flex-direction: column; }
  .knowledge-split-toolbar .text-button { width: 100%; }
  .directory-sync-bar { align-items: flex-start; flex-direction: column; gap: 6px; }.directory-sync-bar > div { align-items: flex-start; flex-direction: column; }.directory-sync-bar strong { white-space: normal; }
  .dashboard-date-range-filter { width: 100%; box-sizing: border-box; align-items: stretch; flex-direction: column; gap: 4px; }.dashboard-date-range-inputs { width: 100%; }.dashboard-date-range-inputs input[type="date"] { min-width: 0; flex: 1; }
  .app-shell { display: block; }.sidebar { transform: translateX(-100%); transition: transform .25s; box-shadow: 12px 0 30px rgba(0,0,0,.2); }.sidebar.open { transform: translateX(0); }.main { width: 100%; }.menu-button { display: grid; place-items: center; margin-right: 10px; }.topbar { height: 60px; padding: 0 16px; }.topbar-actions { gap: 6px; }.topbar-user { gap: 4px; padding-left: 2px; }.topbar-user-copy { display: none; }.global-search { width: 38px; }.search { width: 38px; padding: 0; justify-content: center; border: 0; background: transparent; }.search input { display: none; }.global-search-results { display: none; }.dashboard, .profile-page, .datasets-page, .management-page { padding: 24px 16px 44px; }.dashboard { padding-top: 16px; }.page-heading, .profile-heading { align-items: start; flex-direction: column; }.dashboard > .page-heading { gap: 8px; }.heading-actions { width: 100%; justify-content: space-between; }.published-dashboard-filter-bar { align-items: stretch; flex-direction: column; gap: 9px; }.published-dashboard-filter-title span { white-space: normal; }.published-dashboard-filter-actions { justify-content: stretch; }.published-dashboard-filter-actions .dashboard-bound-filters { min-width: 0; flex: 1; justify-content: flex-start; }.published-dashboard-filter-actions .dashboard-filter-control { max-width: 100%; }.metric-grid, .lower-grid { grid-template-columns: 1fr; }.metric-card { min-height: 128px; }.panel-head { padding: 16px; }.large-chart { height: 270px; }.legend { display: none; }.donut-layout { grid-template-columns: 135px 1fr; padding: 20px 14px; }.donut-wrap { width: 135px; height: 135px; }.region-list, .target-list { padding-left: 16px; padding-right: 16px; }.region-row { grid-template-columns: 40px minmax(70px, 1fr) 65px 44px; gap: 7px; }.table-panel .panel-head { align-items: center; }.profile-summary { padding: 18px 16px; align-items: start; flex-wrap: wrap; }.profile-summary-copy { min-width: 0; }.profile-meta { width: 100%; margin-left: 66px; gap: 28px; }.profile-heading .text-button { align-self: stretch; justify-content: center; }.dataset-actions, .management-actions { width: 100%; }.dataset-actions .primary-button, .management-actions .primary-button { flex: 1; }.management-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }.component-editor-head { padding: 0 12px; }.component-editor-title .eyebrow, #previewDashboardComponentButton { display: none; }.component-editor-grid, .component-editor-grid.text-mode { grid-template-columns: 1fr; overflow-x: hidden; overflow-y: auto; }.component-editor-pane { overflow: visible; border-right: 0; border-bottom: 1px solid #dce3df; }.component-config-actions { position: static; margin: 14px -14px -14px; }.component-editor-workspace { min-width: 0; min-height: 760px; overflow: visible; }.dashboard-canvas-panel { min-height: 520px; }.preview-pie { grid-template-columns: 1fr; }.user-permission-toolbar { align-items: stretch; flex-direction: column; }.user-permission-list { grid-template-columns: 1fr; }.user-permission-option:nth-child(odd) { border-right: 0; }.form-grid { grid-template-columns: 1fr; }h1 { font-size: 27px; }
}
.permission-subject-item { display: flex; align-items: center; gap: 6px; }
.permission-subject-item > span:last-child { min-width: 0; flex: 1; }
.permission-subject-chevron { width: 16px; flex: none; color: #819088; font-size: 10px; line-height: 1; text-align: center; }.permission-subject-collapse { cursor: pointer; }.permission-subject-collapse:hover { color: #1f7c55; }
@media (max-width: 420px) {
  .auth-screen { padding: 16px; }
  .auth-panel { padding: 22px 20px 24px; }
  .auth-modal-backdrop { padding: 12px; }
  .auth-login-modal { padding: 20px; }
  .topbar { padding-right: 10px; padding-left: 10px; }
  .topbar-left { min-width: 0; }
  .breadcrumb > span, .breadcrumb > b { display: none; }
  .alert-button { display: none; }
  .business-line-control { padding: 0 5px; }
  .business-line-control > span { display: none; }
  .business-line-control select { min-width: 52px; }
  .donut-layout { grid-template-columns: 1fr; }.channel-list { grid-template-columns: 1fr 1fr; }.channel-row { grid-template-columns: 8px 1fr auto; }.freshness { font-size: 10px; }
}
@media (max-width: 620px) {
  .published-dashboard-canvas { grid-template-columns: minmax(0, 1fr); }
  .published-dashboard-canvas .canvas-component-number { grid-column: 1 / -1; }
}
@media (max-width: 760px) {
  .component-config-actions { position: sticky; bottom: 0; margin: 14px -14px -14px; }
}
@media (max-width: 760px) {
  .knowledge-panel { grid-template-columns: 1fr; }
  .knowledge-directory-pane { border-right: 0; border-bottom: 1px solid #dfe6e1; }
  .knowledge-directory-head { min-height: 0; padding-bottom: 7px; border-bottom: 0; }
  .knowledge-directory-tree { display: flex; overflow-x: auto; }
  .knowledge-directory-row { width: auto; min-width: max-content; padding-left: 0; }
  .knowledge-directory-item { min-width: max-content; padding: 0 10px 0 3px; }
  .dashboard-heading-copy { min-width: 0; width: 100%; flex: 1 1 auto; flex-wrap: wrap; gap: 4px 8px; }
  .dashboard-heading-copy p { padding-left: 8px; }
  .business-lineage-tree-grid { grid-template-columns: 1fr; }
  .business-lineage-current::before, .business-lineage-current::after { display: none; }
  .business-lineage-current { grid-row: 1; }
  .business-lineage-tree-grid > section:first-child { grid-row: 2; }
  .business-lineage-tree-grid > section:last-child { grid-row: 3; }
  .business-lineage-manage { grid-template-columns: 1fr; }
  .business-lineage-form { padding-right: 0; }
  .business-lineage-form + .business-lineage-form { padding: 14px 0 0; border-top: 1px solid var(--line); border-left: 0; }
}

/* Scroll only when the viewport can no longer keep management content readable. */
.user-permission-list { max-height: max(180px, min(50vh, calc(100vh - 360px))); }
.dashboard-filter-targets > div { max-height: max(180px, min(45vh, calc(100vh - 300px))); }
.directory-table .dataset-row-actions { flex-wrap: wrap; }

@media (max-width: 1280px) {
  .app-shell { display: block; }
  .sidebar { transform: translateX(-100%); transition: transform .25s; box-shadow: 12px 0 30px rgba(0,0,0,.2); }
  .sidebar.open { transform: translateX(0); }
  .main { width: 100%; }
  .menu-button { display: grid; place-items: center; margin-right: 10px; }
  .knowledge-panel { grid-template-columns: 1fr; }
  .knowledge-directory-pane { border-right: 0; border-bottom: 1px solid #dfe6e1; }
  .knowledge-directory-head { min-height: 0; padding-bottom: 7px; border-bottom: 0; }
  .knowledge-directory-tree { display: flex; flex-wrap: wrap; overflow-x: visible; }
  .knowledge-directory-row { width: auto; min-width: max-content; padding-left: 0; }
  .knowledge-directory-item { min-width: max-content; padding: 0 10px 0 3px; }
  .knowledge-table .knowledge-title-column { width: 18%; }
  .knowledge-table .knowledge-source-column { width: 20%; }
  .knowledge-table .knowledge-line-column { width: 9%; }
  .knowledge-table .knowledge-status-column { width: 8%; }
  .knowledge-table .knowledge-updated-column { width: 12%; }
  .knowledge-table .knowledge-actions-column { width: 12%; }
  .knowledge-detail-meta { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 760px) {
  .activity-table { min-width: 700px; }
  .data-source-table { min-width: 900px; }
  .dataset-table { min-width: 900px; }
  .rds-table { min-width: 720px; }
  .metric-table { min-width: 1120px; }
  .business-metric-table { min-width: 980px; }
  .knowledge-table { min-width: 880px; }
  .knowledge-detail-content > div { max-height: calc(100vh - 440px); }
  .user-table { min-width: 880px; }
  .user-list-toolbar { align-items: stretch; flex-direction: column; gap: 7px; }.user-list-search { width: 100%; }.user-list-toolbar > span { align-self: flex-end; }
  .dashboard-admin-table { min-width: 940px; }
  .directory-table { min-width: 820px; }
  .version-history-table { min-width: 700px; }
  .dataset-runs-table { min-width: 840px; }
}
