:root{font-family:Inter,"Noto Sans TC",Arial,sans-serif;color:#14213d;background:#f4f7fb}*{box-sizing:border-box}body{margin:0}a{color:#175cd3;text-decoration:none}a:hover{text-decoration:underline}.site-header{height:68px;background:#0b1736;color:#fff;display:flex;align-items:center;justify-content:space-between;padding:0 6vw}.site-header a,.site-header button{color:#fff}.brand{display:flex;align-items:center;gap:10px;font-size:20px;font-weight:800;text-decoration:none}.brand-mark{display:grid;place-items:center;width:34px;height:34px;border-radius:10px;background:#2563eb}.site-header nav{display:flex;gap:18px;align-items:center}.container{max-width:1180px;margin:auto;padding:38px 20px 70px}.hero{display:grid;grid-template-columns:1.35fr .65fr;gap:24px;align-items:center;padding:42px 0 48px}.hero h1{font-size:52px;line-height:1.05;margin:10px 0}.hero p{font-size:18px;line-height:1.7;color:#52637a}.hero-panel{background:linear-gradient(135deg,#102959,#1e59bd);color:white;padding:34px;border-radius:24px;box-shadow:0 18px 45px #b4c5df}.shield{width:64px;height:64px;border-radius:20px;background:#fff;color:#1e59bd;display:grid;place-items:center;font-size:34px;font-weight:bold}.eyebrow{letter-spacing:2px;color:#2563eb;font-size:12px;font-weight:800}.feature-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.card{background:#fff;padding:22px;border-radius:16px;box-shadow:0 8px 24px rgba(45,69,107,.08);margin-bottom:20px}.auth-wrap,.upload-wrap{max-width:650px;margin:42px auto}.auth-card,.form-card,.upload-card{padding:30px}.stack p{display:flex;flex-direction:column;gap:7px}input,textarea,select{width:100%;padding:12px 13px;border:1px solid #cbd5e1;border-radius:9px;background:#fff}input[type=file]{padding:16px;background:#f8fafc}.btn{display:inline-block;border:0;border-radius:9px;padding:11px 16px;font-weight:800;cursor:pointer;text-decoration:none}.btn.primary{background:#175cd3;color:#fff}.page-head{display:flex;justify-content:space-between;gap:18px;align-items:center;margin-bottom:18px}.page-head h1{margin:8px 0}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-bottom:20px}.stat{background:#102959;color:#fff;border-radius:16px;padding:22px}.stat strong{display:block;font-size:34px}.stat span{opacity:.8}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;font-size:14px}th,td{text-align:left;padding:13px;border-bottom:1px solid #e7edf4;vertical-align:top}th{color:#667085;font-size:12px;text-transform:uppercase}.badge{display:inline-block;background:#eef2f6;color:#667085;padding:4px 8px;border-radius:99px;font-size:12px}.badge.ok{background:#e8f7ef;color:#087443}.small{font-size:12px;color:#718096;margin-top:4px;max-width:480px;overflow-wrap:anywhere}.muted{color:#667085}.hash{font-family:monospace;font-size:11px;max-width:230px;overflow-wrap:anywhere}.inline-form{display:inline}.link-button{background:transparent;border:0;padding:0;margin-left:10px;cursor:pointer}.danger{color:#c5221f}.alert{padding:13px;border-radius:10px;margin-bottom:16px;background:#e7f7ef;color:#087443}.alert.error{background:#fdecec;color:#b42318}.drop-zone{margin-top:20px;padding:24px;border:2px dashed #b7c7df;border-radius:16px;background:#f7faff}.upload-icon{font-size:44px;color:#175cd3}footer{text-align:center;color:#7b8794;padding:22px}@media(max-width:760px){.hero{grid-template-columns:1fr}.hero h1{font-size:42px}.feature-grid,.stats{grid-template-columns:1fr}.page-head{align-items:flex-start;flex-direction:column}.site-header{padding:0 18px}}
/* ZIP 拖曳上傳區塊 */
.zip-drop-zone {
  display: block;
  padding: 34px 24px;
  border: 2px dashed #adc2e8;
  border-radius: 18px;
  background: #f8fbff;
  cursor: default;
  transition:
    border-color 0.2s ease,
    background-color 0.2s ease,
    box-shadow 0.2s ease,
    transform 0.2s ease;
}

.zip-drop-zone.is-dragover {
  border-color: #2563eb;
  background: #eaf3ff;
  box-shadow: 0 0 0 6px rgba(37, 99, 235, 0.12);
  transform: scale(1.01);
}

.zip-drop-zone.is-uploading {
  cursor: wait;
  opacity: 0.78;
}

.zip-drop-zone h2 {
  margin: 0 0 12px;
  color: #081b3a;
  font-size: 26px;
}

.zip-drop-zone p {
  margin: 0;
  color: #50617e;
  line-height: 1.7;
}

.selected-file-list {
  margin-top: 20px;
  color: #17355f;
  text-align: left;
}

.selected-file-title {
  margin-bottom: 8px;
  font-weight: 700;
}

.selected-file-list ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

.selected-file-list li {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin-top: 8px;
  padding: 10px 12px;
  border: 1px solid #dbe5f1;
  border-radius: 10px;
  background: #fff;
  overflow-wrap: anywhere;
}

.upload-file-details {
  display: flex;
  min-width: 0;
  flex-direction: column;
  gap: 4px;
}

.upload-file-info {
  min-width: 0;
}

.upload-file-message {
  color: #b42318;
  font-size: 12px;
}

.upload-file-status {
  flex: 0 0 auto;
  padding: 4px 9px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 700;
}

.upload-file-status.is-pending {
  background: #eef2f6;
  color: #667085;
}

.upload-file-status.is-uploading {
  background: #e8f0ff;
  color: #1d4ed8;
}

.upload-file-status.is-uploaded {
  background: #e8f7ef;
  color: #087443;
}

.upload-file-status.is-error {
  background: #fdecec;
  color: #b42318;
  cursor: help;
}

.upload-status {
  min-height: 24px;
  margin-top: 14px;
  font-size: 14px;
  line-height: 1.6;
}

.upload-status-loading {
  color: #1d4ed8;
  font-weight: 700;
}

.upload-status-error {
  color: #b91c1c;
  font-weight: 700;
}

.upload-status-ready {
  color: #175cd3;
}

.upload-status-success {
  color: #087443;
  font-weight: 700;
}

.btn:disabled {
  cursor: wait;
  opacity: 0.65;
}

.action-row{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.action-row form{margin:0}.project-stats{grid-template-columns:repeat(4,1fr)}.severity-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:12px}.severity{padding:16px;border-radius:12px;background:#eef2f6;text-align:center}.severity strong{display:block;font-size:28px}.severity.critical{background:#3f0d12;color:#fff}.severity.high{background:#fdecec;color:#b42318}.severity.medium{background:#fff4df;color:#9a6700}.severity.low{background:#e8f0ff;color:#1d4ed8}.severity.info{background:#eef2f6;color:#475467}.severity-critical{background:#3f0d12;color:#fff}.severity-high{background:#fdecec;color:#b42318}.severity-medium{background:#fff4df;color:#9a6700}.severity-low{background:#e8f0ff;color:#1d4ed8}.severity-info{background:#eef2f6;color:#475467}.detail-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.detail-grid div{padding:14px;border:1px solid #e7edf4;border-radius:10px}.detail-grid span{display:block;color:#667085;font-size:12px;margin-bottom:5px}@media(max-width:760px){.project-stats,.severity-grid,.detail-grid{grid-template-columns:1fr 1fr}.action-row{width:100%}}
.project-form-wrap{max-width:820px}.zip-picker{margin:18px 0}.zip-picker-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.zip-picker-head h2{margin:0 0 6px}.zip-picker-head p{margin:0}.zip-picker-actions{display:flex;gap:12px;white-space:nowrap}.zip-checkbox-list{max-height:420px;margin-top:14px;overflow:auto;border:1px solid #dbe5f1;border-radius:12px}.zip-checkbox-item{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;border-bottom:1px solid #e7edf4;cursor:pointer}.zip-checkbox-item:last-child{border-bottom:0}.zip-checkbox-item:hover{background:#f8fbff}.zip-checkbox-item input{width:auto;margin-top:4px}.zip-checkbox-item span{min-width:0}.zip-checkbox-item strong,.zip-checkbox-item small{display:block;overflow-wrap:anywhere}.zip-checkbox-item small{margin-top:4px;color:#667085}.form-error{color:#b42318;font-size:13px}@media(max-width:760px){.zip-picker-head{flex-direction:column}.zip-picker-actions{white-space:normal}}
.danger-button{border:1px solid #f2b8b5;background:#fff;color:#b42318}
