:root {
  --bg: #0f1115; --card: #1a1e27; --line: #2a2f3a;
  --txt: #e8eaed; --dim: #9aa0aa; --acc: #5b8cff; --ok: #34c77b; --warn: #f0b429;
}
* { box-sizing: border-box; margin: 0; padding: 0; -webkit-tap-highlight-color: transparent; }
html, body { height: 100%; }
body {
  background: var(--bg); color: var(--txt);
  font: 15px/1.55 -apple-system, "PingFang SC", "Noto Sans SC", sans-serif;
  max-width: 520px; margin: 0 auto;
}
.hidden { display: none !important; }

/* 登录 */
#view-login { min-height: 100dvh; display: flex; align-items: center; justify-content: center; padding: 24px; }
.login-box { width: 100%; text-align: center; }
.login-box h1 { font-size: 28px; margin-bottom: 4px; }
.login-box .sub { color: var(--dim); margin-bottom: 28px; }
input, textarea, select, button { font: inherit; }
input[type=text], input[type=password], input[type=number], textarea, select {
  width: 100%; background: var(--card); color: var(--txt);
  border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; margin-bottom: 10px;
}
textarea { min-height: 110px; resize: vertical; }
.prompt-ta { min-height: 34vh; }
.btn {
  border: none; border-radius: 12px; padding: 12px 18px; cursor: pointer;
  background: var(--card); color: var(--txt); font-weight: 600;
  transition: transform .08s ease, opacity .15s, box-shadow .15s;
}
.btn:active { transform: scale(0.97); }
.btn.primary {
  background: linear-gradient(135deg, var(--acc), #b06fff);
  color: #fff; width: 100%;
  box-shadow: 0 6px 16px -6px rgba(124, 92, 255, 0.5);
}
.btn.ghost { background: transparent; color: var(--dim); }
.btn.small { padding: 6px 10px; font-size: 13px; border-radius: 8px; }
.btn:disabled { opacity: .5; }

/* 提示词工具条（A：夜间影棚——等宽一行工具条，主次靠色阶） */
.prompt-bar { display: flex; gap: 6px; margin: 6px 0 12px; }
.prompt-bar .pbtn {
  flex: 1 1 0; min-width: 0; text-align: center; white-space: nowrap;
  border: 1px solid transparent; background: none; color: var(--txt);
  border-radius: 10px; padding: 8px 2px; font-size: 12px; font-weight: 600;
  cursor: pointer; transition: transform .08s ease, box-shadow .15s, border-color .15s;
}
.prompt-bar .pbtn:active { transform: scale(0.94); }
.prompt-bar .pbtn.main {
  background: linear-gradient(135deg, var(--acc), #b06fff); color: #fff;
  box-shadow: 0 4px 12px -6px rgba(124, 92, 255, 0.55);
}
#save-prompt.pbtn { background: transparent; color: var(--acc); border-color: #54469e; }
#pick-prompt.pbtn { background: #1a1f2b; color: var(--txt); border-color: var(--line); }
.prompt-bar .pbtn.ghost { color: #6b7280; font-weight: 500; }
.err { color: #ff6b6b; font-size: 13px; margin-top: 8px; }

/* 主布局 */
#view-main { min-height: 100dvh; display: flex; flex-direction: column; }
#topbar { padding: 14px 16px 6px; font-weight: 700; font-size: 17px; }
#content { flex: 1; overflow-y: auto; padding: 8px 14px 90px; }
#tabbar {
  position: fixed; bottom: 0; left: 50%; transform: translateX(-50%);
  width: 100%; max-width: 520px; display: flex; background: #141821e6;
  backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
  border-top: 1px solid var(--line); padding-bottom: env(safe-area-inset-bottom);
  z-index: 20;
}
#tabbar .tab {
  flex: 1; background: none; border: none; color: var(--dim);
  display: flex; flex-direction: column; align-items: center; gap: 2px;
  padding: 8px 0 7px; font-size: 11px; letter-spacing: 0.2px;
  position: relative; border-radius: 0;
  transition: color .15s;
}
#tabbar .tab .tb-ic {
  font-size: 20px; line-height: 1.15;
  filter: grayscale(1) opacity(0.72);
  transition: transform .18s cubic-bezier(.34,1.56,.64,1), filter .15s;
}
#tabbar .tab:active .tb-ic { transform: scale(0.88); }
#tabbar .tab.active { color: var(--acc); font-weight: 600; }
#tabbar .tab.active .tb-ic { filter: none; transform: translateY(-1px) scale(1.12); }
#tabbar .tab.active::after {
  content: ""; position: absolute; top: -1px; left: 50%; transform: translateX(-50%);
  width: 22px; height: 3px; border-radius: 0 0 3px 3px; background: var(--acc);
}

/* 卡片 */
.card { background: var(--card); border: 1px solid var(--line); border-radius: 14px; padding: 14px; margin-bottom: 12px; }
.card h3 { font-size: 15px; margin-bottom: 4px; }
.card .desc { color: var(--dim); font-size: 13px; margin-bottom: 8px; }
.field-label { display: block; font-size: 13px; color: var(--dim); margin: 8px 0 4px; }
.field-label.req::after { content: " *"; color: #ff6b6b; }
.row { display: flex; gap: 8px; align-items: center; }
.row .grow { flex: 1; }
.mt { margin-top: 10px; }

/* 进度 */
.progress { height: 6px; background: var(--line); border-radius: 3px; overflow: hidden; margin: 10px 0; }
.progress > div { height: 100%; width: 0; background: var(--acc); transition: width .3s; }
.result-box { border-radius: 14px; padding: 14px; background: #12351f22; border: 1px solid #2a5a3c55; }
.result-box .tag { color: var(--ok); font-weight: 700; }

/* 词库 */
.search-row input { margin-bottom: 0; }
.prompt-card { display: flex; align-items: center; gap: 8px; }
.prompt-card .pc-txt { flex: 1; min-width: 0; }
.prompt-card .pc-pre { color: var(--txt); font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.prompt-card .pc-meta { color: var(--dim); font-size: 12px; }
.pc-star { background: none; border: none; font-size: 18px; cursor: pointer; padding: 0 4px; }
.fab {
  position: fixed; right: max(16px, calc(50% - 260px + 16px)); bottom: 76px;
  width: 54px; height: 54px; border-radius: 50%; border: none;
  background: var(--acc); color: #fff; font-size: 26px; box-shadow: 0 4px 14px #0008;
}

/* 弹层 */
.overlay { position: fixed; inset: 0; background: #000a; display: flex; align-items: flex-end; justify-content: center; z-index: 50; }
.sheet {
  width: 100%; max-width: 520px; height: 70dvh; display: flex; flex-direction: column;
  background: #171b24; border-radius: 18px 18px 0 0; padding: 14px; box-sizing: border-box;
}
.sheet-head { display: flex; gap: 8px; align-items: center; flex: none; }
.sheet-head input { margin-bottom: 0; }
#pick-list { flex: 1; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch; }
.asset-sticky { position: sticky; bottom: 0; padding: 8px 0 2px; background: #171b24; }
.pick-list .pick-item {
  padding: 12px; border-bottom: 1px solid var(--line); cursor: pointer;
  display: flex; align-items: center; gap: 8px;
}
.prompt-card { display: flex; align-items: center; gap: 10px; cursor: pointer; }
.prompt-card .pc-txt { flex: 1; min-width: 0; }
.prompt-card .pc-acts { display: flex; flex-direction: column; gap: 6px; align-items: flex-end; flex: none; }
.pc-use { color: var(--acc); border-color: var(--acc); }
.pm { width: 72px; height: 72px; border-radius: 10px; overflow: hidden; position: relative; flex: none; background: var(--line); }
.pm img { width: 100%; height: 100%; object-fit: cover; }
.pm-empty { display: flex; align-items: center; justify-content: center; font-size: 22px; }
.pm-col { position: relative; flex: none; }
.pm-frame { width: 88px; height: 50px; border-radius: 6px; overflow: hidden; background: var(--line); margin-bottom: 4px; }
.pm-frame img { width: 100%; height: 100%; object-fit: cover; }
.pm-badge { position: absolute; right: 2px; bottom: 2px; background: #000a; color: #fff; font-size: 10px; padding: 1px 5px; border-radius: 8px; }
.pd-img { width: 100%; border-radius: 10px; margin-top: 8px; }
.pd-content { white-space: pre-wrap; font-size: 13px; line-height: 1.65; margin-top: 8px; }
.pd-meta { margin-top: 4px; }
.pd-results { margin-top: 14px; }
.pick-item .pre { flex: 1; color: var(--txt); font-size: 13px; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }

.upload-widget { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.upload-widget .up-preview { width: 46px; height: 46px; border-radius: 8px; object-fit: cover; background: var(--line); display:none; }
.upload-widget .up-name { color: var(--dim); font-size: 12px; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.asset-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; margin-top: 10px; }
.asset-grid img { width: 100%; aspect-ratio: 1; object-fit: cover; border-radius: 8px; border: 2px solid transparent; cursor: pointer; background: var(--line); }
.asset-grid img.sel { border-color: var(--acc); }
.asset-preview { width: 100%; border-radius: 10px; margin-top: 8px; display: none; }
.load-more { width: 100%; margin-top: 8px; }
.chat-box { height: 52vh; overflow-y: auto; padding: 4px 2px; }
.chat-msg { display: flex; flex-direction: column; margin: 8px 0; }
.chat-msg.user { align-items: flex-end; }
.chat-msg.assistant { align-items: flex-start; }
.chat-msg .bubble { max-width: 88%; padding: 9px 12px; border-radius: 14px; font-size: 13px; line-height: 1.55; white-space: pre-wrap; word-break: break-word; }
.chat-msg.user .bubble { background: var(--acc); color: #fff; border-bottom-right-radius: 4px; }
.chat-msg.assistant .bubble { background: var(--card); border: 1px solid var(--line); border-bottom-left-radius: 4px; color: var(--txt); }
.chat-actions { display: flex; gap: 8px; margin-top: 5px; }
.job-pv { width: 100%; border-radius: 8px; margin-top: 6px; background: var(--line); }
.job-head { display: flex; gap: 10px; align-items: center; }
.job-thumb { width: 46px; height: 46px; border-radius: 8px; object-fit: cover; background: var(--line); flex: none; }
.job-thumb-tag { display: flex; align-items: center; justify-content: center; font-size: 20px; }
.job-prompt-wrap { margin: 8px 0 4px; font-size: 12px; color: var(--dim); cursor: pointer; }
.job-prompt-pv { overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; color: var(--dim); }
.job-prompt-full { white-space: pre-wrap; color: var(--txt); font-size: 12px; line-height: 1.6; }
.job-prompt-toggle { color: var(--acc); margin-top: 4px; }
textarea { font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 13px; }
.muted { color: var(--dim); font-size: 12px; }
