/* r90 (2026-08-29): every sub-12px !important in this file lifted to the 12px
   floor. The only sanctioned sub-12px text on the site is SVG chart-axis
   furniture (.fx-ax/.fx-reftx/.lz-lab via --fs-axis), which lives in the
   pages, not here. Count lifted in this pass: 12. */
/* FlowAlpha Typography V2 — visibly different institutional terminal system */
/* FONTS ARE LOADED BY THE PAGE, NOT BY THIS FILE (2026-09-07, F10).
   The @import that stood here was render-blocking AND chained: the browser had to
   fetch this stylesheet, parse it, discover the import, then open a THIRD-PARTY
   request before it could paint. Measured ABBA over 6 samples per arm, blocking the
   imported URL: it cost 94 ms of FCP on desktop and 154 ms on mobile, on all 36 pages
   that load this file. It was also pure duplication — every page here already carries
   <link rel=preload as=style> + <link rel=stylesheet media=print onload=this.media='all'>
   for the same three families, non-blocking, and that link's weight list is a SUPERSET
   (it adds IBM Plex Mono 700), so nothing is lost. The only two pages that load this
   file without that head link — api-docs.html and technical-analysis.html — are instant
   redirect stubs (meta refresh + location.replace) that never paint.
   TO REVERT: restore the single @import line below this comment. */

:root{
  --fa-display:'Manrope','Arial Narrow',Arial,sans-serif;
  --fa-ui:'Inter Tight','Arial Narrow',Arial,sans-serif;
  --fa-data:'IBM Plex Mono','IBM Plex Mono',Consolas,monospace;
  --font-sans:var(--fa-ui);
  --font-disp:var(--fa-display);
  --font-mono:var(--fa-data);
  --font:var(--fa-ui);
  --mono:var(--fa-data);
}

html,body{font-family:var(--fa-ui)!important;font-optical-sizing:auto!important;font-synthesis:none!important;}
body{font-size:13px!important;line-height:1.42!important;letter-spacing:-.012em!important;}
body *{font-family:inherit;}

/* Display hierarchy — unmistakably new */
h1,h2,h3,h4,h5,h6,
.page-title,.hero-title,.section-title,.panel-title,.card-title,.modal-title,
.title,.heading,.headline,.sn-name,.fa-wordmark,.brand-name,.logo-text{
  font-family:var(--fa-display)!important;
  text-wrap:balance;
}
h1,.hero-title,.page-title{
  font-size:clamp(28px,3vw,42px)!important;
  font-weight:800!important;
  line-height:1.02!important;
  letter-spacing:-.055em!important;
}
h2,.section-title{
  font-size:clamp(21px,2vw,29px)!important;
  font-weight:750!important;
  line-height:1.08!important;
  letter-spacing:-.045em!important;
}
h3,.panel-title,.card-title,.modal-title{
  font-weight:700!important;
  line-height:1.14!important;
  letter-spacing:-.032em!important;
}
h4,h5,h6{font-weight:700!important;letter-spacing:-.025em!important;}
.sn-name,.fa-wordmark,.brand-name,.logo-text{font-weight:800!important;letter-spacing:-.045em!important;}

/* Navigation and controls */
a,button,input,select,textarea,label,.btn,.nav-item,.sn-item,.tab,.pill,.chip,.seg,.filter-pill{
  font-family:var(--fa-ui)!important;
}
.nav-item,.sn-item{font-size:13px!important;font-weight:600!important;letter-spacing:-.016em!important;}
button,.btn,.tb-btn,[role='button']{font-weight:700!important;letter-spacing:-.018em!important;}
input,select,textarea{font-weight:500!important;letter-spacing:-.012em!important;}

/* Micro labels: condensed terminal voice */
/* r90 (2026-08-29): this rule was the site's LAST uppercase generator and it
   BEAT graphite.css's no-caps kill — graphite loads first, so its
   `html body *{text-transform:none!important}` lost to this later !important.
   That is why every table header still rendered in caps despite the no-caps
   rule being in force since 2026-08-01. It also pinned 10.5px, under the 12px
   floor. Both fixed; `th` split out because a column header is a LABEL (muted,
   weight 400) not a heading — Ibrahim's scoped exception, h1/h2/h3 stay >=800. */
.rail-h,.sn-group,.eyebrow,.kicker,.overline,.section-kicker,
.label,.meta-label,.field label{
  font-family:var(--fa-ui)!important;
  font-size:12px!important;
  font-weight:600!important;
  line-height:1.25!important;
  letter-spacing:.01em!important;
  text-transform:none!important;
}
thead th,.tbl th,.table-head{
  font-family:var(--fa-ui)!important;
  font-size:12px!important;
  font-weight:400!important;
  line-height:1.25!important;
  letter-spacing:0!important;
  text-transform:none!important;
  color:var(--text-5,#7C8494)!important;
}

/* Market values: explicitly mono. Avoid applying mono to all table cells. */
.mono,code,pre,kbd,samp,
[class*='price'],[class*='amount'],[class*='value'],[class*='metric'],
[class*='percent'],[class*='pct'],[class*='delta'],[class*='change'],
[class*='score'],[class*='ratio'],[class*='volume'],[class*='count'],
[class*='time'],[class*='date'],.clock,.kpi-value,.stat-value,.ticker-price,
td.num,td.numeric,td[data-value],.nav-badge{
  font-family:var(--fa-data)!important;
  font-variant-numeric:tabular-nums slashed-zero!important;
  font-feature-settings:'tnum' 1,'zero' 1!important;
  letter-spacing:-.035em!important;
}

/* Tables: labels are UI, numeric content aligns like a terminal */
thead th,.tbl th{color:var(--text-5,#7C8494)!important;}
tbody td,.tbl td{font-size:12px!important;font-weight:500!important;line-height:1.3!important;letter-spacing:-.014em!important;}
tbody td:not(:first-child),.tbl td:not(:first-child){font-variant-numeric:tabular-nums!important;}
tbody td:first-child,.tbl td:first-child,.symbol,.ticker,.asset-name,.coin-name,.name-cell{
  font-family:var(--fa-ui)!important;font-weight:650!important;letter-spacing:-.018em!important;
}

/* Body copy gets more breathing room and stronger contrast hierarchy */
p,.card-desc,.section-sub,.subtitle,.sub,.description,.help,.hint,.caption,.legal p,.legal li{
  font-family:var(--fa-ui)!important;
  letter-spacing:-.012em!important;
  line-height:1.62!important;
}
.section-sub,.subtitle,.description{font-size:14px!important;}
.meta,.caption,.hint,.help{font-size:12px!important;}

/* Important: undo old global Roboto locks */
.fa-foot,.fa-foot *,svg text,.apexcharts-text,.highcharts-text{
  font-family:var(--fa-ui)!important;
}

@media(max-width:900px){
  h1,.hero-title,.page-title{font-size:28px!important;}
  h2,.section-title{font-size:21px!important;}
  body{font-size:12.75px!important;}
}

/* ========================================================================== */
/* V3 — complete component typography + compact TA / Pattern filter rails      */
/* ========================================================================== */

/* Keep human-readable identifiers in the UI family, not legacy monospace. */
.tile-sym,.tile-base,.tile-tf,.tile-tf-inline,.tile-setup-pill,
.tile-foot,.tile-foot-l,.tile-foot-l b,.foot-word,
.ss-sym,.ss-tf,.ss-setup,.ss-state,.ss-meta,
.setup-pill,.setup-cap,.setup-cap b,.setup-cap .sc-k,
.pattern-name,.pattern-title,.pattern-label,.setup-name,.signal-name,
.asset-name,.coin-name,.symbol-name,.pair-name,.ticker,.symbol,
.card-symbol,.card-pair,.card-timeframe,.card-setup,.card-meta,
.detected-on .do-lbl,.tf-chip,.exch-badge,.exch-chip,
.grid-meta,.grid-sort,.grid-sort select,.pag button,
.cm-title,.tile-pl-lbl,.tile-pl-val{
  font-family:var(--fa-ui)!important;
  font-optical-sizing:auto!important;
  font-synthesis:none!important;
}

/* Coin and pattern names: clearly legible and aligned across every card. */
.tile-sym,.ss-sym,.asset-name,.coin-name,.symbol-name,.pair-name,
.card-symbol,.card-pair,.pattern-name,.pattern-title,.setup-name,.signal-name{
  font-weight:700!important;
  letter-spacing:-.025em!important;
  line-height:1.15!important;
}
.tile-sym{font-size:15px!important;}
.tile-base{font-size:12px!important;font-weight:600!important;letter-spacing:.035em!important;}
.tile-tf,.tile-tf-inline,.ss-tf,.card-timeframe,.tf-chip{
  font-size:12px!important;
  font-weight:700!important;
  line-height:1!important;
  letter-spacing:.015em!important;
  text-transform:none!important;
}
.tile-setup-pill,.ss-setup,.card-setup,.setup-pill{
  font-size:12px!important;
  font-weight:600!important;
  line-height:1.2!important;
  letter-spacing:-.012em!important;
  text-transform:none!important;
}

/* Footer/meta copy, including “Spotted … ago”, now uses the same UI typeface. */
.tile-foot,.tile-foot *,.ss-meta,.card-meta,
[class*='spotted'],[class*='detected'],[class*='updated'],[class*='ago']{
  font-family:var(--fa-ui)!important;
  font-size:12px!important;
  font-weight:500!important;
  letter-spacing:-.006em!important;
  line-height:1.2!important;
}
.tile-foot-l b{font-weight:600!important;}

/* Numeric values remain terminal-aligned, but labels around them stay Inter Tight. */
.tile-pl-val,[class*='entry-value'],[class*='peak-value'],[class*='pnl-value'],
[class*='price-value'],[class*='volume-value'],[data-value]{
  font-family:var(--fa-data)!important;
  font-variant-numeric:tabular-nums slashed-zero!important;
}

/* Chart/SVG labels generated in-page. (Raster snapshot text cannot be restyled.) */
svg text,svg tspan,.apexcharts-text,.highcharts-text,.highcharts-axis-labels text,
.highcharts-data-label text,.plotly text{
  font-family:var(--fa-ui)!important;
  font-weight:500!important;
  letter-spacing:-.01em!important;
}

/* TA Board and Pattern Board filter rail: larger labels, much tighter rhythm. */
body .filters{
  padding-top:16px!important;
  padding-right:12px!important;
  padding-bottom:16px!important;
  padding-left:12px!important;
}
body .filters .rail-section{
  margin-bottom:12px!important;
}
body .filters .rail-h{
  font-family:var(--fa-ui)!important;
  font-size:12px!important;
  font-weight:700!important;
  line-height:1.15!important;
  letter-spacing:.035em!important;
  text-transform:none!important;
  padding:0 5px!important;
  margin-bottom:5px!important;
  color:var(--text-2,#aab1bc)!important;
}
body .filters .rail-opt{
  min-height:28px!important;
  padding:4px 8px!important;
  margin-bottom:1px!important;
  gap:6px!important;
  border-radius:6px!important;
  font-family:var(--fa-ui)!important;
  font-size:12.5px!important;
  font-weight:550!important;
  line-height:1.2!important;
  letter-spacing:-.014em!important;
}
body .filters .rail-opt-l{
  gap:6px!important;
  font-family:var(--fa-ui)!important;
  font-size:inherit!important;
  font-weight:inherit!important;
  line-height:inherit!important;
}
body .filters .rail-opt.active{font-weight:700!important;}
body .filters .rail-count{
  min-width:22px!important;
  padding:1px 5px!important;
  font-family:var(--fa-data)!important;
  font-size:12px!important;
  font-weight:600!important;
  line-height:1.35!important;
  letter-spacing:-.025em!important;
  text-align:center!important;
}
body .filters .rail-search{
  height:32px!important;
  padding:6px 9px!important;
  margin-bottom:0!important;
  font-family:var(--fa-ui)!important;
  font-size:12px!important;
  font-weight:500!important;
  line-height:1.2!important;
  letter-spacing:-.012em!important;
}
body .filters .rail-mark{width:13px!important;height:13px!important;}
body .filters .rail-mark svg,
body .filters .rail-opt-l svg{width:11px!important;height:11px!important;}

/* Compact multi-option groups without shrinking their text. */
body .filters [data-rail='tf'] .rail-opt,
body .filters [data-rail='state'] .rail-opt,
body .filters [data-rail='bias'] .rail-opt,
body .filters [data-rail='setup'] .rail-opt,
body .filters [data-rail='exchange'] .rail-opt{
  margin-bottom:0!important;
}

/* Consistent card header vertical alignment. */
.tile-head-row1,.tile-head-row2,.ss-id,.card-header,.signal-header{
  align-items:center!important;
}
.tile-head-body{gap:4px!important;}
.tile-head-row1{gap:6px!important;}
.tile-head-row2{gap:5px!important;}

@media(max-width:900px){
  body .filters .rail-opt{font-size:13px!important;min-height:30px!important;}
  body .filters .rail-h{font-size:12px!important;}
}

/* ========================================================================== */
/* V4 — final consistency pass: nav/filter parity, metric hierarchy, microcopy */
/* ========================================================================== */

:root{
  --fa-nav-size:13.5px;
  --fa-filter-size:13.5px;
  --fa-micro-size:12px;
  --fa-metric-label:13px;
  --fa-metric-value:19px;
}

/* A single baseline for both the global sidebar and secondary filter rail. */
.sn-item,.nav-item,.sidebar a,.sidebar button,
.sitenav a,.sitenav button,[class*='sidebar'] a,[class*='side-nav'] a{
  font-family:var(--fa-ui)!important;
  font-size:var(--fa-nav-size)!important;
  font-weight:600!important;
  line-height:1.25!important;
  letter-spacing:-.018em!important;
}
.sn-group,.nav-group,.sidebar-section-title,.side-section-title{
  font-family:var(--fa-ui)!important;
  font-size:12px!important;
  font-weight:700!important;
  line-height:1.2!important;
  letter-spacing:.045em!important;
}

body .filters .rail-h{
  font-size:12px!important;
  line-height:1.2!important;
  margin:0 0 4px!important;
  padding:0 6px!important;
}
body .filters .rail-opt,
body .filters .rail-opt-l{
  font-size:var(--fa-filter-size)!important;
  line-height:1.22!important;
  font-weight:600!important;
}
body .filters .rail-opt{
  min-height:27px!important;
  padding:3px 7px!important;
  margin:0!important;
  border-radius:6px!important;
}
body .filters .rail-section{margin-bottom:10px!important;}
body .filters .rail-count{
  font-size:12px!important;
  line-height:1.25!important;
  min-width:23px!important;
  padding:2px 5px!important;
}
body .filters .rail-search{
  height:34px!important;
  font-size:13px!important;
}

/* Card identifiers and supporting copy share one deliberate scale. */
.tile-sym,.ss-sym,.card-symbol,.card-pair,.asset-name,.coin-name,.symbol-name,.pair-name{
  font-size:15px!important;
  line-height:1.15!important;
  font-weight:700!important;
}
.tile-base,.quote-symbol,.pair-quote{
  font-size:12px!important;
  line-height:1.1!important;
  font-weight:600!important;
}
.tile-tf,.tile-tf-inline,.ss-tf,.tf-chip,.card-timeframe,
.tile-setup-pill,.ss-setup,.card-setup,.setup-pill,.pattern-name,.setup-name{
  font-family:var(--fa-ui)!important;
  font-size:12px!important;
  line-height:1.2!important;
  font-weight:600!important;
  letter-spacing:-.01em!important;
}

/* Price, Entry, Peak and P/L now form one aligned metric family. */
.tile-data{align-items:flex-start!important;gap:16px!important;}
.tile-price-lbl,.tile-level-lbl,.tile-pl-lbl,
.metric-label,.stat-label,.value-label,[class*='metric-label'],[class*='stat-label']{
  font-family:var(--fa-ui)!important;
  font-size:var(--fa-metric-label)!important;
  line-height:1.2!important;
  font-weight:600!important;
  letter-spacing:-.006em!important;
  text-transform:none!important;
  margin-bottom:5px!important;
}
.tile-price,.tile-level-val,.tile-level.entry .tile-level-val,
.tile-level.peak .tile-level-val,.tile-pl-val,
.metric-value,.stat-value,[class*='metric-value'],[class*='stat-value']{
  font-family:var(--fa-data)!important;
  font-size:var(--fa-metric-value)!important;
  line-height:1.05!important;
  font-weight:600!important;
  letter-spacing:-.035em!important;
  font-variant-numeric:tabular-nums slashed-zero!important;
}
.tile-levels{font-size:inherit!important;gap:20px!important;}
.tile-level{gap:2px!important;}
.tile-level-pct,.tile-level-dur{
  font-family:var(--fa-data)!important;
  font-size:12px!important;
  line-height:1.25!important;
}

/* Footer and tiny status text: no legacy font and no undersized outliers. */
.tile-foot,.tile-foot *,.ss-meta,.card-meta,.grid-meta,.grid-sort,
.pag,.pag button,.pag-meta,.results-meta,.resolved-meta,
[class*='spotted'],[class*='resolved'],[class*='detected'],[class*='updated'],[class*='ago'],
small,.small,.microcopy,.meta,.caption,.hint,.help{
  font-family:var(--fa-ui)!important;
  font-size:var(--fa-micro-size)!important;
  line-height:1.3!important;
  font-weight:500!important;
  letter-spacing:-.006em!important;
}
.tile-foot-l b,.pag-meta strong,.grid-meta strong{font-weight:600!important;}
.pag{gap:7px!important;padding-top:26px!important;}
.pag button{
  min-width:32px!important;
  height:32px!important;
  padding:5px 10px!important;
  font-weight:600!important;
}
.pag-meta{margin-left:10px!important;}

/* Inputs, chips and tabs use the same scale on every board/page. */
button,.btn,[role='button'],input,select,textarea,
.tab,.chip,.pill,.filter-pill,.seg,.badge{
  font-family:var(--fa-ui)!important;
}
.tab,.chip,.pill,.filter-pill,.seg,.badge{font-size:12px!important;line-height:1.2!important;}

/* Dynamic chart text that is SVG/DOM-based. Canvas charts were also migrated
   from Roboto/Roboto Mono to Inter Tight/IBM Plex Mono in the source files. */
svg text,svg tspan,.apexcharts-text,.highcharts-text,.plotly text{
  font-family:var(--fa-ui)!important;
}

@media(max-width:900px){
  :root{--fa-nav-size:14px;--fa-filter-size:14px;--fa-metric-value:18px;}
}

/* ========================================================================== */
/* V5 — filter/nav scale parity and final board typography normalization       */
/* ========================================================================== */

:root{
  --fa-filter-size:14.5px;
  --fa-filter-heading-size:13px;
  --fa-filter-count-size:11.5px;
  --fa-filter-search-size:14px;
}

/* The filter rail should visually belong to the same navigation system. */
html body .filters .rail-h{
  font-family:var(--fa-ui)!important;
  font-size:var(--fa-filter-heading-size)!important;
  font-weight:700!important;
  line-height:1.2!important;
  letter-spacing:-.008em!important;
  text-transform:none!important;
  margin:0 0 5px!important;
  padding:0 7px!important;
}
html body .filters .rail-opt,
html body .filters .rail-opt-l{
  font-family:var(--fa-ui)!important;
  font-size:var(--fa-filter-size)!important;
  font-weight:600!important;
  line-height:1.2!important;
  letter-spacing:-.018em!important;
}
html body .filters .rail-opt{
  min-height:30px!important;
  padding:5px 8px!important;
  margin:0!important;
  gap:7px!important;
  border-radius:7px!important;
}
html body .filters .rail-opt.active{font-weight:700!important;}
html body .filters .rail-opt-l{gap:7px!important;min-width:0!important;}
html body .filters .rail-count{
  font-family:var(--fa-data)!important;
  font-size:var(--fa-filter-count-size)!important;
  font-weight:600!important;
  line-height:1.2!important;
  min-width:24px!important;
  padding:2px 5px!important;
  letter-spacing:-.035em!important;
}
html body .filters .rail-search{
  height:36px!important;
  /* left inset clears the magnifier icon both boards paint at background-position 10px */
  padding:7px 10px 7px 32px!important;
  font-family:var(--fa-ui)!important;
  font-size:var(--fa-filter-search-size)!important;
  font-weight:500!important;
  line-height:1.2!important;
}
html body .filters .rail-section{margin-bottom:11px!important;}
html body .filters .rail-mark{width:14px!important;height:14px!important;flex:0 0 14px!important;}
html body .filters .rail-mark svg,
html body .filters .rail-opt-l svg{width:12px!important;height:12px!important;}

/* Preserve compactness for long setup names without making the whole rail tiny. */
html body .filters [data-rail='setup'] .rail-opt,
html body .filters [data-filter-group='setup']{
  font-size:14px!important;
}

/* Metric labels are no longer visually detached from their values. */
html body .tile-price-lbl,
html body .tile-level-lbl,
html body .tile-pl-lbl,
html body .metric-label,
html body .stat-label,
html body .value-label,
html body [class*='metric-label'],
html body [class*='stat-label']{
  font-size:13.5px!important;
  font-weight:600!important;
  line-height:1.15!important;
  letter-spacing:-.01em!important;
  margin-bottom:4px!important;
}
html body .tile-price,
html body .tile-level-val,
html body .tile-pl-val,
html body .metric-value,
html body .stat-value,
html body [class*='metric-value'],
html body [class*='stat-value']{
  font-size:19px!important;
  line-height:1.08!important;
}

/* Normalize leftover small board text and pagination across every page. */
html body .tile-foot,
html body .tile-foot *,
html body .ss-meta,
html body .card-meta,
html body .grid-meta,
html body .pag,
html body .pag button,
html body .pag-meta,
html body .results-meta,
html body .resolved-meta,
html body [class*='spotted'],
html body [class*='resolved'],
html body [class*='detected'],
html body [class*='updated'],
html body [class*='ago']{
  font-family:var(--fa-ui)!important;
  font-size:12.5px!important;
  font-weight:500!important;
  line-height:1.3!important;
  letter-spacing:-.008em!important;
}
html body .pag button{
  min-width:34px!important;
  height:34px!important;
  font-size:13px!important;
}

@media(max-width:900px){
  :root{
    --fa-filter-size:14px;
    --fa-filter-heading-size:12.5px;
    --fa-filter-search-size:13.5px;
  }
}
