/* Third-round PSD, 2026-10-12. Measurements include text transforms.
   Native 248px WeChat header is excluded. Fixed text sizes/line breaks are
   intentional; flexible photo backgrounds and safe areas accommodate phones. */
.splash-slogan {
  left: calc(50% - 1.041667px); right: auto;
  width: 249.305556px; height: 75.347222px;
  transform: translateX(-50%); text-shadow: none;
  top: max(6.838833%, calc(env(safe-area-inset-top) + 48px));
}
#s-splash .splash-slogan { top: max(6.838833%, calc(env(safe-area-inset-top) + 48px)); }
.splash-bottom { bottom: max(5.882353%, env(safe-area-inset-bottom)); gap: calc(7.291667 * var(--u)); padding-bottom: 0; }
.brand-row { margin-bottom: calc(10.416667 * var(--u)); gap: 0; }
.brand-lockup { width: 179.513889px; height: 20.486111px; }
#s-splash .btn-primary { display: flex; align-items: center; justify-content: center; width: calc(181.25 * var(--u)); height: calc(38.888889 * var(--u)); line-height: calc(38.888889 * var(--u)); border-radius: calc(6.944444 * var(--u)); }
.splash-button-label { width: 55.902778px; height: 13.888889px; }
.btn-history .splash-button-label { width: 56.597222px; height: 13.541667px; }

/* These two fixed-content dialogs retain the PSD text column on every phone.
   308px fits a 320px viewport without shrinking fonts or changing line breaks. */
#p-privacy .popup, #p-photoguide .popup {
  width: 307.986111px; height: 313.194444px; min-height: 313.194444px;
  padding: 0; top: -42.881944px; border-radius: 8.680556px;
  text-rendering: geometricPrecision;
}
#p-privacy .popup-title, #p-photoguide .popup-title {
  position: absolute; margin: 0; font-size: 23.148148px; line-height: 28.935185px;
  letter-spacing: 0; white-space: nowrap;
}
#p-privacy .popup-title { left: 31.944444px; top: 35px; }
#p-photoguide .popup-title { left: 37.5px; top: 61.388889px; text-align: left; }
#p-privacy .popup-body, .guide-description {
  position: absolute; margin: 0;
  font-size: 11.574074px; line-height: 17.361111px; font-weight: 400; letter-spacing: 0;
}
#p-privacy .popup-body { left: 31.944444px; top: 109.027778px; width: 243.75px; }
/* Text-frame advance includes side bearings beyond the PSD visible-ink bbox. */
.guide-description { left: 37.847222px; top: 135.069444px; width: 237px; }
.guide-description span { white-space: nowrap; }
#p-privacy .privacy-row { position: absolute; left: 29.861111px; top: 184.375px; gap: 10.069444px; }
#p-privacy .privacy-text { font-size: 10.127315px; line-height: 18.807870px; white-space: nowrap; }
#p-privacy .privacy-link { font-family: "MiSans Demibold", var(--font); font-weight: 700; }
#p-privacy .checkbox { width: 11.805556px; height: 12.152778px; }
#p-privacy .popup-btn, #p-photoguide .popup-btn {
  position: absolute; left: 63.194444px; margin: 0;
  width: 181.25px; height: 38.888889px; line-height: 38.888889px;
  font-family: "MiSans Demibold", var(--font); font-size: 14.467593px; font-weight: 700;
  letter-spacing: 0; border-radius: 6.944444px;
}
#p-privacy .popup-btn { top: 239.930556px; }
#p-photoguide .popup-btn { top: 219.791667px; }
#p-privacy .popup-close, #p-photoguide .popup-close { top: 10.055556px; right: 10.055556px; width: 32px; height: 32px; }
#p-privacy .popup-close img, #p-photoguide .popup-close img { width: 17.708333px; height: 17.361111px; }
@media (max-height: 440px) {
  #p-privacy .popup, #p-photoguide .popup { top: 0; }
}

/* PSD 984x503 card; text starts 77/78px in, image starts at x480.
   Fixed typography is preserved even at 320px; never center-crop the artwork. */
.prod-title { font-size: 23.148148px; line-height: 31.828704px; margin-top: calc(19.583333 * var(--u)); letter-spacing: 0; }
.card-product { width: calc(341.666667 * var(--u)); margin-left: calc(-0.333333 * var(--u)); border-radius: calc(5.208333 * var(--u)); }
.prod-card { position: relative; height: calc(174.652778 * var(--u)); min-height: 0; text-rendering: geometricPrecision; }
.prod-info { flex: 0 0 48.780488%; padding: 0; }
#product-title {
  position: absolute; left: 26.736111px; top: calc(34.027778 * var(--u));
  margin: 0; font-size: 14.467593px; line-height: 15.071903px; font-weight: 600;
}
.prod-name {
  position: absolute; left: 26.736111px; top: calc(57.638889 * var(--u));
  margin: 0; font-size: 11.574074px; line-height: 17.361111px; font-weight: 600;
}
.prod-badge { position: absolute; left: 27.430556px; top: calc(115.277778 * var(--u)); width: calc(35.069444 * var(--u)); margin: 0; }
.prod-scroll { flex: 0 0 51.219512%; }
.prod-scroll img { width: 100%; height: 100%; aspect-ratio: auto; object-fit: fill; }

/* Exact static PSD waiting image. No fake progress or added scanning animation.
   Contain the original composition instead of stretching/cropping faces/icons. */
#p-analyzing { background: #000; overflow: hidden; }
.scan-artwork { width: 100%; height: 100%; object-fit: contain; }
#p-analyzing:not(.scan-artwork-ready) .scan-artwork { visibility: hidden; }
/* A failed/stalled image must not leave an unexplained black screen. The live
   status is visually hidden only once the exact PSD artwork has loaded. */
.scan-status { position: absolute; top: 10.5%; left: 0; right: 0; color: #fff; text-align: center; font: 700 23.148148px/1.4 "MiSans Demibold",var(--font); }
.scan-artwork-ready .scan-status { width: 1px; height: 1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.scan-cancel {
  position: absolute; left: 50%; bottom: max(10px, env(safe-area-inset-bottom));
  transform: translateX(-50%); padding: 10px 24px;
  color: #bbb; font: 12px/1.5 "PingFang SC","Microsoft YaHei",sans-serif;
}
.scan-cancel:focus-visible { outline: 1px solid var(--yellow); border-radius: 4px; }
