:root {
  color-scheme: dark;
  --docs-bg: #0b1220;
  --docs-panel: #111c2e;
  --docs-panel-2: #18253a;
  --docs-border: #2a3a52;
  --docs-text: #e5edf8;
  --docs-muted: #91a4bd;
  --docs-accent: #60a5fa;
  --docs-danger: #fca5a5;
}

* { box-sizing: border-box; }
body { margin: 0; background: var(--docs-bg); color: var(--docs-text); font-family: Inter, "Noto Sans TC", system-ui, sans-serif; }
.docs-header { position: sticky; top: 0; z-index: 20; display: flex; justify-content: space-between; gap: 28px; padding: 22px clamp(20px, 4vw, 56px); background: rgba(11, 18, 32, .96); border-bottom: 1px solid var(--docs-border); backdrop-filter: blur(14px); }
.docs-brand { min-width: 0; }
.docs-kicker { color: var(--docs-accent); font-size: 11px; font-weight: 800; letter-spacing: .16em; }
.docs-brand h1 { margin: 5px 0 4px; color: #f8fafc; font-size: clamp(24px, 3vw, 34px); }
.docs-brand p { margin: 0; color: var(--docs-muted); font-size: 13px; line-height: 1.55; }
.docs-auth { display: grid; justify-items: end; align-content: center; gap: 9px; min-width: 280px; }
#docs-auth-status { color: var(--docs-muted); font-size: 12px; text-align: right; }
.docs-logout { padding: 9px 14px; border: 1px solid var(--docs-border); border-radius: 9px; background: var(--docs-panel-2); color: var(--docs-text); cursor: pointer; }
.docs-logout:hover { border-color: var(--docs-accent); }
.docs-alert { margin: 18px auto 0; width: min(1180px, calc(100% - 36px)); padding: 12px 15px; border: 1px solid #7f1d1d; border-radius: 10px; background: #2b1520; color: var(--docs-danger); font-size: 13px; }

.swagger-ui { color: var(--docs-text); }
.swagger-ui .topbar { display: none; }
.swagger-ui .information-container.wrapper { margin: 22px auto 10px; padding: 0 20px; }
.swagger-ui .info { margin: 18px 0; }
.swagger-ui .info .title, .swagger-ui .info p, .swagger-ui .info li, .swagger-ui .info table, .swagger-ui .info a { color: var(--docs-text); }
.swagger-ui .scheme-container { margin: 0 0 22px; padding: 18px 0; background: var(--docs-panel); box-shadow: none; border-block: 1px solid var(--docs-border); }
.swagger-ui .opblock-tag { color: var(--docs-text); border-bottom-color: var(--docs-border); }
.swagger-ui .opblock-tag:hover { background: var(--docs-panel); }
.swagger-ui .opblock .opblock-summary-description, .swagger-ui .opblock-description-wrapper p, .swagger-ui .response-col_status, .swagger-ui table thead tr td, .swagger-ui table thead tr th, .swagger-ui .parameter__name, .swagger-ui .parameter__type, .swagger-ui label, .swagger-ui .responses-inner h4, .swagger-ui .responses-inner h5 { color: var(--docs-text); }
.swagger-ui .opblock { border-radius: 10px; box-shadow: none; }
.swagger-ui .opblock .opblock-section-header { background: var(--docs-panel-2); box-shadow: none; }
.swagger-ui .opblock .opblock-section-header h4 { color: var(--docs-text); }
.swagger-ui .model-box, .swagger-ui section.models, .swagger-ui section.models.is-open h4 { background: var(--docs-panel); color: var(--docs-text); border-color: var(--docs-border); }
.swagger-ui .model, .swagger-ui .model-title, .swagger-ui .prop-type, .swagger-ui .prop-format { color: var(--docs-text); }
.swagger-ui input[type=text], .swagger-ui input[type=password], .swagger-ui input[type=email], .swagger-ui textarea, .swagger-ui select { border-color: var(--docs-border); background: #0e1728; color: var(--docs-text); }
.swagger-ui .btn { border-color: #52647d; color: var(--docs-text); }
.swagger-ui .btn.authorize,
.swagger-ui .scheme-container .schemes-title,
.swagger-ui .scheme-container .auth-wrapper {
  display: none !important;
}
.swagger-ui .dialog-ux .modal-ux { background: var(--docs-panel); border-color: var(--docs-border); }
.swagger-ui .dialog-ux .modal-ux-header h3, .swagger-ui .dialog-ux .modal-ux-content p { color: var(--docs-text); }
.swagger-ui .response-col_links, .swagger-ui .parameter__in { color: var(--docs-muted); }
.swagger-ui .highlight-code, .swagger-ui .microlight { background: #07101e !important; color: #dbeafe !important; }
.swagger-ui .copy-to-clipboard { background: var(--docs-panel-2); }

/* 管理員登入控制（Google 與 Admin Token） */
.docs-admin-login-wrapper {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 8px;
}
.admin-token-login-group {
  display: flex;
  align-items: center;
  gap: 6px;
}
.docs-admin-token-input {
  width: 170px;
  padding: 6px 10px;
  background: #09101d;
  border: 1px solid var(--docs-border);
  border-radius: 8px;
  color: var(--docs-text);
  font-size: 12px;
  font-family: monospace;
}
.docs-admin-token-input:focus {
  outline: none;
  border-color: var(--docs-accent);
}
.btn-admin-token {
  padding: 6px 12px;
  background: var(--docs-panel-2);
  border: 1px solid var(--docs-border);
  border-radius: 8px;
  color: var(--docs-text);
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  white-space: nowrap;
  transition: all .15s ease;
}
.btn-admin-token:hover {
  border-color: var(--docs-accent);
  color: #fff;
  background: #1e293b;
}

@media (max-width: 760px) {
  .docs-header { position: static; display: grid; padding: 18px; }
  .docs-auth { justify-items: start; min-width: 0; }
  #docs-auth-status { text-align: left; }
  .docs-admin-login-wrapper { align-items: stretch; width: 100%; }
  .admin-token-login-group { width: 100%; }
  .docs-admin-token-input { flex: 1; width: auto; }
  .security-bar-inner { flex-direction: column; align-items: stretch; }
  .docs-key-input { width: 100%; }
}

/* 安全授權控制面板 */
.docs-security-bar {
  margin: 16px auto 0;
  width: min(1180px, calc(100% - 36px));
  background: var(--docs-panel);
  border: 1px solid var(--docs-border);
  border-radius: 12px;
  padding: 14px 18px;
}
.security-bar-inner {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 16px;
  flex-wrap: wrap;
}
.security-status-group {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}
.security-badge {
  display: inline-flex;
  align-items: center;
  font-size: 12px;
  font-weight: 700;
  padding: 4px 10px;
  border-radius: 6px;
  letter-spacing: 0.02em;
}
.security-badge.locked {
  background: #451a1a;
  color: #fca5a5;
  border: 1px solid #7f1d1d;
}
.security-badge.active {
  background: #064e3b;
  color: #6ee7b7;
  border: 1px solid #059669;
}
.security-hint {
  font-size: 12px;
  color: var(--docs-muted);
}
.security-action-group {
  display: flex;
  align-items: center;
  gap: 8px;
}
.key-input-wrapper {
  position: relative;
  display: flex;
  align-items: center;
}
.docs-key-input {
  width: 270px;
  padding: 7px 32px 7px 10px;
  background: #09101d;
  border: 1px solid var(--docs-border);
  border-radius: 8px;
  color: var(--docs-text);
  font-size: 13px;
  font-family: monospace;
}
.docs-key-input:focus {
  outline: none;
  border-color: var(--docs-accent);
}
.btn-toggle-key {
  position: absolute;
  right: 6px;
  background: none;
  border: none;
  color: var(--docs-muted);
  cursor: pointer;
  padding: 2px 4px;
  font-size: 14px;
}
.btn-verify-key, .btn-clear-key {
  padding: 7px 14px;
  border-radius: 8px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  transition: all .15s ease;
}
.btn-verify-key {
  background: #2563eb;
  border: 1px solid #3b82f6;
  color: #ffffff;
}
.btn-verify-key:hover {
  background: #1d4ed8;
}
.btn-clear-key {
  background: var(--docs-panel-2);
  border: 1px solid var(--docs-border);
  color: var(--docs-muted);
}
.btn-clear-key:hover {
  color: var(--docs-danger);
  border-color: #7f1d1d;
}
.docs-scopes-summary {
  margin-top: 10px;
  padding-top: 10px;
  border-top: 1px dashed var(--docs-border);
  font-size: 12px;
  color: #93c5fd;
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  align-items: center;
}
.scope-tag {
  display: inline-block;
  padding: 2px 7px;
  background: #1e3a8a;
  border: 1px solid #3b82f6;
  border-radius: 4px;
  font-size: 11px;
  color: #dbeafe;
}

/* 核心防護：未授權或無權限時完全隱藏與停用 Try it out 與 Execute */
body.is-unauthorized .swagger-ui .try-out,
body.is-unauthorized .swagger-ui .execute-wrapper,
body.is-unauthorized .swagger-ui .btn.execute {
  display: none !important;
}

.swagger-ui .opblock.is-forbidden .try-out,
.swagger-ui .opblock.is-forbidden .execute-wrapper,
.swagger-ui .opblock.is-forbidden .btn.execute {
  display: none !important;
}

.swagger-ui .opblock.is-forbidden {
  opacity: 0.88;
}
.endpoint-locked-badge {
  display: inline-flex;
  align-items: center;
  font-size: 11px;
  color: #f87171;
  background: #450a0a;
  border: 1px solid #991b1b;
  border-radius: 4px;
  padding: 2px 8px;
  margin-left: 10px;
  font-weight: 600;
}
.endpoint-unlocked-badge {
  display: inline-flex;
  align-items: center;
  font-size: 11px;
  color: #34d399;
  background: #064e3b;
  border: 1px solid #059669;
  border-radius: 4px;
  padding: 2px 8px;
  margin-left: 10px;
  font-weight: 600;
}

