/* ============================================================
   AInstimmig — Mika Design System
   Akzent: Aurora (Cyan → Mint)
   Tokens aus _design/mika/preview.html
   ============================================================ */

:root {
  --base: #1a1d26;
  --base-warm: #232736;
  --panel: #232630;
  --raised: #2c303c;
  --inset: #14161d;

  --text-1: #eef1f6;
  --text-2: #b4bac5;
  --text-3: #7a8191;
  --text-4: #4d5260;

  --runner-head: #ffffff;
  --drift-color: 255,255,255;
  --drift-alpha: 0.18;
  --drift-spacing: 520;
  --halo-color: 255,255,255;
  --glass-bg: rgba(35, 38, 48, 0.42);
  --glass-bg-strong: rgba(20, 22, 29, 0.72);

  /* Signal-Paare */
  --aurora-a: #00e4ff;  --aurora-b: #3effc7;
  --ember-a:  #ff7a1a;  --ember-b:  #ffd166;
  --flux-a:   #ff4fa3;  --flux-b:   #b76bff;
  --moss-a:   #4ade80;  --moss-b:   #e3f26b;
  --halo-a:   #7aa2ff;  --halo-b:   #a8ecff;

  --hairline: rgba(255,255,255,0.06);
  --hairline-strong: rgba(255,255,255,0.10);
  --divider: #1a1d24;
  --danger: #ef6f6c;

  /* Default-Akzent: Aurora */
  --accent: var(--aurora-a);
  --accent-2: var(--aurora-b);
  --accent-rgb: 0, 228, 255;
  --accent-2-rgb: 62, 255, 199;

  --font-ui: "JetBrains Mono", "Cascadia Code", ui-monospace, SF Mono, Menlo, monospace;
  --font-display: "JetBrains Mono", "Cascadia Code", ui-monospace, monospace;
  --font-mono: "JetBrains Mono", "Cascadia Code", ui-monospace, SF Mono, Menlo, monospace;

  --radius: 0;
  --grid-alpha: 0.065;

  /* Chamfer-Polygon inline, nicht via var() — Chrome loest das in polygon() nicht zuverlaessig auf */
  --chamfer-2: polygon(14px 0, 100% 0, 100% 100%, 0 100%, 0 24px);
  --chamfer-sm: polygon(8px 0, 100% 0, 100% 100%, 0 100%, 0 14px);

  --max: 780px;
}

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

html, body {
  background: var(--base);
  color: var(--text-1);
  font-family: var(--font-ui);
  font-size: 15px;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  font-feature-settings: "ss01", "cv01";
  min-height: 100%;
}

/* Atmosphaere: radialer Gradient + Noise, nie flaches Schwarz */
body {
  background:
    radial-gradient(ellipse 80% 60% at 70% -10%, var(--base-warm) 0%, transparent 55%),
    radial-gradient(ellipse 60% 50% at 10% 110%, rgba(var(--accent-rgb), 0.07) 0%, transparent 60%),
    var(--base);
  background-attachment: fixed;
  position: relative;
}
body::before {
  content: "";
  position: fixed; inset: 0;
  pointer-events: none;
  opacity: 0.03;
  mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='140' height='140'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
  z-index: 0;
}
body::after {
  content: "";
  position: fixed; inset: 0;
  pointer-events: none; z-index: 0;
  background-image: radial-gradient(circle, rgba(var(--drift-color), var(--grid-alpha)) 0.45px, transparent 0.85px);
  background-size: 6px 6px;
}

/* Kometen-Canvas */
.drift {
  position: fixed; inset: 0;
  pointer-events: none; z-index: 0;
  width: 100vw; height: 100vh;
}
.drift canvas { width: 100%; height: 100%; display: block; }

/* Alles oberhalb des Hintergrunds */
.topbar, main, .wrap, .dash-wrap, .composer, .admin-page,
.chat, .dash-page > *, body > header, body > .stage {
  position: relative; z-index: 1;
}

a { color: var(--accent); text-decoration: none; }
a:hover { color: var(--accent-2); }
button { font: inherit; cursor: pointer; color: inherit; }
.hidden { display: none !important; }

/* ============================================================
   Runner-SVG (statische Outline + animierte Trails)
   ============================================================ */

.runner-svg {
  position: absolute; inset: 0; width: 100%; height: 100%;
  pointer-events: none; z-index: -1; overflow: visible;
}
.runner-svg path { fill: none; stroke-linejoin: round; stroke-linecap: round; }
.runner-outline-glow { stroke: rgba(var(--col-rgb, 255,255,255), 0.10); stroke-width: 3; filter: blur(2px); }
.runner-outline      { stroke: rgba(var(--col-rgb, 255,255,255), 0.10); stroke-width: 0.8; }
.runner-trail-halo   { stroke: rgba(var(--col-rgb, 255,255,255), 0.10); stroke-width: 5; filter: blur(4px); }
.runner-trail-4      { stroke: rgba(var(--col-rgb, 255,255,255), 0.12); stroke-width: 2; filter: blur(1.5px); }
.runner-trail-3      { stroke: rgba(var(--col-rgb, 255,255,255), 0.20); stroke-width: 1.1; }
.runner-trail-2      { stroke: rgba(var(--col-rgb, 255,255,255), 0.30); stroke-width: 1.3; }
.runner-trail-1      { stroke: rgba(var(--col-rgb, 255,255,255), 0.45); stroke-width: 1.5; }
.runner-trail-0      { stroke: rgba(var(--col-rgb, 255,255,255), 0.62); stroke-width: 1.7; filter: blur(0.4px); }
.runner-head-burst   { stroke: rgba(var(--col-rgb, 255,255,255), 0.35); stroke-width: 10; filter: blur(5px); }

/* ============================================================
   Topbar
   ============================================================ */

.topbar {
  display: flex; align-items: center; justify-content: space-between;
  padding: env(safe-area-inset-top, 0) 20px 0 20px;
  height: calc(56px + env(safe-area-inset-top, 0));
  background: linear-gradient(180deg, rgba(26,29,38,.96), rgba(26,29,38,.72));
  backdrop-filter: blur(12px) saturate(1.3);
  position: sticky; top: 0; z-index: 10;
  border-bottom: 1px solid var(--hairline);
}
.brand {
  font-weight: 600; letter-spacing: .02em;
  display: flex; align-items: center; gap: 10px;
  font-size: 14px;
}
.brand small { opacity: .6; font-weight: 400; }
.dot {
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--accent);
  box-shadow: 0 0 12px rgba(var(--accent-rgb), 0.8);
  animation: breathe 3s ease-in-out infinite alternate;
}
@keyframes breathe {
  from { opacity: 0.7; box-shadow: 0 0 8px rgba(var(--accent-rgb), 0.5); }
  to   { opacity: 1;   box-shadow: 0 0 16px rgba(var(--accent-rgb), 0.9); }
}

.dash-btn {
  position: relative;
  display: inline-flex; align-items: center; gap: 6px;
  padding: 7px 14px;
  color: var(--text-1);
  background: var(--glass-bg);
  backdrop-filter: blur(20px) saturate(1.4);
  -webkit-backdrop-filter: blur(20px) saturate(1.4);
  border: 1px solid transparent;
  font-size: 13px; font-weight: 500;
  isolation: isolate;
  clip-path: var(--chamfer-sm);
  transition: transform 200ms cubic-bezier(0.2,0.8,0.2,1);
  --col-rgb: var(--accent-rgb);
}
.dash-btn:hover { transform: translateY(-1px); }

/* ============================================================
   Chat-Seite
   ============================================================ */

.chat-page { min-height: 100vh; min-height: 100dvh; display: flex; flex-direction: column; }
.chat {
  flex: 1;
  display: flex; flex-direction: column;
  padding: 20px 20px 0;
  max-width: var(--max);
  margin: 0 auto;
  width: 100%;
}

.onboard { padding: 20px 4px 140px; }
.onboard h1 {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: clamp(30px, 7vw, 44px);
  line-height: 1.1; letter-spacing: -0.02em;
  margin: 16px 0 20px;
}
.onboard h1 em {
  font-style: normal;
  color: var(--accent);
  font-weight: 500;
  text-shadow: 0 0 24px rgba(var(--accent-rgb), 0.45);
}
.onboard .lead {
  color: var(--text-2);
  font-size: 16px; line-height: 1.6;
  max-width: 40ch;
  margin-bottom: 10px;
}
.onboard .lead + .lead { margin-top: 18px; }

.field { display: block; margin-top: 32px; }
.field span {
  display: block;
  color: var(--text-3); font-size: 12px;
  letter-spacing: 0.06em; text-transform: uppercase;
  margin-bottom: 8px;
}
.field input {
  width: 100%;
  padding: 14px 16px;
  border: 1px solid transparent;
  background: var(--glass-bg);
  backdrop-filter: blur(14px) saturate(1.3);
  color: var(--text-1);
  font: inherit; font-size: 15px;
  isolation: isolate;
  clip-path: var(--chamfer-sm);
  --col-rgb: var(--drift-color);
}
.field input:focus {
  outline: none;
  background: var(--glass-bg-strong);
}

.cta {
  position: relative;
  margin-top: 24px;
  width: 100%;
  padding: 15px 20px;
  border: 1px solid transparent;
  background: var(--glass-bg);
  backdrop-filter: blur(20px) saturate(1.55) brightness(1.04);
  -webkit-backdrop-filter: blur(20px) saturate(1.55) brightness(1.04);
  color: var(--text-1);
  font: inherit; font-weight: 600; font-size: 15px;
  letter-spacing: 0.02em;
  isolation: isolate;
  clip-path: var(--chamfer-2);
  transition: transform 200ms cubic-bezier(0.2,0.8,0.2,1);
  --col-rgb: var(--accent-rgb);
  filter: drop-shadow(0 0 16px rgba(var(--accent-rgb), 0.35));
}
.cta:hover { transform: translateY(-1px); }
.cta:active { transform: scale(0.99); }

.onboard .note {
  margin-top: 22px;
  font-size: 12px; color: var(--text-4);
  line-height: 1.6;
  max-width: 60ch;
}

/* Thread */
.thread {
  list-style: none; margin: 0;
  padding: 8px 0 140px;
  display: flex; flex-direction: column;
  gap: 14px;
}
.msg {
  position: relative;
  max-width: 90%;
  padding: 12px 16px;
  white-space: pre-wrap;
  word-wrap: break-word;
  border: 1px solid transparent;
  isolation: isolate;
  clip-path: var(--chamfer-sm);
  font-size: 15px; line-height: 1.5;
}
.msg.user {
  align-self: flex-end;
  background: rgba(var(--accent-rgb), 0.14);
  color: var(--text-1);
  --col-rgb: var(--accent-rgb);
}
.msg.ai {
  align-self: flex-start;
  background: var(--glass-bg);
  backdrop-filter: blur(14px) saturate(1.3);
  --col-rgb: var(--drift-color);
}
.msg.err {
  align-self: center;
  background: rgba(239,111,108,.10);
  color: var(--danger);
  --col-rgb: 239, 111, 108;
}
.msg.typing {
  align-self: flex-start;
  color: var(--text-3);
  font-style: italic;
  background: transparent;
  border: none;
  clip-path: none;
}

/* Composer */
.composer {
  position: sticky; bottom: 0;
  display: flex; gap: 10px;
  padding: 12px 0 calc(14px + env(safe-area-inset-bottom, 0));
  background: linear-gradient(0deg, var(--base) 60%, transparent);
  max-width: var(--max); margin: 0 auto; width: 100%;
  z-index: 5;
}
.composer textarea {
  flex: 1; resize: none;
  padding: 14px 16px;
  border: 1px solid transparent;
  background: var(--glass-bg);
  backdrop-filter: blur(14px) saturate(1.3);
  color: var(--text-1);
  font: inherit; font-size: 15px;
  max-height: 40vh;
  isolation: isolate;
  clip-path: var(--chamfer-sm);
  --col-rgb: var(--drift-color);
}
.composer textarea:focus {
  outline: none;
  background: var(--glass-bg-strong);
}
.composer button {
  position: relative;
  width: 48px; height: 48px;
  border: 1px solid transparent;
  background: var(--glass-bg);
  backdrop-filter: blur(20px) saturate(1.55);
  color: var(--accent);
  display: flex; align-items: center; justify-content: center;
  align-self: flex-end;
  isolation: isolate;
  clip-path: var(--chamfer-sm);
  transition: transform 150ms, color 150ms;
  --col-rgb: var(--accent-rgb);
  filter: drop-shadow(0 0 10px rgba(var(--accent-rgb), 0.3));
}
.composer button:hover { transform: translateY(-1px); color: var(--text-1); }
.composer button:disabled { opacity: .5; transform: none; }

/* ============================================================
   Dashboard
   ============================================================ */

.dash-page { padding: 0; }
.dash-wrap {
  padding: 20px;
  max-width: 1400px; margin: 0 auto;
}

/* Landkarte (D3-Force) */
.landkarte {
  position: relative;
  width: 100%;
  height: calc(100vh - 160px);
  min-height: 520px;
  background: var(--glass-bg);
  backdrop-filter: blur(20px) saturate(1.35);
  border: 1px solid transparent;
  isolation: isolate;
  clip-path: var(--chamfer-2);
  overflow: hidden;
  --col-rgb: var(--accent-rgb);
}
.landkarte svg { width: 100%; height: 100%; display: block; }
.landkarte .legend {
  position: absolute; top: 16px; left: 16px;
  background: var(--glass-bg-strong);
  backdrop-filter: blur(10px);
  border: 1px solid var(--hairline);
  padding: 10px 14px;
  font-size: 11px;
  display: flex; flex-wrap: wrap; gap: 6px 14px;
  max-width: 60%;
  clip-path: var(--chamfer-sm);
}
.legend .item { display: flex; align-items: center; gap: 6px; color: var(--text-3); }
.legend .sw { width: 9px; height: 9px; border-radius: 50%; display: inline-block; }

.tooltip {
  position: absolute; pointer-events: none;
  background: var(--glass-bg-strong);
  backdrop-filter: blur(12px);
  border: 1px solid var(--hairline);
  padding: 12px 14px;
  font-size: 12px; max-width: 320px;
  color: var(--text-1);
  opacity: 0;
  transition: opacity .15s;
  clip-path: var(--chamfer-sm);
}
.tooltip b {
  color: var(--accent);
  font-size: 10px; text-transform: uppercase;
  letter-spacing: .08em;
  display: block; margin-bottom: 4px;
}

.node { cursor: pointer; transition: stroke-width .15s; }
.node:hover { stroke: #fff; stroke-width: 2; }
.edge { stroke: #394057; stroke-opacity: .35; }

.side {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
  margin-top: 14px;
}
.side .panel {
  position: relative;
  padding: 16px 18px;
  background: var(--glass-bg);
  backdrop-filter: blur(16px) saturate(1.3);
  border: 1px solid transparent;
  isolation: isolate;
  clip-path: var(--chamfer-2);
  --col-rgb: var(--drift-color);
}
.side .panel h3 {
  margin: 0 0 4px;
  font-size: 11px;
  color: var(--accent);
  letter-spacing: .1em;
  text-transform: uppercase;
  font-weight: 600;
}
.side .panel .sub {
  margin: 0 0 12px;
  font-size: 11px;
  color: var(--text-4);
}

.konsens-item, .emerging-item, .spannung-item {
  font-size: 13px;
  padding: 8px 0;
  border-bottom: 1px solid var(--hairline);
}
.konsens-item:last-child, .emerging-item:last-child, .spannung-item:last-child {
  border-bottom: 0;
}
.konsens-item .n { color: var(--accent); font-weight: 600; margin-right: 8px; }
.emerging-item .ratio { color: var(--accent-2); font-size: 11px; }
.spannung-item .bar {
  height: 6px;
  background: var(--inset);
  margin-top: 5px;
  overflow: hidden;
  clip-path: polygon(3px 0, 100% 0, 100% 100%, 0 100%, 0 3px);
}
.spannung-item .bar span {
  display: block; height: 100%;
  background: linear-gradient(90deg, var(--accent-2), var(--danger));
}

/* Grid-Layout fuer Dashboard-Panels */
.grid {
  display: grid; gap: 14px;
  grid-template-columns: repeat(12, 1fr);
  grid-auto-rows: 240px;
}
.panel {
  grid-column: span 6; grid-row: span 2;
  position: relative;
  padding: 16px 18px;
  background: var(--glass-bg);
  backdrop-filter: blur(16px) saturate(1.3);
  border: 1px solid transparent;
  isolation: isolate;
  clip-path: var(--chamfer-2);
  overflow: hidden;
  display: flex; flex-direction: column;
  --col-rgb: var(--drift-color);
}
.panel h3 {
  margin: 0 0 6px;
  font-size: 12px; color: var(--accent);
  letter-spacing: .08em; text-transform: uppercase;
  font-weight: 600;
}
.panel .sub { font-size: 11px; color: var(--text-4); margin: 0 0 12px; }
.panel .body { flex: 1; min-height: 0; overflow: auto; }
.panel .dock {
  position: absolute; top: 10px; right: 10px;
  display: flex; gap: 6px;
  opacity: .5; transition: opacity .2s;
}
.panel:hover .dock { opacity: 1; }
.panel .dock button {
  background: var(--glass-bg);
  color: var(--text-2);
  border: 1px solid var(--hairline);
  width: 26px; height: 26px;
  font-size: 11px;
  clip-path: polygon(4px 0, 100% 0, 100% 100%, 0 100%, 0 8px);
}

.kpi-strip {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
  margin-bottom: 14px;
}
.kpi {
  position: relative;
  background: var(--glass-bg);
  backdrop-filter: blur(16px) saturate(1.3);
  border: 1px solid transparent;
  padding: 14px 16px;
  isolation: isolate;
  clip-path: var(--chamfer-sm);
  --col-rgb: var(--drift-color);
}
.kpi b {
  display: block;
  font-size: 24px; font-weight: 500;
  color: var(--text-1);
  letter-spacing: -0.02em;
  margin-bottom: 2px;
}
.kpi span {
  color: var(--text-3);
  font-size: 11px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

/* Cards innerhalb eines Panels */
.cards {
  display: grid; gap: 10px;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}
.cards .card {
  position: relative;
  background: var(--glass-bg);
  backdrop-filter: blur(12px);
  border: 1px solid var(--hairline);
  padding: 12px 14px;
  isolation: isolate;
  clip-path: var(--chamfer-sm);
}
.cards .card .cat {
  font-size: 10px;
  color: var(--accent);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  margin-bottom: 6px;
  font-weight: 600;
}
.cards .card .txt { font-size: 13px; color: var(--text-2); line-height: 1.4; }
.cards .card .meta {
  margin-top: 8px;
  font-size: 10px; color: var(--text-4);
  display: flex; align-items: center; justify-content: space-between;
  gap: 8px;
}
.cards .card .upvote {
  background: transparent;
  color: var(--accent-2);
  border: 1px solid rgba(var(--accent-2-rgb), 0.35);
  padding: 3px 10px;
  font-size: 10px;
  cursor: pointer;
  clip-path: polygon(4px 0, 100% 0, 100% 100%, 0 100%, 0 8px);
}
.cards .card .upvote:hover { background: rgba(var(--accent-2-rgb), 0.1); color: var(--text-1); }
.cards .card .upvote.on {
  color: var(--accent);
  border-color: rgba(var(--accent-rgb), 0.5);
  background: rgba(var(--accent-rgb), 0.1);
  cursor: default;
}

/* Blobs / Heatmap / Radar */
.blobs { width: 100%; height: 100%; }
.blob { transition: r .6s ease, cx .6s ease, cy .6s ease; }

.heat-row {
  display: flex; align-items: center; gap: 8px;
  margin: 4px 0; font-size: 11px;
}
.heat-row .lbl {
  width: 120px; color: var(--text-3);
  white-space: nowrap; overflow: hidden;
  text-overflow: ellipsis;
}
.heat-row .cell { height: 14px; flex: 1; border-radius: 2px; }

.radar-pick { margin-bottom: 8px; }
.radar-pick select {
  background: var(--glass-bg);
  color: var(--text-1);
  border: 1px solid var(--hairline);
  padding: 5px 10px;
  font-size: 12px;
  clip-path: polygon(4px 0, 100% 0, 100% 100%, 0 100%, 0 8px);
}

@media (max-width: 820px) {
  .panel, .side { grid-template-columns: 1fr; }
  .panel { grid-column: span 12; grid-row: span 2; }
  .kpi-strip { grid-template-columns: repeat(2, 1fr); }
  .side { grid-template-columns: 1fr; }
  .landkarte { height: 60vh; }
}

/* ============================================================
   Admin
   ============================================================ */

.admin-page {
  padding: 24px;
  max-width: 1000px;
  margin: 0 auto;
}
.admin-page h2 {
  font-weight: 500; font-size: 20px;
  letter-spacing: -0.01em;
  margin-bottom: 16px;
  color: var(--text-1);
}
.admin-page table {
  width: 100%;
  border-collapse: collapse;
  background: var(--glass-bg);
  backdrop-filter: blur(12px);
  border: 1px solid var(--hairline);
  clip-path: var(--chamfer-sm);
  isolation: isolate;
}
.admin-page th, .admin-page td {
  padding: 10px 14px;
  border-bottom: 1px solid var(--hairline);
  font-size: 13px;
  text-align: left;
}
.admin-page th {
  color: var(--text-3);
  font-weight: 600;
  text-transform: uppercase;
  font-size: 11px;
  letter-spacing: 0.08em;
  background: rgba(0,0,0,0.2);
}
.admin-page tr:hover { background: rgba(var(--accent-rgb), 0.05); cursor: pointer; }

.transcript {
  background: var(--glass-bg);
  backdrop-filter: blur(12px);
  border: 1px solid var(--hairline);
  padding: 18px 22px;
  margin-top: 20px;
  max-height: 60vh;
  overflow: auto;
  clip-path: var(--chamfer-2);
}
.transcript h3 {
  font-size: 11px; color: var(--accent);
  letter-spacing: 0.1em; text-transform: uppercase;
  margin: 16px 0 8px;
  font-weight: 600;
}
.transcript h3:first-child { margin-top: 0; }
.transcript .m {
  padding: 6px 0;
  font-size: 13px;
  color: var(--text-2);
  line-height: 1.5;
}
.transcript .m b {
  color: var(--accent);
  margin-right: 8px;
  font-weight: 500;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
}
.transcript .m i { color: var(--text-4); font-style: normal; font-size: 11px; }
