/* styles.css — RogueMUD World Mapper */

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

:root {
  --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
  --font-mono: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
  --bg-primary:   #ffffff;
  --bg-secondary: #f5f4f0;
  --bg-tertiary:  #eeece6;
  --text-primary:  #1a1a18;
  --text-secondary:#5f5e5a;
  --text-tertiary: #909088;
  --text-info:     #0c447c;
  --border-thin:  rgba(0,0,0,0.12);
  --border-mid:   rgba(0,0,0,0.22);
  --bg-info:      #e6f1fb;
  --border-info:  #185fa5;
  --radius-sm: 5px;
  --radius-md: 8px;
  --radius-lg: 12px;
}
.dark-mode {
  --bg-primary:   #1a1a18;
  --bg-secondary: #242420;
  --bg-tertiary:  #2c2c28;
  --text-primary:  #e8e6de;
  --text-secondary:#a8a69e;
  --text-tertiary: #6e6c66;
  --text-info:     #85b7eb;
  --border-thin:  rgba(255,255,255,0.10);
  --border-mid:   rgba(255,255,255,0.18);
  --bg-info:      #0c2a3e;
  --border-info:  #185fa5;
}

html, body { height: 100%; }

body {
  font-family: var(--font-sans);
  background: var(--bg-primary);
  min-height: 100vh;
  display: flex;
  margin: 0;
  padding: 0;
}

#app {
  width: 100%;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  background: var(--bg-primary);
  position: relative;
  height: 100vh;
}

/* ── Nav ─────────────────────────────────────────────────────────── */
#nav {
  display: flex; align-items: stretch; height: 40px;
  background: #2c2c2a; border-bottom: 2px solid #1a1a18; flex-shrink: 0;
}
#nav-brand {
  font-size: 12px; font-weight: 500; color: #e8e6de;
  padding: 0 16px; display: flex; align-items: center;
  border-right: 1px solid rgba(255,255,255,0.1); flex-shrink: 0; letter-spacing: 0.02em;
}
#nav-center { flex: 1; display: flex; align-items: center; justify-content: center; }
.nav-tab {
  font-size: 12px; padding: 0 14px; height: 40px; cursor: pointer;
  color: #a8a69e; background: transparent; border: none;
  transition: background 0.15s, color 0.15s;
  white-space: nowrap; display: flex; align-items: center; gap: 6px;
  position: relative; font-family: var(--font-sans);
}
.nav-tab:hover { background: rgba(210,110,30,0.85); color: #000; }
.nav-tab.active { color: #fff; background: rgba(255,255,255,0.08); }
.nav-tab.active::after { content:''; position:absolute; bottom:0; left:0; right:0; height:2px; background:#d85a30; }
#nav-right { display:flex; align-items:center; flex-shrink:0; border-left:1px solid rgba(255,255,255,0.1); }
#nav-right .nav-tab { border-left:1px solid rgba(255,255,255,0.06); }
.gear-icon { width:13px; height:13px; flex-shrink:0; }

/* ── Panels ──────────────────────────────────────────────────────── */
.panel { display:none; flex-direction:column; flex:1; min-height:0; }
.panel.active { display:flex; }

/* ── Toolbar ─────────────────────────────────────────────────────── */
#toolbar {
  display:flex; align-items:center; gap:6px; padding:5px 10px;
  border-bottom:0.5px solid var(--border-thin);
  background:var(--bg-secondary); flex-shrink:0; flex-wrap:wrap;
}
.tb-btn {
  font-size:11px; padding:3px 8px; border-radius:var(--radius-sm);
  border:0.5px solid var(--border-mid); background:transparent;
  color:var(--text-secondary); cursor:pointer; transition:background 0.15s;
  height:24px; display:flex; align-items:center; white-space:nowrap;
  font-family:var(--font-sans);
}
.tb-btn:hover { background:var(--bg-primary); }
.tb-btn.active { background:var(--bg-info); color:var(--text-info); border-color:var(--border-info); }
#zoom-label { font-size:11px; color:var(--text-tertiary); min-width:32px; text-align:center; }
.sep { width:0.5px; height:16px; background:var(--border-thin); margin:0 2px; flex-shrink:0; }

/* ── Search ─────────────────────────────────────────────────────── */
#search-wrap { position:relative; display:flex; align-items:center; margin:0; padding:0; border:none; }
.search-icon { width:14px; height:14px; color:var(--text-tertiary); position:absolute; left:7px; pointer-events:none; }
#search-input {
  font-size:11px; padding:3px 8px 3px 24px; border-radius:var(--radius-sm);
  border:0.5px solid var(--border-mid); background:var(--bg-primary);
  color:var(--text-primary); height:24px; width:240px; outline:none;
  font-family:var(--font-sans); transition:border 0.15s;
}
#search-input:focus { border-color:#378add; }
#search-results {
  display:none; position:absolute; top:28px; left:0; width:340px;
  max-height:400px; overflow-y:auto; z-index:50;
  background:var(--bg-primary); border:0.5px solid var(--border-mid);
  border-radius:var(--radius-md); box-shadow:0 6px 20px rgba(0,0,0,0.15);
  padding:4px 0;
}
.dark-mode #search-results { box-shadow:0 6px 20px rgba(0,0,0,0.4); }
#search-results.open { display:block; }
.sr-group { padding:4px 10px 2px; font-size:9px; font-weight:600; color:var(--text-tertiary);
  letter-spacing:0.06em; text-transform:uppercase; }
.sr-item {
  display:flex; align-items:center; gap:8px; padding:5px 10px; cursor:pointer;
  font-size:11px; color:var(--text-primary); transition:background 0.1s;
}
.sr-item:hover, .sr-item.sr-selected { background:var(--bg-secondary); }
.sr-node { width:10px; height:10px; border-radius:50%; flex-shrink:0; border:1.5px solid; }
.sr-info { flex:1; min-width:0; }
.sr-name { font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sr-meta { font-size:9px; color:var(--text-tertiary); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sr-realm { font-weight:600; color:var(--text-secondary); }
.sr-cat { font-size:9px; padding:1px 5px; border-radius:6px; flex-shrink:0; font-weight:500; }
.sr-count { font-size:9px; color:var(--text-tertiary); margin-left:auto; flex-shrink:0; }
.sr-empty { padding:12px 10px; font-size:11px; color:var(--text-tertiary); text-align:center; }
.sr-remove { background:none; border:none; cursor:pointer; color:var(--text-tertiary); font-size:14px; padding:0 2px; line-height:1; flex-shrink:0; border-radius:3px; }
.sr-remove:hover { color:var(--text-primary); background:var(--bg-secondary); }
.sr-clear-all { background:none; border:none; cursor:pointer; color:var(--text-tertiary); font-size:9px; padding:1px 4px; border-radius:3px; font-family:var(--font-sans); }
.sr-clear-all:hover { color:var(--text-secondary); background:var(--bg-secondary); }

/* sync group */
#sync-group { display:flex; align-items:center; gap:6px; margin-left:auto; flex-shrink:0; }
#sync-meta { display:flex; flex-direction:column; align-items:flex-end; line-height:1.25; }
#sync-meta-line1, #sync-meta-line2 { font-size:10px; font-weight:500; color:var(--text-tertiary); white-space:nowrap; }
#sync-meta.success #sync-meta-line1,
#sync-meta.success #sync-meta-line2 { color:#0f6e56; }
#sync-meta.failed  #sync-meta-line1,
#sync-meta.failed  #sync-meta-line2 { color:#a32d2d; }
#sync-btn {
  font-size:11px; padding:3px 9px; border-radius:var(--radius-sm);
  border:0.5px solid #1d9e75; background:transparent; color:#1d9e75;
  cursor:pointer; transition:border-color 0.2s, color 0.2s, background 0.15s;
  white-space:nowrap; height:24px; display:flex; align-items:center;
  gap:5px; flex-shrink:0; font-family:var(--font-sans);
}
#sync-btn:hover { background:#e1f5ee; }
#sync-btn.syncing { color:var(--text-tertiary); border-color:var(--border-mid); cursor:default; pointer-events:none; }
#sync-btn.failed  { color:#a32d2d; border-color:#a32d2d; }
#sync-btn.failed:hover { background:#fcebeb; }
.dark-mode #sync-btn:hover { background:#04342c; }
.dark-mode #sync-btn.failed:hover { background:#2a0a0a; }
.sync-icon { width:12px; height:12px; flex-shrink:0; }
@keyframes spin { to { transform:rotate(360deg); } }
.sync-icon.spinning { animation:spin 0.75s linear infinite; }

/* ── Empty state ─────────────────────────────────────────────────── */
#map-empty-state {
  flex:1; display:flex; flex-direction:column; align-items:center;
  justify-content:center; gap:14px; padding:40px;
  color:var(--text-secondary); text-align:center;
}
.empty-icon svg { width:56px; height:56px; color:var(--text-tertiary); }
#map-empty-state h2 { font-size:16px; font-weight:500; color:var(--text-primary); }
#map-empty-state p { font-size:13px; line-height:1.6; max-width:420px; }
#map-empty-state code {
  font-family:var(--font-mono); font-size:12px;
  background:var(--bg-secondary); padding:2px 6px; border-radius:4px;
  color:var(--text-primary);
}
.empty-hint { color:var(--text-tertiary) !important; font-size:12px !important; font-family:var(--font-mono); }

/* ── Map area ────────────────────────────────────────────────────── */
#map-area { display:flex; flex:1; min-height:0; }
#canvas-wrap {
  flex:1; overflow:hidden; position:relative;
  background:#dceee8; cursor:grab; min-height:480px;
}
.dark-mode #canvas-wrap { background:#1a2820; }
#canvas-wrap.grabbing { cursor:grabbing; }
#map-svg { transform-origin:0 0; user-select:none; display:block; position:absolute; top:0; left:0; }
#tooltip {
  position:absolute; pointer-events:none;
  background:var(--bg-primary); border:0.5px solid var(--border-mid);
  border-radius:6px; padding:4px 8px; font-size:11px; color:var(--text-primary);
  display:none; z-index:10; white-space:nowrap; max-width:240px;
}
/* ── Minimap ───────────────────────────────────────────────────────────── */
#minimap {
  position:absolute; top:10px; left:10px; z-index:8;
  width:200px; height:200px;
  background:var(--bg-primary); border:1px solid var(--border-mid);
  border-radius:var(--radius-sm); overflow:hidden;
  box-shadow:0 2px 8px rgba(0,0,0,0.12);
  cursor:pointer; transition:width 0.2s ease, height 0.2s ease;
}
#minimap.expanded { width:400px; height:400px; }
.dark-mode #minimap { box-shadow:0 2px 8px rgba(0,0,0,0.4); }
#minimap-canvas { display:block; width:100%; height:100%; }
#minimap-toggle {
  position:absolute; bottom:5px; right:5px; z-index:1;
  width:22px; height:22px; padding:0; border:none;
  display:flex; align-items:center; justify-content:center;
  background:var(--bg-secondary); border-radius:4px;
  border:0.5px solid var(--border-thin);
  color:var(--text-tertiary); cursor:pointer; opacity:0;
  transition:opacity 0.15s, background 0.15s;
}
#minimap:hover #minimap-toggle { opacity:1; }
#minimap-toggle:hover { background:var(--bg-tertiary); color:var(--text-primary); }
#minimap-viewport {
  position:absolute; border:1.5px solid #534AB7;
  background:rgba(83,74,183,0.10); border-radius:2px;
  pointer-events:none; transition:none;
}
.dark-mode #minimap-viewport {
  border-color:#a78bfa;
  background:rgba(167,139,250,0.12);
}
#z-bar {
  position:absolute; bottom:10px; left:10px; z-index:5;
  /* Horizontal row: left pill column, toggle, right pill column.
     align-items:center keeps the toggle vertically centered relative to
     the two (possibly different-height) columns when expanded. */
  display:flex; flex-direction:row; align-items:center; gap:4px;
}
.z-list {
  display:none; flex-direction:column; gap:3px;
  max-height:50vh; overflow-y:auto; padding:6px;
  background:var(--bg-primary);
  border:0.5px solid var(--border-mid); border-radius:var(--radius-md);
  box-shadow:0 6px 18px rgba(0,0,0,0.14);
}
.z-list.open { display:flex; }
.z-list::-webkit-scrollbar { width:6px; }
.z-list::-webkit-scrollbar-thumb { background:var(--border-mid); border-radius:3px; }
/* Floating button row */
#z-toggle {
  display:flex; align-items:stretch; gap:0;
  background:var(--bg-primary);
  border:0.5px solid var(--border-mid); border-radius:14px;
  box-shadow:0 2px 6px rgba(0,0,0,0.12);
  overflow:hidden;
}
#z-toggle button {
  border:none; background:transparent; cursor:pointer;
  color:var(--text-secondary); font-family:var(--font-sans);
  transition:background 0.15s, color 0.15s, transform 0.05s;
  padding:0; margin:0;
}
#z-toggle button:hover:not(:disabled) { background:var(--bg-secondary); color:var(--text-primary); }
#z-toggle button:active:not(:disabled) { transform:scale(0.92); }
#z-toggle button:disabled { opacity:0.3; cursor:default; }
/* Step buttons: give them real presence — wider, tinted background to mark
   them as dedicated quick-nav actions, and a bolder icon color. */
#z-toggle-up, #z-toggle-down {
  width:34px; min-height:30px;
  background:var(--bg-secondary);
  color:var(--text-info);
  display:flex; align-items:center; justify-content:center;
}
#z-toggle-up svg, #z-toggle-down svg {
  width:16px; height:16px; display:block;
}
#z-toggle-up:hover:not(:disabled),
#z-toggle-down:hover:not(:disabled) {
  background:var(--bg-info);
  color:var(--border-info);
}
#z-toggle-main {
  font-size:11px; padding:4px 10px;
  display:flex; align-items:center; gap:6px;
  border-left:0.5px solid var(--border-thin);
  border-right:0.5px solid var(--border-thin);
}
.z-toggle-label {
  font-size:9px; letter-spacing:0.06em; text-transform:uppercase;
  color:var(--text-tertiary);
}
.z-toggle-current {
  font-weight:500; color:var(--text-primary); font-size:11px;
  min-width:78px; text-align:center;
}
.z-toggle-chevron {
  font-size:9px; color:var(--text-tertiary); margin-left:2px;
  transition:transform 0.15s;
}
#z-bar.open .z-toggle-chevron { transform:rotate(90deg); }
#realm-bar {
  position:absolute; top:10px; left:50%; transform:translateX(-50%);
  display:flex; gap:4px; z-index:5;
  background:var(--bg-primary); border:1px solid var(--border-mid);
  border-radius:var(--radius-md); padding:4px;
  box-shadow:0 2px 8px rgba(0,0,0,0.1);
}
.realm-pill {
  font-size:11px; padding:5px 14px; border-radius:var(--radius-sm);
  border:none; background:transparent;
  color:var(--text-secondary); cursor:pointer; transition:all 0.15s;
  font-family:var(--font-sans); font-weight:500;
}
.realm-pill:hover { background:var(--bg-secondary); color:var(--text-primary); }
.realm-pill.active { background:#1d9e75; color:#fff; }
.realm-pill-count { opacity:0.7; font-size:9.5px; margin-left:4px; }
.z-pill {
  font-size:10px; padding:2px 8px; border-radius:10px;
  border:0.5px solid var(--border-mid); background:var(--bg-primary);
  color:var(--text-secondary); cursor:pointer; transition:all 0.15s;
  font-family:var(--font-sans);
  width:84px; box-sizing:border-box; text-align:center;
}
.z-pill:hover { background:var(--bg-secondary); }
.z-pill.active { background:var(--bg-info); color:var(--text-info); border-color:var(--border-info); }

/* ── Inspector ───────────────────────────────────────────────────── */
#inspector {
  width:260px; min-width:260px;
  border-left:0.5px solid var(--border-thin);
  display:flex; flex-direction:column;
  background:var(--bg-primary); overflow-y:auto;
}
#insp-header { padding:10px 12px 7px; border-bottom:0.5px solid var(--border-thin); }
#insp-title { font-size:13px; font-weight:500; color:var(--text-primary); margin-bottom:2px; }
#insp-sub { font-size:11px; color:var(--text-secondary); }
#insp-tabs { display:flex; gap:0; border-bottom:0.5px solid var(--border-thin); padding:0 12px; }
.insp-tab { background:none; border:none; border-bottom:2px solid transparent; padding:6px 10px; font-size:11px; font-weight:500; color:var(--text-tertiary); cursor:pointer; font-family:var(--font-sans); transition:color 0.15s, border-color 0.15s; }
.insp-tab:hover { color:var(--text-secondary); }
.insp-tab.active { color:var(--text-primary); border-bottom-color:#1d9e75; }
.insp-tab-pane { display:none; }
.insp-tab-pane.active { display:block; }
#insp-body { padding:10px 12px; flex:1; overflow-y:auto; }
.insp-row { display:flex; justify-content:space-between; align-items:flex-start; padding:3px 0; border-bottom:0.5px solid var(--border-thin); font-size:11px; }
.insp-row:last-child { border-bottom:none; }
.insp-key { color:var(--text-secondary); }
.insp-val { color:var(--text-primary); font-weight:500; text-align:right; max-width:160px; }
.insp-path { display:flex; align-items:center; gap:4px; font-size:10px; font-family:var(--font-mono); word-break:break-all; font-weight:400; color:var(--text-secondary); }
.insp-copy { background:none; border:none; cursor:pointer; padding:2px; color:var(--text-tertiary); display:flex; align-items:center; flex-shrink:0; border-radius:3px; }
.insp-copy:hover { color:var(--text-primary); background:var(--bg-secondary); }
.insp-desc {
  font-family:var(--font-mono); font-size:11px; line-height:1.5;
  color:#c8c8a8; background:#1a1a18; border-radius:var(--radius-sm);
  padding:8px 10px; margin:4px 0 6px; white-space:pre-wrap; word-wrap:break-word;
  max-height:280px; overflow-y:auto;
}
.badge { display:inline-block; font-size:10px; padding:1px 6px; border-radius:8px; margin:1px 1px 0 0; }
#insp-exits { padding:10px 12px; border-top:0.5px solid var(--border-thin); }
.insp-exits-label { font-size:10px; font-weight:500; color:var(--text-secondary); margin-bottom:5px; letter-spacing:0.05em; }
.exit-row { display:flex; align-items:center; gap:5px; font-size:11px; cursor:pointer; border-radius:4px; padding:2px 5px; margin:0 -5px; }
.exit-row:hover { background:var(--bg-secondary); }
.exit-dir { font-weight:500; min-width:28px; color:var(--text-secondary); font-size:10px; }
.exit-name { color:var(--text-info); flex:1; }
.exit-z { font-size:9px; padding:1px 4px; border-radius:6px; background:var(--bg-secondary); color:var(--text-tertiary); }
#insp-empty { padding:14px 12px; font-size:11px; color:var(--text-tertiary); text-align:center; line-height:1.6; }
.insp-inv-row { display:flex; align-items:center; gap:5px; font-size:11px; padding:5px 6px; margin:0 -6px; border-radius:5px; cursor:default; border-bottom:0.5px solid var(--border-thin); }
.insp-inv-row:last-child { border-bottom:none; }
.insp-inv-row:hover { background:var(--bg-secondary); }
.insp-inv-icon { flex-shrink:0; color:var(--text-tertiary); }
.insp-inv-name { flex:1; color:var(--text-primary); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.insp-inv-qty { font-size:9px; color:var(--text-tertiary); background:var(--bg-secondary); padding:1px 5px; border-radius:6px; flex-shrink:0; }
.insp-npc-tags { display:flex; gap:4px; flex-shrink:0; }
.insp-npc-lvl { font-size:9px; font-weight:500; color:var(--text-secondary); background:var(--bg-secondary); padding:1px 5px; border-radius:6px; }
.insp-npc-tier { font-size:9px; font-weight:500; text-transform:capitalize; }
.insp-tab-empty { font-size:11px; color:var(--text-tertiary); text-align:center; padding:20px 0; }

/* ── Legend ──────────────────────────────────────────────────────── */
#legend {
  display:flex; align-items:center; flex-wrap:wrap; gap:5px;
  padding:6px 10px; border-top:0.5px solid var(--border-thin);
  background:var(--bg-secondary); flex-shrink:0;
}
.leg-item {
  display:flex; align-items:center; gap:4px; font-size:10px;
  color:var(--text-secondary); padding:3px 7px; border-radius:20px;
  border:0.5px solid transparent; cursor:pointer; transition:all 0.15s; user-select:none;
  font-family:var(--font-sans);
}
.leg-item:hover { background:var(--bg-primary); border-color:var(--border-mid); }
.leg-item.selected { border-color:currentColor; background:var(--bg-primary); font-weight:500; }
.leg-icon { width:8px; height:8px; border-radius:50%; flex-shrink:0; }
#filter-hint { font-size:10px; color:var(--text-tertiary); margin-left:auto; padding:3px 6px; white-space:nowrap; }

/* ── Room animations ─────────────────────────────────────────────── */
@keyframes pulse-out { 0%{r:12;opacity:0.7} 50%{r:24;opacity:0} 100%{r:12;opacity:0.7} }
.pulse-ring { animation:pulse-out 1.5s ease-in-out infinite; }
.dark-mode .pulse-ring { stroke:#e07020 !important; stroke-width:4 !important; }
@keyframes pulse-out-dark { 0%{r:12;opacity:0.9} 50%{r:26;opacity:0} 100%{r:12;opacity:0.9} }
.dark-mode .pulse-ring { animation:pulse-out-dark 1.5s ease-in-out infinite; }
@keyframes fadeInNode { from{opacity:0;transform:scale(0.65)} to{opacity:1;transform:scale(1)} }
.room-node { transform-box:fill-box; transform-origin:center; }

/* ── Vertical traversal marker ───────────────────────────────── */
@keyframes vert-pulse-kf { 0%{r:7;opacity:0.7} 50%{r:13;opacity:0} 100%{r:7;opacity:0.7} }
.vert-pulse { animation:vert-pulse-kf 1.6s ease-in-out infinite; transform-box:fill-box; transform-origin:center; }
.vert-marker:hover { opacity:0.85; }

/* ── Vertical traversal picker popup ─────────────────────────── */
#vert-picker {
  position:absolute; z-index:50;
  background:var(--bg-primary); border:1px solid var(--border-mid);
  border-radius:var(--radius-md); padding:4px;
  box-shadow:0 4px 14px rgba(0,0,0,0.18);
  display:none; min-width:180px;
}
.dark-mode #vert-picker { box-shadow:0 4px 14px rgba(0,0,0,0.5); }
.vert-picker-item {
  display:flex; align-items:center; gap:8px;
  padding:7px 10px; border-radius:var(--radius-sm);
  cursor:pointer; font-size:12px; color:var(--text-primary);
  font-family:var(--font-sans);
}
.vert-picker-item:hover { background:var(--bg-secondary); }
.vert-picker-dir { font-size:10px; font-weight:600; color:var(--text-tertiary); text-transform:uppercase; letter-spacing:0.04em; }
.vert-picker-name { font-weight:500; flex:1; }

/* ── Canvas fade during vertical transition ─────────────────── */
#map-svg.vert-fading { transition:opacity 0.22s ease; opacity:0; }

/* ── Diagnostic panel (missing-coord rooms in active realm) ─── */
#diag-panel {
  position:absolute; bottom:10px; right:10px; z-index:8;
  width:260px; max-height:260px; display:flex; flex-direction:column;
  background:var(--bg-primary); border:1px solid var(--border-mid);
  border-radius:var(--radius-md);
  box-shadow:0 4px 14px rgba(0,0,0,0.12);
  font-family:var(--font-sans);
}
.dark-mode #diag-panel { box-shadow:0 4px 14px rgba(0,0,0,0.5); }
.diag-header {
  display:flex; align-items:center; gap:6px; padding:8px 10px;
  border-bottom:0.5px solid var(--border-thin);
}
.diag-title { font-size:11px; font-weight:600; color:var(--text-primary); flex:1; }
.diag-count {
  font-size:10px; font-weight:600; padding:1px 6px; border-radius:8px;
  background:#fcebeb; color:#a32d2d;
}
.dark-mode .diag-count { background:#3a1111; color:#f08080; }
.diag-close {
  background:transparent; border:none; font-size:16px; line-height:14px;
  color:var(--text-tertiary); cursor:pointer; padding:0 4px;
}
.diag-close:hover { color:var(--text-primary); }
.diag-body { overflow-y:auto; padding:4px 0; flex:1; }
.diag-row {
  padding:5px 10px; font-size:11px; color:var(--text-primary);
  border-bottom:0.5px solid var(--border-thin); cursor:default;
}
.diag-row:last-child { border-bottom:none; }
.diag-row-name { font-weight:500; }
.diag-row-path { font-size:9.5px; color:var(--text-tertiary); font-family:var(--font-mono); margin-top:1px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.diag-empty { padding:16px 10px; font-size:11px; color:var(--text-tertiary); text-align:center; }

#diag-reopen {
  position:absolute; bottom:10px; right:10px; z-index:8;
  display:flex; align-items:center; gap:5px;
  padding:6px 10px; background:var(--bg-primary);
  border:1px solid var(--border-mid); border-radius:var(--radius-md);
  font-size:10px; font-weight:600; color:#a32d2d;
  cursor:pointer; font-family:var(--font-sans);
  box-shadow:0 2px 6px rgba(0,0,0,0.1);
}
.dark-mode #diag-reopen { color:#f08080; box-shadow:0 2px 6px rgba(0,0,0,0.4); }
#diag-reopen:hover { background:var(--bg-secondary); }

/* ── Settings ────────────────────────────────────────────────────── */
#settings-panel { padding:20px; overflow-y:auto; background:var(--bg-primary); flex:1; min-height:0; }
.settings-section { margin-bottom:24px; }
.settings-section h3 { font-size:12px; font-weight:500; color:var(--text-primary); margin-bottom:12px; padding-bottom:7px; border-bottom:0.5px solid var(--border-thin); }
.setting-row { display:flex; align-items:center; justify-content:space-between; padding:7px 0; border-bottom:0.5px solid var(--border-thin); gap:12px; }
.setting-row:last-child { border-bottom:none; }
.setting-label { font-size:12px; color:var(--text-primary); }
.setting-desc { font-size:10px; color:var(--text-tertiary); margin-top:1px; }
.toggle-wrap { position:relative; width:34px; height:18px; flex-shrink:0; }
.toggle-wrap input { position:absolute; opacity:0; width:100%; height:100%; cursor:pointer; margin:0; z-index:1; }
.toggle-track { width:34px; height:18px; border-radius:9px; background:var(--border-mid); transition:background 0.2s; display:block; }
.toggle-wrap input:checked ~ .toggle-track { background:#378add; }
.toggle-thumb { position:absolute; top:2px; left:2px; width:14px; height:14px; border-radius:50%; background:#fff; transition:transform 0.2s; pointer-events:none; }
.toggle-wrap input:checked ~ .toggle-thumb { transform:translateX(16px); }
.kbd-grid { display:grid; grid-template-columns:1fr 1fr; gap:5px; }
.kbd-row { display:flex; align-items:center; justify-content:space-between; padding:5px 8px; background:var(--bg-secondary); border-radius:var(--radius-sm); font-size:11px; }
.kbd-action { color:var(--text-secondary); }
.kbd-key { font-family:var(--font-mono); font-size:10px; background:var(--bg-primary); border:0.5px solid var(--border-mid); border-radius:3px; padding:1px 5px; color:var(--text-primary); }
select.setting-select { font-size:11px; padding:3px 7px; border-radius:var(--radius-sm); border:0.5px solid var(--border-mid); background:var(--bg-secondary); color:var(--text-primary); cursor:pointer; font-family:var(--font-sans); }
/* Access token field — readonly pill + edit icon */
.token-field { display:flex; align-items:center; gap:8px; }
.token-readonly {
  display:flex; align-items:center; gap:6px;
  padding:4px 8px; min-width:200px;
  background:var(--bg-secondary); border:0.5px solid var(--border-mid);
  border-radius:var(--radius-sm);
  font-family:var(--font-mono); font-size:11px;
  color:var(--text-secondary);
}
.token-preview { letter-spacing:0.5px; flex:1; }
.token-edit-btn, .token-cancel-btn {
  background:transparent; border:none; cursor:pointer;
  padding:2px; border-radius:3px;
  color:var(--text-tertiary);
  display:flex; align-items:center; justify-content:center;
  transition:color 0.15s, background 0.15s;
}
.token-edit-btn:hover, .token-cancel-btn:hover {
  color:var(--text-primary); background:var(--bg-tertiary);
}

/* Admin-only section: tinted background so the entire block reads as restricted */
.settings-section.admin-section {
  background:#fcebeb;
  border:0.5px solid rgba(163,45,45,0.25);
  border-radius:var(--radius-md);
  padding:16px 18px;
  margin-top:24px;
}
.settings-section.admin-section h3 {
  color:#a32d2d;
  letter-spacing:0.04em;
  text-transform:uppercase;
  font-weight:600;
  border-bottom-color:rgba(163,45,45,0.2);
}
.dark-mode .settings-section.admin-section {
  background:rgba(58,17,17,0.55);
  border-color:rgba(240,128,128,0.25);
}
.dark-mode .settings-section.admin-section h3 {
  color:#f08080;
  border-bottom-color:rgba(240,128,128,0.2);
}
.range-wrap { display:flex; align-items:center; gap:8px; }
.setting-range { -webkit-appearance:none; appearance:none; width:120px; height:4px; border-radius:2px; background:var(--bg-tertiary); outline:none; cursor:pointer; }
.setting-range::-webkit-slider-thumb { -webkit-appearance:none; width:14px; height:14px; border-radius:50%; background:#1d9e75; border:1.5px solid var(--bg-primary); cursor:pointer; box-shadow:0 1px 3px rgba(0,0,0,0.2); }
.setting-range::-moz-range-thumb { width:14px; height:14px; border-radius:50%; background:#1d9e75; border:1.5px solid var(--bg-primary); cursor:pointer; box-shadow:0 1px 3px rgba(0,0,0,0.2); }
.range-val { font-size:11px; color:var(--text-secondary); min-width:20px; text-align:center; font-family:var(--font-mono); }
#settings-footer { padding:12px 20px; border-top:0.5px solid var(--border-thin); background:var(--bg-secondary); display:flex; align-items:center; gap:12px; flex-shrink:0; }
#btn-save-settings { font-size:12px; padding:6px 18px; border-radius:6px; border:0.5px solid var(--border-mid); background:var(--bg-tertiary); color:var(--text-tertiary); cursor:not-allowed; transition:all 0.25s; pointer-events:none; font-family:var(--font-sans); }
#btn-save-settings.dirty { background:#1d9e75; color:#fff; border-color:#1d9e75; cursor:pointer; pointer-events:all; }
#btn-save-settings.dirty:hover { opacity:0.88; }
#save-confirm { font-size:11px; color:#1d9e75; opacity:0; transition:opacity 0.3s; }
#save-confirm.show { opacity:1; }
.btn-link { font-size:11px; background:none; border:none; cursor:pointer; color:var(--text-info); padding:0; text-decoration:underline; font-family:var(--font-sans); }

/* ── Users ───────────────────────────────────────────────────────── */
#users-panel { padding:20px; overflow-y:auto; background:var(--bg-primary); flex:1; }
.users-section h3 { font-size:12px; font-weight:500; color:var(--text-primary); margin-bottom:12px; padding-bottom:7px; border-bottom:0.5px solid var(--border-thin); }
#add-user-form { background:var(--bg-secondary); border-radius:var(--radius-lg); border:0.5px solid var(--border-thin); padding:14px; margin-bottom:20px; }
.form-row { display:flex; gap:8px; margin-bottom:8px; flex-wrap:wrap; }
.form-field { display:flex; flex-direction:column; gap:3px; flex:1; min-width:130px; }
.form-label { font-size:10px; color:var(--text-secondary); font-weight:500; letter-spacing:0.04em; }
.form-input { font-size:12px; padding:6px 9px; border-radius:var(--radius-sm); border:0.5px solid var(--border-mid); background:var(--bg-primary); color:var(--text-primary); outline:none; transition:border 0.15s; font-family:var(--font-sans); }
.form-input:focus { border-color:#378add; box-shadow:0 0 0 2px rgba(55,138,221,0.12); }
.form-select { font-size:12px; padding:6px 9px; border-radius:var(--radius-sm); border:0.5px solid var(--border-mid); background:var(--bg-primary); color:var(--text-primary); cursor:pointer; font-family:var(--font-sans); }
.form-actions { display:flex; align-items:center; gap:10px; margin-top:4px; }
.btn-primary { font-size:11px; padding:6px 14px; border-radius:var(--radius-sm); border:none; background:#1d9e75; color:#fff; cursor:pointer; font-weight:500; transition:opacity 0.15s; font-family:var(--font-sans); }
.btn-primary:hover { opacity:0.85; }
.btn-danger { font-size:10px; padding:3px 8px; border-radius:var(--radius-sm); border:0.5px solid var(--border-mid); background:transparent; color:#a32d2d; cursor:pointer; transition:background 0.15s; font-family:var(--font-sans); }
.btn-danger:hover { background:#fcebeb; }
.btn-warn { font-size:10px; padding:3px 8px; border-radius:var(--radius-sm); border:0.5px solid var(--border-mid); background:transparent; color:var(--text-secondary); cursor:pointer; transition:background 0.15s; font-family:var(--font-sans); }
.btn-warn:hover { background:var(--bg-secondary); }
#add-success { font-size:11px; color:#1d9e75; display:none; }
.users-table { width:100%; border-collapse:collapse; font-size:12px; }
.users-table th { text-align:left; font-size:10px; font-weight:500; color:var(--text-secondary); padding:5px 8px; border-bottom:0.5px solid var(--border-thin); letter-spacing:0.04em; }
.users-table td { padding:8px; border-bottom:0.5px solid var(--border-thin); color:var(--text-primary); vertical-align:middle; }
.users-table tr:last-child td { border-bottom:none; }
.users-table tr:hover td { background:var(--bg-secondary); }
.role-badge { display:inline-block; font-size:10px; padding:1px 7px; border-radius:8px; font-weight:500; }
.role-superadmin { background:#fef3e0; color:#8a5c00; }
.role-admin   { background:#eeedfe; color:#3c3489; }
.role-builder { background:#e1f5ee; color:#085041; }
.dark-mode .role-superadmin { background:#3a2e0a; color:#f0c95c; }
.dark-mode .role-admin   { background:#26215c; color:#afa9ec; }
.dark-mode .role-builder { background:#04342c; color:#5dcaa5; }
.you-badge { font-size:9px; padding:1px 5px; border-radius:6px; background:var(--bg-info); color:var(--text-info); border:0.5px solid var(--border-info); margin-left:4px; vertical-align:middle; }
.status-dot { width:6px; height:6px; border-radius:50%; display:inline-block; margin-right:4px; }
.status-active    { background:#1d9e75; }
.status-suspended { background:#e24b4a; }
#user-count { font-weight:400; color:var(--text-tertiary); font-size:11px; }
.form-err-msg { font-size:10px; color:#a32d2d; margin-top:3px; display:none; }

/* ── Password toggle ────────────────────────────────────────────────── */
input::-ms-reveal, input::-ms-clear { display:none; }
.pw-wrap { position:relative; }
.pw-wrap input { padding-right:32px; width:100%; }
.pw-toggle { position:absolute; right:6px; top:50%; transform:translateY(-50%); background:none; border:none; cursor:pointer; padding:2px; color:var(--text-tertiary); display:flex; align-items:center; }
.pw-toggle:hover { color:var(--text-secondary); }
.pw-toggle svg { width:16px; height:16px; }

/* ── Modals ──────────────────────────────────────────────────────── */
.modal-overlay { position:absolute; inset:0; background:rgba(0,0,0,0.55); display:flex; align-items:center; justify-content:center; z-index:100; opacity:0; transition:opacity 0.2s; pointer-events:none; }
.modal-overlay.open { opacity:1; pointer-events:all; }
.modal { background:var(--bg-primary); border-radius:12px; border:0.5px solid var(--border-mid); padding:24px; width:380px; max-width:calc(100% - 32px); transition:transform 0.2s, opacity 0.2s; transform:translateY(8px) scale(0.98); opacity:0; }
.modal-overlay.open .modal { transform:translateY(0) scale(1); opacity:1; }
.modal { position:relative; }
.modal-close { position:absolute; top:12px; right:12px; background:none; border:none; cursor:pointer; color:var(--text-tertiary); padding:4px; border-radius:4px; display:flex; align-items:center; justify-content:center; transition:color 0.15s, background 0.15s; }
.modal-close:hover { color:var(--text-primary); background:var(--bg-secondary); }
.modal h2 { font-size:15px; font-weight:500; color:var(--text-primary); margin-bottom:6px; text-align:center; }
.modal p  { font-size:12px; color:var(--text-secondary); margin-bottom:18px; line-height:1.5; text-align:center; }
.modal-field { margin-bottom:14px; }
.modal-label { font-size:10px; font-weight:500; color:var(--text-secondary); letter-spacing:0.04em; margin-bottom:4px; display:block; }
.modal-input { width:100%; font-size:13px; padding:8px 10px; border-radius:6px; border:0.5px solid var(--border-mid); background:var(--bg-secondary); color:var(--text-primary); outline:none; transition:border 0.15s; font-family:var(--font-sans); }
.modal-input:focus { border-color:#378add; box-shadow:0 0 0 2px rgba(55,138,221,0.12); }
.modal-input.err { border-color:#a32d2d; }
.modal-input.ok  { border-color:#1d9e75; }
.modal-hint { font-size:10px; margin-top:4px; min-height:14px; transition:color 0.15s; }
.modal-hint.err     { color:#a32d2d; }
.modal-hint.ok      { color:#1d9e75; }
.modal-hint.neutral { color:var(--text-tertiary); }
.modal-actions { display:flex; gap:8px; justify-content:flex-end; margin-top:20px; }
.modal-btn { font-size:12px; padding:7px 16px; border-radius:6px; cursor:pointer; transition:all 0.15s; font-family:var(--font-sans); }
.modal-btn.cancel  { background:transparent; border:0.5px solid var(--border-mid); color:var(--text-secondary); }
.modal-btn.cancel:hover { background:var(--bg-secondary); }
.modal-btn.confirm { background:#1d9e75; border:none; color:#fff; font-weight:500; }
.modal-btn.confirm:hover { opacity:0.88; }
.modal-btn.confirm:disabled { background:var(--bg-secondary); color:var(--text-tertiary); cursor:not-allowed; opacity:1; }
.modal-btn.danger  { background:#c23b3b; border:none; color:#fff; font-weight:500; }
.modal-btn.danger:hover { opacity:0.9; background:#a32d2d; }
.modal-divider { height:0.5px; background:var(--border-thin); margin:16px 0; }
.strength-bar  { height:3px; border-radius:2px; margin-top:6px; background:var(--border-thin); overflow:hidden; }
.strength-fill { height:100%; border-radius:2px; transition:width 0.3s, background 0.3s; width:0%; }

/* ── Log ────────────────────────────────────────────────────────── */
#log-panel { padding:20px; overflow-y:auto; background:var(--bg-primary); flex:1; }
.log-section h3 { font-size:12px; font-weight:500; color:var(--text-primary); margin-bottom:12px; padding-bottom:7px; border-bottom:0.5px solid var(--border-thin); }
.log-table { width:100%; border-collapse:collapse; font-size:12px; }
.log-table th { text-align:left; font-size:10px; font-weight:500; color:var(--text-secondary); padding:5px 8px; border-bottom:0.5px solid var(--border-thin); letter-spacing:0.04em; }
.log-table td { padding:8px; border-bottom:0.5px solid var(--border-thin); color:var(--text-primary); vertical-align:middle; }
.log-table tr:last-child td { border-bottom:none; }
.log-table tr:hover td { background:var(--bg-secondary); }
.log-status { display:inline-block; font-size:10px; padding:1px 7px; border-radius:8px; font-weight:500; }
.log-status-success { background:#e1f5ee; color:#085041; }
.log-status-failed  { background:#fcebeb; color:#a32d2d; }
.dark-mode .log-status-success { background:#04342c; color:#5dcaa5; }
.dark-mode .log-status-failed  { background:#3a1111; color:#f08080; }
.log-error { font-size:10px; color:#a32d2d; max-width:250px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.dark-mode .log-error { color:#f08080; }
#log-empty { font-size:12px; color:var(--text-tertiary); padding:20px 8px; }

/* ── Log tabs ─────────────────────────────────────────────────── */
.log-tabs { display:flex; gap:2px; margin-bottom:16px; border-bottom:0.5px solid var(--border-thin); }
.log-tab {
  background:transparent; border:none; padding:8px 16px; cursor:pointer;
  font-size:12px; font-weight:500; color:var(--text-secondary);
  font-family:var(--font-sans); border-bottom:2px solid transparent;
  display:flex; align-items:center; gap:6px;
  transition:color 0.15s, border-color 0.15s;
}
.log-tab:hover { color:var(--text-primary); }
.log-tab.active { color:var(--text-primary); border-bottom-color:#1d9e75; }
.log-tab-badge {
  display:inline-block; min-width:18px; padding:0 5px; height:16px; line-height:16px;
  border-radius:8px; font-size:10px; font-weight:600;
  background:var(--bg-tertiary); color:var(--text-tertiary); text-align:center;
}
.log-tab.active .log-tab-badge[data-warn="true"] { background:#fcebeb; color:#a32d2d; }
.dark-mode .log-tab.active .log-tab-badge[data-warn="true"] { background:#3a1111; color:#f08080; }
.issues-h { font-size:11px; font-weight:600; color:var(--text-primary); letter-spacing:0.02em; }
.issues-count-inline {
  display:inline-block; margin-left:6px; font-size:10px; font-weight:500;
  padding:1px 6px; border-radius:8px; background:var(--bg-tertiary); color:var(--text-secondary);
}
.issues-group { margin-bottom:12px; border:0.5px solid var(--border-mid); border-radius:var(--radius-sm); background:var(--bg-primary); }
.issues-group[open] { margin-bottom:24px; }
.issues-group > summary { list-style:none; }
.issues-group > summary::-webkit-details-marker { display:none; }
.issues-summary {
  display:flex; align-items:center; gap:4px;
  padding:8px 10px; cursor:pointer; user-select:none;
  border-radius:var(--radius-sm);
}
.issues-summary:hover { background:var(--bg-secondary); }
.issues-group[open] > .issues-summary { border-bottom:0.5px solid var(--border-mid); border-radius:var(--radius-sm) var(--radius-sm) 0 0; }
.issues-chevron {
  display:inline-block; width:10px; height:10px; margin-right:4px;
  border-right:1.5px solid var(--text-secondary); border-bottom:1.5px solid var(--text-secondary);
  transform:rotate(-45deg); transition:transform 0.15s ease; flex-shrink:0;
  position:relative; top:-2px;
}
.issues-group[open] > .issues-summary .issues-chevron { transform:rotate(45deg); top:-1px; }
.issues-body { padding:12px 10px 10px; }
.issues-desc { font-size:11px; color:var(--text-tertiary); margin-bottom:10px; }
.issues-desc code { font-size:10.5px; background:var(--bg-secondary); padding:1px 4px; border-radius:3px; font-family:var(--font-mono); }
.issues-empty { font-size:12px; color:var(--text-tertiary); padding:16px 8px; text-align:center; background:var(--bg-secondary); border-radius:var(--radius-sm); }
.issues-coord { font-family:var(--font-mono); font-size:10.5px; color:var(--text-secondary); }
.issues-coord-mismatch { color:#a32d2d; font-weight:500; }
.dark-mode .issues-coord-mismatch { color:#f08080; }

/* ── Profile menu (nav dropdown) ────────────────────────────────── */
#profile-menu-wrap { position:relative; display:flex; align-items:stretch; }
#profile-btn { padding:0 12px; }
.profile-icon { width:16px; height:16px; flex-shrink:0; }
#profile-dropdown {
  position:absolute; top:100%; right:0; min-width:200px;
  background:var(--bg-primary); color:var(--text-primary);
  border:0.5px solid var(--border-mid); border-radius:var(--radius-md);
  box-shadow:0 6px 18px rgba(0,0,0,0.14);
  padding:10px 0 6px; margin-top:4px;
  z-index:30; display:none;
}
#profile-dropdown.open { display:block; }
#profile-greeting {
  padding:2px 14px; font-size:13px; font-weight:500; color:var(--text-primary);
}
#profile-greeting #profile-name { font-weight:600; }
#profile-role {
  padding:0 14px 6px; font-size:10px; color:var(--text-tertiary);
  letter-spacing:0.04em; text-transform:uppercase;
}
.profile-divider { height:0.5px; background:var(--border-thin); margin:4px 0; }
.profile-logout {
  display:flex; align-items:center; width:100%;
  padding:8px 14px; font-size:12px; font-weight:500;
  background:transparent; border:none; cursor:pointer;
  color:#c23b3b; font-family:var(--font-sans); text-align:left;
}
.profile-logout:hover { background:rgba(194,59,59,0.08); }
.dark-mode .profile-logout { color:#f08080; }
.dark-mode .profile-logout:hover { background:rgba(240,128,128,0.12); }
#profile-btn.open {
  /* same style the nav uses for active tabs so the open state reads clearly */
  background:rgba(255,255,255,0.08); color:#fff;
}
