/* ============================================================
   AI 知识库系统 —— 工作台（Workbench）风格
   设计基调：左侧固定导航栏 + 顶部条 + 内容区，
   浅灰背景、白色卡片、单一克制的主色、细边框与轻阴影，
   不使用渐变/毛玻璃等花哨效果，追求专业、清爽、可长期阅读的界面。
   全站不依赖任何外部图标库/字体库，图标见 icons.php（内联 SVG）。
   ============================================================ */

:root{
  --kb-primary:#3452d9;
  --kb-primary-dark:#2a41b3;
  --kb-primary-light:#eaedfd;
  --kb-accent:#0f9488;
  --kb-bg:#f4f5f7;
  --kb-surface:#ffffff;
  --kb-sidebar-bg:#ffffff;
  --kb-border:#e4e6ea;
  --kb-border-soft:#edeef1;
  --kb-text:#161a22;
  --kb-muted:#666b78;
  --kb-muted-soft:#9297a3;
  --kb-danger:#d1394f;
  --kb-danger-bg:#fcedef;
  --kb-success:#158a5c;
  --kb-success-bg:#eaf7f1;
  --kb-warning:#b5730f;
  --kb-warning-bg:#fdf3e6;
  --kb-radius:12px;
  --kb-radius-sm:8px;
  --kb-shadow:0 1px 2px rgba(20,22,30,.04), 0 1px 8px rgba(20,22,30,.04);
  --kb-shadow-lg:0 16px 40px rgba(20,22,30,.16);

  --kb-sidebar-w:236px;
  --kb-topbar-h:56px;

  /* 兼容旧命名，逐步统一到 --kb-* 变量 */
  --assets-primary:var(--kb-primary);
  --assets-surface:var(--kb-surface);
  --assets-border:var(--kb-border);
  --assets-text:var(--kb-text);
  --assets-muted:var(--kb-muted);
  --assets-radius:var(--kb-radius);
  --assets-shadow:var(--kb-shadow);
}

*{box-sizing:border-box;}
html{-webkit-text-size-adjust:100%;}
body{
  margin:0;
  color:var(--kb-text);
  background:var(--kb-bg);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  font-size:14.5px;
  line-height:1.55;
}
button,input,select,textarea{font:inherit;color:inherit;}
button{cursor:pointer;}
button:disabled,input:disabled,select:disabled{cursor:not-allowed;opacity:.6;}
a{color:var(--kb-primary);text-decoration:none;}
a:hover{text-decoration:underline;}
code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;}
body.assets-body-locked{overflow:hidden;}

.kb-icon{display:inline-block;vertical-align:-2px;flex-shrink:0;}

.assets-container{width:min(100% - 48px,1280px);margin-inline:auto;}

/* ============================== 整体外壳：侧边栏 + 主区域 ============================== */
.kb-shell{
  display:flex;
  min-height:100vh;
}

/* ------------------------------ 左侧导航栏 ------------------------------ */
.kb-sidebar{
  position:sticky;
  top:0;
  align-self:flex-start;
  height:100vh;
  width:var(--kb-sidebar-w);
  flex:0 0 var(--kb-sidebar-w);
  display:flex;
  flex-direction:column;
  background:var(--kb-sidebar-bg);
  border-right:1px solid var(--kb-border);
  z-index:50;
}
.kb-sidebar-brand{
  display:flex;align-items:center;gap:10px;
  padding:18px 18px 16px;
  color:var(--kb-text);font-size:15.5px;font-weight:800;letter-spacing:-.01em;
  border-bottom:1px solid var(--kb-border-soft);
}
.kb-sidebar-brand:hover{color:var(--kb-text);text-decoration:none;}
.kb-sidebar-brand .kb-brand-mark{
  display:flex;align-items:center;justify-content:center;
  width:30px;height:30px;border-radius:8px;flex-shrink:0;
  background:var(--kb-primary);color:#fff;
}

.kb-sidebar-nav{
  flex:1;min-height:0;overflow-y:auto;
  display:flex;flex-direction:column;gap:2px;
  padding:12px 10px;
}
.kb-sidebar-section{
  margin:14px 8px 6px;
  font-size:11px;font-weight:700;letter-spacing:.04em;
  color:var(--kb-muted-soft);text-transform:uppercase;
}
.kb-sidebar-link{
  display:flex;align-items:center;gap:10px;
  padding:9px 12px;border-radius:var(--kb-radius-sm);
  color:var(--kb-muted);font-size:13.5px;font-weight:600;
  border-left:3px solid transparent;
  transition:background .12s,color .12s;
}
.kb-sidebar-link:hover{color:var(--kb-text);text-decoration:none;background:var(--kb-border-soft);}
.kb-sidebar-link-active{
  color:var(--kb-primary-dark);
  background:var(--kb-primary-light);
  border-left-color:var(--kb-primary);
}
.kb-sidebar-link-active:hover{color:var(--kb-primary-dark);}

.kb-sidebar-footer{
  padding:12px 10px calc(env(safe-area-inset-bottom,0px) + 12px);
  border-top:1px solid var(--kb-border-soft);
  display:flex;flex-direction:column;gap:6px;
}
.kb-user-chip{
  display:flex;align-items:center;gap:9px;
  padding:8px 10px;border-radius:var(--kb-radius-sm);
}
.kb-user-chip .kb-avatar{
  display:flex;align-items:center;justify-content:center;
  width:28px;height:28px;border-radius:50%;
  background:var(--kb-primary);color:#fff;
  font-size:12px;font-weight:800;flex-shrink:0;
}
.kb-user-chip-text{display:flex;flex-direction:column;min-width:0;line-height:1.3;}
.kb-user-chip-name{font-size:13px;font-weight:700;color:var(--kb-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.kb-user-role{font-size:11px;color:var(--kb-muted-soft);font-weight:500;}
.kb-sidebar-logout{color:var(--kb-muted);}
.kb-sidebar-logout:hover{color:var(--kb-danger);background:var(--kb-danger-bg);}

/* 手机端侧边栏遮罩层（默认隐藏，展开时显示） */
.kb-sidebar-overlay{
  display:none;
  position:fixed;inset:0;
  background:rgba(15,17,23,.32);
}
.kb-sidebar-overlay.assets-show{display:block;}

/* ------------------------------ 右侧主区域 ------------------------------ */
.kb-main{
  flex:1;min-width:0;
  display:flex;flex-direction:column;
}
.kb-topbar{
  position:sticky;top:0;z-index:40;
  display:flex;align-items:center;gap:14px;
  height:var(--kb-topbar-h);flex:0 0 var(--kb-topbar-h);
  padding:0 20px;
  background:rgba(244,245,247,.92);
  border-bottom:1px solid var(--kb-border);
}
.kb-page-title{margin:0;font-size:15.5px;font-weight:700;color:var(--kb-text);}

.kb-sidebar-toggler{
  display:none;
  align-items:center;justify-content:center;
  width:34px;height:34px;flex-shrink:0;
  color:var(--kb-text);border:1px solid var(--kb-border);border-radius:var(--kb-radius-sm);
  background:#fff;
}
.kb-sidebar-toggler:hover{background:var(--kb-border-soft);}

.kb-content{flex:1;min-width:0;padding-top:4px;}
.kb-footer{padding:18px 0 28px;}

/* ------------------------------ 手机端响应式 ------------------------------ */
@media (max-width:900px){
  .kb-sidebar-toggler{display:flex;}
  .kb-sidebar{
    position:fixed;
    top:0;left:0;bottom:0;
    height:100vh;
    transform:translateX(-100%);
    box-shadow:var(--kb-shadow-lg);
    transition:transform .18s ease;
  }
  .kb-sidebar.kb-sidebar-show{transform:translateX(0);}
  .assets-container{width:min(100% - 32px,1280px);}
}

/* ============================== 卡片 / 表单 / 按钮 ============================== */
.assets-card{
  border:1px solid var(--kb-border);
  border-radius:var(--kb-radius);
  background:var(--kb-surface);
  box-shadow:var(--kb-shadow);
  overflow:hidden;
}
.assets-card-header{
  padding:14px 18px;font-weight:700;font-size:14.5px;
  border-bottom:1px solid var(--kb-border-soft);background:#fafbfc;
  display:flex;align-items:center;gap:8px;
}
.assets-card-body{padding:18px;}

.assets-form-label{display:inline-block;margin-bottom:6px;font-weight:600;font-size:13px;color:var(--kb-text);}
.assets-form-control,.assets-form-select{
  display:block;width:100%;min-height:40px;padding:8px 12px;
  color:var(--kb-text);border:1px solid var(--kb-border);border-radius:var(--kb-radius-sm);
  outline:0;background:#fff;transition:border-color .15s,box-shadow .15s;
}
.assets-form-select{padding-right:28px;}
.assets-form-control:focus,.assets-form-select:focus{
  border-color:var(--kb-primary);box-shadow:0 0 0 3.5px rgba(52,82,217,.14);
}
.assets-form-control-sm,.assets-form-select-sm{min-height:33px;padding:5px 9px;font-size:12.5px;}
.assets-form-text{margin-top:5px;color:var(--kb-muted);font-size:12px;}
.assets-form-check{display:flex;align-items:center;gap:7px;}
.assets-form-check-input{width:16px;height:16px;accent-color:var(--kb-primary);}
.assets-form-check-label{margin:0;font-size:13px;}

.assets-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  min-height:40px;padding:8px 16px;
  color:#fff;border:1px solid transparent;border-radius:var(--kb-radius-sm);
  background:var(--kb-primary);font-weight:600;font-size:13.5px;line-height:1.2;white-space:nowrap;
  transition:background .15s,border-color .15s,transform .1s;
}
.assets-btn:hover{color:#fff;text-decoration:none;background:var(--kb-primary-dark);}
.assets-btn:active{transform:translateY(1px);}
.assets-btn-sm{min-height:32px;padding:6px 11px;font-size:12.5px;border-radius:7px;}
.assets-btn-primary{background:var(--kb-primary);}
.assets-btn-primary:hover{background:var(--kb-primary-dark);}
.assets-btn-secondary{background:#6b7280;}
.assets-btn-secondary:hover{background:#565d68;}
.assets-btn-outline-primary,.assets-btn-outline-secondary,.assets-btn-outline-success,.assets-btn-outline-danger,.assets-btn-outline-warning{
  background:#fff;
}
.assets-btn-outline-primary{color:var(--kb-primary);border-color:#c3caf6;}
.assets-btn-outline-primary:hover{background:var(--kb-primary-light);color:var(--kb-primary-dark);}
.assets-btn-outline-secondary{color:#475569;border-color:#d7dbe3;}
.assets-btn-outline-secondary:hover{background:var(--kb-border-soft);color:#1f2937;}
.assets-btn-outline-success{color:#0f7a4f;border-color:#b7e4cf;}
.assets-btn-outline-success:hover{background:var(--kb-success-bg);}
.assets-btn-outline-danger{color:var(--kb-danger);border-color:#f2c1c9;}
.assets-btn-outline-danger:hover{background:var(--kb-danger-bg);}
.assets-btn-outline-warning{color:var(--kb-warning);border-color:#f2d8a8;}
.assets-btn-outline-warning:hover{background:var(--kb-warning-bg);}
.assets-btn-close{
  position:relative;flex:0 0 auto;width:32px;height:32px;padding:0;border:0;border-radius:8px;background:0 0;
}
.assets-btn-close::after,.assets-btn-close::before{
  position:absolute;top:15px;left:7px;width:18px;height:2px;background:var(--kb-muted);content:"";border-radius:2px;
}
.assets-btn-close::before{transform:rotate(45deg);}
.assets-btn-close::after{transform:rotate(-45deg);}
.assets-btn-close:hover{background:var(--kb-border-soft);}

/* ============================== 提示 / 徽标 ============================== */
.assets-alert{position:relative;margin:0;padding:12px 16px;border:1px solid transparent;border-radius:var(--kb-radius-sm);font-size:13.5px;}
.assets-alert-success{color:#0e6b45;border-color:#bfe8d4;background:var(--kb-success-bg);}
.assets-alert-info{color:#0a5b8a;border-color:#bfe0f2;background:#eaf5fb;}
.assets-alert-warning{color:#8a5c15;border-color:#f2debd;background:var(--kb-warning-bg);}
.assets-alert-danger{color:#9c2e42;border-color:#f0c4cd;background:var(--kb-danger-bg);}

.assets-badge{
  display:inline-flex;align-items:center;gap:4px;
  padding:3px 9px;color:#fff;border-radius:999px;font-size:11.5px;font-weight:700;white-space:nowrap;line-height:1.5;
}
.assets-bg-danger{background:var(--kb-danger);}
.assets-bg-secondary{background:#8b93a1;}
.assets-bg-warning{color:#3f2a00;background:#e2a53f;}
.assets-bg-success{background:var(--kb-success);}

/* ============================== 表格 ============================== */
.assets-table-responsive{width:100%;overflow-x:auto;}
.assets-table{width:100%;border-collapse:collapse;background:#fff;font-size:13.5px;}
.assets-table td,.assets-table th{padding:12px 14px;text-align:left;border-bottom:1px solid var(--kb-border-soft);vertical-align:middle;}
.assets-table th{font-weight:700;white-space:nowrap;color:#374151;font-size:12.5px;text-transform:none;}
.assets-table-dark{color:#374151;background:#fafbfc;}
.assets-table-dark th{color:#374151;}
.assets-table-hover tbody tr{transition:background .12s;}
.assets-table-hover tbody tr:hover{background:#f7f8fa;}
.assets-table-sm td,.assets-table-sm th{padding:8px 10px;}
.assets-table-bordered td,.assets-table-bordered th{border:1px solid var(--kb-border-soft);}
.assets-align-middle{vertical-align:middle;}

/* ============================== 分页 / Tabs ============================== */
.assets-pagination{display:flex;gap:5px;margin:0;padding:0;list-style:none;flex-wrap:wrap;}
.assets-page-link{
  display:inline-flex;align-items:center;justify-content:center;min-width:34px;min-height:34px;
  padding:5px 9px;border:1px solid var(--kb-border);border-radius:var(--kb-radius-sm);background:#fff;font-size:13px;
}
.assets-page-link:hover{text-decoration:none;background:var(--kb-primary-light);}
.assets-page-item.assets-active .assets-page-link{color:#fff;border-color:var(--kb-primary);background:var(--kb-primary);}

.assets-tabs{display:flex;gap:4px;margin-bottom:18px;border-bottom:1px solid var(--kb-border);overflow-x:auto;scrollbar-width:none;}
.assets-tabs::-webkit-scrollbar{display:none;}
.assets-tab-btn{
  display:inline-flex;align-items:center;gap:6px;padding:10px 16px;margin-bottom:-1px;
  color:var(--kb-muted);background:0 0;border:none;border-bottom:2px solid transparent;
  font-weight:600;font-size:13.5px;white-space:nowrap;flex:0 0 auto;border-radius:0;
}
.assets-tab-btn:hover{color:var(--kb-text);background:var(--kb-border-soft);}
.assets-tab-btn.assets-tab-active{color:var(--kb-primary);border-bottom-color:var(--kb-primary);}

/* ============================== 弹窗 ============================== */
.assets-modal{
  position:fixed;z-index:1000;inset:0;display:none;align-items:flex-start;justify-content:center;
  overflow:auto;padding:72px 16px 24px;background:rgba(17,24,39,.45);
}
.assets-modal.assets-is-open{display:flex;}
.assets-modal-dialog{width:min(100%,560px);max-height:calc(100dvh - 96px);margin:0 auto;}
.assets-modal-lg{width:min(100%,860px);}
.assets-modal-content{
  display:flex;max-height:calc(100dvh - 96px);overflow:hidden;flex-direction:column;
  border-radius:14px;background:#fff;box-shadow:var(--kb-shadow-lg);
}
.assets-modal-content>form{display:flex;min-height:0;flex:1;flex-direction:column;}
.assets-modal-header,.assets-modal-footer{display:flex;align-items:center;gap:8px;padding:15px 18px;flex:0 0 auto;flex-wrap:wrap;}
.assets-modal-header{border-bottom:1px solid var(--kb-border-soft);}
.assets-modal-title{margin:0;font-size:16.5px;font-weight:700;}
.assets-modal-header .assets-btn-close{margin-left:auto;}
.assets-modal-body{min-height:0;padding:18px;overflow-y:auto;-webkit-overflow-scrolling:touch;}
.assets-modal-footer{justify-content:flex-end;border-top:1px solid var(--kb-border-soft);}
@media (max-width:576px){
  .assets-modal{padding:0;}
  .assets-modal-dialog,.assets-modal-lg{width:100%;max-width:none;height:100dvh;max-height:none;}
  .assets-modal-content{height:100%;max-height:none;border-radius:0;}
}

/* ============================== 布局工具类 ============================== */
.assets-row{display:flex;flex-wrap:wrap;margin:-8px;}
.assets-row>[class*=assets-col-]{width:100%;padding:8px;min-width:0;}
.assets-col-md-2{width:16.666667%!important;}
.assets-col-md-3{width:25%!important;}
.assets-col-md-4{width:33.333333%!important;}
.assets-col-md-5{width:41.666667%!important;}
.assets-col-md-6{width:50%!important;}
.assets-col-md-7{width:58.333333%!important;}
.assets-col-md-8{width:66.666667%!important;}
.assets-col-md-12,.assets-col-12{width:100%!important;}
.assets-g-2{margin:-4px;}
.assets-g-2>[class*=assets-col-]{padding:4px;}
@media (max-width:860px){
  .assets-col-md-2,.assets-col-md-3,.assets-col-md-4,.assets-col-md-5,.assets-col-md-6,.assets-col-md-7,.assets-col-md-8{width:100%!important;}
}

.assets-d-flex{display:flex;}
.assets-d-inline{display:inline;}
.assets-justify-content-between{justify-content:space-between;}
.assets-justify-content-center{justify-content:center;}
.assets-align-items-center{align-items:center;}
.assets-align-items-start{align-items:flex-start;}
.assets-flex-wrap{flex-wrap:wrap;}
.assets-me-auto{margin-right:auto;}
.assets-ms-auto{margin-left:auto;}
.assets-ms-1{margin-left:4px;}
.assets-mt-1{margin-top:4px;}
.assets-mt-2{margin-top:8px;}
.assets-mt-3{margin-top:16px;}
.assets-mt-4{margin-top:24px;}
.assets-mb-0{margin-bottom:0;}
.assets-mb-2{margin-bottom:8px;}
.assets-mb-3{margin-bottom:16px;}
.assets-mb-4{margin-bottom:24px;}
.assets-mb-5{margin-bottom:48px;}
.assets-py-2{padding-top:8px;padding-bottom:8px;}
.assets-py-3{padding-top:16px;padding-bottom:16px;}
.assets-py-4{padding-top:24px;padding-bottom:24px;}
.assets-gap-1{gap:4px;}
.assets-gap-2{gap:8px;}
.assets-w-100{width:100%;}
.assets-text-center{text-align:center;}
.assets-text-muted{color:var(--kb-muted);}
.assets-text-primary{color:var(--kb-primary);}
.assets-text-success{color:var(--kb-success);}
.assets-text-danger{color:var(--kb-danger);}
.assets-text-nowrap{white-space:nowrap;}
.assets-fw-bold{font-weight:700;}
.assets-small{font-size:12px;}

/* ============================== 登录页 ============================== */
.auth-page{min-height:100vh;display:flex;}
.auth-left{
  flex:1 1 50%;color:#fff;display:flex;flex-direction:column;justify-content:center;
  padding:64px 72px;position:relative;overflow:hidden;
  background:linear-gradient(160deg,#20264a 0%,#232a56 55%,#161a33 100%);
}
.auth-left::before{content:"";position:absolute;width:2px;height:100%;right:0;top:0;background:rgba(255,255,255,.06);}
.auth-brand{display:flex;align-items:center;gap:12px;margin-bottom:40px;position:relative;z-index:1;}
.auth-brand .kb-brand-mark{width:42px;height:42px;border-radius:11px;background:var(--kb-primary);}
.auth-brand span{font-size:20px;font-weight:800;letter-spacing:-.01em;}
.auth-left h1{font-size:30px;font-weight:800;line-height:1.4;margin-bottom:16px;position:relative;z-index:1;letter-spacing:-.01em;}
.auth-left p.lead{font-size:15px;color:rgba(255,255,255,.68);max-width:420px;margin-bottom:36px;position:relative;z-index:1;}
.auth-feature-list{display:flex;flex-direction:column;gap:18px;position:relative;z-index:1;}
.auth-feature-item{display:flex;align-items:flex-start;gap:14px;}
.auth-feature-icon{
  flex-shrink:0;width:38px;height:38px;border-radius:9px;background:rgba(255,255,255,.08);
  display:flex;align-items:center;justify-content:center;
}
.auth-feature-text strong{display:block;font-size:14.5px;margin-bottom:2px;}
.auth-feature-text span{font-size:13px;color:rgba(255,255,255,.58);}
.auth-left-footer{margin-top:48px;font-size:12px;color:rgba(255,255,255,.42);position:relative;z-index:1;}
.auth-right{flex:1 1 50%;display:flex;align-items:center;justify-content:center;padding:40px 36px;background:#fff;}
.auth-right-inner{width:100%;max-width:360px;}
.auth-mobile-brand{display:none;}
@media (max-width:900px){
  .auth-left{display:none;}
  .auth-right{flex:1 1 100%;max-width:none;}
  .auth-mobile-brand{display:flex;align-items:center;justify-content:center;gap:10px;margin-bottom:28px;}
  .auth-mobile-brand span{font-size:18px;font-weight:800;color:var(--kb-text);}
}

/* ============================== 知识库系统专属组件 ============================== */
.kb-chunk-card{border:1px solid var(--kb-border);border-radius:var(--kb-radius-sm);background:#fff;padding:14px 16px;margin-bottom:12px;}
.kb-chunk-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px;color:var(--kb-muted);font-size:12px;}
.kb-chunk-content{font-size:13.5px;line-height:1.8;color:#334155;white-space:pre-wrap;word-break:break-word;}
.kb-chunk-content mark{background:#fbe6b8;color:#78350f;border-radius:3px;padding:0 2px;}
.kb-empty-hint{padding:44px 12px;text-align:center;color:var(--kb-muted-soft);}
.kb-empty-hint .kb-icon{opacity:.5;margin-bottom:8px;}
.kb-key-box{
  display:flex;align-items:center;gap:8px;padding:11px 13px;
  border:1px dashed #b6c0f2;border-radius:var(--kb-radius-sm);background:var(--kb-primary-light);
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px;word-break:break-all;color:#2a3a99;
}
