/* ---- Dashboard colour tokens: light theme ---- */
:root{
  --d-accent:#146b50; --d-accent2:#18795f; --d-accent-hover:#0b513b;
  --d-hiring:#17805f; --d-layoff:#d36556;
  --d-chip-bg:#eef4ef; --d-chip-text:#285b47;
  --d-tint:#f1f7f3; --d-hover:#f4f7f4; --d-panel:#fbfcfa; --d-track:#eef1ef;
  --d-skill-bg:#edf2e9; --d-skill-text:#354b3e;
  --d-hiring-bg:#e7f4ee; --d-hiring-text:#146b50;
  --d-layoff-bg:#f9e9e6; --d-layoff-text:#a13d31;
  --d-mixed-bg:#f1eee2; --d-mixed-text:#806423;
  --d-thumb-a:#e0eee7; --d-thumb-b:#f2e8e1; --d-thumb-text:#456b5c;
  --violet-50:#f6f3ff; --ink-muted:#6a6482;
}
.feed-market-pill{ display:inline-block; padding:6px 12px; border:1px solid var(--line); border-radius:5px; background:var(--d-chip-bg); color:var(--d-chip-text); font-size:11px; font-weight:800; }
/* ============================================================
   demands.css — styles used only by pages/demands.html
============================================================ */

.insight-banner{
  display:grid; grid-template-columns:180px 1fr; gap:16px; align-items:start;
  background:var(--white); border:1px solid var(--line); border-left:3px solid #1fae67;
  border-radius:8px; padding:16px 18px; margin:18px 0 16px; color:var(--ink); font-size:13px;
}
.insight-banner strong{ font-size:13px; }
.insight-banner span{ color:var(--ink-soft); line-height:1.65; }
.role-section{ margin-top:28px; }
.role-section-heading{ display:flex; align-items:flex-end; justify-content:space-between; gap:20px; margin-bottom:16px; }
.role-section-kicker,.role-kicker{ margin:0 0 4px; color:#16835c; font-size:10px; font-weight:800; text-transform:uppercase; }
.role-section-heading h2{ margin:0; font-size:20px; }
.role-section-heading p:last-child{ margin:5px 0 0; color:var(--ink-soft); font-size:12px; line-height:1.55; }
.role-count{ flex-shrink:0; color:var(--ink-soft); font-size:11px; font-weight:700; }
.role-grid{ display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px; }
.role-card{
  min-width:0; padding:18px; background:var(--white); border:1px solid var(--line); border-radius:8px;
  box-shadow:var(--shadow-card);
}
.role-card:last-child:nth-child(odd){ grid-column:1/-1; }
.role-card-header{ display:grid; grid-template-columns:38px minmax(0,1fr) auto; align-items:center; gap:11px; }
.role-index{ width:36px; height:36px; display:grid; place-items:center; border-radius:7px; background:#e8f5ef; color:#16835c; font-size:12px; font-weight:800; }
.role-card-header h3{ margin:0; font-size:16px; line-height:1.35; }
.role-kicker{ margin-bottom:3px; }
.role-market-label{ padding:5px 7px; border:1px solid var(--line); border-radius:4px; color:var(--ink-soft); font-size:9px; font-weight:700; white-space:nowrap; }
.role-signal{ min-height:42px; margin:14px 0; color:var(--ink-soft); font-size:12px; line-height:1.65; }
.role-card-section h4,.role-region h4,.role-skill-block h4{ margin:0 0 8px; color:var(--ink); font-size:11px; font-weight:800; }
.role-title-list{ display:flex; flex-wrap:wrap; gap:6px; margin:0; padding:0; list-style:none; }
.role-title-list li,.role-skill-list span{ padding:5px 7px; border:1px solid var(--line); border-radius:4px; color:var(--ink); font-size:10px; line-height:1.3; }
.role-region-grid{ display:grid; grid-template-columns:1fr 1fr; gap:12px; margin:16px 0; }
.role-region{ padding:10px 11px; border-left:2px solid #1fae67; background:rgba(31,174,103,.055); }
.role-region h4{ margin-bottom:5px; color:#16835c; }
.role-region p{ margin:0; color:var(--ink-soft); font-size:11px; line-height:1.55; }
.role-card-footer{ display:grid; gap:10px; padding-top:12px; border-top:1px solid var(--line); }
.role-skill-block h4{ margin-bottom:7px; }
.role-skill-list{ display:flex; flex-wrap:wrap; gap:5px; }
.role-skill-list span{ background:var(--white); color:var(--ink-soft); }
.role-source-link{ justify-self:start; color:var(--violet-700); font-size:10px; font-weight:700; }
.role-source-links{ display:grid; gap:5px; }
.role-source-link:hover{ text-decoration:underline; }
@media (max-width:760px){
  .role-grid{ grid-template-columns:1fr; }
  .role-card:last-child:nth-child(odd){ grid-column:auto; }
}

.outlook-details-panel{ gap:16px; padding:18px; }
.outlook-details-panel .outlook-field-label{ margin-bottom:6px; color:var(--ink-soft); font-size:10px; line-height:1.4; }
.outlook-details-panel .outlook-signal-block p,.outlook-details-panel .outlook-market-copy{ color:var(--ink); font-size:13px; line-height:1.65; }
.outlook-details-panel .outlook-role-list,.outlook-details-panel .outlook-skill-list{ gap:7px; }
.outlook-details-panel .outlook-role-list li,.outlook-details-panel .outlook-skill-list li{ padding:6px 9px; border-color:var(--line); color:var(--ink); font-size:11px; line-height:1.4; }
.outlook-details-panel .outlook-skill-list li{ border-color:transparent; background:var(--d-skill-bg); color:var(--d-skill-text); }
.outlook-details-panel .outlook-sources a,.outlook-details-panel .outlook-sources>span:last-child{ color:var(--d-accent); font-size:12px; line-height:1.45; }
@media (max-width:560px){
  .outlook-details-panel{ padding:14px; }
  .outlook-details-panel .outlook-signal-block p,.outlook-details-panel .outlook-market-copy{ font-size:12px; }
}
@media (max-width:560px){
  .insight-banner{ grid-template-columns:1fr; gap:5px; padding:13px 14px; }
  .role-section-heading{ align-items:flex-start; }
  .role-count{ padding-top:4px; }
  .role-card{ padding:15px; }
  .role-card-header{ grid-template-columns:34px minmax(0,1fr); }
  .role-index{ width:32px; height:32px; }
  .role-market-label{ grid-column:2; justify-self:start; }
  .role-region-grid{ grid-template-columns:1fr; gap:8px; }
}
.demand-live-bar{
  display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap;
  padding:12px 14px; margin-bottom:18px; border:1px solid var(--line); border-radius:8px;
  background:var(--white);
}
.demand-live-status{ display:flex; align-items:center; gap:8px; font-size:12px; font-weight:700; color:var(--ink); }
.live-dot{ display:inline-block; width:8px; height:8px; border-radius:50%; background:#22a06b; }
@keyframes pulse{ 0%{transform:scale(1); opacity:1;} 50%{transform:scale(1.2); opacity:.8;} 100%{transform:scale(1); opacity:1;} }
.last-updated{ font-size:11px; color:var(--ink-soft); font-weight:600; }
.refresh-news-btn{
  border:none; border-radius:999px; padding:8px 12px; background:var(--violet-600); color:white;
  font-weight:700; font-size:11px; cursor:pointer;
}
.news-modal{ position:fixed; inset:0; display:flex; align-items:center; justify-content:center; z-index:1000; }
.news-modal.hidden{ display:none; }
.news-modal-backdrop{ position:absolute; inset:0; background:rgba(15,23,42,.45); }
.news-modal-panel{
  position:relative; width:min(920px, calc(100% - 32px)); max-height:86vh; overflow:auto;
  background:var(--white); border:1px solid var(--line); border-radius:20px;
  box-shadow:0 30px 80px rgba(15,23,42,.25); padding:24px; z-index:1;
}
.news-modal-header{ display:flex; align-items:flex-start; justify-content:space-between; gap:12px; margin-bottom:18px; }
.eyebrow{ margin:0 0 4px; font-size:11px; letter-spacing:.08em; text-transform:uppercase; color:var(--violet-600); font-weight:700; }
.news-modal-header h3{ margin:0; font-size:22px; }
.news-close{ width:34px; height:34px; border:none; border-radius:10px; background:var(--violet-100); color:var(--violet-700); font-size:24px; cursor:pointer; }
.news-summary{
  margin-top:14px; padding:12px 14px; background:linear-gradient(135deg, rgba(124,92,255,.08), rgba(22,163,74,.08));
  border:1px solid rgba(124,92,255,.15); border-radius:12px; color:var(--ink); font-size:12.5px; line-height:1.6;
}
.news-list{ display:flex; flex-direction:column; gap:12px; }
.news-item{ padding:14px 14px 12px; background:var(--violet-50); border:1px solid rgba(124,92,255,.12); border-radius:12px; }
.news-head{ display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:8px; }
.news-tag{ display:inline-block; padding:4px 8px; border-radius:999px; background:var(--white); color:var(--violet-700); font-size:11px; font-weight:700; }
.news-time{ font-size:11px; color:var(--ink-soft); font-weight:600; }
.news-item h4{ margin:0 0 6px; font-size:15px; }
.news-item p{ margin:0; color:var(--ink-soft); font-size:12.5px; line-height:1.6; }

.news-headline-card{
  display:grid; grid-template-columns: 120px 1fr; gap:14px; align-items:center;
  width:100%; padding:12px 14px; background:var(--white); border:1px solid rgba(124,92,255,.12); border-radius:14px;
  text-align:left; cursor:pointer; transition:transform .15s ease, box-shadow .15s ease;
}
.news-headline-card:hover{ transform:translateY(-1px); box-shadow:0 10px 25px rgba(124,92,255,.08); }
.news-headline-thumb{
  width:120px; height:88px; border-radius:12px; overflow:hidden; background:linear-gradient(135deg, rgba(124,92,255,.2), rgba(22,163,74,.18));
  display:flex; align-items:center; justify-content:center; color:var(--violet-700); font-size:26px; font-weight:700;
}
.news-headline-thumb img{ width:100%; height:100%; object-fit:cover; display:block; }
.news-headline-meta{ display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:6px; }
.news-headline-card .news-tag{ font-size:10px; }
.news-source-label{ margin-bottom:4px; color:var(--ink-soft); font-size:11px; font-weight:600; }
.news-empty{ margin:0; padding:24px; color:var(--ink-soft); text-align:center; line-height:1.6; }
.news-headline-card h4{ margin:0; font-size:16px; line-height:1.45; }
.news-headline-card p{ margin:6px 0 0; color:var(--ink-soft); font-size:12.5px; line-height:1.6; }
.news-detail{ display:flex; flex-direction:column; gap:18px; }
.news-detail.hidden{ display:none; }
.news-detail-hero{ width:100%; height:260px; border-radius:16px; overflow:hidden; background:linear-gradient(135deg, rgba(124,92,255,.2), rgba(22,163,74,.18)); }
.news-detail-hero img{ width:100%; height:100%; object-fit:cover; display:block; }
.news-detail-header{ display:flex; align-items:center; justify-content:space-between; gap:10px; }
.news-detail-header h4{ margin:0; font-size:28px; line-height:1.3; }
.news-detail-meta{ font-size:12px; color:var(--ink-soft); font-weight:600; }
.news-detail-body{ color:var(--ink-soft); font-size:15px; line-height:1.8; }
.news-detail-body p{ margin:0 0 12px; }
.news-back-btn, .news-read-btn{ border:none; border-radius:12px; padding:10px 14px; font-weight:700; cursor:pointer; }
.news-back-btn{ background:var(--violet-100); color:var(--violet-700); }
.news-read-btn{ background:var(--violet-600); color:white; }
.news-detail-actions{ display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; }
.news-detail-actions a{ text-decoration:none; }
.news-hidden{ display:none !important; }

.article-view{ display:block; }
.news-detail-page{
  max-width:980px; margin:28px auto 40px; background:var(--white); border:1px solid var(--line);
  border-radius:20px; box-shadow:var(--shadow-card); padding:24px;
}
.news-detail-page .news-back-btn{ margin-bottom:18px; }
.news-article-hero{ width:100%; height:300px; border-radius:18px; overflow:hidden; margin-bottom:20px; }
.news-article-hero img{ width:100%; height:100%; object-fit:cover; display:block; }
.news-article-meta{ display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; margin-bottom:14px; }
.news-article-tag{ display:inline-block; border-radius:999px; background:var(--violet-100); color:var(--violet-700); padding:6px 10px; font-size:11px; font-weight:700; }
.news-article-date{ font-size:12px; color:var(--ink-soft); font-weight:600; }
.news-article-title{ margin:0 0 18px; font-size:36px; line-height:1.2; }
.news-article-body{ color:var(--ink-soft); font-size:16px; line-height:1.9; }
.news-article-body h2{ margin:24px 0 8px; color:var(--ink); font-size:20px; }
.news-article-body p{ margin:0 0 18px; }
.news-publisher-note{ color:var(--ink-muted); font-size:13px; }
.news-article-actions{ display:flex; justify-content:space-between; gap:12px; flex-wrap:wrap; margin-top:18px; }
.news-article-actions a{ text-decoration:none; }
.news-article-actions .news-read-btn{ display:inline-flex; align-items:center; }

.labor-dashboard{ max-width:1240px; margin:24px auto 54px; padding:0; color:var(--ink); }
.labor-header,.labor-toolbar,.market-heading,.chart-heading,.forecast-heading,.reports-heading{ display:flex; align-items:center; justify-content:space-between; gap:18px; }
.labor-header{ align-items:flex-end; padding-bottom:22px; border-bottom:1px solid var(--line); }
.market-hero{ align-items:center; min-height:168px; padding:25px 30px; border:0; border-radius:8px; background:#203a31; color:#f7faf7; }
.labor-header.market-hero h1{ margin:4px 0 8px; color:#fff; font-size:32px; line-height:1.2; }
.market-hero .labor-eyebrow{ color:#b8d9c7; }
.labor-header.market-hero p:not(.labor-eyebrow){ max-width:560px; color:rgba(247,250,247,.76); font-size:13px; }
.labor-header p:not(.labor-eyebrow),.market-heading p:not(.labor-eyebrow),.chart-heading p,.reports-heading p{ margin:0; color:var(--ink-soft); font-size:13px; line-height:1.6; }
.labor-eyebrow,.section-kicker{ margin:0 0 6px; color:var(--d-accent2); font-size:10px; font-weight:800; }
.labor-actions{ display:flex; align-items:center; gap:8px; flex-shrink:0; }
.news-feed-trigger,.open-feed-inline{ min-height:38px; padding:0 12px; border:1px solid var(--line); border-radius:5px; background:var(--white); color:var(--ink); font:inherit; font-size:11px; font-weight:700; cursor:pointer; }
.news-feed-trigger span{ margin-left:5px; color:var(--ink-soft); font-size:10px; font-weight:500; }
.news-feed-trigger:hover,.open-feed-inline:hover{ border-color:var(--d-accent2); }
.market-hero .news-feed-trigger{ border-color:rgba(255,255,255,.32); background:transparent; color:#fff; }
.market-hero .news-feed-trigger:hover{ border-color:#b8d9c7; background:rgba(255,255,255,.08); }
.labor-refresh{ flex:0 0 auto; min-height:38px; padding:0 13px; border:1px solid var(--line); border-radius:5px; background:var(--white); color:var(--ink); font:inherit; font-size:12px; font-weight:700; cursor:pointer; }
.labor-refresh:hover{ border-color:var(--d-accent2); }
.market-hero .labor-refresh{ border-color:#d7ee83; background:#d7ee83; color:#203a31; }
.market-hero .labor-refresh:hover{ border-color:#e4f5ae; background:#e4f5ae; }
.labor-refresh:disabled{ opacity:.6; cursor:wait; }
.labor-toolbar{ min-height:58px; margin-bottom:10px; border-bottom:1px solid var(--line); }
.course-picker{ display:flex; align-items:center; gap:10px; min-width:320px; }
.course-picker label{ color:var(--ink-soft); font-size:11px; font-weight:800; letter-spacing:.04em; text-transform:uppercase; }
.course-picker select{ min-width:290px; padding:9px 34px 9px 11px; border:1px solid var(--line); border-radius:6px; background:var(--white); color:var(--ink); font:inherit; font-size:13px; font-weight:700; outline:none; }
.course-picker select:focus{ border-color:var(--d-accent2); box-shadow:0 0 0 3px rgba(44,122,102,.10); }
.market-tabs{ display:inline-flex; gap:3px; padding:3px; border:1px solid var(--line); border-radius:6px; background:var(--white); }
.market-tab{ min-height:32px; padding:0 12px; border:0; border-radius:4px; background:transparent; color:var(--ink-soft); font:inherit; font-size:11px; font-weight:700; cursor:pointer; }
.market-tab.active{ background:#203a31; color:#fff; }
.labor-updated{ margin:0; color:var(--ink-soft); font-size:11px; }
.market-view{ padding-top:10px; }
.market-heading{ align-items:center; margin-bottom:14px; padding:4px 0 12px; border-bottom:1px solid var(--line); }
.market-heading h2{ margin:0 0 4px; font-size:21px; }
.source-link{ flex:0 0 auto; padding:8px 0 8px 12px; color:var(--d-accent); font-size:11px; font-weight:700; }
.source-link:hover{ color:var(--d-accent-hover); text-decoration:underline; }
.metric-strip{ display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; margin:14px 0 18px; }
.labor-metric{ position:relative; display:grid; align-content:center; min-width:0; min-height:100px; padding:14px 17px; overflow:hidden; border:1px solid var(--line); border-radius:7px; background:var(--white); }
.labor-metric{ animation:story-arrive .4s ease-out both; }
.labor-metric:nth-child(2){ animation-delay:.06s; }
.labor-metric:nth-child(3){ animation-delay:.12s; }
.labor-metric::before{ position:absolute; inset:0 auto 0 0; width:3px; content:""; background:var(--d-hiring); }
.metric-layoffs::before{ background:var(--d-layoff); }
.metric-total::before{ background:#647c70; }
.labor-metric span,.labor-metric small{ color:var(--ink-soft); font-size:11px; line-height:1.45; }
.labor-metric strong{ margin:4px 0 2px; color:var(--ink); font-size:27px; font-variant-numeric:tabular-nums; }
.market-analysis-grid{ display:grid; grid-template-columns:minmax(0,1.55fr) minmax(280px,.8fr); align-items:stretch; gap:14px; padding-bottom:20px; border-bottom:1px solid var(--line); }
.chart-section,.coverage-section{ min-width:0; padding:20px; border:1px solid var(--line); border-radius:7px; background:var(--white); }
.chart-section{ box-shadow:0 8px 22px rgba(29,54,44,.045); }
.chart-heading{ align-items:flex-start; margin-bottom:12px; }
.section-kicker{ margin-bottom:4px; }
.chart-heading h3,.reports-heading h3,.coverage-heading h3{ margin:0 0 4px; font-size:15px; }
.chart-section{ animation:section-arrive .42s ease-out both; }
.coverage-section{ animation:section-arrive .42s ease-out .08s both; }
.trend-chart{ --chart-hiring:var(--d-hiring); --chart-layoffs:var(--d-layoff); }
.trend-legend{ display:flex; flex-wrap:wrap; gap:16px; margin:2px 0 6px 48px; color:var(--ink-soft); font-size:10px; }
.trend-legend span{ display:flex; align-items:center; gap:6px; }
.legend-swatch{ width:9px; height:9px; border-radius:2px; }
.hiring-swatch,.hiring-bar{ background:var(--d-hiring); }
.layoffs-swatch,.layoffs-bar{ background:var(--d-layoff); }
.labor-chart{ padding-top:8px; }
.trend-svg{ display:block; width:100%; height:auto; overflow:visible; }
.trend-gridline{ stroke:var(--line); stroke-width:1; stroke-dasharray:3 5; }
.trend-axis{ stroke:var(--ink-soft); stroke-width:1; opacity:.45; }
.trend-axis-label{ fill:var(--ink-soft); font-family:inherit; font-size:11px; }
.trend-area{ opacity:0; }
.trend-area-hiring{ fill:var(--chart-hiring); fill-opacity:.08; animation:area-arrive .55s ease-out .25s forwards; }
.trend-area-layoffs{ fill:var(--chart-layoffs); fill-opacity:.08; animation:area-arrive .55s ease-out .38s forwards; }
.trend-line{ fill:none; stroke-width:3; stroke-linecap:round; stroke-linejoin:round; stroke-dasharray:1; stroke-dashoffset:1; animation:line-arrive .85s cubic-bezier(.22,.7,.2,1) forwards; }
.trend-line-hiring{ stroke:var(--chart-hiring); }
.trend-line-layoffs{ stroke:var(--chart-layoffs); animation-delay:.12s; }
.trend-point-group{ opacity:0; animation:point-arrive .32s ease-out calc(.45s + var(--point-delay)) forwards; }
.trend-point{ fill:var(--white); stroke-width:3; }
.trend-point-hiring{ stroke:var(--chart-hiring); }
.trend-point-layoffs{ stroke:var(--chart-layoffs); }
.coverage-track{ display:block; overflow:hidden; height:9px; border-radius:5px; background:var(--d-track); }
.chart-empty,.reports-empty{ margin:0; padding:25px 0; color:var(--ink-soft); font-size:12px; }
.coverage-heading{ margin-bottom:16px; }
.coverage-summary{ display:grid; gap:16px; }
.coverage-lead{ padding:15px; border-left:3px solid var(--d-hiring); border-radius:4px; background:var(--d-tint); }
.coverage-lead span,.coverage-count-row span{ color:var(--ink-soft); font-size:10px; }
.coverage-lead strong{ display:block; margin:6px 0; color:var(--ink); font-size:19px; }
.coverage-lead p{ margin:0; color:var(--ink-soft); font-size:11px; line-height:1.5; }
.coverage-peak{ display:grid; gap:5px; padding:14px 0; border-top:1px solid var(--line); border-bottom:1px solid var(--line); }
.coverage-peak span,.coverage-peak small{ color:var(--ink-soft); font-size:10px; }
.coverage-peak strong{ color:var(--ink); font-size:17px; }
.coverage-note{ margin:0; color:var(--ink-soft); font-size:10px; line-height:1.55; }
.reports-section{ padding:22px 0 16px; }
.news-feed-teaser{ padding:25px 0 28px; border-bottom:1px solid var(--line); }
.reports-heading{ align-items:flex-end; margin-bottom:16px; padding-bottom:13px; border-bottom:1px solid var(--line); }
.report-count{ flex:0 0 auto; color:var(--ink-soft); font-size:10px; }
.open-feed-inline{ min-height:32px; }
.report-preview-list{ display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; }
.report-preview{ display:grid; align-content:start; gap:9px; min-width:0; padding:15px 16px; border:1px solid var(--line); border-radius:6px; background:var(--white); animation:story-arrive .42s ease-out both; transition:transform .18s ease, border-color .18s ease, box-shadow .18s ease; }
.report-preview:nth-child(2){ animation-delay:.07s; }
.report-preview:nth-child(3){ animation-delay:.14s; }
.report-preview:hover{ transform:translateY(-3px); border-color:rgba(23,128,95,.42); box-shadow:0 10px 22px rgba(27,60,45,.08); }
.report-preview-meta{ display:flex; align-items:center; justify-content:space-between; gap:8px; }
.report-preview-meta time,.report-preview-source{ color:var(--ink-soft); font-size:11px; }
.report-preview-title{ display:-webkit-box; overflow:hidden; color:var(--ink); font-size:13px; font-weight:700; line-height:1.5; text-decoration:none; -webkit-box-orient:vertical; -webkit-line-clamp:2; line-clamp:2; }
.report-preview-title:hover{ color:var(--d-accent); text-decoration:underline; }
.report-preview-title span{ color:var(--d-accent2); white-space:nowrap; }
.report-preview p{ display:-webkit-box; overflow:hidden; margin:0; color:var(--ink-soft); font-size:11px; line-height:1.55; -webkit-box-orient:vertical; -webkit-line-clamp:2; line-clamp:2; }
.report-preview-empty{ grid-column:1/-1; margin:0; padding:16px; border:1px dashed var(--line); border-radius:6px; color:var(--ink-soft); font-size:12px; text-align:center; }
.report-list{ display:grid; }
.report-row{ display:grid; grid-template-columns:136px 112px minmax(0,1fr); align-items:center; gap:16px; min-height:108px; padding:14px 0; border-bottom:1px solid var(--line); }
.report-thumb{ position:relative; display:grid; place-items:center; width:136px; aspect-ratio:16/10; overflow:hidden; border:1px solid var(--line); border-radius:4px; background:linear-gradient(135deg,var(--d-thumb-a),var(--d-thumb-b)); color:var(--d-thumb-text); }
.report-thumb.has-image{ background:var(--d-track); }
.report-thumb img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
.report-thumb span{ padding:8px; font-size:9px; font-weight:800; text-align:center; }
.report-thumb.has-image span{ display:none; }
.report-type-column{ display:grid; justify-items:start; align-content:center; gap:8px; }
.report-type{ display:inline-flex; align-self:start; padding:4px 7px; border-radius:3px; font-size:9px; font-weight:800; white-space:nowrap; }
.report-type-hiring{ background:var(--d-hiring-bg); color:var(--d-hiring-text); }
.report-type-layoff{ background:var(--d-layoff-bg); color:var(--d-layoff-text); }
.report-type-mixed{ background:var(--d-mixed-bg); color:var(--d-mixed-text); }
.report-date{ color:var(--ink-soft); font-size:10px; }
.report-copy{ min-width:0; display:grid; align-content:center; gap:5px; }
.report-copy a{ color:var(--ink); font-size:12px; font-weight:700; line-height:1.5; text-decoration:none; }
.report-copy a:hover{ color:var(--d-accent); text-decoration:underline; }
.report-copy p{ display:-webkit-box; overflow:hidden; margin:0; color:var(--ink-soft); font-size:10px; line-height:1.5; -webkit-box-orient:vertical; -webkit-line-clamp:2; line-clamp:2; }
.report-copy .report-source{ color:var(--ink-soft); font-size:10px; }
.report-open-mark{ color:var(--d-accent2); font-size:10px; white-space:nowrap; }
.labor-footnote{ padding-top:13px; border-top:1px solid var(--line); color:var(--ink-soft); font-size:10px; line-height:1.65; }
.news-feed-modal{ position:fixed; inset:0; z-index:1100; display:grid; place-items:center; padding:22px; }
.news-feed-modal.hidden{ display:none; }
.news-feed-backdrop{ position:absolute; inset:0; width:100%; height:100%; border:0; background:rgba(21,32,28,.56); cursor:default; }
.news-feed-dialog{ position:relative; z-index:1; display:flex; flex-direction:column; width:min(1000px,100%); max-height:min(900px,92vh); padding:22px 26px 18px; border:1px solid var(--line); border-radius:8px; background:var(--white); box-shadow:0 24px 70px rgba(10,25,19,.28); }
.news-feed-header{ display:flex; align-items:flex-start; justify-content:space-between; gap:16px; padding-bottom:14px; border-bottom:1px solid var(--line); }
.news-feed-header h2{ margin:2px 0 4px; font-size:20px; }
.news-feed-header p:last-child{ margin:0; color:var(--ink-soft); font-size:11px; }
.news-feed-actions{ display:flex; gap:6px; }
.feed-refresh,.feed-close{ display:grid; place-items:center; width:34px; height:34px; border:1px solid var(--line); border-radius:4px; background:var(--white); color:var(--ink); font-size:18px; cursor:pointer; }
.feed-close{ font-size:23px; }
.feed-toolbar{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:12px 0 5px; }
.feed-tabs{ display:inline-flex; gap:3px; padding:3px; border:1px solid var(--line); border-radius:5px; background:var(--white); }
.feed-tab{ min-height:30px; padding:0 11px; border:0; border-radius:3px; background:transparent; color:var(--ink-soft); font:inherit; font-size:11px; font-weight:700; cursor:pointer; }
.feed-tab.active{ background:var(--d-hiring-bg); color:var(--d-hiring-text); }
.feed-caption{ margin:3px 0 8px; color:var(--ink-soft); font-size:10px; }
.news-feed-list{ flex:1; min-height:0; overflow:auto; overscroll-behavior:contain; padding-right:5px; }
.news-feed-list .report-row{ grid-template-columns:136px 112px minmax(0,1fr); }
.labor-dashboard :is(button,a):focus-visible{ outline:3px solid rgba(20,107,80,.35); outline-offset:3px; }
@keyframes section-arrive{ from{opacity:0; transform:translateY(8px);} to{opacity:1; transform:translateY(0);} }
@keyframes story-arrive{ from{opacity:0; transform:translateY(10px);} to{opacity:1; transform:translateY(0);} }
@keyframes line-arrive{ to{stroke-dashoffset:0;} }
@keyframes area-arrive{ to{opacity:1;} }
@keyframes point-arrive{ from{opacity:0; transform:scale(.65);} to{opacity:1; transform:scale(1);} }
@media (prefers-reduced-motion:reduce){
  .chart-section,.coverage-section,.labor-metric,.report-preview,.trend-line,.trend-area,.trend-point-group{animation:none!important; opacity:1; transform:none; stroke-dashoffset:0;}
  .report-preview,.coverage-track i{transition:none;}
}
@media (max-width:760px){
  .labor-dashboard{ margin-top:22px; }
  .metric-strip{ grid-template-columns:repeat(2,minmax(0,1fr)); }
  .labor-metric:last-child{ grid-column:1/-1; }
  .market-analysis-grid{ grid-template-columns:1fr; }
  .report-preview-list{ grid-template-columns:repeat(2,minmax(0,1fr)); }
  .news-feed-dialog{ width:min(100%,680px); }
}
@media (max-width:560px){
  .labor-dashboard{ margin-top:18px; }
  .labor-dashboard .metric-strip{ grid-template-columns:1fr; }
  .labor-dashboard .labor-metric:last-child{ grid-column:auto; }
  .market-hero{ min-height:0; padding:22px 20px; }
  .labor-header{ align-items:flex-start; }
  .labor-header{ flex-direction:column; gap:13px; }
  .labor-header h1{ font-size:25px; }
  .labor-actions{ width:100%; }
  .news-feed-trigger{ flex:1; }
  .labor-refresh{ padding:0 9px; font-size:10px; }
  .labor-toolbar{ align-items:flex-start; flex-direction:column; padding:12px 0; }
  .course-picker{ width:100%; flex-direction:column; align-items:flex-start; }
  .course-picker select{ width:100%; min-width:0; }
  .market-tabs{ width:100%; }
  .market-tab{ flex:1; padding:0 6px; }
  .market-heading,.chart-heading,.reports-heading{ align-items:flex-start; }
  .market-heading h2{ font-size:18px; }
  .market-heading{ gap:8px; }
  .source-link{ font-size:10px; }
  .market-heading{ align-items:flex-start; padding:13px; }
  .chart-heading{ flex-direction:column; }
  .chart-section,.coverage-section{ padding:14px; }
  .report-preview-list{ grid-template-columns:1fr; }
  .report-row{ grid-template-columns:88px minmax(0,1fr); grid-template-rows:auto 1fr; align-items:start; gap:5px 11px; min-height:92px; padding:12px 0; }
  .report-thumb{ grid-row:span 2; width:88px; aspect-ratio:4/3; }
  .report-type-column{ gap:5px; }
  .report-copy{ gap:3px; }
  .report-copy a{ font-size:11px; line-height:1.4; }
  .report-copy p{ font-size:9px; }
  .news-feed-modal{ padding:0; }
  .news-feed-dialog{ width:100%; height:100dvh; max-height:100dvh; min-height:0; overflow:hidden; padding:16px 14px 12px; border:0; border-radius:0; }
  .news-feed-header h2{ font-size:18px; }
  .feed-toolbar{ align-items:flex-start; flex-direction:column; }
  .feed-tabs{ width:100%; }
  .feed-tab{ flex:1; }
  .news-feed-list .report-row{ grid-template-columns:88px minmax(0,1fr); }
}

.news-article-empty{ padding:30px 20px; text-align:center; color:var(--ink-soft); }

body:has(#view-demands) .topbar .brand-logo{ width:auto!important; height:44px!important; max-width:180px; object-fit:contain; }
@media (max-width:560px){
  body:has(#view-demands) .topbar .brand-logo{ height:34px!important; max-width:132px; }
}

.market-hero{ position:relative; overflow:hidden; isolation:isolate; background-color:#203a31; background-image:linear-gradient(110deg,transparent 58%,rgba(215,238,131,.07) 58.2%,transparent 58.5%),repeating-linear-gradient(135deg,transparent 0 22px,rgba(255,255,255,.025) 23px 24px,transparent 25px 44px); }
.ai-outlook-section{ margin:18px 0 24px; padding:24px; border:1px solid var(--line); border-radius:8px; background:var(--white); box-shadow:0 12px 30px rgba(29,54,44,.055); }
.ai-outlook-heading{ display:flex; align-items:flex-end; justify-content:space-between; gap:20px; padding-bottom:18px; border-bottom:1px solid var(--line); }
.ai-outlook-heading h2{ margin:0 0 7px; color:var(--ink); font-size:24px; line-height:1.2; }
.ai-outlook-heading>div:first-child>p:last-child{ max-width:680px; margin:0; color:var(--ink-soft); font-size:13px; line-height:1.6; }
.ai-outlook-heading .section-kicker{ color:var(--d-accent2); }
.ai-outlook-status{ display:flex; align-items:center; gap:8px; flex:0 0 auto; padding:8px 10px; border:1px solid var(--line); border-radius:5px; color:var(--ink-soft); font-size:10px; font-weight:700; }
.ai-outlook-section.is-fallback .ai-status-indicator{ background:#bd8128; box-shadow:0 0 0 3px rgba(189,129,40,.12); }
.ai-status-indicator{ width:7px; height:7px; flex:0 0 auto; border-radius:50%; background:#19805b; box-shadow:0 0 0 3px rgba(25,128,91,.12); }
.ai-outlook-section[aria-busy="true"] .ai-status-indicator{ animation:status-pulse 1.4s ease-in-out infinite; }
.outlook-grid{ display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px; padding-top:17px; }
.outlook-card{ min-width:0; padding:17px 18px; border:1px solid var(--line); border-radius:6px; background:var(--white); animation:role-reveal .42s ease-out calc(var(--outlook-order,0) * 65ms) both; }
.outlook-card:nth-child(1){ border-top:2px solid #d7a64a; }
.outlook-card:nth-child(2){ border-top:2px solid #4d8a73; }
.outlook-card:nth-child(3){ border-top:2px solid #5685a4; }
.outlook-card:nth-child(4){ border-top:2px solid #bb7161; }
.outlook-card:nth-child(5){ grid-column:1/-1; border-top:2px solid #82934a; }
.outlook-card-heading{ display:grid; grid-template-columns:34px minmax(0,1fr) auto; align-items:center; gap:11px; margin-bottom:16px; }
.outlook-index{ display:grid; place-items:center; width:32px; height:32px; border:1px solid var(--line); border-radius:4px; color:var(--ink); font-size:10px; font-weight:800; font-variant-numeric:tabular-nums; }
.outlook-card-title{ min-width:0; }
.outlook-card-title p{ overflow:hidden; margin:0 0 3px; color:var(--ink-soft); font-size:9px; font-weight:800; text-overflow:ellipsis; text-transform:uppercase; white-space:nowrap; }
.outlook-card-title h3{ margin:0; color:var(--ink); font-size:15px; line-height:1.35; }
.outlook-market-tag{ padding:5px 7px; border-radius:3px; background:var(--d-chip-bg); color:var(--d-chip-text); font-size:9px; font-weight:800; }
.outlook-card-body{ display:grid; gap:13px; }
.outlook-field-label{ display:block; margin-bottom:5px; color:var(--ink-soft); font-size:9px; font-weight:800; text-transform:uppercase; }
.outlook-signal-block p,.outlook-future-block p,.outlook-market-copy{ margin:0; color:var(--ink); font-size:11px; line-height:1.6; }
.outlook-future-block{ padding-left:11px; border-left:2px solid #d7a64a; }
.outlook-future-paused{ border-left-color:#bd8128; }
.outlook-market-copy{ color:var(--ink-soft); }
.outlook-market-copy strong{ color:var(--ink); }
.outlook-role-list,.outlook-skill-list{ display:flex; flex-wrap:wrap; gap:6px; margin:0; padding:0; list-style:none; }
.outlook-role-list li,.outlook-skill-list li{ padding:5px 7px; border:1px solid var(--line); border-radius:3px; color:var(--ink); font-size:9px; line-height:1.3; }
.outlook-skill-list li{ background:var(--d-skill-bg); border-color:transparent; color:var(--d-skill-text); }
.outlook-sources{ display:flex; align-items:center; flex-wrap:wrap; gap:7px 12px; padding-top:10px; border-top:1px solid var(--line); }
.outlook-sources .outlook-field-label{ margin:0 2px 0 0; }
.outlook-sources a,.outlook-sources>span:last-child{ max-width:100%; overflow:hidden; color:var(--d-accent); font-size:10px; font-weight:700; text-overflow:ellipsis; white-space:nowrap; }
.outlook-sources a:hover{ text-decoration:underline; }
.outlook-loading,.outlook-empty{ grid-column:1/-1; margin:0; padding:22px 15px; border:1px dashed var(--line); border-radius:5px; color:var(--ink-soft); font-size:12px; line-height:1.6; text-align:center; }
.outlook-disclaimer{ margin:14px 0 0; color:var(--ink-soft); font-size:10px; line-height:1.5; }
.gemini-setup-link{ display:inline-flex; align-items:center; gap:5px; margin-top:9px; color:var(--d-accent); font-size:11px; font-weight:800; }
.gemini-setup-link:hover{ text-decoration:underline; }
@keyframes role-reveal{ from{opacity:0; transform:translateY(8px);} to{opacity:1; transform:translateY(0);} }
@keyframes status-pulse{ 50%{opacity:.4; box-shadow:0 0 0 5px rgba(25,128,91,.08);} }
@media (prefers-reduced-motion:reduce){
  .outlook-card,.ai-status-indicator{ animation:none!important; }
}
@media (max-width:760px){
  .ai-outlook-section{ padding:20px; }
  .ai-outlook-heading{ align-items:flex-start; flex-direction:column; gap:12px; }
  .ai-outlook-status{ align-self:flex-start; }
  .outlook-grid{ grid-template-columns:1fr; }
  .outlook-card:nth-child(5){ grid-column:auto; }
}
@media (max-width:560px){
  .market-hero{ padding:22px 20px; }
  .ai-outlook-section{ padding:17px 14px; }
  .ai-outlook-heading h2{ font-size:21px; }
  .outlook-card{ padding:14px; }
  .outlook-card-heading{ grid-template-columns:30px minmax(0,1fr); gap:9px; }
  .outlook-market-tag{ grid-column:2; justify-self:start; }
}

.outlook-grid{ grid-template-columns:1fr; gap:0; padding-top:3px; }
.outlook-grid .outlook-card{ display:grid; grid-template-columns:minmax(180px,.85fr) minmax(0,2fr) 76px; align-items:center; gap:16px; min-height:0; padding:12px 4px; border:0; border-bottom:1px solid var(--line); border-radius:0; background:transparent; }
.outlook-grid .outlook-card:nth-child(n){ grid-column:auto; border-top:0; }
.outlook-row-role{ display:grid; grid-template-columns:28px minmax(0,1fr); align-items:center; gap:9px; min-width:0; }
.outlook-grid .outlook-index{ width:26px; height:26px; font-size:9px; }
.outlook-card-title p{ margin-bottom:2px; font-size:8px; }
.outlook-card-title h3{ font-size:14px; line-height:1.3; }
.outlook-grid .outlook-market-tag{ grid-column:2; justify-self:start; margin-top:4px; padding:3px 6px; font-size:8px; }
.outlook-row-prediction{ min-width:0; }
.outlook-row-prediction .outlook-field-label{ margin-bottom:3px; color:var(--d-chip-text); }
.outlook-row-prediction p{ display:-webkit-box; overflow:hidden; margin:0; color:var(--ink); font-size:11px; line-height:1.45; -webkit-box-orient:vertical; -webkit-line-clamp:2; line-clamp:2; }
.outlook-details{ position:relative; align-self:center; justify-self:end; }
.outlook-details summary{ padding:6px 8px; border:1px solid var(--line); border-radius:4px; color:var(--d-chip-text); cursor:pointer; font-size:10px; font-weight:700; list-style:none; white-space:nowrap; }
.outlook-details summary::-webkit-details-marker{ display:none; }
.outlook-details summary::after{ margin-left:6px; content:"+"; font-size:12px; }
.outlook-details[open] summary::after{ content:"−"; }
.outlook-details summary:hover{ border-color:#4d8a73; background:var(--d-hover); }
.outlook-card:has(.outlook-details[open]){ grid-template-columns:minmax(180px,.85fr) minmax(0,2fr); }
.outlook-card:has(.outlook-details[open]) .outlook-details{ grid-column:1/-1; justify-self:stretch; }
.outlook-details-panel{ position:static; display:grid; gap:12px; width:auto; max-height:none; overflow:visible; margin-top:11px; padding:14px; border:1px solid var(--line); border-radius:6px; background:var(--d-panel); }
.outlook-details-panel .outlook-signal-block p{ margin:0; color:var(--ink); font-size:11px; line-height:1.55; }
@media (max-width:760px){
  .outlook-grid .outlook-card{ grid-template-columns:minmax(0,1fr) 76px; gap:8px 12px; }
  .outlook-row-role{ grid-column:1; grid-row:1; }
  .outlook-row-prediction{ grid-column:1/-1; grid-row:2; }
  .outlook-details{ grid-column:2; grid-row:1; }
  .outlook-card:has(.outlook-details[open]){ grid-template-columns:minmax(0,1fr) 76px; }
  .outlook-card:has(.outlook-details[open]) .outlook-details{ grid-column:1/-1; grid-row:3; }
}
@media (max-width:560px){
  .outlook-grid .outlook-card{ padding:10px 1px; }
}

.labor-dashboard .chart-heading .section-kicker,.labor-dashboard .reports-heading .section-kicker,.labor-dashboard .coverage-heading .section-kicker{ color:var(--d-accent2); font-weight:800; }
