/* Quiet Edge Economy page (econ-r3). Loaded after the site's /assets/dashboard.css, site-shell.css and site-navigation.css: the header, coverage strip, pulse row, module tabs, type scale and colour tokens (--bg --paper --ink --muted --line --soft --up --down --focus, light on :root, dark on body.dark) come from the dashboard. This file adds only the economy components and a few shell adjustments, all scoped to body.econ-page. Local file only; no external fonts. */
/* site-design-r1: no --deskbar-height/--coverage-height defaults on body any more. Declared here they shadowed the
   measured values economy.js sets on :root, so the sticky strip sat at 48px under a taller phone header (item 4). */
body.econ-page{--bar:#286c63;--bar-neg:#6f9f95;--grid:#e3eaeb;--mono:IBM Plex Mono,ui-monospace,monospace}
body.econ-page.dark{--bar:#9cdad3;--bar-neg:#5f9c94;--grid:#2c434a}
.econ-page main{padding-bottom:0}
.econ-page .skip{position:absolute;left:-9999px;top:0}
.econ-page .skip:focus{left:16px;top:8px;background:var(--paper);padding:6px 10px;border:1px solid var(--line);border-radius:4px;z-index:40}

/* Header: the dashboard deskbar with brand, site navigation, as-of and the theme toggle */
.econ-page .deskbar .primary-navigation{margin-left:8px}
.econ-page .econ-asof{margin-left:auto;font-size:11px;color:var(--muted);white-space:nowrap}
.econ-page .coverage-strip{top:var(--deskbar-height,48px)}
.econ-page .coverage-link{font-size:11px;color:var(--ink);text-decoration:none}
.econ-page .coverage-link:hover{text-decoration:underline}
@media(max-width:1100px){.econ-page .deskbar{flex-wrap:nowrap}.econ-page .site-brand{margin-right:0}}
@media(max-width:760px){
  .econ-page .deskbar{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:36px auto;gap:2px 8px;padding:8px 12px;height:auto}
  .econ-page .deskbar .site-brand{grid-column:1;grid-row:1}
  .econ-page .deskbar #mode{grid-column:2;grid-row:1;justify-self:end}
  .econ-page .deskbar .primary-navigation{grid-column:1/-1;grid-row:2;margin:0;padding:2px 0 0}
  .econ-page .econ-asof{display:none}
  .econ-page .coverage-strip{padding:4px 12px}
  .econ-page .coverage-link{font-size:11px;line-height:1.3}
}

/* Guide row (as the dashboard's "How To Read This Page" strip) */
.econ-guide{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;padding:8px 16px;border-bottom:1px solid var(--line);background:var(--bg)}
.econ-guide details{margin:0;min-width:0}
.econ-guide summary{font-size:12px}
.econ-guide .text-button{color:var(--ink);white-space:nowrap}
.econ-guide .intro{font-size:13px;margin:8px 0 4px}
.legend{font-size:12px;line-height:1.7;color:var(--muted);margin:4px 0;max-width:110ch}
.legend-k{font-weight:600;color:var(--ink)}
@media(max-width:760px){.econ-guide{padding:8px 12px}}

/* Pulse row: the dashboard tile grid with seven economy readings */
.econ-pulse{grid-template-columns:repeat(7,minmax(0,1fr))}
.econ-pulse .pulse-tile{grid-template-columns:minmax(0,1fr) auto;grid-template-rows:minmax(28px,auto) 24px auto}
.econ-pulse .pulse-title{grid-column:1/-1;font-size:11px;line-height:1.2;color:var(--muted);text-decoration:none;align-self:end}
.econ-pulse a.pulse-title:hover{color:var(--ink);text-decoration:underline}
.econ-pulse .pulse-value{font-size:18px}
.econ-pulse .spark{justify-self:end}
.econ-pulse .spark path{fill:none;stroke:var(--ink);stroke-width:1.3;stroke-linejoin:round}
.econ-pulse .glyph{font-weight:600}
.econ-pulse .indicator-caption{grid-column:1/-1;margin:3px 0 0;font-size:11px;line-height:1.4}
.econ-pulse .pulse-period{color:var(--muted)}
@media(max-width:1250px){.econ-pulse .pulse-value{font-size:16px}.econ-pulse .spark{width:60px}}
@media(max-width:1000px){.econ-pulse{grid-template-columns:repeat(4,minmax(0,1fr));row-gap:14px}}
@media(max-width:760px){.econ-pulse .pulse-tile{min-width:200px;max-width:200px}.econ-pulse .spark{width:76px}}

/* Panels: assessment and method, as the dashboard's section panels */
.econ-panel{background:var(--paper);border:1px solid var(--line);border-top:2px solid var(--ink);margin:16px 16px 0;padding:12px 16px}
.econ-panel .section-title{align-items:flex-start}
.econ-panel h2{font-size:15px}
.astatus{font-size:12px;color:var(--muted);margin:4px 0 0}
.arows{margin:8px 0 0;display:grid}
.arow{display:grid;grid-template-columns:minmax(0,260px) minmax(0,1fr);gap:4px 16px;padding:7px 0;border-top:1px solid var(--soft)}
.arow dt{font-weight:600;font-size:12px}
.arow dd{margin:0;font-size:13px;line-height:1.5}
.arow dd p{margin:0 0 4px}
.acal{font-size:12px;margin:4px 0 0;padding-top:8px;border-top:1px solid var(--soft)}
.acal-k{font-size:11px;color:var(--muted);margin-right:6px}
.when{white-space:nowrap}
/* site-design-r1 fix 5: the unwritten Assessment is one line */
.assessment-line{margin:0;padding:6px 16px;border-bottom:1px solid var(--line);background:var(--bg)}
.assessment-line .aline{margin:0;font-size:12px;line-height:18px;color:var(--muted)}
.assessment-line .aline strong{color:var(--ink);font-weight:600}
.assessment-line .lab,.assessment-line .badge{vertical-align:0;line-height:14px;padding-top:0;padding-bottom:0}
@media(max-width:760px){.assessment-line{padding:6px 12px}.assessment-line .aline-next{display:none}}
.method details{font-size:12px;margin:0}
.method summary{font-size:12px}
.limits,.page-labels{padding-left:20px;margin:8px 0;max-width:110ch}
.limits li,.page-labels li{margin-bottom:4px;line-height:1.5}
.method p{max-width:110ch;line-height:1.5}
@media(max-width:760px){.econ-panel{margin:12px 12px 0;padding:12px}.arow{grid-template-columns:minmax(0,1fr)}}

/* Module tabs and modules: the dashboard's tab bar; modules render open without JavaScript */
.econ-page .module-tabs{margin-top:16px}
.econ-modules .module{scroll-margin-top:calc(var(--deskbar-height,48px) + var(--coverage-height,28px) + 52px)}
/* site-design-r1 item 4: on phones the area tabs stay visible as a sticky, scrollable jump bar under the strip */
@media(max-width:760px){
  .econ-page .module-tabs{display:flex;flex-wrap:nowrap;overflow-x:auto;gap:4px;position:sticky;top:calc(var(--deskbar-height,48px) + var(--coverage-height,28px));z-index:9;background:var(--bg);margin-top:12px;padding:0 12px;scrollbar-width:none}
  .econ-page .module-tabs::-webkit-scrollbar{display:none}
  .econ-page .module-tabs button{flex-shrink:0;min-height:40px;padding:8px 10px;font-size:13px;white-space:nowrap}
}
.econ-modules:not(.tabs-ready) .module{display:block}
.econ-modules .module-content{max-height:none;overflow:visible;min-height:0}
.econ-modules .module{border:1px solid var(--line);border-top:0}
.econ-modules:not(.tabs-ready) .module{border-top:1px solid var(--line);margin-bottom:12px}
.area-head{margin-bottom:6px}
.area-head h2{font-size:15px}
.question{font-size:13px;line-height:1.4;color:var(--muted);margin:2px 0 0}
.count{font-size:11px;color:var(--muted);margin:0;white-space:nowrap}
@media(max-width:760px){
  .econ-modules .module{border:0;border-top:1px solid var(--line);margin:0}
  .econ-modules:not(.tabs-ready) .module{border-top:1px solid var(--line)}
  .econ-modules .module-content{padding:4px 0 12px}
  .area-head{display:block}
  .count{margin-top:4px}
  .area-head h2{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
}

/* Labels (Observation / Quiet Edge calculation / Interpretation) */
.lab{display:inline-block;font-size:10px;line-height:1.3;padding:1px 5px;border-radius:3px;border:1px solid var(--line);color:var(--muted);white-space:nowrap;vertical-align:1px;font-weight:400}
.lab-obs{border-style:solid}
.lab-calc{border-style:dashed;color:var(--ink)}
.lab-int{background:var(--soft);border-color:var(--ink);color:var(--ink)}
.econ-page .badge{display:inline-block;font-size:10px;padding:1px 5px;border-radius:3px;border:1px solid var(--line);background:var(--soft);color:var(--ink);white-space:nowrap}
.econ-page .badge-stale{background:transparent;border-color:var(--down);color:var(--down)}

/* Upcoming releases */
.upcoming{margin:6px 0 10px}
.upcoming-title{font-size:11px;color:var(--muted);margin:0 0 4px;font-weight:600}
.upcoming ul{list-style:none;margin:0;padding:0;display:grid;gap:3px}
.upcoming li{font-size:12px}
.upcoming .what{font-weight:600}
.upcoming .who{color:var(--muted)}

/* Series cards. site-design-r1 item 9 / S21 (fix round 1, B4): fixed column counts per width band, chosen per area
   by build.py (wN / mN / nN on .cards); the cards of a short last row span the leftover slots (swK / smK / snK),
   so every row is full of series cards. The calendar and data notes are a content-sized strip under the grid. */
.cards{display:grid;grid-template-columns:minmax(0,1fr);gap:12px;align-items:stretch}
@media(min-width:1280px){.cards.w5{grid-template-columns:repeat(5,minmax(0,1fr))}.cards.w4{grid-template-columns:repeat(4,minmax(0,1fr))}.sw2{grid-column:span 2}.sw3{grid-column:span 3}.sw4{grid-column:span 4}.sw5{grid-column:span 5}}
@media(min-width:1000px) and (max-width:1279px){.cards.m3{grid-template-columns:repeat(3,minmax(0,1fr))}.cards.m2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm2{grid-column:span 2}.sm3{grid-column:span 3}}
@media(min-width:761px) and (max-width:999px){.cards.n2{grid-template-columns:repeat(2,minmax(0,1fr))}.sn2{grid-column:span 2}}
.econ-modules .area-legend{font-size:11px;color:var(--muted);margin:0 0 10px;line-height:1.6;max-width:none}
.area-legend .legend-k,.area-cal .legend-k{font-weight:600;color:var(--ink)}
.area-notes{margin:12px 0 0;padding:8px 0 0;border-top:1px solid var(--soft);font-size:12px}
.econ-modules .area-notes p{max-width:none}
.area-cal{margin:0;line-height:1.7}
.area-cal .what{font-weight:600}
.area-cal .who{color:var(--muted)}
.area-data-notes{margin:4px 0 0}
.area-data-notes summary{font-size:12px;color:var(--muted);cursor:pointer;min-height:24px}
.area-data-notes p{margin:6px 0 0;color:var(--muted);line-height:1.45}
.notes-list{list-style:none;margin:6px 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(320px,100%),1fr));gap:3px 24px}
.notes-list a{color:var(--ink)}
.card{background:var(--paper);border:1px solid var(--line);padding:10px 12px 8px;min-width:0;display:flex;flex-direction:column;scroll-margin-top:calc(var(--deskbar-height,48px) + var(--coverage-height,28px) + 56px)}
.card-head{margin-bottom:6px}
.card-head .lab{margin-top:4px}
.card h3{font-size:13px;font-weight:600;line-height:1.3;margin:0}
.pub{font-size:11px;color:var(--muted);margin:2px 0 0;line-height:1.35}
.headline{margin-bottom:6px}
.big{font-size:22px;letter-spacing:-.5px;line-height:1.2;margin:4px 0 0}
.big-cap{font-size:11px;color:var(--muted);margin:2px 0 0;line-height:1.4}
.deriv{font-size:12px;background:var(--soft);padding:6px 8px;margin:4px 0 8px;line-height:1.45}
.facts{margin:0 0 6px;display:grid}
.fact{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:2px 10px;padding:4px 0;border-top:1px solid var(--soft)}
.fact dt{font-size:11px;color:var(--muted);min-width:0;flex:0 1 auto}
.fact dt .lab{margin-left:4px}
.fact dd{margin:0 0 0 auto;font-size:12px;text-align:right;overflow-wrap:anywhere;max-width:100%}
.fact dd .muted{font-size:11px}
.per{color:var(--muted);font-size:10.5px;margin-left:4px;white-space:nowrap}
.units{font-family:var(--mono);font-size:10px;color:var(--muted);margin:0;padding-top:6px;overflow-wrap:anywhere}
.card-na{background:transparent;border-style:dashed}
.na{background:var(--soft);padding:8px 10px;margin-bottom:8px}
.na-title{font-weight:600;margin:0 0 2px}
.na-reason{font-size:12px;color:var(--muted);margin:0}
.spread{font-size:12px;margin:0 0 10px}
.spread strong{font-weight:600}

/* Charts */
.chart{margin:4px 0 0;min-width:0}
/* fix round 1 (N9): in a series card the plot absorbs the row's slack (the chart grows; no blank band) */
.card .chart{flex:1 1 auto;display:flex;flex-direction:column}
.card .plot{flex:1 1 auto}
.card .plot svg{position:absolute;left:0;top:0;height:100%}
.chart-head{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px}
.chart-lab{font-size:10.5px;color:var(--muted)}
.range{display:flex;gap:4px}
.range button{font-size:11px;padding:2px 8px;min-height:26px;min-width:36px}
.range button:disabled{opacity:.45;cursor:not-allowed}
.plot{position:relative;min-height:132px}
.plot svg{display:block;width:100%;height:132px;overflow:visible;touch-action:pan-y}
.plot svg:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.plot-fallback{font-size:11px;color:var(--muted);margin:0;padding-top:40px}
.plot .grid{stroke:var(--grid);stroke-width:1}
.plot .zero{stroke:var(--muted);stroke-width:1}
.plot .tick{fill:var(--muted);font:10px system-ui,sans-serif}
.plot .bar{fill:var(--bar)}
.plot .bar.neg{fill:var(--bar-neg)}
.plot .bar.is-on{fill:var(--ink)}
.plot .line{fill:none;stroke:var(--bar);stroke-width:1.75;stroke-linejoin:round;stroke-linecap:round}
.plot .gapmark{fill:none;stroke:var(--muted);stroke-width:1.2;stroke-dasharray:2 2}
.plot .cursor{stroke:var(--muted);stroke-width:1;stroke-dasharray:3 3}
.plot .dot{fill:var(--paper);stroke:var(--ink);stroke-width:2}
.tip{position:absolute;top:0;z-index:3;pointer-events:none;background:var(--ink);color:var(--paper);font-size:11px;line-height:1.35;padding:4px 7px;border-radius:4px;white-space:nowrap;transform:translateX(-50%)}
.tip[hidden]{display:none}
.note5{font-size:11px;color:var(--muted);margin:4px 0 0}
.readout{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.tbl{margin:4px 0 0}
.tbl summary{font-size:11px;color:var(--muted);padding:4px 0;min-height:24px}
.tbl table{margin:4px 0}
.tbl caption{text-align:left;font-size:10.5px;color:var(--muted);padding-bottom:4px}
.tbl th,.tbl td{padding:3px 4px;border-bottom:1px solid var(--soft);font-weight:400;position:static;background:transparent}
.tbl td{text-align:right}
.tbl thead th{color:var(--muted)}

/* site-design-r1 I3 / I4 insight panels: a full-width row at the top of the Energy and Labor areas */
.insight{background:var(--paper);border:1px solid var(--line);border-top:2px solid var(--ink);padding:10px 12px;margin:0 0 12px}
.insight-head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.insight-head h3{font-size:15px;font-weight:600;margin:0}
.insight-tiles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.insight-body{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px;align-items:start}
.insight-text{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px}
.insight-text p,.insight-main p{max-width:none}
.insight .insight-foot{max-width:none}
.insight-tiles-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.itile{border-top:1px solid var(--soft);padding-top:6px;min-width:0}
.itile-title{font-size:11px;color:var(--muted);margin:0;line-height:1.3}
.itile-title a{color:inherit}
.itile-value{font-size:20px;line-height:1.2;margin:2px 0 0;letter-spacing:-.3px}
.itile-value .glyph{font-size:15px}
.itile-when,.itile-note{font-size:11px;color:var(--muted);margin:2px 0 0;line-height:1.4}
.itile-note{color:var(--ink)}
.itile-na{font-size:12px;color:var(--muted);margin:4px 0 0}
.itile-rows{list-style:none;margin:4px 0 0;padding:0;font-size:12px;line-height:1.45;display:grid;gap:2px}
.insight .glyph{font-weight:600}
.insight-lede,.insight-read,.insight-cpi{font-size:13px;line-height:1.5;margin:10px 0 0;max-width:120ch}
.insight-read{font-weight:500}
.insight-foot{font-size:11px;color:var(--muted);line-height:1.5;margin:8px 0 0;max-width:140ch}
.insight-chart .chart-n{font-size:10.5px;color:var(--muted)}
.insight-chart .plot{min-height:220px}
.insight-chart .plot svg{height:220px}
.insight-na{font-size:12px;color:var(--muted);margin:0 0 12px}
@media(max-width:1279px){.insight-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:999px){.insight-body,.insight-text{grid-template-columns:minmax(0,1fr);gap:0}}
@media(max-width:760px){.insight-tiles,.insight-tiles-2{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px}.itile-value{font-size:18px}}

/* Footer (the dashboard's main footer; the shared site footer follows from site-shell.css) */
.econ-page .site-footer-notes{font-size:13px;line-height:1.5;color:var(--muted);margin:12px 0 4px}
.econ-page main>footer.fine{padding:24px 16px 16px;align-items:baseline}
.econ-page main>footer.fine .text-button{color:var(--ink)}
@media(max-width:760px){.econ-page main>footer.fine{padding:24px 12px 16px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto}}
.insight-premise{font-size:14px;font-weight:600;margin:0 0 8px;max-width:none}

/* site-design-r1 fix round 1 (N1, item 17): on touch screens no economy text below 12 px and controls >= 32 px tall.
   Desktop (fine pointer) sizes are unchanged. */
@media(pointer:coarse){
  .econ-page .lab,.econ-page .badge,.econ-page .per,.econ-page .units,.econ-page .pub,.econ-page .big-cap,.econ-page .fact dt,.econ-page .fact dd,
  .econ-page .fact dd .muted,.econ-page .chart-lab,.econ-page .chart-n,.econ-page .tbl summary,.econ-page .tbl caption,.econ-page .tbl th,.econ-page .tbl td,
  .econ-page .count,.econ-page .area-legend,.econ-page .itile-title,.econ-page .itile-when,.econ-page .itile-note,.econ-page .itile-rows,.econ-page .insight-foot,
  .econ-page .note5,.econ-page .plot-fallback,.econ-page .coverage-link,.econ-page .coverage-end,.econ-page .econ-asof,.econ-page .pulse-title,
  .econ-page .indicator-caption,.econ-page .pulse-swipe,.econ-page .aline,.econ-page .legend,.econ-page .tip,.econ-page .range button,.econ-page .area-cal,
  .econ-page .area-data-notes summary,.econ-page .area-data-notes p,.econ-page .notes-list,.econ-page .deriv,.econ-page .na-reason,.econ-page .spread,
  .econ-page .econ-guide summary,.econ-page .method details,.econ-page .method summary,.econ-page .question,.econ-page .site-footer-notes,
  .econ-page .text-button,.econ-page main>footer.fine,.econ-page main>footer.fine p{font-size:12px}
  .econ-page .plot .tick{font-size:12px}
  .econ-page .deskbar .primary-navigation a{display:inline-block;padding:8px 0}
  .econ-page .deskbar #mode{min-width:32px;min-height:32px}
  .econ-page .coverage-link{display:inline-block;padding:7px 0}
  .econ-page .range button,.econ-page .tbl summary,.econ-page .area-data-notes summary,.econ-page summary,.econ-page .text-button{min-height:32px}
  .econ-page .tbl summary,.econ-page .area-data-notes summary{display:flex;align-items:center}
}

/* site-design-r1 lane G: I5 "Are workers changing jobs?" (Labor), a full-width insight panel under I4.
   The two columns stretch to one height; the chart plot takes the slack and economy.js draws it 1:1 at the
   plot's measured size, so neither column has a blank band (no-uneven-empty-space rule). Tokens only. */
.insight-i5 .insight-body{align-items:stretch}
.insight-i5 .insight-main,.insight-i5 .insight-chart{display:flex;flex-direction:column;min-width:0;margin:0}
.insight-i5 .plot{flex:1 1 auto;min-height:220px}
.insight-i5 .plot svg{position:absolute;left:0;top:0;width:100%;height:100%}
.insight-i5 .plot-fallback{padding-top:40px}
.i5-read{font-weight:400;padding-left:18px;margin:10px 0 0}
.i5-read li{margin:0 0 4px}
.insight-i5 .ln{fill:none;stroke-linejoin:round;stroke-linecap:round}
.insight-i5 .ln-hires{stroke:var(--bar);stroke-width:1.75}
.insight-i5 .ln-quits{stroke:var(--ink);stroke-width:1.5;stroke-dasharray:6 3}
.insight-i5 .ln-layoffs_discharges{stroke:var(--muted);stroke-width:2;stroke-dasharray:.5 3.5}
.insight-i5 .plot .el,.insight-i5 .plot .clip-lab{font:10px system-ui,sans-serif;paint-order:stroke;stroke:var(--paper);stroke-width:3px;stroke-linejoin:round}
.insight-i5 .plot .el-hires{fill:var(--bar)}
.insight-i5 .plot .el-quits{fill:var(--ink)}
.insight-i5 .plot .el-layoffs_discharges{fill:var(--muted)}
.insight-i5 .plot .clip-lab{fill:var(--ink)}
.insight-i5 .plot .clip-mark{fill:var(--ink)}
.insight-i5 .plot .cap{stroke:var(--muted);stroke-width:1;stroke-dasharray:2 3}
.i5-legend{display:flex;flex-wrap:wrap;gap:2px 14px;font-size:11px;line-height:1.5;color:var(--muted);margin:4px 0 0}
.i5-key{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.i5-scroll{max-height:240px;overflow:auto}
.i5-tbl table{width:100%}
@media(pointer:coarse){
  .econ-page .i5-legend{font-size:12px}
  .econ-page .insight-i5 .plot .el,.econ-page .insight-i5 .plot .clip-lab{font-size:12px}
}
