File size: 16,976 Bytes
076b995
1
{"version":3,"file":"static/css/main.2ef3bb14.css","mappings":"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","sources":["index.css","App.css"],"sourcesContent":["@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;500;700&family=IBM+Plex+Mono:wght@300;400;500&display=swap');\n\n*, *::before, *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\nbody {\n  background: #0d0d14;\n  color: #f8fafc;\n  font-family: 'IBM Plex Mono', monospace;\n  font-size: 13px;\n  line-height: 1.5;\n  -webkit-font-smoothing: antialiased;\n  overflow-x: hidden;\n}\n\n::-webkit-scrollbar {\n  width: 4px;\n  height: 4px;\n}\n\n::-webkit-scrollbar-track {\n  background: #0d0d14;\n}\n\n::-webkit-scrollbar-thumb {\n  background: #2a2a3a;\n}\n\n::-webkit-scrollbar-thumb:hover {\n  background: #3a3a5a;\n}\n",":root {\n  --bg: #0d0d14;\n  --surface: #13131d;\n  --surface-2: #1a1a2e;\n  --paper-white: #fafaf5;\n  --paper-edge: #2a2a3a;\n  --mountain: #f59e0b;\n  --valley: #38bdf8;\n  --target-ghost: rgba(124, 58, 237, 0.20);\n  --target-ghost-stroke: rgba(124, 58, 237, 0.45);\n  --validity: #22d3ee;\n  --progress: #22c55e;\n  --economy: #a78bfa;\n  --text-primary: #f8fafc;\n  --text-dim: #64748b;\n  --border: #2a2a3a;\n  --border-bright: #3a3a5a;\n  --font-display: 'JetBrains Mono', monospace;\n  --font-mono: 'IBM Plex Mono', monospace;\n}\n\n.app {\n  display: flex;\n  flex-direction: column;\n  height: 100vh;\n  background: var(--bg);\n  overflow: hidden;\n}\n\n/* ─── HEADER ─── */\n.app-header {\n  display: flex;\n  align-items: center;\n  gap: 24px;\n  padding: 0 20px;\n  height: 48px;\n  border-bottom: 1px solid var(--border);\n  background: var(--surface);\n  flex-shrink: 0;\n  z-index: 10;\n}\n\n.app-title {\n  font-family: var(--font-display);\n  font-size: 14px;\n  font-weight: 700;\n  letter-spacing: 0.12em;\n  color: var(--text-primary);\n  white-space: nowrap;\n}\n\n.app-title .title-accent {\n  color: var(--mountain);\n}\n\n.header-sep {\n  width: 1px;\n  height: 24px;\n  background: var(--border);\n  flex-shrink: 0;\n}\n\n.header-right {\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  margin-left: auto;\n}\n\n.replay-badge {\n  font-size: 10px;\n  font-family: var(--font-display);\n  letter-spacing: 0.1em;\n  color: #38bdf8;\n  background: rgba(56, 189, 248, 0.1);\n  border: 1px solid rgba(56, 189, 248, 0.3);\n  padding: 3px 8px;\n  border-radius: 3px;\n}\n\n.back-to-grid-btn {\n  font-size: 10px;\n  font-family: var(--font-display);\n  letter-spacing: 0.08em;\n  color: #64748b;\n  background: transparent;\n  border: 1px solid #1e2a3a;\n  padding: 3px 10px;\n  border-radius: 3px;\n  cursor: pointer;\n}\n.back-to-grid-btn:hover { color: #e2e8f0; border-color: #64748b; }\n\n.api-status {\n  font-size: 11px;\n  font-family: var(--font-display);\n  letter-spacing: 0.08em;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n\n.api-status-dot {\n  width: 6px;\n  height: 6px;\n  border-radius: 50%;\n  background: var(--text-dim);\n}\n\n.api-status-dot.ok {\n  background: var(--progress);\n  box-shadow: 0 0 6px var(--progress);\n}\n\n.api-status-dot.err {\n  background: #ef4444;\n  box-shadow: 0 0 6px #ef4444;\n}\n\n/* ─── MAIN LAYOUT ─── */\n.app-body {\n  display: grid;\n  grid-template-columns: 1fr 280px;\n  flex: 1;\n  overflow: hidden;\n}\n\n.app-left {\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n  border-right: 1px solid var(--border);\n}\n\n.app-right {\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n  background: var(--surface);\n}\n\n/* ─── CANVAS ROW ─── */\n.canvas-row {\n  display: flex;\n  gap: 0;\n  padding: 16px;\n  flex-shrink: 0;\n  border-bottom: 1px solid var(--border);\n  overflow-x: auto;\n}\n\n.canvas-wrap {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  flex: 1;\n  min-width: 280px;\n}\n\n.canvas-wrap + .canvas-wrap {\n  margin-left: 16px;\n}\n\n.canvas-label {\n  font-family: var(--font-display);\n  font-size: 10px;\n  font-weight: 500;\n  letter-spacing: 0.14em;\n  color: var(--text-dim);\n  text-transform: uppercase;\n}\n\n.canvas-svg {\n  display: block;\n  background: var(--paper-white);\n}\n\n.canvas-3d {\n  display: block;\n  background: linear-gradient(180deg, #1a1a2e 0%, #0f101a 100%);\n  border: 1px solid var(--border);\n}\n\n.canvas-label-row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 10px;\n}\n\n.fold-mode-toggle {\n  display: inline-flex;\n  border: 1px solid var(--border);\n  background: var(--surface);\n}\n\n.fold-mode-btn {\n  border: none;\n  background: transparent;\n  color: var(--text-dim);\n  font-family: var(--font-display);\n  font-size: 9px;\n  letter-spacing: 0.08em;\n  padding: 3px 7px;\n  cursor: pointer;\n}\n\n.fold-mode-btn + .fold-mode-btn {\n  border-left: 1px solid var(--border);\n}\n\n.fold-mode-btn.active {\n  color: var(--text-primary);\n  background: #1f2538;\n}\n\n/* ─── STEP FEED ─── */\n.step-feed-section {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n}\n\n.section-header {\n  font-family: var(--font-display);\n  font-size: 10px;\n  font-weight: 500;\n  letter-spacing: 0.14em;\n  color: var(--text-dim);\n  text-transform: uppercase;\n  padding: 8px 16px;\n  border-bottom: 1px solid var(--border);\n  flex-shrink: 0;\n}\n\n.step-feed {\n  overflow-y: auto;\n  flex: 1;\n  padding: 4px 0;\n}\n\n.step-entry {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n  padding: 8px 16px;\n  border-bottom: 1px solid var(--border);\n  cursor: default;\n  transition: background 0.1s;\n}\n\n.step-entry:hover {\n  background: var(--surface);\n}\n\n.step-entry.active {\n  background: var(--surface-2);\n  border-left: 2px solid var(--valley);\n  padding-left: 14px;\n}\n\n.step-entry-top {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.step-num {\n  font-family: var(--font-display);\n  font-size: 10px;\n  font-weight: 700;\n  color: var(--text-dim);\n  width: 24px;\n  flex-shrink: 0;\n}\n\n.step-instruction {\n  font-size: 12px;\n  color: var(--text-primary);\n  flex: 1;\n}\n\n.assign-badge {\n  font-family: var(--font-display);\n  font-size: 10px;\n  font-weight: 700;\n  padding: 1px 5px;\n  line-height: 1.4;\n  flex-shrink: 0;\n}\n\n.assign-badge.M {\n  background: var(--mountain);\n  color: #0d0d14;\n}\n\n.assign-badge.V {\n  background: var(--valley);\n  color: #0d0d14;\n}\n\n.assign-badge.B {\n  background: var(--border-bright);\n  color: var(--text-dim);\n}\n\n.step-reward-delta {\n  font-size: 11px;\n  color: var(--text-dim);\n  padding-left: 32px;\n}\n\n.step-reward-delta .delta-positive {\n  color: var(--progress);\n}\n\n.step-reward-delta .delta-negative {\n  color: #ef4444;\n}\n\n/* ─── REWARD PANEL ─── */\n.reward-panel {\n  padding: 12px 16px;\n  border-bottom: 1px solid var(--border);\n  flex-shrink: 0;\n}\n\n.reward-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 6px;\n}\n\n.reward-row:last-child {\n  margin-bottom: 0;\n}\n\n.reward-label {\n  font-family: var(--font-display);\n  font-size: 10px;\n  font-weight: 500;\n  letter-spacing: 0.06em;\n  color: var(--text-dim);\n  width: 72px;\n  flex-shrink: 0;\n  text-transform: uppercase;\n}\n\n.reward-track {\n  flex: 1;\n  height: 8px;\n  background: var(--bg);\n  border: 1px solid var(--border);\n  overflow: hidden;\n}\n\n.reward-bar {\n  height: 100%;\n  transition: width 0.4s ease;\n}\n\n.reward-value {\n  font-family: var(--font-display);\n  font-size: 11px;\n  font-weight: 500;\n  color: var(--text-primary);\n  width: 36px;\n  text-align: right;\n  flex-shrink: 0;\n}\n\n.reward-value.dim {\n  color: var(--text-dim);\n}\n\n.reward-divider {\n  height: 1px;\n  background: var(--border);\n  margin: 6px 0;\n}\n\n/* ─── INFO BADGES ─── */\n.info-badges {\n  padding: 12px 16px;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n\n.info-row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 8px;\n}\n\n.info-key {\n  font-family: var(--font-display);\n  font-size: 10px;\n  font-weight: 500;\n  letter-spacing: 0.06em;\n  color: var(--text-dim);\n  text-transform: uppercase;\n}\n\n.info-val {\n  font-family: var(--font-display);\n  font-size: 11px;\n  font-weight: 700;\n  color: var(--text-primary);\n}\n\n.info-val.bool-true {\n  color: var(--progress);\n}\n\n.info-val.bool-false {\n  color: #ef4444;\n}\n\n.info-val.dim {\n  color: var(--text-dim);\n}\n\n/* ─── TARGET SELECTOR ─── */\n.target-selector {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.target-selector-label {\n  font-family: var(--font-display);\n  font-size: 10px;\n  font-weight: 500;\n  letter-spacing: 0.10em;\n  color: var(--text-dim);\n  text-transform: uppercase;\n  white-space: nowrap;\n}\n\n.target-select {\n  background: var(--surface-2);\n  border: 1px solid var(--border-bright);\n  color: var(--text-primary);\n  font-family: var(--font-display);\n  font-size: 11px;\n  padding: 4px 8px;\n  outline: none;\n  cursor: pointer;\n  min-width: 180px;\n}\n\n.target-select:focus {\n  border-color: var(--valley);\n}\n\noptgroup {\n  background: var(--surface);\n  color: var(--text-dim);\n  font-family: var(--font-display);\n  font-size: 10px;\n}\n\noption {\n  background: var(--surface-2);\n  color: var(--text-primary);\n  font-family: var(--font-display);\n}\n\n/* ─── PLAYER CONTROLS ─── */\n.player-controls {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  flex-shrink: 0;\n}\n\n.ctrl-btn {\n  background: var(--surface-2);\n  border: 1px solid var(--border-bright);\n  color: var(--text-primary);\n  font-family: var(--font-display);\n  font-size: 11px;\n  font-weight: 500;\n  padding: 4px 10px;\n  cursor: pointer;\n  white-space: nowrap;\n  line-height: 1.4;\n  letter-spacing: 0.04em;\n  transition: background 0.1s, border-color 0.1s;\n}\n\n.ctrl-btn:hover:not(:disabled) {\n  background: var(--surface);\n  border-color: var(--text-dim);\n}\n\n.ctrl-btn:disabled {\n  opacity: 0.35;\n  cursor: not-allowed;\n}\n\n.ctrl-btn.play {\n  border-color: var(--valley);\n  color: var(--valley);\n}\n\n.ctrl-btn.play:hover:not(:disabled) {\n  background: rgba(56, 189, 248, 0.1);\n}\n\n.ctrl-step-display {\n  font-family: var(--font-display);\n  font-size: 11px;\n  color: var(--text-dim);\n  padding: 4px 8px;\n  border: 1px solid var(--border);\n  background: var(--bg);\n  white-space: nowrap;\n  min-width: 72px;\n  text-align: center;\n}\n\n/* ─── LOADING / ERROR ─── */\n.app-overlay {\n  position: fixed;\n  inset: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: var(--bg);\n  z-index: 100;\n}\n\n.overlay-message {\n  font-family: var(--font-display);\n  font-size: 13px;\n  letter-spacing: 0.1em;\n  color: var(--text-dim);\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n\n.pulse-dot {\n  width: 8px;\n  height: 8px;\n  border-radius: 50%;\n  background: var(--valley);\n  animation: pulse 1.2s ease-in-out infinite;\n}\n\n@keyframes pulse {\n  0%, 100% { opacity: 0.2; transform: scale(0.8); }\n  50% { opacity: 1; transform: scale(1); }\n}\n\n/* ─── MISC ─── */\n.episode-loading {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  padding: 12px 16px;\n  font-family: var(--font-display);\n  font-size: 11px;\n  color: var(--text-dim);\n  letter-spacing: 0.08em;\n}\n"],"names":[],"sourceRoot":""}