/* ============================================================
   css/corebreach.css -- CORE BREACH mode styling
   ============================================================
   Load AFTER styles.css.

   DELIBERATELY NOT LIKE nullcoin.css. That file declares its own
   --nlc-* palette because NULLcoin is lore-wise a different program
   and is meant to look like one. Core Breach is NULLBYTE's own raid
   mode and must look like the rest of the game, so everything here
   reads the global tokens (--cyan, --amber, --fg, --fg-dim, --bg-soft,
   --border) and declares no palette of its own.

   WHY THESE ARE CLASSES AND NOT INLINE STYLES: the GHOST OS instance
   renders the same markup inside a desktop window. Inline styles beat
   any stylesheet, so a mode built on inline styles can never be
   restyled for GHOST. Classes leave that door open.

   Every class is scoped under .corebreach-host so nothing here can
   leak into another screen, and so the GHOST copy can be targeted
   separately if it ever needs to be.
   ============================================================ */

.corebreach-host {
  font-size: 12px;
  color: var(--fg-dim);
}

/* The one inline style left in the mode is the progress bar's width,
   which is a live value and belongs in the markup. Everything else is
   here. */

.corebreach-host .cb-body {
  margin-top: 8px;
}

.corebreach-host .cb-hi {
  color: var(--cyan);
}

/* ── Target list ──────────────────────────────────────────── */

.corebreach-host .cb-clears {
  margin-bottom: 10px;
}

.corebreach-host .cb-cooldown {
  border-left: 2px solid var(--amber);
  padding-left: 8px;
  margin-bottom: 12px;
}

.corebreach-host .cb-cooldown-title {
  color: var(--amber);
}

.corebreach-host .cb-cooldown-time {
  font-size: 11px;
  margin-top: 4px;
}

.corebreach-host .cb-target {
  border: 1px solid var(--border);
  padding: 10px;
  margin-bottom: 8px;
}

/* An unlocked rung is tinted so the ladder reads at a glance on a
   phone: the player should see how far up he can currently go without
   reading eight blocks of text. */
.corebreach-host .cb-target.cb-open {
  border-color: var(--cyan);
  background: rgba(77, 226, 255, 0.04);
}

.corebreach-host .cb-target-head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
}

.corebreach-host .cb-target-name {
  color: var(--fg-dim);
  font-weight: bold;
}

.corebreach-host .cb-open .cb-target-name {
  color: var(--cyan);
}

.corebreach-host .cb-rank {
  font-size: 10px;
  color: var(--fg-dim);
}

/* Which rung a generated target belongs to. Dimmer than the name it
   sits under: it is orientation, not the target's identity. */
.corebreach-host .cb-class {
  font-size: 10px;
  color: var(--fg-dim);
  margin-top: 2px;
  letter-spacing: 0.5px;
}

.corebreach-host .cb-flavor {
  font-size: 11px;
  color: var(--fg-dim);
  margin-top: 4px;
  font-style: italic;
}

.corebreach-host .cb-specs {
  font-size: 11px;
  margin-top: 6px;
}

.corebreach-host .cb-locked-note {
  font-size: 11px;
  color: var(--amber);
  margin-top: 6px;
}

.corebreach-host .cb-payout {
  font-size: 11px;
  margin-top: 6px;
  color: var(--fg);
}

.corebreach-host .cb-payout strong {
  color: var(--cyan);
}

.corebreach-host .cb-payout-note {
  color: var(--fg-dim);
}

.corebreach-host .cb-start {
  margin-top: 8px;
  width: 100%;
}

/* ── Active breach ────────────────────────────────────────── */

.corebreach-host .cb-head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
}

.corebreach-host .cb-name {
  color: var(--cyan);
  font-size: 14px;
  font-weight: bold;
}

/* Monospace so the countdown does not jitter as digits change --
   it ticks every second for up to six hours. */
.corebreach-host .cb-clock {
  font-family: monospace;
}

.corebreach-host .cb-clock.cb-expired {
  color: var(--amber);
}

.corebreach-host .cb-bar {
  margin-top: 12px;
  height: 6px;
  background: var(--bg-soft);
  border: 1px solid var(--border);
}

.corebreach-host .cb-bar-fill {
  height: 100%;
  background: var(--cyan);
}

.corebreach-host .cb-counts {
  font-size: 11px;
  margin-top: 4px;
}

.corebreach-host .cb-bots {
  color: var(--fg-dim);
}

.corebreach-host .cb-share {
  margin-top: 12px;
  border-left: 2px solid var(--cyan);
  padding-left: 8px;
}

.corebreach-host .cb-share-rate {
  font-size: 11px;
  color: var(--fg-dim);
  margin-top: 2px;
}

.corebreach-host .cb-share-done {
  color: var(--amber);
  margin-top: 4px;
  line-height: 1.5;
}

/* The botnet/human split. Sits directly under the progress bar because
   it reinterprets the number above it. */
.corebreach-host .cb-split {
  font-size: 11px;
  margin-top: 2px;
  color: var(--fg-dim);
}

.corebreach-host .cb-split strong {
  color: var(--cyan);
}

/* The bots have finished their quota and will not take another layer.
   Amber, because from here every open layer is a human's problem. */
.corebreach-host .cb-split.cb-quiet,
.corebreach-host .cb-split.cb-quiet strong {
  color: var(--amber);
}

/* The stakes line. Amber and rule-marked because it is the only text in
   the mode that describes a LOSS -- it must not read as one more stat. */
.corebreach-host .cb-risk {
  margin-top: 10px;
  border-left: 2px solid var(--amber);
  padding-left: 8px;
  font-size: 11px;
  line-height: 1.5;
  color: var(--amber);
}

.corebreach-host .cb-action {
  margin-top: 12px;
  width: 100%;
}

.corebreach-host .cb-abandon {
  margin-top: 6px;
  width: 100%;
  border-color: var(--amber);
  color: var(--amber);
}

.corebreach-host .cb-warn {
  font-size: 10px;
  color: var(--fg-dim);
  margin-top: 4px;
  text-align: center;
}

.corebreach-host .cb-result {
  margin-top: 12px;
}

.corebreach-host .cb-result.cb-win {
  color: var(--cyan);
}

.corebreach-host .cb-result.cb-fail {
  color: var(--amber);
}

/* ── Contributors ─────────────────────────────────────────── */

.corebreach-host .cb-contrib-title {
  margin-top: 14px;
  font-size: 11px;
  color: var(--fg-dim);
}

.corebreach-host .cb-contrib {
  display: flex;
  justify-content: space-between;
  font-size: 11px;
  padding: 2px 0;
}

.corebreach-host .cb-contrib.cb-me {
  color: var(--cyan);
}

/* ── Empty / locked states ────────────────────────────────── */

.corebreach-host .cb-msg {
  line-height: 1.6;
}

.corebreach-host .cb-msg + .cb-msg {
  margin-top: 8px;
}

.corebreach-host .cb-error {
  color: var(--amber);
}

/* The minigame mounts into its own child so re-rendering the panel
   cannot destroy a cipher the player is mid-way through. */
.corebreach-host .cb-minigame {
  margin-top: 12px;
}
