
html {
  font-size: calc(min(100vw, 430px) / 750);
  -webkit-text-size-adjust: 100%;
}
*, *::before, *::after { box-sizing: border-box; }
html, body {
  margin: 0;
  padding: 0;
  height: 100%;
}
body {
  max-width: 430px;
  margin: 0 auto;
  background: #f3f5f7;
  color: #1f2937;
  font-size: 28rem;
  font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB",
    "Microsoft YaHei", "Noto Sans SC", sans-serif;
  min-height: 100vh;
  min-height: 100dvh;
  overflow-x: hidden;
}
img { max-width: 100%; display: block; }
button, input, select, textarea {
  font: inherit;
  color: inherit;
}
button { cursor: pointer; }
a { color: inherit; text-decoration: none; }
input.input, select.picker, textarea.input {
  width: 100%;
  outline: none;
  appearance: none;
  -webkit-appearance: none;
}
.btn { border: none; width: 100%; display: block; }
.btn[disabled] { opacity: 0.5; pointer-events: none; }

#app {
  min-height: 100vh;
  min-height: 100dvh;
  background: #f3f5f7;
  position: relative;
  overflow-x: hidden;
}

.nav-bar {
  position: sticky;
  top: 0;
  z-index: 40;
  height: calc(88rem + env(safe-area-inset-top, 0px));
  padding-top: env(safe-area-inset-top, 0px);
  background: #E85D04;
  color: #ffffff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 34rem;
  font-weight: 600;
  letter-spacing: 1rem;
}
.nav-title {
  max-width: 52%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  text-align: center;
}
.nav-back {
  position: absolute;
  left: 8rem;
  top: env(safe-area-inset-top, 0px);
  height: 88rem;
  min-width: 88rem;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  font-size: 40rem;
  font-weight: 400;
  background: transparent;
  border: none;
  padding: 0 16rem;
}
.nav-lang {
  position: absolute;
  right: 12rem;
  top: env(safe-area-inset-top, 0px);
  height: 88rem;
  display: flex;
  align-items: center;
  z-index: 1;
}
.lang-switch {
  display: flex;
  align-items: center;
  background: rgba(255, 255, 255, 0.18);
  border-radius: 999px;
  padding: 4rem;
}
.lang-btn {
  border: none;
  background: transparent;
  color: rgba(255, 255, 255, 0.88);
  font-size: 22rem;
  font-weight: 700;
  line-height: 1;
  letter-spacing: 0;
  padding: 10rem 16rem;
  border-radius: 999px;
  min-width: 56rem;
}
.lang-btn.active {
  background: #fff;
  color: #E85D04;
}
.page-body {
  min-height: calc(100vh - 88rem - env(safe-area-inset-top, 0px));
}
.page-body.has-tab {
  padding-bottom: calc(120rem + env(safe-area-inset-bottom, 0px));
}
.container {
  min-height: auto;
  padding: 24rem 28rem 48rem;
}

.tab-bar {
  position: fixed;
  left: 50%;
  transform: translateX(-50%);
  bottom: 0;
  width: 100%;
  max-width: 430px;
  height: calc(100rem + env(safe-area-inset-bottom, 0px));
  padding-bottom: env(safe-area-inset-bottom, 0px);
  background: #ffffff;
  border-top: 1px solid #f3f4f6;
  display: flex;
  z-index: 40;
}
.tab-item {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 6rem;
  color: #9ca3af;
  background: transparent;
  border: none;
  font-size: 20rem;
  padding: 0;
}
.tab-item.active { color: #E85D04; }
.tab-item svg { width: 44rem; height: 44rem; }

.toast {
  position: fixed;
  left: 50%;
  top: 46%;
  transform: translate(-50%, -50%);
  background: rgba(17, 24, 39, 0.86);
  color: #fff;
  padding: 18rem 36rem;
  border-radius: 16rem;
  font-size: 26rem;
  z-index: 80;
  max-width: 70%;
  text-align: center;
  pointer-events: none;
}
.loading-mask, .modal-mask, .scan-mask {
  position: fixed;
  inset: 0;
  background: rgba(15, 23, 42, 0.35);
  z-index: 70;
  display: flex;
  align-items: center;
  justify-content: center;
}
.loading-box {
  background: rgba(17, 24, 39, 0.88);
  color: #fff;
  padding: 28rem 40rem;
  border-radius: 16rem;
  font-size: 26rem;
}
.modal-box {
  width: 560rem;
  max-width: 86%;
  background: #fff;
  border-radius: 24rem;
  padding: 40rem 36rem 28rem;
}
.modal-title { font-size: 32rem; font-weight: 650; color: #111827; }
.modal-content { margin-top: 16rem; font-size: 26rem; color: #6b7280; line-height: 1.6; }
.modal-actions { display: flex; gap: 16rem; margin-top: 32rem; }
.modal-actions .btn { margin-top: 0; }
.scan-box {
  position: relative;
  width: 100%;
  height: 100%;
  max-width: none;
  background: #000;
  border-radius: 0;
  overflow: hidden;
  color: #fff;
}
.scan-box > video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  background: #000;
}
.scan-ui {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  pointer-events: none;
}
.scan-frame {
  width: 460rem;
  height: 460rem;
  max-width: 72vw;
  max-height: 72vw;
  border: 4px solid rgba(232, 93, 4, 0.95);
  border-radius: 16rem;
  box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.38);
}
.scan-box .scan-tip {
  margin-top: 36rem;
  padding: 0 24rem;
  font-size: 28rem;
  color: #fff;
  text-align: center;
  text-shadow: 0 1px 6px rgba(0,0,0,0.65);
}
.scan-bar {
  position: absolute;
  left: 24rem;
  right: 24rem;
  bottom: calc(32rem + env(safe-area-inset-bottom, 0px));
  display: flex;
  gap: 16rem;
  align-items: center;
  justify-content: space-between;
  z-index: 2;
}
.scan-bar-btn {
  flex: 1;
  margin: 0;
  border: none;
  background: rgba(255,255,255,0.16);
  color: #fff;
  border-radius: 16rem;
  font-size: 24rem;
  padding: 18rem 8rem;
  text-align: center;
}
.scan-album-link {
  position: relative;
  overflow: hidden;
  display: block;
}
.scan-album-link input[type="file"] {
  position: absolute;
  inset: 0;
  opacity: 0;
  width: 100%;
  height: 100%;
}

.brand-word {
  width: 420rem;
  height: 140rem;
  margin: 0 auto 16rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
.brand-word .cn {
  font-size: 52rem;
  font-weight: 800;
  color: #E85D04;
  letter-spacing: 4rem;
  line-height: 1;
}
.brand-word .en {
  margin-top: 12rem;
  font-size: 20rem;
  color: #94a3b8;
  letter-spacing: 3rem;
}

.login-page {
  min-height: calc(100vh - 88rem - env(safe-area-inset-top, 0px));
}
.login-page .phone-btn {
  width: 100%;
}

.row-link { cursor: pointer; }
.card.device, .card.product, .card.fault, .power-card, .profile-card { cursor: pointer; }
.mode, .sum-item, .sum-link, .cat-btn, .range-btn, .seg-item { cursor: pointer; }

.hidden {
  position: absolute;
  left: 0;
  top: 0;
  width: 1px;
  height: 1px;
  opacity: 0;
  overflow: hidden;
}
.scan-mask {
  z-index: 90;
  padding: 0;
  background: #000;
  display: block;
}


/* ==== app / pages from miniprogram ==== */

/* app.wxss */
/* page -> body handled in extra */ unused-page {
  background: #f3f5f7;
  color: #1f2937;
  font-size: 28rem;
  box-sizing: border-box;
}
.container {
  min-height: 100vh;
  padding: 24rem 28rem 48rem;
  box-sizing: border-box;
}
.card {
  background: #ffffff;
  border-radius: 24rem;
  padding: 32rem;
  margin-bottom: 24rem;
  box-shadow: 0 8rem 28rem rgba(15, 23, 42, 0.05);
}
.card-head {
  display: flex;
  align-items: center;
  margin-bottom: 28rem;
}
.card-head .h {
  font-size: 32rem;
  font-weight: 650;
  color: #111827;
}
.card-head .div {
  margin: 0 14rem;
  color: #d1d5db;
}
.card-head .s {
  font-size: 28rem;
  color: #6b7280;
}
.run-time {
  margin-left: auto;
  color: #E85D04;
  font-weight: 650;
  font-size: 26rem;
  font-variant-numeric: tabular-nums;
  letter-spacing: 0.02em;
}
.run-time.off {
  color: #9ca3af;
  font-weight: 500;
}
.run-stats {
  margin-top: 20rem;
  padding-top: 16rem;
  border-top: 1rem solid #f3f4f6;
}
.run-sum {
  font-size: 24rem;
  color: #6b7280;
  margin-bottom: 8rem;
}
.run-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 16rem;
  font-size: 24rem;
  padding: 10rem 0;
  color: #374151;
}
.run-row.on .run-dur {
  color: #E85D04;
  font-weight: 600;
}
.run-when {
  color: #9ca3af;
  flex-shrink: 0;
}
.run-dur {
  text-align: right;
}
.run-empty {
  font-size: 24rem;
  color: #9ca3af;
}
.run-list .run-row:nth-child(n+4) {
  display: none;
}
.run-stats.expanded .run-list .run-row:nth-child(n+4) {
  display: flex;
}
.run-more {
  display: block;
  width: 100%;
  margin-top: 4rem;
  padding: 8rem 0 2rem;
  border: 0;
  background: transparent;
  color: #E85D04;
  font-size: 24rem;
  text-align: center;
  cursor: pointer;
}
.title {
  font-size: 36rem;
  font-weight: 650;
  color: #111827;
  margin-bottom: 8rem;
}
.sub {
  color: #6b7280;
  font-size: 24rem;
  margin-bottom: 28rem;
}
.page-brand {
  width: 96rem;
  height: 96rem;
  background: transparent;
  margin-bottom: 16rem;
  object-fit: contain;
  flex-shrink: 0;
}
.head-brand {
  display: flex;
  align-items: center;
  gap: 20rem;
}
.head-brand .page-brand {
  margin-bottom: 0;
}
.head-copy {
  flex: 1;
  min-width: 0;
}
.head-copy .title {
  margin-bottom: 6rem;
}
.head-copy .sub {
  margin-bottom: 0;
}
.field {
  margin-bottom: 24rem;
}
.field .label {
  color: #6b7280;
  font-size: 24rem;
  margin-bottom: 12rem;
}
.input, .picker {
  background: #f8fafc;
  border: 1rem solid #e5e7eb;
  border-radius: 16rem;
  padding: 22rem 24rem;
  color: #111827;
}
.input.readonly {
  color: #64748b;
}
.btn {
  background: #E85D04;
  color: #ffffff;
  border-radius: 16rem;
  text-align: center;
  padding: 22rem;
  font-weight: 600;
  margin-top: 12rem;
}
.btn.ghost {
  background: #FFF7ED;
  color: #E85D04;
  border: 1rem solid #FDBA74;
}
.btn.warn {
  background: #f59e0b;
  color: #ffffff;
}
.btn.danger {
  background: #ef4444;
  color: #ffffff;
}
.btn.mini {
  padding: 14rem 28rem;
  font-size: 24rem;
  margin-top: 0;
  border-radius: 999rem;
}
.btn[disabled] {
  opacity: 0.5;
}
.tag {
  display: inline-block;
  padding: 6rem 16rem;
  border-radius: 999rem;
  font-size: 22rem;
}
.tag.on {
  background: #dcfce7;
  color: #16a34a;
}
.tag.off {
  background: #f3f4f6;
  color: #6b7280;
}
.tag.ok {
  background: #d1fae5;
  color: #047857;
}
.tag.bad {
  background: #fee2e2;
  color: #b91c1c;
}
.tag.ota {
  background: #FFEDD5;
  color: #9a3412;
  font-weight: 600;
}
.empty {
  text-align: center;
  color: #9ca3af;
  padding: 80rem 20rem;
}
.row-link {
  display: flex;
  align-items: center;
  padding: 32rem 0;
  border-bottom: 1rem solid #f3f4f6;
}
.row-link:last-child {
  border-bottom: none;
  padding-bottom: 8rem;
}
.row-link:first-child {
  padding-top: 8rem;
}
.ico {
  width: 72rem;
  height: 72rem;
  border-radius: 50%;
  background: #FFEDD5;
  color: #E85D04;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 30rem;
  flex-shrink: 0;
  overflow: hidden;
}
.ico-img {
  width: 40rem;
  height: 40rem;
  display: block;
}
.ico svg {
  width: 40rem;
  height: 40rem;
  display: block;
}
.ico.red {
  background: #fee2e2;
  color: #ef4444;
}
.ico.orange {
  background: #ffedd5;
  color: #E85D04;
}
.ico.blue {
  background: #FFEDD5;
  color: #E85D04;
}
.row-link .txt {
  flex: 1;
  margin-left: 22rem;
}
.row-link .name {
  font-size: 30rem;
  color: #111827;
  font-weight: 500;
}
.row-link .desc {
  margin-top: 6rem;
  font-size: 22rem;
  color: #9ca3af;
}
.row-link .right {
  color: #9ca3af;
  font-size: 24rem;
  margin-right: 8rem;
}
.chev {
  color: #d1d5db;
  font-size: 28rem;
}
.wx-btn {
  background: transparent;
  border: none;
  padding: 0;
  margin: 0;
  line-height: inherit;
  font-size: inherit;
  color: inherit;
  text-align: left;
  width: 100%;
}
.wx-btn::after {
  border: none;
}


/* list.wxss */
.head { margin-bottom: 4rem; }
.summary .sum-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8rem;
  text-align: center;
}
.sum-val {
  font-size: 36rem;
  font-weight: 700;
  color: #111827;
}
.sum-val.ok { color: #059669; }
.sum-val.off { color: #6b7280; }
.sum-val.bad { color: #dc2626; }
.sum-label {
  margin-top: 6rem;
  font-size: 22rem;
  color: #9ca3af;
}
.sum-link {
  margin-top: 22rem;
  padding-top: 18rem;
  border-top: 1rem solid #f3f4f6;
  color: #E85D04;
  font-size: 24rem;
  font-weight: 600;
  text-align: center;
}
.device .row {
  display: flex;
  align-items: center;
  gap: 20rem;
}
.dev-ico {
  width: 88rem;
  height: 88rem;
  border-radius: 50%;
  background: #FFEDD5;
  color: #E85D04;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 34rem;
  font-weight: 700;
  flex-shrink: 0;
}
.dev-ico svg {
  width: 44rem;
  height: 44rem;
  display: block;
}
.left { flex: 1; min-width: 0; }
.name { font-size: 30rem; font-weight: 650; color: #111827; }
.meta { color: #9ca3af; font-size: 22rem; margin-top: 8rem; }
.right {
  text-align: right;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 10rem;
  flex-shrink: 0;
}
.refresh-btn {
  width: 56rem;
  height: 56rem;
  border-radius: 50%;
  background: #FFF7ED;
  color: #E85D04;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  border: 1rem solid #FED7AA;
  padding: 0;
  cursor: pointer;
}
.refresh-svg {
  width: 30rem;
  height: 30rem;
  display: block;
}
.card.device { position: relative; }
.empty-ico {
  width: 96rem;
  height: 96rem;
  margin: 0 auto 20rem;
  border-radius: 50%;
  background: #f3f4f6;
  color: #9ca3af;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 48rem;
}
.empty-ico svg {
  width: 44rem;
  height: 44rem;
  display: block;
}


/* detail.wxss */
.power-card {
  display: flex;
  align-items: center;
  gap: 28rem;
  position: relative;
  padding-right: 88rem;
}
.power-card .refresh-btn {
  position: absolute;
  top: 20rem;
  right: 20rem;
}
.power-ico {
  width: 108rem;
  height: 108rem;
  border-radius: 50%;
  background: #ef4444;
  color: #ffffff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 56rem;
  font-weight: 700;
  box-shadow: 0 10rem 24rem rgba(239, 68, 68, 0.28);
}
.power-ico.on {
  background: #16a34a;
  box-shadow: 0 10rem 24rem rgba(22, 163, 74, 0.28);
}
.power-ico.offline,
.power-card.offline .power-ico {
  background: #d1d5db;
  box-shadow: none;
}
.power-card.on .power-title {
  color: #16a34a;
}
.power-card.offline .power-title {
  color: #9ca3af;
}
.power-svg {
  width: 52rem;
  height: 52rem;
  display: block;
}
.power-title {
  font-size: 40rem;
  font-weight: 700;
  color: #111827;
}
.power-sub {
  margin-top: 8rem;
  font-size: 24rem;
  color: #9ca3af;
}
.modes {
  display: flex;
  justify-content: space-around;
  padding: 8rem 0 4rem;
}
.mode {
  display: flex;
  flex-direction: column;
  align-items: center;
  width: 160rem;
}
.mode-ico {
  width: 104rem;
  height: 104rem;
  border-radius: 50%;
  background: #f3f4f6;
  color: #9ca3af;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 34rem;
  font-weight: 600;
}
.mode.active .mode-ico {
  background: #E85D04;
  color: #ffffff;
}
.mode-name {
  margin-top: 16rem;
  font-size: 26rem;
  color: #6b7280;
}
.mode.active .mode-name {
  color: #111827;
  font-weight: 600;
}
.modes.offline .mode-ico,
.mode.disabled .mode-ico,
.modes.offline .mode.active .mode-ico {
  background: #e5e7eb;
  color: #9ca3af;
}
.modes.offline .mode-name,
.mode.disabled .mode-name,
.modes.offline .mode.active .mode-name {
  color: #c4c4c4;
  font-weight: 400;
}
.metrics {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16rem;
}
.m {
  background: #f8fafc;
  border-radius: 16rem;
  padding: 22rem;
}
.fault-line {
  margin-top: 20rem;
  padding-top: 16rem;
  border-top: 1rem solid #f3f4f6;
  font-size: 24rem;
  color: #6b7280;
}
.fault-line.bad {
  color: #b91c1c;
  font-weight: 600;
}
.k { color: #9ca3af; font-size: 22rem; }
.v {
  margin-top: 10rem;
  font-size: 36rem;
  font-weight: 700;
  color: #111827;
}
.u {
  margin-left: 6rem;
  font-size: 22rem;
  color: #9ca3af;
  font-weight: 500;
}
.bar-wrap {
  margin-top: 24rem;
  height: 56rem;
  border-radius: 999rem;
  background: #eef2ff;
  overflow: hidden;
  display: flex;
  align-items: center;
  position: relative;
}
.bar-fill {
  height: 100%;
  background: #f97316;
  color: #fff;
  font-size: 22rem;
  display: flex;
  align-items: center;
  padding-left: 24rem;
  min-width: 120rem;
  box-sizing: border-box;
}
.bar-rest {
  position: absolute;
  right: 24rem;
  color: #9ca3af;
  font-size: 22rem;
}
.info .info-line {
  font-size: 24rem;
  color: #6b7280;
  line-height: 1.8;
}


/* chart.wxss */
.head { margin-bottom: 4rem; }
.range-scroll {
  width: 100%;
  max-width: 100%;
  overflow: hidden;
  margin: 8rem 0 16rem;
}
.range-bar {
  display: flex;
  flex-wrap: wrap;
  gap: 12rem;
}
.range-btn {
  display: inline-flex;
  padding: 12rem 22rem;
  border-radius: 999rem;
  background: #f3f4f6;
  color: #6b7280;
  font-size: 24rem;
  font-weight: 600;
}
.range-btn.active {
  background: #E85D04;
  color: #fff;
}
.seg {
  display: flex;
  gap: 12rem;
}
.seg-item {
  flex: 1;
  text-align: center;
  padding: 14rem 0;
  border-radius: 12rem;
  background: #f8fafc;
  color: #6b7280;
  font-size: 24rem;
  font-weight: 600;
}
.seg-item.active {
  background: #FFEDD5;
  color: #E85D04;
}
.chart-card {
  position: relative;
  padding: 20rem;
  overflow: hidden;
}
.chart-box {
  display: block;
  width: 100%;
  max-width: 100%;
  height: 420rem;
  background: #f8fafc;
  border-radius: 16rem;
}
.chart-empty {
  position: absolute;
  left: 0;
  right: 0;
  top: 180rem;
  text-align: center;
  color: #9ca3af;
  pointer-events: none;
}


/* records.wxss */
.head { margin-bottom: 4rem; }
.seg {
  display: flex;
  gap: 12rem;
  margin-top: 8rem;
}
.seg-item {
  flex: 1;
  text-align: center;
  padding: 14rem 0;
  border-radius: 12rem;
  background: #f3f4f6;
  color: #6b7280;
  font-size: 24rem;
  font-weight: 600;
}
.seg-item.active {
  background: #FFEDD5;
  color: #E85D04;
}
.row {
  padding: 24rem 28rem;
}
.row-time {
  color: #9ca3af;
  font-size: 22rem;
}
.row-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10rem 16rem;
  margin-top: 12rem;
  color: #111827;
  font-size: 26rem;
  font-weight: 600;
}
.row-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12rem;
  margin-bottom: 8rem;
}
.row-title {
  font-size: 28rem;
  font-weight: 650;
  color: #111827;
}
.pager {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16rem;
}
.pager-btn {
  flex: 1;
  margin-top: 0;
  padding: 18rem;
}
.pager-btn.disabled {
  opacity: 0.4;
  pointer-events: none;
}
.pager-meta {
  color: #6b7280;
  font-size: 24rem;
  white-space: nowrap;
}


/* mine.wxss */
.profile-card {
  background: #ffffff;
  border-radius: 24rem;
  margin-bottom: 24rem;
  overflow: hidden;
  box-shadow: 0 8rem 28rem rgba(15, 23, 42, 0.05);
}
.profile-top {
  display: flex;
  flex-direction: row;
  align-items: center;
  padding: 36rem 32rem 28rem;
  background: linear-gradient(160deg, #FFF7ED 0%, #ffffff 72%);
}
.avatar {
  width: 112rem;
  height: 112rem;
  border-radius: 50%;
  background: #E85D04;
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 44rem;
  font-weight: 700;
  flex-shrink: 0;
  box-shadow: 0 8rem 20rem rgba(232, 93, 4, 0.28);
}
.avatar svg {
  width: 52rem;
  height: 52rem;
  display: block;
}
.profile-main {
  flex: 1;
  margin-left: 28rem;
  min-width: 0;
}
.profile-name-row {
  display: flex;
  flex-direction: row;
  align-items: baseline;
  justify-content: space-between;
}
.profile-name {
  font-size: 36rem;
  font-weight: 700;
  color: #111827;
  max-width: 360rem;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.profile-edit {
  font-size: 22rem;
  color: #E85D04;
  flex-shrink: 0;
  margin-left: 16rem;
}
.profile-phone {
  margin-top: 10rem;
  font-size: 26rem;
  color: #6b7280;
  letter-spacing: 1rem;
}
.profile-tag {
  display: inline-block;
  margin-top: 14rem;
  padding: 6rem 16rem;
  border-radius: 999rem;
  background: #FFEDD5;
  color: #C2410C;
  font-size: 22rem;
  font-weight: 500;
}
.profile-stats {
  display: flex;
  flex-direction: row;
  align-items: stretch;
  border-top: 1rem solid #f3f4f6;
  padding: 24rem 12rem;
}
.stat {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 4rem 8rem;
  min-width: 0;
}
.stat-val {
  font-size: 26rem;
  font-weight: 600;
  color: #111827;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  text-align: center;
}
.stat-label {
  margin-top: 8rem;
  font-size: 22rem;
  color: #9ca3af;
}
.stat-div {
  width: 1rem;
  background: #f3f4f6;
  margin: 8rem 0;
}

.wx-grid {
  display: flex;
  flex-direction: row;
  align-items: flex-start;
  justify-content: space-between;
  padding: 8rem 0 12rem;
}
.wx-cell {
  flex: 1;
  width: auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
  padding: 20rem 8rem 12rem;
  margin: 0;
  line-height: 1.3;
  text-align: center;
  border: none !important;
  background: transparent !important;
}
.wx-cell .ico {
  margin-bottom: 16rem;
}
.wx-cell .name {
  font-size: 24rem;
  font-weight: 600;
  color: #111827;
  text-align: center;
}


/* index.wxss */
.head { margin-bottom: 4rem; }
.cat-scroll {
  margin-top: 24rem;
  white-space: nowrap;
  width: 100%;
}
.cat-bar {
  display: inline-flex;
  gap: 16rem;
  padding-bottom: 4rem;
}
.cat-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 12rem 28rem;
  border-radius: 999rem;
  font-size: 26rem;
  color: #6b7280;
  background: #f3f4f6;
  flex-shrink: 0;
}
.cat-btn.active {
  color: #fff;
  background: #E85D04;
  font-weight: 600;
}
.product .row {
  display: flex;
  align-items: center;
  gap: 22rem;
}
.p-ico {
  width: 96rem;
  height: 96rem;
  border-radius: 24rem;
  color: #ffffff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 36rem;
  font-weight: 700;
  flex-shrink: 0;
}
.p-ico svg {
  width: 48rem;
  height: 48rem;
  display: block;
}
.p-cover {
  width: 96rem;
  height: 96rem;
  border-radius: 24rem;
  flex-shrink: 0;
  background: #f3f4f6;
}
.link {
  color: #E85D04;
  margin-top: 16rem;
  font-size: 28rem;
}
.left { flex: 1; min-width: 0; }
.name-row {
  display: flex;
  align-items: center;
  gap: 12rem;
}
.name {
  font-size: 30rem;
  font-weight: 650;
  color: #111827;
}
.badge {
  font-size: 20rem;
  color: #E85D04;
  background: #FFEDD5;
  padding: 4rem 12rem;
  border-radius: 999rem;
}
.meta {
  margin-top: 10rem;
  color: #9ca3af;
  font-size: 24rem;
}


/* detail.wxss */
.hero {
  text-align: center;
  padding-top: 48rem;
  padding-bottom: 40rem;
}
.hero-ico {
  width: 140rem;
  height: 140rem;
  border-radius: 36rem;
  margin: 0 auto 28rem;
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 56rem;
  font-weight: 700;
}
.hero-ico svg {
  width: 72rem;
  height: 72rem;
  display: block;
}
.hero-cover {
  width: 220rem;
  height: 220rem;
  border-radius: 36rem;
  margin: 0 auto 28rem;
  background: #f3f4f6;
  display: block;
}
.hero .title {
  margin-bottom: 12rem;
}
.badge {
  display: inline-block;
  font-size: 22rem;
  color: #E85D04;
  background: #FFEDD5;
  padding: 6rem 18rem;
  border-radius: 999rem;
  margin-bottom: 16rem;
}
.hero .sub {
  margin-bottom: 0;
}
.spec {
  display: flex;
  align-items: flex-start;
  padding: 16rem 0;
  border-bottom: 1rem solid #f3f4f6;
}
.spec:last-child { border-bottom: none; }
.dot {
  width: 14rem;
  height: 14rem;
  border-radius: 50%;
  background: #E85D04;
  margin-top: 12rem;
  margin-right: 18rem;
  flex-shrink: 0;
}
.spec-txt {
  font-size: 28rem;
  color: #374151;
  line-height: 1.6;
}


/* list.wxss */
.head { margin-bottom: 4rem; }
.seg {
  display: flex;
  gap: 16rem;
  margin-top: 8rem;
}
.seg-item {
  flex: 1;
  text-align: center;
  padding: 16rem 0;
  border-radius: 14rem;
  background: #f3f4f6;
  color: #6b7280;
  font-size: 26rem;
  font-weight: 600;
}
.seg-item.active {
  background: #FFEDD5;
  color: #E85D04;
}
.fault-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16rem;
}
.fault-name {
  font-size: 30rem;
  font-weight: 650;
  color: #111827;
}
.meta {
  color: #9ca3af;
  font-size: 22rem;
  margin-top: 10rem;
}
.pager {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16rem;
  margin-top: 8rem;
}
.pager-btn {
  flex: 1;
  margin-top: 0;
  padding: 18rem;
}
.pager-btn.disabled {
  opacity: 0.4;
  pointer-events: none;
}
.pager-meta {
  color: #6b7280;
  font-size: 24rem;
  white-space: nowrap;
}


/* login.wxss scoped */
.login-page {
  position: relative;
  min-height: 100vh;
  padding: 40rem 28rem calc(24rem + env(safe-area-inset-bottom));
  box-sizing: border-box;
  background: #f5f6f8;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}.login-page /* 整页背景：淡光晕 + 转动小扇叶 */
.tech-bg {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  z-index: 0;
  pointer-events: none;
  overflow: hidden;
}.login-page .tech-glow {
  position: absolute;
  border-radius: 50%;
}.login-page .tech-glow.g1 {
  left: -120rem;
  top: -80rem;
  width: 420rem;
  height: 420rem;
  background: radial-gradient(circle, rgba(232, 93, 4, 0.08) 0%, transparent 68%);
}.login-page .tech-glow.g2 {
  right: -140rem;
  bottom: 8%;
  width: 480rem;
  height: 480rem;
  background: radial-gradient(circle, rgba(232, 93, 4, 0.07) 0%, transparent 70%);
}.login-page /* 小扇叶：更密，透明度略高 */
.mini-fan {
  position: absolute;
  width: 44rem;
  height: 44rem;
  opacity: 0.24;
  animation: miniSpin 7s linear infinite;
}.login-page .mini-fan .mf-blade {
  position: absolute;
  left: 50%;
  top: 8%;
  width: 12rem;
  height: 42%;
  margin-left: -6rem;
  border-radius: 40% 40% 55% 55%;
  background: linear-gradient(180deg, rgba(232, 93, 4, 0.78), rgba(148, 163, 184, 0.55));
  transform-origin: 50% 110%;
}.login-page .mini-fan .mf-blade.b2 { transform: rotate(120deg); }.login-page .mini-fan .mf-blade.b3 { transform: rotate(240deg); }.login-page .mini-fan .mf-hub {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 10rem;
  height: 10rem;
  margin: -5rem 0 0 -5rem;
  border-radius: 50%;
  background: rgba(100, 116, 139, 0.55);
  box-shadow: 0 0 0 2rem rgba(232, 93, 4, 0.22);
}.login-page .mini-fan.f1 { left: 6%; top: 10%; animation-duration: 6.5s; }.login-page .mini-fan.f2 { left: 28%; top: 6%; width: 34rem; height: 34rem; opacity: 0.2; animation-duration: 8.2s; animation-direction: reverse; }.login-page .mini-fan.f3 { left: 52%; top: 12%; width: 30rem; height: 30rem; opacity: 0.19; animation-duration: 9s; }.login-page .mini-fan.f4 { left: 76%; top: 8%; width: 40rem; height: 40rem; opacity: 0.22; animation-duration: 7.1s; animation-direction: reverse; }.login-page .mini-fan.f5 { left: 88%; top: 22%; width: 36rem; height: 36rem; opacity: 0.2; animation-duration: 8.6s; }.login-page .mini-fan.f6 { left: 10%; top: 28%; width: 32rem; height: 32rem; opacity: 0.19; animation-duration: 7.8s; animation-direction: reverse; }.login-page .mini-fan.f7 { left: 36%; top: 32%; width: 28rem; height: 28rem; opacity: 0.18; animation-duration: 10s; }.login-page .mini-fan.f8 { left: 60%; top: 30%; width: 38rem; height: 38rem; opacity: 0.21; animation-duration: 6.8s; animation-direction: reverse; }.login-page .mini-fan.f9 { left: 82%; top: 40%; width: 42rem; height: 42rem; opacity: 0.22; animation-duration: 7.4s; }.login-page .mini-fan.f10 { left: 4%; top: 48%; width: 36rem; height: 36rem; opacity: 0.2; animation-duration: 8.8s; animation-direction: reverse; }.login-page .mini-fan.f11 { left: 24%; top: 52%; width: 30rem; height: 30rem; opacity: 0.19; animation-duration: 9.5s; }.login-page .mini-fan.f12 { left: 48%; top: 48%; width: 26rem; height: 26rem; opacity: 0.17; animation-duration: 11s; animation-direction: reverse; }.login-page .mini-fan.f13 { left: 70%; top: 54%; width: 34rem; height: 34rem; opacity: 0.2; animation-duration: 7.6s; }.login-page .mini-fan.f14 { left: 90%; top: 58%; width: 28rem; height: 28rem; opacity: 0.18; animation-duration: 8.4s; animation-direction: reverse; }.login-page .mini-fan.f15 { left: 14%; bottom: 18%; width: 40rem; height: 40rem; opacity: 0.22; animation-duration: 7.2s; }.login-page .mini-fan.f16 { left: 42%; bottom: 12%; width: 32rem; height: 32rem; opacity: 0.19; animation-duration: 9.2s; animation-direction: reverse; }.login-page .mini-fan.f17 { left: 64%; bottom: 16%; width: 36rem; height: 36rem; opacity: 0.2; animation-duration: 6.9s; }.login-page .mini-fan.f18 { left: 84%; bottom: 10%; width: 44rem; height: 44rem; opacity: 0.22; animation-duration: 7.9s; animation-direction: reverse; }.login-page .mini-fan.f19 { left: 18%; top: 18%; width: 30rem; height: 30rem; opacity: 0.18; animation-duration: 8.1s; }.login-page .mini-fan.f20 { left: 44%; top: 22%; width: 36rem; height: 36rem; opacity: 0.2; animation-duration: 7.3s; animation-direction: reverse; }.login-page .mini-fan.f21 { left: 68%; top: 18%; width: 28rem; height: 28rem; opacity: 0.17; animation-duration: 9.8s; }.login-page .mini-fan.f22 { left: 92%; top: 34%; width: 32rem; height: 32rem; opacity: 0.19; animation-duration: 8s; animation-direction: reverse; }.login-page .mini-fan.f23 { left: 2%; top: 38%; width: 34rem; height: 34rem; opacity: 0.2; animation-duration: 7.7s; }.login-page .mini-fan.f24 { left: 32%; top: 44%; width: 40rem; height: 40rem; opacity: 0.21; animation-duration: 6.6s; animation-direction: reverse; }.login-page .mini-fan.f25 { left: 56%; top: 60%; width: 30rem; height: 30rem; opacity: 0.18; animation-duration: 9.1s; }.login-page .mini-fan.f26 { left: 78%; top: 72%; width: 36rem; height: 36rem; opacity: 0.2; animation-duration: 8.3s; animation-direction: reverse; }.login-page .mini-fan.f27 { left: 22%; bottom: 6%; width: 28rem; height: 28rem; opacity: 0.17; animation-duration: 10.2s; }.login-page .mini-fan.f28 { left: 54%; bottom: 4%; width: 42rem; height: 42rem; opacity: 0.21; animation-duration: 7s; animation-direction: reverse; }

@keyframes miniSpin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}.login-page .head {
  position: relative;
  z-index: 1;
  text-align: center;
  flex-shrink: 0;
  margin-top: 36rem;
  margin-bottom: 36rem;
}.login-page .head.sm {
  margin-bottom: 36rem;
  text-align: left;
}.login-page .head .brand-logo {
  display: block;
  width: 280rem;
  height: 280rem;
  margin: 0 auto 16rem;
  background: transparent;
  object-fit: contain;
}.login-page .head .title {
  font-size: 46rem;
  font-weight: 700;
  color: #0f172a;
  margin-bottom: 10rem;
}.login-page .head .sub {
  font-size: 26rem;
  color: #64748b;
}.login-page /* ===== 场景：紧贴登录按钮下方 ===== */
.scene {
  position: relative;
  z-index: 1;
  flex: 1;
  min-height: 320rem;
  margin-top: 100rem;
  margin-bottom: 0;
  overflow: visible;
}.login-page /* 整组动画贴场景顶部（登录区正下方），不再沉底 */
.rig {
  position: absolute;
  left: 50%;
  top: 8rem;
  bottom: auto;
  width: 520rem;
  height: 300rem;
  margin-left: -260rem;
  z-index: 2;
  animation: floatY 3.2s ease-in-out infinite;
}.login-page .wind {
  position: absolute;
  height: 4rem;
  border-radius: 4rem;
  background: linear-gradient(90deg, transparent, rgba(232, 93, 4, 0.4), transparent);
  animation: windMove 3.8s linear infinite;
  z-index: 1;
}.login-page .w1 { top: 36%; left: -15%; width: 110rem; animation-duration: 3.2s; }.login-page .w2 { top: 52%; left: -22%; width: 140rem; animation-duration: 4.2s; opacity: 0.5; }.login-page .w3 { top: 66%; left: -10%; width: 96rem; animation-duration: 3.6s; opacity: 0.35; }

@keyframes windMove {
  0% { transform: translateX(0); opacity: 0; }
  20% { opacity: 0.55; }
  80% { opacity: 0.25; }
  100% { transform: translateX(700rem); opacity: 0; }
}.login-page /* 城堡 */
.castle {
  position: absolute;
  left: 0;
  bottom: 0;
  width: 200rem;
  height: 168rem;
  z-index: 2;
}.login-page .castle .base {
  position: absolute;
  left: 10rem;
  right: 10rem;
  bottom: 0;
  height: 18rem;
  border-radius: 50%;
  background: rgba(15, 23, 42, 0.08);
}.login-page .tower {
  position: absolute;
  bottom: 36rem;
  border-radius: 14rem 14rem 8rem 8rem;
  box-shadow: inset -6rem 0 0 rgba(0,0,0,0.08);
}.login-page .tower.left {
  left: 18rem;
  width: 44rem;
  height: 88rem;
  background: linear-gradient(180deg, #fca5a5, #dc2626);
}.login-page .tower.mid {
  left: 78rem;
  width: 56rem;
  height: 118rem;
  background: linear-gradient(180deg, #93c5fd, #2563eb);
  z-index: 2;
}.login-page .tower.right {
  left: 148rem;
  width: 44rem;
  height: 88rem;
  background: linear-gradient(180deg, #e9d5ff, #9333ea);
}.login-page .cap {
  position: absolute;
  left: 50%;
  top: -8rem;
  width: 120%;
  height: 18rem;
  margin-left: -60%;
  border-radius: 50%;
}.login-page .cap.red { background: #fecaca; }.login-page .cap.blue { background: #bfdbfe; }.login-page .cap.purple { background: #e9d5ff; }.login-page .roof {
  position: absolute;
  left: 50%;
  top: -34rem;
  width: 0;
  height: 0;
  margin-left: -28rem;
  border-left: 28rem solid transparent;
  border-right: 28rem solid transparent;
  border-bottom: 34rem solid #fbbf24;
}.login-page .roof.tall {
  top: -48rem;
  margin-left: -34rem;
  border-left-width: 34rem;
  border-right-width: 34rem;
  border-bottom-width: 48rem;
  border-bottom-color: #ef4444;
}.login-page .pole {
  position: absolute;
  top: -62rem;
  left: 50%;
  width: 4rem;
  height: 20rem;
  margin-left: -2rem;
  background: #94a3b8;
}.login-page .flag {
  position: absolute;
  top: -62rem;
  left: 50%;
  width: 0;
  height: 0;
  margin-left: 2rem;
  border-style: solid;
  border-width: 10rem 0 10rem 24rem;
  border-color: transparent transparent transparent #E85D04;
  transform-origin: left center;
  animation: flagWave 1.2s ease-in-out infinite;
}.login-page .wall {
  position: absolute;
  left: 36rem;
  right: 36rem;
  bottom: 36rem;
  height: 44rem;
  border-radius: 8rem;
  background: linear-gradient(180deg, #fde68a, #d97706);
  z-index: 1;
}.login-page .gate {
  position: absolute;
  left: 92rem;
  bottom: 36rem;
  width: 34rem;
  height: 38rem;
  border-radius: 17rem 17rem 0 0;
  background: #1e293b;
  z-index: 3;
}.login-page .inlet {
  position: absolute;
  right: 2rem;
  bottom: 48rem;
  width: 28rem;
  height: 28rem;
  border-radius: 8rem;
  background: #475569;
  z-index: 4;
  box-shadow: inset 0 0 0 3rem #334155;
}.login-page /* 软管：左接城堡进风口，右接风机出风口 */
.hose {
  position: absolute;
  left: 174rem;
  bottom: 52rem;
  width: 168rem;
  height: 22rem;
  border-radius: 999rem;
  background: linear-gradient(90deg, #64748b, #94a3b8 50%, #475569);
  z-index: 3;
  overflow: hidden;
}.login-page .hose .ring {
  position: absolute;
  top: 2rem;
  bottom: 2rem;
  width: 4rem;
  background: rgba(226, 232, 240, 0.55);
}.login-page .hose .ring:nth-child(1) { left: 12%; }.login-page .hose .ring:nth-child(2) { left: 30%; }.login-page .hose .ring:nth-child(3) { left: 48%; }.login-page .hose .ring:nth-child(4) { left: 66%; }.login-page .hose .ring:nth-child(5) { left: 84%; }.login-page .air {
  position: absolute;
  top: 50%;
  width: 10rem;
  height: 10rem;
  margin-top: -5rem;
  border-radius: 50%;
  background: #38bdf8;
  animation: airLeft 1.4s linear infinite;
}.login-page .a2 { animation-delay: 0.7s; background: #7dd3fc; }

@keyframes airLeft {
  0% { left: 88%; opacity: 0; }
  15% { opacity: 1; }
  85% { opacity: 0.6; }
  100% { left: 4%; opacity: 0; }
}.login-page /* 小手机：居中、稍大，带上下浮动 + 信号波 */
.phone {
  position: absolute;
  left: 50%;
  bottom: 168rem;
  width: 78rem;
  height: 132rem;
  margin-left: -39rem;
  z-index: 6;
  animation: phoneBob 2.6s ease-in-out infinite;
}.login-page .phone-body {
  position: absolute;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
  border-radius: 14rem;
  background: linear-gradient(160deg, #1e293b, #0f172a);
  box-shadow:
    0 10rem 22rem rgba(15, 23, 42, 0.3),
    inset 0 0 0 3rem #334155;
}.login-page .phone-notch {
  position: absolute;
  left: 50%;
  top: 8rem;
  width: 22rem;
  height: 5rem;
  margin-left: -11rem;
  border-radius: 4rem;
  background: #475569;
}.login-page .phone-screen {
  position: absolute;
  left: 8rem;
  right: 8rem;
  top: 18rem;
  bottom: 18rem;
  border-radius: 8rem;
  background: linear-gradient(180deg, #fff7ed, #ffedd5);
  overflow: hidden;
}.login-page .phone-bar {
  position: absolute;
  left: 8rem;
  right: 8rem;
  top: 12rem;
  height: 8rem;
  border-radius: 4rem;
  background: #e85d04;
}.login-page .ph-chip {
  position: absolute;
  left: 10rem;
  right: 10rem;
  top: 30rem;
  height: 14rem;
  border-radius: 6rem;
  background: #fb923c;
}.login-page .ph-chip.sm {
  top: 52rem;
  height: 12rem;
  background: #fdba74;
}.login-page .ph-chip.sm + .ph-chip.sm {
  top: 72rem;
  background: #fed7aa;
}.login-page .phone-home {
  position: absolute;
  left: 50%;
  bottom: 6rem;
  width: 20rem;
  height: 5rem;
  margin-left: -10rem;
  border-radius: 4rem;
  background: #64748b;
}.login-page .signal {
  position: absolute;
  right: -14rem;
  width: 14rem;
  height: 14rem;
  border: 3rem solid rgba(232, 93, 4, 0.55);
  border-left: none;
  border-bottom: none;
  border-radius: 0 70% 0 0;
  transform: rotate(45deg);
  opacity: 0;
  animation: signalPulse 1.6s ease-out infinite;
}.login-page .s1 { top: 28rem; animation-delay: 0s; }.login-page .s2 { top: 16rem; right: -22rem; width: 22rem; height: 22rem; animation-delay: 0.35s; }.login-page .s3 { top: 4rem; right: -30rem; width: 30rem; height: 30rem; animation-delay: 0.7s; }

@keyframes phoneBob {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-12rem); }
}
@keyframes signalPulse {
  0% { opacity: 0; }
  30% { opacity: 0.85; }
  100% { opacity: 0; }
}.login-page /* 风机：紧挨软管右侧 */
.blower {
  position: absolute;
  left: 318rem;
  bottom: 0;
  width: 168rem;
  height: 150rem;
  z-index: 4;
  animation: shake 0.18s linear infinite;
}.login-page .feet {
  position: absolute;
  bottom: 0;
  width: 10rem;
  height: 14rem;
  border-radius: 2rem;
  background: #94a3b8;
}.login-page /* 对齐黄色机身下方（机身 right:4 width:120 → 左约 44rem） */
.blower .feet.f1 { left: 58rem; right: auto; }.login-page .blower .feet.f2 { left: 138rem; right: auto; }.login-page .duct {
  position: absolute;
  left: -8rem;
  bottom: 48rem;
  width: 64rem;
  height: 32rem;
  border-radius: 10rem;
  background: linear-gradient(90deg, #64748b, #94a3b8);
  box-shadow: inset 0 0 0 4rem #475569;
  z-index: 2;
}.login-page .duct-hole {
  position: absolute;
  left: -10rem;
  bottom: 52rem;
  width: 12rem;
  height: 24rem;
  border-radius: 6rem;
  background: #0f172a;
  z-index: 3;
}.login-page .body {
  position: absolute;
  right: 4rem;
  bottom: 12rem;
  width: 120rem;
  height: 108rem;
  border-radius: 18rem 22rem 16rem 12rem;
  background: linear-gradient(165deg, #fde047 0%, #facc15 45%, #ca8a04 100%);
  box-shadow:
    inset -8rem 0 0 rgba(161, 98, 7, 0.25),
    0 10rem 20rem rgba(202, 138, 4, 0.28);
}.login-page .handle {
  position: absolute;
  top: -22rem;
  left: 28rem;
  right: 22rem;
  height: 28rem;
  border: 8rem solid #a16207;
  border-bottom: none;
  border-radius: 18rem 18rem 0 0;
  box-sizing: border-box;
}.login-page .handle-shine {
  position: absolute;
  left: 6rem;
  right: 6rem;
  top: 4rem;
  height: 6rem;
  border-radius: 6rem;
  background: #fde047;
}.login-page .panel {
  position: absolute;
  top: 14rem;
  right: 12rem;
  width: 28rem;
  height: 16rem;
  border-radius: 4rem;
  background: #fef08a;
  border: 2rem solid #a16207;
  box-sizing: border-box;
}.login-page .led {
  position: absolute;
  right: 4rem;
  top: 3rem;
  width: 8rem;
  height: 8rem;
  border-radius: 50%;
  background: #22c55e;
  animation: ledBlink 1.5s ease-in-out infinite;
}.login-page .grill {
  position: absolute;
  left: 18rem;
  top: 22rem;
  width: 68rem;
  height: 68rem;
  border-radius: 50%;
  background: #0f172a;
  border: 4rem solid #ca8a04;
  box-sizing: border-box;
  overflow: hidden;
}.login-page .impeller {
  position: absolute;
  inset: 8rem;
  animation: spin 0.45s linear infinite;
}.login-page .blade {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 12rem;
  height: 40rem;
  margin: -20rem 0 0 -6rem;
  border-radius: 999rem;
  background: linear-gradient(180deg, #94a3b8, #475569);
}.login-page .blade.r60 { transform: rotate(60deg); }.login-page .blade.r120 { transform: rotate(120deg); }.login-page .hub {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 16rem;
  height: 16rem;
  margin: -8rem 0 0 -8rem;
  border-radius: 50%;
  background: #e2e8f0;
  border: 3rem solid #64748b;
  box-sizing: border-box;
  z-index: 2;
}.login-page .ring-line {
  position: absolute;
  left: 50%;
  top: 50%;
  border: 2rem solid rgba(148, 163, 184, 0.45);
  border-radius: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
}.login-page .ring-line.r1 { width: 36rem; height: 36rem; }.login-page .ring-line.r2 { width: 52rem; height: 52rem; }.login-page .blower .hw-badge {
  position: absolute;
  left: 14rem;
  bottom: 8rem;
  font-size: 16rem;
  font-weight: 700;
  color: #713f12;
  letter-spacing: 1rem;
}

@keyframes floatY {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-8rem); }
}
@keyframes flagWave {
  0%, 100% { transform: skewY(0); }
  50% { transform: skewY(-14deg); }
}
@keyframes shake {
  0%, 100% { transform: translate(0, 0); }
  50% { transform: translate(1rem, -1rem); }
}
@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}
@keyframes ledBlink {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.4; }
}.login-page .actions {
  position: relative;
  z-index: 1;
  flex-shrink: 0;
  padding-top: 8rem;
}.login-page .card {
  position: relative;
  z-index: 1;
}.login-page .env-tip {
  text-align: center;
  color: #94a3b8;
  font-size: 22rem;
  margin-top: 8rem;
  word-break: break-all;
  padding: 0 12rem;
}.login-page .phone-btn {
  background: #E85D04 !important;
  color: #ffffff !important;
  border-radius: 16rem;
  font-weight: 600;
  font-size: 32rem;
  padding: 8rem 0;
  margin-bottom: 16rem;
  border: none;
}.login-page .phone-btn::after { border: none; }.login-page .link {
  display: block;
  text-align: center;
  color: #E85D04;
  font-size: 28rem;
  padding: 16rem 0;
}.login-page .link.muted {
  color: #6b7280;
  font-size: 26rem;
}.login-page .row-links {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-top: 12rem;
}.login-page .row-links .link {
  display: inline;
  padding: 12rem 0;
}

.container { min-height: auto; }
.chart-box { display: block; width: 100%; max-width: 100%; }
input.input, select.picker {
  font-size: 16px;
}
.tab-item svg { display: block; }
.login-page {
  min-height: calc(100vh - 88rem - env(safe-area-inset-top, 0px));
  min-height: calc(100dvh - 88rem - env(safe-area-inset-top, 0px));
}
.login-page .phone-btn {
  padding: 22rem 0;
}
.ota-banner {
  background: #FFF7ED;
  border: 1rem solid #FDBA74;
}
.ota-title {
  font-size: 30rem;
  font-weight: 700;
  color: #9a3412;
}
.ota-desc {
  margin-top: 10rem;
  font-size: 24rem;
  color: #c2410c;
  line-height: 1.5;
}
.ota-actions {
  display: flex;
  gap: 16rem;
  margin-top: 20rem;
}
.ota-actions .btn {
  margin-top: 0;
  flex: 1;
}
.ota-btn {
  background: #E85D04 !important;
  color: #fff !important;
  border-radius: 16rem;
  font-weight: 600;
  padding: 16rem 0;
}
.ota-later {
  background: #fff !important;
  color: #9a3412 !important;
  border: 1rem solid #FDBA74 !important;
  border-radius: 16rem;
  font-weight: 600;
  padding: 16rem 0;
}
.ota-link {
  color: #c2410c !important;
}

.app-dl-bar {
  position: relative;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10rem;
  margin-top: 8rem;
  padding: 18rem 0 calc(28rem + env(safe-area-inset-bottom, 0px));
  color: #E85D04;
  font-size: 28rem;
  font-weight: 700;
}
.app-dl-bar svg {
  width: 32rem;
  height: 32rem;
}
.app-intro .title {
  font-size: 34rem;
  font-weight: 700;
}
.app-intro .sub {
  margin-top: 8rem;
  color: #6b7280;
  font-size: 26rem;
}
.app-card .app-card-hd {
  display: flex;
  align-items: center;
  gap: 20rem;
}
.app-card .ico {
  width: 88rem;
  height: 88rem;
  border-radius: 24rem;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #FFF4EC;
  color: #E85D04;
  flex-shrink: 0;
}
.app-card .ico svg {
  width: 44rem;
  height: 44rem;
}
.app-card .ico.ios {
  background: #F3F4F6;
  color: #111827;
}
.app-card .name {
  font-size: 32rem;
  font-weight: 700;
}
.app-card .desc {
  margin-top: 6rem;
  color: #6b7280;
  font-size: 24rem;
}
.app-card .app-meta {
  margin-top: 16rem;
  color: #374151;
  font-size: 24rem;
}
.app-card .app-log {
  margin-top: 12rem;
  color: #6b7280;
  font-size: 24rem;
  line-height: 1.5;
  white-space: pre-wrap;
}
.app-card .btn {
  margin-top: 24rem;
}
.app-card.disabled {
  opacity: 0.72;
}
