/* Mini Apps host stylesheet — extracted from noidbot.css so the
   registry-driven grid is styled at shell load, independent of any app. */
.miniapp-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px 0px; padding: 16px 6px; }
.miniapp-tile { cursor: pointer; background: none; border: none; padding: 12px 2px; display: flex; flex-direction: column; align-items: center; gap: 9px; transition: transform 0.1s; }
.miniapp-tile:active { transform: scale(0.94); }
.miniapp-icon { width: 54px; height: 54px; border-radius: 0px; border: 2px solid var(--gray-700, #2a2a2a); background: var(--gray-900, #171717); color: var(--white); display: flex; align-items: center; justify-content: center; }
.miniapp-icon svg { width: 24px; height: 24px; }
.miniapp-name { font-family: var(--font-display); font-weight: 600; font-size: 0.58rem; color: var(--white); text-transform: uppercase; letter-spacing: 0.02em; text-align: center; line-height: 1.2; max-width: 84px; }
.noidbot-logo { display: inline-flex; flex-direction: column; align-items: center; line-height: 0.9; transform: skewX(-5deg); }
.noidbot-logo-noid { font-family: 'Ugocranis', var(--font-display); font-weight: 900; font-size: 0.98rem; letter-spacing: -0.01em; text-transform: uppercase; color: rgb(255, 255, 255); }
.noidbot-logo-bot { font-family: 'Ugocranis', var(--font-display); font-weight: 900; font-size: 0.98rem; letter-spacing: -0.01em; text-transform: uppercase; color: rgb(242, 86, 35); }
.miniapp-icon:has(.noidbot-logo) { background: rgb(23, 23, 23); border: 2px solid var(--gray-700, #2a2a2a); }
.miniapp-host { display: flex; flex-direction: column; flex: 1 1 0%; min-height: 0px; overflow: hidden; }
.miniapp-icon svg { stroke: currentcolor; stroke-width: 2; fill: none; }
.miniapp-search-wrap { padding: 12px 14px 10px; background: var(--black); border-bottom: 2px solid var(--gray-700); flex-shrink: 0; }
.miniapp-search { display: flex; align-items: center; gap: 9px; height: 38px; background: var(--gray-900); border: 2px solid var(--gray-700); padding: 0px 11px; }
.miniapp-search svg { width: 15px; height: 15px; stroke: var(--gray-500); stroke-width: 2.5; fill: none; flex-shrink: 0; }
.miniapp-search input { flex: 1 1 0%; background: none; border: none; color: var(--gray-300); outline: none; font-family: var(--font-mono); font-size: 0.72rem; letter-spacing: 0.02em; }
.miniapp-search input::placeholder { color: var(--gray-500); text-transform: uppercase; letter-spacing: 0.08em; }
.miniapp-hero { display: block; width: calc(100% - 28px); margin: 14px 14px 4px; text-align: left; cursor: pointer; position: relative; min-height: 150px; border: 2px solid var(--gray-700, #2a2a2a); background: var(--gray-900, #171717); padding: 14px; }
.miniapp-hero-top { display: flex; justify-content: space-between; align-items: flex-start; }
.miniapp-hero-badge { font-family: var(--font-mono); font-size: 0.52rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; background: var(--accent); color: rgb(255, 255, 255); padding: 4px 8px; }
.miniapp-hero-mark { font-family: var(--font-display); font-weight: 900; font-size: 1.6rem; transform: skewX(-5deg); display: inline-flex; line-height: 0.85; }
.miniapp-hero-mark .n { color: rgb(255, 255, 255); }
.miniapp-hero-mark .b { color: var(--accent); }
.miniapp-hero-bottom { margin-top: 22px; }
.miniapp-hero-title { font-family: var(--font-display); font-size: 1.9rem; font-weight: 900; text-transform: uppercase; letter-spacing: -0.03em; line-height: 0.9; color: var(--white); }
.miniapp-hero-sub { font-family: var(--font-mono); font-size: 0.6rem; color: var(--gray-300); text-transform: uppercase; letter-spacing: 0.06em; margin-top: 7px; }
.miniapp-hero-cta { margin-top: 11px; display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-mono); font-size: 0.6rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--accent); border: 1px solid var(--accent); padding: 6px 12px; background: rgba(0, 0, 0, 0.3); }
.miniapp-sec { display: flex; align-items: center; padding: 16px 16px 9px; }
.miniapp-sec.between { justify-content: space-between; }
.miniapp-sec-label { font-family: var(--font-mono); font-size: 0.55rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.18em; color: var(--gray-500); display: flex; align-items: center; gap: 7px; }
.miniapp-sec-label .fire { filter: none; }
.miniapp-trend { display: flex; gap: 10px; overflow-x: auto; padding: 0px 14px 4px; scrollbar-width: none; }
.miniapp-trend::-webkit-scrollbar { display: none; }
.miniapp-trend-chip { flex: 0 0 auto; display: flex; align-items: center; gap: 9px; padding: 8px 12px 8px 8px; border: 2px solid var(--gray-700); background: var(--gray-900); cursor: pointer; text-align: left; }
.miniapp-trend-mini { width: 34px; height: 34px; border: 2px solid var(--gray-600); display: flex; align-items: center; justify-content: center; color: var(--white); flex-shrink: 0; }
.miniapp-trend-mini svg { width: 17px; height: 17px; stroke: currentcolor; stroke-width: 2; fill: none; }
.miniapp-trend-chip.atlas .miniapp-trend-mini { border-color: rgb(58, 124, 165); color: rgb(95, 176, 217); background: rgb(10, 24, 34); }
.miniapp-trend-chip.grp .miniapp-trend-mini { border-color: rgb(76, 175, 80); color: rgb(76, 175, 80); background: rgba(76, 175, 80, 0.08); }
.miniapp-trend-name { font-family: var(--font-display); font-size: 0.82rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.02em; color: var(--white); }
.miniapp-trend-rank { font-family: var(--font-mono); font-size: 0.5rem; color: var(--gray-500); text-transform: uppercase; letter-spacing: 0.08em; margin-top: 2px; }
.miniapp-host .miniapp-grid { padding: 6px 6px 4px; row-gap: 10px; }
.miniapp-host .miniapp-tile { position: relative; }
.miniapp-icon.green { border-color: var(--gray-700, #2a2a2a); color: var(--white); background: var(--gray-900, #171717); }
.miniapp-icon.botbrand { border-color: var(--gray-700, #2a2a2a); background: rgb(23, 23, 23); }
.miniapp-icon.atlasbrand { border-color: var(--gray-700, #2a2a2a); background: var(--gray-900, #171717); color: var(--white); }
.miniapp-icon.soon { opacity: 0.5; border-style: dashed; border-color: var(--gray-600); color: var(--gray-500); background: transparent; }
.miniapp-atlas-glyph { font-family: var(--font-display); font-weight: 900; font-size: 1.5rem; transform: skewX(-5deg); display: inline-block; }
.miniapp-tile.soon .miniapp-name { color: var(--gray-500); }
.miniapp-soon-tag { position: absolute; top: -4px; right: 6px; font-family: var(--font-mono); font-size: 0.42rem; font-weight: 700; letter-spacing: 0.08em; background: var(--gray-700); color: var(--gray-400); padding: 2px 4px; text-transform: uppercase; z-index: 1; }
.miniapp-toast { position: fixed; left: 50%; bottom: 84px; transform: translateX(-50%) translateY(8px); background: var(--gray-800); color: var(--white); border: 1px solid var(--accent); font-family: var(--font-mono); font-size: 0.7rem; letter-spacing: 0.04em; padding: 9px 14px; opacity: 0; pointer-events: none; transition: opacity 0.18s, transform 0.18s; z-index: 9999; }

/* App-open loading overlay — same snake loader as the rest of the app */
.miniapp-loading { position: fixed; inset: 0; z-index: 9998; display: flex; align-items: center; justify-content: center; background: var(--black); opacity: 1; transition: opacity 0.25s ease; }
.miniapp-loading.hide { opacity: 0; pointer-events: none; }
.miniapp-loading .ma-load-inner { display: flex; flex-direction: column; align-items: center; gap: 14px; }
/* loader size: standard 15px global snake (was 34px — Stalin 2026-06-12: one
   global loading icon, same size everywhere) */
.miniapp-loading .ma-load-txt { font-family: var(--font-mono); font-size: 0.62rem; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: var(--gray-400); }
.miniapp-toast.show { opacity: 1; transform: translateX(-50%) translateY(0px); }
/* ── Channel-rack Apps page (Eden, 2026-06-10) ──────────────
   Layout for the registry-driven host: featured rack + channel racks with
   crosshair-bracket cards. Tokens from styles.css; borders carry structure. */
#miniapp-scroll { flex: 1; min-height: 0; overflow-y: auto; scrollbar-width: none; }
#miniapp-scroll::-webkit-scrollbar { display: none; }
.ma-page { padding: 2px 14px 0; }
.ma-group { padding-top: 4px; }
.ma-sec { display: flex; align-items: center; gap: 10px; padding: 14px 2px 9px; }
.ma-sec-label { font-family: var(--font-display); font-weight: 900; font-size: 0.95rem; letter-spacing: -0.01em; text-transform: uppercase; color: var(--white); }
.ma-sec::after { content: ""; flex: 1; height: 1px; background: var(--gray-700); }
.ma-sgrid { display: grid; grid-template-columns: 1fr; gap: 10px; }
/* desktop: unified responsive tile grid (approved launcher mockup) */
@media (min-width: 900px) {
  .ma-sgrid { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 14px; }
}
.ma-chips { display: flex; gap: 8px; overflow-x: auto; scrollbar-width: none; padding-bottom: 2px; }
.ma-chips::-webkit-scrollbar { display: none; }
.ma-app { flex: 0 0 auto; display: flex; flex-direction: column; align-items: center; gap: 7px; background: none; border: none; padding: 4px 2px; width: 72px; cursor: pointer; color: inherit; }
.ma-app:active { transform: scale(0.94); }
.ma-app-ic { width: 50px; height: 50px; border: 2px solid var(--gray-700, #2a2a2a); background: var(--gray-900, #171717); color: var(--white); display: flex; align-items: center; justify-content: center; }
.ma-app-ic svg { width: 22px; height: 22px; stroke: var(--white, #DEDEDE); stroke-width: 2; fill: none; }
.ma-app-ic.bot { border-color: var(--gray-700, #2a2a2a); }
.ma-app-ic.bot .noidbot-logo-noid, .ma-app-ic.bot .noidbot-logo-bot { font-size: 0.6rem; }
.ma-app-ic.grp { border-color: var(--success, #4caf50); color: var(--success, #4caf50); }
.ma-app-name { font-family: var(--font-display); font-weight: 600; font-size: 0.55rem; text-transform: uppercase; letter-spacing: 0.02em; color: var(--white); text-align: center; line-height: 1.15; max-width: 72px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* cards */
.ma-rcard { min-width: 0; position: relative; background: var(--gray-900, #171717); border: 2px solid var(--gray-700, #2a2a2a); padding: 14px; display: flex; flex-direction: row; align-items: center; gap: 14px; cursor: pointer; text-align: left; color: inherit; width: 100%; transition: border-color .08s ease; }
.ma-rcard:hover { border-color: var(--accent, #F25623); }
/* desktop: cards become flat vertical tiles (icon top-left, name+blurb below) */
@media (min-width: 900px) {
  .ma-rcard { flex-direction: column; align-items: stretch; gap: 14px; min-height: 148px; }
  .ma-rcard > div { margin-top: auto; }
  .ma-rcard .ma-rc-side { position: absolute; top: 14px; right: 14px; margin-left: 0; }
}
.ma-rcard:active { transform: scale(0.98); }
.ma-rcard.dim { opacity: 0.55; border-style: dashed; }
.ma-rc-top { display: flex; justify-content: space-between; align-items: center; }
.ma-rc-ic { width: 48px; height: 48px; border: 2px solid var(--gray-700, #2a2a2a); background: var(--gray-900, #171717); color: var(--white); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.ma-rc-ic svg { width: 24px; height: 24px; stroke: var(--white, #DEDEDE); stroke-width: 2; fill: none; }
.ma-rc-ic.bot { border-color: var(--gray-700, #2a2a2a); }
.ma-rc-ic.bot .noidbot-logo-noid, .ma-rc-ic.bot .noidbot-logo-bot { font-size: 0.5rem; }
.ma-rc-ic.grp { border-color: var(--success, #4caf50); color: var(--success, #4caf50); }
.ma-rc-ic.soon { border-style: dashed; }
.ma-plus-glyph { font-family: var(--font-display); font-weight: 900; font-size: 1.1rem; color: var(--accent); }
.ma-rcard.req .ma-rc-ic { border-color: var(--gray-500); }
.ma-rcard.req .ma-rc-name { color: var(--accent); }
.ma-rc-tag { font-family: var(--font-mono); font-size: 0.4rem; font-weight: 700; letter-spacing: 0.08em; color: var(--accent); text-transform: uppercase; }
.ma-rc-tag.mute { color: var(--gray-500); }
.ma-rc-tag.grn { color: var(--success, #4caf50); }
.ma-rc-name { font-family: var(--font-display); font-weight: 700; font-size: 0.78rem; text-transform: uppercase; color: var(--white); line-height: 1.05; }
.ma-rc-meta { font-family: var(--font-mono); font-size: 0.42rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--gray-500); margin-top: 3px; }
.ma-rc-foot { margin-top: auto; display: flex; justify-content: space-between; align-items: center; padding-top: 6px; border-top: 1px solid var(--gray-700); }
.ma-rc-st { font-family: var(--font-mono); font-size: 0.4rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--gray-500); }
.ma-rc-st .on { color: var(--accent); }
.ma-rc-st .g { color: var(--success, #4caf50); }
.ma-rc-go { font-family: var(--font-mono); font-size: 0.58rem; color: var(--accent); }
.ma-rc-go.mute { color: var(--gray-600); }
.ma-rc-side { margin-left: auto; flex-shrink: 0; display: flex; align-items: center; gap: 10px; }



/* ════════════════════════════════════════════════════════════════════
   GLOBAL APP SHELL  (registry-driven chrome — top bar + body + bottom nav)
   One shared template for every mini-app. An app opts in with "shell":true
   in registry.json, then calls MiniApps.configShell(id, {...}) at open.
   Top bar mirrors the chat conversation header 1:1 (back · title · 3-dot,
   3px white underline). Bottom nav = NoidChat anchor + app-defined slots.
   ════════════════════════════════════════════════════════════════════ */
.app-shell { display: flex; flex-direction: column; flex: 1 1 0%; min-height: 0; height: 100%; background: var(--gray-900); }

/* ── DESKTOP CENTERED COLUMN (Faith, 2026-06-16) ───────────────────────
   On desktop the open-app shell used to stretch edge-to-edge across the full
   ~1440px viewport, leaving the bottom-nav items floating far apart. Below
   900px (mobile) it stays full-width — UNCHANGED. At/above 900px we paint a
   flat #0e0e0e canvas on the shell's host section and constrain the shell
   itself to a centered 760px column with a 2px hard border. This ONLY wraps/
   centers — the top strip (.app-shell-top), body and bottom nav
   (.app-shell-nav) markup + behavior are untouched; the nav simply becomes
   as wide as the column so its tabs sit together. */
@media (min-width: 900px) {
  /* the host <section> the shell lives in becomes the flat dark canvas */
  .app-section:has(.app-shell),
  .app-shell-host {
    background: #0e0e0e;
    display: flex;
    justify-content: center;
    align-items: stretch;
    padding: 24px;
    overflow: hidden;
  }
  .app-shell {
    width: 100%;
    max-width: 760px;
    margin-inline: auto;
    height: 100%;
    border: 2px solid var(--gray-700, #2a2a2a);
    overflow: hidden;
  }
}

/* ── top strip — slim ~40px (Option B): [‹ parent?] [TITLE] [⋯] ─────── */
.app-shell-top {
  display: flex; align-items: center; gap: 8px;
  padding: 0 10px; height: 40px;
  border-bottom: 2px solid var(--white);
  background: var(--gray-900); flex-shrink: 0;
}
.app-shell-back {
  background: none; border: none; color: var(--white);
  cursor: pointer; padding: 0 4px 0 0; display: flex; align-items: center; gap: 2px;
  flex-shrink: 0; max-width: 42%; min-width: 0; min-height: 36px;
}
.app-shell-back[hidden] { display: none; }
.app-shell-back svg { width: 18px; height: 18px; flex-shrink: 0; }
/* back label — the parent name, mono, truncates with ellipsis. The ‹ glyph is
   the inline BACK_SVG; both stay #DEDEDE (var(--white)) — no orange on back. */
.app-shell-backlabel {
  font-family: var(--font-mono); font-size: 0.68rem; font-weight: 600;
  letter-spacing: 0.02em; color: var(--white);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0;
}
.app-shell-backlabel:empty { display: none; }
.app-shell-info { flex: 1; min-width: 0; display: flex; align-items: baseline; }
.app-shell-info h2 {
  font-family: var(--font-display); font-size: 0.92rem; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.02em; line-height: 1;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin: 0;
}
/* sub-line compacted to inline-small so it never adds height to the 40px strip */
.app-shell-sub {
  font-family: var(--font-mono); font-size: 0.52rem;
  color: var(--gray-400); text-transform: uppercase; letter-spacing: 0.08em;
  margin-left: 8px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.app-shell-dots {
  width: 32px; height: 32px; flex-shrink: 0;
  border: 2px solid var(--gray-600); color: var(--gray-400);
  background: transparent; display: flex; align-items: center; justify-content: center;
  cursor: pointer; transition: all var(--transition-fast);
}
.app-shell-dots:hover { border-color: var(--white); color: var(--white); background: var(--gray-800); }
.app-shell-dots[hidden] { display: none; }

/* ── 3-dot dropdown menu (per-app settings) ───────────────────────── */
.app-shell-menu {
  position: absolute; top: 42px; right: 10px; z-index: 60;
  min-width: 180px; background: var(--gray-900);
  border: 2px solid var(--white); box-shadow: 0 8px 28px rgba(0,0,0,0.55);
}
.app-shell-menu[hidden] { display: none; }
.app-shell-menu button {
  display: block; width: 100%; text-align: left;
  padding: 12px 16px; background: none; border: none;
  border-bottom: 1px solid var(--gray-700); color: var(--white);
  font-family: var(--font-mono); font-size: 0.72rem; letter-spacing: 0.04em;
  text-transform: uppercase; cursor: pointer;
}
.app-shell-menu button:last-child { border-bottom: none; }
.app-shell-menu button:hover { background: var(--gray-800); }
.app-shell-menu button.danger { color: var(--accent); }

/* ── body slot — the app renders here ─────────────────────────────────
   A flex column that fills the space between the bars (same context the
   old per-app sections gave). Apps own their own scroll region inside it. */
.app-shell-body { flex: 1 1 0%; min-height: 0; display: flex; flex-direction: column; overflow: hidden; position: relative; }

/* ── bottom row ~44px — ALWAYS the [◀ NOIDCHAT] exit; tab slots only at
   root (legacy mode, or new-mode root). Drilled = exit only. ─────────── */
.app-shell-nav {
  display: flex; align-items: stretch; flex-shrink: 0; min-height: 44px; z-index: 20;
  border-top: 2px solid var(--white); background: var(--gray-900);
  padding-bottom: env(safe-area-inset-bottom);
}
.app-shell-nav button {
  flex: 1; background: none; border: none; border-right: 2px solid var(--gray-700);
  color: var(--gray-400); display: flex; flex-direction: row;
  align-items: center; justify-content: center; gap: 6px; cursor: pointer;
  min-height: 44px; padding: 0 6px;
  font-family: var(--font-mono); font-size: 0.56rem; font-weight: 600;
  letter-spacing: 0.08em; text-transform: uppercase;
  border-top: 2px solid transparent;   /* reserve space for the active underline */
  transition: color var(--transition-fast);
}
.app-shell-nav button:last-child { border-right: none; }
.app-shell-nav button svg { width: 18px; height: 18px; stroke: currentColor; stroke-width: 2; fill: none; }
/* active tab — the ONLY orange accent in the bottom row: a 2px underline */
.app-shell-nav button.active { color: var(--white); box-shadow: inset 0 -2px 0 0 var(--accent); }
.app-shell-nav button:active { color: var(--white); }
/* NoidChat anchor — always first, always accent so "leave to chat" reads instantly */
.app-shell-nav .app-shell-anchor { color: var(--accent); }
.app-shell-nav .app-shell-anchor svg { stroke: var(--accent); }
.app-shell-nav .app-shell-anchor.active { box-shadow: none; }

/* ── Apps-tab v2 — featured hero + per-app brand identity (Faith, 2026-06-11)
   Brand color arrives as inline --brand / --brand-tint / --brand-soft custom
   props set by miniapps.js from registry brand.color — no per-app CSS here.
   The old .ma-rcard.hot glow (leftover "#1 this week" flag) is gone; featuring
   is now the designed hero below, picked by the registry "hero" key. */
.ma-hero { display: block; width: 100%; position: relative; margin-top: 12px; text-align: left; cursor: pointer; color: inherit; border: 2px solid var(--gray-700, #2a2a2a); padding: 18px 124px 18px 18px; overflow: hidden; background: var(--gray-900, #171717); min-height: 150px; }
@media (max-width: 480px) { .ma-hero { padding-right: 96px; } .ma-hero-art { right: 8px; } .ma-hero-art svg { width: 68px; height: 68px; } }
.ma-hero:active { transform: scale(0.99); }
.ma-hero-badge { display: inline-block; font-family: var(--font-mono); font-size: 0.52rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; background: var(--brand, var(--accent)); color: var(--gray-900); padding: 4px 8px; }
.ma-hero-art { position: absolute; right: 10px; top: 12px; opacity: 0.92; color: var(--white, #DEDEDE); }
.ma-hero-art svg { width: 92px; height: 92px; stroke: var(--white, #DEDEDE); fill: none; stroke-width: 2; }
.ma-hero-title { font-family: var(--font-display); font-size: 1.9rem; font-weight: 900; text-transform: uppercase; letter-spacing: -0.03em; line-height: 0.9; color: var(--white); margin-top: 26px; }
.ma-hero-sub { font-family: var(--font-mono); font-size: 0.6rem; color: var(--gray-300); text-transform: uppercase; letter-spacing: 0.06em; margin-top: 7px; }
.ma-hero-cta { margin-top: 11px; display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-mono); font-size: 0.6rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--brand, var(--accent)); border: 1px solid var(--brand, var(--accent)); padding: 6px 12px; background: rgba(0,0,0,.3); }

/* UNIFIED FLAT ICON TILES (Faith, 2026-06-16) — ignore per-app brand.color
   for the glyph so every app reads as one monoline family. No brand rail, no
   brand-tinted fill: flat #171717 tile, 2px #2a2a2a border, #DEDEDE stroke.
   Orange is reserved for active/recent/new only (rules below). */
.ma-rc-ic.brd { border-color: var(--gray-700, #2a2a2a); color: var(--white); background: var(--gray-900, #171717); }
.ma-rc-ic.sld svg { fill: currentColor; stroke: none; width: 20px; height: 20px; }
.ma-app-ic.brd { border-color: var(--gray-700, #2a2a2a); color: var(--white); background: var(--gray-900, #171717); }
.ma-app-ic.sld svg { fill: currentColor; stroke: none; }

/* Uniform monoline glyph render — every app icon strokes #DEDEDE regardless of
   brand.color (Agent B ships per-app monoline SVGs; this renders them as one
   family). solid-fill glyphs (.sld) keep currentColor=#DEDEDE. */
.miniapp-icon svg,
.ma-rc-ic svg,
.ma-app-ic svg { stroke: var(--white, #DEDEDE); fill: none; stroke-width: 2; }
.ma-rc-ic.sld svg, .ma-app-ic.sld svg, .miniapp-icon .sld svg { fill: var(--white, #DEDEDE); stroke: none; }

/* STATE = the only orange. active/recent → orange glyph + orange border.
   NEW → a 6px orange square notch, top-right. */
.ma-rc-ic.is-active, .ma-rc-ic.is-recent,
.ma-app-ic.is-active, .ma-app-ic.is-recent,
.miniapp-icon.is-active, .miniapp-icon.is-recent { border-color: var(--accent, #F25623); }
.ma-rc-ic.is-active svg, .ma-rc-ic.is-recent svg,
.ma-app-ic.is-active svg, .ma-app-ic.is-recent svg,
.miniapp-icon.is-active svg, .miniapp-icon.is-recent svg { stroke: var(--accent, #F25623); }
.ma-rc-ic.is-active.sld svg, .ma-rc-ic.is-recent.sld svg,
.ma-app-ic.is-active.sld svg, .ma-app-ic.is-recent.sld svg { fill: var(--accent, #F25623); stroke: none; }
.ma-rc-ic.is-new, .ma-app-ic.is-new, .miniapp-icon.is-new { position: relative; }
.ma-rc-ic.is-new::after, .ma-app-ic.is-new::after, .miniapp-icon.is-new::after {
  content: ""; position: absolute; top: -2px; right: -2px;
  width: 6px; height: 6px; background: var(--accent, #F25623);
}

/* numbered rack headers */
.ma-sec-label .idx { font-family: var(--font-mono); font-size: 0.6rem; font-weight: 700; color: var(--gray-500); margin-right: 7px; letter-spacing: 0.1em; }

/* request strip (bottom of the tab) */
.ma-reqstrip { width: 100%; margin-top: 10px; border: 1px dashed var(--gray-600); background: none; padding: 13px; display: flex; align-items: center; justify-content: center; gap: 9px; cursor: pointer; color: inherit; }
.ma-reqstrip .ma-plus-glyph { font-size: 1rem; }
.ma-reqstrip span:last-child { font-family: var(--font-mono); font-size: 0.5rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: var(--gray-400); }

/* searching: hero + request strip get out of the way */
#miniapp-scroll.searching .ma-hero, #miniapp-scroll.searching .ma-reqstrip { display: none; }
