/* ==========================================================================
   Groundrush — flasher page only.
   Loaded after css/site.css and uses its design tokens. Nothing in here is
   used by index.html or privacy.html.
   ========================================================================== */

/* --------------------------------------------------------------------------
   Intro
   -------------------------------------------------------------------------- */

.fl-hero {
  padding-top: 72px;
  padding-bottom: 8px;
  max-width: 900px;
  margin: 0 auto;
}

.fl-hero h1 {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: clamp(32px, 6vw, 56px);
  line-height: 1.05;
  margin: 0 0 22px;
  color: var(--text-bright);
  text-shadow:
    2px 0 0 rgba(255, 0, 212, .8),
    -2px 0 0 rgba(0, 255, 255, .8),
    0 0 32px var(--glow-cyan);
}

.fl-hero .hero-lede { max-width: none; margin-bottom: 32px; }

.fl-explain {
  border: 1px solid var(--line);
  background: var(--panel);
  padding: 26px 30px;
  margin-bottom: 28px;
}
.fl-explain h2 {
  font-family: var(--font-display);
  font-size: 15px;
  font-weight: 500;
  letter-spacing: 2px;
  color: var(--cyan);
  margin: 0 0 14px;
}
.fl-explain p {
  font-size: 17px;
  line-height: 1.6;
  color: var(--text);
  margin: 0 0 14px;
}
.fl-explain p:last-child { margin-bottom: 0; }

/* --------------------------------------------------------------------------
   Capability banner
   -------------------------------------------------------------------------- */

.fl-cap {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 16px 20px;
  border: 1px solid var(--line);
  background: var(--panel);
  font-family: var(--font-mono);
  font-size: 13.5px;
  line-height: 1.65;
  color: var(--text);
  margin-bottom: 22px;
}
.fl-cap-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  flex: none;
  margin-top: 7px;
  background: var(--text-muted);
  box-shadow: 0 0 8px currentColor;
}
.fl-cap strong { color: var(--text-bright); }

.fl-cap--ok      { border-color: rgba(216, 255, 0, .45); }
.fl-cap--ok .fl-cap-dot { background: var(--lime); box-shadow: 0 0 10px var(--lime); }
.fl-cap--manual  { border-color: rgba(0, 255, 255, .45); }
.fl-cap--manual .fl-cap-dot { background: var(--cyan); box-shadow: 0 0 10px var(--cyan); }
.fl-cap--bad     { border-color: rgba(255, 0, 212, .5); }
.fl-cap--bad .fl-cap-dot { background: var(--magenta); box-shadow: 0 0 10px var(--magenta); }
.fl-cap--wait .fl-cap-dot { animation: pulse 1.4s ease infinite; }

.fl-jump {
  font-family: var(--font-mono);
  font-size: 12.5px;
  letter-spacing: 1px;
  color: var(--text-muted);
  margin: 0;
}
.fl-jump a { margin-left: 14px; }

/* --------------------------------------------------------------------------
   Sections
   -------------------------------------------------------------------------- */

.fl-section {
  position: relative;
  z-index: 2;
  padding-top: 44px;
  padding-bottom: 20px;
  max-width: 900px;
  margin: 0 auto;
}
.fl-section.section--last { padding-bottom: 88px; }

.fl-lead {
  font-size: 17.5px;
  line-height: 1.6;
  color: var(--text);
  margin: 0 0 26px;
}

.fl-hint {
  font-size: 15.5px;
  line-height: 1.6;
  color: var(--text-muted);
}

.fl-muted { color: var(--text-muted); }

code {
  font-family: var(--font-mono);
  font-size: .86em;
  color: var(--lime);
  background: rgba(216, 255, 0, .07);
  border: 1px solid rgba(216, 255, 0, .18);
  padding: 1px 5px;
  word-break: break-word;
}

/* --------------------------------------------------------------------------
   Console
   -------------------------------------------------------------------------- */

.fl-console {
  border: 1px solid rgba(0, 255, 255, .3);
  background: rgba(5, 7, 16, .9);
  box-shadow: 0 0 48px rgba(0, 255, 255, .1);
}

.fl-console-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 16px;
  flex-wrap: wrap;
  padding: 14px 22px;
  border-bottom: 1px solid var(--line-soft);
}
.fl-console-title {
  font-family: var(--font-display);
  font-size: 13px;
  letter-spacing: 3px;
  color: var(--cyan);
}
.fl-console-status {
  display: flex;
  align-items: center;
  gap: 8px;
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 1px;
  color: var(--text-muted);
}
.fl-led {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--text-muted);
  box-shadow: 0 0 8px currentColor;
}
.fl-console-status[data-state="busy"]  { color: var(--lime); }
.fl-console-status[data-state="busy"] .fl-led  { background: var(--lime); animation: pulse 1.2s ease infinite; }
.fl-console-status[data-state="ok"]    { color: var(--lime); }
.fl-console-status[data-state="ok"] .fl-led    { background: var(--lime); }
.fl-console-status[data-state="error"] { color: var(--magenta); }
.fl-console-status[data-state="error"] .fl-led { background: var(--magenta); }

.fl-log {
  font-family: var(--font-mono);
  font-size: 12.5px;
  line-height: 1.85;
  padding: 16px 22px;
  min-height: 220px;
  max-height: 380px;
  overflow-y: auto;
  overflow-wrap: anywhere;
  background: #030409;
}
.fl-log-line { color: var(--text-muted); }
.fl-log-line .fl-log-time { color: #6c88a6; margin-right: 10px; }
.fl-log-line--info { color: var(--text-muted); }
.fl-log-line--step { color: var(--cyan); }
.fl-log-line--ok   { color: var(--lime); }
.fl-log-line--warn { color: #ffb020; }
.fl-log-line--err  { color: var(--magenta); font-weight: 600; }

.fl-console-foot {
  padding: 12px 22px;
  border-top: 1px solid var(--line-soft);
  font-family: var(--font-mono);
  font-size: 11.5px;
  line-height: 1.6;
  color: var(--text-muted);
}

/* --------------------------------------------------------------------------
   Stepper
   -------------------------------------------------------------------------- */

.fl-steps {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 18px;
}

.fl-step {
  border: 1px solid var(--line-faint);
  background: var(--panel);
  padding: 24px 28px;
  transition: border-color .18s ease, opacity .18s ease;
}
/* A step that is not your turn yet is de-emphasised, but its text still
   has to pass contrast: the instructions in step 2 are the ones people need
   to read before they act. */
.fl-step[data-state="todo"]  { opacity: .82; }
.fl-step[data-state="active"] {
  opacity: 1;
  border-color: var(--cyan);
  box-shadow: 0 0 32px rgba(0, 255, 255, .12);
}
.fl-step[data-state="done"] { opacity: 1; border-color: rgba(216, 255, 0, .4); }

.fl-step-head {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 14px;
}
.fl-step-num {
  width: 30px;
  height: 30px;
  flex: none;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--line);
  font-family: var(--font-mono);
  font-size: 13px;
  color: var(--text-muted);
}
.fl-step[data-state="active"] .fl-step-num { border-color: var(--cyan); color: var(--cyan); }
/* The "✓" is swapped in by flasher.js (setStep), not by CSS, so the number
   stays in the accessibility tree as real text. */
.fl-step[data-state="done"] .fl-step-num {
  border-color: var(--lime);
  color: var(--bg);
  background: var(--lime);
}

.fl-step h3 {
  font-family: var(--font-display);
  font-size: 15px;
  font-weight: 500;
  letter-spacing: 1.5px;
  color: var(--text-bright);
  margin: 0;
}
.fl-step[data-state="active"] h3 { color: var(--cyan); }

.fl-step-body p {
  font-size: 17px;
  line-height: 1.6;
  color: var(--text);
  margin: 0 0 14px;
}

.fl-substeps {
  margin: 0 0 16px;
  padding-left: 22px;
}
.fl-substeps li {
  font-size: 17px;
  line-height: 1.6;
  color: var(--text);
  margin-bottom: 10px;
}
.fl-substeps li::marker { color: var(--cyan); }

.fl-critical {
  border-left: 3px solid var(--magenta);
  background: rgba(255, 0, 212, .07);
  padding: 14px 18px;
  color: var(--text-bright) !important;
}
.fl-critical-inline {
  display: block;
  margin-top: 6px;
  color: var(--text-bright);
  border-left: 3px solid var(--magenta);
  padding-left: 12px;
}

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

.fl-btn {
  display: inline-block;
  padding: 14px 28px;
  font-family: var(--font-display);
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 2px;
  cursor: pointer;
  border: 1px solid transparent;
  background: transparent;
  transition: background-color .15s ease, color .15s ease, box-shadow .15s ease;
}
.fl-btn:disabled { cursor: not-allowed; opacity: .4; }

.fl-btn--cyan { border-color: var(--cyan); color: var(--cyan); }
.fl-btn--cyan:hover:not(:disabled) { background: rgba(0, 255, 255, .12); }

.fl-btn--ghost { border-color: var(--line); color: var(--text); }
.fl-btn--ghost:hover:not(:disabled) { border-color: var(--cyan); color: var(--cyan); }

.fl-btn--magenta {
  background: var(--magenta);
  color: var(--bg);
  font-weight: 700;
  box-shadow: 0 0 28px rgba(255, 0, 212, .5);
}
.fl-btn--magenta:hover:not(:disabled) { background: #ff5ce0; }
.fl-btn--magenta:disabled { box-shadow: none; }

.fl-btn--lime {
  background: var(--lime);
  color: var(--bg);
  font-weight: 700;
  box-shadow: 0 0 28px rgba(216, 255, 0, .45);
  text-decoration: none;
}
.fl-btn--lime:hover { background: #eaff4d; color: var(--bg); }

.fl-busy { position: relative; }
.fl-busy::after {
  content: " …";
  animation: pulse 1s ease infinite;
}

/* --------------------------------------------------------------------------
   Result blocks
   -------------------------------------------------------------------------- */

.fl-out:empty { display: none; }
.fl-out {
  margin-top: 18px;
  border: 1px solid var(--line-faint);
  background: rgba(3, 4, 9, .7);
  padding: 18px 20px;
  font-size: 16px;
  line-height: 1.6;
  color: var(--text);
}
.fl-out--ok   { border-color: rgba(216, 255, 0, .45); }
.fl-out--warn { border-color: #ffb020; }
.fl-out--err  { border-color: rgba(255, 0, 212, .55); background: rgba(255, 0, 212, .06); }

.fl-out h4 {
  font-family: var(--font-display);
  font-size: 13px;
  letter-spacing: 2px;
  font-weight: 500;
  margin: 0 0 12px;
  color: var(--text-bright);
}
.fl-out--ok h4   { color: var(--lime); }
.fl-out--warn h4 { color: #ffb020; }
.fl-out--err h4  { color: var(--magenta); }
.fl-out p { margin: 0 0 12px; }
.fl-out p:last-child { margin-bottom: 0; }

.fl-kv {
  list-style: none;
  margin: 0 0 14px;
  padding: 0;
  display: grid;
  grid-template-columns: max-content 1fr;
  gap: 6px 18px;
  font-family: var(--font-mono);
  font-size: 13px;
}
.fl-kv dt { color: var(--text-muted); letter-spacing: 1px; }
.fl-kv dd { margin: 0; color: var(--text-bright); overflow-wrap: anywhere; }
.fl-kv dd.fl-accent { color: var(--lime); }

.fl-hex {
  font-family: var(--font-mono);
  font-size: 12px;
  color: var(--cyan);
  overflow-wrap: anywhere;
}

/* --------------------------------------------------------------------------
   Drop zone
   -------------------------------------------------------------------------- */

.fl-drop-wrap { margin-bottom: 8px; }

.fl-drop {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 44px 24px;
  text-align: center;
  cursor: pointer;
  border: 1px dashed rgba(0, 255, 255, .35);
  background:
    repeating-linear-gradient(135deg,
      rgba(0, 255, 255, .03) 0px, rgba(0, 255, 255, .03) 1px,
      transparent 1px, transparent 9px),
    var(--panel);
  transition: border-color .15s ease, background-color .15s ease;
}
.fl-drop:hover,
.fl-drop:focus-within,
.fl-drop.is-over { border-color: var(--cyan); border-style: solid; }
.fl-drop.is-over { background-color: rgba(0, 255, 255, .07); }

.fl-drop-glyph {
  width: 26px;
  height: 26px;
  border-right: 2px solid rgba(0, 255, 255, .6);
  border-bottom: 2px solid rgba(0, 255, 255, .6);
  transform: rotate(45deg);
  margin-bottom: 10px;
}
.fl-drop-title {
  font-family: var(--font-display);
  font-size: 15px;
  letter-spacing: 1.5px;
  color: var(--text-bright);
}
.fl-drop-sub {
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 1px;
  color: var(--text-muted);
}

.fl-manual-steps { margin-top: 26px; }
.fl-manual-steps h3 {
  font-family: var(--font-display);
  font-size: 15px;
  font-weight: 500;
  letter-spacing: 2px;
  color: var(--cyan);
  margin: 0 0 14px;
}

/* --------------------------------------------------------------------------
   Batch table
   -------------------------------------------------------------------------- */

.fl-table {
  width: 100%;
  min-width: 640px;
  border-collapse: collapse;
  border: 1px solid var(--line-faint);
  background: var(--panel);
}
.fl-table th,
.fl-table td {
  text-align: left;
  vertical-align: top;
  padding: 12px 16px;
  border-bottom: 1px solid var(--line-faint);
  font-size: 15px;
  line-height: 1.5;
  color: var(--text);
}
.fl-table th {
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: 2px;
  color: var(--magenta);
  text-transform: uppercase;
  border-bottom-color: rgba(0, 255, 255, .25);
}
.fl-table tbody tr:last-child td { border-bottom: none; }
.fl-table tbody tr.is-yours { background: rgba(216, 255, 0, .06); }
.fl-table tbody tr.is-yours td:first-child { box-shadow: inset 3px 0 0 var(--lime); }
.fl-table .fl-batch {
  font-family: var(--font-display);
  font-size: 15px;
  letter-spacing: 2px;
  color: var(--cyan);
}
.fl-table .fl-sha {
  font-family: var(--font-mono);
  font-size: 11.5px;
  color: var(--text-muted);
  overflow-wrap: anywhere;
}
.fl-table td a { font-family: var(--font-mono); font-size: 13px; }

.fl-tag {
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 1px;
  color: var(--lime);
  border: 1px solid rgba(216, 255, 0, .3);
  padding: 1px 8px;
}

/* --------------------------------------------------------------------------
   Responsive
   -------------------------------------------------------------------------- */

@media (max-width: 640px) {
  .fl-hero { padding-top: 44px; }
  .fl-explain { padding: 20px 18px; }
  .fl-step { padding: 20px 18px; }
  .fl-step-body p,
  .fl-substeps li { font-size: 16.5px; }
  .fl-btn { width: 100%; padding: 14px 18px; letter-spacing: 1px; }
  .fl-log { padding: 14px; font-size: 11.5px; }
  .fl-kv { grid-template-columns: 1fr; gap: 2px 0; }
  .fl-kv dd { margin-bottom: 8px; }
  .fl-jump a { display: block; margin: 6px 0 0; }
}

@media (prefers-reduced-motion: reduce) {
  .fl-led, .fl-cap-dot, .fl-busy::after { animation: none !important; }
}
