/* 迅风号卡 - 用户端样式（票券美学：纸面 + 墨色 + 印章朱红） */

:root {
  --paper: #F3ECDD;
  --paper-2: #EDE3CE;
  --card: #FBF6EC;
  --ink: #1F232C;
  --ink-2: #666B77;
  --line: #D8CBB0;
  --line-soft: #E8DFCC;
  --seal: #C43B2C;
  --seal-deep: #9C2C20;
  --amber: #C98A2D;
  --ok: #1E7A46;
  --blue: #2A5CA8;
  --shadow: 0 12px 28px -14px rgba(31, 35, 44, .30);
  --font-body: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", sans-serif;
  --font-display: "Bahnschrift", "DIN Alternate", "Arial Narrow", sans-serif;
  --font-num: "Cascadia Mono", "SF Mono", Consolas, Menlo, monospace;
}

* { margin: 0; padding: 0; box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
  background: var(--paper);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3CfeColorMatrix values='0 0 0 0 0.45 0 0 0 0 0.40 0 0 0 0 0.32 0 0 0 0.05 0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");
  color: var(--ink);
  font-family: var(--font-body);
  line-height: 1.6;
  padding-bottom: 90px;
  -webkit-font-smoothing: antialiased;
}

.wrap { max-width: 640px; margin: 0 auto; padding: 0 16px; }
.page { padding-top: 18px; }

a { color: inherit; text-decoration: none; }
img { max-width: 100%; }

/* ---------- 顶部导航 ---------- */
.topbar {
  background: var(--ink);
  color: #E9E2D2;
  position: sticky;
  top: 0;
  z-index: 50;
  box-shadow: 0 2px 14px rgba(31, 35, 44, .35);
}
.topbar__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 52px;
}
.topbar__brand { display: flex; align-items: center; gap: 9px; }
.topbar__brand b { font-size: 16px; letter-spacing: 1px; }
.topbar__nav { display: flex; gap: 18px; }
.topbar__nav a { font-size: 13px; color: #C9C2B0; transition: color .2s; }
.topbar__nav a:hover { color: #FFF7EC; }

/* 印章 Logo */
.brand-seal {
  width: 38px; height: 38px;
  border: 2px solid var(--seal);
  border-radius: 9px;
  color: var(--seal);
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  font-size: 11px;
  line-height: 1.2;
  letter-spacing: 2px;
  padding-left: 2px;
  transform: rotate(-5deg);
  flex: none;
  font-family: "STSong", "SimSun", serif;
}
.topbar .brand-seal { background: var(--card); }
.brand-seal--sm { width: 34px; height: 34px; font-size: 10px; }

/* ---------- 首页 Hero ---------- */
.hero {
  position: relative;
  background: linear-gradient(160deg, #232732 0%, #1B1F29 55%, #171A22 100%);
  color: #EFE7D5;
  overflow: hidden;
}
.hero::before {
  content: '';
  position: absolute;
  right: -70px; bottom: -90px;
  width: 240px; height: 240px;
  background: radial-gradient(circle, rgba(196, 59, 44, .30) 0%, rgba(196, 59, 44, 0) 68%);
  pointer-events: none;
}
.hero::after {
  content: '';
  position: absolute;
  left: 0; top: 0; right: 0; bottom: 0;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.03 0'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)'/%3E%3C/svg%3E");
  pointer-events: none;
}
.hero__inner { position: relative; padding: 22px 16px 34px; }
.hero__kicker {
  display: inline-block;
  font-size: 10px;
  letter-spacing: 3px;
  color: #C9A56B;
  border: 1px solid rgba(201, 165, 107, .5);
  padding: 2px 9px 1px 11px;
  border-radius: 2px;
  margin-bottom: 8px;
}
.hero__title {
  font-family: var(--font-display);
  font-size: 27px;
  font-weight: 800;
  letter-spacing: 2px;
  line-height: 1.15;
}
.hero__dot { color: var(--seal); }
.hero__slogan { margin-top: 4px; color: #A8ADB9; font-size: 12.5px; letter-spacing: 1px; }
.hero__points {
  list-style: none;
  display: flex;
  gap: 16px;
  margin-top: 12px;
}
.hero__points li { display: flex; align-items: center; gap: 6px; font-size: 11px; color: #C9C2B0; letter-spacing: 2px; }
.hero__points i {
  width: 6px; height: 6px;
  background: var(--seal);
  border-radius: 50%;
  box-shadow: 0 0 0 3px rgba(196, 59, 44, .22);
}
/* Hero 底部撕纸边 */
.hero__edge {
  position: absolute;
  left: 0; right: 0; bottom: -9px;
  height: 18px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M0 9a9 9 0 0 0 18 0Z' fill='%23F3ECDD'/%3E%3C/svg%3E");
  background-repeat: repeat-x;
  background-size: 18px 18px;
}

/* ---------- 公告栏 ---------- */
.notice {
  background: var(--seal-deep);
  color: #F6E7DA;
  font-size: 13px;
  margin-top: 10px;
}
.notice .wrap { display: flex; gap: 10px; align-items: center; padding-top: 8px; padding-bottom: 8px; }
.notice b {
  flex: none;
  font-size: 11px;
  border: 1px solid rgba(246, 231, 218, .7);
  border-radius: 3px;
  padding: 1px 7px;
  letter-spacing: 2px;
}
.notice span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ---------- 票券卡片 ---------- */
.cards { padding-top: 26px; display: flex; flex-direction: column; gap: 20px; }

.ticket {
  position: relative;
  display: flex;
  background: var(--card);
  border-radius: 16px;
  box-shadow: var(--shadow);
  overflow: visible;
  transition: transform .18s ease, box-shadow .18s ease;
}
.ticket:active { transform: scale(.985); box-shadow: 0 8px 18px -12px rgba(31, 35, 44, .35); }

.notch {
  position: absolute;
  z-index: 2;
  width: 20px; height: 20px;
  border-radius: 50%;
  background: var(--paper);
  right: 76px;
  box-shadow: inset 0 1px 2px rgba(31, 35, 44, .12);
}
.notch--t { top: -10px; }
.notch--b { bottom: -10px; }

.ticket__main { flex: 1; padding: 18px 16px 16px; min-width: 0; }
.ticket__top { display: flex; align-items: center; gap: 9px; }
.ticket__name {
  font-size: 17px;
  font-weight: 700;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.chip {
  flex: none;
  display: inline-flex;
  align-items: center;
  color: #FFF;
  font-size: 11px;
  font-weight: 600;
  padding: 2px 8px;
  border-radius: 3px;
  letter-spacing: 1px;
}
.chip--lt { background: #E60012; }
.chip--yd { background: #0085D0; }
.chip--dx { background: #0059A5; }
.chip--gd { background: #0E9E6C; }

.ticket__tags { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 10px; }
.ticket__tags span {
  font-size: 12px;
  color: var(--ink-2);
  border: 1px solid var(--line-soft);
  background: #F5EEDF;
  border-radius: 20px;
  padding: 2px 10px;
}

.ticket__foot {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  margin-top: 13px;
}
.rent { display: flex; align-items: baseline; gap: 4px; }
.rent__num {
  font-family: var(--font-display);
  font-size: 38px;
  font-weight: 800;
  color: var(--seal);
  line-height: 1;
  letter-spacing: .5px;
}
.rent__unit { font-size: 12px; color: var(--ink-2); }
.ticket__extra { font-size: 12px; color: var(--ink-2); text-align: right; }

.ticket__stub {
  position: relative;
  width: 92px;
  flex: none;
  border-left: 2px dashed var(--line);
  background: linear-gradient(180deg, #F7EFDD, #EFE5D0);
  border-radius: 0 16px 16px 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
}
.stub-seal {
  width: 58px; height: 58px;
  border: 2.5px solid var(--seal);
  border-radius: 50%;
  color: var(--seal);
  font-size: 13px;
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: 2px;
  text-align: center;
  display: flex;
  align-items: center;
  justify-content: center;
  transform: rotate(-10deg);
  position: relative;
}
.stub-seal::after {
  content: '';
  position: absolute;
  inset: 4px;
  border: 1px dashed rgba(196, 59, 44, .55);
  border-radius: 50%;
}
.stub-no {
  font-family: var(--font-num);
  font-size: 10px;
  color: var(--ink-2);
  letter-spacing: 1px;
}

.reveal { animation: rise .5s cubic-bezier(.22, .8, .35, 1) backwards; }
@keyframes rise {
  from { opacity: 0; transform: translateY(16px); }
  to { opacity: 1; transform: translateY(0); }
}

/* ---------- 详情页 ---------- */
.back { display: inline-block; font-size: 13px; color: var(--ink-2); margin-bottom: 12px; }

.ticket--detail { margin-bottom: 18px; }
.ticket--detail .ticket__name { font-size: 20px; }
.ticket--detail .rent__num { font-size: 46px; }

.card {
  background: var(--card);
  border-radius: 16px;
  box-shadow: var(--shadow);
  padding: 20px 18px;
  margin-bottom: 18px;
}
.sec-title {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 16px;
  margin-bottom: 14px;
  padding-bottom: 10px;
  border-bottom: 2px dashed var(--line);
}
.sec-mark {
  flex: none;
  width: 30px; height: 30px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 2px solid var(--seal);
  border-radius: 8px;
  color: var(--seal);
  font-family: "STSong", "SimSun", serif;
  font-size: 14px;
  transform: rotate(-4deg);
}

/* 票面字段（点线引导） */
.frow { display: flex; align-items: baseline; padding: 7px 0; font-size: 14px; }
.frow dt { flex: none; color: var(--ink-2); font-size: 13px; }
.frow .dots { flex: 1; border-bottom: 2px dotted var(--line); margin: 0 8px; transform: translateY(-4px); }
.frow dd { flex: none; font-weight: 600; text-align: right; max-width: 70%; }

.rich { font-size: 14px; color: #3A3F4B; word-break: break-all; }
.rich p { margin-bottom: 8px; }

/* 更多推荐 mini 行 */
.mini {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 10px 2px;
  border-bottom: 1px dashed var(--line-soft);
  font-size: 14px;
}
.mini:last-child { border-bottom: none; }
.mini__name { font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mini__tags { flex: 1; min-width: 0; color: var(--ink-2); font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mini__rent { flex: none; font-family: var(--font-display); font-weight: 800; color: var(--seal); font-size: 20px; }
.mini__rent i { font-style: normal; font-size: 11px; color: var(--ink-2); font-weight: 400; }
.mini__go { flex: none; color: var(--ink-2); font-size: 20px; }

/* ---------- 底部固定办理栏 ---------- */
.bar-fixed {
  position: fixed;
  left: 0; right: 0; bottom: 0;
  background: rgba(251, 246, 236, .94);
  backdrop-filter: blur(8px);
  border-top: 1px solid var(--line);
  box-shadow: 0 -8px 24px -14px rgba(31, 35, 44, .35);
  padding: 10px 0 calc(10px + env(safe-area-inset-bottom));
  z-index: 40;
}
.bar-fixed__inner { display: flex; align-items: center; gap: 14px; }
.bar-fixed__price { flex: none; font-size: 12px; color: var(--ink-2); }
.bar-fixed__price b { font-family: var(--font-display); font-size: 26px; color: var(--seal); margin: 0 2px; }

/* 印章按钮 */
.btn-seal {
  flex: 1;
  display: block;
  text-align: center;
  padding: 13px 10px;
  background: linear-gradient(180deg, #D1462F, #B32E1F);
  color: #FFF7EC;
  border: none;
  border-radius: 12px;
  font-size: 16px;
  font-weight: 700;
  letter-spacing: 3px;
  cursor: pointer;
  box-shadow: 0 5px 0 var(--seal-deep), 0 12px 20px -10px rgba(140, 36, 24, .55);
  transition: transform .1s, box-shadow .1s;
}
.btn-seal:active { transform: translateY(3px); box-shadow: 0 2px 0 var(--seal-deep); }
.btn-seal:disabled { opacity: .6; cursor: not-allowed; }
.btn-seal.is-disabled { background: #9A948A; box-shadow: 0 5px 0 #6F6A62; pointer-events: none; }

.btn-ghost {
  flex: 1;
  display: block;
  text-align: center;
  padding: 13px 10px;
  border: 1.5px solid var(--ink);
  border-radius: 12px;
  color: var(--ink);
  font-size: 15px;
  font-weight: 600;
  letter-spacing: 2px;
  background: transparent;
}
.btn-row { display: flex; gap: 12px; margin-top: 18px; }

/* ---------- 下单表单 ---------- */
.mini-ticket {
  display: flex;
  align-items: center;
  gap: 10px;
  background: var(--card);
  border: 2px dashed var(--line);
  border-radius: 12px;
  padding: 12px 14px;
  margin-bottom: 16px;
}
.mini-ticket__name { font-size: 15px; flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mini-ticket__rent { font-family: var(--font-display); font-weight: 800; color: var(--seal); font-size: 22px; }
.mini-ticket__rent i { font-style: normal; font-size: 11px; color: var(--ink-2); font-weight: 400; }

.section {
  background: var(--card);
  border-radius: 16px;
  box-shadow: var(--shadow);
  padding: 18px 16px;
  margin-bottom: 18px;
}
.section__head { display: flex; align-items: center; gap: 10px; margin-bottom: 16px; }
.section__no {
  flex: none;
  width: 32px; height: 32px;
  border: 2px solid var(--seal);
  border-radius: 8px;
  color: var(--seal);
  font-family: var(--font-num);
  font-size: 13px;
  font-weight: 700;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transform: rotate(-4deg);
}
.section__head h2 { font-size: 15px; flex: none; }
.section__tip { flex: 1; text-align: right; font-size: 11px; color: var(--ink-2); }

.field { margin-bottom: 15px; }
.field:last-child { margin-bottom: 0; }
.field label { display: block; font-size: 12px; color: var(--ink-2); margin-bottom: 5px; letter-spacing: 1px; }
.field input[type="text"] {
  width: 100%;
  background: transparent;
  border: none;
  border-bottom: 1.5px solid var(--line);
  border-radius: 0;
  padding: 8px 2px;
  font-size: 16px;
  color: var(--ink);
  outline: none;
  transition: border-color .2s;
}
.field input[type="text"]:focus { border-color: var(--seal); }
.field input[type="text"]::placeholder { color: #B4AC9A; font-size: 14px; }

/* 证件上传 */
.upload-note { font-size: 12px; color: var(--amber); margin-bottom: 12px; }
.upload-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.upload-box {
  position: relative;
  aspect-ratio: 3 / 4;
  border: 1.5px dashed var(--line);
  border-radius: 10px;
  background: #F6EFE0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  color: var(--ink-2);
  cursor: pointer;
  overflow: hidden;
  transition: border-color .2s, background .2s;
}
.upload-box:hover { border-color: var(--seal); }
.upload-box__ico { display: flex; color: #9A9384; }
.upload-box__label { font-size: 12px; font-weight: 600; color: var(--ink); }
.upload-box__hint { font-size: 10px; }
.upload-box input[type="file"] { position: absolute; inset: 0; opacity: 0; cursor: pointer; }
.upload-box__preview { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.upload-box.has-file { border-style: solid; border-color: var(--ok); }
.upload-box.has-file .upload-box__ico, .upload-box.has-file .upload-box__label, .upload-box.has-file .upload-box__hint { display: none; }

/* 同意协议 + 验证码 */
.agree { display: flex; gap: 9px; align-items: flex-start; font-size: 13px; color: var(--ink-2); cursor: pointer; margin-bottom: 16px; }
.agree input { margin-top: 4px; accent-color: var(--seal); }
.agree b { color: var(--seal); font-weight: 600; }

.captcha-row { display: flex; align-items: center; gap: 12px; }
.field .captcha-row input[type="text"] {
  flex: none;
  width: 90px;
  background: transparent;
  border: 1.5px dashed var(--line);
  border-radius: 8px;
  padding: 8px;
  font-size: 16px;
  text-align: center;
  outline: none;
}
.field .captcha-row input[type="text"]:focus { border-color: var(--seal); }
.captcha-q {
  flex: none;
  white-space: nowrap;
  font-family: var(--font-num);
  font-size: 15px;
  letter-spacing: 2px;
  background: var(--paper-2);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 7px 16px;
  user-select: none;
}
.captcha-q b { color: var(--seal); font-size: 18px; }

.form-tip { text-align: center; font-size: 11px; color: #9A9384; margin-top: 10px; letter-spacing: 1px; }

/* 错误提示 */
.alert {
  background: #FBEDEA;
  border: 1.5px solid #E8C4BD;
  border-radius: 12px;
  padding: 12px 16px;
  margin-bottom: 16px;
  color: var(--seal-deep);
  font-size: 13px;
}
.alert ul { padding-left: 18px; margin-top: 6px; }

/* 逐字段实时校验提示 */
.field-err {
  color: #B3261E;
  font-size: 12px;
  margin-top: 5px;
}
.field--error input[type="text"] { border-color: #B3261E; }
.field--error .region-selects select { border-color: #B3261E; }

/* ---------- 成功页 ---------- */
.success { text-align: center; padding: 34px 20px; }
.stamp {
  width: 128px; height: 128px;
  margin: 4px auto 22px;
  border: 4px double var(--seal);
  border-radius: 16px;
  color: var(--seal);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  transform: rotate(-8deg);
  animation: stampIn .5s .12s cubic-bezier(.2, 1.6, .4, 1) backwards;
  box-shadow: 0 0 0 6px rgba(196, 59, 44, .08);
}
.stamp b { font-size: 30px; letter-spacing: 8px; padding-left: 8px; font-weight: 800; }
.stamp i { font-style: normal; font-family: var(--font-num); font-size: 10px; letter-spacing: 2px; margin-top: 4px; }
@keyframes stampIn {
  from { opacity: 0; transform: rotate(-8deg) scale(2.6); }
  to { opacity: 1; transform: rotate(-8deg) scale(1); }
}
.success__title { font-size: 21px; margin-bottom: 6px; }
.success__sub { font-size: 13px; color: var(--ink-2); margin-bottom: 22px; }

.order-no {
  background: var(--paper-2);
  border: 1px solid var(--line);
  border-radius: 12px;
  padding: 14px 14px 12px;
  margin-bottom: 22px;
}
.order-no__label { font-size: 11px; color: var(--ink-2); letter-spacing: 3px; }
.barcode {
  height: 30px;
  margin: 6px 0 10px;
  background: repeating-linear-gradient(90deg, var(--ink) 0 2px, transparent 2px 5px, var(--ink) 5px 7px, transparent 7px 10px, var(--ink) 10px 11px, transparent 11px 15px);
  opacity: .85;
}
.order-no__row { display: flex; align-items: center; justify-content: center; gap: 10px; }
.order-no__text { font-family: var(--font-num); font-size: 15px; letter-spacing: 1px; }
.copy-btn {
  font-size: 11px;
  color: var(--seal);
  border: 1px solid var(--seal);
  background: transparent;
  border-radius: 5px;
  padding: 2px 10px;
  cursor: pointer;
}
.copy-btn:active { background: rgba(196, 59, 44, .1); }

.steps { text-align: left; margin-bottom: 22px; }
.steps h2 { font-size: 14px; margin-bottom: 12px; padding-bottom: 8px; border-bottom: 2px dashed var(--line); }
.steps ol { list-style: none; }
.steps li { display: flex; gap: 10px; align-items: flex-start; padding: 7px 0; font-size: 13px; color: #3A3F4B; }
.steps li b {
  flex: none;
  width: 22px; height: 22px;
  border: 1.5px solid var(--seal);
  border-radius: 50%;
  color: var(--seal);
  font-family: var(--font-num);
  font-size: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-top: 1px;
}

.service {
  background: #F6EFE0;
  border: 1px dashed var(--line);
  border-radius: 12px;
  padding: 12px 16px;
  font-size: 13px;
  margin-bottom: 6px;
}
.service b { color: var(--seal); }

/* ---------- 查询页 ---------- */
.query-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; margin-bottom: 12px; }
.query-head__name { font-size: 16px; }
.query-head__meta { font-family: var(--font-num); font-size: 11px; color: var(--ink-2); margin-top: 3px; letter-spacing: .5px; }

.qcard { padding: 12px 0; border-bottom: 1.5px dashed var(--line-soft); }
.qcard:last-child { border-bottom: none; }

.st-badge {
  flex: none;
  font-size: 12px;
  font-weight: 600;
  padding: 3px 12px;
  border-radius: 20px;
}
.st--wait { background: #F5E8CE; color: #9A6A13; }
.st--doing { background: #DDE8F7; color: #2A5CA8; }
.st--done { background: #DCEEE3; color: var(--ok); }
.st--fail { background: #FBEDEA; color: var(--seal-deep); }
.st--cancel { background: #EAEAEA; color: #777; }

/* 进度时间线 */
.timeline { position: relative; padding-left: 30px; }
.timeline::before {
  content: '';
  position: absolute;
  left: 9px; top: 8px; bottom: 8px;
  width: 2px;
  background: var(--line);
}
.tl-item { position: relative; padding: 11px 0; display: flex; align-items: center; gap: 10px; }
.tl-item .dot {
  position: absolute;
  left: -30px;
  width: 20px; height: 20px;
  border-radius: 50%;
  border: 2px solid var(--line);
  background: var(--paper);
  z-index: 1;
}
.tl-name { font-size: 14px; color: #9A9384; }
.tl-item.done .dot { border-color: var(--seal); background: var(--seal); }
.tl-item.done .tl-name { color: var(--ink); font-weight: 600; }
.tl-item.cur .dot { border-color: var(--seal); background: var(--paper); box-shadow: 0 0 0 5px rgba(196, 59, 44, .18); animation: pulse 1.6s ease infinite; }
.tl-item.cur .tl-name { color: var(--seal); font-weight: 700; }
.tl-tag { font-size: 11px; color: var(--seal); border: 1px solid var(--seal); border-radius: 4px; padding: 0 8px; }
@keyframes pulse {
  0%, 100% { box-shadow: 0 0 0 5px rgba(196, 59, 44, .18); }
  50% { box-shadow: 0 0 0 9px rgba(196, 59, 44, .06); }
}

/* ---------- 空态 / 404 ---------- */
.empty { text-align: center; padding: 40px 10px; }
.empty__stamp {
  display: inline-block;
  border: 3px double var(--seal);
  border-radius: 12px;
  color: var(--seal);
  font-size: 20px;
  font-weight: 700;
  letter-spacing: 6px;
  padding: 10px 22px 10px 26px;
  transform: rotate(-6deg);
  margin-bottom: 18px;
}
.empty p { color: var(--ink-2); font-size: 13px; }

.error { text-align: center; padding: 40px 20px; }
.error__code {
  font-family: var(--font-display);
  font-size: 84px;
  font-weight: 800;
  color: var(--line);
  line-height: 1;
  margin-bottom: 6px;
}
.stamp--small { width: 104px; height: 58px; margin: 14px auto; border-radius: 12px; }
.stamp--small b { font-size: 18px; letter-spacing: 5px; }
.error p { color: var(--ink-2); font-size: 14px; }

/* ---------- 页脚 ---------- */
.foot {
  margin-top: 40px;
  padding: 26px 16px 40px;
  border-top: 2px dashed var(--line);
  color: var(--ink-2);
  font-size: 12px;
  text-align: center;
}
.foot__row { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 22px; margin-bottom: 8px; }
.foot__brand { color: var(--ink); font-weight: 700; letter-spacing: 2px; }
.foot__note { margin-bottom: 4px; }
.foot__icp { color: #9A9384; }
.foot__copy { margin-top: 8px; font-family: var(--font-num); font-size: 11px; color: #9A9384; }

/* ---------- 省市区联动选择 ---------- */
.region-selects {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}
.region-selects select {
  width: 100%;
  border: 1.5px solid var(--line);
  background: #FFFDF6;
  border-radius: 8px;
  padding: 9px 8px;
  font-size: 13px;
  color: var(--ink);
  outline: none;
  transition: border-color .15s, box-shadow .15s;
}
.region-selects select:focus {
  border-color: var(--seal);
  box-shadow: 0 0 0 3px rgba(196, 59, 44, .12);
}
.region-selects select:disabled {
  background: var(--paper-2);
  color: #9A9384;
}
.region-tip {
  font-size: 11px;
  color: #9A9384;
  margin-top: 6px;
  letter-spacing: 1px;
}

/* ---------- 首页商品列表（参考样式：白底列表 + 虚线分隔 + 蓝按钮） ---------- */
body.page-home { background: #F6F7F9; background-image: none; }
body.page-home .hero__edge {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M0 9a9 9 0 0 0 18 0Z' fill='%23F6F7F9'/%3E%3C/svg%3E");
}

.sheet {
  background: #FFF;
  border-radius: 16px;
  box-shadow: 0 12px 30px -18px rgba(31, 35, 44, .28);
  padding: 4px 16px;
  margin-top: 22px;
  overflow: hidden;
}

.prow {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 16px 2px;
  border-bottom: 1.5px dashed #E3E6EC;
}
.prow:last-child { border-bottom: none; }

.prow__link {
  position: absolute;
  inset: 0;
  z-index: 1;
}
.prow__link:focus-visible { outline: 2px solid var(--seal); outline-offset: 3px; }

.prow__thumb {
  flex: none;
  width: 76px;
  height: 76px;
  border-radius: 10px;
  overflow: hidden;
  background: #F2F3F6;
}
.prow__thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.prow__thumb img.img--contain { object-fit: contain; padding: 5px; }
.prow__thumb img.img--top { object-fit: cover; object-position: center 16%; }

.prow__body { flex: 1; min-width: 0; }

.prow__top { display: flex; align-items: center; gap: 8px; }
.prow__name {
  flex: 1;
  min-width: 0;
  font-size: 15.5px;
  font-weight: 700;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.prow__rent { flex: none; display: flex; align-items: baseline; gap: 2px; }
.prow__rent b {
  font-family: var(--font-display);
  font-size: 27px;
  font-weight: 800;
  line-height: 1;
  color: var(--ink);
}
.prow__rent span { font-size: 11px; color: var(--ink-2); }

.prow__tags {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  margin-top: 9px;
}
.prow__tags span {
  font-size: 12px;
  color: var(--ink-2);
  background: #F5F6F8;
  border-radius: 4px;
  padding: 2px 9px;
}
.prow__detail {
  position: relative;
  z-index: 2;
  margin-left: auto;
  font-size: 12px;
  color: #8A8F9C;
  white-space: nowrap;
}
.prow__detail:hover { color: var(--seal); }

.prow__foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-top: 10px;
}
.pbadge {
  font-size: 11.5px;
  color: #C2415B;
  background: #FDEEF3;
  border: 1px solid #F7D3DE;
  border-radius: 20px;
  padding: 2px 12px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 60%;
}
.pbtn {
  position: relative;
  z-index: 2;
  margin-left: auto;
  flex: none;
  background: linear-gradient(180deg, #4D8DFF, #0D6EFD);
  color: #FFF;
  border-radius: 999px;
  padding: 7px 24px;
  font-size: 13.5px;
  font-weight: 600;
  letter-spacing: 1px;
  box-shadow: 0 5px 12px -5px rgba(13, 110, 253, .55);
  user-select: none;
}
.pbtn:active { transform: translateY(1px); box-shadow: 0 2px 6px -3px rgba(13, 110, 253, .6); }

/* 详情页票券缩略图同样支持长图适配 */
.ticket__thumb img.img--contain { object-fit: contain; padding: 8px; }
.ticket__thumb img.img--top { object-fit: cover; object-position: center 15%; }

/* ---------- 商品图与办理页介绍 ---------- */
.card--img { padding: 10px; }
.card--img img { width: 100%; border-radius: 10px; display: block; }

.intro__img { margin-bottom: 12px; }
.intro__img img { width: 100%; border-radius: 10px; display: block; }
.intro__fields { margin-bottom: 12px; }
.intro__notice {
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1.5px dashed var(--line);
  font-size: 13px;
  color: var(--ink-2);
}
.intro__notice b { display: block; margin-bottom: 6px; color: var(--seal); font-size: 13px; }

/* ---------- 直达下单入口 ---------- */
.sr-only {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

.hero__cta {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 14px;
  background: linear-gradient(180deg, #D1462F, #B32E1F);
  color: #FFF7EC;
  font-size: 13.5px;
  font-weight: 700;
  letter-spacing: 3px;
  padding: 9px 22px 9px 24px;
  border-radius: 999px;
  box-shadow: 0 4px 0 var(--seal-deep), 0 10px 18px -12px rgba(0, 0, 0, .55);
  transition: transform .1s, box-shadow .1s;
}
.hero__cta span { font-size: 18px; }
.hero__cta:active { transform: translateY(3px); box-shadow: 0 2px 0 var(--seal-deep); }

.ticket__link {
  position: absolute;
  inset: 0;
  z-index: 1;
  border-radius: 16px;
}
.ticket__link:focus-visible { outline: 2px solid var(--seal); outline-offset: 3px; }

.ticket__thumb {
  position: relative;
  width: 84px;
  flex: none;
  align-self: stretch;
  overflow: hidden;
  border-radius: 16px 0 0 16px;
  background: var(--paper-2);
}
.ticket__thumb img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.ticket--detail .ticket__thumb { width: 128px; }

.ticket__detail {
  position: relative;
  z-index: 2;
  display: inline-block;
  margin-top: 12px;
  font-size: 12px;
  color: var(--ink-2);
  border: 1px solid var(--line);
  background: rgba(251, 246, 236, .92);
  border-radius: 20px;
  padding: 3px 12px;
  letter-spacing: 1px;
  transition: color .15s, border-color .15s;
}
.ticket__detail:hover { color: var(--seal); border-color: var(--seal); }

@media (prefers-reduced-motion: reduce) {
  .reveal, .stamp { animation: none; }
  .tl-item.cur .dot { animation: none; }
}
