/* ============================================================
   企业管理系统 — slate admin 视觉（源自 bs-slate-admin-console）
   oklch token：亮/暗双主题 + default/tangerine 预设；
   组件只引用 token，不写死颜色。
   ============================================================ */
:root{
  --radius:0.625rem;
  --background:oklch(1 0 0);
  --foreground:oklch(0.145 0 0);
  --card:oklch(1 0 0);
  --card-foreground:oklch(0.145 0 0);
  --popover:oklch(1 0 0);
  --popover-foreground:oklch(0.145 0 0);
  --primary:oklch(0.205 0 0);
  --primary-foreground:oklch(0.985 0 0);
  --secondary:oklch(0.97 0 0);
  --secondary-foreground:oklch(0.205 0 0);
  --muted:oklch(0.97 0 0);
  --muted-foreground:oklch(0.556 0 0);
  --accent:oklch(0.97 0 0);
  --accent-foreground:oklch(0.205 0 0);
  --destructive:oklch(0.577 0.245 27.325);
  --border:oklch(0.922 0 0);
  --input:oklch(0.922 0 0);
  --ring:oklch(0.708 0 0);
  --chart-1:oklch(0.87 0 0);
  --chart-2:oklch(0.556 0 0);
  --chart-3:oklch(0.439 0 0);
  --chart-4:oklch(0.371 0 0);
  --chart-5:oklch(0.269 0 0);
  --sidebar:oklch(0.985 0 0);
  --sidebar-foreground:oklch(0.145 0 0);
  --sidebar-accent:oklch(0.97 0 0);
  --sidebar-accent-foreground:oklch(0.205 0 0);
  --sidebar-border:oklch(0.922 0 0);
  --success:oklch(0.627 0.17 149.2);
  --warning:oklch(0.666 0.157 58.3);
  --sidebar-w:17rem;
  --sidebar-w-icon:3rem;
  --header-h:3rem;
  --font-sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI","Microsoft YaHei","PingFang SC",Roboto,"Helvetica Neue",Arial,sans-serif;
}
html.dark{
  --background:oklch(0.145 0 0);
  --foreground:oklch(0.985 0 0);
  --card:oklch(0.205 0 0);
  --card-foreground:oklch(0.985 0 0);
  --popover:oklch(0.205 0 0);
  --popover-foreground:oklch(0.985 0 0);
  --primary:oklch(0.922 0 0);
  --primary-foreground:oklch(0.205 0 0);
  --secondary:oklch(0.269 0 0);
  --secondary-foreground:oklch(0.985 0 0);
  --muted:oklch(0.269 0 0);
  --muted-foreground:oklch(0.708 0 0);
  --accent:oklch(0.269 0 0);
  --accent-foreground:oklch(0.985 0 0);
  --destructive:oklch(0.704 0.191 22.216);
  --border:oklch(1 0 0 / 10%);
  --input:oklch(1 0 0 / 15%);
  --ring:oklch(0.556 0 0);
  --sidebar:oklch(0.205 0 0);
  --sidebar-foreground:oklch(0.985 0 0);
  --sidebar-accent:oklch(0.269 0 0);
  --sidebar-accent-foreground:oklch(0.985 0 0);
  --sidebar-border:oklch(1 0 0 / 10%);
  --success:oklch(0.72 0.17 149.2);
  --warning:oklch(0.75 0.15 58.3);
}
/* ---- tangerine 预设 ---- */
html[data-theme-preset="tangerine"]{
  --card:oklch(1 0 0);
  --card-foreground:oklch(0.32 0 0);
  --popover:oklch(1 0 0);
  --popover-foreground:oklch(0.32 0 0);
  --primary:oklch(0.64 0.17 36.44);
  --primary-foreground:oklch(1 0 0);
  --secondary:oklch(0.97 0 264.54);
  --secondary-foreground:oklch(0.45 0.03 256.8);
  --muted:oklch(0.98 0 247.84);
  --muted-foreground:oklch(0.55 0.02 264.36);
  --accent:oklch(0.91 0.02 243.82);
  --accent-foreground:oklch(0.38 0.14 265.52);
  --border:oklch(0.9 0.01 247.88);
  --input:oklch(0.97 0 264.54);
  --ring:oklch(0.64 0.17 36.44);
  --chart-1:oklch(0.79 0.09 35.96);
  --chart-2:oklch(0.58 0.08 254.16);
  --chart-3:oklch(0.72 0.06 248.68);
  --chart-4:oklch(0.5 0.08 259.49);
  --chart-5:oklch(0.42 0.1 264.03);
  --sidebar:oklch(0.9 0 258.33);
  --sidebar-foreground:oklch(0.32 0 0);
  --sidebar-accent:oklch(0.91 0.02 243.82);
  --sidebar-accent-foreground:oklch(0.38 0.14 265.52);
  --sidebar-border:oklch(0.93 0.01 264.53);
  --background:oklch(0.94 0 236.5);
  --foreground:oklch(0.32 0 0);
}
html.dark[data-theme-preset="tangerine"]{
  --background:oklch(0.26 0.03 262.67);
  --foreground:oklch(0.92 0 0);
  --card:oklch(0.31 0.03 268.64);
  --card-foreground:oklch(0.92 0 0);
  --popover:oklch(0.29 0.02 268.4);
  --popover-foreground:oklch(0.92 0 0);
  --primary:oklch(0.64 0.17 36.44);
  --primary-foreground:oklch(1 0 0);
  --secondary:oklch(0.31 0.03 266.71);
  --secondary-foreground:oklch(0.92 0 0);
  --muted:oklch(0.31 0.03 266.71);
  --muted-foreground:oklch(0.72 0 0);
  --accent:oklch(0.34 0.06 267.59);
  --accent-foreground:oklch(0.88 0.06 254.13);
  --border:oklch(0.38 0.03 269.73);
  --input:oklch(0.38 0.03 269.73);
  --ring:oklch(0.64 0.17 36.44);
  --sidebar:oklch(0.31 0.03 267.74);
  --sidebar-foreground:oklch(0.92 0 0);
  --sidebar-accent:oklch(0.34 0.06 267.59);
  --sidebar-accent-foreground:oklch(0.88 0.06 254.13);
  --sidebar-border:oklch(0.38 0.03 269.73);
}

/* ============ base ============ */
*{box-sizing:border-box;border-color:var(--border)}
html,body{margin:0;padding:0}
body{
  font-family:var(--font-sans);
  background:var(--background);color:var(--foreground);
  font-size:14px;line-height:1.45;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
a.link{color:var(--foreground);text-decoration:underline;text-underline-offset:2px;cursor:pointer}
.tbl a.link{white-space:nowrap}
h1,h2,h3{margin:0;font-weight:600}
small{color:var(--muted-foreground)}
.muted{color:var(--muted-foreground)}
.mono{font-family:ui-monospace,Consolas,"Courier New",monospace;font-size:.92em}
.num{text-align:right;font-variant-numeric:tabular-nums}
.strong{font-weight:600}
svg.i{width:1rem;height:1rem;flex:none}

/* ============ 壳：侧栏 + 顶栏 ============ */
.shell{display:flex;height:100vh;overflow:hidden}
.sidebar{
  width:var(--sidebar-w);flex:none;display:flex;flex-direction:column;
  background:var(--sidebar);color:var(--sidebar-foreground);
  border-right:1px solid var(--sidebar-border);
  transition:width .2s ease,transform .2s ease;overflow:hidden;
}
.sb-head{padding:.5rem}
.sb-brand{display:flex;align-items:center;gap:.5rem;width:100%;padding:.375rem .5rem;border-radius:calc(var(--radius) - 2px)}
.sb-brand .logo{display:flex;align-items:center;justify-content:center;flex:none;color:var(--sidebar-foreground)}
.sb-brand strong{font-size:1rem;font-weight:600;white-space:nowrap}
.sb-content{flex:1;overflow-y:auto;overflow-x:hidden;padding:0 .5rem;scrollbar-width:thin}
.sb-group{padding:.5rem 0}
.sb-label{
  padding:0 .5rem;margin-bottom:.25rem;height:1.25rem;display:flex;align-items:center;
  font-size:.75rem;font-weight:500;color:color-mix(in oklab,var(--sidebar-foreground) 70%,transparent);
  white-space:nowrap;transition:opacity .15s;
}
.sb-item{
  display:flex;align-items:center;gap:.5rem;width:100%;
  height:2rem;padding:0 .5rem;border-radius:calc(var(--radius) - 2px);
  color:var(--sidebar-foreground);font-size:.875rem;text-align:left;white-space:nowrap;
}
.sb-item:hover{background:var(--sidebar-accent);color:var(--sidebar-accent-foreground)}
.sb-item.active{background:var(--sidebar-accent);color:var(--sidebar-accent-foreground);font-weight:500}
.sb-item .lbl{overflow:hidden;text-overflow:ellipsis}
.sb-foot{padding:.5rem;display:flex;flex-direction:column;gap:.5rem;border-top:1px solid var(--sidebar-border)}
.sb-user{
  display:flex;align-items:center;gap:.5rem;width:100%;
  padding:.375rem .5rem;border-radius:calc(var(--radius) - 2px);
}
.sb-user:hover{background:var(--sidebar-accent)}
.avatar{
  width:2rem;height:2rem;flex:none;border-radius:calc(var(--radius) - 2px);
  background:var(--muted);color:var(--muted-foreground);
  display:flex;align-items:center;justify-content:center;
  font-size:.75rem;font-weight:600;letter-spacing:.02em;
}
.sb-user .who{flex:1;min-width:0;display:grid;gap:.1rem}
.sb-user .who b{font-weight:500;font-size:.875rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sb-user .who span{font-size:.75rem;color:var(--muted-foreground);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sb-user .quit{
  display:flex;align-items:center;justify-content:center;flex:none;
  width:1.75rem;height:1.75rem;border-radius:calc(var(--radius) - 2px);color:var(--muted-foreground);
}
.sb-user .quit:hover{background:var(--accent);color:var(--accent-foreground)}

/* 折叠图标栏 */
.shell.sb-collapsed .sidebar{width:var(--sidebar-w-icon)}
.shell.sb-collapsed .sb-brand strong,
.shell.sb-collapsed .sb-item .lbl,
.shell.sb-collapsed .sb-label,
.shell.sb-collapsed .sb-user .who{display:none}
.shell.sb-collapsed .sb-item{justify-content:center;padding:0}
.shell.sb-collapsed .sb-brand{justify-content:center;padding:.375rem 0}
.shell.sb-collapsed .sb-user{justify-content:center;padding:.375rem 0}

.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{
  height:var(--header-h);flex:none;display:flex;align-items:center;justify-content:space-between;gap:.5rem;
  padding:0 1rem;border-bottom:1px solid var(--border);
  background:color-mix(in oklab,var(--background) 55%,transparent);
  backdrop-filter:blur(8px);
}
.topbar .lft,.topbar .rgt{display:flex;align-items:center;gap:.5rem}
.topbar .crumb{font-size:.875rem;color:var(--muted-foreground);white-space:nowrap}
.role-switch{display:flex;align-items:center;margin:0}
.role-switch .role-select{min-width:5.25rem;padding-left:.625rem;padding-right:1.5rem}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.icon-btn{
  display:flex;align-items:center;justify-content:center;
  width:1.75rem;height:1.75rem;border-radius:calc(var(--radius) - 2px);
  color:var(--foreground);
}
.icon-btn:hover{background:var(--accent)}
.vsep{width:1px;height:1rem;background:var(--border);margin:0 .5rem}
.select{
  appearance:none;-webkit-appearance:none;
  display:flex;align-items:center;gap:.375rem;
  height:2rem;padding:0 1.75rem 0 .75rem;font-size:.8125rem;
  border:1px solid var(--input);border-radius:calc(var(--radius) - 2px);
  background:var(--background) no-repeat right .5rem center;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23888' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  color:var(--foreground);cursor:pointer;
}
.content{flex:1;overflow-y:auto;padding:1.5rem}
.page{max-width:none;width:100%;margin-inline:0;display:flex;flex-direction:column;gap:1.5rem}

/* ============ 页头 / 卡片 ============ */
.page-title{margin:0;font-size:1.125rem;font-weight:600;letter-spacing:-.01em}
.page-title small{font-size:.8125rem;font-weight:400}
.page-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex-wrap:wrap}
.page-tip{color:var(--muted-foreground);margin:.15rem 0 0;font-size:.875rem}
.card{
  background:var(--card);color:var(--card-foreground);
  border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:0 1px 2px 0 rgb(0 0 0 / .05);
  padding:1.25rem;
}
.card-title{font-size:.9375rem;margin-bottom:1rem;display:flex;align-items:center;gap:.5rem}
.empty{color:var(--muted-foreground);text-align:center;padding:2.25rem 0}

/* ============ 就地说明 ============ */
.help-hint{position:relative;display:inline-flex;vertical-align:middle;margin-left:.15rem}
.help-hint-trigger{
  width:1rem;height:1rem;padding:0;border:1px solid var(--muted-foreground);
  border-radius:999px;background:transparent;color:var(--muted-foreground);
  font:inherit;font-size:.6875rem;line-height:1;display:inline-flex;
  align-items:center;justify-content:center;cursor:help;
}
.help-hint-trigger:hover,.help-hint-trigger:focus-visible{
  color:var(--foreground);border-color:var(--ring);outline:none;
  box-shadow:0 0 0 3px color-mix(in oklab,var(--ring) 25%,transparent)
}
.help-hint-popover{
  position:absolute;z-index:30;left:50%;top:calc(100% + .5rem);
  transform:translateX(-50%);width:max-content;max-width:min(22rem,calc(100vw - 2rem));
  padding:.5rem .65rem;background:var(--popover);color:var(--popover-foreground);
  border:1px solid var(--border);border-radius:calc(var(--radius) - 2px);
  box-shadow:0 8px 24px rgb(0 0 0 / .18);font-size:.78rem;line-height:1.5;
  text-align:left;white-space:normal;opacity:0;visibility:hidden;pointer-events:none;
  transition:opacity .12s ease;
}
.help-hint:hover .help-hint-popover,.help-hint:focus-within .help-hint-popover{opacity:1;visibility:visible}
@media (prefers-reduced-motion:reduce){.help-hint-popover{transition:none}}

/* ============ 指标卡 ============ */
.stat-grid{display:grid;gap:1rem;grid-template-columns:repeat(4,1fr)}
.stat{
  background:linear-gradient(to top,color-mix(in oklab,var(--primary) 5%,transparent),var(--card));
  border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:0 1px 2px 0 rgb(0 0 0 / .05);
  padding:1.25rem;display:flex;flex-direction:column;gap:.75rem;
}
html.dark .stat{background:var(--card)}
.stat .tile{
  width:1.75rem;height:1.75rem;border-radius:.5rem;
  border:1px solid var(--border);background:var(--muted);color:var(--muted-foreground);
  display:flex;align-items:center;justify-content:center;
}
.stat .stat-label{color:var(--muted-foreground);font-size:.8125rem}
.stat .row{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.stat .stat-num{font-size:1.75rem;font-weight:500;letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1}
.stat .stat-num small{font-size:.8125rem;font-weight:400}
.stat .stat-sub{color:var(--muted-foreground);font-size:.8125rem}

/* ============ 柱状图 ============ */
.bars{display:flex;align-items:flex-end;gap:1.5rem;height:190px;padding:6px 4px 0}
.bar-col{text-align:center;display:flex;flex-direction:column;justify-content:flex-end;height:100%}
.bar{width:2.75rem;background:var(--chart-2);opacity:.85;border-radius:4px 4px 0 0;margin:4px auto 0}
.bar-val{font-size:.75rem;color:var(--muted-foreground)}
.bar-label{margin-top:.5rem;font-size:.75rem;color:var(--muted-foreground);line-height:1.5}

/* ============ 表格 ============ */
.tbl-scroll{overflow-x:auto}
.tbl{width:100%;min-width:640px;border-collapse:collapse;font-size:.875rem}
.tbl th{
  text-align:left;font-weight:500;color:var(--muted-foreground);
  font-size:.8125rem;padding:.5rem .75rem;border-bottom:1px solid var(--border);white-space:nowrap;
}
.tbl th.num,.tbl td.num{text-align:right}
.tbl td{padding:.625rem .75rem;border-bottom:1px solid var(--border);vertical-align:middle}
.tbl tbody tr:last-child td{border-bottom:none}
.tbl tbody tr:hover td{background:color-mix(in oklab,var(--muted) 50%,transparent)}
.tbl tfoot td{border-top:1px solid var(--border);font-weight:500}

/* ============ 徽标 ============ */
.badge{
  display:inline-flex;align-items:center;gap:.25rem;
  border-radius:calc(var(--radius) - 4px);padding:.125rem .45rem;
  font-size:.75rem;font-weight:500;line-height:1.3;white-space:nowrap;
}
.badge svg{width:.75rem;height:.75rem}
.badge.ok{color:var(--success);background:color-mix(in oklab,var(--success) 12%,transparent)}
.badge.warn{color:var(--warning);background:color-mix(in oklab,var(--warning) 14%,transparent)}
.badge.bad{color:var(--destructive);background:color-mix(in oklab,var(--destructive) 10%,transparent)}
.badge.outline{background:transparent;color:var(--muted-foreground);border:1px solid var(--border);padding:.1rem .375rem}

/* ============ 按钮 ============ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:.375rem;
  height:2rem;padding:0 .75rem;font-size:.8125rem;font-weight:500;
  border:1px solid transparent;border-radius:calc(var(--radius) - 2px);
  cursor:pointer;background:transparent;color:var(--foreground);
  font-family:inherit;text-decoration:none;white-space:nowrap;
}
.btn:hover{background:var(--accent)}
.btn-primary,.btn.ok{background:var(--primary);color:var(--primary-foreground)}
.btn-primary:hover,.btn.ok:hover{opacity:.9;background:var(--primary);color:var(--primary-foreground)}
.btn-bad{background:var(--destructive);color:oklch(0.985 0 0)}
.btn-bad:hover{opacity:.9;background:var(--destructive);color:oklch(0.985 0 0)}
.btn-ghost{background:transparent}
.btn-ghost:hover{background:var(--accent)}
.btn-bad-ghost{border:1px solid var(--input);color:var(--destructive);background:var(--background)}
.btn-bad-ghost:hover{background:color-mix(in oklab,var(--destructive) 8%,transparent)}
.btn-sm{height:1.75rem;padding:0 .625rem;font-size:.78rem}
.btn-block{width:100%}
.btn-row{display:flex;gap:.5rem;margin-top:.75rem}
.scan-result-files{display:grid;gap:.75rem}
.scan-result-file{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem .75rem;margin:.25rem 0}
.scan-result-name{overflow-wrap:anywhere}
.scan-result-actions{display:inline-flex;align-items:center;gap:.5rem;white-space:nowrap}
.btn:disabled{opacity:.5;cursor:default}
.btn:disabled:hover{background:var(--primary)}
.btn-bad:disabled:hover{background:var(--destructive)}

/* ============ 表单 ============ */
.field{display:block;margin-bottom:.75rem}
.field>span{display:block;font-size:.8125rem;color:var(--muted-foreground);margin-bottom:.3rem}
.field input,.field select,.field textarea,
.filter-bar input,.filter-bar select{
  width:100%;height:2rem;padding:0 .625rem;
  border:1px solid var(--input);border-radius:calc(var(--radius) - 2px);
  background:var(--background);color:var(--foreground);
  font-size:.875rem;font-family:inherit;
}
.field textarea{height:auto;padding:.5rem .625rem;resize:vertical}
.field input:focus,.field select:focus,.field textarea:focus,
.filter-bar input:focus,.filter-bar select:focus{
  outline:none;border-color:var(--ring);box-shadow:0 0 0 3px color-mix(in oklab,var(--ring) 25%,transparent);
}
.field input:disabled,.field select:disabled{opacity:.6}
.form-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.25rem .875rem}
.field-wide{grid-column:1/-1}
.asset-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}
.asset-info{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem;margin:0}
.asset-info dt{color:var(--muted-foreground);font-size:.8125rem;margin-bottom:.3rem}
.asset-info dd{margin:0;overflow-wrap:anywhere}
.asset-wrap{max-width:24rem;overflow-wrap:anywhere}
.asset-text{white-space:pre-wrap;overflow-wrap:anywhere}
.asset-pagination{margin-top:1rem}
#asset-custom-category-field[hidden]{display:none}
.asset-summary-head,.asset-status-summary{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem 1.25rem;font-size:.8125rem}
.asset-summary-head{justify-content:space-between;margin-bottom:.75rem}
.asset-summary-head .card-title{margin:0}
.stat-grid.asset-summary-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
.asset-summary-grid .stat{min-width:0}
.asset-summary-grid .stat-num{font-size:clamp(1.25rem,1rem + .6vw,1.75rem);overflow-wrap:anywhere;line-height:1.25}
.asset-status-summary{margin:.75rem 0 1.25rem;font-variant-numeric:tabular-nums}
.asset-filter-summary{margin:0 0 1rem;padding:1rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--muted)}
.asset-filter-summary dl{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.75rem;margin:0}
.asset-filter-summary dl>div{min-width:0}
.asset-filter-summary dt{font-size:.8125rem;color:var(--muted-foreground);margin-bottom:.25rem}
.asset-filter-summary dd{margin:0;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
@media(max-width:1100px){.stat-grid.asset-summary-grid,.asset-filter-summary dl{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:768px){.asset-summary-grid .stat{padding:.75rem}}
.hr-section{margin-bottom:1rem}
.hr-person-cell{display:flex;align-items:center;gap:.75rem}
.hr-avatar{width:2.5rem;height:2.5rem;object-fit:cover;border-radius:.5rem}
.hr-photo-row{display:flex;gap:1.5rem;align-items:flex-start;flex-wrap:wrap}
.hr-portrait{width:120px;height:150px;object-fit:cover;border-radius:var(--radius);background:var(--muted);flex:none}
.hr-photo-placeholder{display:flex;align-items:center;justify-content:center;color:var(--muted-foreground);font-size:2rem}
.hr-photo-fields{flex:1;min-width:0}
.hr-photo-fields input[type=file]{height:auto;padding:.5rem;max-width:100%}
.hr-skills{display:grid;gap:.75rem;margin-top:1rem}
.hr-skill-row{display:grid;grid-template-columns:2fr 1fr 2fr 2fr auto;gap:.75rem;align-items:end;border-top:1px solid var(--border);padding-top:.75rem}
.hr-skill-row .field{min-width:0;margin:0}
.hr-save{display:flex;gap:1rem;align-items:center;flex-wrap:wrap}
.hr-points-form{border-bottom:1px solid var(--border);padding-bottom:1rem;margin-bottom:1rem}
@media(max-width:1100px){.hr-skill-row{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:768px){.hr-skill-row{grid-template-columns:minmax(0,1fr)}.hr-photo-fields{flex-basis:100%}.hr-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important}.hr-stat-grid .stat{padding:.75rem}.hr-stat-grid .stat-num{font-size:1.5rem}}
.barcode-video{display:block;width:100%;max-width:640px;max-height:360px;margin:1rem 0;object-fit:cover;border-radius:var(--radius)}
.barcode-video[hidden]{display:none}
.inventory-buttons{flex-wrap:wrap}
.inventory-buttons .btn[hidden]{display:none}
.chk.inventory-seen{white-space:normal;margin-top:1rem;line-height:1.6;align-items:flex-start}
@media(max-width:768px){.inventory-stats{grid-template-columns:repeat(2,minmax(0,1fr))!important}.inventory-stats .stat{padding:.75rem}.inventory-stats .stat-num{font-size:1.5rem}.inventory-seen input{flex-shrink:0}#inventory-scanner .btn{min-height:2.75rem}#inventory-scanner .field input,#inventory-scanner .field select{height:2.75rem}}
@media(max-width:768px){.asset-actions,.asset-info{grid-template-columns:1fr}}
.form-err{
  border:1px solid color-mix(in oklab,var(--destructive) 35%,transparent);
  color:var(--destructive);border-radius:calc(var(--radius) - 2px);
  padding:.5rem .75rem;margin-bottom:.75rem;font-size:.8125rem;
}
.chk{display:flex;align-items:center;gap:.4rem;color:var(--muted-foreground);font-size:.8125rem;white-space:nowrap}
.chk input{width:1rem;height:1rem;accent-color:var(--primary);cursor:pointer}

/* ============ 筛选栏 ============ */
.filter-bar{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap;padding:.75rem 1rem}
.filter-bar select,.filter-bar input{width:auto;min-width:8rem}
.filter-bar input[type="text"]{min-width:14rem;flex:1;max-width:20rem}
.filter-bar .btn{flex:none}

/* ============ 登录页 ============ */
.login-wrap{
  min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:var(--background);padding:1rem;
}
.login-card{
  width:24rem;background:var(--card);color:var(--card-foreground);
  border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:0 1px 2px 0 rgb(0 0 0 / .05);
  padding:2rem 2rem 1.75rem;text-align:center;
}
.login-brand{display:flex;justify-content:center;margin-bottom:.75rem;color:var(--foreground)}
.login-brand .logo{width:2.5rem;height:2.5rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--muted);display:flex;align-items:center;justify-content:center}
.login-brand svg{width:1.25rem;height:1.25rem}
.login-card h1{font-size:1.125rem}
.login-sub{color:var(--muted-foreground);margin:.25rem 0 1.25rem;font-size:.8125rem}
.login-card form{text-align:left}

/* ============ 应用中心 ============ */
.apps-wrap{min-height:100vh;background:var(--background);display:flex;flex-direction:column}
.apps-top{
  height:var(--header-h);flex:none;display:flex;align-items:center;justify-content:space-between;
  padding:0 1rem;border-bottom:1px solid var(--border);
  background:color-mix(in oklab,var(--background) 55%,transparent);backdrop-filter:blur(8px);
}
.apps-brand{display:flex;align-items:center;gap:.5rem;font-size:1rem;font-weight:600}
.apps-brand .logo{color:var(--foreground);display:flex}
.apps-user{font-size:.8125rem;color:var(--muted-foreground);display:flex;align-items:center;gap:.75rem}
.apps-user a.link{color:var(--foreground)}
.apps-body{flex:1;padding:3.75rem 1.5rem;max-width:96rem;margin:0 auto;width:100%}
.apps-title{font-size:1.375rem;margin-bottom:.25rem;letter-spacing:-.01em}
.apps-sub{color:var(--muted-foreground);margin:0 0 1.75rem;font-size:.875rem}
.apps-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:1rem;max-width:60rem}
.app-card{
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:0 1px 2px 0 rgb(0 0 0 / .05);
  padding:1.5rem 1.25rem;display:block;color:var(--card-foreground);
  transition:box-shadow .12s,transform .12s;
}
.app-card:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgb(0 0 0 / .1)}
.app-card .app-icon{
  width:2.5rem;height:2.5rem;border-radius:.5rem;border:1px solid var(--border);
  background:var(--muted);color:var(--muted-foreground);
  display:flex;align-items:center;justify-content:center;margin-bottom:.75rem;
}
.app-card .app-icon svg{width:1.25rem;height:1.25rem}
.app-card .app-name{font-size:1rem;font-weight:600;margin-bottom:.25rem}
.app-card .app-desc{font-size:.8125rem;color:var(--muted-foreground);line-height:1.6;min-height:2.6rem}
.app-card .app-enter{display:inline-block;margin-top:.875rem;color:var(--foreground);font-size:.8125rem;font-weight:500;text-decoration:underline;text-underline-offset:2px}
.app-card.disabled{opacity:.55;cursor:default}
.app-card.disabled:hover{transform:none;box-shadow:0 1px 2px 0 rgb(0 0 0 / .05)}
.app-card .app-soon{
  display:inline-block;margin-top:.875rem;font-size:.75rem;
  border:1px solid var(--border);color:var(--muted-foreground);border-radius:999px;padding:.1rem .55rem;
}

/* ============ 上传页 ============ */
.dropzone{
  border:1px dashed var(--input);border-radius:var(--radius);
  text-align:center;padding:2rem 1.25rem;cursor:pointer;
  transition:border-color .15s,background .15s;background:var(--card);
}
.dropzone:hover,.dropzone.drag{border-color:var(--ring);background:var(--accent)}
.dropzone .dz-icon{color:var(--muted-foreground);margin-bottom:.5rem;display:flex;justify-content:center}
.dropzone .dz-icon svg{width:1.5rem;height:1.5rem}
.dz-text{font-size:.9375rem;font-weight:500}
.dz-sub{color:var(--muted-foreground);font-size:.78rem;margin-top:.25rem}

.batch-bar{display:flex;align-items:center;gap:1rem;padding:.75rem 1.125rem;position:sticky;top:12px;z-index:5}
.batch-bar .batch-sum{flex:1;font-size:.875rem}
.batch-total{color:var(--foreground);font-size:1.1rem;font-variant-numeric:tabular-nums}
.inv-table td{vertical-align:middle}
.inv-table input{
  width:100%;min-width:5.4rem;border:1px solid transparent;background:transparent;
  border-radius:calc(var(--radius) - 2px);padding:.3rem .45rem;font-size:.8125rem;font-family:inherit;color:var(--foreground);
}
.inv-table input:hover{border-color:var(--input);background:var(--background)}
.inv-table input:focus{outline:none;border-color:var(--ring);background:var(--background);box-shadow:0 0 0 3px color-mix(in oklab,var(--ring) 25%,transparent)}
.inv-table input:disabled{color:var(--muted-foreground)}
.w-num{min-width:4.9rem;text-align:right}
.w-cat{min-width:5.8rem}
.fname-sm{font-size:.6875rem;color:var(--muted-foreground);margin-top:.15rem;max-width:12.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:.25rem}
.fname-sm svg{width:.75rem;height:.75rem}
.ferr{color:var(--destructive);font-size:.6875rem;margin-top:.15rem;max-width:9.5rem;line-height:1.4}
tr.inv-row.done td{background:color-mix(in oklab,var(--success) 6%,transparent)}
tr.inv-row.dup td{background:color-mix(in oklab,var(--warning) 8%,transparent)}
.inv-detail-row>td{background:color-mix(in oklab,var(--muted) 40%,transparent);padding:.75rem 1rem}
.inv-detail-row .form-grid{grid-template-columns:repeat(4,1fr)}
.inv-detail-row .items-box{border-top:none;margin-top:.6rem;padding-top:0}

/* 支付记录 */
.pay-cell{min-width:7.4rem}
.pay-cell.drag{outline:2px dashed var(--ring);outline-offset:-4px;background:var(--accent)}
.pay-cell .pay-hint{font-size:.6875rem;color:var(--muted-foreground);margin-top:.2rem}
.pay-prev{display:flex;gap:.5rem;align-items:center}
.pay-prev img{
  width:2.75rem;height:2.75rem;object-fit:cover;border-radius:calc(var(--radius) - 2px);
  border:1px solid var(--border);cursor:zoom-in;display:block;
}
.pay-name{font-size:.6875rem;color:var(--muted-foreground);max-width:6rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pay-thumb{
  height:5.5rem;max-width:12.5rem;object-fit:cover;border-radius:calc(var(--radius) - 2px);
  border:1px solid var(--border);display:block;margin-bottom:.25rem;
}

/* 明细表 */
.items-box{margin-top:.875rem;border-top:1px dashed var(--border);padding-top:.75rem}
.items-head{display:flex;align-items:center;gap:.6rem;font-size:.8125rem;color:var(--muted-foreground);margin-bottom:.5rem}
.items-head .btn{margin-left:auto}
.items-tbl th,.items-tbl td{padding:.375rem;white-space:nowrap}
.items-tbl input{
  width:100%;min-width:3.8rem;border:1px solid var(--input);border-radius:calc(var(--radius) - 4px);
  padding:.3rem .45rem;font-size:.78rem;font-family:inherit;background:var(--background);color:var(--foreground);
}
.items-tbl input:focus{outline:none;border-color:var(--ring);box-shadow:0 0 0 3px color-mix(in oklab,var(--ring) 25%,transparent)}
.items-tbl td:first-child{min-width:10.5rem}
.items-tbl td:first-child input{min-width:10.5rem}

/* ============ 详情页 ============ */
.detail-grid{display:grid;grid-template-columns:minmax(0,3fr) minmax(21rem,2fr);gap:1rem;align-items:start}
.admin-grid{display:grid;grid-template-columns:minmax(18rem,25rem) minmax(0,1fr);gap:1rem;align-items:start}
.user-settings-stack{display:grid;gap:1rem}
.app-permission-options{display:grid;gap:.5rem;margin:.5rem 0 .75rem}
.app-permission-option{display:flex;align-items:center;gap:.5rem;font-size:.8125rem;white-space:nowrap}
.app-permission-option input[type=checkbox]{width:1rem;height:1rem;min-height:0;margin:0;accent-color:var(--primary);flex-shrink:0}
.pdf-card{padding:.75rem}
.pdf-frame{width:100%;height:calc(100vh - 11.5rem);min-height:30rem;border:0;border-radius:calc(var(--radius) - 2px);background:var(--muted)}
.pdf-foot{display:flex;justify-content:space-between;align-items:center;padding:.6rem .25rem 0;font-size:.8125rem}
.kv{width:100%;border-collapse:collapse;font-size:.875rem}
.kv th{
  text-align:left;color:var(--muted-foreground);font-weight:500;white-space:nowrap;
  padding:.4rem .6rem .4rem 0;width:7rem;vertical-align:top;
}
.kv td{padding:.4rem 0;word-break:break-all}
.notice-bad{
  border:1px solid color-mix(in oklab,var(--destructive) 35%,transparent);
  color:var(--destructive);border-radius:var(--radius);padding:.75rem 1.125rem;
}
.ops{display:flex;gap:.375rem;align-items:center;flex-wrap:wrap}
.inline{display:inline}

/* ============ 提示气泡 ============ */
.toast{
  position:fixed;bottom:1.25rem;left:50%;transform:translateX(-50%);z-index:70;
  background:var(--primary);color:var(--primary-foreground);
  padding:.5rem .875rem;border-radius:calc(var(--radius) - 2px);
  font-size:.8125rem;box-shadow:0 8px 24px rgb(0 0 0 / .18);
  max-width:24rem;animation:fadein .2s;
}
.toast-err{background:var(--destructive);color:oklch(0.985 0 0)}
.task-publication-notice{max-width:min(30rem,calc(100vw - 2rem));bottom:4rem;overflow-wrap:anywhere}
#task-announcement-toggle[aria-pressed=true]{color:var(--chart-1)}
@keyframes fadein{from{opacity:0;transform:translate(-50%,8px)}}

/* ============ 响应式 ============ */
@media (max-width:1100px){
  .stat-grid{grid-template-columns:repeat(2,1fr)}
  .detail-grid,.admin-grid{grid-template-columns:1fr}
  .form-grid,.inv-detail-row .form-grid{grid-template-columns:1fr 1fr}
}
@media (max-width:768px){
  .sidebar{position:fixed;inset:0 auto 0 0;z-index:55;transform:translateX(-100%);width:var(--sidebar-w)!important}
  .shell.sb-mobile-open .sidebar{transform:translateX(0)}
  .shell.sb-collapsed .sb-brand strong,.shell.sb-collapsed .sb-item .lbl,
  .shell.sb-collapsed .sb-label,.shell.sb-collapsed .sb-user .who{display:initial}
  .shell.sb-collapsed .sb-item{justify-content:flex-start;padding:0 .5rem}
  .stat-grid{grid-template-columns:1fr}
  .content{padding:1rem}
  .form-grid,.inv-detail-row .form-grid{grid-template-columns:1fr}
}
.sb-overlay{position:fixed;inset:0;background:rgb(0 0 0 / .4);z-index:50}
