/* ==========================================================================
   SolTerm « pro » — applique DESIGN.md. Chargé en dernier : il remplace les tokens et
   neutralise les effets décoratifs (dégradés, halos, verre) au profit d'une interface de
   trading sobre et dense, façon Axiom. Les données passent avant le décor.
   ========================================================================== */
:root {
  --ground: #0b0b0e;
  --surface: #121317;
  --raised: #1a1b21;
  --border: #23242c;
  --rule: #1c1d24;
  --control: #2c2d36;
  --text: #ececf1;
  --muted: #8e909c;
  --faint: #5d5f6b;
  --primary: #6d6af8;
  --primary-tint: rgba(109, 106, 248, 0.14);
  --accent: var(--primary);
  --accent2: var(--primary);
  --positive: #22c983;
  --negative: #f0466b;
  --warning: #f2b53c;
  --pos-tint: rgba(34, 201, 131, 0.12);
  --neg-tint: rgba(240, 70, 107, 0.12);
  --warn-tint: rgba(242, 181, 60, 0.12);
  --grad: var(--primary);
  --grad-soft: var(--primary-tint);
  --pill-positive-bg: var(--pos-tint); --pill-positive-ink: var(--positive);
  --pill-negative-bg: var(--neg-tint); --pill-negative-ink: var(--negative);
  --pill-warning-bg: var(--warn-tint); --pill-warning-ink: var(--warning);
  --pill-neutral-bg: var(--raised); --pill-neutral-ink: var(--muted);
  --shadow: none;
  --float: 0 16px 40px rgba(0, 0, 0, 0.55);
  --radius-card: 10px;
  --radius-chip: 6px;
  --rail: 60px;
  --header: 56px;
}

body { background: var(--ground); }
.bg-glow { display: none; }
::selection { background: rgba(109, 106, 248, 0.35); }
:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }

/* ---------- panneaux : aplat + bordure, pas de verre, pas de liseré lumineux ---------- */
.pcol, .dtable, .tk-left, .tk-right, .card, .htable, .kpis, .tr-wallets, .tr-feed, .rw-banner, .wv-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-card);
  box-shadow: none;
}
.pcol::before, .dtable::before, .tk-left::before, .tk-right::before, .htable::before, .kpis::before, .tr-feed::before, .tr-wallets::before, .modal::before, .wv-card::before { display: none; }
.modal, .menu, .toast, .disp-pop, .instant, .bub-tip { background: #15161b; -webkit-backdrop-filter: none; backdrop-filter: none; border: 1px solid var(--border); box-shadow: var(--float); }
.modal { border-radius: 12px; }
.overlay { background: rgba(0, 0, 0, 0.6); -webkit-backdrop-filter: none; backdrop-filter: none; }
.drow.head, .trow.head, .sg-row.head, .wrow.head { background: var(--surface); }

/* ---------- titres : texte plein, pas de dégradé ---------- */
.product, .page-head h1, .tabs button.on, .tk-stat.big .v, .cal-brand {
  background: none;
  -webkit-background-clip: border-box;
  background-clip: border-box;
  color: var(--text);
}
.product { font: 700 16px/1 var(--font); letter-spacing: -0.02em; }
.page-head { padding: 18px 20px 14px; gap: 12px; }
.page-head h1 { font: 600 20px/1.2 var(--font); letter-spacing: -0.02em; }
.tabs { gap: 18px; }
.tabs button { font: 600 15px/1.2 var(--font); letter-spacing: -0.01em; }
.section-title { font: 600 15px/1.3 var(--font); margin: 8px 0 -4px; }
.modal h2 { font: 600 17px/1.3 var(--font); }
.pcol-head h3 { font: 600 14px/1 var(--font); }
.tk-name .sym { font: 700 20px/1 var(--font); }
.tk-stat.big .v { font: 600 24px var(--mono); }
.hint { color: var(--faint); }

/* ---------- rail, en-tête, barre d'état ---------- */
.side { background: var(--ground); border-right: 1px solid var(--border); -webkit-backdrop-filter: none; backdrop-filter: none; }
.brand { background: none; box-shadow: none; }
.nav a { width: 40px; height: 40px; border-radius: 8px; }
.nav a:hover { background: var(--raised); transform: none; }
.nav a.active { background: var(--raised); box-shadow: none; color: var(--text); }
.nav a.active::after { right: -10px; top: 10px; bottom: 10px; width: 2px; background: var(--primary); box-shadow: none; }
.header, .status { background: var(--ground); -webkit-backdrop-filter: none; backdrop-filter: none; }
body.paper .header { box-shadow: none; border-bottom-color: rgba(242, 181, 60, 0.45); }
.search-btn { background: var(--surface); border-color: var(--border); border-radius: 8px; }
.search-btn:hover { box-shadow: none; background: var(--raised); border-color: var(--control); }
.status .dot.on { box-shadow: none; }

/* ---------- boutons : un style par rôle ---------- */
.btn-primary, .btn.blue, .btn-blue-full { background: var(--primary); color: #fff; border: 0; box-shadow: none; border-radius: 8px; }
.btn-primary:hover, .btn.blue:hover, .btn-blue-full:hover { background: #7f7cff; transform: none; box-shadow: none; }
.btn-primary::after, .btn.blue::after, .btn-blue-full::after, .big-btn::after { display: none; }
.chip, .paper-toggle, .icon-btn, .btn, .qb-input, .hidden-toggle, .mcap-max, .flt-btn, .scan-btn, .disp-btn {
  background: transparent; border: 1px solid var(--border); border-radius: 8px; box-shadow: none;
}
.chip:hover, .icon-btn:hover, .btn:hover, .hidden-toggle:hover, .flt-btn:hover, .scan-btn:hover, .disp-btn:hover { background: var(--raised); border-color: var(--control); color: var(--text); }
.flt-btn.on { background: var(--primary-tint); border-color: rgba(109, 106, 248, 0.45); color: var(--text); }
.big-btn { height: 44px; border-radius: 8px; font-size: 14px; box-shadow: none; }
.big-btn:hover { filter: brightness(1.08); transform: none; }
.big-btn.buy { background: var(--positive); color: #04130c; box-shadow: none; }
.big-btn.sell { background: var(--negative); color: #fff; box-shadow: none; }
body.paper .big-btn.buy { background: var(--warning); color: #1a1204; }
.qbuy { height: 26px; border-radius: 999px; border: 1px solid var(--control); background: var(--raised); color: var(--text); }
.qbuy svg { color: var(--primary); }
.qbuy:hover { background: var(--primary); border-color: var(--primary); color: #fff; box-shadow: none; }
.qbuy:hover svg { color: #fff; }
.scan-btn { height: 26px; border-radius: 999px; font-size: 11px; color: var(--muted); }
.amts button { border-radius: 8px; background: transparent; border-color: var(--border); }
.amts button:hover { transform: none; border-color: var(--control); background: var(--raised); }
.amts button.on { background: var(--primary-tint); border-color: var(--primary); box-shadow: none; }
.field, .fee-edit label { background: var(--raised); border-color: var(--border); border-radius: 8px; }
.field:focus-within, .fee-edit label:focus-within { border-color: var(--primary); box-shadow: none; }
.switch.on { background: var(--positive); box-shadow: none; }
.it-presets button.on, .wv-ranges button.on, .mw-row.on, .flt-chip.on { background: var(--primary-tint); box-shadow: inset 0 0 0 1px rgba(109, 106, 248, 0.45); }

/* ---------- onglets et filtres : un seul style (texte + soulignement 2 px) ---------- */
.seg button.on::after, .tabs button.on::after, .tk-tabs > button.on::after, .bs button.on::after, .drow.head button.on::after, .col-filter.on::after, .status .pp button.on::after, .flt-tabs button.on::after {
  height: 2px; border-radius: 2px; background: var(--primary); box-shadow: none;
}

/* ---------- badges : neutres, couleur seulement pour un signal ---------- */
.bdg, .shield { height: 20px; padding: 0 6px; border: 0; border-radius: 6px; background: var(--raised); color: var(--muted); font-weight: 500; }
.bdg.good, .shield.good { background: var(--pos-tint); color: var(--positive); border: 0; }
.bdg.bad, .shield.bad { background: var(--neg-tint); color: var(--negative); border: 0; }
.bdg.warn, .shield.mid { background: var(--warn-tint); color: var(--warning); border: 0; }

/* ---------- Pulse : dense, lignes séparées comme Axiom ---------- */
.pulse-grid { gap: 12px; padding: 0 20px 20px; }
.pcol { border-radius: var(--radius-card); }
.pcol-head { height: 44px; padding: 0 14px; border-bottom: 1px solid var(--border); }
.pcol-head .dot { animation: none; box-shadow: none; width: 6px; height: 6px; }
.pcol-head .count { background: var(--raised); font-size: 11px; }
.pcard { margin: 0; border-radius: 0; padding: 10px 12px; gap: 10px; grid-template-columns: 44px minmax(0, 1fr) auto; border: 0; border-bottom: 1px solid var(--rule); }
.pcard:hover { background: var(--raised); transform: none; box-shadow: none; border-color: var(--rule); }
.pcard.enter { animation: newRow 1.2s ease-out; }
@keyframes newRow { from { background: var(--primary-tint); } to { background: transparent; } }
.pcard .av { width: 44px; height: 44px; }
.pcard .av img, .pcard .av .ph { border-radius: 8px; }
.av.ring::before { border-radius: 10px; inset: -2px; padding: 1.5px; }
.pc-main { gap: 4px; }
.pc-l1 .sym { font-size: 14px; }
.pc-l2 { gap: 8px; font-size: 12px; }
.pc-l3 { flex-wrap: nowrap; overflow: hidden; gap: 4px; mask-image: linear-gradient(90deg, #000 85%, transparent); -webkit-mask-image: linear-gradient(90deg, #000 85%, transparent); }
.pc-curve { display: none; }
.pc-r { gap: 1px; font-size: 12px; }
.pc-r .mc b { font-size: 14px; }
.pc-r .mc b.flash-up, .pc-r .mc b.flash-down, .tk-stat .v.flash-up, .tk-stat .v.flash-down { text-shadow: none; }
.pc-acts { margin-top: 4px; gap: 4px; }

/* ---------- tableaux ---------- */
.dtable { margin: 0 20px 20px; }
.drow { min-height: 56px; }
.drow.item:hover, .frow:hover, .drow2:hover, .wrow.item:hover { background: var(--raised); }
.pair .av img, .pair .av .ph { border-radius: 8px; }

/* ---------- page token ---------- */
.tk { gap: 12px; padding: 0 20px 20px; }
.tk-left, .tk-right { border-radius: var(--radius-card); }
.tk-id .av img, .tk-id .av .ph { border-radius: 8px; }
.live-pill i { animation: none; box-shadow: none; }
.trow.new, .trow.new.buy, .trow.new.sell { animation: none; }
.score-ring::before { filter: none; }
.prog i { background: var(--primary); box-shadow: none; }
.pnl-hero.win .pnl-pct, .pnl-hero.loss .pnl-pct { text-shadow: none; }
.ps-grid { border-radius: 8px; }

/* ---------- portefeuille, automatisations, wallet ---------- */
.kpis { border-radius: var(--radius-card); }
.sn-hero { border-radius: 8px; background: var(--raised); }
.sn-hero.on { background: var(--pos-tint); border-color: rgba(34, 201, 131, 0.3); }
.sn-hero.on .sn-orb i { animation: none; }
.cal-day.win b { color: var(--positive); }
.wv-ratio i { box-shadow: none; }

/* ---------- états vides : icône, phrase, action ---------- */
.empty-state { padding: 40px 20px; color: var(--muted); font-size: 13px; line-height: 1.6; }
.empty-state::before { content: ""; display: block; width: 36px; height: 36px; margin: 0 auto 12px; border-radius: 10px; background: var(--raised) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238e909c' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 12h4l2-6 4 12 2-6h6'/%3E%3C/svg%3E") center / 18px no-repeat; }
.empty-state:has(.loader)::before { display: none; }

/* ---------- toasts, animations d'entrée ---------- */
.toast { border-radius: 10px; }
.toast.ok, .toast.err { box-shadow: var(--float); }
.page > *, .pulse-grid > .pcol, .tk > *, .tr-grid > *, .pf > * { animation: none; }
.cursor-blink { animation: none; }

/* Avatar : initiale du token en fond tant que l'image (CDN pump.fun, parfois lent) n'est pas arrivée */
.av { background: transparent; }
.av::after { content: attr(data-l); position: absolute; inset: 0; z-index: 0; display: grid; place-items: center; border-radius: 8px; background: var(--raised); color: var(--muted); font: 600 15px var(--font); }
.av img, .av .ph { position: relative; z-index: 1; }
.av .lp { z-index: 2; }
.av.ring::before { z-index: 2; }
.av img { background: transparent; }

/* ---------- téléphone : en-tête compact, aucune barre de défilement horizontale ---------- */
@media (max-width: 820px) {
  .header { gap: 8px; padding: 0 12px; overflow: hidden; }
  .hright { gap: 6px; min-width: 0; }
  .instant-btn, #walChip { font-size: 0; gap: 0; padding: 0 9px; }
  .instant-btn svg, #walChip svg { margin: 0; }
  #walChip .i:last-child { display: none; }
  .hright .ptag { display: none; }
  .btn-primary { padding: 0 12px; }
  .page-head { padding: 14px 12px 10px; }
  .pulse-grid, .tk, .tr-grid, .sn-grid { padding: 0 12px 12px; }
  .dtable { margin: 0 12px 12px; }
}
@media (max-width: 820px) {
  #balChip .ptag, #balChip [class*="ptag"] { display: none; }
  #balChip { padding: 0 9px; }
  .paper-toggle { padding: 0 8px; }
  .product { font-size: 15px; }
}
.hright > * { flex: none; white-space: nowrap; }
@media (max-width: 820px) {
  .product { display: none; }
  .btn-primary { padding: 0 10px; font-size: 12px; }
}

/* ==========================================================================
   Identité « Solar » (DESIGN.md) : ambre solaire sur encre bleu nuit, titres en Sora,
   étiquettes façon terminal, grille de points. Ce bloc prime sur tout ce qui précède.
   ========================================================================== */
:root {
  --ground: #0a0d13;
  --surface: #10141c;
  --raised: #171d28;
  --border: #1e2633;
  --rule: #161c27;
  --control: #283243;
  --text: #eef1f6;
  --muted: #8d97a8;
  --faint: #5a6476;
  --primary: #f5a524;
  --primary-ink: #1a1204;
  --primary-tint: rgba(245, 165, 36, 0.13);
  --positive: #2fd393;
  --negative: #ff5d6c;
  --paper: #a48bff;
  --paper-tint: rgba(164, 139, 255, 0.14);
  --warning: #ffd166;
  --pos-tint: rgba(47, 211, 147, 0.12);
  --neg-tint: rgba(255, 93, 108, 0.12);
  --warn-tint: rgba(255, 209, 102, 0.12);
  --display: "Sora", "Inter", system-ui, sans-serif;
}

/* fond : grille de points façon papier de terminal + une seule lueur solaire discrète */
body {
  background:
    radial-gradient(900px 500px at -5% -10%, rgba(245, 165, 36, 0.07), transparent 60%),
    radial-gradient(rgba(255, 255, 255, 0.045) 1px, transparent 1px) 0 0 / 24px 24px,
    var(--ground);
  background-attachment: fixed;
}
::selection { background: rgba(245, 165, 36, 0.3); }

/* titres : Sora, la voix de la marque */
.page-head h1, .tabs button, .pcol-head h3, .card h4, .modal h2, .tk-name .sym, .wv-name, .sn-state, .section-title, .cal-head b, .flt-head h2 { font-family: var(--display); letter-spacing: -0.02em; }
.page-head h1 { font-weight: 700; font-size: 21px; }
.product { font: 700 17px/1 var(--display); letter-spacing: -0.03em; }
.product b { color: var(--primary); font-weight: 700; }

/* étiquettes de section façon terminal */
.drow.head, .trow.head > span, .wrow.head, .hrow.head > div, .sg-row.head > span, .kpi .l, .tk-stat .l, .ps-cell .l, .it-stats span, .pc-r .lbl, .label, .wv-card .l, .disp-col h6, .sc-sec h5 {
  font-family: var(--mono); font-size: 10.5px; font-weight: 500; letter-spacing: 0.08em; text-transform: uppercase; color: var(--faint);
}
.drow.head button { text-transform: uppercase; letter-spacing: 0.08em; }
.label { color: var(--muted); }

/* actions : ambre, texte sombre */
.btn-primary, .btn.blue, .btn-blue-full { background: var(--primary); color: var(--primary-ink); font-weight: 600; }
.btn-primary:hover, .btn.blue:hover, .btn-blue-full:hover { background: #ffb73d; }
.qbuy svg { color: var(--primary); }
.qbuy:hover { background: var(--primary); border-color: var(--primary); color: var(--primary-ink); }
.qbuy:hover svg { color: var(--primary-ink); }
.amts button.on { background: var(--primary-tint); border-color: var(--primary); }
.flt-btn.on { background: var(--primary-tint); border-color: rgba(245, 165, 36, 0.5); }
.it-presets button.on, .wv-ranges button.on, .mw-row.on, .flt-chip.on { background: var(--primary-tint); box-shadow: inset 0 0 0 1px rgba(245, 165, 36, 0.5); }
.seg button.on::after, .tabs button.on::after, .tk-tabs > button.on::after, .bs button.on::after, .drow.head button.on::after, .col-filter.on::after, .status .pp button.on::after, .flt-tabs button.on::after { background: var(--primary); }
.nav a.active { color: var(--primary); background: var(--primary-tint); }
.nav a.active::after { background: var(--primary); }
.instant-btn svg, .tk-bell:hover { color: var(--primary); }
.pcard.enter { animation: newRowSolar 1.2s ease-out; }
@keyframes newRowSolar { from { background: rgba(245, 165, 36, 0.1); } to { background: transparent; } }
.prog i { background: var(--primary); }
.empty-state::before { background-color: var(--raised); }

/* mode paper : violet, pour ne jamais se confondre avec l'ambre de la marque */
body.paper .header { border-bottom-color: rgba(164, 139, 255, 0.45); }
body.paper .paper-toggle { color: var(--paper); border-color: rgba(164, 139, 255, 0.55); background: var(--paper-tint); }
body.paper .paper-toggle .sw { background: var(--paper); }
.ptag { color: var(--paper); background: var(--paper-tint); }
.paper-flag { color: var(--paper); }
body.paper .big-btn.buy { background: var(--paper); color: #140d2e; }
.kpi.paper .l::after { color: var(--paper); }
.brand .cursor-blink { animation: blink 1.1s steps(1) infinite; }
@keyframes blink { 50% { opacity: 0; } }
