*{margin:0;padding:0;box-sizing:border-box}
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:#f0f2f5;height:100vh;display:flex;flex-direction:column}
/* 登录页 */
.login-overlay{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:#f0f2f5;z-index:9999;align-items:center;justify-content:center}
.login-overlay.show{display:flex}
.login-box{background:#fff;border-radius:12px;padding:32px;width:360px;box-shadow:0 2px 12px rgba(0,0,0,.1)}
.login-box h2{font-size:20px;margin-bottom:8px;text-align:center}
.login-box .tenant-hint{text-align:center;font-size:13px;color:#999;margin-bottom:20px}
.login-box input{width:100%;padding:10px 14px;border:1px solid #ddd;border-radius:8px;font-size:15px;margin-bottom:12px;outline:none}
.login-box input:focus{border-color:#4a9eff}
.login-box button{width:100%;padding:10px;background:#4a9eff;color:#fff;border:none;border-radius:8px;font-size:15px;cursor:pointer}
.login-box button:hover{background:#3a7eef}
.login-box .err{color:#ef4444;font-size:13px;text-align:center;margin-top:8px;display:none}
/* ── 顶部 ── */
.topbar{background:#1a1f36;color:#fff;display:flex;align-items:center;padding:0 20px;height:48px;flex-shrink:0}
.topbar .logo{font-size:16px;font-weight:700;margin-right:24px}
.topbar .nav-right{margin-left:auto;font-size:12px;color:#889;display:flex;gap:16px;align-items:center}
/* ── 主布局 ── */
.main-layout{flex:1;display:flex;overflow:hidden}
/* ── 左侧菜单 ── */
.sidebar{width:200px;background:#fff;border-right:1px solid #e0e0e0;display:flex;flex-direction:column;overflow-y:auto;flex-shrink:0}
.sidebar .menu-group{padding:8px 0}
.sidebar .menu-group-title{font-size:11px;color:#999;padding:8px 16px 4px;text-transform:uppercase;letter-spacing:1px}
.sidebar .menu-item{padding:10px 16px;cursor:pointer;font-size:14px;color:#555;display:flex;align-items:center;gap:8px;border-left:3px solid transparent;transition:all .15s}
.sidebar .menu-item:hover{background:#f5f8fc;color:#333}
.sidebar .menu-item.active{background:#f0f5ff;color:#4a9eff;border-left-color:#4a9eff;font-weight:600}
.sidebar .menu-badge{font-size:10px;background:#e8f0fe;color:#4a9eff;padding:1px 6px;border-radius:8px;margin-left:auto}
/* ── 内容区 ── */
.content{flex:1;overflow:hidden;display:flex;flex-direction:column}
.section{display:none;flex:1;overflow:hidden;flex-direction:column}
.section.active{display:flex}
.section-inner{flex:1;overflow-y:auto;padding:20px;max-width:960px;margin:0 auto;width:100%}

/* ── 聊天工作台（询价 & 客服共用）── */
.chat-full{display:flex;flex-direction:column;flex:1;min-height:0}
.chat-layout{display:flex;flex-direction:column;height:100%;max-width:900px;margin:0 auto;width:100%}
.chat-toolbar{background:#fff;padding:8px 20px;border-bottom:1px solid #e0e0e0;display:flex;gap:8px;align-items:center;flex-wrap:wrap;flex-shrink:0}
.chat-toolbar button,.chat-toolbar select{padding:6px 12px;border:1px solid #ddd;border-radius:14px;background:#fff;font-size:13px;cursor:pointer}
.chat-toolbar button:hover{background:#f0f7ff;border-color:#4a9eff}
.chat-toolbar .kb-info{font-size:12px;color:#999;margin-left:auto}
.chat-messages,.chat-msgs{flex:1;overflow-y:auto;padding:16px}
.message{margin-bottom:16px;display:flex}
.message.user{justify-content:flex-end}
.message.assistant{justify-content:flex-start}
.bubble{max-width:75%;padding:12px 16px;border-radius:16px;line-height:1.6;font-size:15px;word-break:break-word}
.message.user .bubble{background:#4a9eff;color:#fff;border-bottom-right-radius:4px}
.message.assistant .bubble{background:#fff;color:#333;border-bottom-left-radius:4px;box-shadow:0 1px 3px rgba(0,0,0,0.08)}
.bubble table{border-collapse:collapse;margin:8px 0;width:100%;font-size:14px}
.bubble table th,.bubble table td{border:1px solid #ddd;padding:6px 10px;text-align:left}
.message.assistant .bubble table th{background:#f0f7ff}
.chat-input{background:#fff;padding:12px 20px;border-top:1px solid #e0e0e0;display:flex;gap:10px;flex-shrink:0}
.chat-input input{flex:1;padding:10px 16px;border:1px solid #ddd;border-radius:24px;font-size:15px;outline:none}
.chat-input input:focus{border-color:#4a9eff}
.chat-input button{background:#4a9eff;color:#fff;border:none;padding:10px 24px;border-radius:24px;font-size:15px;cursor:pointer}
.chat-input button:hover{background:#3a7eef}
.upload-panel{display:none;background:#fff;padding:16px 20px;border-bottom:1px solid #e0e0e0}
.upload-panel.show{display:block}
.upload-panel .drop-zone{border:2px dashed #ccc;border-radius:12px;padding:24px;text-align:center;color:#999;cursor:pointer}
.upload-panel .drop-zone:hover,.drop-zone.dragover{border-color:#4a9eff;color:#4a9eff;background:#f0f7ff}
.upload-panel .drop-zone input{display:none}
.typing{display:flex;gap:4px;padding:12px 16px}.typing span{width:8px;height:8px;background:#999;border-radius:50%;animation:typing 1.4s infinite}.typing span:nth-child(2){animation-delay:.2s}.typing span:nth-child(3){animation-delay:.4s}@keyframes typing{0%,60%,100%{transform:translateY(0)}30%{transform:translateY(-8px)}}
.status-bar{text-align:center;color:#999;font-size:12px;padding:4px;flex-shrink:0}
.file-viewer{display:none;background:#fafafa;border:1px solid #e0e0e0;border-radius:8px;padding:12px;margin:8px 20px;font-size:12px;max-height:400px;overflow:auto;white-space:pre-wrap}.file-viewer.show{display:block}

/* ── 卡片 / 表单 ── */
.card{background:#fff;border-radius:10px;padding:16px;margin-bottom:16px;box-shadow:0 1px 3px rgba(0,0,0,0.06)}
.card h3{font-size:14px;color:#666;margin-bottom:10px;font-weight:500}
.form-row{display:flex;gap:10px;margin-bottom:10px;align-items:center;flex-wrap:wrap}
.form-row label{font-size:13px;color:#666;white-space:nowrap}
.form-row input[type="text"],.form-row select,.form-row textarea{padding:8px 12px;border:1px solid #ddd;border-radius:8px;font-size:14px;outline:none;font-family:inherit}
.form-row input:focus,.form-row select:focus,.form-row textarea:focus{border-color:#4a9eff}
.btn{padding:8px 16px;border:1px solid #ddd;border-radius:8px;font-size:13px;cursor:pointer;background:#fff;white-space:nowrap;transition:all .15s}
.btn:hover{background:#f5f8fc}
.btn.primary{background:#4a9eff;color:#fff;border-color:#4a9eff}.btn.primary:hover{background:#3a7eef}
.btn.primary:disabled{background:#a0c4f8;cursor:not-allowed}
.btn.success{background:#22c55e;color:#fff;border-color:#22c55e}
.btn.danger{background:#ef4444;color:#fff;border-color:#ef4444}
.btn-sm{padding:4px 10px;font-size:12px;border-radius:6px}
/* 指引条 */
.guide-bar{background:#f0f7ff;border-left:4px solid #4a9eff;padding:10px 14px;border-radius:6px;margin-bottom:16px;font-size:13px;color:#555;line-height:1.6}
.guide-bar b{color:#1a1f36}
/* 候选卡片 */
.candidate-list{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.candidate-card{border:2px solid #e8e8e8;border-radius:10px;padding:12px;cursor:pointer;transition:all .2s}
.candidate-card:hover{border-color:#4a9eff;background:#f8fbff}
.candidate-card.selected{border-color:#4a9eff;background:#f0f5ff}
.candidate-card .tag{display:inline-block;background:#e8f0fe;color:#4a9eff;font-size:11px;padding:2px 8px;border-radius:10px;margin-bottom:6px}
.candidate-card .title{font-size:14px;font-weight:600;margin-bottom:4px}
.candidate-card .source{font-size:11px;color:#999}
.preview-box{background:#fafafa;border:1px solid #e0e0e0;border-radius:8px;padding:12px;min-height:100px;max-height:500px;overflow-y:auto;font-size:14px;line-height:1.8;white-space:pre-wrap;margin:10px 0}
.preview-box:empty::after{content:"生成结果将显示在这里";color:#ccc}
.empty-state{text-align:center;color:#bbb;padding:40px 20px}
.empty-state .icon{font-size:36px;margin-bottom:8px}
.meta-row{font-size:12px;color:#999;display:flex;gap:12px;align-items:center;margin-top:8px}
.suggestion-box{padding:12px;background:#fffbe6;border-radius:8px;font-size:12px;color:#666;line-height:1.6;margin-bottom:12px;display:none}

/* ── 业务模型编辑器 ── */
.field-row{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid #f0f0f0}
.field-row:last-child{border-bottom:none}
.field-num{width:26px;height:26px;border-radius:50%;background:#e8f0fe;color:#4a9eff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:12px;flex-shrink:0}
.field-name{flex:1;font-size:14px}
.field-label{font-size:11px;color:#999;margin-left:4px}
.field-required{font-size:11px;color:#e8710a;min-width:36px}
.btn-up,.btn-down{width:28px;height:28px;padding:0;font-size:14px;line-height:1}
.btn-up.dim,.btn-down.dim{opacity:.25;pointer-events:none}
/* 分类 tabs */
.bm-tabs{display:flex;gap:4px;margin-bottom:16px;flex-wrap:wrap}
.bm-tab{padding:8px 16px;border-radius:6px 6px 0 0;border:1px solid #ddd;background:#fff;cursor:pointer;font-size:13px;border-bottom:none}
.bm-tab.active{background:#4a9eff;color:#fff;border-color:#4a9eff}
.bm-tab-add{padding:8px 12px;border-radius:6px;border:1px dashed #ccc;background:none;cursor:pointer;font-size:18px;color:#999;line-height:1}
.bm-tab-add:hover{border-color:#4a9eff;color:#4a9eff}
.pattern-tag{background:#e8f0fe;color:#4a9eff;padding:2px 8px;border-radius:3px;font-size:12px;margin:0 2px}
/* 弹窗 */
.dialog-bg{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.3);z-index:100;justify-content:center;align-items:center}
.dialog-bg.show{display:flex}
.dialog{background:#fff;border-radius:8px;padding:24px;max-width:400px;width:90%;box-shadow:0 4px 12px rgba(0,0,0,.2)}
.dialog h3{margin-bottom:16px;font-size:16px}
.dialog label{font-size:13px;display:block;margin-bottom:4px}
.dialog input{width:100%;padding:6px 8px;border:1px solid #ddd;border-radius:4px;font-size:13px;margin-bottom:8px}
.dialog .actions{margin-top:16px;display:flex;justify-content:flex-end;gap:8px}
/* 提示消息 */
#msg{padding:8px 12px;border-radius:4px;font-size:13px;display:none;margin-top:8px}
#msg.ok{background:#e6f4ea;color:#137333;display:block}
#msg.err{background:#fce8e6;color:#c5221f;display:block}
/* 数据预览表格 */
.data-table-wrap{overflow-x:auto}
.data-table-wrap table{border-collapse:collapse;width:100%;font-size:12px}
.data-table-wrap td,.data-table-wrap th{border:1px solid #ddd;padding:4px 8px}
.data-table-wrap th{background:#f5f8fc;font-weight:600}