/* ── Theme variables ── */
:root {
  --bg-base:        #0f0f1a;
  --bg-surface:     #12122a;
  --bg-raised:      #1a1a3e;
  --bg-deep:        #0a0a18;
  --bg-input:       #0a0a18;
  --bg-btn-ghost:   #1e1e40;
  --bg-btn-save:    #3b3b7a;
  --border:         #2a2a5e;
  --border-light:   #1e1e40;
  --text-primary:   #e0e0f0;
  --text-secondary: #a0a0c0;
  --text-muted:     #666;
  --text-dim:       #555;
  --text-input:     #c0c0e0;
  --text-label:     #888;
  --text-log:       #b0b0c8;
  --text-timestamp: #333;
  --text-stat-val:  #7b8cff;
  --accent:         #7b8cff;
  --accent-green:   #4ade80;
  --accent-yellow:  #facc15;
  --accent-red:     #f87171;
  --scrollbar-thumb: #2a2a5e;
  --gradient-header: linear-gradient(135deg, #1a1a3e 0%, #16213e 100%);
  --version-bg:     #1a1a3e;
  --placeholder:    #333;
  --overlay-bg:     rgba(0,0,0,0.7);
}

body.light {
  --bg-base:        #f0f2f8;
  --bg-surface:     #ffffff;
  --bg-raised:      #e8eaf4;
  --bg-deep:        #f5f6fc;
  --bg-input:       #ffffff;
  --bg-btn-ghost:   #e8eaf4;
  --bg-btn-save:    #dde0f5;
  --border:         #c5c8e8;
  --border-light:   #dde0f0;
  --text-primary:   #1a1a3a;
  --text-secondary: #4a4a7a;
  --text-muted:     #7a7aa0;
  --text-dim:       #9090b8;
  --text-input:     #1a1a3a;
  --text-label:     #5a5a8a;
  --text-log:       #2a2a5a;
  --text-timestamp: #aaaacc;
  --text-stat-val:  #4a5aee;
  --accent:         #4a5aee;
  --accent-green:   #16a34a;
  --accent-yellow:  #ca8a04;
  --accent-red:     #dc2626;
  --scrollbar-thumb: #c5c8e8;
  --gradient-header: linear-gradient(135deg, #e8eaf4 0%, #dde0f5 100%);
  --version-bg:     #dde0f5;
  --placeholder:    #b0b0d0;
  --overlay-bg:     rgba(0,0,0,0.4);
}

* { box-sizing: border-box; margin: 0; padding: 0; }

body {
  font-family: 'Segoe UI', system-ui, sans-serif;
  background: var(--bg-base);
  color: var(--text-primary);
  height: 100vh;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  transition: background 0.2s, color 0.2s;
}

/* ── Header ── */
.header {
  background: var(--gradient-header);
  padding: 14px 20px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  border-bottom: 1px solid var(--border);
  flex-shrink: 0;
}
.header-left { display: flex; align-items: center; gap: 12px; }
.logo { font-size: 22px; font-weight: 700; color: var(--accent); letter-spacing: -0.5px; }
.logo span { color: var(--accent-green); }
.version {
  font-size: 11px; color: var(--text-muted);
  background: var(--version-bg); padding: 2px 8px;
  border-radius: 10px; border: 1px solid var(--border);
}

/* ── Theme toggle ── */
.btn-theme {
  background: var(--bg-btn-ghost);
  border: 1px solid var(--border);
  color: var(--text-secondary);
  padding: 5px 12px;
  font-size: 14px;
  border-radius: 20px;
  cursor: pointer;
  transition: all 0.15s;
  line-height: 1;
}
.btn-theme:hover { background: var(--bg-raised); color: var(--text-primary); }

/* ── Status bar ── */
.status-bar {
  background: var(--bg-surface);
  padding: 10px 20px;
  display: flex;
  align-items: center;
  gap: 10px;
  border-bottom: 1px solid var(--border-light);
  flex-shrink: 0;
}
.status-dot {
  width: 10px; height: 10px;
  border-radius: 50%;
  background: var(--accent-green);
  flex-shrink: 0;
  transition: background 0.3s;
}
.status-dot.running { background: var(--accent-yellow); box-shadow: 0 0 8px color-mix(in srgb, var(--accent-yellow) 50%, transparent); animation: pulse 1.2s infinite; }
.status-dot.error   { background: var(--accent-red); }
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }
.status-text { font-size: 13px; color: var(--text-secondary); flex: 1; }

/* ── Controls ── */
.controls {
  padding: 12px 20px;
  display: flex;
  gap: 10px;
  align-items: center;
  background: var(--bg-base);
  border-bottom: 1px solid var(--border-light);
  flex-shrink: 0;
}
button {
  padding: 8px 18px;
  border: none;
  border-radius: 6px;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  transition: all 0.15s;
  display: flex;
  align-items: center;
  gap: 6px;
}
button:disabled { opacity: 0.35; cursor: not-allowed; }

.btn-start    { background: #22c55e; color: #fff; }
.btn-start:hover:not(:disabled)    { background: #16a34a; }
.btn-stop     { background: #ef4444; color: #fff; }
.btn-stop:hover:not(:disabled)     { background: #dc2626; }
.btn-settings { background: var(--bg-btn-ghost); color: var(--text-secondary); border: 1px solid var(--border); }
.btn-settings:hover { background: var(--bg-raised); }
.btn-clear    { background: var(--bg-btn-ghost); color: var(--text-muted); border: 1px solid var(--border); margin-left: auto; font-weight: 400; }
.btn-clear:hover { color: var(--text-secondary); background: var(--bg-raised); }
.btn-logs     { background: var(--bg-btn-ghost); color: var(--text-muted); border: 1px solid var(--border); font-weight: 400; }
.btn-logs:hover { color: var(--text-secondary); background: var(--bg-raised); }

/* ── Stats row ── */
.stats {
  padding: 8px 20px;
  display: flex;
  gap: 24px;
  background: var(--bg-deep);
  border-bottom: 1px solid var(--border-light);
  flex-shrink: 0;
}
.stat { font-size: 12px; color: var(--text-dim); }
.stat span { color: var(--text-stat-val); font-weight: 600; }

/* ── Log area ── */
.log-wrapper {
  flex: 1;
  overflow: hidden;
  padding: 0;
  position: relative;
}
.log-area {
  height: 100%;
  overflow-y: auto;
  padding: 12px 20px;
  font-family: 'Cascadia Code', 'Consolas', 'Courier New', monospace;
  font-size: 12px;
  line-height: 1.6;
  color: var(--text-log);
  background: var(--bg-deep);
}
.log-area::-webkit-scrollbar { width: 6px; }
.log-area::-webkit-scrollbar-track { background: var(--bg-deep); }
.log-area::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb); border-radius: 3px; }

.log-line { display: block; white-space: pre-wrap; word-break: break-all; }
.log-line.info    { color: var(--text-log); }
.log-line.success { color: var(--accent-green); }
.log-line.warn    { color: var(--accent-yellow); }
.log-line.error   { color: var(--accent-red); }
.log-line.dim     { color: var(--text-dim); }
.log-line.highlight { color: var(--accent); font-weight: 600; }

.log-timestamp { color: var(--text-timestamp); font-size: 10px; margin-right: 6px; }

/* ── Spreadsheet URL input ── */
.url-bar {
  padding: 10px 20px;
  display: flex;
  align-items: center;
  gap: 10px;
  background: var(--bg-surface);
  border-bottom: 1px solid var(--border-light);
  flex-shrink: 0;
}
.url-bar label { font-size: 12px; color: var(--text-muted); white-space: nowrap; }
.url-input {
  flex: 1;
  background: var(--bg-input);
  border: 1px solid var(--border);
  border-radius: 6px;
  color: var(--text-input);
  font-size: 12px;
  padding: 6px 10px;
  outline: none;
  font-family: inherit;
  transition: border-color 0.15s;
}
.url-input:focus { border-color: var(--accent); }
.url-input::placeholder { color: var(--placeholder); }
.btn-save {
  background: var(--bg-btn-save);
  color: var(--accent);
  border: 1px solid var(--border);
  padding: 6px 14px;
  font-size: 12px;
  white-space: nowrap;
}
.btn-save:hover:not(:disabled) { background: var(--bg-raised); color: var(--text-primary); }
.save-feedback { font-size: 11px; color: var(--accent-green); min-width: 50px; }
.save-feedback.error { color: var(--accent-red); }

/* ── Login overlay ── */
.login-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: var(--bg-base);
  z-index: 200;
  align-items: center;
  justify-content: center;
  padding: 20px;
}
.login-overlay.open { display: flex; }
.login-panel {
  background: var(--bg-surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  width: 100%;
  max-width: 360px;
  padding: 28px;
  text-align: center;
}
.login-title {
  font-size: 16px;
  font-weight: 700;
  color: var(--accent);
  margin-bottom: 6px;
}
.login-sub {
  font-size: 12px;
  color: var(--text-muted);
  margin-bottom: 20px;
}
.login-panel input {
  width: 100%;
  padding: 10px 12px;
  background: var(--bg-input);
  border: 1px solid var(--border);
  border-radius: 6px;
  color: var(--text-primary);
  font-size: 13px;
  margin-bottom: 12px;
}
.login-panel button {
  width: 100%;
  padding: 10px;
  border: none;
  border-radius: 6px;
  background: var(--accent);
  color: #fff;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}
.login-error {
  font-size: 12px;
  color: var(--accent-red);
  margin-top: 12px;
  min-height: 16px;
}

/* ── Settings modal overlay ── */
.settings-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: var(--overlay-bg);
  z-index: 100;
  align-items: flex-start;
  justify-content: center;
  overflow-y: auto;
  padding: 20px;
}
.settings-overlay.open { display: flex; }

.settings-panel {
  background: var(--bg-surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  width: 100%;
  max-width: 680px;
  padding: 24px;
  margin: auto;
}

.settings-title {
  font-size: 16px;
  font-weight: 700;
  color: var(--accent);
  margin-bottom: 20px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.settings-close {
  background: none;
  border: none;
  color: var(--text-muted);
  font-size: 18px;
  cursor: pointer;
  padding: 0 4px;
}
.settings-close:hover { color: var(--text-primary); }

.settings-section { margin-bottom: 20px; }
.settings-section-title {
  font-size: 11px;
  font-weight: 600;
  color: var(--text-muted);
  text-transform: uppercase;
  letter-spacing: 0.8px;
  margin-bottom: 10px;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--border-light);
}

.settings-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
}
.settings-grid.single { grid-template-columns: 1fr; }

.field { display: flex; flex-direction: column; gap: 4px; }
.field label { font-size: 11px; color: var(--text-label); }
.field input[type="text"],
.field input[type="number"],
.field textarea {
  background: var(--bg-input);
  border: 1px solid var(--border);
  border-radius: 5px;
  color: var(--text-input);
  font-size: 12px;
  padding: 6px 10px;
  outline: none;
  font-family: inherit;
  transition: border-color 0.15s;
  width: 100%;
}
.field textarea {
  min-height: 80px;
  resize: vertical;
  font-family: 'Cascadia Code', 'Consolas', monospace;
  font-size: 11px;
}
.field input:focus,
.field textarea:focus { border-color: var(--accent); }

.field-inline { display: flex; align-items: center; gap: 8px; }
.field-inline label { font-size: 12px; color: var(--text-secondary); cursor: pointer; }
.field-inline input[type="checkbox"] {
  width: 15px; height: 15px;
  accent-color: var(--accent);
  cursor: pointer;
}

.settings-actions {
  display: flex;
  gap: 10px;
  justify-content: flex-end;
  margin-top: 20px;
  padding-top: 16px;
  border-top: 1px solid var(--border-light);
}
.btn-save-settings {
  background: #22c55e;
  color: #fff;
  padding: 8px 22px;
  font-size: 13px;
}
.btn-save-settings:hover { background: #16a34a; }
.btn-cancel-settings {
  background: var(--bg-btn-ghost);
  color: var(--text-muted);
  border: 1px solid var(--border);
  padding: 8px 18px;
  font-size: 13px;
}
.btn-cancel-settings:hover { color: var(--text-secondary); background: var(--bg-raised); }
.settings-save-feedback {
  font-size: 12px;
  color: var(--accent-green);
  align-self: center;
  margin-right: auto;
}
.settings-save-feedback.error { color: var(--accent-red); }

/* ── Field annotations ── */
.field-note-inline {
  color: var(--text-muted);
  font-weight: 400;
}
.field-hint {
  font-size: 11px;
  color: var(--text-muted);
  margin-top: 4px;
}
