/* ===== 基础重置 ===== */
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
  font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei",
               "Helvetica Neue", Helvetica, Arial, sans-serif;
  color: #1f2937; font-size: 15px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent;
  /* 方案 C：浅蓝渐变背景 + 淡光斑（清新现代） */
  background:
    radial-gradient(820px 460px at 12% -10%, rgba(59,130,246,.12), transparent 60%),
    radial-gradient(680px 440px at 98% 4%, rgba(99,102,241,.10), transparent 55%),
    linear-gradient(160deg, #eef4ff 0%, #f6f9ff 50%, #ffffff 100%);
  background-attachment: fixed;
}

/* 漂浮光斑（高端感：缓慢漂移，提升通透呼吸感） */
.orb { position: fixed; border-radius: 50%; filter: blur(60px); z-index: 0; pointer-events: none; opacity: .5; }
.orb.a { width: 340px; height: 340px; left: -80px; top: -60px; background: radial-gradient(circle, rgba(59,130,246,.55), transparent 70%); animation: floatA 14s ease-in-out infinite; }
.orb.b { width: 300px; height: 300px; right: -70px; top: 120px; background: radial-gradient(circle, rgba(99,102,241,.45), transparent 70%); animation: floatB 18s ease-in-out infinite; }
.orb.c { width: 260px; height: 260px; left: 40%; bottom: -80px; background: radial-gradient(circle, rgba(14,165,233,.40), transparent 70%); animation: floatC 16s ease-in-out infinite; }
@keyframes floatA { 0%,100% { transform: translate(0,0); } 50% { transform: translate(40px,30px); } }
@keyframes floatB { 0%,100% { transform: translate(0,0); } 50% { transform: translate(-36px,40px); } }
@keyframes floatC { 0%,100% { transform: translate(0,0); } 50% { transform: translate(30px,-30px); } }

input, textarea, select, button { font: inherit; color: inherit; }
button { cursor: pointer; border: none; background: none; }
a { text-decoration: none; }

/* ===== 顶部品牌栏 ===== */
.topbar {
  position: sticky; top: 0; z-index: 10;
  background: linear-gradient(120deg, #3b82f6 0%, #4f7bf0 45%, #2563eb 100%);
  color: #fff; padding: 14px 16px;
  padding-top: calc(14px + env(safe-area-inset-top));
  display: flex; align-items: center; justify-content: space-between;
  box-shadow: 0 8px 28px rgba(37,99,235,.28);
}
.topbar::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 2px;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.9), transparent);
  background-size: 200% 100%; animation: sheen 4s linear infinite;
}
@keyframes sheen { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
.brand { display: flex; align-items: center; gap: 10px; }
.brand-logo {
  width: 34px; height: 34px; border-radius: 10px; flex-shrink: 0;
  background: linear-gradient(135deg, #ffffff, #dbeafe);
  display: flex; align-items: center; justify-content: center;
  font-size: 18px; font-weight: 800; color: #2563eb;
  box-shadow: 0 4px 12px rgba(0,0,0,.15), inset 0 1px 2px rgba(255,255,255,.8);
}
.topbar-title { display: flex; flex-direction: column; }
.topbar h1 { font-size: 18px; margin: 0; font-weight: 700; letter-spacing: 1px; }
.topbar .sub { font-size: 12px; opacity: .9; margin-top: 1px; }
.topbar-link {
  color: #fff; font-size: 13px; padding: 6px 13px;
  border: 1px solid rgba(255,255,255,.4); border-radius: 999px;
  opacity: .95; flex-shrink: 0;
  transition: background .15s, transform .15s;
}
.topbar-link:active { background: rgba(255,255,255,.18); transform: scale(.97); }
.topbar-link:hover { background: rgba(255,255,255,.16); }

/* ===== 步骤进度条（胶囊式 + 连接进度线 + 激活脉冲）===== */
.steps {
  display: flex; position: sticky; top: 62px; z-index: 9;
  background: rgba(255,255,255,.72);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  border-bottom: 1px solid rgba(37,99,235,.10);
  padding: 12px 10px; gap: 4px;
}
.step {
  flex: 1; display: flex; flex-direction: column; align-items: center; gap: 5px;
  cursor: pointer; border-radius: 12px; padding: 4px 2px;
  font-size: 11.5px; color: #9ca3af; transition: all .3s ease; position: relative; white-space: nowrap;
}
.step i {
  width: 26px; height: 26px; border-radius: 50%;
  border: 1.5px solid #d1d5db; color: #9ca3af;
  font-style: normal; font-size: 12px; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
  background: #fff; transition: all .35s cubic-bezier(.34,1.56,.64,1); flex-shrink: 0;
}
.step:not(:last-child)::before {
  content: ""; position: absolute; top: 17px; left: calc(50% + 13px); width: calc(100% - 26px);
  height: 2px; background: #e5e7eb; z-index: -1; border-radius: 2px;
}
.step.done:not(:last-child)::before { background: linear-gradient(90deg, #93c5fd, #3b82f6); }
.step.active { color: #2563eb; }
.step.active i {
  border-color: #fff; background: linear-gradient(135deg, #3b82f6, #2563eb); color: #fff;
  box-shadow: 0 6px 16px rgba(37,99,235,.40); transform: scale(1.12);
  animation: stepPulse 2.2s ease-in-out infinite;
}
@keyframes stepPulse { 0%,100% { box-shadow: 0 6px 16px rgba(37,99,235,.40); } 50% { box-shadow: 0 6px 22px rgba(37,99,235,.62); } }
.step.done i { border-color: #93c5fd; background: #eff6ff; color: #2563eb; }
.step.done i { font-size: 0; }
.step.done i::after { content: "✓"; font-size: 13px; }

/* ===== 主容器 ===== */
.container { max-width: 640px; margin: 0 auto; padding: 12px 14px 110px; }

/* ===== 卡片（升级：渐变顶边发丝线 + 分层柔阴影 + 滚动揭示）===== */
.card {
  position: relative;
  background: linear-gradient(180deg, rgba(255,255,255,.94), rgba(255,255,255,.80));
  backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
  border: 1px solid rgba(255,255,255,.70);
  border-radius: 20px;
  box-shadow: 0 1px 2px rgba(16,24,40,.04), 0 10px 30px rgba(37,99,235,.07), 0 2px 8px rgba(37,99,235,.03);
  padding: 18px 16px; margin-bottom: 14px;
  opacity: 0; transform: translateY(22px);
  transition: opacity .6s ease, transform .6s cubic-bezier(.21,.78,.35,1), box-shadow .3s ease;
}
.card.reveal { opacity: 1; transform: none; }
.card::before {
  content: ""; position: absolute; left: 16px; right: 16px; top: 0; height: 2px; border-radius: 2px;
  background: linear-gradient(90deg, transparent, rgba(59,130,246,.55), rgba(99,102,241,.40), transparent);
  opacity: .8;
}
.card:hover { box-shadow: 0 1px 2px rgba(16,24,40,.05), 0 18px 44px rgba(37,99,235,.12), 0 3px 10px rgba(37,99,235,.05); }
.card-title {
  font-size: 16px; font-weight: 600; color: #111827;
  display: flex; align-items: center; gap: 8px;
  margin-bottom: 14px;
}
.card-title .tag {
  font-size: 11px; padding: 3px 9px; border-radius: 999px;
  background: #eff6ff; color: #2563eb; letter-spacing: .5px;
  font-weight: 600;
}
.card-title .tag-red { background: #fef2f2; color: #dc2626; }
.card-title .tag-green { background: #f0fdf4; color: #16a34a; }
.card-title .tag-blue { background: #eff6ff; color: #2563eb; }
.card-title-sub { font-weight: 400; font-size: 12px; color: #9ca3af; }
.card-hint { font-size: 12.5px; color: #9ca3af; margin: -6px 0 12px; }

/* 卡片揭示动画由 JS（.reveal + IntersectionObserver）驱动，见 form.js setupCardReveal */

/* ===== 表单元素 ===== */
.field { margin-bottom: 14px; }
.field:last-child { margin-bottom: 0; }
.field label {
  display: block; font-size: 13.5px; color: #374151;
  margin-bottom: 7px; font-weight: 500;
}
.field label .req { color: #ef4444; margin-left: 2px; }
.input, .textarea, .select {
  width: 100%; padding: 11px 13px; border: 1px solid #e2e4e9;
  border-radius: 12px; background: rgba(255,255,255,.9); outline: none;
  font-size: 15px;
  transition: border-color .15s, box-shadow .15s, transform .15s;
}
.input { height: 46px; }
input[type=date].input { min-height: 46px; line-height: 1.4; }
.input:focus, .textarea:focus, .select:focus {
  border-color: #3b82f6; box-shadow: 0 0 0 3px rgba(59,130,246,.16);
  transform: translateY(-1px);
}
.field:focus-within > label { color: #2563eb; }
.input::placeholder, .textarea::placeholder { color: #b0b4bd; }
.textarea { resize: vertical; min-height: 64px; }
.row { display: flex; gap: 10px; }
.row .field { flex: 1; }

/* ===== 评分项 ===== */
.score-item {
  border: 1px solid #eef0f3; border-radius: 12px;
  padding: 11px 12px; margin-bottom: 8px; background: rgba(255,255,255,.55);
  transition: border-color .15s, background .15s;
}
.score-item:last-child { margin-bottom: 0; }
.score-item.selected { border-color: #93c5fd; background: #f0f6ff; }
.score-item-head {
  display: flex; justify-content: space-between; align-items: baseline;
  margin-bottom: 8px;
}
.score-item-name { font-weight: 600; color: #111827; font-size: 14px; }
.score-item-name .key { color: #b0b4bd; font-weight: 400; font-size: 12px; margin-right: 5px; }
.score-item-max { font-size: 12px; color: #9ca3af; }
.score-item-desc { font-size: 11.5px; color: #9ca3af; margin-bottom: 0; line-height: 1.55; }

/* 方案A：一票否决行内布局 */
.vrow { display: flex; align-items: flex-start; gap: 10px; }
.vleft { flex: 1 1 auto; min-width: 0; }
.vsw { position: relative; display: flex; background: #f3f4f6; border-radius: 11px; padding: 3px; flex: 0 0 auto; width: 96px; margin-top: 1px; }
.vsw .pill {
  position: absolute; top: 3px; bottom: 3px; width: calc(50% - 3px); border-radius: 9px;
  transition: transform .3s cubic-bezier(.34,1.56,.64,1), background .3s, box-shadow .3s; z-index: 0;
}
.vsw.yes .pill { transform: translateX(100%); background: #fef2f2; box-shadow: 0 2px 8px rgba(220,38,38,.18); }
.vsw.no  .pill { transform: translateX(0);    background: #f0fdf4; box-shadow: 0 2px 8px rgba(22,163,74,.18); }
.vsw-btn {
  flex: 1; padding: 7px 0; text-align: center;
  font-size: 12px; font-weight: 600; color: #6b7280; background: none; border: none;
  position: relative; z-index: 1; transition: color .25s;
}
.vsw.yes .vsw-btn:last-child { color: #dc2626; }
.vsw.no  .vsw-btn:first-child { color: #16a34a; }

/* ===== 评分释义参考 ===== */
.desc-ref {
  background: rgba(249,250,251,.7); border-radius: 12px; padding: 10px 12px;
  margin-bottom: 12px; font-size: 12px; line-height: 1.7;
}
.desc-ref .dr-row { display: flex; align-items: baseline; gap: 8px; padding: 2px 0; }
.desc-ref .dr-range {
  display: inline-block; padding: 1px 6px; border-radius: 4px;
  font-size: 11px; font-weight: 600; min-width: 55px; text-align: center;
  flex-shrink: 0;
}
.desc-ref .dr-range.range-high { background: #d1fae5; color: #065f46; }
.desc-ref .dr-range.range-mid { background: #fef3c7; color: #92400e; }
.desc-ref .dr-range.range-low { background: #fee2e2; color: #991b1b; }
.desc-ref .dr-label { color: #9ca3af; flex-shrink: 0; }
.desc-ref .dr-desc { color: #4b5563; }

/* ===== 1~N 完整分数按钮网格 ===== */
.scores-grid { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 10px; }
.score-num {
  width: 42px; height: 42px; border-radius: 12px;
  border: 1px solid #e2e4e9; background: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: 14px; font-weight: 700; color: #4b5563;
  transition: transform .18s cubic-bezier(.34,1.56,.64,1), box-shadow .2s, border-color .2s, background .2s, color .2s;
  flex-shrink: 0; position: relative;
}
.score-num:hover { transform: translateY(-3px); box-shadow: 0 6px 14px rgba(37,99,235,.14); }
.score-num:active { transform: scale(.88); }
.score-num.active {
  background: linear-gradient(135deg, #3b82f6, #2563eb); border-color: #2563eb; color: #fff;
  box-shadow: 0 8px 18px rgba(37,99,235,.38); transform: translateY(-2px) scale(1.05);
}
.score-num.active::after {
  content: "✓"; position: absolute; top: -7px; right: -7px; width: 16px; height: 16px; border-radius: 50%;
  background: #10b981; color: #fff; font-size: 10px; line-height: 16px; text-align: center;
  box-shadow: 0 2px 6px rgba(16,185,129,.5); animation: checkPop .3s cubic-bezier(.34,1.56,.64,1) both;
}
@keyframes checkPop { 0% { transform: scale(0); } 100% { transform: scale(1); } }
.score-num:not(.active).num-high { border-color: #6ee7b7; background: #f0fdf4; color: #065f46; }
.score-num:not(.active).num-mid { border-color: #fcd34d; background: #fffbeb; color: #92400e; }
.score-num:not(.active).num-low { border-color: #fca5a5; background: #fef2f2; color: #991b1b; }
.score-num:not(.active).num-gap { border-color: #eef0f3; background: #fff; color: #b0b4bd; }

/* 旧的三档样式保留兼容 */
.score-options { display: flex; gap: 6px; margin-bottom: 8px; }
.score-opt {
  flex: 1; padding: 8px 4px; border: 1px solid #e2e4e9;
  border-radius: 12px; background: #fff; text-align: center;
  font-size: 13px; color: #4b5563; transition: all .15s;
}
.score-opt .opt-score { font-size: 16px; font-weight: 700; color: #111827; display: block; }
.score-opt .opt-label { font-size: 11px; color: #9ca3af; margin-top: 2px; display: block; }
.score-opt.active { background: linear-gradient(135deg, #3b82f6, #2563eb); border-color: #2563eb; color: #fff; box-shadow: 0 6px 14px rgba(37,99,235,.26); }
.score-opt.active .opt-score, .score-opt.active .opt-label { color: #fff; }

/* 一票否决：是/否（升级：滑动药丸）*/
/* 旧 .toggle-row 已由方案A的 .vsw 取代（见上方 .score-item 区块） */

/* ===== 客观小计 ===== */
.obj-subtotal {
  text-align: right; font-size: 13px; color: #9ca3af;
  margin-top: 14px; border-top: 1px solid rgba(37,99,235,.08); padding-top: 12px;
}
.obj-subtotal strong { color: #16a34a; font-size: 15px; }

/* ===== 底部提交栏（含总分圆环）===== */
.submit-bar {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 10;
  background: rgba(255,255,255,.78);
  backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px);
  border-top: 1px solid rgba(37,99,235,.12);
  padding: 10px 14px;
  padding-bottom: calc(10px + env(safe-area-inset-bottom));
  display: flex; align-items: center; gap: 12px;
}
.ring-wrap { position: relative; width: 48px; height: 48px; flex-shrink: 0; }
.ring { width: 48px; height: 48px; transform: rotate(-90deg); }
.ring-bg { fill: none; stroke: #eef0f3; stroke-width: 4; }
.ring-fg {
  fill: none; stroke: url(#ringGrad); stroke-width: 4; stroke-linecap: round;
  stroke-dasharray: 125.66; stroke-dashoffset: 125.66;
  transition: stroke-dashoffset .4s ease;
  filter: drop-shadow(0 0 5px rgba(59,130,246,.5));
}
.ring-num {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  font-size: 14px; font-weight: 700; color: #111827; font-variant-numeric: tabular-nums;
}
.submit-bar .total { flex: 1; font-size: 12px; color: #9ca3af; line-height: 1.3; }
.submit-bar .total strong { display: block; font-size: 20px; color: #111827; line-height: 1.15; }
.submit-bar .total .unit { font-size: 12px; color: #9ca3af; font-weight: 400; }
.submit-bar .total #total-score {
  background: linear-gradient(135deg, #3b82f6, #6366f1);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.submit-bar .total .tier {
  display: inline-block; margin-left: 6px; padding: 1px 8px;
  border-radius: 6px; font-size: 12px; font-weight: 600;
}
.tier-S { background: #fef3c7; color: #b45309; }
.tier-A { background: #dbeafe; color: #1d4ed8; }
.tier-B { background: #d1fae5; color: #047857; }
.tier-C { background: #fee2e2; color: #b91c1c; }
.tier-淘汰 { background: #1f2937; color: #fff; }
.tier-badge { display: inline-block; padding: 2px 9px; border-radius: 6px; font-size: 12px; font-weight: 600; }

.btn {
  padding: 12px 24px; border-radius: 12px; font-weight: 600;
  font-size: 15px; transition: transform .15s, box-shadow .15s, background .15s;
}
.btn-primary {
  background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
  color: #fff; box-shadow: 0 6px 16px rgba(37,99,235,.32);
  position: relative; overflow: hidden;
}
.btn-primary::after {
  content: ""; position: absolute; top: 0; left: -120%; width: 50%; height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.55), transparent);
  transform: skewX(-20deg); transition: left .6s;
}
.btn-primary:hover { transform: translateY(-2px); box-shadow: 0 12px 28px rgba(37,99,235,.44); }
.btn-primary:hover::after { left: 150%; }
.btn-primary:active { transform: translateY(1px) scale(.98); box-shadow: 0 4px 12px rgba(37,99,235,.30); }
.btn-primary:disabled { background: #cbd5e1; box-shadow: none; cursor: not-allowed; transform: none; }
.btn-secondary { background: #f3f4f6; color: #4b5563; }
.btn-secondary:active { background: #e5e7eb; transform: scale(.98); }

/* ===== 折叠面板 ===== */
.fold { border: 1px solid #eef0f3; border-radius: 14px; margin-bottom: 10px; overflow: hidden; }
.fold-head {
  padding: 12px; display: flex; justify-content: space-between;
  align-items: center; background: rgba(250,250,250,.7);
  font-size: 14px; font-weight: 500;
}
.fold-arrow { transition: transform .2s; color: #b0b4bd; }
.fold.open .fold-arrow { transform: rotate(180deg); }
.fold-body { padding: 12px; border-top: 1px solid #f3f4f6; display: none; }
.fold.open .fold-body { display: block; }

/* ===== 提示/Toast ===== */
.toast {
  position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%) scale(.92);
  background: rgba(17,24,39,.88); color: #fff; padding: 11px 20px;
  border-radius: 12px; font-size: 14px; z-index: 1000; max-width: 80vw;
  text-align: center;
  opacity: 0; pointer-events: none; transition: opacity .2s, transform .2s;
}
.toast.show { opacity: 1; transform: translate(-50%, -50%) scale(1); }

/* ===== 成功页 ===== */
.success-page { text-align: center; padding: 44px 20px; }
.success-page .icon {
  width: 76px; height: 76px; margin: 0 auto 18px;
  background: linear-gradient(135deg, #34d399, #10b981); border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 42px; color: #fff; position: relative;
  box-shadow: 0 10px 28px rgba(16,185,129,.40);
  animation: popIn .6s cubic-bezier(.2,.8,.3,1.5) both;
}
.success-page .icon::after {
  content: ""; position: absolute; inset: -8px; border-radius: 50%; border: 2px solid rgba(16,185,129,.4);
  animation: ringBurst .9s ease-out both;
}
@keyframes ringBurst { 0% { transform: scale(.7); opacity: .8; } 100% { transform: scale(1.4); opacity: 0; } }
.success-page h2 { margin: 0 0 8px; font-size: 22px; color: #111827; }
.success-page p { color: #9ca3af; margin: 8px 0; }
.success-page .summary {
  background: rgba(249,250,251,.8); border: 1px solid rgba(37,99,235,.08);
  border-radius: 14px; padding: 16px;
  margin: 22px 0; text-align: left; font-size: 13.5px;
}
.success-page .summary div {
  display: flex; justify-content: space-between; padding: 4px 0; color: #6b7280;
  opacity: 0; transform: translateX(-8px); animation: rowIn .4s ease forwards;
}
.success-page .summary div:nth-child(1) { animation-delay: .15s; }
.success-page .summary div:nth-child(2) { animation-delay: .25s; }
.success-page .summary div:nth-child(3) { animation-delay: .35s; }
.success-page .summary div:nth-child(4) { animation-delay: .45s; }
.success-page .summary div:nth-child(5) { animation-delay: .55s; }
@keyframes rowIn { to { opacity: 1; transform: none; } }
.success-page .summary strong { color: #111827; }
.success-actions { display: flex; gap: 10px; }
.success-actions .btn { flex: 1; }

/* ===== 骨架屏 ===== */
.skeleton {
  display: inline-block; background: linear-gradient(90deg, #eef0f3 25%, #f8f9fb 50%, #eef0f3 75%);
  background-size: 200% 100%; border-radius: 6px;
  animation: sk 1.2s infinite linear;
}
@keyframes sk { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
.skeleton-line { width: 64px; height: 12px; vertical-align: middle; margin-right: 6px; }
.skeleton-img { width: 100%; height: 100%; border-radius: 7px; }

/* ===== 客观项图片上传 ===== */
.image-section { margin-top: 8px; }
.image-section-label { font-size: 12px; color: #9ca3af; margin-bottom: 8px; }
.image-list { display: flex; flex-wrap: wrap; gap: 10px; }
.image-input-wrap {
  position: relative; width: 88px; height: 88px;
  border: 1.5px dashed #d9dce3; border-radius: 14px;
  background: rgba(250,251,252,.7); overflow: hidden;
  display: flex; align-items: center; justify-content: center;
  transition: border-color .15s, transform .15s;
}
.image-input-wrap:active { transform: scale(.97); }
.image-input-wrap.has-image { border-style: solid; border-color: #eef0f3; background: #fff; }
.image-file-input { position: absolute; inset: 0; opacity: 0; cursor: pointer; width: 100%; height: 100%; }
.image-preview {
  width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;
  color: #b0b4bd; font-size: 24px; pointer-events: none;
}
.image-preview::before { content: '+'; }
.image-input-wrap.has-image .image-preview::before { content: none; }
.image-input-wrap.processing .image-preview::before { content: none; }
.image-preview img { width: 100%; height: 100%; object-fit: cover; border-radius: 13px; }
.image-actions { position: absolute; top: 2px; right: 2px; display: none; }
.image-input-wrap.has-image .image-actions { display: block; }
.image-del-btn {
  width: 20px; height: 20px; border-radius: 50%;
  background: rgba(0,0,0,.55); color: #fff; font-size: 14px; line-height: 1;
  display: flex; align-items: center; justify-content: center;
  cursor: pointer; border: none; padding: 0;
}
.image-add-btn {
  display: inline-flex; align-items: center; gap: 4px;
  margin-top: 8px; padding: 7px 13px; border-radius: 10px;
  background: #f3f4f6; color: #4b5563; font-size: 13px;
  border: 1px solid #eef0f3; cursor: pointer; transition: background .15s, transform .15s;
}
.image-add-btn:active { background: #e5e7eb; transform: scale(.98); }

/* 防止数字输入框出小箭头 */
input[type=number]::-webkit-outer-spin-button,
input[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

/* ===== AI 视觉打分提示 ===== */
.ai-suggestion {
  margin: 10px 0 4px; padding: 9px 11px; border-radius: 12px;
  border: 1px solid transparent;
  background:
    linear-gradient(#eef4ff, #eef4ff) padding-box,
    linear-gradient(135deg, #3b82f6, #8b5cf6) border-box;
  color: #1d4ed8;
  font-size: 12.5px; line-height: 1.55;
  box-shadow: 0 4px 16px rgba(59,130,246,.16);
}
.ai-suggestion b { color: #1d4ed8; font-size: 13px; }
.ai-suggestion .ai-conclusion { color: #4b5563; margin-top: 4px; font-size: 12px; line-height: 1.5; }
.score-num.ai-picked { position: relative; box-shadow: 0 0 0 2px #3b82f6 inset, 0 0 10px rgba(59,130,246,.45); }
.score-num.ai-picked::after {
  content: 'AI'; position: absolute; top: -8px; right: -8px;
  background: #3b82f6; color: #fff; font-size: 9px; line-height: 1;
  padding: 1px 3px; border-radius: 6px; font-weight: 600;
}

/* ===== 小屏适配 ===== */
@media (max-width: 360px) {
  .score-opt { padding: 6px 2px; }
  .score-opt .opt-score { font-size: 14px; }
  .topbar h1 { font-size: 16px; }
  .step span { display: none; }
}

/* ===== 方案 C 新增动画 ===== */
@keyframes popIn {
  0%   { transform: scale(0); }
  60%  { transform: scale(1.15); }
  100% { transform: scale(1); }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; }
  .card { opacity: 1 !important; transform: none !important; }
  .orb { display: none !important; }
}

/* ============================================================
   补充：地图选点弹层（方案 C 浅色版，与 index.html 实际结构对齐）
   16:28 原版未含此块（地图功能为其后新增），此处补齐
   ============================================================ */
.map-modal {
  position: fixed; inset: 0; z-index: 200;
  display: none; align-items: center; justify-content: center;
  background: rgba(15,23,42,.45);
  backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px);
  padding: 16px;
  animation: mapFade .2s ease both;
}
@keyframes mapFade { from { opacity: 0; } to { opacity: 1; } }
.map-modal-mask { position: absolute; inset: 0; }
.map-modal-box {
  position: relative; width: 100%; max-width: 520px; height: 76vh; max-height: 640px;
  background: #fff; border-radius: 18px; overflow: hidden;
  display: flex; flex-direction: column;
  box-shadow: 0 20px 60px rgba(15,23,42,.30);
  animation: modalUp .3s cubic-bezier(.21,.78,.35,1) both;
}
@keyframes modalUp { from { opacity: 0; transform: translateY(24px) scale(.97); } to { opacity: 1; transform: none; } }
.map-modal-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 16px; border-bottom: 1px solid #eef0f3; flex-shrink: 0;
  font-size: 15px; font-weight: 600; color: #111827;
}
.map-modal-close {
  width: 30px; height: 30px; border-radius: 50%; background: #f3f4f6;
  font-size: 18px; color: #6b7280; display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.map-modal-close:active { background: #e5e7eb; }
.map-search { display: flex; gap: 8px; padding: 12px 16px; flex-shrink: 0; }
.map-search .input { flex: 1; }
.btn-map {
  padding: 0 18px; border-radius: 13px; border: none;
  background: linear-gradient(135deg, #3b82f6, #2563eb); color: #fff;
  font-size: 14px; font-weight: 700; flex-shrink: 0; position: relative; overflow: hidden;
  box-shadow: 0 6px 16px rgba(37,99,235,.30); transition: transform .15s, box-shadow .2s;
}
.btn-map:active { transform: scale(.96); }
.btn-map::after {
  content: ""; position: absolute; top: 0; left: -120%; width: 60%; height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.5), transparent);
  transform: skewX(-20deg); transition: left .5s;
}
.btn-map:hover::after { left: 140%; }
/* 地图选点：输入框内嵌图标按钮（方案 E） */
.map-pick-row { position: relative; }
.map-pick-row .input { padding-right: 50px; }
.btn-map-ico {
  position: absolute; right: 6px; top: 50%; transform: translateY(-50%);
  width: 36px; height: 36px; border-radius: 11px; border: none; cursor: pointer;
  background: linear-gradient(135deg, #3b82f6, #2563eb);
  display: flex; align-items: center; justify-content: center; flex-shrink: 0;
  box-shadow: 0 4px 10px rgba(37,99,235,.28); overflow: hidden;
  transition: transform .14s, box-shadow .2s, background .2s;
}
.btn-map-ico .mp-pin { width: 19px; height: 19px; fill: #fff; }
.btn-map-ico:active { transform: translateY(-50%) scale(.9); }
.btn-map-ico::after {
  content: ""; position: absolute; top: 0; left: -130%; width: 60%; height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.55), transparent);
  transform: skewX(-20deg); transition: left .5s;
}
.btn-map-ico:hover::after { left: 140%; }
.btn-map-ico.picked { background: linear-gradient(135deg, #22c55e, #16a34a); box-shadow: 0 4px 10px rgba(22,163,74,.30); }
.map-canvas { flex: 1; min-height: 200px; background: #eef2f7; }
.map-result {
  max-height: 190px; overflow-y: auto; padding: 4px 16px; flex-shrink: 0;
  border-top: 1px solid #eef0f3; font-size: 13px;
}
.map-sr-item {
  display: flex; justify-content: space-between; align-items: center; gap: 8px;
  padding: 10px 6px; border-bottom: 1px solid #f3f4f6; cursor: pointer;
}
.map-sr-item:active { background: #f5f7fa; }
.map-sr-item:last-child { border-bottom: none; }
.map-sr-addr {
  font-size: 11px; color: #9ca3af; flex-shrink: 0; max-width: 55%;
  text-align: right; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.map-modal-foot {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 12px 16px; border-top: 1px solid #eef0f3; flex-shrink: 0;
}
.map-tip { font-size: 12px; color: #9ca3af; flex: 1; line-height: 1.4; }
.map-modal-foot .btn { padding: 10px 20px; font-size: 14px; }
