@import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap');

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
  --bg:        #080810;
  --surface:   #0d0d1a;
  --surface2:  #12122a;
  --border:    #1e1e40;
  --cyan:      #00f5ff;
  --magenta:   #ff00ff;
  --yellow:    #ffff00;
  --green:     #00ff88;
  --red:       #ff2255;
  --orange:    #ff8800;
  --text:      #e0e0ff;
  --muted:     #5555aa;
  --radius:    0px;
  --glow-c:    0 0 8px #00f5ff99, 0 0 20px #00f5ff33;
  --glow-m:    0 0 8px #ff00ff99, 0 0 20px #ff00ff33;
  --glow-g:    0 0 8px #00ff8899, 0 0 20px #00ff8833;
  --glow-r:    0 0 8px #ff225599, 0 0 20px #ff225533;
  --glow-y:    0 0 8px #ffff0099, 0 0 20px #ffff0033;
}

body {
  background: var(--bg);
  color: var(--text);
  font-family: 'Press Start 2P', monospace;
  font-size: 10px;
  min-height: 100vh;
  line-height: 1.7;
  /* CRT scanlines */
  background-image:
    repeating-linear-gradient(
      0deg,
      transparent,
      transparent 2px,
      rgba(0,0,0,0.18) 2px,
      rgba(0,0,0,0.18) 4px
    );
}

/* CRT vignette + flicker overlay */
body::before {
  content: '';
  position: fixed;
  inset: 0;
  background: radial-gradient(ellipse at center, transparent 60%, rgba(0,0,0,0.55) 100%);
  pointer-events: none;
  z-index: 9999;
}

/* ------------------------------------------------------------------ */
/* Price strip                                                          */
/* ------------------------------------------------------------------ */

.price-strip {
  width: 100%;
  background: #000;
  border-bottom: 2px solid var(--cyan);
  box-shadow: 0 2px 12px #00f5ff44;
  overflow: hidden;
  height: 32px;
  display: flex;
  align-items: center;
}

.price-strip-track {
  display: inline-flex;
  align-items: center;
  white-space: nowrap;
  animation: strip-scroll 60s linear infinite;
  will-change: transform;
}
.price-strip-track:hover { animation-play-state: paused; }

@keyframes strip-scroll {
  0%   { transform: translateX(0); }
  100% { transform: translateX(-50%); }
}

.strip-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 0 18px;
  border-right: 1px solid #1e1e40;
  height: 32px;
}

.strip-sym   { font-size: 8px; color: var(--cyan); letter-spacing: 1px; }
.strip-price { font-size: 9px; color: var(--text); font-variant-numeric: tabular-nums; }
.strip-chg   { font-size: 8px; font-variant-numeric: tabular-nums; }
.strip-chg.up   { color: var(--green); text-shadow: var(--glow-g); }
.strip-chg.down { color: var(--red);   text-shadow: var(--glow-r); }
.strip-chg.flat { color: var(--muted); }
.strip-loading  { font-size: 8px; color: var(--muted); padding: 0 16px; }

/* ------------------------------------------------------------------ */
/* App shell                                                            */
/* ------------------------------------------------------------------ */

.app {
  max-width: 1240px;
  margin: 0 auto;
  padding: 20px 20px 60px;
  image-rendering: pixelated;
}

/* ------------------------------------------------------------------ */
/* Header                                                              */
/* ------------------------------------------------------------------ */

header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 22px;
  gap: 12px;
  flex-wrap: wrap;
  border-bottom: 2px solid var(--magenta);
  padding-bottom: 14px;
  box-shadow: 0 2px 16px #ff00ff33;
}

header h1 {
  font-size: 18px;
  color: var(--cyan);
  text-shadow: var(--glow-c);
  letter-spacing: 2px;
  animation: title-flicker 8s infinite;
}

@keyframes title-flicker {
  0%,94%,96%,98%,100% { opacity: 1; }
  95%,97%,99%         { opacity: 0.85; }
}

.header-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }

/* Header title + candles */
.header-left {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.header-title-row {
  display: flex;
  align-items: center;
  gap: 10px;
}

.tagline {
  font-size: 7px;
  color: var(--muted);
  letter-spacing: 1px;
  padding-left: 2px;
  animation: tagline-flicker 12s infinite;
}

@keyframes tagline-flicker {
  0%,92%,94%,100% { opacity: 1; }
  93%             { opacity: 0.4; }
}

.header-cmc-link {
  display: inline-block;
  width: fit-content;
  margin-top: 2px;
  font-size: 7px;
  letter-spacing: 1px;
  color: var(--muted);
  text-decoration: none;
  border: 2px solid var(--border);
  padding: 3px 6px;
  transition: border-color 0.15s, color 0.15s;
}
.header-cmc-link:hover { border-color: var(--cyan); color: var(--cyan); text-shadow: var(--glow-c); }

/* Decorative pixel candles in header */
.header-candles {
  display: flex;
  align-items: flex-end;
  gap: 3px;
  height: 36px;
  padding-bottom: 2px;
}

.hc {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0;
}

.hc-wick {
  width: 2px;
  height: 6px;
  background: currentColor;
  opacity: 0.6;
}

.hc-body {
  width: 8px;
  height: 14px;
  background: currentColor;
}

.hc-tall .hc-body { height: 22px; }
.hc-tall .hc-wick { height: 8px; }

.hc-g { color: var(--green); }
.hc-r { color: var(--red); }

/* Live dot on 1M button */
.online-count {
  font-family: 'Press Start 2P', monospace;
  font-size: 7px;
  color: var(--green);
  text-shadow: 0 0 6px var(--green);
  white-space: nowrap;
  animation: live-blink 2s step-end infinite;
}

.live-dot {
  display: inline-block;
  width: 5px;
  height: 5px;
  background: var(--green);
  border-radius: 50%;
  margin-left: 3px;
  vertical-align: middle;
  animation: live-blink 1s step-end infinite;
  box-shadow: 0 0 4px var(--green);
}

@keyframes live-blink {
  0%,100% { opacity: 1; }
  50%      { opacity: 0; }
}

/* Candlestick chart canvas */
.chart-wrap.candle canvas {
  width: 100% !important;
  height: 100% !important;
}

/* Status bar */
.status-bar {
  padding: 10px 14px;
  font-size: 9px;
  margin-bottom: 16px;
  border: 2px solid;
  letter-spacing: 0.5px;
}
.status-bar.ok   { background: #001a0d; border-color: var(--green);   color: var(--green);   text-shadow: var(--glow-g); }
.status-bar.err  { background: #1a0008; border-color: var(--red);     color: var(--red);     text-shadow: var(--glow-r); }
.status-bar.info { background: #00001a; border-color: var(--cyan);    color: var(--cyan);    text-shadow: var(--glow-c); }
.hidden { display: none !important; }

/* ------------------------------------------------------------------ */
/* Pixel card                                                           */
/* ------------------------------------------------------------------ */

.card {
  background: var(--surface);
  border: 2px solid var(--border);
  padding: 16px;
  margin-bottom: 12px;
  position: relative;
  /* Pixel corner effect */
  clip-path: polygon(
    0 4px, 4px 4px, 4px 0,
    calc(100% - 4px) 0, calc(100% - 4px) 4px, 100% 4px,
    100% calc(100% - 4px), calc(100% - 4px) calc(100% - 4px), calc(100% - 4px) 100%,
    4px 100%, 4px calc(100% - 4px), 0 calc(100% - 4px)
  );
}

.card h2 {
  font-size: 9px;
  font-weight: 400;
  letter-spacing: 2px;
  color: var(--cyan);
  text-shadow: var(--glow-c);
  margin-bottom: 14px;
  text-transform: uppercase;
}

/* Dashboard grid */
.dashboard-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  margin-bottom: 12px;
  align-items: start;
}
@media (max-width: 860px) {
  .dashboard-grid { grid-template-columns: 1fr; }
}

/* ------------------------------------------------------------------ */
/* Buttons                                                              */
/* ------------------------------------------------------------------ */

.btn {
  padding: 9px 14px;
  border: 2px solid;
  font-family: 'Press Start 2P', monospace;
  font-size: 9px;
  font-weight: 400;
  cursor: pointer;
  transition: transform 0.08s, box-shadow 0.08s;
  letter-spacing: 0.5px;
  box-shadow: 3px 3px 0 rgba(0,0,0,0.8);
  background: var(--surface2);
}
.btn:active   { transform: translate(2px,2px); box-shadow: 1px 1px 0 rgba(0,0,0,0.8); }
.btn:disabled { opacity: 0.35; cursor: not-allowed; }

.btn-primary  { border-color: var(--cyan);    color: var(--cyan);    text-shadow: var(--glow-c); box-shadow: 3px 3px 0 #00f5ff44; }
.btn-primary:hover  { background: #001a2a; box-shadow: 4px 4px 0 #00f5ff44; }
.btn-secondary{ border-color: var(--muted);   color: var(--text); }
.btn-secondary:hover { border-color: var(--cyan); color: var(--cyan); }
.btn-danger   { border-color: var(--red);     color: var(--red);     text-shadow: var(--glow-r); box-shadow: 3px 3px 0 #ff225544; }
.btn-danger:hover   { background: #1a000a; }

.btn-row { display: flex; gap: 8px; margin-top: 8px; flex-wrap: wrap; }
.btn-sm  { padding: 6px 10px; font-size: 8px; }

/* ------------------------------------------------------------------ */
/* Auth modal                                                           */
/* ------------------------------------------------------------------ */

.modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.85);
  z-index: 1000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
}

.modal {
  background: var(--surface);
  border: 3px solid var(--cyan);
  box-shadow: 0 0 40px #00f5ff44, inset 0 0 40px rgba(0,245,255,0.03);
  padding: 28px;
  width: 100%;
  max-width: 420px;
  position: relative;
  clip-path: polygon(
    0 6px, 6px 6px, 6px 0,
    calc(100% - 6px) 0, calc(100% - 6px) 6px, 100% 6px,
    100% calc(100% - 6px), calc(100% - 6px) calc(100% - 6px), calc(100% - 6px) 100%,
    6px 100%, 6px calc(100% - 6px), 0 calc(100% - 6px)
  );
}

.modal-close {
  position: absolute;
  top: 10px; right: 10px;
  background: transparent;
  border: 2px solid var(--muted);
  color: var(--muted);
  font-family: 'Press Start 2P', monospace;
  font-size: 8px;
  cursor: pointer;
  padding: 4px 7px;
  transition: color 0.15s, border-color 0.15s;
}
.modal-close:hover { color: var(--red); border-color: var(--red); }

.modal-title {
  font-size: 16px;
  color: var(--cyan);
  text-shadow: var(--glow-c);
  margin-bottom: 20px;
  text-transform: uppercase;
  letter-spacing: 3px;
}

.auth-tabs {
  display: flex;
  border-bottom: 2px solid var(--border);
  margin-bottom: 18px;
}
.auth-tab {
  flex: 1;
  padding: 9px;
  background: transparent;
  border: none;
  border-bottom: 2px solid transparent;
  color: var(--muted);
  font-family: 'Press Start 2P', monospace;
  font-size: 8px;
  cursor: pointer;
  transition: color 0.15s, border-color 0.15s;
  letter-spacing: 1px;
  margin-bottom: -2px;
}
.auth-tab.active { color: var(--cyan); border-bottom-color: var(--cyan); text-shadow: var(--glow-c); }

.field-group { margin-bottom: 14px; }
.field-group label {
  display: block;
  font-size: 8px;
  color: var(--muted);
  margin-bottom: 6px;
  letter-spacing: 1px;
  text-transform: uppercase;
}
.field-group input {
  width: 100%;
  background: #000;
  border: 2px solid var(--border);
  color: var(--cyan);
  padding: 9px 10px;
  font-family: 'Press Start 2P', monospace;
  font-size: 10px;
  outline: none;
  transition: border-color 0.15s, box-shadow 0.15s;
  caret-color: var(--cyan);
}
.field-group input:focus {
  border-color: var(--cyan);
  box-shadow: 0 0 10px #00f5ff33;
}

.auth-error {
  font-size: 8px;
  color: var(--red);
  border: 2px solid var(--red);
  padding: 8px 10px;
  margin-bottom: 10px;
  background: #1a0008;
  line-height: 1.8;
}

.auth-submit { width: 100%; padding: 12px; font-size: 10px; margin-top: 4px; }

.auth-switch {
  text-align: center;
  font-size: 8px;
  color: var(--muted);
  margin-top: 14px;
  line-height: 2;
}
.auth-switch a { color: var(--magenta); text-decoration: none; text-shadow: var(--glow-m); }
.auth-switch a:hover { text-decoration: underline; }

/* Header auth */
.header-auth { display: flex; align-items: center; gap: 8px; }
.header-user { display: flex; align-items: center; gap: 8px; }
.header-email { font-size: 8px; color: var(--muted); max-width: 130px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.header-pro-badge {
  font-size: 7px;
  padding: 3px 7px;
  background: transparent;
  border: 2px solid var(--magenta);
  color: var(--magenta);
  text-shadow: var(--glow-m);
  box-shadow: var(--glow-m);
  letter-spacing: 1px;
  animation: badge-pulse 2s ease-in-out infinite;
}
@keyframes badge-pulse {
  0%,100% { box-shadow: var(--glow-m); }
  50%      { box-shadow: 0 0 16px #ff00ffcc, 0 0 40px #ff00ff44; }
}

/* ------------------------------------------------------------------ */
/* Device slots                                                         */
/* ------------------------------------------------------------------ */

.card-devices { display: flex; flex-direction: column; }

.devices-header { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.devices-header h2 { margin-bottom: 0; }

.premium-badge {
  font-size: 7px;
  padding: 3px 6px;
  border: 2px solid var(--magenta);
  color: var(--magenta);
  text-shadow: var(--glow-m);
  letter-spacing: 1px;
}

.device-slots { display: flex; flex-direction: column; gap: 10px; }

/* Slot */
.device-slot {
  background: #000;
  border: 2px solid var(--border);
  padding: 10px 12px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  position: relative;
  transition: border-color 0.3s;
}
.device-slot:hover { border-color: var(--muted); }

.slot-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}

.slot-label {
  font-size: 9px;
  letter-spacing: 2px;
  text-transform: uppercase;
}

.slot-dot {
  width: 8px; height: 8px;
  background: var(--muted);
  flex-shrink: 0;
  transition: background 0.3s;
}
.slot-dot.online {
  background: var(--green);
  box-shadow: var(--glow-g);
  animation: dot-blink 1s step-end infinite;
}
@keyframes dot-blink {
  0%,100% { opacity: 1; }
  50%      { opacity: 0.3; }
}

.slot-toy-name {
  font-size: 8px;
  color: var(--text);
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  letter-spacing: 0.5px;
}

.slot-connect-btn {
  padding: 5px 10px;
  font-family: 'Press Start 2P', monospace;
  font-size: 8px;
  border: 2px solid var(--cyan);
  color: var(--cyan);
  background: transparent;
  cursor: pointer;
  text-shadow: var(--glow-c);
  box-shadow: 2px 2px 0 #00f5ff33;
  transition: background 0.15s, transform 0.08s;
  white-space: nowrap;
  flex-shrink: 0;
}
.slot-connect-btn:hover  { background: #001a2a; }
.slot-connect-btn:active { transform: translate(1px,1px); }
.slot-connect-btn.connected {
  border-color: var(--red);
  color: var(--red);
  text-shadow: var(--glow-r);
  box-shadow: 2px 2px 0 #ff225533;
}

/* Mini live chart inside slot */
.slot-live-chart-wrap {
  height: 52px;
  overflow: hidden;
  background: #000;
  border: 1px solid var(--border);
  transition: border-color 0.5s, box-shadow 0.5s;
}
.slot-live-chart-wrap.up     { border-color: var(--green);   box-shadow: 0 0 8px #00ff8833; }
.slot-live-chart-wrap.spike  { border-color: var(--magenta); box-shadow: 0 0 12px #ff00ff44; }
.slot-live-chart-wrap.linger { border-color: #00aa55; }
.slot-live-chart-wrap.down   { border-color: var(--red);     box-shadow: 0 0 8px #ff225533; }
.slot-live-chart-wrap canvas { width: 100% !important; height: 100% !important; }

/* Slot market inputs */
.slot-mkt-row {
  display: flex;
  align-items: center;
  gap: 5px;
  flex-wrap: wrap;
}
.slot-mkt-row select,
.slot-mkt-row input[type="text"],
.slot-mkt-row input[type="number"] {
  background: #000;
  border: 2px solid var(--border);
  color: var(--cyan);
  padding: 5px 7px;
  font-family: 'Press Start 2P', monospace;
  font-size: 8px;
  outline: none;
  transition: border-color 0.15s;
}
.slot-mkt-row select  { width: 68px; }
.slot-mkt-row input[type="text"]   { width: 60px; }
.slot-mkt-row input[type="number"] { width: 48px; }
.slot-mkt-row select:focus,
.slot-mkt-row input:focus { border-color: var(--cyan); }

.slot-mkt-btn {
  padding: 5px 9px;
  font-family: 'Press Start 2P', monospace;
  font-size: 8px;
  border: 2px solid;
  background: transparent;
  cursor: pointer;
  transition: background 0.1s, transform 0.08s;
  box-shadow: 2px 2px 0 rgba(0,0,0,0.6);
}
.slot-mkt-btn:active { transform: translate(1px,1px); box-shadow: 1px 1px 0 rgba(0,0,0,0.6); }
.slot-mkt-btn:disabled { opacity: 0.35; cursor: not-allowed; }
.slot-mkt-btn.start { border-color: var(--green); color: var(--green); text-shadow: var(--glow-g); }
.slot-mkt-btn.start:hover { background: #001a0d; }
.slot-mkt-btn.stop  { border-color: var(--red);   color: var(--red);   text-shadow: var(--glow-r); }
.slot-mkt-btn.stop:hover  { background: #1a0008; }

/* Slot live ticker */
.slot-ticker {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 6px;
  font-size: 9px;
  padding-top: 6px;
  border-top: 1px solid var(--border);
  flex-wrap: wrap;
}
.slot-ticker-sym   { color: var(--muted); font-size: 8px; letter-spacing: 1px; }
.slot-ticker-price { font-variant-numeric: tabular-nums; color: var(--text); }
.slot-ticker-chg   { font-size: 8px; font-variant-numeric: tabular-nums; }
.slot-ticker-chg.up   { color: var(--green);   text-shadow: var(--glow-g); }
.slot-ticker-chg.down { color: var(--red);     text-shadow: var(--glow-r); }
.slot-ticker-chg.flat { color: var(--muted); }

.slot-mode-badge {
  font-size: 7px;
  letter-spacing: 1px;
  padding: 2px 6px;
  border: 1px solid var(--muted);
  color: var(--muted);
  text-transform: uppercase;
}
.slot-mode-badge.up     { border-color: var(--green);   color: var(--green);   text-shadow: var(--glow-g); }
.slot-mode-badge.spike  { border-color: var(--magenta); color: var(--magenta); text-shadow: var(--glow-m); animation: badge-glow-spike 0.6s infinite; }
.slot-mode-badge.linger { border-color: #00aa55; color: #00ffaa; }
.slot-mode-badge.down   { border-color: var(--red);     color: var(--red);     text-shadow: var(--glow-r); }
@keyframes badge-glow-spike {
  0%,100% { box-shadow: none; }
  50%      { box-shadow: 0 0 10px #ff00ffaa; }
}

/* Segmented health bar */
.slot-str-bar-bg {
  height: 10px;
  background: #000;
  border: 2px solid var(--border);
  overflow: hidden;
  margin-top: 2px;
  position: relative;
}
.slot-str-bar-fill {
  height: 100%;
  background: var(--cyan);
  box-shadow: var(--glow-c);
  width: 0%;
  transition: width 0.35s steps(20), background 0.35s;
  /* Segment gaps */
  background-image: repeating-linear-gradient(
    90deg,
    transparent,
    transparent calc(5% - 2px),
    #000 calc(5% - 2px),
    #000 5%
  );
  background-size: 5% 100%;
  background-color: var(--cyan);
}
.slot-str-bar-fill.high {
  background-color: var(--magenta);
  box-shadow: var(--glow-m);
  background-image: repeating-linear-gradient(
    90deg,
    transparent,
    transparent calc(5% - 2px),
    #000 calc(5% - 2px),
    #000 5%
  );
}

/* Upgrade prompt */
.upgrade-prompt {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  text-align: center;
  padding: 14px;
  border: 2px dashed var(--muted);
  margin-top: 8px;
}
.upgrade-icon { font-size: 20px; }
.upgrade-text { font-size: 8px; color: var(--muted); line-height: 2; }
.upgrade-text strong { color: var(--cyan); text-shadow: var(--glow-c); }

/* ------------------------------------------------------------------ */
/* Connect bar                                                          */
/* ------------------------------------------------------------------ */

.connect-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  padding: 12px 16px;
  border-color: var(--muted);
}

/* ------------------------------------------------------------------ */
/* Controls                                                             */
/* ------------------------------------------------------------------ */

.controls-card { padding: 0; overflow: hidden; border-color: var(--muted); }

.ctrl-tabs {
  display: flex;
  border-bottom: 2px solid var(--border);
  background: #000;
}
.ctrl-tab {
  flex: 1;
  padding: 10px 4px;
  background: transparent;
  border: none;
  border-bottom: 2px solid transparent;
  color: var(--muted);
  font-family: 'Press Start 2P', monospace;
  font-size: 8px;
  cursor: pointer;
  transition: color 0.15s, border-color 0.15s;
  letter-spacing: 0.5px;
  margin-bottom: -2px;
}
.ctrl-tab:hover { color: var(--text); }
.ctrl-tab.active { color: var(--cyan); border-bottom-color: var(--cyan); text-shadow: var(--glow-c); }

.ctrl-panel { padding: 14px 16px; }

.control-row {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 12px;
}
.control-row.compact label { min-width: 100px; font-size: 8px; color: var(--muted); letter-spacing: 0.5px; }
.control-row label { min-width: 120px; font-size: 8px; color: var(--muted); }

.control-row input[type="range"] {
  flex: 1;
  accent-color: var(--cyan);
  height: 4px;
  cursor: pointer;
}

.control-row input[type="number"],
.control-row select {
  width: 80px;
  background: #000;
  border: 2px solid var(--border);
  color: var(--cyan);
  padding: 6px 8px;
  font-family: 'Press Start 2P', monospace;
  font-size: 9px;
  outline: none;
}
.control-row input:focus,
.control-row select:focus { border-color: var(--cyan); }

.device-select {
  background: #000;
  border: 2px solid var(--border);
  color: var(--cyan);
  padding: 6px 8px;
  font-family: 'Press Start 2P', monospace;
  font-size: 8px;
  min-width: 90px;
  outline: none;
}

/* Presets */
.preset-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 6px;
  margin-top: 4px;
}
.btn-preset {
  padding: 9px 4px;
  background: #000;
  border: 2px solid var(--border);
  color: var(--text);
  font-family: 'Press Start 2P', monospace;
  font-size: 8px;
  cursor: pointer;
  text-transform: capitalize;
  transition: border-color 0.15s, color 0.15s;
  letter-spacing: 0.3px;
}
.btn-preset:hover  { border-color: var(--cyan); color: var(--cyan); }
.btn-preset:active { transform: translate(1px,1px); }

/* Pattern grid */
.pattern-grid {
  display: flex;
  gap: 2px;
  align-items: flex-end;
  height: 90px;
  background: #000;
  border: 2px solid var(--border);
  padding: 6px;
  margin-bottom: 12px;
  overflow-x: auto;
}
.pattern-col { display: flex; flex-direction: column-reverse; gap: 1px; cursor: pointer; flex-shrink: 0; width: 14px; }
.pattern-cell { width: 14px; height: 5px; background: var(--border); }
.pattern-cell.active { background: var(--cyan); box-shadow: 0 0 3px #00f5ff88; }

.pattern-opts { display: flex; gap: 14px; flex-wrap: wrap; }

/* ------------------------------------------------------------------ */
/* Chart card                                                           */
/* ------------------------------------------------------------------ */

.card-charts { display: flex; flex-direction: column; border-color: var(--muted); }

.chart-header-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 12px;
}
.chart-header-row h2 { margin-bottom: 0; }
.chart-updated { font-size: 7px; color: var(--muted); letter-spacing: 0.5px; }

/* Ticker pills */
.chart-ticker-row { display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: 10px; }
.ticker-pill {
  padding: 4px 9px;
  background: #000;
  border: 2px solid var(--border);
  color: var(--muted);
  font-family: 'Press Start 2P', monospace;
  font-size: 8px;
  cursor: pointer;
  transition: border-color 0.15s, color 0.15s;
  letter-spacing: 0.5px;
}
.ticker-pill:hover  { border-color: var(--cyan); color: var(--cyan); }
.ticker-pill.active { border-color: var(--cyan); color: var(--cyan); text-shadow: var(--glow-c); background: #001a2a; }

/* Custom input row */
.chart-custom-row {
  display: flex;
  gap: 6px;
  align-items: center;
  margin-bottom: 10px;
  flex-wrap: wrap;
}
.chart-custom-row select,
.chart-custom-row input[type="text"] {
  background: #000;
  border: 2px solid var(--border);
  color: var(--cyan);
  padding: 6px 8px;
  font-family: 'Press Start 2P', monospace;
  font-size: 9px;
  outline: none;
}
.chart-custom-row select { width: 80px; }
.chart-custom-row input[type="text"] { flex: 1; min-width: 70px; }
.chart-custom-row select:focus,
.chart-custom-row input:focus { border-color: var(--cyan); }

/* Range buttons */
.chart-range-row { display: flex; gap: 4px; margin-bottom: 12px; }
.btn-range {
  padding: 5px 11px;
  background: #000;
  border: 2px solid var(--border);
  color: var(--muted);
  font-family: 'Press Start 2P', monospace;
  font-size: 8px;
  cursor: pointer;
  transition: border-color 0.15s, color 0.15s;
  letter-spacing: 0.5px;
}
.btn-range:hover  { border-color: var(--cyan); color: var(--cyan); }
.btn-range.active { border-color: var(--cyan); color: var(--cyan); text-shadow: var(--glow-c); background: #001a2a; }

/* Chart price header */
.chart-header { display: flex; align-items: baseline; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
.ch-symbol { font-size: 10px; color: var(--muted); letter-spacing: 1px; }
.ch-price  { font-size: 18px; color: var(--text); font-variant-numeric: tabular-nums; }
.ch-change { font-size: 11px; }
.ch-change.up   { color: var(--green);   text-shadow: var(--glow-g); }
.ch-change.down { color: var(--red);     text-shadow: var(--glow-r); }

.ch-cmc-link {
  margin-left: auto;
  font-size: 8px;
  letter-spacing: 0.5px;
  color: var(--muted);
  text-decoration: none;
  border: 2px solid var(--border);
  padding: 4px 8px;
  transition: border-color 0.15s, color 0.15s;
}
.ch-cmc-link:hover { border-color: var(--cyan); color: var(--cyan); text-shadow: var(--glow-c); }
.ch-change.flat { color: var(--muted); }

/* Canvas */
.chart-wrap { position: relative; height: 240px; flex: 1; }
.chart-wrap canvas { width: 100% !important; height: 100% !important; }
.chart-placeholder {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--muted);
  font-size: 9px;
  pointer-events: none;
  letter-spacing: 1px;
}

/* ------------------------------------------------------------------ */
/* EQ Visualizer                                                        */
/* ------------------------------------------------------------------ */

.eq-section {
  padding: 0;
  overflow: hidden;
  border-color: var(--cyan);
  box-shadow: 0 0 20px #00f5ff22;
}

.eq-hud {
  display: flex;
  align-items: center;
  gap: 0;
  border-bottom: 2px solid var(--border);
  background: #000;
  flex-wrap: wrap;
}

.hud-block {
  display: flex;
  flex-direction: column;
  gap: 3px;
  padding: 8px 14px;
  border-right: 1px solid var(--border);
}

.hud-block.hud-actions {
  flex-direction: row;
  align-items: center;
  gap: 6px;
  border-right: none;
  margin-left: auto;
  padding: 8px 12px;
}

.hud-label {
  font-size: 7px;
  color: var(--muted);
  letter-spacing: 1px;
  text-transform: uppercase;
}

.hud-val {
  font-size: 13px;
  font-variant-numeric: tabular-nums;
  letter-spacing: 1px;
}

.hud-score  { color: var(--yellow);  text-shadow: var(--glow-y); }
.hud-hi     { color: var(--magenta); text-shadow: var(--glow-m); }
.hud-streak { color: var(--cyan);    text-shadow: var(--glow-c); }
.hud-spike  { color: var(--green);   text-shadow: var(--glow-g); }

.eq-canvas-wrap {
  width: 100%;
  height: 120px;
  background: #000;
  position: relative;
}

.eq-canvas-wrap canvas {
  width: 100% !important;
  height: 100% !important;
  display: block;
}

/* ------------------------------------------------------------------ */
/* Leaderboard modal                                                    */
/* ------------------------------------------------------------------ */

.modal-wide { max-width: 620px; }

.lb-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 8px;
  letter-spacing: 0.5px;
}

.lb-table th {
  color: var(--muted);
  text-align: left;
  padding: 6px 8px;
  border-bottom: 2px solid var(--border);
  font-weight: 400;
  text-transform: uppercase;
}

.lb-table td {
  padding: 7px 8px;
  border-bottom: 1px solid var(--border);
  color: var(--text);
  font-variant-numeric: tabular-nums;
}

.lb-table tr:hover td { background: var(--surface2); }

.lb-rank-1 td { color: var(--yellow); text-shadow: var(--glow-y); }
.lb-rank-2 td { color: var(--cyan);   text-shadow: var(--glow-c); }
.lb-rank-3 td { color: var(--magenta);text-shadow: var(--glow-m); }

.lb-ticker-pill {
  display: inline-block;
  font-size: 7px;
  padding: 1px 5px;
  border: 1px solid var(--border);
  color: var(--muted);
  margin: 1px;
}

/* ------------------------------------------------------------------ */
/* Share modal                                                          */
/* ------------------------------------------------------------------ */

.share-url-wrap {
  display: flex;
  gap: 8px;
  margin-bottom: 16px;
}

.share-url-wrap input {
  flex: 1;
  background: #000;
  border: 2px solid var(--border);
  color: var(--cyan);
  padding: 8px 10px;
  font-family: 'Press Start 2P', monospace;
  font-size: 8px;
  outline: none;
  overflow: hidden;
  text-overflow: ellipsis;
}

.share-stats {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
}

.share-stat {
  background: #000;
  border: 1px solid var(--border);
  padding: 8px 10px;
}

.share-stat-label { font-size: 7px; color: var(--muted); margin-bottom: 4px; letter-spacing: 1px; }
.share-stat-val   { font-size: 12px; color: var(--cyan); text-shadow: var(--glow-c); }

/* ------------------------------------------------------------------ */
/* Portfolio mode toggle in slots                                       */
/* ------------------------------------------------------------------ */

.slot-port-toggle {
  padding: 4px 7px;
  font-family: 'Press Start 2P', monospace;
  font-size: 7px;
  border: 2px solid var(--muted);
  color: var(--muted);
  background: transparent;
  cursor: pointer;
  transition: border-color 0.15s, color 0.15s;
  letter-spacing: 0.5px;
  white-space: nowrap;
}
.slot-port-toggle:hover  { border-color: var(--yellow); color: var(--yellow); }
.slot-port-toggle.active { border-color: var(--yellow); color: var(--yellow); text-shadow: var(--glow-y); background: #1a1a00; }

.slot-portfolio-inputs {
  display: flex;
  gap: 4px;
  flex-wrap: wrap;
  margin-top: 4px;
  padding-top: 6px;
  border-top: 1px solid var(--border);
}

.slot-portfolio-inputs input {
  width: 56px;
  background: #000;
  border: 2px solid var(--border);
  color: var(--yellow);
  padding: 4px 6px;
  font-family: 'Press Start 2P', monospace;
  font-size: 8px;
  outline: none;
  text-transform: uppercase;
}
.slot-portfolio-inputs input:focus { border-color: var(--yellow); }

.slot-portfolio-inputs label {
  font-size: 7px;
  color: var(--muted);
  align-self: center;
  letter-spacing: 0.5px;
}

/* ------------------------------------------------------------------ */
/* Misc                                                                 */
/* ------------------------------------------------------------------ */

.muted { color: var(--muted); }
.small { font-size: 8px; margin-bottom: 8px; line-height: 2; }

/* Blinking cursor on muted labels */
.blink::after {
  content: '_';
  animation: cursor-blink 1s step-end infinite;
}
@keyframes cursor-blink {
  0%,100% { opacity: 1; }
  50%      { opacity: 0; }
}

/* Connect bar layout */
.connect-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
}
.connect-left  { display: flex; align-items: center; gap: 10px; }
.connect-right { display: flex; align-items: center; gap: 10px; }
.connect-hint  { margin: 0; font-size: 8px; color: var(--muted); letter-spacing: 0.3px; }

.toy-dot-wrap {
  width: 28px; height: 28px;
  background: #000;
  border: 2px solid var(--border);
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.toy-dot {
  width: 10px; height: 10px;
  background: var(--muted);
  transition: background 0.3s;
}
.toy-dot.online {
  background: var(--green);
  box-shadow: var(--glow-g);
  animation: dot-blink 1s step-end infinite;
}
.toy-name-display { font-size: 9px; font-weight: 400; letter-spacing: 0.5px; }
.toy-meta-row { display: flex; gap: 8px; align-items: center; margin-top: 4px; }
.toy-status { font-size: 8px; color: var(--muted); }
.toy-status.online { color: var(--green); text-shadow: var(--glow-g); }
.toy-battery { font-size: 8px; color: var(--muted); }
.btn-connect.connected { border-color: var(--red); color: var(--red); text-shadow: var(--glow-r); }
