
*{box-sizing:border-box} body{margin:0;font-family:system-ui,-apple-system,"Segoe UI","Noto Sans TC",sans-serif;background:#f3f6fa;color:#172033}
.homeWrap,.dashWrap{max-width:1450px;margin:auto;padding:24px}.homeWrap{text-align:center}.homeWrap h1,.dashWrap h1{text-align:center;font-size:clamp(36px,5vw,72px);margin:10px 0}.homeWrap p,.sub{text-align:center;color:#6b778c;font-size:24px}
.homeBtn{display:block;max-width:900px;margin:24px auto;padding:30px;background:#fff;border-radius:24px;text-decoration:none;color:#111;font-weight:800;font-size:30px;box-shadow:0 10px 25px #00000010}
.reportApp{min-height:100svh;padding:10px 12px 12px;display:flex;flex-direction:column;gap:8px}
.reportHeader{background:#fff;border-radius:22px;padding:10px 12px;text-align:center;box-shadow:0 5px 18px #00000010}.reportHeader h1{margin:0;font-size:clamp(25px,6vw,40px);line-height:1.1}.reportHeader #stationMeta{margin-top:6px;font-size:clamp(15px,3.8vw,23px);font-weight:700}
.candidateGrid{display:grid;grid-template-columns:1fr 1fr;gap:8px;flex:1;min-height:0}
.candidateCard{background:#fff;border-radius:22px;padding:8px 8px 10px;text-align:center;display:flex;flex-direction:column;align-items:center;min-width:0}
.candidateCard img{width:min(73%,260px);aspect-ratio:1/1;object-fit:cover;border-radius:16px;border:1px solid #cbd5e1;background:#e9eef4}
.number{font-size:clamp(22px,5.2vw,34px);font-weight:900;line-height:1.05;margin-top:6px}.name{font-size:clamp(28px,7vw,44px);font-weight:900;line-height:1.05;margin-top:3px}.label{font-size:clamp(16px,4.2vw,25px);font-weight:800;margin:7px 0}
.candidateCard input{width:100%;height:clamp(64px,11vh,95px);border:4px solid #c9d3df;border-radius:18px;text-align:center;font-size:clamp(34px,9vw,58px);font-weight:900;outline:none}.candidateCard input::placeholder{font-size:clamp(20px,5vw,30px);font-weight:600;color:#b4bdc9}.candidateCard input.invalid{border-color:#dc2626;background:#fff1f2}
.prev,.delta{font-size:clamp(18px,4.5vw,29px);line-height:1.2;margin-top:7px}.delta{margin-top:4px}
.finalArea{background:#fff;border-radius:16px;padding:7px 12px;text-align:center}.finalCheck{font-size:clamp(17px,4.3vw,25px);font-weight:900}.finalCheck input{transform:scale(1.35);margin-right:7px}.finalHint{font-size:clamp(12px,3vw,16px);color:#7b8798;margin-top:3px}
.submitBtn{border:0;border-radius:20px;background:#0e0e0f;color:#fff;font-size:clamp(26px,6vw,38px);font-weight:900;padding:18px 12px;width:100%}.submitBtn.danger{background:#b91c1c}.submitBtn:disabled{opacity:.55}
.msg{text-align:center;min-height:28px;font-size:18px;font-weight:800}.msg.ok{color:#0a8f46}.msg.err{color:#c1121f}
.lockedPanel{background:#fff;border:3px solid #16a34a;border-radius:20px;text-align:center;padding:18px}.lockedPanel.hidden{display:none}.lockedTitle{font-size:clamp(25px,6vw,38px);font-weight:900;color:#0a8f46}.lockedPanel #lockedVotes{font-size:clamp(21px,5vw,30px);font-weight:800;margin-top:8px}.lockedPanel #lockedTime{margin-top:6px}.lockedHint{margin-top:8px;color:#6b7280}
.scoreGrid{display:grid;grid-template-columns:1fr 1fr;gap:24px}.scoreCard{background:#fff;border-radius:24px;padding:30px;text-align:center}.scoreCard h2{font-size:32px}.bigNum{font-size:74px;font-weight:900}.scoreCard div:last-child{font-size:28px}
.summaryBar{background:#fff;border-radius:20px;padding:24px;margin:24px 0;display:grid;grid-template-columns:repeat(4,1fr);gap:12px;text-align:center;font-size:24px}
.tableWrap{overflow:auto;background:#fff;border-radius:22px}table{width:100%;border-collapse:collapse;font-size:22px}th,td{padding:18px;border-bottom:1px solid #e5e7eb;text-align:center}th{background:#eef3f7;font-size:24px}.done{color:#0a8f46;font-weight:900}.open{color:#1f2937}.unlockBtn{padding:8px 12px;border:0;border-radius:10px;background:#b91c1c;color:#fff;font-weight:800}
@media (max-width:700px){.reportApp{padding:6px 8px;gap:6px}.reportHeader{padding:8px}.candidateCard{padding:6px}.candidateCard img{width:min(72%,230px)}.finalArea{padding:5px 8px}.submitBtn{padding:14px 8px}.summaryBar{grid-template-columns:1fr 1fr}.dashWrap{padding:12px}table{font-size:16px}th{font-size:17px}}
@media (max-height:820px){.reportHeader h1{font-size:24px}.reportHeader #stationMeta{font-size:15px}.candidateCard img{width:min(58%,180px)}.number{font-size:20px}.name{font-size:27px}.label{font-size:15px;margin:4px 0}.candidateCard input{height:58px;font-size:34px}.prev,.delta{font-size:17px;margin-top:4px}.finalArea{padding:4px 8px}.finalCheck{font-size:16px}.finalHint{display:none}.submitBtn{font-size:24px;padding:12px}}

.manageBtns{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}.historyBtn{padding:8px 12px;border:0;border-radius:10px;background:#1d4ed8;color:#fff;font-weight:800}
.historyWrap{max-width:1200px;margin:auto;padding:18px}.historyTop{background:#fff;border-radius:22px;padding:18px;text-align:center;box-shadow:0 6px 18px #0000000c}.historyTop h1{margin:8px 0;font-size:clamp(28px,4vw,48px)}.historyMeta{font-size:clamp(17px,2.6vw,24px);font-weight:700;color:#455468}.backBtn{float:left;border:0;border-radius:12px;background:#111827;color:#fff;padding:10px 14px;font-weight:800}
.historySummary{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:16px 0}.historySummary>div{background:#fff;border-radius:18px;padding:16px;text-align:center}.historySummary span{display:block;color:#64748b;font-size:16px}.historySummary b{display:block;margin-top:6px;font-size:24px}
.historyPanel{background:#fff;border-radius:22px;padding:16px;margin-top:16px}.panelTitle{font-size:26px;font-weight:900;margin-bottom:12px}.reportList,.auditList{display:flex;flex-direction:column;gap:12px}.reportItem,.auditItem{border:1px solid #dbe3ec;border-radius:16px;padding:14px;background:#fbfdff}.reportItemTop{display:flex;justify-content:space-between;gap:10px;align-items:center}
.normalTag,.finalTag{display:inline-block;padding:4px 10px;border-radius:999px;font-weight:900}.normalTag{background:#e8f0ff;color:#1d4ed8}.finalTag{background:#dcfce7;color:#15803d}.reportId{color:#94a3b8}
.voteGrid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}.voteGrid>div{background:#f3f6fa;border-radius:14px;padding:12px;text-align:center}.voteGrid span{display:block;color:#64748b}.voteGrid b{display:block;font-size:34px;margin:3px 0}.voteGrid small{font-size:17px;font-weight:800}
.anomalyBox,.normalBox{margin-top:10px;padding:10px 12px;border-radius:12px;font-weight:800}.anomalyBox{background:#fff2cc;color:#92400e;border:1px solid #f5c451}.normalBox{background:#ecfdf5;color:#047857;border:1px solid #a7f3d0}
.auditItem>div:first-child{display:flex;justify-content:space-between;gap:12px}.auditItem b{font-size:19px}.auditItem span{color:#64748b}.auditDetail{margin-top:6px;color:#334155}.emptyState{text-align:center;padding:30px;color:#94a3b8;font-weight:700}
@media(max-width:700px){.historyWrap{padding:8px}.backBtn{float:none;width:100%;margin-bottom:8px}.historySummary{grid-template-columns:1fr 1fr}.panelTitle{font-size:22px}}

/* V0.4.1 戰情中心候選人照片橫卡版 */
.scoreCardHorizontal{
  display:grid;
  grid-template-columns:minmax(180px,34%) 1fr;
  align-items:center;
  gap:28px;
  text-align:left;
  min-height:260px;
}
.scorePhotoWrap{
  display:flex;
  align-items:center;
  justify-content:center;
}
.scorePhoto{
  width:min(100%,260px);
  aspect-ratio:1/1;
  object-fit:cover;
  border-radius:22px;
  border:1px solid #cbd5e1;
  background:#e9eef4;
}
.scoreInfo{
  min-width:0;
  display:flex;
  flex-direction:column;
  justify-content:center;
}
.scoreInfo h2{
  margin:0 0 10px;
  font-size:clamp(30px,3vw,48px);
  line-height:1.1;
}
.scoreVotes{
  display:flex;
  align-items:flex-end;
  gap:10px;
  line-height:1;
}
.scoreVotes .bigNum{
  font-size:clamp(64px,7vw,110px);
  font-weight:900;
}
.voteUnit{
  font-size:clamp(24px,2.2vw,36px);
  font-weight:800;
  padding-bottom:10px;
}
.scoreRate{
  margin-top:12px;
  font-size:clamp(30px,3vw,48px) !important;
  font-weight:800;
}
@media(max-width:900px){
  .scoreCardHorizontal{
    grid-template-columns:minmax(130px,36%) 1fr;
    gap:18px;
    min-height:220px;
    padding:20px;
  }
  .scorePhoto{
    width:min(100%,210px);
  }
}
@media(max-width:650px){
  .scoreGrid{grid-template-columns:1fr 1fr}
  .scoreCardHorizontal{
    grid-template-columns:1fr;
    gap:10px;
    text-align:center;
    min-height:auto;
  }
  .scorePhoto{width:min(72%,170px)}
  .scoreInfo{align-items:center}
}

/* V0.5 行政區戰況摘要＋未回報提醒 */
.summaryBarV05{grid-template-columns:repeat(6,1fr)}
.summaryBarV05>div{padding:4px 6px}
.districtPanel,.filterPanel{background:#fff;border-radius:22px;padding:18px;margin:18px 0;box-shadow:0 5px 16px #00000008}
.districtHeader{display:flex;align-items:end;justify-content:space-between;gap:12px;margin-bottom:14px}
.districtHeader h2{margin:0;font-size:30px}
.districtNote{color:#64748b}
.districtGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.districtCard{border:1px solid #dbe3ec;border-radius:18px;padding:16px;background:#fbfdff}
.districtName{font-size:26px;font-weight:900;margin-bottom:10px}
.districtVotes{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.districtVotes>div{background:#f2f6fa;border-radius:14px;padding:10px;text-align:center}
.districtVotes span{display:block;font-size:18px;font-weight:900;color:#64748b}
.districtVotes b{display:block;font-size:34px;margin-top:2px}
.districtLeader{font-size:20px;font-weight:900;margin-top:10px}
.districtMeta{display:flex;gap:10px;flex-wrap:wrap;margin-top:10px;color:#475569;font-size:15px}
.warnText{color:#b45309;font-weight:900}
.filterPanel{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.filterTitle{font-size:22px;font-weight:900}
.filterBtns{display:flex;gap:8px;flex-wrap:wrap}
.filterBtn{border:0;border-radius:999px;padding:9px 15px;background:#e9eef4;color:#1f2937;font-weight:800;cursor:pointer}
.filterBtn.active{background:#111827;color:#fff}
.filterCount{margin-left:auto;color:#64748b;font-weight:700}
.staleRow{background:#fff9e8}
.staleStatus{color:#b45309;font-weight:900}
@media(max-width:1100px){
  .summaryBarV05{grid-template-columns:repeat(3,1fr)}
  .districtGrid{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:700px){
  .summaryBarV05{grid-template-columns:repeat(2,1fr)}
  .districtGrid{grid-template-columns:1fr}
  .districtHeader{align-items:flex-start;flex-direction:column}
  .filterPanel{display:block}
  .filterBtns{margin-top:10px}
  .filterCount{margin-top:10px}
}

/* V0.6 管理端：專屬亂碼網址＋手機綁定 */
.blockedTitle{color:#b91c1c}.blockedText{font-size:clamp(19px,4.8vw,28px);font-weight:800;margin-top:12px}
.adminWrap{max-width:1200px;margin:auto;padding:18px}.adminHead{background:#fff;border-radius:22px;padding:20px;text-align:center}.adminHead h1{margin:0;font-size:clamp(30px,4vw,48px)}.adminHead p{color:#64748b;font-size:18px}.adminNav{display:flex;justify-content:center;gap:10px;flex-wrap:wrap}.adminNav a{background:#111827;color:#fff;text-decoration:none;padding:10px 16px;border-radius:12px;font-weight:800}
.adminNotice{background:#fff7d6;border:1px solid #f3c75f;border-radius:16px;padding:14px 16px;margin:14px 0;color:#7c4a03}
.adminList{display:flex;flex-direction:column;gap:12px}.accessCard{background:#fff;border-radius:20px;padding:16px;box-shadow:0 4px 14px #00000008}.accessTop{display:flex;align-items:center;justify-content:space-between;gap:12px}.accessTop>div{display:flex;align-items:center;gap:12px}.accessCode{width:58px;height:58px;border-radius:16px;background:#111827;color:#fff;display:grid;place-items:center;font-size:22px;font-weight:900}.accessTop b{display:block;font-size:22px}.accessTop span:not(.bindBadge){display:block;color:#64748b;margin-top:2px}
.bindBadge{padding:7px 11px;border-radius:999px;font-weight:900}.bindBadge.bound{background:#dcfce7;color:#15803d}.bindBadge.unbound{background:#eef2f7;color:#475569}
.urlBox{margin-top:12px;padding:11px 13px;background:#f2f5f8;border-radius:12px;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;word-break:break-all}
.accessMeta{display:flex;gap:18px;flex-wrap:wrap;margin-top:9px;color:#64748b}.accessActions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.accessActions button{border:0;border-radius:11px;padding:10px 13px;font-weight:900;cursor:pointer}.copyBtn{background:#1d4ed8;color:#fff}.openBtn{background:#0f766e;color:#fff}.unbindBtn{background:#b45309;color:#fff}.regenBtn{background:#b91c1c;color:#fff}.accessActions button:disabled{opacity:.38;cursor:not-allowed}
@media(max-width:650px){.adminWrap{padding:8px}.accessTop{align-items:flex-start}.accessActions button{flex:1 1 46%}.accessMeta{display:block}.accessMeta span{display:block;margin-top:4px}}

/* V0.7 正式管理後台＋查報人資料＋候選人照片 */
.loginWrap{min-height:100svh;display:grid;place-items:center;padding:20px}.loginCard{width:min(460px,100%);background:#fff;border-radius:24px;padding:28px;box-shadow:0 10px 30px #0002;text-align:center}.loginCard h1{font-size:34px;margin:0}.loginCard h2{font-size:24px}.loginCard input{width:100%;height:54px;border:2px solid #cbd5e1;border-radius:13px;padding:0 14px;font-size:20px;margin:7px 0}.loginCard button{width:100%;border:0;border-radius:13px;background:#111827;color:#fff;padding:14px;font-size:22px;font-weight:900;margin-top:8px}.loginCard #loginMsg{color:#b91c1c;font-weight:800;min-height:26px;margin-top:8px}.loginCard p{color:#64748b}
.adminLogoutBtn{border:0;background:#b91c1c;color:#fff;padding:10px 16px;border-radius:12px;font-weight:800;cursor:pointer}
.candidateAdminPanel{background:#fff;border-radius:22px;padding:18px;margin:14px 0}.candidateAdminPanel h2{margin:0;font-size:28px}.candidateAdminPanel>p{color:#64748b}.candidateAdminGrid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.candidateAdminCard{border:1px solid #dbe3ec;border-radius:18px;padding:16px}.candidateAdminCard>img{display:block;width:180px;aspect-ratio:1/1;object-fit:cover;border-radius:16px;margin:0 auto 12px;border:1px solid #cbd5e1}.candidateFormRow{display:grid;grid-template-columns:72px 1fr;align-items:center;gap:8px;margin-top:8px}.candidateFormRow label{font-weight:900}.candidateFormRow input{width:100%;min-width:0;border:1px solid #cbd5e1;border-radius:10px;padding:9px;font-size:16px}.candidateSaveBtn{width:100%;margin-top:12px;border:0;border-radius:11px;padding:11px;background:#1d4ed8;color:#fff;font-weight:900}
.reporterEditor{display:grid;grid-template-columns:1fr 1fr 1.5fr auto;gap:9px;align-items:end;margin-top:12px;padding:12px;background:#f8fafc;border-radius:14px}.reporterEditor label{display:block;font-size:14px;font-weight:900;color:#475569;margin-bottom:4px}.reporterEditor input{width:100%;border:1px solid #cbd5e1;border-radius:9px;padding:9px;font-size:15px}.reporterSaveBtn{border:0;border-radius:10px;background:#334155;color:#fff;padding:10px 12px;font-weight:900}
@media(max-width:800px){.candidateAdminGrid{grid-template-columns:1fr}.reporterEditor{grid-template-columns:1fr 1fr}.reporterNote{grid-column:1/-1}.reporterSaveBtn{grid-column:1/-1}}

/* V0.8 管理者分權＋臨時換人＋批次匯入 */
.hidden{display:none!important}
.superAdminPanel{background:#fff;border-radius:22px;padding:18px;margin:14px 0}
.superAdminPanel h2{margin-top:0}
.adminSubPanel{border:1px solid #dbe3ec;border-radius:16px;padding:14px;margin-top:14px}
.adminSubPanel h3{margin:0 0 10px;font-size:22px}
.newAdminRow,.importRow{display:grid;grid-template-columns:1fr 1fr 180px auto;gap:8px;align-items:center}
.newAdminRow input,.newAdminRow select,.importRow input{min-height:42px;border:1px solid #cbd5e1;border-radius:10px;padding:8px}
.newAdminRow button,.importRow button{border:0;border-radius:10px;padding:10px 12px;background:#1d4ed8;color:#fff;font-weight:900}
.adminUserRow{display:flex;justify-content:space-between;gap:12px;align-items:center;border-top:1px solid #e5e7eb;padding:10px 0}
.adminUserRow b{display:block}.adminUserRow span{display:block;color:#64748b;font-size:14px}
.adminUserRow button{border:0;border-radius:9px;padding:7px 10px;margin-left:6px;font-weight:800}
.replaceBtn{background:#7c3aed;color:#fff}.historyReporterBtn{background:#475569;color:#fff}
#importResult{margin-top:10px;padding:10px;background:#f8fafc;border-radius:10px;line-height:1.5}
@media(max-width:850px){
  .newAdminRow,.importRow{grid-template-columns:1fr 1fr}
}
@media(max-width:560px){
  .newAdminRow,.importRow{grid-template-columns:1fr}
  .adminUserRow{align-items:flex-start;flex-direction:column}
}

/* V0.8.1 管理者姓名欄位 */
.newAdminRow{grid-template-columns:1.1fr 1.1fr 1.1fr 180px auto}
@media(max-width:1050px){.newAdminRow{grid-template-columns:1fr 1fr 1fr}}
@media(max-width:700px){.newAdminRow{grid-template-columns:1fr 1fr}}
@media(max-width:480px){.newAdminRow{grid-template-columns:1fr}}

/* V0.8.1.1 管理者新增列緊湊版 */
.newAdminRow{
  display:grid;
  grid-template-columns:160px 180px 180px 170px 90px;
  gap:10px;
  align-items:center;
}
.newAdminRow input,
.newAdminRow select{
  min-width:0;
  width:100%;
}
.newAdminRow button{
  width:90px;
  white-space:nowrap;
}
@media(max-width:1050px){
  .newAdminRow{
    grid-template-columns:1fr 1fr;
  }
  .newAdminRow button{
    width:100%;
  }
}

/* V0.9 查報異常中心＋責任區總覽 */
.monitorWrap{max-width:1500px;margin:auto;padding:18px}
.monitorHead{background:#fff;border-radius:22px;padding:18px;display:flex;justify-content:space-between;gap:18px;align-items:center}
.monitorHead h1{margin:0;font-size:clamp(32px,4vw,52px)}.monitorHead p{margin:6px 0 0;color:#64748b}
.monitorNav{display:flex;gap:8px;flex-wrap:wrap}.monitorNav a{background:#111827;color:#fff;text-decoration:none;padding:10px 13px;border-radius:11px;font-weight:800}
.monitorSummary{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin:14px 0}
.monitorSummary>div{background:#fff;border-radius:18px;padding:16px;text-align:center}.monitorSummary span{display:block;color:#64748b}.monitorSummary b{display:block;font-size:30px;margin-top:5px}
.monitorTools{background:#fff;border-radius:18px;padding:12px;display:grid;grid-template-columns:2fr 1fr 1fr 1fr auto;gap:9px;margin-bottom:10px}
.monitorTools input,.monitorTools select{height:44px;border:1px solid #cbd5e1;border-radius:10px;padding:0 10px;font-size:16px}.monitorTools button{border:0;border-radius:10px;padding:0 16px;background:#475569;color:#fff;font-weight:900}
.resultCount{margin:9px 2px;color:#64748b;font-weight:800}
.monitorTableWrap table{font-size:17px}.monitorTableWrap th{font-size:18px}.monitorTableWrap td{padding:13px 10px}
.unreportedStatus{color:#64748b;font-weight:900}
.anomalyCenterList{display:flex;flex-direction:column;gap:12px}
.anomalyCenterCard{background:#fff;border-radius:18px;padding:15px;border:1px solid #dbe3ec}
.anomalyCardTop{display:flex;justify-content:space-between;gap:12px;align-items:center}.anomalyCardTop>div{display:flex;gap:9px;align-items:center}.anomalyCardTop b{font-size:21px}.anomalyCardTop>span{color:#64748b}
.dangerTag,.warningTag,.grayTag{display:inline-block;padding:5px 10px;border-radius:999px;font-weight:900}.dangerTag{background:#fee2e2;color:#b91c1c}.warningTag{background:#fff2cc;color:#92400e}.grayTag{background:#eef2f7;color:#475569}
.anomalyInfoGrid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:12px}.anomalyInfoGrid>div{background:#f8fafc;border-radius:12px;padding:10px}.anomalyInfoGrid span{display:block;color:#64748b;font-size:14px}.anomalyInfoGrid b{display:block;margin-top:3px}
.anomalyReasons{margin-top:10px;padding:11px;background:#fff8e7;border:1px solid #f1cf7a;border-radius:12px;color:#8a5300;font-weight:800}.anomalyReasons div+div{margin-top:5px}
.anomalyActions{display:flex;gap:8px;margin-top:10px}.anomalyActions button{border:0;border-radius:10px;padding:9px 12px;background:#1d4ed8;color:#fff;font-weight:900}
@media(max-width:1100px){.monitorSummary{grid-template-columns:repeat(3,1fr)}.monitorTools{grid-template-columns:1fr 1fr}.monitorTools button{min-height:44px}.anomalyInfoGrid{grid-template-columns:1fr 1fr}}
@media(max-width:700px){.monitorWrap{padding:8px}.monitorHead{align-items:flex-start;flex-direction:column}.monitorSummary{grid-template-columns:1fr 1fr}.monitorTools{grid-template-columns:1fr}.anomalyCardTop{align-items:flex-start;flex-direction:column}.anomalyInfoGrid{grid-template-columns:1fr 1fr}.anomalyActions{flex-wrap:wrap}}

/* V1.0 正式選舉設定＋電視牆＋封存備份 */
.settingsWrap{max-width:1100px;margin:auto;padding:18px}.settingsHead{background:#fff;border-radius:22px;padding:18px;display:flex;justify-content:space-between;align-items:center;gap:16px}.settingsHead h1{margin:0;font-size:38px}.settingsHead p{margin:4px 0;color:#64748b}.settingsCard{background:#fff;border-radius:20px;padding:18px;margin-top:16px}.settingsCard h2{margin-top:0}.settingsGrid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.settingsGrid label{font-weight:900}.settingsGrid input,.settingsGrid select{display:block;width:100%;margin-top:5px;height:46px;border:1px solid #cbd5e1;border-radius:10px;padding:0 10px}.primaryBtn,.dangerBtn,.warningBtn{border:0;border-radius:11px;padding:12px 16px;font-weight:900;color:#fff}.primaryBtn{background:#1d4ed8;margin-top:12px}.dangerBtn{background:#b91c1c}.warningBtn{background:#b45309}.settingsActions{display:flex;gap:10px}.dangerSection{border:2px solid #fecaca}.exportGrid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.exportGrid a{background:#111827;color:#fff;text-decoration:none;padding:13px;border-radius:11px;font-weight:900;text-align:center}
.wallBody{margin:0;background:#0b1220;color:#fff;overflow:hidden}.wallLayout{height:100vh;display:grid;grid-template-rows:3fr 1fr;gap:10px;padding:10px}.wallTop{display:grid;grid-template-rows:auto 1fr auto;gap:10px;min-height:0}.wallTitle{text-align:center}.wallTitle h1{margin:0;font-size:clamp(34px,4vw,68px)}.wallTitle #wallSub{color:#cbd5e1;font-size:20px;margin-top:4px}.wallCandidates{display:grid;grid-template-columns:1fr 1fr;gap:14px;min-height:0}.wallCandidate{background:#162033;border-radius:24px;padding:18px;display:grid;grid-template-columns:minmax(180px,34%) 1fr;gap:22px;align-items:center}.wallCandidate img{width:min(100%,290px);aspect-ratio:1/1;object-fit:cover;border-radius:20px;background:#e5e7eb}.wallCandidate h2{margin:0;font-size:clamp(34px,3vw,58px)}.wallVotes{line-height:1;margin-top:10px}.wallVotes span{font-size:clamp(72px,8vw,150px);font-weight:1000}.wallVotes small{font-size:32px;margin-left:8px}.wallRate{font-size:clamp(32px,3.2vw,58px);font-weight:900;margin-top:10px}.wallSummary{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.wallSummary>div{background:#111a2b;border-radius:16px;padding:10px;text-align:center}.wallSummary span{display:block;color:#cbd5e1;font-size:18px}.wallSummary b{display:block;font-size:clamp(28px,2.8vw,48px);margin-top:3px}
.wallDistrictQuarter{background:#101827;border-radius:20px;padding:10px 14px;min-height:0;display:flex;flex-direction:column}.districtQuarterTitle{display:flex;justify-content:space-between;align-items:center;font-size:24px;font-weight:900;margin-bottom:8px}.districtQuarterTitle small{color:#94a3b8}.wallDistrictGrid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;flex:1;min-height:0}.wallDistrictCard{background:#192437;border-radius:16px;padding:10px;display:flex;flex-direction:column;justify-content:center}.wallDistrictName{font-size:26px;font-weight:1000}.wallDistrictVotes{display:flex;justify-content:space-between;gap:8px;margin-top:7px}.wallDistrictVotes span{font-size:16px}.wallDistrictVotes b{font-size:24px;margin-left:4px}.wallDistrictLead{font-size:18px;font-weight:900;margin-top:6px}.wallDistrictMeta{font-size:14px;color:#cbd5e1;margin-top:5px}.wallNoData{grid-column:1/-1;display:grid;place-items:center;color:#94a3b8;font-size:26px}
@media(max-width:900px){.settingsHead{flex-direction:column;align-items:flex-start}.settingsGrid,.exportGrid{grid-template-columns:1fr}.wallLayout{height:auto;min-height:100vh;grid-template-rows:auto auto}.wallBody{overflow:auto}.wallCandidates{grid-template-columns:1fr}.wallDistrictGrid{grid-template-columns:1fr 1fr}.wallSummary{grid-template-columns:1fr 1fr}}

/* V1.1 斷網暫存＋自動補送＋總部代報 */
.deliveryBar{background:#fff;border-radius:14px;padding:7px 12px;border:2px solid #cbd5e1}.deliveryBar>div{display:flex;justify-content:space-between;gap:10px;align-items:center}.deliveryBar b{font-size:16px}.deliveryBar span,.deliveryBar small{color:#64748b}.deliveryBar.online{border-color:#86efac;background:#f0fdf4}.deliveryBar.online b{color:#15803d}.deliveryBar.offline{border-color:#f59e0b;background:#fffbeb}.deliveryBar.offline b{color:#b45309}.deliveryBar.syncing{border-color:#60a5fa;background:#eff6ff}.deliveryBar.syncing b{color:#1d4ed8}.deliveryBar.conflict{border-color:#fca5a5;background:#fef2f2}.deliveryBar.conflict b{color:#b91c1c}
.proxyBtn{background:#7c3aed;color:#fff;padding:8px 12px;border:0;border-radius:10px;font-weight:800}
.proxyModal{position:fixed;inset:0;background:#0008;display:grid;place-items:center;padding:16px;z-index:9999}.proxyDialog{width:min(620px,100%);background:#fff;border-radius:22px;padding:18px;box-shadow:0 20px 60px #0005}.proxyDialogHead{display:flex;justify-content:space-between;align-items:center}.proxyDialogHead h2{margin:0}.proxyDialogHead button{border:0;background:#eef2f7;width:38px;height:38px;border-radius:50%;font-size:25px}.proxyStationInfo{background:#f8fafc;border-radius:12px;padding:10px;margin:12px 0}.proxyVoteGrid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.proxyVoteGrid label{font-weight:900}.proxyVoteGrid span,.proxyVoteGrid small{display:block}.proxyVoteGrid small{color:#64748b;margin:3px 0}.proxyVoteGrid input{width:100%;height:58px;border:2px solid #cbd5e1;border-radius:12px;text-align:center;font-size:28px;font-weight:900}.proxyField{display:block;font-weight:900;margin-top:12px}.proxyField select,.proxyField textarea{display:block;width:100%;margin-top:5px;border:1px solid #cbd5e1;border-radius:10px;padding:10px;font-size:16px}.proxyField textarea{min-height:76px;resize:vertical}.proxyFinal{display:block;margin-top:12px;font-weight:900}.proxyRoleHint{color:#64748b;font-size:14px;margin-top:4px}.proxySubmitBtn{width:100%;border:0;border-radius:12px;background:#7c3aed;color:#fff;padding:13px;font-size:20px;font-weight:900;margin-top:12px}.reportSourceLine{margin-top:8px;padding:8px 10px;background:#eef6ff;border-radius:10px;color:#334155;font-weight:800}
@media(max-width:650px){.proxyVoteGrid{grid-template-columns:1fr}.deliveryBar b{font-size:14px}.deliveryBar span{font-size:13px}}

/* V1.3 壓力測試中心 */
.stressWrap{max-width:1250px;margin:auto;padding:18px}
.stressHead{background:#fff;border-radius:22px;padding:18px;display:flex;justify-content:space-between;gap:16px;align-items:center}
.stressHead h1{margin:0;font-size:clamp(30px,4vw,46px)}.stressHead p{margin:6px 0 0;color:#64748b}
.stressCard{background:#fff;border-radius:20px;padding:18px;margin-top:16px}
.stressCard h2{margin:0 0 14px}
.stressGrid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.stressGrid label{font-weight:900}.stressGrid select,.stressGrid input{display:block;width:100%;box-sizing:border-box;height:46px;margin-top:5px;border:1px solid #cbd5e1;border-radius:10px;padding:0 10px;font-size:16px}
.stressWarn{margin-top:14px;background:#eff6ff;border:1px solid #93c5fd;border-radius:12px;padding:11px;color:#1e3a8a}
.stressActions{display:flex;gap:10px;margin-top:14px}.stressRunBtn,.stressClearBtn{border:0;border-radius:12px;padding:12px 18px;font-weight:900;color:#fff;font-size:17px}.stressRunBtn{background:#1d4ed8}.stressClearBtn{background:#475569}.stressRunBtn:disabled,.stressClearBtn:disabled{opacity:.5}
.stressProgressBox{padding:8px 0}.stressProgressTrack{height:24px;background:#e2e8f0;border-radius:999px;overflow:hidden}.stressProgressBar{height:100%;width:0;background:linear-gradient(90deg,#2563eb,#06b6d4);transition:width .25s}.stressProgressText{display:flex;justify-content:space-between;gap:12px;margin-top:8px}.stressProgressText b{font-size:22px}.stressProgressText span{color:#64748b;font-weight:800}
.recommendBox{border-radius:15px;padding:14px;display:flex;flex-direction:column;gap:5px}.recommendBox b{font-size:24px}.recommendBox.pass{background:#ecfdf5;border:1px solid #86efac;color:#166534}.recommendBox.watch{background:#fffbeb;border:1px solid #fcd34d;color:#92400e}.recommendBox.upgrade{background:#fef2f2;border:1px solid #fca5a5;color:#991b1b}
.stressMetrics{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px}.stressMetrics>div{background:#f8fafc;border-radius:14px;padding:13px}.stressMetrics span{display:block;color:#64748b}.stressMetrics b{display:block;font-size:24px;margin-top:4px}
.stressReportGrid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:14px}.stressReportGrid>div{background:#f8fafc;border-radius:14px;padding:14px}.stressReportGrid h3{margin-top:0}.stressReportGrid p{margin:7px 0}
.stressNote{margin-top:14px;padding:11px;background:#fff7ed;border:1px solid #fdba74;border-radius:12px;color:#9a3412}
@media(max-width:900px){.stressHead{flex-direction:column;align-items:flex-start}.stressGrid{grid-template-columns:1fr 1fr}.stressMetrics{grid-template-columns:1fr 1fr}.stressReportGrid{grid-template-columns:1fr}}
@media(max-width:600px){.stressWrap{padding:8px}.stressGrid,.stressMetrics{grid-template-columns:1fr}.stressActions{flex-direction:column}.stressActions button{width:100%}.stressProgressText{flex-direction:column}}

/* V1.4 VPS 實機部署驗證 */
.vpsWrap{max-width:1250px;margin:auto;padding:18px}
.deployScore{display:flex;align-items:center;gap:12px;margin-top:14px;padding:14px;background:#f8fafc;border-radius:14px}.deployScore b{font-size:34px}.deployScore span{font-weight:900}
.deployChecks{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:12px}.deployChecks>div{border-radius:12px;padding:12px}.deployOk{background:#ecfdf5;color:#166534}.deployWarn{background:#fff7ed;color:#9a3412}.deployChecks span{margin-right:7px}.deployMeta{grid-column:1/-1;background:#f8fafc;color:#475569}
.vpsControlRow{display:flex;align-items:end;gap:12px;flex-wrap:wrap}.vpsControlRow label{font-weight:900}.vpsControlRow select{display:block;margin-top:5px;height:44px;border:1px solid #cbd5e1;border-radius:10px;padding:0 10px}
.tokenBox{margin-top:14px;background:#f8fafc;border-radius:14px;padding:12px}.tokenBox>div{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.tokenBox>div+div{margin-top:8px}.tokenBox span{color:#64748b;font-weight:900}.tokenBox code{word-break:break-all;font-size:14px}
.commandBox{display:flex;gap:8px;align-items:stretch;background:#0f172a;border-radius:14px;padding:10px}.commandBox code{flex:1;color:#e2e8f0;word-break:break-all;padding:8px}.commandBox button{border:0;border-radius:10px;padding:0 14px;font-weight:900}
.vpsPreset{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.vpsPreset button{border:1px solid #cbd5e1;background:#fff;border-radius:10px;padding:9px 12px;font-weight:900}
@media(max-width:800px){.deployChecks{grid-template-columns:1fr 1fr}}@media(max-width:560px){.deployChecks{grid-template-columns:1fr}.commandBox{flex-direction:column}.commandBox button{height:42px}}
