:root{--portal-top-h:36px;--portal-side-w:60px;--portal-bg:#f5f5f5;--portal-surface:#fafafa;--portal-top-bg:#fff;--portal-border:#e5e7eb;--portal-text:#333;--portal-muted:#374151;--portal-sub:#6b7280;--portal-accent:#096dd9;--portal-hover:#f3f4f6}
*{box-sizing:border-box;-ms-overflow-style:none;scrollbar-width:none}
*::-webkit-scrollbar{display:none;width:0;height:0}
html{min-width:1200px;height:100%}
body.portal{margin:0;padding:0;height:100vh;display:flex;flex-direction:column;min-width:1200px;overflow:hidden;font:14px/1.5 "Microsoft YaHei",sans-serif;color:var(--portal-text);background:var(--portal-bg)}
.portal-top{flex:0 0 var(--portal-top-h);display:flex;align-items:center;padding:0 clamp(4px,1.2vw,12px);background:var(--portal-top-bg);border-bottom:1px solid var(--portal-border);z-index:200;font-size:12px;font-weight:400}
/* 顶栏链接：一律无下划线（含 visited/hover/active） */
.portal-top a,
.portal-top a:link,
.portal-top a:visited,
.portal-top a:hover,
.portal-top a:active,
.portal-top a:focus{
	text-decoration:none!important;
	border-bottom:0!important;
	box-shadow:none;
}
.portal-top-nav{display:flex;align-items:center;gap:2px;flex:1;min-width:0;overflow:visible;flex-wrap:nowrap}
.portal-top-nav .portal-top-link,
.portal-top-nav>a{
	padding:0 8px;
	color:var(--portal-muted);
	text-decoration:none!important;
	white-space:nowrap;
	border-radius:0;
	font-size:12px;
	display:inline-block;
	line-height:var(--portal-top-h);
	box-sizing:border-box;
}
.portal-top-nav>.is-nav-overflow{display:none!important}
.is-hidden{display:none!important}
.portal-top-more .portal-top-more-panel{max-height:min(70vh,420px);overflow-y:auto;min-width:132px}
.portal-top-more>.portal-top-panel{left:auto;right:0}
.portal-top-nav .portal-top-link:hover,
.portal-top-nav>a:hover{color:#111;background:var(--portal-hover)}
/* 当前页高亮：强调色加粗，无下划线 */
.portal-top-nav .portal-top-link.active,
.portal-top-nav>a.active,
.portal-top-nav .portal-top-link.is-nav-on,
.portal-top-nav>a.is-nav-on,
.portal-top-nav .portal-top-link.active:hover,
.portal-top-nav>a.active:hover,
.portal-top-nav .portal-top-link.is-nav-on:hover,
.portal-top-nav>a.is-nav-on:hover,
.portal-top-nav .portal-top-link.active:visited,
.portal-top-nav>a.active:visited,
.portal-top-nav .portal-top-link.is-nav-on:visited,
.portal-top-nav>a.is-nav-on:visited{
	color:var(--portal-accent)!important;
	font-weight:700;
	background:transparent;
	text-decoration:none!important;
}
.portal-top-nav a.top-nav-home{margin-right:2px}
.portal-top-item{position:relative;flex:0 0 auto}
.portal-top-item:hover>.portal-top-link:not(.active),
.portal-top-item:focus-within>.portal-top-link:not(.active){color:#111;background:var(--portal-hover)}
.portal-top-item:hover>.portal-top-link.active,
.portal-top-item:focus-within>.portal-top-link.active{color:var(--portal-accent)!important;background:transparent}
.portal-top-panel{display:none;position:absolute;left:0;top:100%;z-index:220;min-width:160px;padding:10px 12px;background:#fff;border:1px solid var(--portal-border);box-shadow:0 6px 18px rgba(0,0,0,.08);box-sizing:border-box}
.portal-top-item:hover>.portal-top-panel,.portal-top-item:focus-within>.portal-top-panel{display:flex;gap:12px}
.portal-top-panel--sm{flex-direction:column;gap:2px;min-width:140px}
.portal-top-panel--sm a{display:block;padding:6px 8px;color:var(--portal-muted);text-decoration:none!important;white-space:nowrap;font-size:12px}
.portal-top-panel--sm a:hover{color:var(--portal-accent);background:var(--portal-hover)}
/* 网站导航：按内容收紧，不撑死宽 */
.portal-top-panel--map{width:max-content;max-width:min(640px,92vw);min-width:0;padding:8px 10px;gap:10px}
.portal-top-item--sitemap .portal-top-panel{left:auto;right:0}
.portal-top-panel-col{display:flex;flex-direction:column;gap:1px;min-width:0}
.portal-top-panel-col strong{display:block;margin:0 0 4px;padding:0 6px;font-size:12px;font-weight:600;color:#111;line-height:18px}
.portal-top-panel-col a{display:block;padding:2px 6px;color:var(--portal-muted);text-decoration:none!important;white-space:nowrap;font-size:12px;line-height:18px}
.portal-top-panel-col a:hover{color:var(--portal-accent);background:var(--portal-hover)}
.portal-top-panel--map .portal-top-panel-col{padding:0 2px}
body.home-shell .portal-top{overflow:visible}
body.home-shell .portal-top-nav{overflow:visible}
.portal-top-right{display:flex;align-items:center;gap:8px;margin-left:4px;flex-shrink:0;position:relative;overflow:visible}
.portal-top-right>a,
.portal-top-right .portal-top-link{
	padding:0 8px;
	color:var(--portal-muted);
	text-decoration:none!important;
	border-radius:0;
	border:none;
	background:none;
	cursor:pointer;
	font-size:12px;
	line-height:var(--portal-top-h);
	display:inline-block;
	box-sizing:border-box;
}
.portal-top-right>a:hover,
.portal-top-right .portal-top-link:hover{color:#111;background:var(--portal-hover)}
.portal-top-right>a.active,
.portal-top-right .portal-top-link.active,
.portal-top-right>a.is-nav-on,
.portal-top-right .portal-top-link.is-nav-on,
.portal-top-right>a.active:hover,
.portal-top-right .portal-top-link.active:hover,
.portal-top-right>a.is-nav-on:hover,
.portal-top-right .portal-top-link.is-nav-on:hover,
.portal-top-right>a.active:visited,
.portal-top-right .portal-top-link.active:visited,
.portal-top-right>a.is-nav-on:visited,
.portal-top-right .portal-top-link.is-nav-on:visited{
	color:var(--portal-accent)!important;
	font-weight:700;
	background:transparent;
	text-decoration:none!important;
}
.portal-top-right .portal-user a{color:#111;padding:0 6px;line-height:var(--portal-top-h);display:inline-block;text-decoration:none!important}
.portal-top-right .portal-user a:hover{color:#111;background:var(--portal-hover);text-decoration:none!important}
/* 右侧「网站导航」大面板向左展开，避免超出视口 */
.portal-top-right .portal-top-item--sitemap .portal-top-panel{left:auto;right:0}
.portal-mid{flex:1;min-height:0;display:flex;overflow:hidden}
.portal-mid.hide-left-nav .portal-left{display:none}
.portal-left,.portal-right{flex:0 0 var(--portal-side-w);width:var(--portal-side-w);min-width:var(--portal-side-w);max-width:var(--portal-side-w);background:var(--portal-surface);overflow-x:hidden;overflow-y:auto;z-index:100}
.portal-left{border-right:1px solid var(--portal-border)}
.portal-right{border-left:1px solid var(--portal-border)}
.portal-left .nav-item{display:block;padding:6px 4px;color:var(--portal-muted);text-decoration:none;font-size:12px;line-height:18px;text-align:center;white-space:nowrap}
.portal-left .nav-item:hover{color:var(--portal-accent)}
.portal-left .nav-item.active,.portal-left .nav-item.active:hover{color:var(--portal-accent);font-weight:500}
.portal-main{flex:1;min-width:0;overflow:auto;background:#fff}
.portal-right .panel-title{padding:6px 4px;font-size:11px;line-height:18px;color:var(--portal-sub);font-weight:600;text-align:center;white-space:nowrap}
.portal-right .panel-tools{display:block;padding:0}
.portal-right .tool-btn{display:block;width:100%;box-sizing:border-box;padding:6px 4px;font-size:12px;line-height:18px;color:var(--portal-muted);background:transparent;border:none;border-radius:0;cursor:pointer;text-decoration:none;text-align:center;white-space:nowrap}
.portal-right .tool-btn:hover{color:var(--portal-accent)}
.portal-right .tool-btn.active,.portal-right .tool-btn.active:hover{color:var(--portal-accent);font-weight:500}
.portal-page{padding:clamp(4px,.6vw,8px) clamp(4px,.6vw,8px) 24px;max-width:none}
.portal-page h1{font-size:1.25rem;font-weight:600;margin-bottom:6px;color:#111}
.portal-page .lead{color:var(--portal-sub);margin-bottom:16px;font-size:13px}
.portal-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:clamp(2px,.5vw,6px);margin-bottom:16px}
.portal-card{background:#fff;border:1px solid var(--portal-border);border-radius:0;padding:14px 16px}
.portal-card h3{font-size:12px;color:var(--portal-sub);font-weight:500;margin-bottom:6px}
.portal-card .val{font-size:1.5rem;font-weight:600;color:var(--portal-accent)}
.portal-card p{font-size:12px;color:var(--portal-sub);margin-top:4px}
.portal-section-title{font-size:12px;font-weight:600;margin-bottom:8px;color:var(--portal-sub)}
.portal-links{display:flex;flex-wrap:wrap;gap:6px}
.portal-links a{padding:6px 12px;background:#fff;border:1px solid var(--portal-border);border-radius:0;color:var(--portal-muted);text-decoration:none;font-size:12px}
.portal-links a:hover{background:var(--portal-hover);color:var(--portal-accent)}
body.portal-no-side .portal-left,body.portal-no-side .portal-right{display:none}
/* 首页 / 业务子页：整页文档滚动（盖过 portal 的 100vh + overflow:hidden） */
html:has(body.home-shell),
html:has(body.svc-shell){
	height:auto;
	min-height:100%;
	overflow-y:scroll;
	scrollbar-width:thin;
	scrollbar-color:#c1c1c1 #fff;
	-ms-overflow-style:auto;
}
html:has(body.home-shell)::-webkit-scrollbar,
html:has(body.svc-shell)::-webkit-scrollbar{display:block;width:12px}
html:has(body.home-shell)::-webkit-scrollbar-track,
html:has(body.svc-shell)::-webkit-scrollbar-track{background:#fff}
html:has(body.home-shell)::-webkit-scrollbar-thumb,
html:has(body.svc-shell)::-webkit-scrollbar-thumb{background:#c1c1c1;border:2px solid #fff}
html:has(body.home-shell)::-webkit-scrollbar-thumb:hover,
html:has(body.svc-shell)::-webkit-scrollbar-thumb:hover{background:#999}
body.home-shell,
body.svc-shell{
	height:auto !important;
	min-height:100vh;
	overflow:visible !important;
	background:#fff;
	/* 顶栏强调色与首页橙一致（盖过管理台蓝） */
	--portal-accent:#ff5000;
	--portal-hover:#fff5f0;
	--tb-rail-w:36px;
	--tb-rail-edge:5px;
	--tb-pad:5px;
	--tb-rail-reserve:calc(var(--tb-rail-edge) + var(--tb-rail-w) + var(--tb-pad));
}
body.home-shell .portal-mid,
body.svc-shell .portal-mid{
	flex:none;
	overflow:visible;
}
body.home-shell .portal-main,
body.svc-shell .portal-main{
	display:block;
	height:auto !important;
	max-height:none;
	overflow:visible !important;
	background:#fff;
	/* 顶栏下 5px 留白：加在父级，避免 .home margin 外边距折叠被吃掉 */
	padding:5px 0 0;
	margin:0;
}
body.home-shell .portal-top,
body.svc-shell .portal-top{
	position:sticky;
	top:0;
	border-bottom:0;
	/* 与下方内容区两侧留白对齐（双侧悬浮栏预留） */
	padding-left:var(--tb-rail-reserve,46px);
	padding-right:var(--tb-rail-reserve,46px);
	box-sizing:border-box;
}
body.home-shell .home{
	border-top:0;
	margin-top:0;
}
body.svc-shell .portal-top{
	overflow:visible;
}
body.svc-shell .portal-top-nav{
	overflow:visible;
}
.portal-bottom{
	flex:0 0 auto;
	display:flex;
	justify-content:space-between;
	align-items:center;
	gap:12px;
	padding:8px var(--tb-rail-reserve,46px);
	border-top:1px solid #e8e8e8;
	background:#fff;
	color:#999;
	font-size:12px;
	box-sizing:border-box;
}

/* 备案信息行：默认文档流全宽块（首页）；在右侧 flex column 容器内 flex:0 0 auto 吸附底部，不占正文滚动区 */
.portal-icp{
	flex:0 0 auto;
	text-align:center;
	padding:4px 0;
	font-size:11px;
	line-height:1.4;
	color:#999;
	box-sizing:border-box;
}
.portal-icp a{
	color:#888;
	text-decoration:none;
}
.portal-icp a:hover{
	color:#555;
	text-decoration:underline;
}
.xl-table{display:flex;flex-direction:column;width:100%;min-height:360px;font-size:12px;background:#fff;box-sizing:border-box;border:0}
.xl-table .xl-caption{background-color:#ecf0f5;color:#00897b;text-align:left;padding:0 10px;font-size:12px;line-height:30px;border:0;border-bottom:1px solid #ddd}
.xl-table .xl-toolbar{height:31px;background-color:#fff;display:flex;align-items:center;justify-content:flex-start;flex-wrap:nowrap;padding-right:4px;border:0;border-bottom:1px solid #ddd}
.xl-table .xl-toolbar.xl-kwbar{border-top:0}
.xl-table .xl-caption+.xl-toolbar{border-top:0}
.xl-table .xl-toolbar .xl-kw{border:1px solid #ddd;outline:none;padding:0 5px;line-height:24px;font-size:12px;height:26px;margin:2px 4px;min-width:160px;flex-shrink:0;background:#fff}
.xl-table .xl-toolbar .xl-kw:focus{outline:none;border-color:#40a9ff;border-width:1px;box-shadow:none}
.xl-table .xl-btn{color:#fff;outline:none;padding:2px 14px;display:inline-block;text-align:center;border-radius:2px;margin:3px 2px 3px 0;line-height:24px;font-size:12px;font-family:inherit;font-weight:400;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;border:0;cursor:pointer;text-decoration:none;flex-shrink:0;background-image:none}
.xl-table .xl-toolbar .xl-btn:first-child{margin-left:0}
.xl-table button.xl-btn{border:0;background-image:none;-webkit-appearance:none;appearance:none;font-family:inherit;font-weight:400}
.xl-table .xl-btn:hover{opacity:.88}
.xl-table .xl-scroll-host{flex:1;min-height:100px;position:relative;overflow:hidden;border:1px solid #ddd;border-top:0;background:#fff;box-sizing:border-box;display:flex;flex-direction:column}
/* fitContent：<=50 行按内容收紧；>50 行数据区限高 50*30 滚动 */
.xl-table.xl-fit-content{min-height:0}
.xl-table.xl-fit-content.is-fit-rows{height:auto!important}
.xl-table.xl-fit-content.is-fit-rows .xl-scroll-host{flex:0 0 auto;min-height:0;overflow:visible}
.xl-table.xl-fit-content.is-fit-rows .xl-wrap{flex:0 0 auto;overflow:visible}
/* fitColWidth：先按内容自然撑开，再由 JS 决定壳宽（≤父宽贴内容，＞父宽限宽横滚） */
.xl-table.xl-fit-cols{width:auto;max-width:100%;min-width:0;align-self:flex-start;box-sizing:border-box}
.xl-table.xl-fit-cols .xl-scroll-host{width:auto;max-width:100%;min-width:0;box-sizing:border-box;overflow:hidden}
.xl-table.xl-fit-cols .xl-wrap{width:auto;max-width:100%;min-width:0;overflow-x:auto;box-sizing:border-box}
.xl-table.xl-fit-cols.xl-fit-content.is-fit-rows .xl-scroll-host{overflow:hidden;max-width:100%}
.xl-table.xl-fit-cols.xl-fit-content.is-fit-rows .xl-wrap{overflow-x:auto;overflow-y:visible;max-width:100%}
.xl-table.xl-fit-cols.is-fit-shell-tight{align-self:flex-start}
.xl-table.xl-fit-cols.is-fit-shell-tight .xl-scroll-host,
.xl-table.xl-fit-cols.is-fit-shell-tight .xl-wrap{width:100%}
.xl-table.xl-fit-cols.is-fit-shell-wide{width:100%;max-width:100%;align-self:stretch;flex:1 1 auto}
.xl-table.xl-fit-cols.is-fit-shell-wide .xl-scroll-host,
.xl-table.xl-fit-cols.is-fit-shell-wide .xl-wrap{width:100%;max-width:100%}
.xl-table .xl-wrap{flex:1;min-height:0;overflow:auto;border:0;background:#fff;box-sizing:border-box;position:relative;scrollbar-width:none;-ms-overflow-style:none}
.xl-table .xl-wrap::-webkit-scrollbar{display:none;width:0;height:0}
.xl-table .xl-scroll-x,.xl-table .xl-scroll-y{display:block;opacity:0;visibility:hidden;pointer-events:none;cursor:pointer;position:absolute;z-index:20;border-radius:6px;background-color:rgba(0,255,255,.5);box-shadow:5px 3px 30px rgba(0,0,0,.25);overflow:hidden;transition:opacity 2s ease,visibility 0s linear 2s}
.xl-table .xl-scroll-x.xl-scroll-show,.xl-table .xl-scroll-y.xl-scroll-show{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .2s ease,visibility 0s}
.xl-table .xl-scroll-x{bottom:0;left:0;min-width:20px;height:5px}
.xl-table .xl-scroll-y{top:0;right:0;width:5px;min-height:20px}
/* 默认按配置像素宽；合计≤容器时由 JS 加 .xl-grid-fluid 切回 100% 自适应 */
.xl-table .xl-grid{width:auto;max-width:none;border-collapse:separate;border-spacing:0;table-layout:fixed;border:0}
.xl-table .xl-grid.xl-grid-fluid{width:100%!important;min-width:0!important;max-width:none!important}
.xl-table .xl-grid.xl-grid-fluid col,
.xl-table .xl-grid.xl-grid-fluid th,
.xl-table .xl-grid.xl-grid-fluid td{min-width:0!important;max-width:none!important}
.xl-table .xl-grid.xl-grid-fit{table-layout:auto;width:max-content;min-width:max-content;max-width:none}
.xl-table .xl-grid.xl-grid-fit col{width:auto;min-width:0;max-width:none}
.xl-table .xl-grid.xl-grid-fit .xl-rowno{width:44px}
/* 按内容撑开时不要用省略号把自然宽量矮；列宽由内容决定 */
.xl-table .xl-grid.xl-grid-fit th,
.xl-table .xl-grid.xl-grid-fit td{overflow:visible;text-overflow:clip;max-width:none}
.xl-table .xl-grid.xl-grid-fit thead th{overflow:visible;text-overflow:clip}
.xl-table .xl-grid th,.xl-table .xl-grid td{border:0;border-right:1px solid #ddd;border-bottom:1px solid #ddd;padding:4px 8px;line-height:22px;text-align:left;vertical-align:middle;overflow:hidden;text-overflow:ellipsis;font-size:12px;font-family:inherit;font-weight:400;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-clip:padding-box;box-sizing:border-box}
.xl-table .xl-grid th:last-child,.xl-table .xl-grid td:last-child{border-right:0}
.xl-table .xl-grid thead th{position:relative;background:#fafafa;font-weight:400;color:#333;z-index:2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-shadow:none}
.xl-table .xl-grid thead tr:first-child th{position:sticky;top:0;z-index:3;font-weight:500;color:#262626;height:30px;box-sizing:border-box;border-bottom:1px solid #ddd}
.xl-table .xl-grid thead tr.xl-search-row th{position:sticky;top:30px;z-index:2;background:#fafafa;font-weight:normal;padding:0;height:30px;box-sizing:border-box;border-bottom:0}
.xl-table .xl-grid tbody tr.xl-head-shadow td{position:sticky;top:var(--xl-head-h,60px);height:1px;line-height:0;font-size:0;padding:0;border:0;background:#ddd;z-index:11;overflow:visible;pointer-events:none;vertical-align:top}
.xl-table .xl-grid tbody tr.xl-head-shadow:hover td{background:transparent}
.xl-table .xl-grid thead tr.xl-search-row th.xl-search-on{background:#fff}
.xl-table .xl-grid thead tr.xl-search-sep{display:none}
.xl-table .xl-grid thead tr.xl-search-row .xl-input{display:block;width:100%;height:100%;max-width:100%;overflow:hidden;margin:0;padding:0;background:#fff}
.xl-table .xl-grid thead tr.xl-search-row .xl-input input{border:1px solid transparent;border-radius:0;outline:none;padding:0 8px;line-height:30px;height:30px;width:100%;max-width:100%;min-width:0;font-size:12px;box-sizing:border-box;display:block;background:#fff}
.xl-table .xl-grid thead tr.xl-search-row .xl-input input:focus{outline:none;border-color:#40a9ff;border-width:1px;box-shadow:none;background:#fff}
.xl-table .xl-grid th.sort,
.xl-table .xl-grid th.asc,
.xl-table .xl-grid th.desc{cursor:pointer;padding-right:18px;position:relative}
.xl-table .xl-grid th.sort::after,
.xl-table .xl-grid th.asc::after,
.xl-table .xl-grid th.desc::after{position:absolute;right:4px;top:50%;transform:translateY(-50%);color:#bbb;font-size:11px;line-height:1;pointer-events:none}
.xl-table .xl-grid th.sort::after{content:'⇅'}
.xl-table .xl-grid th.asc::after{content:'↑';color:#24b7e5}
.xl-table .xl-grid th.desc::after{content:'↓';color:#24b7e5}
.xl-table .xl-grid thead tr:first-child th.xl-col-drag{cursor:grab}
.xl-table .xl-grid thead tr:first-child th.xl-col-drag:active{cursor:grabbing}
.xl-table .xl-grid thead tr:first-child th.xl-col-dragging{opacity:.45;background:#e6f4ff}
.xl-table .xl-grid thead tr:first-child th.xl-col-drag-over{box-shadow:inset 2px 0 0 #40a9ff;background:#f0f7ff}
.xl-table .xl-grid .xl-rowno{width:44px;text-align:center;color:#888}
.xl-table .xl-grid thead tr.xl-search-row th.xl-search-clear-cell.xl-rowno{padding:0;text-align:center;vertical-align:middle;background:#fff}
.xl-table .xl-search-clear{display:block;width:100%;height:30px;border:0;background:transparent;cursor:pointer;color:#999;font-size:18px;line-height:30px;padding:0;font-family:inherit;margin:0 auto}
.xl-table .xl-search-clear:hover{color:#ff4d4f;background:#fff1f0}
.xl-table .xl-input input{border:1px solid #ddd;outline:none;padding:0 5px;line-height:20px;width:100%;max-width:100%;min-width:0;font-size:12px;box-sizing:border-box;display:block;background:#fff}
.xl-table .xl-input input:focus{outline:none;border-color:#40a9ff;border-width:1px;box-shadow:none}
.xl-table .xl-grid tbody td{white-space:nowrap}
/* 末行贴齐可视区底边（含滚到底）时去掉底边，避免与 scroll-host 叠双线；有空隙时保留 */
.xl-table.is-row-flush-bottom .xl-grid tbody>tr:last-child>td{border-bottom:0}
.xl-table .xl-grid tbody .xl-num-up{color:#ef5350}
.xl-table .xl-grid tbody .xl-num-down{color:#26a69a}
.xl-table .xl-grid tbody tr:hover td{background-color:#f9f9f9}
.xl-table .xl-grid tbody tr.active td{background-color:#d9edf7}
.xl-table .xl-grid tbody tr.xl-row-unconfirmed td{background-color:#fff1f0}
.xl-table .xl-grid tbody tr.xl-row-unconfirmed:hover td{background-color:#ffe7e6}
.xl-table .xl-grid tbody tr.xl-row-unconfirmed.active td{background-color:#ffccc7}
.xl-table .xl-grid tbody tr.xl-row-confirmed td{background-color:#e6f4ff}
.xl-table .xl-grid tbody tr.xl-row-confirmed:hover td{background-color:#d6ebff}
.xl-table .xl-grid tbody tr.xl-row-confirmed.active td{background-color:#bae0ff}
.xl-table .xl-grid tbody tr.xl-row-exception td{background-color:#fff7e6}
.xl-table .xl-grid tbody tr.xl-row-exception:hover td{background-color:#ffefd1}
.xl-table .xl-grid tbody tr.xl-row-exception.active td{background-color:#ffe7ba}
.xl-table .xl-tfoot{flex-shrink:0;height:30px;border:1px solid #ddd;border-top:0;background-color:#f5f5f5;font-size:12px;display:flex;flex-direction:row;align-items:center;width:100%;box-sizing:border-box}
.xl-table .xl-pager-left{width:30px;flex-shrink:0}
.xl-table .xl-pager-center{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:center;min-width:0;overflow:hidden;white-space:nowrap;box-sizing:border-box}
.xl-table .xl-pager-right{display:flex;flex-direction:row;align-items:center;margin-left:auto;padding-right:10px;flex-shrink:0;white-space:nowrap}
.xl-table .xl-pager-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:30px;cursor:pointer;border:0;background:transparent;font-size:14px;color:#666;padding:0;flex-shrink:0;line-height:30px}
.xl-table .xl-pager-btn:hover{background-color:#fff;color:#24b7e5}
/* 页码区吃满中间剩余宽度，数字尽量多；overflow 供 JS 用 scrollWidth 探测撑破 */
.xl-table .xl-pager-num{display:flex;flex-direction:row;align-items:center;justify-content:center;flex:1;min-width:0;overflow:hidden;line-height:30px;height:30px}
.xl-table .xl-pager-num>span{padding:0 6px;display:inline-block;cursor:pointer;line-height:30px;flex-shrink:0;min-width:18px;text-align:center}
.xl-table .xl-pager-num>span:hover{background-color:#fff}
.xl-table .xl-pager-num>span.active{color:#24b7e5;font-weight:bold}
.xl-table .xl-pager-count{display:inline-block;line-height:30px;color:#666;max-width:220px;overflow:hidden;text-overflow:ellipsis}
.xl-table .xl-pager-size{display:inline-block;line-height:30px;padding-right:10px}
.xl-table .xl-pager-size select{border:1px solid #ddd;font-size:12px;height:22px;background:#fff;outline:none;border-radius:2px;padding:0 4px;color:#333;cursor:pointer;box-sizing:border-box;font-family:inherit;transition:border-color .15s,box-shadow .15s}
.xl-table .xl-pager-size select:hover{border-color:#bbb}
.xl-table .xl-pager-size select:focus,.xl-table .xl-pager-size select:focus-visible{outline:none;border-color:#40a9ff;box-shadow:0 0 0 2px rgba(64,169,255,.12)}
.xl-table .xl-act{color:#24b7e5;background:none;border:none;cursor:pointer;font-size:12px;padding:0;margin-right:8px;white-space:nowrap}
.xl-table .xl-act:hover{text-decoration:underline}
.xl-table .xl-empty td{height:48px;vertical-align:middle;border-bottom:1px solid #ddd}
.xl-table .xl-empty td.xl-empty-msg{text-align:center;color:#8b949e;white-space:normal}
.xl-table .xl-empty td.xl-empty-msg.xl-empty-err{color:#cf222e}
.xl-table .xl-cell-link{color:#0969da;text-decoration:none}
.xl-table .xl-cell-link:hover{text-decoration:underline}
.xl-table .xl-cell-img{display:block;width:16px;height:16px;margin:0 auto;object-fit:contain;vertical-align:middle}
.xl-table .xl-search-row .xl-input input.select,.xl-table .xl-search-row .xl-input input.number,.xl-table .xl-search-row .xl-input input.date,.xl-table .xl-search-row .xl-input input.time,.xl-table .xl-search-row .xl-input input.datetime{cursor:pointer}
.xl-table .xl-search-row .xl-input input.select[readonly],.xl-table .xl-search-row .xl-input input.number[readonly],.xl-table .xl-search-row .xl-input input.date[readonly],.xl-table .xl-search-row .xl-input input.time[readonly],.xl-table .xl-search-row .xl-input input.datetime[readonly]{caret-color:transparent}
.xl-range-search{position:fixed;min-width:325px;max-width:calc(100vw - 16px);background:#fff;border:1px solid #ddd;box-sizing:border-box;font-size:12px;overflow:hidden}
.xl-range-search .row{width:100%;box-sizing:border-box;margin:0;padding:0}
.xl-range-search .row.xl-range-fields{display:flex;align-items:center;justify-content:center;flex-wrap:nowrap;gap:4px;padding:8px 10px;background:#fafafa;border-bottom:1px solid #f0f0f0}
.xl-range-search[data-stype="datetime"]{min-width:370px}
.xl-range-search .row.xl-range-actions{display:flex;align-items:center;justify-content:flex-end;gap:6px;padding:6px 10px 8px;background:#fff}
.xl-range-search .row>input{width:130px;line-height:24px;height:26px;flex:0 0 auto;margin:0;border:1px solid #ddd;padding:0 6px;font-size:12px;box-sizing:border-box;background:#fff;border-radius:2px}
.xl-range-search .row>input:focus{outline:none;border-color:#40a9ff;box-shadow:0 0 0 1px rgba(64,169,255,.15)}
.xl-range-search .row>span{flex:0 0 20px;width:20px;text-align:center;color:#666;line-height:26px}
.xl-range-search .row>button{text-align:center;border-radius:2px;border:1px solid #ddd;font-weight:normal;margin:0;padding:0 12px;height:26px;line-height:24px;font-size:12px;cursor:pointer;background:#fff;color:#333;transition:background .15s,border-color .15s}
.xl-range-search .row>button:hover{background:#f5f5f5;border-color:#ccc}
.xl-range-search .row>.xl-range-ok{background:#00897b;border-color:#00897b;color:#fff}
.xl-range-search .row>.xl-range-ok:hover{background:#00796b;border-color:#00796b}
.xl-range-search .row>.xl-range-ko:hover{background:#fafafa;border-color:#bbb}
.xl-select-search{position:fixed;background:#fff;border:1px solid #ddd;box-sizing:border-box;font-size:12px;max-width:calc(100vw - 16px);max-height:240px;overflow:auto}
.xl-select-search ul{list-style:none;margin:0;padding:0;background:#fff}
.xl-select-search ul li{padding:4px 8px;font-size:12px;cursor:pointer;line-height:20px;font-weight:normal;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.xl-select-search ul li:hover{background:#24b7e5;color:#fff}
.xl-ms-search{position:fixed;background:#fff;border:1px solid #ddd;box-sizing:border-box;font-size:12px;max-width:calc(100vw - 16px);max-height:260px;overflow:auto;z-index:10001}
.xl-ms-search ul{list-style:none;margin:0;padding:4px 0;background:#fff}
.xl-ms-search ul li{padding:0;margin:0}
.xl-ms-search label{display:flex;align-items:center;gap:6px;padding:5px 10px;cursor:pointer;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.xl-ms-search label:hover{background:#e6f7ff}
.xl-ms-search input[type=checkbox]{margin:0;flex-shrink:0;cursor:pointer}
.xl-ms-search-actions{display:flex;justify-content:flex-end;gap:8px;padding:6px 8px;border-top:1px solid #eee;background:#fafafa}
.xl-ms-search-actions button{border:1px solid #ddd;background:#fff;border-radius:2px;padding:2px 10px;font-size:12px;cursor:pointer;line-height:22px;font-family:inherit}
.xl-ms-search-actions .xl-ms-search-ok{background:#1890ff;border-color:#1890ff;color:#fff}
.xl-ms-search-actions button:hover{opacity:.88}
.xl-dict-tags{display:flex;flex-wrap:wrap;gap:4px;align-items:center;padding:2px 0;line-height:20px}
.xl-dict-tag{display:inline-block;padding:0 8px;border-radius:2px;background:#f0f5ff;color:#1890ff;font-size:12px;line-height:20px;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis;font-weight:400}
.xl-dict-tag-empty{background:#f5f5f5;color:#999}
.xl-datetime{width:252px;font-size:12px;background:#fff;border:1px solid #ddd;box-sizing:border-box;line-height:1}
.xl-datetime table{width:100%;border-collapse:collapse;table-layout:fixed;text-align:center;margin:0}
.xl-datetime th,.xl-datetime td{width:36px;text-align:center;padding:0;border:0;vertical-align:middle;font-weight:normal}
.xl-datetime .ymd{margin-bottom:-1px}
.xl-datetime .ymd thead th{height:30px;line-height:30px}
.xl-datetime .xl-dt-ym{width:110px;font-weight:bold;color:#333;letter-spacing:.5px}
.xl-datetime .xl-dt-nav{display:inline-flex;align-items:center;justify-content:center;border:0;background:transparent;cursor:pointer;padding:0;width:100%;height:30px;color:#666;font-size:14px;line-height:1;transition:color .15s}
.xl-datetime .xl-dt-nav:hover{color:#24b7e5}
.xl-datetime .xl-dt-nav-ym{font-size:12px;font-weight:bold}
.xl-datetime .ymd tbody tr.xl-dt-wk td{color:#999;font-size:11px;line-height:24px;height:24px;cursor:default}
.xl-datetime .ymd tbody td.xl-dt-day{line-height:26px;height:26px;cursor:pointer;user-select:none;color:#333;border-radius:2px}
.xl-datetime .ymd tbody td.xl-dt-day:hover{background:#f5f5f5}
.xl-datetime .ymd tbody td.xl-dt-day.active{font-weight:bold;color:#24b7e5;background:transparent}
.xl-datetime .hms{border-top:1px solid #f0f0f0;padding:2px 0 4px}
.xl-datetime .hms td{line-height:22px;border:0!important;color:#333}
.xl-datetime .hms .xl-dt-h,.xl-datetime .hms .xl-dt-m,.xl-datetime .hms .xl-dt-s{
	display:inline-block;width:28px;height:22px;box-sizing:border-box;margin:0 auto;
	padding:0;border:1px solid transparent;border-radius:2px;
	text-align:center;font-weight:bold;font-size:13px;color:#333;background:transparent;
	outline:none;line-height:20px
}
.xl-datetime .hms .xl-dt-h:hover,.xl-datetime .hms .xl-dt-m:hover,.xl-datetime .hms .xl-dt-s:hover{border-color:#e5e5e5;background:#fafafa}
.xl-datetime .hms .xl-dt-h:focus,.xl-datetime .hms .xl-dt-m:focus,.xl-datetime .hms .xl-dt-s:focus{border-color:#24b7e5;background:#fff}
.xl-datetime .hms .xl-dt-sep{color:#999;width:12px}
.xl-datetime .xl-dt-nav-hms{height:20px;width:28px;margin:0 auto}
.xl-datetime .xl-dt-icon{display:inline-block;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent}
.xl-datetime .xl-dt-icon-up{border-bottom:5px solid #666}
.xl-datetime .xl-dt-icon-down{border-top:5px solid #666}
.xl-datetime .xl-dt-nav-hms:hover .xl-dt-icon-up{border-bottom-color:#24b7e5}
.xl-datetime .xl-dt-nav-hms:hover .xl-dt-icon-down{border-top-color:#24b7e5}
.xl-datetime .xl-dt-quick{display:flex;gap:6px;padding:6px 8px 8px;border-top:1px solid #f0f0f0}
.xl-datetime .xl-dt-quick-btn{
	flex:1;height:26px;border:1px solid #e5e5e5;border-radius:3px;background:#fafafa;
	color:#555;font-size:12px;cursor:pointer;line-height:1;padding:0
}
.xl-datetime .xl-dt-quick-btn:hover{color:#24b7e5;border-color:#24b7e5;background:#f0fbff}
.xl-table .xl-input input.date,.xl-table .xl-input input.datetime,.xl-table .xl-input input.time{cursor:pointer;background-repeat:no-repeat;background-position:right 6px center;padding-right:22px;background-color:#fff}
.xl-table .xl-input input.date,.xl-table .xl-input input.datetime{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23bbb' stroke-width='2'%3E%3Crect x='3' y='4' width='18' height='18' rx='2'/%3E%3Cline x1='16' y1='2' x2='16' y2='6'/%3E%3Cline x1='8' y1='2' x2='8' y2='6'/%3E%3Cline x1='3' y1='10' x2='21' y2='10'/%3E%3C/svg%3E")}
.xl-range-search .row.xl-range-fields>input.date{width:108px}
.xl-range-search .row.xl-range-fields>input.datetime{width:152px}
.xl-range-search .row.xl-range-fields>input.date,.xl-range-search .row.xl-range-fields>input.datetime{cursor:pointer;background-repeat:no-repeat;background-position:right 4px center;padding-right:20px;background-color:#fff}
.xl-range-search .row.xl-range-fields>input.date,.xl-range-search .row.xl-range-fields>input.datetime{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23bbb' stroke-width='2'%3E%3Crect x='3' y='4' width='18' height='18' rx='2'/%3E%3Cline x1='16' y1='2' x2='16' y2='6'/%3E%3Cline x1='8' y1='2' x2='8' y2='6'/%3E%3Cline x1='3' y1='10' x2='21' y2='10'/%3E%3C/svg%3E")}

.xl-mod{position:fixed;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,.1);z-index:500;display:none}
.xl-pop{--xl-pop-bar-h:40px;position:fixed;background:#fff;border:1px solid #d9d9d9;box-shadow:0 4px 16px rgba(0,0,0,.12);z-index:501;display:none;box-sizing:border-box;min-width:280px;min-height:120px;font-family:inherit;border-radius:2px;overflow:hidden}
.xl-pop-hd{display:flex;align-items:center;background:#ecf0f5;border-bottom:1px solid #e1e1e1;color:#00897b;height:var(--xl-pop-bar-h);min-height:var(--xl-pop-bar-h);cursor:move;user-select:none;box-sizing:border-box;padding:0 0 0 14px}
.xl-pop-title{flex:1;font-size:13px;font-weight:500;display:block;line-height:var(--xl-pop-bar-h);pointer-events:none;color:#00897b;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.xl-pop-close{align-self:stretch;flex:0 0 var(--xl-pop-bar-h);width:var(--xl-pop-bar-h);border:0;border-left:1px solid #e1e1e1;background:transparent;color:#999;font-size:20px;line-height:1;cursor:pointer;padding:0;margin:0;display:flex;align-items:center;justify-content:center;font-family:inherit;font-weight:400;-webkit-font-smoothing:antialiased}
.xl-pop-close:hover{color:#fff;background:#ff4d4f;border-left-color:#ff4d4f}
.xl-pop-ctx{font-size:12px;overflow:auto;box-sizing:border-box;width:100%;padding:14px 16px 16px;background:#fff}
.xl-pop-ft{display:flex;align-items:center;justify-content:flex-end;gap:8px;background:#f5f5f5;border-top:1px solid #e1e1e1;height:var(--xl-pop-bar-h);min-height:var(--xl-pop-bar-h);padding:0 14px;box-sizing:border-box}
.xl-pop-ok{background:#00897b;border:0;border-radius:2px;color:#fff;cursor:pointer;font-size:12px;height:28px;line-height:28px;padding:0 14px;font-family:inherit;font-weight:400;-webkit-font-smoothing:antialiased}
.xl-pop-ok:hover{opacity:.88}
.xl-pop-ko{background:#fff;border:1px solid #ddd;border-radius:2px;color:#666;cursor:pointer;font-size:12px;height:28px;line-height:28px;padding:0 14px;font-family:inherit;font-weight:400;-webkit-font-smoothing:antialiased}
.xl-pop-ko:hover{background:#fafafa;border-color:#ccc}
.xl-form-msg{display:none;margin:0 0 12px;padding:6px 10px;border-radius:2px;border:1px solid #ffe3e0;background:#fff2f0;color:#ea4a36;font-size:12px;line-height:20px;word-break:break-word}
.xl-form-msg.show{display:block}
.xl-form{width:100%;font-size:12px;line-height:18px;background:#fff;box-sizing:border-box}
.xl-form .xl-input{display:flex;align-items:stretch;width:100%;margin-bottom:10px;box-sizing:border-box;border-radius:2px;overflow:hidden}
.xl-form .xl-input:last-child{margin-bottom:0}
.xl-form .xl-input .xl-label{flex:0 0 80px;display:flex;align-items:center;justify-content:center;gap:2px;padding:0 10px;border:1px solid #e8e8e8;border-right:0;background:#f7f8fa;line-height:24px;height:30px;box-sizing:border-box;color:#555;white-space:nowrap;font-weight:400;-webkit-font-smoothing:antialiased}
.xl-form .xl-input .xl-label>b{color:#ff4d4f;font-weight:400;line-height:1;margin-left:1px}
.xl-form .xl-input.xl-input-area .xl-label{align-items:flex-start;padding-top:6px;height:auto;align-self:stretch;min-height:64px}
.xl-form .xl-input.xl-input-file{align-items:stretch}
.xl-form .xl-input.xl-input-file .xl-label{height:auto!important;align-self:stretch;align-items:center;min-height:30px}
.xl-form .xl-input input,.xl-form .xl-input textarea,.xl-form .xl-input select{flex:1;min-width:0;border:1px solid #e8e8e8;outline:none;padding:0 10px;line-height:24px;font-size:12px;box-sizing:border-box;background:#fff;font-family:inherit;font-weight:400;-webkit-font-smoothing:antialiased;transition:border-color .15s,box-shadow .15s}
.xl-form .xl-input input,.xl-form .xl-input select{height:30px;line-height:28px}
.xl-form .xl-input input:focus,.xl-form .xl-input textarea:focus,.xl-form .xl-input select:focus{border-color:#40a9ff;box-shadow:0 0 0 2px rgba(64,169,255,.12);position:relative;z-index:1}
.xl-form .xl-input:focus-within .xl-label{border-color:#40a9ff;background:#f0f7ff;color:#333}
.xl-form .xl-input.xl-input-file:focus-within .xl-file-host{border-color:#40a9ff;box-shadow:0 0 0 2px rgba(64,169,255,.12)}
.xl-form .xl-input textarea{resize:none;min-height:64px;padding-top:5px;padding-bottom:5px;line-height:20px}
.xl-form .xl-error{flex:0 0 auto;padding:4px 0 0 8px;color:#ea4a36;font-size:12px;line-height:18px}
.xl-form .xl-error-con{display:inline-block;padding:2px 10px;border-radius:2px;border:1px solid #ffe3e0;background:#fff2f0;white-space:nowrap}
/**下拉多选：选项 value/name，值以逗号分隔存储*/
.xl-ms{flex:1;min-width:0;position:relative;font-size:12px;font-family:inherit}
.xl-ms-field{display:flex;align-items:center;flex-wrap:wrap;gap:4px;min-height:30px;padding:2px 28px 2px 8px;border:1px solid #e8e8e8;background:#fff;box-sizing:border-box;cursor:pointer;line-height:22px;transition:border-color .15s,box-shadow .15s}
.xl-ms-field:hover{border-color:#c8c8c8}
.xl-ms.open .xl-ms-field,.xl-ms-field:focus{border-color:#40a9ff;box-shadow:0 0 0 2px rgba(64,169,255,.12);outline:none}
.xl-input:focus-within .xl-ms-field{border-color:#40a9ff;background:#fff}
.xl-ms-ph{color:#bfbfbf;line-height:24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.xl-ms-tags{display:flex;flex-wrap:wrap;gap:4px;flex:1;min-width:0}
.xl-ms-tag{display:inline-flex;align-items:center;max-width:100%;padding:0 6px;border-radius:2px;background:#f0f5ff;color:#1890ff;line-height:20px;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.xl-ms-arrow{position:absolute;right:8px;top:50%;width:0;height:0;margin-top:-3px;border:5px solid transparent;border-top-color:#999;pointer-events:none}
.xl-ms.open .xl-ms-arrow{margin-top:-8px;border-top-color:transparent;border-bottom-color:#999}
.xl-ms-panel{position:fixed;z-index:10003;background:#fff;border:1px solid #ddd;box-shadow:0 2px 8px rgba(0,0,0,.12);box-sizing:border-box;max-height:220px;overflow:auto;min-width:160px;font-size:12px}
.xl-ms-panel ul{list-style:none;margin:0;padding:4px 0}
.xl-ms-panel li{padding:0;margin:0}
.xl-ms-panel label{display:flex;align-items:center;gap:6px;padding:5px 10px;cursor:pointer;line-height:20px;color:#333;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.xl-ms-panel label:hover{background:#e6f7ff}
.xl-ms-panel input[type=checkbox]{margin:0;flex-shrink:0;cursor:pointer}
.xl-ms-empty{padding:8px 10px;color:#999;text-align:center}
.xl-ms-value{display:none}
/** 管理后台 Tab 页布局：flex 链撑满 portal-main，表格分页条贴底 */
.ui-console{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}
.ui-tabs{display:flex;align-items:flex-end;flex-shrink:0;position:relative;z-index:2;padding:0;margin:0;border-bottom:1px solid #dcdfe6;background:#fff}
.ui-tab{padding:4px 12px;font-size:12px;line-height:20px;color:#303133;background:#f5f7fa;border:1px solid #dcdfe6;border-bottom:none;border-radius:0;cursor:pointer;margin:0 0 0 -1px;position:relative;font-weight:400;font-family:inherit;-webkit-appearance:none;appearance:none;box-sizing:border-box;min-height:0}
.ui-tabs .ui-tab:first-child{margin-left:0}
.ui-tab:hover:not(.active){color:#303133;background:#ecf0f5}
.ui-tab.active{color:#303133;background:#fff;margin-bottom:-1px;padding-bottom:5px;z-index:1;font-weight:400}
.ui-tab-pane{display:none;flex:1;min-height:0;flex-direction:column;overflow:hidden;background:#fff}
.ui-tab-pane.active{display:flex!important}
.ui-table-host{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;width:100%}
.ui-table-host>div{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;width:100%}
.ui-table-host .xl-meta-grid-inner{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;width:100%}
.ui-table-host>.xl-table,.ui-table-host .xl-table,.ui-tab-pane>.xl-table{flex:1;min-height:0!important;height:auto!important;margin:0;max-height:none;display:flex;flex-direction:column}
.ui-console .xl-table{min-height:0}
.portal-main{display:flex;flex-direction:column;min-height:0;overflow:hidden;height:100%}
.portal-main>.portal-page{flex:1;min-height:0;height:100%;display:flex;flex-direction:column;box-sizing:border-box;padding-bottom:0!important}
.portal-page>.ui-console,.portal-page>.xl-meta-page{flex:1;min-height:0;height:100%;display:flex;flex-direction:column}
.portal-page>.xl-table,.portal-page>[id$="-table"].xl-table{flex:1;min-height:0;height:100%!important;margin:0}
.xl-btn-cell{display:inline-block;padding:0 8px;line-height:20px;font-size:12px;border-radius:2px;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;box-sizing:border-box}
.xl-pop-preview{min-width:280px;max-width:96vw;box-sizing:border-box}
.xl-pop-preview .xl-pop-ctx{width:auto!important;box-sizing:border-box;padding:14px 16px 16px}
.xl-pop-ctx .xl-meta-form{width:100%;min-width:0;box-sizing:border-box}
.xl-meta-form{display:flex;flex-wrap:wrap;align-items:flex-start;align-content:flex-start;width:100%;box-sizing:border-box;--xl-form-gap:12px;gap:10px var(--xl-form-gap)}
.xl-meta-form.xl-form .xl-meta-field.xl-input{width:auto;max-width:100%}
.xl-meta-form .xl-meta-field{display:flex;box-sizing:border-box;min-width:0;padding-right:0;margin-bottom:0}
.xl-meta-form .xl-meta-field .xl-label{flex:0 0 var(--xl-label-w,80px)!important;width:var(--xl-label-w,80px)!important;min-width:var(--xl-label-w,80px)!important;height:auto!important;min-height:30px}
.xl-meta-form .xl-meta-field.xl-input-area{align-items:stretch}
.xl-meta-form .xl-meta-field.xl-input-area .xl-label{align-items:center!important;align-self:stretch;padding-top:0!important;min-height:calc(var(--field-rows,1) * 30px + 4px)}
.xl-meta-form .xl-meta-field.xl-input-area textarea{min-height:calc(var(--field-rows,1) * 30px + 4px)!important;height:calc(var(--field-rows,1) * 30px + 4px)!important;flex:1}
.xl-meta-form .xl-meta-field.xl-input-file{align-items:stretch}
.xl-meta-form .xl-meta-field.xl-input-file .xl-label{align-self:stretch!important;align-items:center!important;justify-content:center;height:auto!important;min-height:30px;padding-top:0!important}
.xl-meta-form .xl-meta-field input,.xl-meta-form .xl-meta-field select,.xl-meta-form .xl-meta-field textarea{flex:1;min-width:0}
.xl-meta-form .xl-meta-empty{width:100%;padding:24px 0;text-align:center;color:#999;font-size:12px}
.xl-meta-form input[readonly],.xl-meta-form textarea[readonly],.xl-meta-form select[disabled]{background:#fafafa;color:#666}
.xl-meta-form .xl-file-host{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;border:1px solid #e8e8e8;border-left:0;box-sizing:border-box;background:#fff;padding:6px 8px}
.xl-meta-form .xl-file-zone{border:1px dashed #d9d9d9;border-radius:2px;padding:10px 12px;text-align:center;cursor:pointer;background:#fafafa;transition:border-color .2s,background .2s;flex:1;display:flex;align-items:center;justify-content:center;min-height:30px;box-sizing:border-box}
.xl-meta-form .xl-file-zone:hover,.xl-meta-form .xl-file-zone.is-drag{border-color:#1890ff;background:#f0f7ff}
.xl-meta-form .xl-file-hint{font-size:12px;color:#888}
.xl-meta-form .xl-file-input{position:absolute;width:0;height:0;opacity:0;pointer-events:none}
.xl-meta-form .xl-file-status{font-size:12px;color:#666;word-break:break-all;line-height:18px;min-height:18px;padding:0 2px}
.xl-meta-form .xl-file-status.is-err{color:#ff4d4f}
.xl-meta-form .xl-input-pop{align-items:stretch}
.xl-meta-form .xl-input-pop .xl-label{align-self:stretch!important;align-items:center!important;justify-content:center;height:auto!important;min-height:30px;padding-top:0!important}
.xl-meta-form .xl-input-pop .xl-pop-field-host{flex:1;min-width:0;display:flex;align-items:stretch;gap:0;border:1px solid #e8e8e8;background:#fff;box-sizing:border-box;min-height:30px}
.xl-meta-form .xl-input-pop:focus-within .xl-label{border-color:#40a9ff;background:#f0f7ff;color:#333}
.xl-meta-form .xl-input-pop:focus-within .xl-pop-field-host{border-color:#40a9ff;box-shadow:0 0 0 2px rgba(64,169,255,.12)}
.xl-meta-form .xl-pop-display{flex:1;min-width:0;height:30px;line-height:28px;border:0!important;box-shadow:none!important;cursor:pointer;background:#fff;padding:0 10px;box-sizing:border-box}
.xl-meta-form .xl-pop-clear{flex:0 0 28px;width:28px;height:30px;border:0;border-left:1px solid #e8e8e8;background:#fafafa;color:#999;font-size:16px;line-height:30px;cursor:pointer;padding:0;box-sizing:border-box}
.xl-meta-form .xl-pop-clear:hover{color:#ff4d4f;background:#fff1f0}
.xl-pop-picker-ctx{padding:0!important;overflow:hidden}
.xl-pop-picker-grid-host{height:100%;min-height:280px;box-sizing:border-box}
.xl-pop-picker-grid-host .xl-meta-grid-inner{height:100%}
.xl-pop-picker .xl-table .xl-tfoot{border-bottom:0}
.xl-pop-picker .xl-pop-ft{border-top:1px solid #ddd}
.xl-pop-picker-mask{z-index:9000}
.xl-pop-picker{z-index:9001}
.xl-pop-preview-grid{min-width:480px;max-width:96vw;box-sizing:border-box}
.xl-pop-preview-grid .xl-pop-ctx{width:100%!important;box-sizing:border-box;padding:0;display:flex;flex-direction:column;overflow:hidden}
.xl-pop-preview-grid .xl-pop-ctx .xl-meta-grid-inner{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;width:100%}
.xl-pop-preview-grid .xl-pop-ctx .xl-table{flex:1;min-height:0;display:flex;flex-direction:column;margin:0}
.xl-pop-preview-grid .xl-table{min-height:0}
.xl-pop-preview-grid .xl-table .xl-wrap{border:0}
.xl-pop-preview-grid .xl-table .xl-tfoot{border-left:0;border-right:0;border-bottom:0;border-top:1px solid #ddd}
.xl-meta-grid-host{flex:1;min-height:180px;display:flex;flex-direction:column;overflow:hidden;width:100%}
.xl-meta-grid-host .xl-meta-grid-inner{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}
.xl-meta-grid-host .xl-table{flex:1;min-height:0;display:flex;flex-direction:column;margin:0}
.xl-meta-grid-host .xl-table.xl-fit-cols{flex:0 1 auto;align-self:flex-start;width:auto;max-width:100%}
.xl-meta-page{flex:1;min-height:0;display:flex;flex-direction:column}
.xl-meta-page .xl-meta-grid-inner{flex:1;min-height:0;display:flex;flex-direction:column}
.xl-meta-grid-empty{width:100%;padding:32px 0;text-align:center;color:#999;font-size:12px}
