/* ============================================================
   言火API · 开放平台 —— 基础样式(设计系统)
   仅使用原生 CSS,无前端框架依赖
   ============================================================ */

/* ---------- 设计令牌 ---------- */
:root{
  /* 品牌色 */
  --primary:#2972e9;
  --primary-h:#1c5fd0;
  --primary-bg:rgba(41,114,233,.08);
  --indigo:#514bfd;
  --indigo-bg:rgba(81,75,253,.08);
  /* 中性色 */
  --bg:#ffffff;
  --bg-soft:#f5f8ff;
  --panel:#ffffff;
  --panel2:#f7f9fc;
  --panel3:#f5f8ff;
  --border:#e6e7ed;
  --border2:#eef0f5;
  --text:#292830;
  --text2:#666666;
  --text3:#6d7c98;
  --text4:#10131a;
  /* 语义色 */
  --ok:#16a34a;      --ok-bg:rgba(22,163,74,.1);
  --warn:#f59e0b;    --warn-bg:rgba(245,158,11,.12);
  --danger:#e53e3e;  --danger-bg:rgba(229,62,62,.08);
  /* 形状与阴影 */
  --radius:14px;
  --radius-sm:10px;
  --radius-lg:18px;
  --shadow:0 2px 12px rgba(16,19,26,.04);
  --shadow-md:0 6px 24px rgba(16,19,26,.07);
  --shadow-lg:0 16px 48px rgba(16,19,26,.12);
  /* 布局 */
  --header-h:68px;
  --container:1360px;
  --gutter:40px;
}

/* ---------- 重置 ---------- */
*{margin:0;padding:0;box-sizing:border-box;}
html,body{height:100%;}
body{
  background:var(--bg);
  color:var(--text);
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Segoe UI",Arial,sans-serif;
  font-size:15px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none;}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit;}
input,textarea,select{font-family:inherit;font-size:inherit;color:inherit;}
img,svg{display:block;max-width:100%;}
ul,ol{list-style:none;}
table{border-collapse:collapse;width:100%;}
i.ph{display:inline-flex;}

/* 滚动条 */
::-webkit-scrollbar{width:8px;height:8px;}
::-webkit-scrollbar-thumb{background:#dfe3ea;border-radius:4px;}
::-webkit-scrollbar-thumb:hover{background:#cbd2dd;}
::-webkit-scrollbar-track{background:transparent;}

/* ---------- 排版 ---------- */
.h1{font-size:44px;font-weight:600;line-height:1.28;letter-spacing:-.6px;color:var(--text4);}
.h2{font-size:32px;font-weight:600;line-height:1.35;letter-spacing:-.4px;color:var(--text4);}
.h3{font-size:22px;font-weight:600;line-height:1.4;color:var(--text4);}
.h4{font-size:17px;font-weight:600;color:var(--text4);letter-spacing:-.2px;}
.muted{color:var(--text3);}
.text2{color:var(--text2);}
.mono{font-family:"SF Mono",Consolas,"Courier New",monospace;}
.center{text-align:center;}

/* ---------- 按钮 ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  border-radius:11px;padding:11px 22px;font-size:14.5px;font-weight:500;
  transition:all .15s;white-space:nowrap;flex-shrink:0;cursor:pointer;border:none;
}
.btn-primary{background:var(--primary);color:#fff;box-shadow:0 2px 10px rgba(41,114,233,.22);}
.btn-primary:hover{background:var(--primary-h);box-shadow:0 5px 18px rgba(41,114,233,.3);}
.btn-indigo{background:linear-gradient(135deg,var(--indigo),var(--primary));color:#fff;box-shadow:0 2px 12px rgba(81,75,253,.25);}
.btn-indigo:hover{box-shadow:0 6px 20px rgba(81,75,253,.34);}
.btn-ghost{background:#fff;color:var(--text2);border:1px solid var(--border);}
.btn-ghost:hover{border-color:var(--primary);color:var(--primary);}
.btn-soft{background:var(--panel3);color:var(--text);border:1px solid var(--border2);}
.btn-soft:hover{background:#eef3ff;border-color:var(--primary);color:var(--primary);}
.btn-danger{background:var(--danger-bg);color:var(--danger);border:1px solid rgba(229,62,62,.3);}
.btn-danger:hover{background:rgba(229,62,62,.14);}
.btn-sm{padding:6px 14px;font-size:12.5px;border-radius:8px;box-shadow:none;}
.btn-lg{padding:15px 34px;font-size:16px;border-radius:13px;}
.btn-block{width:100%;}
.btn:disabled,.btn.disabled{opacity:.55;cursor:not-allowed;box-shadow:none;}

/* ---------- 标签 / 徽章 ---------- */
.tag{display:inline-flex;align-items:center;gap:5px;font-size:12px;border-radius:99px;padding:4px 12px;font-weight:500;}
.tag-blue{background:var(--primary-bg);color:var(--primary);}
.tag-indigo{background:var(--indigo-bg);color:var(--indigo);}
.tag-green{background:var(--ok-bg);color:var(--ok);}
.tag-orange{background:var(--warn-bg);color:#e67e00;}
.tag-red{background:var(--danger-bg);color:var(--danger);}
.tag-gray{background:var(--panel3);color:var(--text3);border:1px solid var(--border);}
.dot-badge{background:var(--danger);color:#fff;font-size:10px;border-radius:99px;padding:1px 6px;font-style:normal;}

/* ---------- 卡片 ---------- */
.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-lg);padding:30px;box-shadow:var(--shadow);}
.card-tight{padding:22px;}
.card-hd{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:18px;flex-wrap:wrap;}
.card-hd h3{font-size:17px;font-weight:600;color:var(--text4);letter-spacing:-.2px;display:flex;align-items:center;gap:9px;}
.card-hd .sub{font-size:13px;color:var(--text3);font-weight:400;}

/* ---------- 表单 ---------- */
.field{margin-bottom:18px;}
.field > label{display:block;font-size:13px;color:var(--text2);margin-bottom:8px;font-weight:500;}
.input,.select,.textarea{
  width:100%;background:#fff;border:1px solid var(--border);border-radius:var(--radius-sm);
  padding:12px 15px;font-size:14.5px;color:var(--text);outline:none;transition:all .15s;
}
.input::placeholder,.textarea::placeholder{color:#a8b0c0;}
.input:focus,.select:focus,.textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-bg);}
.textarea{min-height:96px;resize:vertical;line-height:1.7;}
.select{appearance:none;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='%236d7c98' stroke-width='2.5'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center;padding-right:38px;cursor:pointer;}
.input-group{display:flex;gap:10px;}
.input-group .input{flex:1;}
.form-tip{font-size:12.5px;color:var(--text3);margin-top:8px;line-height:1.7;}
.form-error{font-size:12.5px;color:var(--danger);margin-top:8px;display:none;}
.form-error.show{display:block;}
.checkbox{display:inline-flex;align-items:center;gap:8px;font-size:13.5px;color:var(--text2);cursor:pointer;user-select:none;}
.checkbox input{width:16px;height:16px;accent-color:var(--primary);cursor:pointer;}

/* ---------- 表格 ---------- */
.table{width:100%;font-size:13.5px;}
.table th{text-align:left;padding:13px 16px;color:var(--text3);font-weight:500;font-size:12.5px;background:var(--panel3);border-bottom:1px solid var(--border);white-space:nowrap;}
.table td{padding:13px 16px;border-bottom:1px solid var(--border2);color:var(--text);}
.table tr:last-child td{border-bottom:none;}
.table tbody tr:hover td{background:var(--panel3);}
.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius);}
.table-wrap .table th:first-child,.table-wrap .table td:first-child{padding-left:20px;}
.table-wrap .table th:last-child,.table-wrap .table td:last-child{padding-right:20px;}

/* ---------- 代码块 ---------- */
.code{position:relative;background:#f8fafc;border:1px solid var(--border);border-radius:var(--radius-sm);padding:16px 18px;font-family:"SF Mono",Consolas,monospace;font-size:12.5px;line-height:1.8;color:#24292f;overflow-x:auto;}
.code .copy{position:absolute;top:8px;right:10px;background:#fff;border:1px solid var(--border);color:var(--text2);border-radius:7px;padding:3px 10px;font-size:11.5px;display:inline-flex;align-items:center;gap:5px;}
.code .copy:hover{color:var(--primary);border-color:var(--primary);}
.code.dark{background:#0d1117;color:#c9d1d9;border-color:#1f2733;}
.code.dark .copy{background:#161b22;border-color:#30363d;color:#8b949e;}

/* ---------- 弹窗 ---------- */
.mask{position:fixed;inset:0;background:rgba(16,19,26,.45);z-index:1000;display:none;align-items:flex-start;justify-content:center;padding:90px 20px 40px;overflow-y:auto;backdrop-filter:blur(2px);}
.mask.show{display:flex;}
.modal{background:#fff;border-radius:20px;width:520px;max-width:100%;box-shadow:var(--shadow-lg);animation:modalIn .2s ease;}
.modal.wide{width:640px;}
@keyframes modalIn{from{transform:translateY(-12px) scale(.98);opacity:0;}to{transform:none;opacity:1;}}
.modal-hd{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:22px 26px;border-bottom:1px solid var(--border2);font-size:17px;font-weight:600;color:var(--text4);}
.modal-hd .x{color:var(--text3);font-size:20px;line-height:1;display:flex;padding:4px;border-radius:8px;}
.modal-hd .x:hover{background:var(--panel3);color:var(--text);}
.modal-bd{padding:26px;}
.modal-ft{display:flex;justify-content:flex-end;gap:12px;padding:18px 26px;border-top:1px solid var(--border2);}

/* 轻量确认弹窗(替代原生 confirm) */
.modal.modal-sm{width:432px;border-radius:18px;}
.modal-sm .modal-hd{padding:20px 22px;font-size:16px;}
.modal-sm .modal-bd{padding:22px;}
.modal-sm .modal-ft{padding:16px 22px;background:#fbfcfe;border-radius:0 0 18px 18px;}
.confirm-body{display:flex;gap:16px;align-items:flex-start;}
.confirm-body .cf-ic{width:44px;height:44px;border-radius:13px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:22px;background:var(--primary-bg);color:var(--primary);}
.confirm-body .cf-ic.danger{background:var(--danger-bg);color:var(--danger);}
.confirm-body .cf-ic.warn{background:var(--warn-bg);color:#e67e00;}
.confirm-body .cf-title{font-size:15.5px;font-weight:600;color:var(--text4);line-height:1.6;}
/* overflow-wrap:anywhere:desc 已改为纯文本,长内容(如 API Key 明文)需要能折行才不溢出 */
.confirm-body .cf-desc{font-size:13px;color:var(--text3);line-height:1.85;margin-top:9px;overflow-wrap:anywhere;}

/* ---------- 抽屉 ---------- */
.drawer-mask{position:fixed;inset:0;background:rgba(16,19,26,.45);z-index:1000;display:none;}
.drawer-mask.show{display:block;}
.drawer{position:fixed;top:0;right:-640px;width:620px;max-width:94vw;height:100%;background:#fff;z-index:1001;box-shadow:-20px 0 60px rgba(16,19,26,.18);transition:right .28s ease;display:flex;flex-direction:column;}
.drawer.show{right:0;}
.drawer-hd{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:28px 30px 0;}
.drawer-bd{flex:1;overflow-y:auto;padding:20px 30px 30px;}
.drawer-ft{padding:18px 30px;border-top:1px solid var(--border2);display:flex;gap:12px;}

/* ---------- Toast ---------- */
.toast-wrap{position:fixed;top:84px;right:24px;z-index:2000;display:flex;flex-direction:column;gap:10px;}
.toast{background:#fff;border:1px solid var(--border);border-left:3px solid var(--primary);border-radius:12px;padding:13px 18px;font-size:13.5px;box-shadow:var(--shadow-md);display:flex;align-items:center;gap:10px;animation:toastIn .25s ease;min-width:220px;}
.toast.ok{border-left-color:var(--ok);}
.toast.warn{border-left-color:var(--warn);}
.toast.err{border-left-color:var(--danger);}
@keyframes toastIn{from{transform:translateX(24px);opacity:0;}to{transform:none;opacity:1;}}

/* ---------- 空态 / 加载 ---------- */
.empty{padding:56px 20px;text-align:center;color:var(--text3);font-size:13.5px;}
.empty i{font-size:40px;display:block;margin-bottom:14px;color:#c8d0de;}

/* ---------- 工具类 ---------- */
.flex{display:flex;align-items:center;gap:12px;}
.flex-between{display:flex;align-items:center;justify-content:space-between;gap:16px;}
.flex-wrap{flex-wrap:wrap;}
.grid{display:grid;gap:22px;}
.g2{grid-template-columns:repeat(2,1fr);}
.g3{grid-template-columns:repeat(3,1fr);}
.g4{grid-template-columns:repeat(4,1fr);}
.mt-8{margin-top:8px;}  .mt-16{margin-top:16px;} .mt-24{margin-top:24px;} .mt-32{margin-top:32px;} .mt-48{margin-top:48px;}
.mb-8{margin-bottom:8px;} .mb-16{margin-bottom:16px;} .mb-24{margin-bottom:24px;} .mb-32{margin-bottom:32px;}
.hidden{display:none !important;}
.mono-sm{font-family:"SF Mono",Consolas,monospace;font-size:12px;}

/* ---------- 响应式 ---------- */
@media (max-width:1200px){
  :root{--gutter:28px;}
  .g4{grid-template-columns:repeat(2,1fr);}
}
@media (max-width:900px){
  .h1{font-size:32px;}
  .h2{font-size:26px;}
  .g2,.g3,.g4{grid-template-columns:1fr;}
  :root{--gutter:20px;}
}
