@import './tokens.css';
*{box-sizing:border-box}
body{margin:0;font:14px/1.5 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;color:var(--c-text);background:var(--c-bg)}
a{color:var(--c-link);text-decoration:none;cursor:pointer}
a:hover{text-decoration:underline}

/* layout */
.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}
.hdr{
  height:var(--header-h);
  background:var(--c-surface-glass);
  backdrop-filter:blur(18px) saturate(1.25);
  -webkit-backdrop-filter:blur(18px) saturate(1.25);
  border-bottom:1px solid var(--c-surface-glass-border);
  box-shadow:0 1px 0 rgba(255,255,255,.08) inset,0 8px 24px rgba(28,25,23,.04);
  display:flex;align-items:center;padding:0 20px;flex-shrink:0;z-index:10;gap:24px
}
.hdr-brand{display:flex;align-items:center;flex-shrink:0;position:relative}
.hdr-brand-btn{
  display:flex;align-items:center;gap:0;padding:4px 8px 4px 4px;margin:-4px 0 -4px -4px;
  border:none;background:transparent;cursor:pointer;border-radius:10px;
  transition:background .15s
}
.hdr-brand-btn:hover,.hdr-brand.open .hdr-brand-btn{background:rgba(255,107,0,.06)}
.hdr-logo{
  width:24px;height:24px;
  background:linear-gradient(145deg,#ff6b00,#ff9a2e);
  transform:rotate(45deg);border-radius:4px;flex-shrink:0;
  box-shadow:0 4px 12px rgba(255,107,0,.3)
}
.hdr-title{margin-left:12px;font-size:16px;font-weight:700;letter-spacing:.04em;color:var(--c-text);white-space:nowrap;max-width:200px;overflow:hidden;text-overflow:ellipsis}
.hdr-brand-caret{
  display:inline-block;width:0;height:0;margin-left:8px;flex-shrink:0;
  border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid var(--c-text-3);
  transition:transform .15s
}
.hdr-brand.open .hdr-brand-caret{transform:rotate(180deg);border-top-color:var(--c-primary)}
.hdr-app-panel{
  display:none;position:absolute;left:0;top:calc(100% + 8px);width:280px;max-height:min(420px,70vh);overflow:auto;
  background:var(--c-bg-card);border:1px solid var(--c-border);border-radius:12px;
  box-shadow:var(--shadow);z-index:200;padding:8px
}
.hdr-brand.open .hdr-app-panel{display:block}
.hdr-app-panel-hd{padding:6px 10px 8px;font-size:12px;color:var(--c-text-3)}
.hdr-app-item{
  display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border:none;background:transparent;
  border-radius:8px;cursor:pointer;text-align:left;font-size:13px;color:var(--c-text)
}
.hdr-app-item:hover{background:var(--c-hover-soft)}
.hdr-app-item.on{background:var(--c-hover-soft);color:var(--c-primary);font-weight:600}
.hdr-app-item-ic{
  width:28px;height:28px;border-radius:8px;flex-shrink:0;
  background:linear-gradient(145deg,#ff6b00,#ff9a2e);opacity:.85
}
.hdr-app-item-ic.platform{background:linear-gradient(145deg,#1d2129,#4e5969)}
.hdr-app-item-meta{min-width:0;flex:1}
.hdr-app-item-name{display:block;font-size:13px;line-height:1.3}
.hdr-app-item-desc{display:block;font-size:11px;color:var(--c-text-3);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hdr-app-item-check{flex-shrink:0;color:var(--c-primary);font-size:14px;opacity:0}
.hdr-app-item.on .hdr-app-item-check{opacity:1}
.hdr-search{flex:1;max-width:520px;position:relative;display:flex;align-items:center;gap:8px}
.hdr-search input{
  flex:1;padding:8px 12px 8px 36px;
  border:1px solid var(--c-border);border-radius:999px;font-size:13px;outline:none;color:var(--c-text);
  background:var(--c-input-bg) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%2386909c' viewBox='0 0 16 16'%3E%3Cpath d='M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85zm-5.242.656a5 5 0 1 1 0-10 5 5 0 0 1 0 10z'/%3E%3C/svg%3E") no-repeat 12px center
}
.hdr-search input:focus{border-color:rgba(255,107,0,.45);background-color:var(--c-input-bg);box-shadow:0 0 0 3px rgba(255,107,0,.1)}
.hdr-search-btn{
  padding:7px 16px;border:none;
  background:linear-gradient(90deg,#ff6b00,#ff8c33);color:#fff;
  border-radius:999px;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;
  box-shadow:0 6px 14px rgba(255,107,0,.22)
}
.hdr-search-btn:hover{opacity:.92}
.hdr-search-panel{display:none;position:absolute;left:0;right:56px;top:calc(100% + 6px);background:var(--c-bg-card);backdrop-filter:blur(12px);border:1px solid var(--c-border);border-radius:14px;box-shadow:var(--shadow);z-index:100;padding:8px 0}
.hdr-search-panel.open{display:block}
.hdr-search-panel-hd{padding:6px 14px 8px;font-size:12px;color:var(--c-text-3)}
.hdr-search-history{list-style:none;margin:0;padding:0;max-height:220px;overflow:auto}
.hdr-search-history-item{padding:8px 14px;font-size:13px;cursor:pointer;color:var(--c-text-1)}
.hdr-search-history-item:hover{background:var(--c-sidebar-active)}
.hdr-search-empty{padding:8px 14px;font-size:13px;color:var(--c-text-3)}
.hdr-search-clear{display:block;width:calc(100% - 28px);margin:8px 14px 6px;padding:0;border:none;background:transparent;color:var(--c-primary);font-size:12px;text-align:left;cursor:pointer}

/* 全局搜索页 */
.search-initial{padding:32px 24px;text-align:center;color:var(--c-text-3)}
.search-initial-title{font-size:14px;color:var(--c-text-2);margin:0 0 16px}
.search-tips{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-bottom:20px}
.search-tip-chip{border:1px dashed var(--c-border);background:var(--c-surface-muted);color:var(--c-text-2);border-radius:999px;padding:6px 14px;font-size:13px;cursor:pointer;transition:border-color .15s,background .15s,color .15s}
.search-tip-chip:hover{border-color:rgba(255,107,0,.45);color:var(--c-primary);background:rgba(255,107,0,.06)}
.search-tip-desc{font-size:12px;line-height:1.7;max-width:560px;margin:0 auto;text-align:left}
.search-result-summary{font-size:13px;font-weight:400;color:var(--c-text-3);margin-left:8px}
.search-group{margin-top:20px}
.search-group:first-child{margin-top:0}
.search-group-hd{display:flex;align-items:center;gap:8px;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--c-border-light)}
.search-group-title{font-size:13px;font-weight:600;color:var(--c-text-2)}
.search-group-count{font-size:12px;color:var(--c-text-3);background:var(--c-surface-muted);padding:1px 8px;border-radius:999px}
.search-item{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border:1px solid var(--c-border-light);border-radius:12px;margin-bottom:8px;cursor:pointer;transition:border-color .15s,background .15s,box-shadow .15s;background:var(--c-bg-card)}
.search-item:last-child{margin-bottom:0}
.search-item:hover{border-color:rgba(255,107,0,.35);background:var(--c-sidebar-active);box-shadow:0 4px 12px rgba(15,23,42,.04)}
.search-item-body{flex:1;min-width:0}
.search-item-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.search-item-title{font-size:14px;font-weight:600;color:var(--c-text);line-height:1.4}
.search-item-meta{font-size:12px;color:var(--c-text-3);margin-top:4px;line-height:1.5}
.search-item-snippet{font-size:13px;color:var(--c-text-2);margin-top:8px;line-height:1.6;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.search-hl{font-style:normal;color:var(--c-primary);font-weight:600;background:rgba(255,107,0,.1);padding:0 2px;border-radius:2px}
.search-item-icon{flex-shrink:0;width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:700;color:#fff;background:linear-gradient(135deg,#ff6b00,#ff8c33)}
.search-item-icon--oa{background:linear-gradient(135deg,#3b82f6,#60a5fa)}
.search-item-icon--crm{background:linear-gradient(135deg,#8b5cf6,#a78bfa)}
.search-item--message .search-item-meta .tag,
.search-item--announce .search-item-meta .tag{font-size:11px;padding:1px 6px}
.search-history-wrap{margin-top:20px;padding-top:16px;border-top:1px solid var(--c-border-light)}
.search-history-label{font-size:13px;color:var(--c-text-3)}
.search-history-chips{margin-top:8px;display:flex;gap:8px;flex-wrap:wrap}
.search-history-empty{font-size:13px;color:var(--c-text-3)}
#search-empty{padding:40px 24px;text-align:center;color:var(--c-text-3)}
.hdr-right{margin-left:auto;display:flex;align-items:center;gap:4px;flex-shrink:0}
.hdr-pref{display:flex;align-items:center;gap:2px;margin-right:4px}
.hdr-icon-btn{width:32px;height:32px;border:none;background:transparent;border-radius:999px;color:var(--c-text-2);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;transition:background .15s,color .15s}
.hdr-icon-btn:hover{color:var(--c-primary);background:rgba(255,247,240,.95)}
[data-theme="dark"] .hdr-icon-btn:hover{background:rgba(255,107,0,.12)}
.hdr-ic-theme{width:16px;height:16px;display:block;background:currentColor;opacity:.85;mask-size:contain;-webkit-mask-size:contain;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-position:center;-webkit-mask-position:center;mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M6.76 4.84l-1.8-1.79-1.41 1.41 1.79 1.8 1.42-1.42zM4 10.5H1v2h3v-2zm9-9.95h-2V3.5h2V.55zm7.45 3.91l-1.41-1.41-1.79 1.79 1.41 1.41 1.79-1.79zm-3.21 13.7l1.79 1.8 1.41-1.41-1.8-1.79-1.4 1.4zM20 10.5v2h3v-2h-3zm-8-5c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm-1 16.95h2V19.5h-2v2.95zm-7.45-3.91l1.41 1.41 1.79-1.8-1.41-1.41-1.79 1.8z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M6.76 4.84l-1.8-1.79-1.41 1.41 1.79 1.8 1.42-1.42zM4 10.5H1v2h3v-2zm9-9.95h-2V3.5h2V.55zm7.45 3.91l-1.41-1.41-1.79 1.79 1.41 1.41 1.79-1.79zm-3.21 13.7l1.79 1.8 1.41-1.41-1.8-1.79-1.4 1.4zM20 10.5v2h3v-2h-3zm-8-5c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm-1 16.95h2V19.5h-2v2.95zm-7.45-3.91l1.41 1.41 1.79-1.8-1.41-1.41-1.79 1.8z'/%3E%3C/svg%3E")}
[data-theme="dark"] .hdr-ic-theme{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M12 3a9 9 0 1 0 9 9c0-.46-.04-.92-.1-1.36a5.389 5.389 0 0 1-4.4 2.26 5.403 5.403 0 0 1-3.14-9.8c-.44-.06-.9-.1-1.36-.1z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M12 3a9 9 0 1 0 9 9c0-.46-.04-.92-.1-1.36a5.389 5.389 0 0 1-4.4 2.26 5.403 5.403 0 0 1-3.14-9.8c-.44-.06-.9-.1-1.36-.1z'/%3E%3C/svg%3E")}
.hdr-tenant-switch{display:flex;align-items:center;gap:8px;margin-right:8px;padding-right:12px;border-right:1px solid var(--c-border-light)}
.hdr-tenant-label{font-size:13px;color:var(--c-text-2);white-space:nowrap}
.hdr-tenant-select{width:auto;min-width:160px;height:32px;font-size:13px;border-radius:10px;background:var(--c-input-bg);border-color:var(--c-border);color:var(--c-text)}
.hdr-link{display:inline-flex;align-items:center;gap:4px;padding:6px 12px;font-size:13px;color:var(--c-text-2);cursor:pointer;border-radius:999px;position:relative;white-space:nowrap;transition:background .15s,color .15s}
.hdr-link:hover{color:var(--c-primary);background:var(--c-hover-soft);text-decoration:none}
.hdr-link-ic{width:16px;height:16px;display:inline-block;background:currentColor;opacity:.7;mask-size:contain;mask-repeat:no-repeat;mask-position:center;-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center}
.hdr-link-ic.msg{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2z'/%3E%3C/svg%3E")}
.hdr-link-ic.ann{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M12 22c1.1 0 2-.9 2-2h-4c0 1.1.9 2 2 2zm6-6v-5c0-3.07-1.63-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.64 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M12 22c1.1 0 2-.9 2-2h-4c0 1.1.9 2 2 2zm6-6v-5c0-3.07-1.63-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.64 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z'/%3E%3C/svg%3E")}
.hdr-link-ic.set{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z'/%3E%3C/svg%3E")}
.hdr-link-ic.out{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4V5z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4V5z'/%3E%3C/svg%3E")}
.hdr-badge{background:var(--c-danger);color:#fff;font-size:10px;min-width:16px;height:16px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;padding:0 4px;margin-left:2px}
.hdr-notify{position:relative}
.hdr-notify-panel{position:absolute;right:0;top:calc(100% + 6px);width:360px;background:var(--c-bg-card);border:1px solid var(--c-border);border-radius:var(--radius);box-shadow:var(--shadow);z-index:120;overflow:hidden}
.hdr-notify-panel[hidden]{display:none}
.hdr-notify-tabs{display:flex;border-bottom:1px solid var(--c-border-light);padding:0 8px}
.hdr-notify-tab{flex:1;height:40px;border:none;background:transparent;font-size:13px;color:var(--c-text-2);cursor:pointer;position:relative}
.hdr-notify-tab:hover{color:var(--c-primary)}
.hdr-notify-tab.on{color:var(--c-primary);font-weight:600}
.hdr-notify-tab.on::after{content:"";position:absolute;left:20%;right:20%;bottom:0;height:2px;background:var(--c-primary);border-radius:1px}
.hdr-notify-pane{display:none;max-height:320px;overflow:auto}
.hdr-notify-pane.on{display:block}
.hdr-notify-item{display:block;width:100%;text-align:left;padding:12px 14px;border:none;border-bottom:1px solid var(--c-border-light);background:var(--c-bg-card);cursor:pointer;text-decoration:none;color:inherit}
.hdr-notify-item:hover{background:var(--c-sidebar-active);text-decoration:none;color:inherit}
.hdr-notify-item.unread .hdr-notify-item-t{font-weight:600}
.hdr-notify-item.unread .hdr-notify-item-t::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--c-danger);margin-right:6px;vertical-align:middle}
.hdr-notify-item-t{display:block;font-size:13px;color:var(--c-text);line-height:1.4}
.hdr-notify-item-d{display:block;font-size:12px;color:var(--c-text-3);margin-top:4px}
.hdr-notify-ft{padding:10px 14px;text-align:center;border-top:1px solid var(--c-border-light)}
.hdr-notify-ft a{font-size:13px;color:var(--c-primary)}
.ip-list-add{display:flex;gap:8px;align-items:center;margin-top:8px}
.ip-list-add .fi{flex:1;max-width:320px}
.hdr-user{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;padding:4px 10px;border-radius:999px;margin-left:8px;transition:background .15s}
.hdr-user:hover{background:var(--c-hover-soft)}
.hdr-avatar-img{width:32px;height:32px;border-radius:50%;object-fit:cover;box-shadow:0 0 0 2px var(--c-bg-card),0 0 0 3px rgba(255,107,0,.2)}
.body{display:flex;flex:1;overflow:hidden;background:var(--c-body-bg);padding:0 0 0 0}
.sb{
  width:var(--sidebar-w);
  margin:10px 0 10px 10px;
  padding:10px 8px 14px;
  border-radius:22px;
  border:1px solid var(--c-surface-glass-border);
  background:var(--c-sidebar-glass);
  backdrop-filter:blur(18px) saturate(1.25);
  -webkit-backdrop-filter:blur(18px) saturate(1.25);
  box-shadow:var(--shadow-card);
  overflow-y:auto;
  overflow-x:hidden;
  flex-shrink:0;
  position:relative;
}
.sb::before{
  content:'';
  position:absolute;left:16%;right:16%;top:0;height:1px;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.95),transparent);
  pointer-events:none;
}
.sb-search{padding:12px 12px 8px}
.sb-search input{width:100%;padding:7px 12px;border:1px solid var(--c-border);border-radius:var(--radius-sm);font-size:13px;outline:none;background:var(--c-input-bg);color:var(--c-text)}
.sb-search input:focus{border-color:var(--c-primary);background:var(--c-input-bg)}
.sb-gp{padding:12px 16px 4px;font-size:12px;color:var(--c-text-3);font-weight:500}
.sb-group{border-bottom:none;margin-bottom:2px}
.sb-parent{display:flex;align-items:center;width:100%;padding:10px 12px;border:none;background:transparent;font-size:13px;color:var(--c-menu-parent);cursor:pointer;text-align:left;font-weight:600;letter-spacing:.02em;border-radius:12px;transition:background .15s,color .15s}
.sb-parent:hover{background:var(--c-hover-soft);color:var(--c-primary)}
.sb-group.open>.sb-parent{color:var(--c-primary);background:var(--c-hover-soft)}
.sb-arrow{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;margin-right:8px;flex-shrink:0;position:relative}
.sb-arrow::before{content:'';display:block;width:0;height:0;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:5px solid #b0b5bd;transition:transform .15s}
.sb-group.open>.sb-parent .sb-arrow::before{border-left-color:var(--c-primary)}
.sb-group.open .sb-arrow::before{transform:rotate(90deg)}
.sb-children{display:none;padding:2px 0 8px 4px}
.sb-group.open .sb-children{display:block}
.sb-subgroup{margin:2px 0}
.sb-subparent{display:flex;align-items:center;width:100%;padding:8px 12px 8px 34px;border:none;background:transparent;font-size:13px;color:var(--c-text-2);cursor:pointer;text-align:left;font-weight:500;border-radius:10px}
.sb-subparent:hover{background:rgba(255,247,240,.9);color:var(--c-primary)}
.sb-subgroup .sb-arrow{margin-right:6px}
.sb-subgroup.open .sb-arrow::before{transform:rotate(90deg)}
.sb-subchildren{display:none;padding:0 0 4px}
.sb-subgroup.open .sb-subchildren{display:block}
.sb-subchildren .sb-item{padding-left:48px}
.sb-item{display:flex;align-items:center;margin:2px 0;padding:8px 12px 8px 34px;font-size:12.5px;color:var(--c-menu-text);cursor:pointer;border-left:none;border-radius:11px;transition:background .15s,color .15s,box-shadow .15s;text-decoration:none;letter-spacing:.01em}
.sb-item:hover{background:var(--c-sidebar-active);color:var(--c-text);text-decoration:none}
.sb-item.on{background:linear-gradient(110deg,rgba(255,107,0,.14),rgba(255,154,46,.08));color:var(--c-primary);font-weight:600;box-shadow:0 1px 0 rgba(255,255,255,.7) inset,0 6px 14px rgba(255,107,0,.08)}
.sb-item .ic{margin-right:10px;width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.35;flex-shrink:0}
.sb-item.on .ic{opacity:1;box-shadow:0 0 0 3px rgba(255,107,0,.15)}
.sb-item.sb-top{margin:0 0 8px;padding:11px 12px;font-size:13px;font-weight:600;letter-spacing:.04em;border-bottom:none;border-radius:14px;background:var(--c-hover-muted)}
.sb-item.sb-top.on{background:linear-gradient(110deg,#ff6b00,#ff8c33);color:#fff;box-shadow:0 10px 22px rgba(255,107,0,.28)}
.sb-item.sb-top.on .ic{opacity:1;background:#fff;box-shadow:none}
.pg-layout{display:flex;gap:20px;align-items:flex-start}
.pg-subnav{width:160px;flex-shrink:0;position:sticky;top:0}
.pg-subnav a{display:block;padding:8px 12px;font-size:13px;color:var(--c-text-2);text-decoration:none;border-radius:var(--radius-sm);margin-bottom:4px}
.pg-subnav a:hover,.pg-subnav a.on{background:var(--c-sidebar-active);color:var(--c-primary)}
.pg-body{flex:1;min-width:0}
.config-sec{margin-bottom:24px}
.config-sec-hd{font-size:15px;font-weight:600;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--c-border-light)}
.tbl .ops a{margin-right:8px}
.tbl .ops a:last-child{margin-right:0}
.main{flex:1;overflow-y:auto;display:flex;flex-direction:column;min-width:0}
/* tags-view（多标签导航，替代路径面包屑） */
.tags-view{display:flex;align-items:stretch;gap:0;padding:0 16px;min-height:40px;background:var(--c-tags-bg);border-bottom:1px solid var(--c-border-light);flex-shrink:0;overflow-x:auto}
.tags-view-item{display:inline-flex;align-items:center;gap:6px;padding:10px 14px;font-size:13px;color:var(--c-text-2);cursor:pointer;white-space:nowrap;border-bottom:2px solid transparent;margin-bottom:-1px;text-decoration:none;flex-shrink:0;user-select:none}
.tags-view-item:hover{color:var(--c-text);text-decoration:none}
.tags-view-item.on{color:var(--c-primary);border-bottom-color:var(--c-primary);font-weight:500}
.tags-view-close{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;font-size:12px;line-height:1;color:inherit;opacity:.55;border-radius:2px}
.tags-view-close:hover{opacity:1;background:rgba(0,0,0,.06)}
.tags-view-item.on .tags-view-close{opacity:.75}
.tags-view-item.on .tags-view-close:hover{opacity:1;background:rgba(255,107,0,.12)}
.tags-view-ctx{position:fixed;z-index:1200;min-width:148px;padding:4px;background:var(--c-bg-card);border:1px solid var(--c-border);border-radius:6px;box-shadow:var(--shadow)}
.tags-view-ctx button{display:block;width:100%;border:0;background:transparent;text-align:left;padding:8px 12px;font-size:13px;color:var(--c-text-1);cursor:pointer;border-radius:4px}
.tags-view-ctx button:hover{background:var(--c-sidebar-active,#f5f5f5);color:var(--c-primary)}
.bc{padding:12px 24px 0;font-size:13px;color:var(--c-text-3)}
.bc span{color:var(--c-text)}
.pg{padding:16px 24px 24px;flex:1}
.pg-hd{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:16px}
.pg-title{font-size:22px;font-weight:600;color:var(--c-text);margin:0}
.pg-desc{font-size:13px;color:var(--c-text-3);margin:4px 0 0}
.pg-desc:empty{display:none}
.pg-actions{display:flex;gap:8px;align-items:center}

/* card */
.card{background:var(--c-bg-card);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);padding:20px;margin-bottom:16px;border:1px solid var(--c-border-light)}
.card-t{font-size:15px;font-weight:600;margin:0 0 16px;color:var(--c-text)}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;padding:6px 16px;font-size:14px;border-radius:var(--radius-sm);cursor:pointer;border:1px solid transparent;transition:.15s;white-space:nowrap;line-height:1.5}
.btn-p{background:var(--c-primary-grad);color:#fff;border-color:var(--c-primary)}
.btn-p:hover{opacity:.92}
.btn-s{background:var(--c-btn-secondary-bg);color:var(--c-text);border-color:var(--c-border)}
.btn-s:hover{border-color:var(--c-primary);color:var(--c-primary)}
.btn-d{background:var(--c-btn-secondary-bg);color:var(--c-danger);border-color:var(--c-border)}
.btn-d:hover{border-color:var(--c-danger)}
.btn-sm{padding:4px 12px;font-size:13px}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn-lk{background:none;border:none;color:var(--c-link);padding:0}
.btn-lk:hover{text-decoration:underline}

/* form */
.fg{margin-bottom:16px}
.fl{display:block;font-size:14px;color:var(--c-text-2);margin-bottom:6px}
.fl.req::before{content:'*';color:var(--c-danger);margin-right:4px}
.fi,.fs,.fta{width:100%;padding:6px 12px;border:1px solid var(--c-border);border-radius:var(--radius-sm);font-size:14px;outline:none;transition:.15s;background:var(--c-input-bg);color:var(--c-text)}
.fi:focus,.fs:focus,.fta:focus{border-color:var(--c-primary);box-shadow:0 0 0 2px var(--c-focus-ring)}
.fi[readonly],.fs[readonly],.fta[readonly],
.fi:disabled,.fs:disabled,.fta:disabled,
.field-readonly{background:var(--c-input-disabled);color:var(--c-text-3);border-color:var(--c-border-light);cursor:not-allowed}
.user-ehr-sync{display:none;margin:0 0 16px}
.user-ehr-sync.is-on{display:block}
.user-ehr-banner{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 12px;background:#f7f8fa;border-radius:var(--radius-sm);font-size:12px;color:var(--c-text-3);line-height:1.5}
.user-ehr-banner .tag{flex-shrink:0}
.user-ehr-banner-txt{flex:1;min-width:160px}
.user-ehr-banner-meta{color:var(--c-text-2)}
.user-ehr-more{margin-top:8px;border:none}
.user-ehr-more>summary{list-style:none;cursor:pointer;font-size:12px;color:var(--c-link);user-select:none;padding:2px 0}
.user-ehr-more>summary::-webkit-details-marker{display:none}
.user-ehr-more>summary::after{content:'展开';margin-left:4px}
.user-ehr-more[open]>summary::after{content:'收起'}
.user-ehr-more-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px 20px;margin-top:8px;padding:10px 12px;background:var(--c-surface-muted);border-radius:var(--radius-sm)}
.user-ehr-more-grid .mi{min-width:0}
.user-ehr-more-grid .mi b{display:block;font-size:11px;font-weight:400;color:var(--c-text-3);margin-bottom:2px}
.user-ehr-more-grid .mi span{font-size:12px;color:var(--c-text-2);word-break:break-all}

.user-detail-profile{display:flex;align-items:center;gap:14px;padding-bottom:16px;margin-bottom:4px;border-bottom:1px solid var(--c-border-light)}
.user-detail-avatar{width:48px;height:48px;border-radius:50%;object-fit:cover;flex-shrink:0;background:#e8e8e8}
.user-detail-avatar.act{display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:600;color:#fff;background:var(--c-primary)}
.user-detail-main{min-width:0;flex:1}
.user-detail-name{margin:0;font-size:16px;font-weight:600;color:var(--c-text);line-height:1.3}
.user-detail-sub{margin:4px 0 0;font-size:13px;color:var(--c-text-3)}
.user-detail-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.user-detail-dl{display:grid;grid-template-columns:1fr 1fr;gap:14px 24px;margin:16px 0 0;padding:0}
.user-detail-dl>div{min-width:0}
.user-detail-dl dt{margin:0 0 4px;font-size:12px;color:var(--c-text-3);font-weight:400}
.user-detail-dl dd{margin:0;font-size:14px;color:var(--c-text);word-break:break-word;line-height:1.4}
.user-detail-dl .full{grid-column:1/-1}
.user-detail-muted{margin-top:16px;padding-top:12px;border-top:1px dashed var(--c-border-light)}
.user-detail-muted .user-detail-dl{margin-top:8px}
.user-detail-muted-t{font-size:12px;color:var(--c-text-3);margin:0 0 4px}
.user-detail-tp,.user-detail-maint{margin-top:16px;padding-top:12px;border-top:1px dashed var(--c-border-light)}
.user-tp-hint{font-size:12px;color:var(--c-text-3);margin:0 0 10px;line-height:1.4}
.user-tp-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--c-border);border-radius:8px;margin-bottom:8px}
.user-tp-name{font-size:13px;font-weight:500;min-width:40px}
.user-tp-status{flex:1;font-size:13px;color:var(--c-text-2)}
.user-tp-status.muted{color:var(--c-text-3)}
.user-tp-id{color:var(--c-text-3);font-size:12px;margin-left:4px}
.user-detail-maint-links{display:flex;flex-wrap:wrap;gap:12px 16px;margin-top:8px}
.user-detail-maint-links a{font-size:13px}

.fi[readonly]:focus,.fs[readonly]:focus,.fta[readonly]:focus,
.fi:disabled:focus,.fs:disabled:focus,.fta:disabled:focus{border-color:var(--c-border-light);box-shadow:none}
.fi.err,.fs.err{border-color:var(--c-danger)}
.ferr{font-size:12px;color:var(--c-danger);margin-top:4px;display:none}
.ferr.show{display:block}
.frow{display:grid;gap:16px}
.frow-2{grid-template-columns:1fr 1fr}
.frow-3{grid-template-columns:1fr 1fr 1fr}
.frow-4{grid-template-columns:1fr 1fr 1fr 1fr}
@media(max-width:1200px){.frow-4,.frow-3{grid-template-columns:1fr 1fr}}
.fg-h{display:flex;align-items:center;gap:8px}
.fg-h .fl{width:80px;text-align:right;margin:0;flex-shrink:0}
.fg-h .fi,.fg-h .fs{flex:1}

/* query bar */
.qb .qb-row{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.qb .qb-fields{flex:1;min-width:0}
.qb .qb-fields.frow{align-items:center}
.qb .fg{margin-bottom:0}
.qb .fg-h{align-items:center}
.qb-actions{display:flex;gap:8px;align-items:center;flex-shrink:0;white-space:nowrap;margin-left:auto;align-self:center}
.qb-extra{margin-top:12px}
.qb-extra .fg{margin-bottom:0}
.qb-extra.frow-3 .ops-daterange-fg{grid-column:span 2}
/* 展开行与首行字段列对齐（避开右侧按钮区） */
.card.qb{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:16px;row-gap:12px;align-items:start}
.card.qb>.qb-row{display:contents}
.card.qb>.qb-row>.qb-fields{grid-column:1;min-width:0}
.card.qb>.qb-row>.qb-actions{grid-column:2;margin-left:0;align-self:center}
.card.qb>.qb-extra{grid-column:1;margin-top:0;min-width:0}
.card>.qb{margin-bottom:16px;padding:0;box-shadow:none;border:none;background:transparent}

/* table */
.tbl-wrap{overflow-x:auto}
.org-tree-wrap{overflow:visible}
.org-tenant-view{overflow:visible}
.card:has(.org-tree-wrap){overflow:visible}
table.tbl{width:100%;border-collapse:collapse;font-size:14px}
.tbl th{background:var(--c-table-head);padding:10px 12px;text-align:left;font-weight:500;color:var(--c-text-2);border-bottom:1px solid var(--c-border-light);white-space:nowrap}
.tbl td{padding:10px 12px;border-bottom:1px solid var(--c-border-light);color:var(--c-text);max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tbl td.cell-ellipsis,.tbl td[title]{max-width:220px}
.tbl td a.tbl-lk{color:var(--c-link-light)}
.tbl td a.tbl-lk:hover{color:var(--c-link);text-decoration:underline}
.tbl tr:hover td{background:var(--c-table-hover)}
.tbl .ops{white-space:nowrap;color:var(--c-text);max-width:none;overflow:visible;text-overflow:clip}
.tbl .ops a{color:var(--c-text)}
.tbl .ops a:hover{color:var(--c-text);text-decoration:none}
.tbl .ops a{margin-right:12px}
.tbl .ops a.del{color:var(--c-danger)}
.st{display:inline-flex;align-items:center;gap:6px;font-size:12px;line-height:1.2;color:var(--c-text);font-weight:500}
.st::before{content:'';display:inline-block;width:6px;height:6px;border-radius:50%;flex-shrink:0;background:var(--c-text-3)}
.st-ok{color:var(--c-success)}
.st-ok::before{background:var(--c-success)}
.st-err{color:var(--c-danger)}
.st-err::before{background:var(--c-danger)}
.st-run{color:var(--c-info)}
.st-run::before{background:var(--c-info)}
.st-warn{color:var(--c-warning)}
.st-warn::before{background:var(--c-warning)}
.st-off{color:var(--c-text-3)}
.st-off::before{background:#d9d9d9}
.banner-warn{padding:8px 12px;background:#fff7e6;border:1px solid #ffd591;border-radius:var(--radius);color:#ad6800;font-size:13px}
.status-badge{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:600;line-height:1.4;border:1px solid transparent;white-space:nowrap}
.status-badge::before{content:'';width:6px;height:6px;border-radius:50%;flex-shrink:0;background:currentColor}
.status-badge.st-ok{background:var(--c-badge-ok-bg);color:#389e0d;border-color:#b7eb8f}
.status-badge.st-warn{background:var(--c-badge-warn-bg);color:#d48806;border-color:#ffe58f}
.status-badge.st-off{background:var(--c-badge-off-bg);color:#8c8c8c;border-color:#d9d9d9}
.status-badge.st-err{background:var(--c-badge-err-bg);color:#cf1322;border-color:#ffccc7}
.status-badge.st-run{background:#e6f4ff;color:#1677ff;border-color:#91caff}
.sel-bar{background:#e6f4ff;border:1px solid #91caff;padding:8px 12px;border-radius:var(--radius-sm);margin-bottom:12px;font-size:13px;display:none}
.sel-bar.show{display:flex;align-items:center;gap:12px}

/* tabs */
.tabs{display:flex;flex-wrap:wrap;border-bottom:1px solid var(--c-border-light);margin-bottom:16px}
.tab{padding:10px 16px;font-size:14px;color:var(--c-text-2);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}
.tab.on{color:var(--c-primary);border-bottom-color:var(--c-primary);font-weight:500}
.tab-pane{display:none}
.tab-pane.on{display:block}

.tabs-ops-primary{display:inline-flex;flex-wrap:wrap;gap:4px;padding:4px;background:#f5f6f8;border-radius:var(--radius-lg);border-bottom:none;margin-bottom:20px}
.tabs-ops-primary .tab{padding:9px 22px;border-radius:var(--radius-sm);border-bottom:none;margin-bottom:0;font-size:14px;color:var(--c-text-2);transition:.15s;white-space:nowrap}
.tabs-ops-primary .tab:hover{color:var(--c-text);background:rgba(255,255,255,.65)}
.tabs-ops-primary .tab.on{background:var(--c-bg-card);color:var(--c-primary);font-weight:600;box-shadow:var(--shadow-card)}
.tabs-ops-chips{display:inline-flex;flex-wrap:wrap;gap:6px;border-bottom:none;margin-bottom:16px;padding:0}
.tabs-ops-chips .tab{padding:4px 12px;font-size:12px;border-radius:var(--radius-sm);background:#f5f6f8;border-bottom:none;margin-bottom:0;color:var(--c-text-2)}
.tabs-ops-chips .tab.on{background:var(--c-accent-soft);color:var(--c-primary);font-weight:500}
.ops-side-wrap{display:grid;grid-template-columns:152px minmax(0,1fr);gap:16px;align-items:start}
.tabs-ops-side{flex-direction:column;flex-wrap:nowrap;border-bottom:none;background:var(--c-bg-card);border:1px solid var(--c-border-light);border-radius:var(--radius-lg);padding:8px;margin-bottom:0;position:sticky;top:0}
.tabs-ops-side .tab{padding:10px 12px;border-radius:var(--radius-sm);border-bottom:none;margin-bottom:2px;font-size:13px;text-align:left;width:100%}
.tabs-ops-side .tab:last-child{margin-bottom:0}
.tabs-ops-side .tab:hover{background:var(--c-surface-muted);color:var(--c-text)}
.tabs-ops-side .tab.on{background:var(--c-sidebar-active);color:var(--c-primary);font-weight:500}
.ops-side-wrap>.tab-pane{grid-column:2;min-width:0}
.ops-side-wrap>.tabs-ops-side{grid-column:1;grid-row:1}
@media(max-width:960px){.ops-side-wrap{grid-template-columns:1fr}.tabs-ops-side{flex-direction:row;flex-wrap:wrap;position:static}.ops-side-wrap>.tab-pane{grid-column:1}}

/* stats */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:16px}
.stat{background:var(--c-bg-card);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow);display:flex;justify-content:space-between;align-items:center}
.stat-v{font-size:28px;font-weight:600;color:rgba(0,0,0,.85)}
.stat-l{font-size:13px;color:var(--c-text-3);margin-top:4px}
.stat-ic{width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:18px}

/* pagination */
.pgnt{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding-top:12px;font-size:13px;color:var(--c-text-3)}
.pgnt button{min-width:32px;height:32px;border:1px solid var(--c-border);background:var(--c-btn-secondary-bg);border-radius:var(--radius-sm);cursor:pointer;font-size:13px;color:var(--c-text-2)}
.pgnt button.on{background:var(--c-primary);border-color:var(--c-primary);color:#fff}
.pgnt button:hover:not(.on){border-color:var(--c-primary);color:var(--c-primary)}

/* app grid portal */
.app-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:12px}
.app-card{text-align:center;padding:16px 8px;border-radius:var(--radius);cursor:pointer;transition:.15s;border:1px solid var(--c-border-light);background:#fafbfc}
.app-card:hover{background:var(--c-accent-soft);border-color:#ffd8b8}
.app-card img,.app-card .app-ic{width:48px;height:48px;border-radius:12px;margin:0 auto 8px;object-fit:cover}
.app-ic{display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:600;background:var(--c-accent-soft);color:var(--c-primary)}
.app-ic.add{font-size:28px;background:transparent;border:2px dashed var(--c-border);color:var(--c-primary)}
.app-add:hover .app-ic.add{border-color:var(--c-primary)}

/* portal dashboard */
.portal-banner{background:var(--c-primary-grad);border-radius:var(--radius-lg);padding:28px 32px;margin-bottom:16px;color:#fff;display:flex;justify-content:space-between;align-items:center;gap:24px;position:relative;overflow:hidden}
.portal-banner::after{content:'';position:absolute;right:-20px;top:-20px;width:200px;height:200px;background:rgba(255,255,255,.1);border-radius:20px;transform:rotate(15deg)}
.portal-banner h2{margin:0 0 8px;font-size:22px;font-weight:600}
.portal-banner p{margin:0;font-size:14px;opacity:.9}
.portal-banner-stats{display:flex;gap:32px;flex-shrink:0;position:relative;z-index:1}
.pbs-item{text-align:center}
.pbs-v{display:block;font-size:24px;font-weight:600}
.pbs-l{display:block;font-size:12px;opacity:.85;margin-top:4px}
.portal-grid{display:flex;flex-direction:column;gap:16px}
.portal-upper{display:grid;grid-template-columns:2fr 3fr;gap:16px;align-items:stretch}
.portal-side{display:flex;flex-direction:column;gap:16px;min-width:0}
.portal-side>.card{margin-bottom:0;flex:1}
.portal-bottom{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.portal-bottom>.card{margin-bottom:0}
.portal-msg{margin-bottom:0;min-height:420px;display:flex;flex-direction:column}
.portal-msg #portal-msg-list{flex:1;overflow-y:auto;max-height:360px}
.portal-side .app-grid{grid-template-columns:repeat(3,1fr)}
.card-hd-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.card-hd-row .card-t{margin:0}
.portal-inline-search{margin-bottom:12px}
.portal-inline-search input{width:100%;height:32px;padding:0 12px;border:1px solid var(--c-border);border-radius:var(--radius-sm);font-size:13px}
.portal-inline-search input:focus{outline:none;border-color:var(--c-primary)}
.portal-tabs{display:flex;gap:0;margin-bottom:12px;border-bottom:1px solid var(--c-border)}
.portal-tab{padding:8px 0;margin-right:20px;cursor:pointer;font-size:13px;color:var(--c-text-3);border-bottom:2px solid transparent;margin-bottom:-1px;transition:.15s;white-space:nowrap}
.portal-tab.on{color:var(--c-primary);border-bottom-color:var(--c-primary);font-weight:500}
.portal-tab:hover{color:var(--c-primary)}
.portal-msg-row{display:flex;gap:12px;padding:12px 0;border-bottom:1px solid var(--c-border-light);cursor:pointer;transition:.15s}
.portal-msg-row:last-child{border-bottom:none}
.portal-msg-row:hover{background:var(--c-surface-muted);margin:0 -16px;padding-left:16px;padding-right:16px}
.portal-msg-row.unread .portal-msg-title{font-weight:600}
.portal-msg-ic{width:36px;height:36px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;flex-shrink:0}
.portal-msg-ic.approval{background:#e6f4ff;color:var(--c-info)}
.portal-msg-ic.notice{background:#f6ffed;color:var(--c-success)}
.portal-msg-ic.reminder{background:#fff7e6;color:var(--c-warning)}
.portal-msg-ic.alert{background:#fff2f0;color:var(--c-danger)}
.portal-msg-body{flex:1;min-width:0}
.portal-msg-title{font-size:14px;margin-bottom:4px}
.portal-msg-desc{font-size:12px;color:var(--c-text-3);margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.portal-msg-meta{font-size:12px;color:var(--c-text-3);display:flex;gap:12px}
.portal-list-empty{display:none;padding:24px 0;text-align:center;font-size:13px;color:var(--c-text-3)}
.portal-ann-row{padding:10px 0;border-bottom:1px solid var(--c-border-light);cursor:pointer}
.portal-ann-row:last-child{border-bottom:none}
.portal-ann-row:hover{opacity:.85}
.portal-ann-title{font-size:14px;margin-bottom:4px}
.portal-ann-desc{font-size:12px;color:var(--c-text-3);margin-bottom:4px}
.portal-ann-meta{font-size:12px;color:var(--c-text-3)}
.health-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.health-hd .card-t{margin:0}
.health-status{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--c-success)}
.health-status::before{content:'';width:8px;height:8px;border-radius:50%;background:var(--c-success)}
.quick-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.quick-item{display:flex;align-items:center;gap:10px;padding:12px;border-radius:var(--radius);border:1px solid var(--c-border-light);cursor:pointer;font-size:13px;transition:.15s}
.quick-item:hover{background:var(--c-accent-soft);border-color:#ffd8b8}
.quick-ic{width:8px;height:8px;border-radius:50%;background:currentColor;flex-shrink:0}
.tag{display:inline-block;padding:1px 8px;border-radius:10px;font-size:11px;margin-left:6px;font-weight:500}
.tag-info{background:#e6f4ff;color:var(--c-info)}
.tag-ok{background:#f6ffed;color:var(--c-success)}
.tag-err{background:#fff2f0;color:var(--c-danger)}
.health-item{display:flex;align-items:center;gap:12px;margin-bottom:12px;font-size:13px}
.health-item>span:first-child{width:72px;color:var(--c-text-2);flex-shrink:0}
.health-item>span:last-child{width:36px;text-align:right;color:var(--c-text-3);flex-shrink:0}
.health-bar{flex:1;height:8px;background:var(--c-border-light);border-radius:4px;overflow:hidden}
.health-fill{height:100%;border-radius:4px;transition:width .3s}
.activity-item{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid var(--c-border-light)}
.activity-item:last-child{border-bottom:none}
.act-avatar{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:500;flex-shrink:0}
@media(max-width:1200px){.portal-upper{grid-template-columns:1fr}.portal-bottom{grid-template-columns:1fr}.portal-banner{flex-direction:column;align-items:flex-start}}

/* modal & drawer */
.overlay{position:fixed;inset:0;background:var(--c-overlay-bg);z-index:100;display:none;align-items:center;justify-content:center}
.overlay.open{display:flex}
.overlay.drawer-ol{justify-content:flex-end;align-items:stretch;z-index:100}
.overlay:not(.drawer-ol){z-index:130}
.overlay.picker-overlay{z-index:140}
.modal{background:var(--c-modal-bg);border-radius:var(--radius);width:520px;max-width:90vw;max-height:85vh;display:flex;flex-direction:column;box-shadow:var(--shadow);border:1px solid var(--c-border-light);color:var(--c-text)}
.modal.lg{width:720px}
.modal.xl{width:960px}
.modal-bd .sec-t{font-size:14px;font-weight:600;color:var(--c-text);margin:16px 0 12px;padding-bottom:8px;border-bottom:1px solid var(--c-border-light)}
.modal-bd .sec-t:first-child{margin-top:0}
.upload-box{border:1px dashed var(--c-border);border-radius:var(--radius-sm);padding:16px;text-align:center;color:var(--c-text-3);cursor:pointer;font-size:13px}
.upload-box:hover{border-color:var(--c-primary);color:var(--c-primary)}
.toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;flex-wrap:wrap;gap:12px}
.toolbar-r{display:flex;gap:8px;align-items:center}
.toolbar-left-cluster{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.tenant-toolbar-select{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.tenant-toolbar-label{font-size:13px;color:var(--c-text-2);white-space:nowrap}
.tenant-select{width:auto;min-width:240px}
.tenant-toolbar-hint{font-size:12px;color:var(--c-text-3)}
.modal-hd{padding:16px 20px;border-bottom:1px solid var(--c-border-light);display:flex;align-items:center;justify-content:space-between}
.modal-hd h3{margin:0;font-size:16px;font-weight:600}
.modal-x{background:none;border:none;font-size:20px;cursor:pointer;color:var(--c-text-3);padding:0;line-height:1}
.modal-bd{padding:20px;overflow-y:auto;flex:1}
.modal-ft{padding:12px 20px;border-top:1px solid var(--c-border-light);display:flex;justify-content:flex-end;gap:8px}
.drawer{position:fixed;top:0;right:-480px;width:480px;height:100vh;background:#fff;z-index:1;box-shadow:-8px 0 32px rgba(15,23,42,.12);transition:right .28s cubic-bezier(.22,1,.36,1);display:flex;flex-direction:column}
.drawer.drawer-wide{width:560px;right:-560px}
.drawer.drawer-panel{width:min(820px,96vw);right:calc(-1 * min(820px,96vw));border-left:1px solid rgba(0,0,0,.04)}
.drawer.open{right:0}
.drawer-hd,.drawer-ft{padding:16px 20px;border-bottom:1px solid var(--c-border-light)}
.drawer-ft{border-bottom:none;border-top:1px solid var(--c-border-light);margin-top:auto;display:flex;justify-content:flex-end;gap:8px}
.drawer-bd{padding:20px;overflow-y:auto;flex:1}
.overlay.drawer-ol{background:rgba(15,23,42,.28);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}

/* transfer picker */
.picker-field{display:flex;align-items:flex-start;gap:8px}
.var-bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:6px}
.var-bar-label{font-size:12px;color:var(--c-text-3);margin-right:2px}
.var-chip{font-size:12px;padding:2px 10px;height:26px;line-height:22px;border-radius:var(--radius-sm);cursor:pointer}
.var-chip:hover{border-color:var(--c-primary);color:var(--c-primary)}
.var-picker{margin-top:6px}
.var-picker-hd{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:6px}
.var-picker-hd .var-bar-label{margin-right:0}
.var-picker-hd .fs{width:auto;min-width:140px;height:28px;font-size:12px;padding:2px 8px}
.var-picker-chips{display:flex;flex-wrap:wrap;gap:6px}
.var-picker-hint{font-size:12px;color:var(--c-text-3);margin-top:4px;line-height:1.5}
.var-chip .var-mod{font-size:11px;color:var(--c-text-3);margin-left:4px}
.richtext-wrap{border:1px solid var(--c-border);border-radius:var(--radius-sm);background:#fff;overflow:hidden}
.richtext-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:2px;padding:6px 8px;border-bottom:1px solid var(--c-border-light);background:linear-gradient(180deg,#fafafa 0%,#f5f5f5 100%)}
.richtext-toolbar .rt-sep{width:1px;height:20px;background:var(--c-border-light);margin:0 4px}
.richtext-toolbar .rt-btn{min-width:28px;height:28px;padding:0 6px;border:1px solid transparent;border-radius:4px;background:transparent;color:var(--c-text-2);font-size:13px;cursor:pointer;line-height:1}
.richtext-toolbar .rt-btn:hover{background:#fff;border-color:var(--c-border);color:var(--c-text-1)}
.richtext-toolbar .rt-btn.is-muted{color:var(--c-text-3)}
.richtext-editor{min-height:200px;max-height:360px;overflow:auto;padding:12px 14px;font-size:14px;line-height:1.75;outline:none;color:var(--c-text-1)}
.richtext-editor:empty:before{content:attr(data-placeholder);color:var(--c-text-3)}
.richtext-editor ul{margin:8px 0 8px 20px}
.richtext-editor a{color:var(--c-primary)}
.fld-label-row{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.fld-label-row .fl{margin-bottom:0}
.var-insert-lk{font-size:13px;padding:0}
.var-help-tip{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;border:1px solid var(--c-border);color:var(--c-text-3);font-size:11px;cursor:help}
.tbl-ellipsis{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.send-log-meta{font-size:12px;line-height:1.6;color:var(--c-text-2)}
.send-log-meta-line{display:flex;gap:6px;min-width:0}
.send-log-meta-k{flex-shrink:0;color:var(--c-text-3)}
.send-log-meta-v{min-width:0}
.tbl.tbl-send-log td{white-space:normal;vertical-align:top}
.tbl.tbl-send-log .col-meta .send-log-meta{white-space:normal}
.fld-label-row .btn-lk{font-size:13px;cursor:pointer}
.tbl .col-ellipsis{max-width:180px}
.tbl .col-title{min-width:160px;max-width:240px}
.tbl .col-meta{min-width:140px;max-width:200px}
.send-scope-pickers{display:grid;gap:10px;margin-top:8px}
.send-scope-pickers.is-all-disabled{opacity:.45;pointer-events:none}
.send-scope-target{padding:10px 12px;border:1px dashed var(--c-border);border-radius:var(--radius-sm);background:var(--c-bg,#fafafa)}
.scope-mode-group{display:flex;flex-wrap:wrap;gap:12px 20px;margin-bottom:10px;padding:10px 12px;border:1px solid var(--c-border-light);border-radius:var(--radius-sm);background:var(--c-surface-muted)}
.scope-mode-item{margin:0}
.tpl-ch-cards{display:flex;flex-direction:column;gap:10px}
.tpl-ch-card{border:1px solid var(--c-border-light);border-radius:var(--radius-sm);background:#fff;overflow:hidden;transition:border-color .15s}
.tpl-ch-card.is-enabled{border-color:rgba(255,107,0,.4)}
.tpl-ch-hd{display:flex;align-items:center;gap:12px;padding:12px 14px;background:var(--c-surface-muted);cursor:pointer;user-select:none}
.tpl-ch-hd .opt-item{margin:0;flex-shrink:0}
.tpl-ch-name{flex:1;font-size:14px;font-weight:600;color:var(--c-text);display:inline-flex;align-items:center;gap:8px;min-width:0}
.tpl-ch-sub{font-size:12px;font-weight:400;color:var(--c-text-3);padding:1px 6px;border:1px solid var(--c-border-light);border-radius:4px;background:#fff}
.tpl-ch-meta{font-size:12px;color:var(--c-text-3);flex-shrink:0}
.tpl-ch-card.is-enabled .tpl-ch-meta{color:var(--c-primary)}
.tpl-ch-chevron{width:14px;height:14px;color:var(--c-text-3);transition:transform .15s;flex-shrink:0}
.tpl-ch-card.is-open .tpl-ch-chevron{transform:rotate(180deg)}
.tpl-ch-bd{display:none;padding:14px 16px 16px;border-top:1px solid var(--c-border-light)}
.tpl-ch-card.is-open .tpl-ch-bd{display:block}
.tpl-ch-card:not(.is-enabled) .tpl-ch-bd{opacity:.55}
.msg-channel-group .opt-item.is-disabled{color:var(--c-text-3)}
.picker-summary{flex:1;min-height:36px;padding:8px 10px;border:1px solid var(--c-border);border-radius:var(--radius-sm);background:var(--c-bg,#fafafa);font-size:13px;color:var(--c-text-2);line-height:1.5}
.picker-summary:empty::before{content:attr(data-empty);color:var(--c-text-3)}
.tag-input{width:100%}
.tag-input-box{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-height:36px;padding:6px 8px;border:1px solid var(--c-border);border-radius:var(--radius-sm);background:#fff;cursor:text}
.tag-input-box:focus-within{border-color:var(--c-primary);box-shadow:0 0 0 2px rgba(255,107,0,.12)}
.tag-input-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:var(--radius-sm);background:#f5f6f8;border:1px solid var(--c-border-light);font-size:12px;color:var(--c-text);line-height:20px;max-width:100%}
.tag-input-x{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;padding:0;border:0;background:transparent;color:var(--c-text-3);font-size:12px;line-height:1;cursor:pointer;border-radius:2px}
.tag-input-x:hover{color:var(--c-text);background:rgba(0,0,0,.06)}
.tag-input-edit{flex:1;min-width:140px;border:0;outline:none;padding:4px 2px;font-size:13px;background:transparent;color:var(--c-text)}
.tag-input-edit::placeholder{color:var(--c-text-3)}
.transfer-picker{display:grid;grid-template-columns:1fr 56px 1fr;gap:12px;min-height:360px}
.transfer-col{border:1px solid var(--c-border);border-radius:var(--radius-sm);display:flex;flex-direction:column;min-height:360px;overflow:hidden}
.transfer-col-hd{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--c-border-light);font-size:13px;font-weight:600}
.transfer-col-hd .btn-lk{margin-left:auto;font-weight:400}
.transfer-count{font-weight:400;color:var(--c-text-3);font-size:12px}
.transfer-col .fi{margin:8px 10px;width:auto}
.transfer-list{flex:1;overflow:auto;padding:4px 0}
.transfer-item{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--c-border-light)}
.transfer-item:hover{background:rgba(255,107,0,.04)}
.transfer-item.is-disabled{opacity:.55}
.transfer-item-main{display:flex;align-items:center;gap:8px;flex:1;cursor:pointer;min-width:0}
.transfer-list-hd{display:flex;align-items:center;gap:8px;padding:6px 12px;border-bottom:1px solid var(--c-border-light);background:var(--c-surface-muted);position:sticky;top:0;z-index:1}
.transfer-hd-check{width:16px;flex-shrink:0}
.transfer-hd-act{width:36px;flex-shrink:0}
.transfer-item-cols{display:flex;align-items:center;gap:8px;flex:1;min-width:0}
.transfer-col-cell{font-size:12px;color:var(--c-text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.transfer-col-title{font-size:13px;color:var(--c-text);font-weight:500}
.transfer-col-hd-cell{font-size:12px;color:var(--c-text-3);font-weight:500}
.transfer-item .tp-remove{flex-shrink:0}
.transfer-mid{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--c-text-3)}
.transfer-arrow{font-size:20px;color:var(--c-primary)}
.transfer-mid-tip{font-size:12px;text-align:center;margin:0}
.transfer-pager{display:flex;align-items:center;justify-content:center;gap:8px;padding:8px;border-top:1px solid var(--c-border-light);font-size:12px;color:var(--c-text-3)}
.transfer-empty{padding:24px 12px;text-align:center;color:var(--c-text-3);font-size:13px}
.transfer-hint{font-size:12px;color:var(--c-text-3);margin:12px 0 0}
@media(max-width:900px){.transfer-picker{grid-template-columns:1fr;min-height:auto}.transfer-mid{flex-direction:row;padding:4px 0}}

/* toast */
.toast-w{position:fixed;top:16px;left:50%;transform:translateX(-50%);z-index:200;display:flex;flex-direction:column;gap:8px}
.toast{padding:10px 20px;border-radius:var(--radius-sm);font-size:14px;color:#fff;box-shadow:0 4px 12px rgba(0,0,0,.15);animation:ti .3s}
.toast-ok{background:var(--c-success)}
.toast-err{background:var(--c-danger)}
.toast-info{background:var(--c-info)}
.toast-warn{background:var(--c-warning)}
@keyframes ti{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}

/* login */
.login-wrap{min-height:100vh;display:flex}
.login-l{flex:0 0 48%;max-width:560px;background:linear-gradient(160deg,#ff6b00 0%,#ff8c33 18%,#e8ecf2 55%,#dde3ec 100%);color:var(--c-text);padding:48px 40px;display:flex;flex-direction:column;position:relative;overflow:hidden}
.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:40px;position:relative;z-index:1}
.login-logo-diamond{width:28px;height:28px;background:var(--c-primary);transform:rotate(45deg);border-radius:5px;flex-shrink:0;box-shadow:0 2px 8px rgba(255,107,0,.3)}
.login-brand>span{font-size:18px;font-weight:600;color:var(--c-text)}
.login-features{list-style:none;margin:0 0 32px;padding:0;position:relative;z-index:1}
.login-features li{display:flex;gap:14px;margin-bottom:24px}
.login-feat-ic{width:40px;height:40px;border-radius:10px;background:rgba(255,255,255,.85);flex-shrink:0;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.06)}
.login-feat-ic::after{content:'';width:20px;height:20px;background:var(--c-primary);mask-size:contain;mask-repeat:no-repeat;mask-position:center;-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center}
.login-feat-ic.shield::after{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4z'/%3E%3C/svg%3E")}
.login-feat-ic.door::after{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M19 19V5c0-1.1-.9-2-2-2H7c-1.1 0-2 .9-2 2v14H3v2h18v-2h-2zm-8-7c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M19 19V5c0-1.1-.9-2-2-2H7c-1.1 0-2 .9-2 2v14H3v2h18v-2h-2zm-8-7c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1z'/%3E%3C/svg%3E")}
.login-feat-ic.gear::after{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z'/%3E%3C/svg%3E")}
.login-features strong{display:block;font-size:15px;font-weight:600;margin-bottom:4px;color:var(--c-text)}
.login-features p{margin:0;font-size:13px;color:var(--c-text-2);line-height:1.6}
.login-illus{flex:1;min-height:180px;position:relative;z-index:1;display:flex;align-items:flex-end}
.login-illus-inner{width:100%;height:200px;background:linear-gradient(180deg,transparent,rgba(255,255,255,.3));border-radius:12px;position:relative}
.login-illus-inner::before{content:'';position:absolute;bottom:20px;left:50%;transform:translateX(-50%);width:120px;height:120px;background:linear-gradient(135deg,#ffb347,#ff6b00);border-radius:16px;opacity:.6;box-shadow:0 8px 32px rgba(255,107,0,.25)}
.login-illus-inner::after{content:'';position:absolute;bottom:60px;left:20%;width:60px;height:60px;background:rgba(255,255,255,.7);border-radius:8px;box-shadow:0 4px 16px rgba(0,0,0,.08)}
.login-r{flex:1;display:flex;align-items:center;justify-content:center;background:#fff;padding:40px;position:relative;overflow:hidden}
.login-blob{position:absolute;border-radius:50%;pointer-events:none}
.login-blob-tl{top:-80px;left:-80px;width:200px;height:200px;background:radial-gradient(circle,rgba(255,107,0,.12) 0%,transparent 70%)}
.login-blob-br{bottom:-60px;right:-60px;width:180px;height:180px;background:radial-gradient(circle,rgba(255,107,0,.08) 0%,transparent 70%)}
.login-box{width:400px;max-width:100%;position:relative;z-index:1}
.login-box h2{font-size:28px;font-weight:600;margin:0 0 8px;color:var(--c-text)}
.login-subtitle{margin:0 0 28px;font-size:14px;color:var(--c-text-3);line-height:1.5}
.login-field{position:relative}
.login-field .fi{width:100%;padding-left:40px}
.login-field-ic{position:absolute;left:12px;top:50%;transform:translateY(-50%);width:16px;height:16px;background:var(--c-text-3);mask-size:contain;mask-repeat:no-repeat;mask-position:center;-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;pointer-events:none}
.login-field-ic.user{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E")}
.login-field-ic.lock{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3E%3Cpath d='M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z'/%3E%3C/svg%3E")}
.login-tabs{display:flex;flex-wrap:wrap;gap:0;margin-bottom:28px;border-bottom:1px solid var(--c-border)}
.login-tab{padding:10px 0;margin-right:16px;cursor:pointer;font-size:13px;color:var(--c-text-3);border-bottom:2px solid transparent;margin-bottom:-1px;transition:.15s;white-space:nowrap}
.login-tab.on{color:var(--c-primary);border-bottom-color:var(--c-primary);font-weight:500}
.login-tab:hover{color:var(--c-primary)}
.login-extra{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;font-size:13px;color:var(--c-text-2)}
.login-pane{min-height:180px}
.login-more{margin-top:28px;padding-top:4px}
.login-divider{display:flex;align-items:center;gap:12px;margin:0 0 20px;font-size:13px;color:var(--c-text-3)}
.login-divider::before,.login-divider::after{content:'';flex:1;height:1px;background:var(--c-border)}
.login-sso-btn{width:100%;padding:9px;margin-bottom:20px;border-color:var(--c-border);color:var(--c-text);font-size:14px}
.login-sso-btn:hover{border-color:var(--c-primary);color:var(--c-primary)}
.login-oauth-row{display:flex;justify-content:center;gap:40px}
.login-oauth-item{display:flex;flex-direction:column;align-items:center;gap:8px;cursor:pointer;font-size:12px;color:var(--c-text-3)}
.login-oauth-item:hover{color:var(--c-text-2)}
.login-oauth-ic{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;color:#fff;transition:transform .15s,box-shadow .15s}
.login-oauth-item:hover .login-oauth-ic{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.12)}
.login-oauth-ic.ding{background:#0089ff}
.login-oauth-ic.feishu{background:#3370ff}
.login-oauth-ic.wecom{background:#07c160}
.btn-login{width:100%;padding:10px 16px;font-size:15px;font-weight:500;color:#fff;background:var(--c-primary-grad);border:none;border-radius:var(--radius);cursor:pointer;transition:opacity .15s}
.btn-login:hover{opacity:.92}
.login-pwd-toggle{position:relative}
.login-pwd-toggle .fi{padding-right:48px}
.login-pwd-toggle .pwd-eye{position:absolute;right:12px;top:50%;transform:translateY(-50%);font-size:12px;color:var(--c-text-3);cursor:pointer;user-select:none}
.login-footer{margin-top:28px;text-align:center;font-size:12px;color:var(--c-text-3)}
.login-footer a{color:var(--c-text-3);margin:0 4px}
.login-icp{margin-top:12px;font-size:12px;color:var(--c-text-3)}
.login-alert{display:none;padding:10px 12px;border-radius:4px;font-size:13px;margin-bottom:16px;line-height:1.5}
.login-alert.show{display:block}
.login-alert.err{background:#fff2f0;border:1px solid #ffccc7;color:var(--c-danger)}
.login-alert.warn{background:#fffbe6;border:1px solid #ffe58f;color:#d48806}
.login-alert.info{background:#e6f4ff;border:1px solid #91caff;color:var(--c-info)}
.login-captcha{display:none;margin-bottom:12px}
.login-captcha.show{display:block}
.captcha-row{display:flex;gap:8px;align-items:center}
.captcha-img{width:100px;height:36px;background:linear-gradient(135deg,#f0f2f5,#e4e7ed);border:1px solid var(--c-border);border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:18px;letter-spacing:4px;font-weight:600;color:var(--c-text-2);cursor:pointer;user-select:none;font-family:monospace}
.qr-box{text-align:center;padding:8px 0}
.qr-frame{width:200px;height:200px;margin:0 auto 16px;border:1px solid var(--c-border);border-radius:8px;display:flex;align-items:center;justify-content:center;background:var(--c-surface-muted);position:relative}
.qr-frame canvas,.qr-frame .qr-mock{width:180px;height:180px}
.qr-mock{background:repeating-linear-gradient(45deg,#333,#333 2px,transparent 2px,transparent 8px),repeating-linear-gradient(-45deg,#333,#333 2px,transparent 2px,transparent 8px);opacity:.85}
.qr-expired{position:absolute;inset:0;background:rgba(255,255,255,.92);display:none;align-items:center;justify-content:center;flex-direction:column;gap:8px;border-radius:8px}
.qr-expired.show{display:flex}
.bind-layout{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.bind-guide{background:var(--c-bg);padding:16px;border-radius:4px;font-size:13px;color:var(--c-text-2);line-height:1.8}
.bind-guide h4{margin:0 0 8px;font-size:14px;color:var(--c-text)}
.idp-loading{text-align:center;padding:24px}
.idp-loading .spinner{width:32px;height:32px;border:3px solid var(--c-border);border-top-color:var(--c-primary);border-radius:50%;margin:0 auto 12px;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.pwd-policy-box{background:var(--c-bg);padding:12px 16px;border-radius:var(--radius-sm);margin-bottom:16px;font-size:12px;color:var(--c-text-2)}
.pwd-policy-list{margin:0;padding-left:18px;line-height:1.8}
.login-demo{margin-top:16px;padding-top:12px;border-top:1px dashed var(--c-border-light);font-size:12px;color:var(--c-text-3)}
.login-demo a{color:var(--c-info);cursor:pointer;margin-right:12px}
.login-register{margin-top:20px;text-align:center;font-size:13px;color:var(--c-text-3)}
.login-register a{color:var(--c-primary);font-weight:500;margin-left:4px}

/* register / config helpers */
.reg-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(160deg,#f7f8fa,#eef1f6);padding:40px 20px}
.reg-card{width:640px;max-width:100%;background:#fff;border-radius:12px;box-shadow:0 4px 24px rgba(0,0,0,.08);padding:32px 40px;border:1px solid var(--c-border-light)}
.reg-hd{margin-bottom:24px}
.reg-hd h1{margin:8px 0 8px;font-size:22px;font-weight:600}
.reg-hd p{margin:0;font-size:13px;color:var(--c-text-3)}
.reg-back{font-size:13px;color:var(--c-text-3)}
.reg-tip{font-size:12px;color:var(--c-text-3);margin:12px 0 0;line-height:1.6}
.color-picker-row{display:flex;align-items:center;gap:8px}
.fi-color{width:40px;height:36px;padding:2px;border:1px solid var(--c-border);border-radius:var(--radius-sm);cursor:pointer;flex-shrink:0}
.color-swatch{width:36px;height:36px;border-radius:var(--radius-sm);border:1px solid var(--c-border);flex-shrink:0}
.import-panel{padding:16px;border:1px solid var(--c-border-light);border-radius:var(--radius);background:var(--c-surface-muted)}
.tenant-ctx{padding:12px 16px;margin-bottom:16px}
.tenant-ctx-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.tenant-ctx .fl{margin:0;white-space:nowrap;width:auto}
.tenant-select{width:260px;flex-shrink:0}
.tenant-ctx-hint{font-size:12px;color:var(--c-text-3);flex:1}

/* org tree-table */
.ttbl{font-size:13px}
.ttbl th{font-size:13px}
.ttbl .tree-cell{white-space:nowrap}
.ttbl .tree-toggle{cursor:pointer;color:var(--c-text-3);width:18px;display:inline-block;text-align:center;user-select:none;font-size:12px}
.ttbl .tree-ic{display:inline-block;width:14px;height:14px;background:var(--c-primary);opacity:.45;border-radius:2px;vertical-align:middle;margin:0 4px}
.org-src{display:inline-block;font-size:12px;padding:2px 8px;border-radius:4px;line-height:1.4;white-space:nowrap}
.org-src-ehr{background:#f0f5ff;color:#2f54eb}
.org-src-local{background:#fff7e6;color:#d46b08}
.org-tenant-view .pgnt{padding:12px 16px;font-size:13px;color:var(--c-text-3)}
.user-group-row td{background:var(--c-surface-muted);font-size:13px;padding:10px 12px;border-bottom:1px solid var(--c-border-light)}
/* 工作台：左侧「当前租户 + 树」右对齐资源名称列宽；树限高 */
.scope-workbench{display:grid;grid-template-columns:220px 1fr;gap:12px;align-items:start;min-height:360px}
.scope-nav{display:flex;flex-direction:column;gap:8px;min-width:0;width:220px}
.scope-nav .tenant-toolbar-select{width:100%;margin:0;flex-wrap:nowrap}
.scope-nav .tenant-toolbar-label{flex-shrink:0}
.scope-nav .tenant-select,.scope-nav .fs.tenant-select{flex:1;min-width:0;width:auto;max-width:100%}
.scope-nav-tree{border:1px solid var(--c-border);border-radius:var(--radius-sm);overflow:hidden;max-height:min(520px,calc(100vh - 280px));display:flex;flex-direction:column}
.scope-nav-tree .role-perm-apps-hd{flex-shrink:0}
.scope-nav-tree .res-tenant-apps,.scope-nav-tree .user-org-tree{flex:1;overflow:auto;min-height:0;max-height:none}
.user-name-cell{display:flex;align-items:center;gap:8px;min-width:0}
.user-name-avatar{width:28px;height:28px;border-radius:50%;flex-shrink:0;object-fit:cover}
.user-name-avatar.act-avatar{display:inline-flex;align-items:center;justify-content:center;font-size:12px;margin:0}
.user-name-meta{display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-width:0}
.user-name-text{line-height:1.3;white-space:nowrap}
.scope-main{min-width:0}
.user-top-wrap{margin-bottom:12px}
/* 与标准 qb 查询行一致：无灰底、三列等分 */
.res-scope-bar.user-top-bar,
.user-top-bar{display:flex;align-items:center;gap:16px;flex-wrap:nowrap;margin-bottom:0;padding:0;background:transparent;border:none;border-radius:0}
.user-top-query{flex:1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;min-width:0;align-items:center}
.user-top-query .fg-h{margin:0;min-width:0}
.user-top-query .fi,
.user-top-query .fs,
.user-top-query .res-scope-search,
.user-top-query .res-scope-perm,
.user-top-query .res-scope-type{width:100%;min-width:0}
.user-top-actions{flex-shrink:0;display:flex;align-items:center;gap:8px;margin-left:auto}
.user-top-extra{margin-top:12px;padding:0;background:transparent;border:none;border-radius:0}
.user-org-node{display:flex;align-items:center;gap:6px;padding:8px 12px;font-size:13px;cursor:pointer;border-bottom:1px solid var(--c-border-light);color:var(--c-text-1);text-decoration:none}
.user-org-node:hover{background:var(--c-surface-hover)}
.user-org-node.on{background:var(--c-accent-soft);color:var(--c-primary);font-weight:500}
.user-org-node .user-org-name{flex:1;min-width:0}
.user-org-node .tree-toggle{width:14px;flex-shrink:0;font-size:10px;color:var(--c-text-3);text-align:center;cursor:pointer}
.user-org-node .tree-toggle.empty{opacity:.35;cursor:default}
.user-org-empty{padding:16px 12px;font-size:13px;color:var(--c-text-3)}
.user-tbl-wrap{max-height:480px;overflow:auto}
.res-table-toolbar-meta{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}
.org-tenant-row{background:#fafbfc}
.org-tenant-row td{border-bottom:1px solid #e8ecf0}
.org-tenant-row .org-tenant-name{margin-left:6px}
.org-tenant-row .org-tenant-id{font-size:12px;color:var(--c-text-3);margin-left:8px}
.org-parent-row{background:#f5f8fc}
.org-parent-row .org-parent-name{margin-left:6px}
.org-tree-tbl .org-trow.res-hidden{display:none}
.scope-ctx-bar .btn.on{background:var(--c-primary);color:#fff;border-color:var(--c-primary)}
.subapp-ctx-panel{display:none}
.subapp-ctx-panel.on{display:block}
.org-inline-pick{position:relative}
.fi.org-pick-trigger[readonly]{cursor:pointer;background:var(--c-input-bg);color:var(--c-text);border-color:var(--c-border)}
.fi.org-pick-trigger[readonly]:hover{border-color:#91caff}
.fi.org-pick-trigger[readonly]:focus{border-color:var(--c-primary);box-shadow:0 0 0 2px rgba(255,107,0,.15)}
.org-inline-pick.is-locked .fi.org-pick-trigger[readonly]{cursor:default;background:#f5f5f5;color:var(--c-text-2);border-color:var(--c-border-light)}
.org-inline-pick.is-locked .fi.org-pick-trigger[readonly]:hover,
.org-inline-pick.is-locked .fi.org-pick-trigger[readonly]:focus{border-color:var(--c-border-light);box-shadow:none}
.org-inline-panel{display:none;position:absolute;left:0;right:0;top:calc(100% + 4px);z-index:40;border:1px solid var(--c-border);border-radius:6px;background:var(--c-bg-card);padding:10px 12px;box-shadow:var(--shadow)}
.org-inline-panel.is-open{display:block}
.org-inline-panel-hd{display:flex;gap:12px;align-items:center;margin-bottom:8px}
.org-inline-panel-hd .fi{flex:1;max-width:280px;background:var(--c-input-bg)}
.org-inline-allow{font-size:12px;color:var(--c-text-3);white-space:nowrap}
.org-inline-panel .tbl-wrap{max-height:240px;overflow:auto;background:#fff;border:1px solid #eef0f3;border-radius:4px}
.org-inline-panel .pgnt{margin-top:8px;padding:0}
.org-cfg-root-panel{border:1px solid #eef0f3;border-radius:4px;background:#fff;padding:10px 12px}
.org-cfg-root-hd{display:flex;gap:12px;align-items:center;margin-bottom:8px}
.org-cfg-root-hd .fi{flex:1;max-width:280px}
.org-cfg-root-hint{font-size:12px;color:var(--c-text-3);white-space:nowrap}
.org-cfg-root-wrap{max-height:240px;overflow:auto;background:#fff;border:1px solid #eef0f3;border-radius:4px}
.org-cfg-root-tbl td{white-space:nowrap;max-width:none;overflow:visible;text-overflow:clip}
.org-cfg-root-label{display:flex;align-items:center;gap:6px;cursor:pointer;margin:0;font-weight:400}
.org-cfg-root-cb{flex-shrink:0;margin:0}
.org-cfg-root-name{color:var(--c-text)}
.org-cfg-root-meta{font-size:12px;color:var(--c-text-3);margin-left:4px}
.org-cfg-root-tbl .tree-toggle{cursor:pointer;display:inline-block;width:16px;text-align:center;color:var(--c-text-3);user-select:none;flex-shrink:0}
.org-cfg-root-tbl .tree-toggle-ph{width:16px;display:inline-block;flex-shrink:0}
.org-cfg-root-tbl .org-cfg-root-row.res-hidden{display:none}
.org-cfg-root-tbl .org-cfg-root-row.res-filtered-out{display:none}
.org-cfg-root-tip{font-size:12px;color:var(--c-text-3);margin:6px 0 0}
.org-pp-row{cursor:pointer}
.org-pp-row:hover{background:#f5faff}
.org-ops-wrap{position:relative;display:inline-block;vertical-align:middle}
.org-ops-trigger{width:32px;height:32px;border:1px solid #d9e8ff;background:#fff;border-radius:4px;cursor:pointer;color:var(--c-primary);font-size:20px;line-height:30px;padding:0;letter-spacing:1px}
.org-ops-trigger:hover{background:#f0f7ff;border-color:#91caff}
.org-ops-menu{display:none;position:absolute;right:0;top:calc(100% + 4px);min-width:180px;background:#fff;border:1px solid #e8e8e8;border-radius:4px;box-shadow:0 6px 16px rgba(0,0,0,.12);z-index:300;padding:4px 0}
.org-ops-wrap.open .org-ops-menu{display:block}
.org-ops-wrap.drop-up .org-ops-menu{top:auto;bottom:calc(100% + 4px)}
.org-ops-item{display:flex;align-items:center;gap:10px;width:100%;padding:9px 16px;border:none;background:transparent;font-size:13px;color:#1677ff;cursor:pointer;text-align:left;white-space:nowrap}
.org-ops-item:hover{background:#f0f7ff}
.org-ops-item.del{color:var(--c-danger)}
.org-ops-ic{width:16px;height:16px;flex-shrink:0;display:inline-block;background:currentColor;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}
.org-ic-pause{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='6.5' fill='none' stroke='black' stroke-width='1.2'/%3E%3Cpath d='M6.5 5.5v5M9.5 5.5v5' stroke='black' stroke-width='1.4' stroke-linecap='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='6.5' fill='none' stroke='black' stroke-width='1.2'/%3E%3Cpath d='M6.5 5.5v5M9.5 5.5v5' stroke='black' stroke-width='1.4' stroke-linecap='round'/%3E%3C/svg%3E")}
.org-ic-sibling{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect x='1.5' y='6' width='5' height='4' rx='.8' fill='black'/%3E%3Crect x='9.5' y='6' width='5' height='4' rx='.8' fill='black'/%3E%3Cpath d='M6.5 8h3' stroke='black' stroke-width='1.2'/%3E%3Cpath d='M11 4.5v2M13 5.5h-4' stroke='black' stroke-width='1.1' stroke-linecap='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect x='1.5' y='6' width='5' height='4' rx='.8' fill='black'/%3E%3Crect x='9.5' y='6' width='5' height='4' rx='.8' fill='black'/%3E%3Cpath d='M6.5 8h3' stroke='black' stroke-width='1.2'/%3E%3Cpath d='M11 4.5v2M13 5.5h-4' stroke='black' stroke-width='1.1' stroke-linecap='round'/%3E%3C/svg%3E")}
.org-ic-child{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect x='5.5' y='2' width='5' height='4' rx='.8' fill='black'/%3E%3Crect x='5.5' y='10' width='5' height='4' rx='.8' fill='black'/%3E%3Cpath d='M8 6v4' stroke='black' stroke-width='1.2'/%3E%3Cpath d='M10.5 11.5h2v2' stroke='black' stroke-width='1.1' stroke-linecap='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect x='5.5' y='2' width='5' height='4' rx='.8' fill='black'/%3E%3Crect x='5.5' y='10' width='5' height='4' rx='.8' fill='black'/%3E%3Cpath d='M8 6v4' stroke='black' stroke-width='1.2'/%3E%3Cpath d='M10.5 11.5h2v2' stroke='black' stroke-width='1.1' stroke-linecap='round'/%3E%3C/svg%3E")}
.org-ic-copy{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect x='5' y='5' width='7' height='8' rx='.8' fill='none' stroke='black' stroke-width='1.2'/%3E%3Crect x='3' y='3' width='7' height='8' rx='.8' fill='black' opacity='.35'/%3E%3Cpath d='M11.5 2.5h2v2M12.5 1.5v4' stroke='black' stroke-width='1.1' stroke-linecap='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect x='5' y='5' width='7' height='8' rx='.8' fill='none' stroke='black' stroke-width='1.2'/%3E%3Crect x='3' y='3' width='7' height='8' rx='.8' fill='black' opacity='.35'/%3E%3Cpath d='M11.5 2.5h2v2M12.5 1.5v4' stroke='black' stroke-width='1.1' stroke-linecap='round'/%3E%3C/svg%3E")}
.org-ic-change{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M11.5 2.5a4 4 0 1 1-2.2 7.2L8 11.5' fill='none' stroke='black' stroke-width='1.2' stroke-linecap='round'/%3E%3Cpath d='M8 11.5H5.5V9' stroke='black' stroke-width='1.2' stroke-linecap='round'/%3E%3Cpath d='M4.5 13.5a4 4 0 1 1 2.2-7.2L8 4.5' fill='none' stroke='black' stroke-width='1.2' stroke-linecap='round'/%3E%3Cpath d='M8 4.5h2.5V7' stroke='black' stroke-width='1.2' stroke-linecap='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M11.5 2.5a4 4 0 1 1-2.2 7.2L8 11.5' fill='none' stroke='black' stroke-width='1.2' stroke-linecap='round'/%3E%3Cpath d='M8 11.5H5.5V9' stroke='black' stroke-width='1.2' stroke-linecap='round'/%3E%3Cpath d='M4.5 13.5a4 4 0 1 1 2.2-7.2L8 4.5' fill='none' stroke='black' stroke-width='1.2' stroke-linecap='round'/%3E%3Cpath d='M8 4.5h2.5V7' stroke='black' stroke-width='1.2' stroke-linecap='round'/%3E%3C/svg%3E")}
.org-ic-del{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 4.5h9M6 4.5V3.5h4v1M5 4.5v8h6v-8' fill='none' stroke='black' stroke-width='1.2' stroke-linecap='round'/%3E%3Cpath d='M6.5 7v4M9.5 7v4' stroke='black' stroke-width='1.1' stroke-linecap='round'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 4.5h9M6 4.5V3.5h4v1M5 4.5v8h6v-8' fill='none' stroke='black' stroke-width='1.2' stroke-linecap='round'/%3E%3Cpath d='M6.5 7v4M9.5 7v4' stroke='black' stroke-width='1.1' stroke-linecap='round'/%3E%3C/svg%3E")}
.ttbl .ops-more{cursor:pointer;color:var(--c-text-3);letter-spacing:2px;padding:0 4px}
.detail-back{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--c-text-2);margin-bottom:16px;text-decoration:none}
.detail-back:hover{color:var(--c-primary)}
.detail-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid var(--c-border-light)}
.detail-hd h2{margin:0;font-size:18px;font-weight:600}
.msg-detail-hd{margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid var(--c-border-light)}
.msg-detail-panel{padding:4px 0}
.msg-detail-hero{margin-bottom:16px}
.msg-detail-title{margin:0 0 6px;font-size:20px;font-weight:600;line-height:1.4;color:var(--c-text)}
.msg-detail-hero-time{font-size:13px;color:var(--c-text-3)}
.msg-detail-hd-meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.msg-detail-time{font-size:13px;color:var(--c-text-3)}
.msg-detail-highlights{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:20px}
.msg-hl-card{padding:12px 14px;background:#fafbfc;border:1px solid var(--c-border-light);border-radius:var(--radius-sm)}
.msg-hl-card-em{background:#f0f7ff;border-color:#91caff}
.msg-hl-card-warn{background:#fff7e6;border-color:#ffd591}
.msg-hl-card-err{background:#fff2f0;border-color:#ffccc7}
.msg-hl-label{font-size:12px;color:var(--c-text-3);margin-bottom:6px}
.msg-hl-val{font-size:18px;font-weight:600;color:var(--c-text);line-height:1.3}
.msg-hl-val .st{font-size:14px;font-weight:500}
.msg-hl-val .tag{font-size:12px;font-weight:500}
.msg-delivery-sec{margin-top:4px}
.msg-delivery-tbl td.ops a{margin-right:0}
.msg-detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 20px;margin-bottom:20px;padding:14px 16px;background:var(--c-surface-muted);border:1px solid var(--c-border-light);border-radius:var(--radius-sm)}
.msg-detail-cell label{font-size:12px;color:var(--c-text-3);display:block;margin-bottom:4px}
.msg-detail-cell span{font-size:14px;color:var(--c-text);word-break:break-word}
.msg-detail-cell.span-2{grid-column:span 2}
.msg-detail-body-sec{margin-bottom:0}
.msg-detail-sec{margin-bottom:20px}
.msg-detail-sec:last-child{margin-bottom:0}
.msg-detail-sec-t{margin:0 0 10px;font-size:14px;font-weight:600;color:var(--c-text)}
.msg-detail-kv{grid-template-columns:1fr 1fr}
.msg-detail-content{padding:14px 16px;font-size:14px;line-height:1.75;color:var(--c-text-2);white-space:pre-wrap;word-break:break-word;background:#fff;border:1px solid var(--c-border-light);border-radius:var(--radius-sm)}
.msg-detail-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px}
.msg-detail-alert{margin-top:12px;padding:12px 14px;background:#fff2f0;border:1px solid #ffccc7;border-radius:var(--radius-sm);font-size:13px;color:var(--c-danger);line-height:1.6}
.msg-detail-alert::before{content:'失败原因：';font-weight:600}
.msg-detail-extra-meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.msg-ai-quiz-list{display:flex;flex-direction:column;gap:14px}
.msg-ai-quiz-item{padding:12px 14px;border:1px solid var(--c-border-light);border-radius:var(--radius-sm);background:#fff}
.msg-ai-quiz-q{font-size:14px;font-weight:600;color:var(--c-text);margin-bottom:10px}
.msg-ai-quiz-opts{display:flex;flex-direction:column;gap:8px}
.msg-ai-quiz-opt{font-size:13px;color:var(--c-text-2)}
.msg-detail-ft .btn[disabled],#msg-detail-modal-ft .btn[disabled]{opacity:.55;cursor:not-allowed}
.msg-detail-ft-inline{display:flex;gap:8px;flex-wrap:wrap;margin-top:16px}
.msg-detail-modal .modal-bd{max-height:70vh;overflow-y:auto}
.tr-scenario-vars{display:flex;flex-wrap:wrap;gap:8px;padding:10px 12px;background:var(--c-surface-muted);border:1px solid var(--c-border-light);border-radius:var(--radius-sm);min-height:44px}
.tr-var-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;font-size:13px;color:var(--c-text);background:#fff;border:1px solid var(--c-border);border-radius:var(--radius-sm);cursor:pointer}
.tr-var-chip:hover,.tr-var-chip.on{border-color:var(--c-primary);color:var(--c-primary)}
.tr-var-chip code{font-size:12px;color:var(--c-text-3)}
.tr-var-chip.on code{color:var(--c-primary)}
.tr-var-empty{font-size:13px;color:var(--c-text-3)}
@media(max-width:720px){.msg-detail-highlights{grid-template-columns:repeat(2,1fr)}}
.msg-detail-modal .modal-bd{padding-top:8px}
.msg-detail-panel{display:flex;flex-direction:column;gap:16px}
.msg-detail-hero{padding-bottom:4px}
.msg-detail-hero .msg-detail-title{margin-bottom:8px}
.msg-detail-hero-time{font-size:13px;color:var(--c-text-3)}
.msg-detail-highlights{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.msg-hl-card{padding:12px 14px;background:#fafbfc;border:1px solid var(--c-border-light);border-radius:var(--radius-sm)}
.msg-hl-card-em{background:linear-gradient(180deg,#f0f7ff 0%,#fafbfc 100%);border-color:#d6e8ff}
.msg-hl-card-warn{background:#fffbe6;border-color:#ffe58f}
.msg-hl-card-err{background:#fff2f0;border-color:#ffccc7}
.msg-hl-label{font-size:12px;color:var(--c-text-3);margin-bottom:6px}
.msg-hl-val{font-size:18px;font-weight:600;color:var(--c-text);line-height:1.3}
.msg-hl-val .st{font-size:14px;font-weight:500}
.msg-hl-val-sm{font-size:14px;font-weight:500;line-height:1.5}
.msg-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 20px;padding:14px 16px;background:#fafbfc;border:1px solid var(--c-border-light);border-radius:var(--radius-sm)}
.msg-detail-cell label{display:block;font-size:12px;color:var(--c-text-3);margin-bottom:4px}
.msg-detail-cell span{font-size:14px;color:var(--c-text);line-height:1.5;word-break:break-word}
.msg-detail-cell.span-2{grid-column:span 2}
.msg-detail-body-sec{padding:14px 16px;background:#fff;border:1px solid var(--c-border-light);border-radius:var(--radius-sm)}
.msg-detail-body-sec .msg-detail-sec-t{margin-bottom:10px}
.msg-detail-alert{margin:0;padding:10px 12px;border-radius:var(--radius-sm);font-size:13px;line-height:1.6;color:var(--c-text-2)}
.msg-detail-alert-warn{background:#fff7e6;border:1px solid #ffd591}
.msg-detail-alert-err{background:#fff2f0;border:1px solid #ffccc7}
.msg-channel-chips{display:flex;flex-wrap:wrap;gap:6px}
.msg-channel-chip{display:inline-block;padding:2px 8px;font-size:12px;color:var(--c-text-2);background:#fff;border:1px solid var(--c-border);border-radius:999px}
.send-log-channels{display:flex;flex-wrap:wrap;gap:4px;max-width:168px}
.tbl-send-log .send-log-channels .msg-channel-chip{padding:1px 6px;font-size:11px;line-height:18px;border-radius:4px;background:#f7f8fa;border-color:var(--c-border-light);color:var(--c-text-2)}
.send-log-source{display:flex;flex-direction:column;gap:2px;min-width:0;max-width:168px;line-height:1.35}
.send-log-source-name{font-size:13px;color:var(--c-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.send-log-source-meta{font-size:12px;color:var(--c-text-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tbl-send-log .col-channels{width:140px;vertical-align:middle}
.tbl-send-log .col-source{width:150px;vertical-align:middle}
.tbl-trigger-rule .col-tr-tenant{width:120px;vertical-align:middle}
.tbl-trigger-rule .col-tr-notify{width:168px;vertical-align:middle}
.tr-notify-targets-readonly{padding:8px 0}
.tr-notify-targets-cell{display:flex;flex-wrap:wrap;gap:6px}
.tr-notify-targets-cell .msg-channel-chip{padding:2px 8px;font-size:12px;line-height:20px;border-radius:4px;background:#f7f8fa;border:1px solid var(--c-border-light);color:var(--c-text-2);cursor:default}
.tr-role-chips{display:flex;flex-wrap:wrap;gap:4px;max-width:168px}
.tbl-trigger-rule .tr-role-chips .msg-channel-chip{padding:1px 6px;font-size:11px;line-height:18px;border-radius:4px;background:#f7f8fa;border-color:var(--c-border-light);color:var(--c-text-2)}
.tr-notify-fixed{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.tr-notify-fixed-tag{margin-left:2px}
.tr-notify-meta .kv-i label{font-size:12px}
.tr-escalation-demo{display:flex;flex-direction:column;gap:8px;padding:10px 12px;background:var(--c-surface-muted);border:1px dashed var(--c-border);border-radius:var(--radius-sm)}
.tr-escalation-step{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:13px}
.tr-escalation-time{display:inline-block;min-width:72px;font-size:12px;color:var(--c-text-3)}
.detail-actions{display:flex;gap:8px;align-items:center;flex-shrink:0}
.detail-ft{display:flex;justify-content:flex-end;gap:8px;padding:16px 0 0;margin-top:4px;border-top:1px solid var(--c-border-light)}
.card-ft{display:flex;justify-content:flex-end;gap:8px;padding-top:16px;margin-top:16px;border-top:1px solid var(--c-border-light)}
.detail-pending-banner{padding:12px 16px;margin-bottom:16px;background:#fff7e6;border:1px solid #ffd591;border-radius:var(--radius-sm)}
.detail-pending-banner p{margin:0;font-size:13px;color:var(--c-text-2)}
.field-readonly{min-height:36px;padding:8px 12px;font-size:14px;line-height:20px;border-radius:var(--radius-sm)}
.opt-group{display:flex;flex-wrap:wrap;gap:12px 20px;padding:10px 12px;border:1px solid var(--c-border-light);border-radius:var(--radius-sm);background:var(--c-surface-muted)}
.opt-item{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--c-text);cursor:pointer;user-select:none}
.opt-item input{margin:0;cursor:pointer}
.opt-radio-group .opt-item{margin-right:4px}
.exc-summary{margin-bottom:16px;padding:12px;background:var(--c-surface-muted);border:1px solid var(--c-border-light);border-radius:var(--radius-sm)}
.exc-summary p{margin:6px 0 0;font-size:13px;color:var(--c-text)}
.exc-handle-panel{margin-bottom:16px;padding:12px;background:var(--c-surface-muted);border:1px solid var(--c-border-light);border-radius:var(--radius-sm)}
.exc-handle-tip{margin:0 0 12px;font-size:12px;color:var(--c-text-3);line-height:1.6}

/* timeline approval */
.timeline{padding-left:20px;border-left:2px solid var(--c-border-light)}
.tl-item{position:relative;padding:0 0 20px 20px}
.tl-item::before{content:'';position:absolute;left:-25px;top:4px;width:10px;height:10px;border-radius:50%;background:var(--c-primary);border:2px solid #fff}
.tl-item.pending::before{background:var(--c-border)}
.kv{display:grid;grid-template-columns:repeat(4,1fr);gap:12px 24px}
.kv-i label{font-size:13px;color:var(--c-text-3);display:block;margin-bottom:4px}
.kv-i span{font-size:14px;color:var(--c-text)}
.msg-item{padding:12px;border-bottom:1px solid var(--c-border-light);cursor:pointer;display:flex;gap:12px}
.msg-item:hover{background:var(--c-surface-muted)}
.msg-item.unread{background:var(--c-accent-soft)}
.msg-dot{width:8px;height:8px;border-radius:50%;background:var(--c-primary);flex-shrink:0;margin-top:6px}
.msg-item.read .msg-dot{background:transparent}

/* chart placeholder */
.chart-box{height:200px;background:linear-gradient(180deg,#fafafa,#fff);border:1px solid var(--c-border-light);border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;color:var(--c-text-3);font-size:13px}

/* tree */
.tree-node{padding:6px 8px;cursor:pointer;border-radius:var(--radius-sm);font-size:14px;display:flex;align-items:center;gap:6px}
.tree-node:hover{background:var(--c-surface-hover)}
.tree-node.on{background:var(--c-accent-soft);color:var(--c-primary)}
.tree-ch{margin-left:20px}

/* role permission tree */
.role-perm-card .tabs{margin-bottom:16px}
.role-perm-scope{display:inline-flex;border:1px solid var(--c-border);border-radius:var(--radius-sm);overflow:hidden;margin-bottom:16px}
.role-perm-scope button{border:none;background:#fff;padding:8px 20px;font-size:13px;cursor:pointer;color:var(--c-text-2)}
.role-perm-scope button.on{background:var(--c-primary);color:#fff}
.role-perm-scope button:not(.on):hover{background:#f5f7fa}
.role-perm-panel{display:none}
.role-perm-panel.on{display:block}
.role-perm-toolbar{display:flex;gap:12px;align-items:center;margin-bottom:12px;flex-wrap:wrap}
.role-perm-search{flex:1;min-width:200px;max-width:360px}
.role-perm-toolbar-actions{display:flex;gap:8px;flex-wrap:wrap}
.role-perm-split{display:grid;grid-template-columns:200px 1fr;gap:16px;min-height:360px}
.role-perm-apps{border:1px solid var(--c-border);border-radius:var(--radius-sm);overflow:hidden}
.role-perm-apps-hd{padding:10px 12px;font-size:12px;font-weight:600;color:var(--c-text-3);background:var(--c-surface-muted);border-bottom:1px solid var(--c-border)}
.role-perm-app{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;font-size:13px;cursor:pointer;border-bottom:1px solid var(--c-border-light);color:var(--c-text-1);text-decoration:none}
.role-perm-app:last-child{border-bottom:none}
.role-perm-app:hover{background:#f5f7fa}
.role-perm-app.on{background:var(--c-accent-soft);color:var(--c-primary);font-weight:500}
.role-perm-app .tag-sm{font-size:11px;padding:1px 6px}
.role-perm-tree-wrap,.role-perm-map-wrap{border:1px solid var(--c-border);border-radius:var(--radius-sm);padding:12px;max-height:420px;overflow:auto}
.subapp-perm-tree,.map-panel{display:none}
.subapp-perm-tree.on,.map-panel.on{display:block}
.perm-tree{list-style:none;margin:0;padding:0}
.perm-tree-children{margin:0 0 0 22px;padding:0;list-style:none}
.perm-tree-item:not(.expanded) > .perm-tree-children{display:none}
.perm-tree-item.hidden{display:none}
.perm-tree-row{display:flex;align-items:center;gap:6px;padding:5px 8px;border-radius:var(--radius-sm);font-size:13px}
.perm-tree-row:hover{background:#f5f7fa}
.perm-tree-row label{display:flex;align-items:center;gap:6px;cursor:pointer;flex:1;margin:0}
.perm-tree-row input[type=checkbox]{accent-color:var(--c-primary)}
.perm-tree-toggle{width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;font-size:10px;color:var(--c-text-3);cursor:pointer;flex-shrink:0;user-select:none}
.perm-tree-toggle.empty{visibility:hidden}
.perm-tree-code{font-size:11px;color:var(--c-text-3);margin-left:auto}
.cond-builder .frow{margin-bottom:0}
.perm-tree-row.is-leaf,.perm-tree-row.is-field{cursor:pointer}
.perm-tree-row.is-leaf.on,.perm-tree-row.is-field.on{background:var(--c-sidebar-active);color:var(--c-primary)}
.perm-tree-row.is-menu{font-weight:500}
.perm-tree-row.is-btn .perm-tree-code::before{content:'按钮 · '}
.perm-tree-row.is-api .perm-tree-code::before{content:'接口权限 · '}
.res-type-hint{font-size:12px;color:var(--c-text-3);margin:6px 0 0;line-height:1.5}
.role-perm-ft{display:flex;align-items:center;justify-content:space-between;margin-top:16px;padding-top:16px;border-top:1px solid var(--c-border-light)}
.role-perm-ft .role-perm-stat{font-size:13px;color:var(--c-text-3)}
.role-perm-map-card{padding:16px;background:var(--c-surface-muted);border-radius:var(--radius-sm);border:1px solid var(--c-border-light)}
.role-perm-map-card .kv{margin-top:12px}
.res-tree-wrap{border:1px solid var(--c-border);border-radius:var(--radius-sm);padding:12px;max-height:520px;overflow:auto}
.res-admin-tree .res-tree-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:var(--radius-sm);font-size:13px}
.res-admin-tree .res-tree-row:hover{background:#f5f7fa}
.res-admin-tree .res-tree-row.is-menu{font-weight:500}
.res-admin-tree .res-tree-name{flex:0 1 auto}
.res-admin-tree .perm-tree-code{margin-left:auto}
.res-admin-tree .res-tree-ops{display:flex;gap:8px;margin-left:8px;flex-shrink:0}
.res-admin-tree .tag-sm{font-size:11px;padding:1px 6px}
.tag-ok{background:#f6ffed;color:var(--c-success)}
.tag-warn{background:#fffbe6;color:var(--c-warning)}
.res-scope-bar{display:flex;align-items:center;gap:12px;margin-bottom:16px;padding:12px 16px;background:var(--c-surface-muted);border:1px solid var(--c-border-light);border-radius:var(--radius-sm);flex-wrap:wrap}
/* 身份域顶栏查询：去掉灰底，对齐标准 qb 三列 */
.res-scope-bar.user-top-bar{padding:0;margin-bottom:12px;background:transparent;border:none;border-radius:0;gap:16px;flex-wrap:nowrap}
.res-scope-compact{margin-top:0}
.res-tenant-bar{margin-bottom:12px}
.res-query-bar{margin-bottom:8px;padding:10px 12px;background:var(--c-surface-muted);border:1px solid var(--c-border-light);border-radius:var(--radius-sm)}
.res-query-bar .fg-h .fi,.res-query-bar .fg-h .fs{min-width:0}
.res-table-toolbar-meta{margin-bottom:8px}
.res-table-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px;padding:10px 12px;background:var(--c-surface-muted);border:1px solid var(--c-border-light);border-radius:var(--radius-sm);flex-wrap:wrap}
.res-table-toolbar-l,.res-table-toolbar-r{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.res-table-toolbar-l .fl{margin:0;width:auto;font-size:13px;color:var(--c-text-2);flex-shrink:0}
.res-table-toolbar-r{margin-left:auto;justify-content:flex-end}
.res-scope-top{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid var(--c-border-light);flex-wrap:wrap}
.res-scope-top-l,.res-scope-top-r{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.res-scope-top-l .fl{margin:0;width:auto;font-size:13px;color:var(--c-text-2)}
.res-tenant-select{min-width:140px}
.res-scope-search{min-width:160px;width:180px}
.res-scope-type{min-width:100px}
.res-scope-label{font-size:13px;color:var(--c-text-2);flex-shrink:0}
.res-scope-tip{font-size:12px;color:var(--c-text-3)}
.res-scope-layout{display:contents}
.res-scope-apps{border:none;border-radius:0;overflow:visible}
.res-tenant-apps{display:none}
.res-tenant-apps.on{display:block}
.res-scope-main{min-width:0}
.res-scope-panel{display:none}
.res-scope-panel.on{display:block}
.res-scope-stat{font-size:12px;color:var(--c-text-3);padding:2px 10px;background:var(--c-surface-muted);border-radius:var(--radius-sm);white-space:nowrap}
.res-form-tip{font-size:12px;color:var(--c-text-3);margin:0 0 12px;padding:10px 12px;background:#fffbe6;border:1px solid #ffe58f;border-radius:var(--radius-sm);line-height:1.6}
.res-form-reported .is-locked,.opt-group.is-locked{opacity:.72;pointer-events:none}
.res-form-reported .field-readonly{background:#f5f5f5;color:var(--c-text-2)}
.res-tbl-wrap{max-height:480px;overflow:auto;border:1px solid var(--c-border);border-radius:var(--radius-sm)}
.res-ttbl .res-name-strong{font-weight:500}
.res-ttbl .res-code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--c-text-2)}
.res-ttbl tr.is-menu .res-name-strong{color:var(--c-text-1)}
.res-ttbl tr.res-filtered-out{display:none}
.res-ttbl tr.res-hidden{display:none}
.res-icon-btn{width:100%;justify-content:flex-start;text-align:left}
.ui-switch{position:relative;display:inline-flex;align-items:center;width:44px;height:22px;cursor:pointer}
.ui-switch input{opacity:0;width:0;height:0;position:absolute}
.ui-switch-slider{position:absolute;inset:0;background:#dcdfe6;border-radius:11px;transition:.2s}
.ui-switch-slider::before{content:'';position:absolute;width:18px;height:18px;left:2px;top:2px;background:#fff;border-radius:50%;transition:.2s;box-shadow:0 1px 3px rgba(0,0,0,.15)}
.ui-switch input:checked+.ui-switch-slider{background:var(--c-success)}
.ui-switch input:checked+.ui-switch-slider::before{transform:translateX(22px)}
.num-stepper{display:flex;align-items:stretch;border:1px solid var(--c-border);border-radius:var(--radius-sm);overflow:hidden;width:100%}
.num-stepper button{width:36px;border:none;background:var(--c-surface-muted);color:var(--c-text-2);cursor:pointer;font-size:16px;line-height:1}
.num-stepper button:hover{background:#f0f2f5}
.num-stepper .fi{border:none;border-radius:0;text-align:center;flex:1;min-width:0}
@media(max-width:900px){.role-perm-split,.scope-workbench{grid-template-columns:1fr}.scope-nav{width:100%}}

/* result */
.result-box{text-align:center;padding:60px 20px}
.result-ic{width:72px;height:72px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:36px;margin:0 auto 16px}
.result-ic.ok{background:#f6ffed;color:var(--c-success)}
.result-ic.err{background:#fff2f0;color:var(--c-danger)}

/* workflow engine */
.wf-model-toolbar{margin-bottom:12px}
.wf-model-search{max-width:280px}
.wf-model-search .fi{width:100%}
.wf-model-tbl{margin:0}
.wf-model-ic{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;color:#fff;font-size:12px;font-weight:600;margin-right:8px;vertical-align:middle}
.wf-more-drop{position:relative;display:inline-block;vertical-align:middle}
.wf-more-trigger{cursor:pointer}
.wf-more-menu{display:none;position:absolute;right:0;top:calc(100% + 4px);min-width:140px;background:#fff;border:1px solid #e8e8e8;border-radius:4px;box-shadow:0 6px 16px rgba(0,0,0,.12);z-index:300;padding:4px 0}
.wf-more-drop.open .wf-more-menu{display:block}
.wf-more-drop.drop-up .wf-more-menu{top:auto;bottom:calc(100% + 4px)}
.wf-more-item{display:block;width:100%;padding:8px 16px;border:none;background:transparent;font-size:13px;color:var(--c-primary);cursor:pointer;text-align:left;white-space:nowrap}
.wf-more-item:hover{background:#f0f7ff}
.wf-more-item.del{color:var(--c-danger)}
.wf-mono{font-family:ui-monospace,monospace;font-size:12px;color:var(--c-text-3)}
.ops-log-intro ul{margin:0;padding-left:18px}
.ops-log-stack{margin-top:12px;padding:12px;background:#1e1e1e;color:#d4d4d4;border-radius:var(--radius-sm);font-family:ui-monospace,monospace;font-size:11px;line-height:1.6;white-space:pre-wrap;max-height:220px;overflow:auto}
.ops-log-json{margin:0;max-height:420px;border:1px solid #333}
.ops-err-tbl .tbl th{white-space:nowrap;font-size:12px}
.ops-err-tbl .tbl td{font-size:12px;max-width:160px}
.ops-err-cell{display:inline-block;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom;cursor:default;border-bottom:1px dashed transparent}
.ops-err-cell:hover{border-bottom-color:var(--c-text-3);color:var(--c-primary)}
.ops-err-float-tip{position:fixed;z-index:4000;max-width:min(560px,calc(100vw - 24px));max-height:min(320px,40vh);overflow:auto;padding:12px 14px;background:#1a1a1a;color:#f5f5f5;border-radius:6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.55;white-space:pre-wrap;word-break:break-word;box-shadow:0 8px 24px rgba(0,0,0,.28);pointer-events:auto}
.ops-daterange{display:flex;align-items:center;gap:8px;flex:1;min-width:0}
.ops-daterange .fi{flex:1;min-width:0}
.ops-daterange-sep{flex:none;color:var(--c-text-3);font-size:13px}
.ops-daterange-fg{min-width:0}
@media (min-width:1100px){
  .qb-fields.frow-3 .ops-daterange-fg{grid-column:span 2}
}
.btn-xs{padding:2px 8px;font-size:12px}
.wf-wizard-card{padding:0;overflow:hidden}
.wf-steps{display:flex;align-items:center;justify-content:center;gap:0;padding:20px 24px 16px;border-bottom:1px solid var(--c-border-light);background:#fafbfc}
.wf-step{display:flex;align-items:center;gap:8px;padding:0;border:none;background:none;cursor:pointer;color:var(--c-text-3);font-size:14px}
.wf-step-n{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;border:2px solid var(--c-border);font-size:13px;font-weight:600;transition:.15s}
.wf-step.on{color:var(--c-primary)}
.wf-step.on .wf-step-n,.wf-step.done .wf-step-n{border-color:var(--c-primary);background:var(--c-primary);color:#fff}
.wf-step.done{color:var(--c-text-2)}
.wf-step-line{flex:0 0 48px;height:2px;background:var(--c-border);margin:0 4px}
.wf-step.done+.wf-step-line,.wf-step.on+.wf-step-line{background:var(--c-primary)}
.wf-step-pane{display:none;padding:24px}
.wf-step-pane.on{display:block}
.wf-step-form{max-width:960px}
.wf-step-tip{margin:0 0 16px;font-size:13px;color:var(--c-text-3)}
.wf-form-bind-fg{max-width:720px}
.wf-form-bind-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.wf-form-bind-row .fs{flex:1;min-width:200px}
.wf-preview-hd{margin:0 0 12px;font-size:14px}
.wf-form-preview{margin-top:16px;padding:16px;max-width:560px}
.wf-more-settings{max-width:720px}
.wf-more-sec{padding:16px 0;border-bottom:1px solid var(--c-border-light)}
.wf-more-sec:last-child{border-bottom:none}
.wf-more-sec-t{margin:0;font-size:14px;font-weight:600}
.wf-more-sec-hd{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:4px}
.wf-more-sec-desc{margin:4px 0 12px;font-size:12px;color:var(--c-text-3)}
.wf-more-muted{color:var(--c-text-3);font-size:12px}
.wf-more-hint{margin:6px 0 0 24px;font-size:12px;color:var(--c-text-3)}
.wf-id-inline{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px}
.wf-id-chk{margin:0}
.wf-id-part{width:100px;min-width:80px}
.wf-id-len{width:48px;text-align:center;padding:6px 4px}
.wf-num-stepper{display:flex;align-items:center;gap:0;border:1px solid var(--c-border);border-radius:var(--radius-sm);overflow:hidden}
.wf-num-btn{width:28px;height:32px;border:none;background:#fafbfc;cursor:pointer;font-size:14px;color:var(--c-text-2)}
.wf-num-btn:disabled{opacity:.4;cursor:not-allowed}
.wf-help-tip{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#e8e8e8;color:var(--c-text-3);font-size:11px;cursor:help}
.wf-notify-group .wf-notify-item{padding:12px 0;border-bottom:1px solid var(--c-border-light)}
.wf-notify-group .wf-notify-item:last-child{border-bottom:none}
.wf-notify-hd{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.wf-notify-name{font-size:14px;min-width:88px}
.wf-notify-desc{font-size:12px;color:var(--c-text-3)}
.wf-notify-body{margin-top:12px;padding-left:0}
.wf-http-tip{margin:0 0 12px;padding:8px 12px;background:#fffbe6;border:1px solid #ffe58f;border-radius:var(--radius-sm);font-size:12px;color:#ad6800}
.wf-kv-row{display:flex;align-items:center;justify-content:space-between;gap:12px}
.wf-kv-row .fl{margin:0}
.wf-kv-list{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.wf-kv-item{display:flex;align-items:center;gap:8px}
.wf-kv-item .fi{flex:1;min-width:0}
.wf-more-settings .opt-item{display:flex;align-items:center;gap:6px;margin:6px 0}
.wf-opt-col{flex-direction:column;align-items:flex-start;gap:8px}
.wf-summary-chk{display:flex;flex-wrap:wrap;gap:12px;margin-top:8px}
.wf-step-ft{display:flex;justify-content:flex-end;gap:8px;padding:16px 24px;border-top:1px solid var(--c-border-light);background:#fafbfc}
.wf-field-tip{margin:4px 0 0;font-size:12px;color:var(--c-text-3)}
.wf-icon-upload{display:flex;align-items:center;justify-content:center;width:64px;height:64px;border:1px dashed var(--c-border);border-radius:var(--radius);cursor:pointer;color:var(--c-text-3);font-size:24px}
.wf-flow-canvas-lg{min-height:360px}
.wf-flow-toolbar{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap}
/* SIMPLE 流程设计器 */
.wf-step-pane[data-step-pane="2"]{padding:0;min-height:520px}
.wf-flow-designer{display:flex;min-height:520px;position:relative;overflow:hidden}
.wf-flow-stage{flex:1;min-width:0;overflow:auto;background:#f5f6f8;background-image:radial-gradient(#d9dde3 1px,transparent 1px);background-size:16px 16px;padding:32px 24px 48px}
.wf-flow-tree{display:flex;flex-direction:column;align-items:center;gap:0;margin:0 auto;max-width:360px}
.wf-sn{position:relative;width:220px;background:#fff;border:2px solid #e5e6eb;border-radius:8px;padding:14px 16px;cursor:pointer;box-shadow:0 1px 2px rgba(0,0,0,.04);transition:border-color .15s,box-shadow .15s}
.wf-sn:hover{border-color:#c9cdd4}
.wf-sn.on{border-color:#c9a27a;box-shadow:0 0 0 2px rgba(201,162,122,.2)}
.wf-sn-type{font-size:14px;font-weight:600;color:var(--c-text);margin:0 0 4px}
.wf-sn-sum{font-size:12px;color:var(--c-text-3);margin:0;line-height:1.4;min-height:18px}
.wf-sn-sum.ok{color:#00b42a}
.wf-sn-sum.ok::before{content:'✓ ';font-weight:700}
.wf-sn.initiator{border-color:#00b42a}
.wf-sn.approve{border-color:#ff9a2e}
.wf-sn.approve.on{border-color:#c9a27a}
.wf-sn.copy{border-color:#3491fa}
.wf-sn.condition{border-color:#86909c}
.wf-sn.end{width:auto;min-width:72px;padding:8px 20px;border-radius:20px;border-color:#c9cdd4;background:#f2f3f5;text-align:center;cursor:default;box-shadow:none}
.wf-sn.end .wf-sn-type{margin:0;font-size:13px;font-weight:500;color:var(--c-text-2)}
.wf-sn-del{position:absolute;top:6px;right:6px;width:22px;height:22px;border:none;border-radius:4px;background:transparent;color:var(--c-text-3);cursor:pointer;font-size:14px;line-height:1;display:none}
.wf-sn:hover .wf-sn-del,.wf-sn.on .wf-sn-del{display:block}
.wf-sn-del:hover{background:#fff1f0;color:var(--c-danger)}
.wf-flow-conn{display:flex;flex-direction:column;align-items:center;position:relative;height:48px;justify-content:center}
.wf-flow-conn::before{content:'';position:absolute;top:0;bottom:0;width:2px;background:#c9cdd4}
.wf-flow-add{position:relative;z-index:1;width:24px;height:24px;border-radius:50%;border:none;background:#3491fa;color:#fff;font-size:16px;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;box-shadow:0 2px 6px rgba(52,145,250,.35)}
.wf-flow-add:hover{background:#165dff}
.wf-flow-add-menu{position:absolute;left:50%;top:100%;transform:translateX(-50%);margin-top:6px;z-index:20;background:#fff;border:1px solid var(--c-border);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.12);padding:6px;min-width:120px;display:none}
.wf-flow-conn.open .wf-flow-add-menu{display:block}
.wf-flow-add-item{display:block;width:100%;padding:8px 12px;border:none;background:transparent;text-align:left;font-size:13px;color:var(--c-text);cursor:pointer;border-radius:4px;white-space:nowrap}
.wf-flow-add-item:hover{background:#f2f3f5;color:var(--c-primary)}
.wf-flow-panel{width:0;flex-shrink:0;background:#fff;border-left:1px solid var(--c-border-light);display:flex;flex-direction:column;overflow:hidden;transition:width .2s ease}
.wf-flow-designer.panel-open .wf-flow-panel{width:440px}
.wf-flow-panel-hd{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--c-border-light);flex-shrink:0}
.wf-flow-panel-title{margin:0;font-size:15px;font-weight:600;display:flex;align-items:center;gap:6px}
.wf-flow-panel-title .edit{font-size:12px;color:var(--c-text-3);font-weight:400;cursor:pointer}
.wf-flow-panel-x{border:none;background:none;font-size:20px;line-height:1;color:var(--c-text-3);cursor:pointer;padding:0 4px}
.wf-flow-panel-bd{flex:1;overflow-y:auto;padding:16px}
.wf-flow-panel-ft{display:flex;justify-content:flex-end;gap:8px;padding:12px 16px;border-top:1px solid var(--c-border-light);flex-shrink:0}
.wf-np-sec{margin-bottom:20px}
.wf-np-sec-t{margin:0 0 10px;font-size:13px;font-weight:600;color:var(--c-text)}
.wf-np-tabs{display:flex;gap:0;border-bottom:1px solid var(--c-border-light);margin:0 0 16px;overflow-x:auto}
.wf-np-tab{padding:10px 12px;border:none;background:none;font-size:13px;color:var(--c-text-3);cursor:pointer;white-space:nowrap;box-shadow:inset 0 -2px 0 transparent}
.wf-np-tab.on{color:var(--c-primary);font-weight:600;box-shadow:inset 0 -2px 0 var(--c-primary)}
.wf-np-pane{display:none}
.wf-np-pane.on{display:block}
.wf-np-opts{display:flex;flex-wrap:wrap;gap:8px 16px}
.wf-np-opts.col{flex-direction:column;gap:8px}
.wf-np-opts .opt-item{margin:0;font-size:13px}
.wf-np-opts.grid{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px}
.wf-np-sub{margin-top:10px;padding:10px 12px;background:#fafbfc;border:1px solid var(--c-border-light);border-radius:6px}
.wf-np-sub[hidden]{display:none!important}
.wf-np-hint{margin:4px 0 0;font-size:12px;color:var(--c-text-3)}
.wf-np-btn-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--c-border-light)}
.wf-np-btn-row:last-child{border-bottom:none}
.wf-np-btn-name{font-size:13px}
.wf-np-field-row{display:grid;grid-template-columns:1fr 72px 72px 72px;gap:8px;align-items:center;padding:8px 0;border-bottom:1px solid var(--c-border-light);font-size:13px}
.wf-np-field-row.hd{color:var(--c-text-3);font-size:12px;border-bottom-color:var(--c-border)}
.wf-np-field-row .opt-item{margin:0;justify-content:center}
.wf-form-designer{display:flex;flex-direction:column;min-height:calc(100vh - 220px);background:#f0f2f5;border:1px solid var(--c-border-light);border-radius:var(--radius);overflow:hidden}
.wf-fd-toolbar{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;border-bottom:1px solid var(--c-border-light);background:#fff;gap:12px;flex-wrap:wrap}
.wf-fd-toolbar-l,.wf-fd-toolbar-r{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.wf-fd-vp{padding:4px 10px;border:1px solid var(--c-border);background:#fff;border-radius:4px;font-size:12px;cursor:pointer;color:var(--c-text-2)}
.wf-fd-vp.on,.wf-fd-vp:hover{border-color:var(--c-primary);color:var(--c-primary)}
.wf-fd-btn-dark{background:#1f2937;color:#fff;border-color:#1f2937}
.wf-fd-btn-clear{color:var(--c-danger);border-color:#ffccc7}
.wf-fd-body{display:grid;grid-template-columns:280px 1fr 300px;gap:0;flex:1;min-height:0;overflow:hidden}
.wf-fd-palette{background:#fff;border-right:1px solid var(--c-border-light);overflow-y:auto;display:flex;flex-direction:column}
.wf-fd-tabs{display:flex;border-bottom:1px solid var(--c-border-light)}
.wf-fd-tab{flex:1;padding:10px;border:none;background:none;cursor:pointer;font-size:13px;color:var(--c-text-3)}
.wf-fd-tab.on{color:var(--c-primary);font-weight:600;box-shadow:inset 0 -2px 0 var(--c-primary)}
.wf-fd-tab-pane{display:none;padding:12px;overflow-y:auto;flex:1}
.wf-fd-tab-pane.on{display:block}
.wf-fd-palette-sec{margin-bottom:12px}
.wf-fd-palette-sec h4{margin:0 0 8px;font-size:12px;color:var(--c-text-3);font-weight:600}
.wf-fd-comp-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.wf-fd-comp{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:10px 6px;border:1px solid var(--c-border-light);border-radius:6px;font-size:12px;cursor:grab;background:#fff;transition:.15s;text-align:center;min-height:64px}
.wf-fd-comp:hover{border-color:var(--c-primary);color:var(--c-primary);box-shadow:0 2px 6px rgba(0,0,0,.06)}
.wf-fd-comp.dragging{opacity:.5}
.wf-fd-comp-ic{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;background:#f5f7fa;font-size:11px;font-weight:600;color:var(--c-text-2)}
.wf-fd-center{display:flex;flex-direction:column;background:#f0f2f5;overflow:hidden}
.wf-fd-canvas-wrap{flex:1;padding:16px;overflow:auto;display:flex;justify-content:center}
.wf-fd-canvas-wrap.wf-fd-vp-pad .wf-fd-canvas{max-width:768px}
.wf-fd-canvas-wrap.wf-fd-vp-mobile .wf-fd-canvas{max-width:375px}
.wf-fd-canvas{width:100%;max-width:100%;min-height:480px;background:#fff;border-radius:8px;box-shadow:0 1px 4px rgba(0,0,0,.08);padding:20px;position:relative}
.wf-fd-canvas.drag-over{outline:2px dashed var(--c-primary);outline-offset:-4px}
.wf-fd-canvas-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--c-text-3);font-size:13px;pointer-events:none}
.wf-fd-powered{margin:0;padding:8px;text-align:center;font-size:11px;color:var(--c-text-3)}
.wf-fd-props{background:#fff;border-left:1px solid var(--c-border-light);overflow-y:auto;padding:16px}
.wf-fd-props-hd{margin:0 0 12px;font-size:14px;font-weight:600}
.wf-fd-hint{font-size:12px;color:var(--c-text-3);margin:0}
.wf-fd-unit{margin-left:6px;color:var(--c-text-3);font-size:12px}
.wf-fd-hr{border:none;border-top:1px solid var(--c-border-light);margin:16px 0}
.wf-fd-event-btn{width:100%;margin-top:8px}
.wf-fd-switch-row{display:flex;align-items:center;justify-content:space-between;gap:12px}
.wf-fd-switch-row .fl{margin:0}
.wf-switch{position:relative;display:inline-block;width:40px;height:22px;flex-shrink:0}
.wf-switch input{opacity:0;width:0;height:0}
.wf-switch span{position:absolute;inset:0;background:#dcdfe6;border-radius:11px;cursor:pointer;transition:.2s}
.wf-switch span:before{content:'';position:absolute;width:18px;height:18px;left:2px;top:2px;background:#fff;border-radius:50%;transition:.2s}
.wf-switch.on span,.wf-switch input:checked+span{background:var(--c-primary)}
.wf-switch.on span:before,.wf-switch input:checked+span:before{transform:translateX(18px)}
.wf-fd-outline{list-style:none;margin:0;padding:0}
.wf-fd-outline li{padding:8px 10px;font-size:13px;border-radius:4px;cursor:pointer}
.wf-fd-outline li:hover{background:#f5f7fa}
.wf-fd-outline-empty{color:var(--c-text-3);font-size:12px;cursor:default}
.wf-fd-field{position:relative;padding:12px 12px 12px 28px;margin-bottom:8px;border:1px dashed transparent;border-radius:var(--radius);cursor:pointer}
.wf-fd-field:hover{border-color:var(--c-border)}
.wf-fd-field.on{border-color:var(--c-primary);background:rgba(255,107,0,.04)}
.wf-fd-field.sorting{opacity:.4}
.wf-fd-drag{position:absolute;left:6px;top:50%;transform:translateY(-50%);cursor:grab;color:var(--c-text-3);font-size:10px;letter-spacing:-2px;user-select:none}
.wf-fd-field-inner .fg{margin:0}
.wf-fd-field-ops{position:absolute;top:4px;right:4px;display:none;gap:4px}
.wf-fd-field:hover .wf-fd-field-ops,.wf-fd-field.on .wf-fd-field-ops{display:flex}
.wf-fd-op{padding:2px 6px;font-size:11px;border:1px solid var(--c-border);background:#fff;border-radius:4px;cursor:pointer}
.wf-fd-op.del{color:var(--c-danger);border-color:#ffccc7}
.wf-fd-divider{border:none;border-top:1px dashed var(--c-border);margin:8px 0}
.wf-fd-tip{margin:0;font-size:12px;color:var(--c-text-3)}
.wf-fd-rate{color:#faad14;letter-spacing:2px}
.wf-fd-subform,.wf-fd-row,.wf-fd-tabs{padding:12px;background:#fafbfc;border:1px dashed var(--c-border);border-radius:var(--radius);font-size:12px;color:var(--c-text-3)}
.wf-model-tabs{margin:-16px -16px 16px}
.wf-designer-placeholder{padding:24px;background:#fafbfc;border:1px dashed var(--c-border);border-radius:var(--radius);min-height:200px}
.wf-form-preview{max-width:480px;margin-top:16px}
.wf-flow-canvas{display:flex;flex-direction:column;align-items:center;padding:24px 0}
.wf-flow-canvas.mini{padding:12px 0}
.wf-flow-node{padding:10px 20px;border-radius:20px;font-size:13px;border:2px solid var(--c-border);background:#fff;min-width:120px;text-align:center}
.wf-flow-node.start,.wf-flow-node.end{background:#e8f5e9;border-color:#81c784;color:#2e7d32}
.wf-flow-node.task{border-color:#90caf9;color:#1565c0}
.wf-flow-node.on{border-color:var(--c-primary);box-shadow:0 0 0 2px rgba(255,107,0,.15)}
.wf-flow-node.done{background:#f6ffed;border-color:#b7eb8f}
.wf-flow-line{width:2px;height:24px;background:var(--c-border)}
.wf-detail-layout{display:grid;grid-template-columns:1fr 320px;gap:16px;align-items:start}
.wf-detail-main{display:flex;flex-direction:column;gap:16px}
.wf-detail-side{position:sticky;top:0}
.wf-info-grid{margin-top:8px}
.wf-timeline{list-style:none;margin:0;padding:0}
.wf-timeline li{display:flex;gap:12px;padding:12px 0;border-bottom:1px solid var(--c-border-light);position:relative}
.wf-timeline li:last-child{border-bottom:none}
.wf-tl-dot{width:10px;height:10px;border-radius:50%;background:var(--c-border);margin-top:5px;flex-shrink:0}
.wf-timeline li.done .wf-tl-dot{background:var(--c-success)}
.wf-timeline li.on .wf-tl-dot{background:var(--c-primary);box-shadow:0 0 0 3px rgba(255,107,0,.2)}
.wf-timeline p{margin:4px 0 0;font-size:12px;color:var(--c-text-3)}
.wf-create-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px}
.wf-create-card{display:block;padding:20px;border:1px solid var(--c-border-light);border-radius:var(--radius);text-decoration:none;color:inherit;transition:.15s}
.wf-create-card:hover{border-color:var(--c-primary);box-shadow:0 4px 12px rgba(0,0,0,.06);text-decoration:none}
.wf-create-ic{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:8px;color:#fff;font-size:16px;font-weight:600;margin-bottom:12px}
.wf-create-card strong{display:block;font-size:15px;margin-bottom:4px}
.wf-create-card p{margin:0;font-size:12px;color:var(--c-text-3)}
@media(max-width:900px){.wf-detail-layout{grid-template-columns:1fr}.wf-detail-side{position:static}.wf-fd-body{grid-template-columns:1fr}.wf-fd-palette,.wf-fd-props{display:none}.wf-form-bind-row .btn{flex-shrink:0}}

/* 详情抽屉面板（2020s admin panel） */
.drawer-panel-hd{padding:20px 24px 16px;border-bottom:1px solid var(--c-border-light);background:linear-gradient(180deg,#fff 0%,#fafbfc 100%);flex-shrink:0}
.drawer-panel-hd-top{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.drawer-panel-hd-main{flex:1;min-width:0}
.drawer-panel-kicker{display:inline-flex;align-items:center;gap:6px;font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--c-text-3);margin-bottom:6px}
.drawer-panel-title-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0}
.drawer-panel-title{margin:0;font-size:20px;font-weight:650;letter-spacing:-.02em;color:var(--c-text);line-height:1.25}
.drawer-panel-code{display:inline-flex;align-items:center;gap:6px;margin-top:8px;font-size:12px;color:var(--c-text-3)}
.drawer-panel-code code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;padding:2px 8px;border-radius:6px;background:#f3f4f6;color:#374151;border:1px solid #e5e7eb}
.drawer-panel-close{width:32px;height:32px;border:none;border-radius:8px;background:transparent;color:var(--c-text-3);font-size:20px;line-height:1;cursor:pointer;flex-shrink:0}
.drawer-panel-close:hover{background:#f3f4f6;color:var(--c-text)}
.drawer-meta-chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.drawer-chip{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:999px;background:#fff;border:1px solid var(--c-border);font-size:12px;color:var(--c-text-2);line-height:1.2}
.drawer-chip b{font-weight:500;color:var(--c-text-3)}
.drawer-chip em{font-style:normal;font-weight:600;color:var(--c-text)}
.drawer-chip .st{transform:scale(.92);transform-origin:left center}
.drawer-panel-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.seg-actions{display:inline-flex;padding:3px;border-radius:10px;background:#f3f4f6;border:1px solid #e8eaed;gap:2px}
.seg-actions .subapp-status-btn{height:30px;border:none;background:transparent;border-radius:8px;padding:0 12px;font-size:12px;font-weight:500;color:var(--c-text-2);box-shadow:none}
.seg-actions .subapp-status-btn:hover{color:var(--c-text);background:rgba(255,255,255,.7)}
.seg-actions .subapp-status-btn.on{background:#fff;color:var(--c-primary);box-shadow:0 1px 2px rgba(0,0,0,.06)}
.seg-actions .subapp-status-btn.danger{color:#b42318}
.seg-actions .subapp-status-btn.danger.on,.seg-actions .subapp-status-btn.danger-on{background:#b42318;color:#fff}

.drawer-panel-tabs{display:flex;gap:0;padding:0 16px;border-bottom:1px solid var(--c-border-light);background:#fff;flex-shrink:0;overflow-x:auto;scrollbar-width:none}
.drawer-panel-tabs::-webkit-scrollbar{display:none}
.drawer-panel-tabs .tab{padding:12px 14px;margin:0;border:none;border-bottom:2px solid transparent;font-size:13px;font-weight:500;color:var(--c-text-3);white-space:nowrap;border-radius:0}
.drawer-panel-tabs .tab:hover{color:var(--c-text)}
.drawer-panel-tabs .tab.on{color:var(--c-primary);border-bottom-color:var(--c-primary);font-weight:600;background:transparent}

.drawer-panel-bd{padding:20px 24px 28px;overflow-y:auto;flex:1;background:#f7f8fa}
.drawer-panel-ft{padding:14px 24px;border-top:1px solid var(--c-border-light);background:#fff;margin-top:auto;display:flex;justify-content:flex-end;gap:8px;flex-shrink:0}

/* content surfaces inside drawer */
.subapp-detail-desc{margin:0;font-size:13px;line-height:1.75;color:var(--c-text-2)}
.subapp-detail-lead{margin:0 0 14px;font-size:13px;color:var(--c-text-3);line-height:1.6}
.subapp-cfg-block{border:1px solid rgba(0,0,0,.04);border-radius:12px;padding:18px;margin-bottom:14px;background:#fff;box-shadow:0 1px 2px rgba(15,23,42,.03)}
.subapp-cfg-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:14px}
.subapp-cfg-title{font-size:14px;font-weight:650;color:var(--c-text);letter-spacing:-.01em}
.subapp-cfg-sub{margin:4px 0 0;font-size:12px;color:var(--c-text-3);line-height:1.5}
.drawer-panel-bd .sec-t{margin:0 0 12px;padding:0;border:none;font-size:13px;font-weight:650;color:var(--c-text)}
.drawer-panel-bd .kv{gap:12px;padding:4px 0}
.drawer-panel-bd .kv-i{padding:12px 14px;border-radius:10px;background:#fff;border:1px solid rgba(0,0,0,.04)}
.drawer-panel-bd .kv-i label{display:block;margin:0 0 4px;font-size:11px;color:var(--c-text-3);font-weight:500}
.drawer-panel-bd .kv-i span{font-size:13px;color:var(--c-text);font-weight:500}

.subapp-seg{display:inline-flex;border:1px solid var(--c-border);border-radius:10px;overflow:hidden;margin-top:4px;background:#f3f4f6;padding:3px;gap:2px;border:1px solid #e8eaed}
.subapp-seg-item{border:none;background:transparent;padding:6px 14px;font-size:13px;cursor:pointer;color:var(--c-text-2);border-radius:8px}
.subapp-seg-item.on{background:#fff;color:var(--c-primary);font-weight:600;box-shadow:0 1px 2px rgba(0,0,0,.06)}

.subapp-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 16px;color:var(--c-text-3);font-size:13px;background:#fff;border-radius:12px;border:1px dashed #e5e7eb}
.subapp-empty-illu{width:72px;height:56px;margin-bottom:14px;border-radius:12px;background:linear-gradient(145deg,#f8fafc,#eef2f7);border:1px solid #e8eaed}
.subapp-empty-tip{margin:6px 0 0;font-size:12px;color:var(--c-text-3);max-width:280px;text-align:center;line-height:1.5}

.subapp-tenant-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.subapp-check{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--c-text-2);cursor:pointer;white-space:nowrap}
.subapp-tenant-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px}
.subapp-tenant-card{position:relative;text-align:left;border:1px solid #e8eaed;border-radius:12px;padding:16px;background:#fff;cursor:pointer;transition:border-color .15s,box-shadow .15s,transform .15s}
.subapp-tenant-card:hover{border-color:#ffd0a8;transform:translateY(-1px)}
.subapp-tenant-card.on{border-color:var(--c-primary);box-shadow:0 0 0 1px var(--c-primary),0 4px 12px rgba(255,107,0,.08)}
.subapp-tenant-check{position:absolute;top:10px;right:10px;width:20px;height:20px;border-radius:50%;background:var(--c-primary);color:#fff;font-size:11px;display:flex;align-items:center;justify-content:center;line-height:1}
.subapp-tenant-name{font-size:14px;font-weight:650;color:var(--c-text)}
.subapp-tenant-code{margin-top:4px;font-size:12px;color:var(--c-text-3)}
.subapp-tenant-count{margin:14px 0 0;font-size:12px;color:var(--c-text-3)}
.subapp-tenant-card-disabled{opacity:.45;cursor:not-allowed;transform:none!important}
.subapp-tenant-card-disabled:hover{border-color:#e8eaed;box-shadow:none}
.subapp-validity-edit{margin-top:16px;padding:14px;border:1px solid var(--c-border);border-radius:12px;background:var(--c-surface-muted)}
.subapp-tenant-scope-bar{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:12px 14px;border:1px solid #dbeafe;background:linear-gradient(180deg,#eff6ff,#f8fbff);border-radius:12px;margin-bottom:16px;flex-wrap:wrap}
.subapp-tenant-scope-tip{display:flex;gap:10px;align-items:flex-start;flex:1;min-width:220px}
.subapp-tenant-scope-tip strong{font-size:13px;color:var(--c-text)}
.subapp-tenant-scope-tip p{margin:4px 0 0;font-size:12px;color:var(--c-text-3);line-height:1.5}
.subapp-doc-ic{width:28px;height:28px;border-radius:8px;background:#fff;border:1px solid #bfdbfe;flex-shrink:0;position:relative}
.subapp-doc-ic:before{content:"";position:absolute;inset:7px 8px;border-top:2px solid #3b82f6;border-bottom:2px solid #93c5fd;box-shadow:0 5px 0 #dbeafe}
.subapp-scope-add{display:flex;align-items:center;gap:8px;margin-bottom:12px;flex-wrap:wrap;padding:12px;background:#fff;border-radius:12px;border:1px solid rgba(0,0,0,.04)}
.subapp-info-banner{padding:12px 14px;border-radius:12px;background:#fff;border:1px solid rgba(0,0,0,.04);font-size:12px;color:var(--c-text-2);margin-bottom:12px;line-height:1.55}
.subapp-cred-create{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap;margin-bottom:14px;padding:14px;border:1px solid rgba(0,0,0,.04);border-radius:12px;background:#fff}
.subapp-push-actions,.subapp-push-filters{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.drawer-panel-bd .tbl-wrap{background:#fff;border-radius:12px;border:1px solid rgba(0,0,0,.04);overflow:hidden}
.drawer-panel-bd .tbl{margin:0}

.subapp-status-btns{display:flex;gap:8px;flex-wrap:wrap}
.subapp-status-btn{height:28px;padding:0 12px;border:1px solid var(--c-border);background:#fff;border-radius:8px;font-size:12px;color:var(--c-text-2);cursor:pointer}
.subapp-status-btn:hover{border-color:var(--c-primary);color:var(--c-primary)}
.subapp-status-btn.on{border-color:var(--c-primary);color:var(--c-primary);background:var(--c-accent-soft)}
.subapp-status-btn.danger{border-color:#ffccc7;color:#cf1322}
.subapp-status-btn.danger.on,.subapp-status-btn.danger-on{background:#cf1322;border-color:#cf1322;color:#fff}

/* 用户详情抽屉 */
.user-form-detail .user-form-sec{display:none}
.user-form-detail .user-form-sec.on{display:block}
.user-form-detail #user-ehr-sync{margin-bottom:12px}
#modal-user .user-form-sec{display:block}
#modal-user .subapp-cfg-hd{margin-top:4px}
#modal-user .subapp-cfg-block{box-shadow:none}

.user-form-detail .user-form-sec{background:#fff;border:1px solid rgba(0,0,0,.04);border-radius:12px;padding:18px;margin-bottom:14px;box-shadow:0 1px 2px rgba(15,23,42,.03)}
.user-form-detail .user-form-sec .subapp-cfg-hd{margin:0 0 14px !important}
.user-form-detail #user-local-tip{padding:0 4px}
.user-tp-row{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid #eef0f3;border-radius:10px;margin-bottom:8px;background:#fafbfc}
.user-tp-name{font-weight:600;font-size:13px;min-width:48px}
.user-tp-status{flex:1;font-size:13px;color:var(--c-text-2)}
.user-tp-status.muted{color:var(--c-text-3)}
.user-tp-id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--c-text)}
@media(max-width:720px){
  .drawer.drawer-panel{width:100vw;right:-100vw}
}

/* 深色模式：覆盖遗留硬编码浅色 */
[data-theme="dark"] .hdr-brand-btn:hover,
[data-theme="dark"] .hdr-brand.open .hdr-brand-btn{background:var(--c-hover-soft)}
[data-theme="dark"] .tabs-ops-primary{background:var(--c-sidebar-active);border-color:var(--c-border)}
[data-theme="dark"] .tabs-ops-primary .tab:hover{background:var(--c-hover-muted);color:var(--c-text)}
[data-theme="dark"] .tabs-ops-primary .tab.on{background:var(--c-bg-card);box-shadow:var(--shadow-card)}
[data-theme="dark"] .tabs-ops-chips .tab{background:var(--c-sidebar-active);color:var(--c-text-2)}
[data-theme="dark"] .tabs-ops-chips .tab.on{background:var(--c-hover-soft)}
[data-theme="dark"] .tabs-ops-side{background:var(--c-bg-card);border-color:var(--c-border)}
[data-theme="dark"] .tabs-ops-side .tab:hover{background:var(--c-sidebar-active)}
[data-theme="dark"] .user-ehr-banner,
[data-theme="dark"] .user-ehr-more-grid,
[data-theme="dark"] .user-tp-row{background:var(--c-sidebar-active);border-color:var(--c-border)}
[data-theme="dark"] .user-form-detail .user-form-sec,
[data-theme="dark"] .subapp-cfg-block,
[data-theme="dark"] .drawer-panel-bd,
[data-theme="dark"] .drawer-panel-ft,
[data-theme="dark"] .drawer-panel-tabs,
[data-theme="dark"] .drawer-panel-bd .kv-i,
[data-theme="dark"] .subapp-tenant-card,
[data-theme="dark"] .subapp-empty,
[data-theme="dark"] .subapp-scope-add,
[data-theme="dark"] .subapp-info-banner,
[data-theme="dark"] .subapp-cred-create,
[data-theme="dark"] .subapp-validity-edit,
[data-theme="dark"] .drawer-panel-bd .tbl-wrap{background:var(--c-bg-card);border-color:var(--c-border)}
[data-theme="dark"] .seg-actions,
[data-theme="dark"] .subapp-seg{background:var(--c-sidebar-active);border-color:var(--c-border)}
[data-theme="dark"] .seg-actions .subapp-status-btn:hover,
[data-theme="dark"] .subapp-seg-item.on{background:var(--c-bg-card)}
[data-theme="dark"] .subapp-status-btn{background:var(--c-bg-card);border-color:var(--c-border)}
[data-theme="dark"] .subapp-status-btn.on{background:var(--c-hover-soft)}
[data-theme="dark"] .sel-bar{background:var(--c-bg-card);border-color:var(--c-border)}
[data-theme="dark"] .picker-panel,
[data-theme="dark"] .picker-list,
[data-theme="dark"] .picker-selected{background:var(--c-bg-card);border-color:var(--c-border)}
[data-theme="dark"] .picker-item:hover{background:var(--c-sidebar-active)}
[data-theme="dark"] .kv-i{background:var(--c-sidebar-active);border-color:var(--c-border)}
[data-theme="dark"] .org-tree-node:hover{background:var(--c-sidebar-active)}
[data-theme="dark"] .pgnt button{background:var(--c-btn-secondary-bg);border-color:var(--c-border);color:var(--c-text)}
[data-theme="dark"] .pgnt button.on{background:var(--c-primary);border-color:var(--c-primary);color:#fff}
[data-theme="dark"] select option{background:var(--c-bg-card);color:var(--c-text)}
[data-theme="dark"] .upload-box{background:var(--c-sidebar-active)}
[data-theme="dark"] .modal-hd,
[data-theme="dark"] .modal-ft{background:var(--c-modal-bg)}
[data-theme="dark"] .sb-subparent:hover{background:var(--c-hover-soft)}
[data-theme="dark"] .tags-view-close:hover{background:rgba(255,255,255,.08)}
[data-theme="dark"] .hdr-icon-btn:hover{background:var(--c-hover-soft)}
[data-theme="dark"] .search-item:hover{background:var(--c-sidebar-active)}
[data-theme="dark"] .portal-card,
[data-theme="dark"] .portal-widget,
[data-theme="dark"] .app-tile{background:var(--c-bg-card);border-color:var(--c-border)}
[data-theme="dark"] .app-tile:hover{border-color:rgba(255,107,0,.35);background:var(--c-sidebar-active)}

/* 深色：表单控件兜底（防 Tailwind preflight 覆盖） */
[data-theme="dark"] input.fi,
[data-theme="dark"] select.fs,
[data-theme="dark"] textarea.fta,
[data-theme="dark"] .hdr-search input{
  background-color:var(--c-input-bg);
  color:var(--c-text);
  border-color:var(--c-border);
}
[data-theme="dark"] input.fi::placeholder,
[data-theme="dark"] textarea.fta::placeholder{color:var(--c-placeholder)}
[data-theme="dark"] .fi.org-pick-trigger[readonly],
[data-theme="dark"] .org-inline-panel-hd .fi{background:var(--c-input-bg)}

/* 深色：查询区 / 工具条（语义变量已覆盖，此处补边框与输入对比） */
[data-theme="dark"] .res-scope-bar,
[data-theme="dark"] .res-query-bar,
[data-theme="dark"] .res-table-toolbar,
[data-theme="dark"] .user-top-extra{border-color:var(--c-border)}
[data-theme="dark"] .res-scope-bar .fi,
[data-theme="dark"] .res-scope-bar .fs,
[data-theme="dark"] .user-top-query .fi,
[data-theme="dark"] .user-top-query .fs{background:var(--c-bg-card)}

/* 深色：状态徽章 / 标签对比度 */
[data-theme="dark"] .status-badge.st-ok{color:#95de64;border-color:rgba(82,196,26,.35)}
[data-theme="dark"] .status-badge.st-warn{color:#ffc53d;border-color:rgba(250,173,20,.35)}
[data-theme="dark"] .status-badge.st-err{color:#ff7875;border-color:rgba(245,34,45,.35)}
[data-theme="dark"] .status-badge.st-off{color:var(--c-text-3);border-color:var(--c-border)}
[data-theme="dark"] .tag-ok{background:var(--c-badge-ok-bg);color:#95de64}
[data-theme="dark"] .tag-warn{background:var(--c-badge-warn-bg);color:#ffc53d}
[data-theme="dark"] .tag-err{background:var(--c-badge-err-bg);color:#ff7875}
[data-theme="dark"] .st-off::before{background:var(--c-text-3)}

/* 深色：浮层 / 抽屉 / 组织选择器 */
[data-theme="dark"] .drawer,
[data-theme="dark"] .org-inline-panel,
[data-theme="dark"] .org-cfg-root-panel,
[data-theme="dark"] .org-ops-menu,
[data-theme="dark"] .wf-more-menu,
[data-theme="dark"] .wf-flow-add-menu{background:var(--c-bg-card);border-color:var(--c-border);box-shadow:var(--shadow)}
[data-theme="dark"] .org-inline-panel{border-color:var(--c-border)}
[data-theme="dark"] .org-inline-panel .tbl-wrap,
[data-theme="dark"] .org-cfg-root-wrap{background:var(--c-bg-card);border-color:var(--c-border)}
[data-theme="dark"] .org-ops-trigger{background:var(--c-btn-secondary-bg);border-color:var(--c-border)}

/* 深色：提示条 / 横幅 */
[data-theme="dark"] .banner-warn,
[data-theme="dark"] .res-form-tip,
[data-theme="dark"] .wf-http-tip,
[data-theme="dark"] .detail-pending-banner{background:var(--c-badge-warn-bg);border-color:rgba(250,173,20,.35);color:#ffc53d}
[data-theme="dark"] .msg-detail-alert,
[data-theme="dark"] .msg-detail-alert-err{background:var(--c-badge-err-bg);border-color:rgba(245,34,45,.35)}

/* 深色：列表悬停 / 选中态 */
[data-theme="dark"] .portal-msg-row:hover,
[data-theme="dark"] .msg-item:hover,
[data-theme="dark"] .res-admin-tree .res-tree-row:hover{background:var(--c-surface-hover)}
[data-theme="dark"] .msg-item.unread{background:var(--c-accent-soft)}
[data-theme="dark"] .tree-node.on,
[data-theme="dark"] .user-org-node.on{background:var(--c-accent-soft)}
[data-theme="dark"] .user-org-node:hover,
[data-theme="dark"] .tree-node:hover{background:var(--c-surface-hover)}

/* 深色：富文本 / 卡片 / 统计 */
[data-theme="dark"] .richtext-wrap,
[data-theme="dark"] .richtext-toolbar .rt-btn:hover,
[data-theme="dark"] .tag-input-box,
[data-theme="dark"] .tpl-ch-card,
[data-theme="dark"] .tpl-ch-sub,
[data-theme="dark"] .msg-detail-content,
[data-theme="dark"] .msg-detail-body-sec{background:var(--c-bg-card)}
[data-theme="dark"] .richtext-toolbar{background:var(--c-surface-muted)}
[data-theme="dark"] .stat{box-shadow:var(--shadow-card)}

/* 深色：滚动条（WebKit） */
[data-theme="dark"] ::-webkit-scrollbar{width:8px;height:8px}
[data-theme="dark"] ::-webkit-scrollbar-thumb{background:#3d4450;border-radius:4px}
[data-theme="dark"] ::-webkit-scrollbar-thumb:hover{background:#4e5563}
[data-theme="dark"] ::-webkit-scrollbar-track{background:transparent}
