/* ═══════════════════════════════════════════════════════════════════
   SHADOW TERMINAL · UPGRADE FX LAYER
   Shared premium polish loaded on every page. Purely additive — uses
   literal palette values so it works under both the ST (--st-*) and the
   bots (--*) variable systems. No layout impact.
   ═══════════════════════════════════════════════════════════════════ */

/* ── Text selection · amber tint instead of OS default ─────────────── */
::selection      { background: rgba(247, 166, 0, 0.26); color: #ECEFF6; }
::-moz-selection { background: rgba(247, 166, 0, 0.26); color: #ECEFF6; }

/* ── Keyboard focus · crisp amber ring (pointer clicks stay clean) ─── */
:focus-visible {
  outline: 1px solid rgba(247, 166, 0, 0.65);
  outline-offset: 2px;
  border-radius: 4px;
}
input:focus-visible, textarea:focus-visible { outline-offset: 0; }

/* ── Buttons & links · tactile press + snappy transition ───────────── */
button { transition: transform .10s ease, filter .14s ease, box-shadow .14s ease; }
button:not(:disabled):active { transform: translateY(0.5px) scale(0.985); }
button:not(:disabled):hover   { filter: brightness(1.06); }

/* ── Hover-lift · opt-in elevation for cards & interactive rows ────── */
.fx-lift {
  transition: transform .15s cubic-bezier(.2,.7,.3,1),
              box-shadow .15s ease,
              border-color .15s ease,
              background .15s ease;
  will-change: transform;
}
.fx-lift:hover {
  transform: translateY(-1.5px);
  box-shadow: 0 10px 26px -16px rgba(0,0,0,0.85);
  border-color: rgba(247, 166, 0, 0.30) !important;
}

/* subtler lift for dense list rows (rail coins, table rows) */
.fx-row {
  transition: background .13s ease, box-shadow .13s ease;
  position: relative;
}
.fx-row:hover {
  background: rgba(247, 166, 0, 0.045) !important;
  box-shadow: inset 2px 0 0 rgba(247, 166, 0, 0.55);
}

/* ── Blinking command caret · Shadow's "live cursor" ───────────────── */
@keyframes fx-caret-blink { 0%,49% { opacity: 1; } 50%,100% { opacity: 0; } }
.fx-caret::after {
  content: '';
  display: inline-block;
  width: 6px; height: 1.05em;
  margin-left: 3px;
  vertical-align: -2px;
  background: #F7A600;
  box-shadow: 0 0 6px rgba(247,166,0,0.7);
  animation: fx-caret-blink 1.05s steps(1) infinite;
}

/* ── Fresh-row entrance · a new thought sliding into the stream ────── */
@keyframes fx-rise {
  0%   { opacity: 0; transform: translateY(-5px); }
  100% { opacity: 1; transform: translateY(0); }
}
.fx-rise { animation: fx-rise .42s cubic-bezier(.2,.7,.3,1) both; }

/* ── Sweeping shimmer · for "scanning" strips & progress meters ────── */
@keyframes fx-sweep {
  0%   { transform: translateX(-130%); }
  100% { transform: translateX(230%); }
}
.fx-sweep { position: relative; overflow: hidden; }
.fx-sweep::after {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(100deg,
    transparent 0%, transparent 38%,
    rgba(247,166,0,0.18) 50%,
    transparent 62%, transparent 100%);
  transform: translateX(-130%);
  animation: fx-sweep 3.4s ease-in-out infinite;
  pointer-events: none;
}

/* ── Soft amber halo · for the brand mark / hero on hover ──────────── */
@keyframes fx-breathe {
  0%,100% { opacity: 0.55; }
  50%     { opacity: 1; }
}
.fx-breathe { animation: fx-breathe 3.2s ease-in-out infinite; }

/* ── Number tick flash · brief flash when a live value changes ─────── */
@keyframes fx-tick-up   { 0% { color: #2EE49B; } 100% { } }
@keyframes fx-tick-down { 0% { color: #FF5C77; } 100% { } }
.fx-tick-up   { animation: fx-tick-up   .55s ease-out; }
.fx-tick-down { animation: fx-tick-down .55s ease-out; }

/* respect reduced-motion */
@media (prefers-reduced-motion: reduce) {
  .fx-caret::after, .fx-sweep::after, .fx-breathe { animation: none !important; }
  .fx-rise { animation: none !important; }
}
