/* =====================================================================
   STEADY STRATEGY COMPONENT SYSTEM — v4.12.0
   All reusable visual components live here.
   ===================================================================== */

/* Tabs */
.tabs.dashboard-tabs{
  display:flex;
  height:54px;
  min-height:54px;
  margin:0 0 22px;
  gap:10px;
  overflow-x:auto;
  border-bottom:1px solid var(--color-line);
  background:transparent;
  scrollbar-width:none;
}
.tabs.dashboard-tabs::-webkit-scrollbar{display:none}
.dashboard-tabs .tab-btn{
  position:relative;
  flex:0 0 auto;
  height:54px;
  min-height:54px;
  padding:0 14px;
  border:0;
  border-radius:0;
  background:transparent;
  color:var(--color-sub);
  font-size:14px;
  font-weight:650;
  box-shadow:none;
}
.dashboard-tabs .tab-btn.active{color:var(--color-ink)}
.dashboard-tabs .tab-btn.active::after{
  content:"";
  position:absolute;
  left:12px;right:12px;bottom:-1px;
  height:2px;border-radius:2px;background:var(--color-action);
}

/* Page titles */
.page-title,
#dashboardPage .dashboard-hero h1,
#swingPage > .swing-tag,
#fundPage > .fund-tag{
  display:block;
  margin:0 0 8px;
  padding:0;
  border:0;
  border-radius:0;
  background:none;
  box-shadow:none;
  color:var(--color-ink);
  font-size:var(--font-page-title);
  font-weight:800;
  line-height:1.15;
  letter-spacing:-.025em;
}
.page-subtitle,
#swingPage > .subtitle,
#fundPage > .subtitle{
  margin:0 0 14px;
  color:var(--color-sub);
  font-size:var(--font-body);
  font-weight:500;
  line-height:1.6;
}
.section-title,
.picker-label,
.fund-market-section-title,
.annual-signal-title,
.strategy-rules-summary-title,
.status-module__title,
#dashboardPage .dashboard-intraday-strip h2{
  margin:0;
  color:var(--color-ink);
  font-size:var(--font-section-title);
  font-weight:800;
  line-height:1.35;
  letter-spacing:-.01em;
}

/* Shared cards and panels */
.card,
.ui-card{
  border:1px solid var(--color-line);
  border-radius:var(--radius-lg);
  background:var(--color-surface);
  box-shadow:var(--shadow-card);
}

/* Shared refresh/action button */
.dashboard-refresh,
#swingRefreshBtn,
#fundRefreshBtn{
  margin:0;
  min-width:132px;
  height:var(--control-height);
  min-height:var(--control-height);
  padding:0 16px;
  border:1px solid var(--color-action-line);
  border-radius:12px;
  background:var(--color-surface);
  color:var(--color-action);
  font-size:13px;
  font-weight:700;
  box-shadow:none;
}
.dashboard-refresh:hover,
#swingRefreshBtn:hover,
#fundRefreshBtn:hover{background:var(--color-action-soft)}
.dashboard-refresh:disabled{opacity:.55;cursor:not-allowed}

/* Shared ticker selector */
.ticker-selector{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:10px;
  min-width:0;
}
.ticker-selector-option{
  appearance:none;
  display:grid;
  align-content:center;
  gap:3px;
  min-width:0;
  min-height:60px;
  padding:10px 12px;
  border:1px solid var(--color-line);
  border-radius:12px;
  background:var(--color-surface-subtle);
  text-align:left;
  box-shadow:none;
}
.ticker-selector-option.active{
  border-color:var(--color-action-line);
  background:var(--color-action-soft);
  box-shadow:0 0 0 3px rgba(37,99,235,.08);
}
.ticker-selector-code{font-size:16px;font-weight:750;line-height:1.15;color:var(--color-ink)}
.ticker-selector-name{font-size:12px;font-weight:600;line-height:1.35;color:var(--color-sub)}

/* Shared strategy status component */
[data-status-component].status-module{
  --status-accent:var(--color-status-neutral);
  position:relative;
  overflow:hidden;
  margin:0;
  padding:20px 22px 22px;
  border:1px solid var(--color-line);
  border-radius:var(--radius-lg);
  background:var(--color-surface);
  box-shadow:var(--shadow-card);
}
[data-status-component].status-module::before{
  content:"";
  position:absolute;
  top:0;bottom:0;left:0;width:4px;
  background:var(--status-accent);
}
[data-status-component].status-module.state-defense{--status-accent:var(--signal-negative)}
[data-status-component].status-module.state-normal{--status-accent:var(--signal-positive)}
.status-module__head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  margin:0 0 14px;
}
.status-module__heading{display:grid;gap:3px;min-width:0}
.status-module__title{
  margin:0;
  color:var(--color-ink);
  font-size:var(--font-section-title);
  font-weight:800;
  line-height:1.35;
  letter-spacing:-.01em;
}
.status-module__subtitle{color:var(--color-sub);font-size:12px;line-height:1.25;font-weight:600}
.status-module__badge{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-width:66px;
  padding:8px 15px;
  border:0;
  border-radius:var(--radius-pill);
  background:var(--signal-negative-soft);
  color:var(--signal-negative);
  font-size:15px;
  line-height:1;
  font-weight:800;
}
.status-module__badge.normal{background:var(--signal-positive-soft);color:var(--signal-positive)}
.status-module__badge.defense{background:var(--signal-negative-soft);color:var(--signal-negative)}
.status-module__badge.loading{background:var(--color-loading-soft);color:var(--color-sub)}
.status-module__grid{
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:16px;
  min-width:0;
}
.status-module__card{
  display:grid;
  grid-template-rows:auto auto;
  align-content:start;
  gap:8px;
  min-width:0;
  padding:15px 18px;
  border:1px solid var(--color-line);
  border-radius:var(--radius-md);
  background:var(--color-surface);
  box-shadow:none;
  text-align:left;
}
.status-module__card--allocation{background:var(--signal-negative-soft);border-color:var(--signal-negative-line)}
.status-module__card--trigger.trigger-recovery{background:var(--signal-positive-soft);border-color:var(--signal-positive-line)}
.status-module__card--trigger.trigger-defense{background:var(--signal-negative-soft);border-color:var(--signal-negative-line)}
.status-module__label{
  display:block;
  min-width:0;
  margin:0;
  color:var(--color-sub);
  font-size:var(--font-label);
  font-weight:750;
  line-height:1.2;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.status-module__value-row{display:flex;align-items:center;min-width:0}
.status-module__value{
  min-width:0;
  margin:0;
  padding:0;
  color:var(--color-ink);
  font-size:var(--font-value);
  font-weight:800;
  line-height:1.05;
  letter-spacing:-.035em;
  font-variant-numeric:tabular-nums;
  white-space:nowrap;
}
.status-module__meta{display:block;margin:0;color:var(--color-muted);font-size:12px;line-height:1.2;font-weight:600;white-space:nowrap}
.status-module__card--allocation .status-module__value{color:var(--signal-negative)}
.status-module__card--trigger.trigger-recovery .status-module__value{color:var(--signal-positive)}
.status-module__card--trigger.trigger-defense .status-module__value{color:var(--signal-negative)}
.status-module__data-copy[hidden]{display:none}
.dashboard-day-change{display:none}

@media(max-width:700px){
  .tabs.dashboard-tabs{height:48px;min-height:48px;margin-bottom:18px;gap:0}
  .dashboard-tabs .tab-btn{flex:1 1 0;height:48px;min-height:48px;padding:0 5px;font-size:12px}
  .page-title,#dashboardPage .dashboard-hero h1,#swingPage > .swing-tag,#fundPage > .fund-tag{font-size:var(--font-page-title-mobile)}
  [data-status-component].status-module{padding:17px 15px 18px;border-radius:16px}
  .status-module__grid{grid-template-columns:1fr;gap:10px}
  .status-module__card{padding:14px 16px;gap:7px}
  .status-module__value{font-size:26px}
}

/* Explicit shared typography */
.page-title,
#dashboardPage .dashboard-hero h1,
#swingPage > .swing-tag,
#fundPage > .fund-tag,
.section-title,
.picker-label,
.fund-market-section-title,
.annual-signal-title,
.strategy-rules-summary-title,
.status-module__title,
.status-module__subtitle,
.status-module__label,
.status-module__value,
.status-module__meta{
  font-family:var(--font-sans);
}


/* Page header version badge */
.page-header__title-row{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:12px;
  min-width:0;
}
.page-version{
  flex:0 0 auto;
  color:var(--color-muted);
  font-family:var(--font-sans);
  font-size:var(--font-help);
  font-weight:650;
  line-height:1.2;
  white-space:nowrap;
}
@media(max-width:700px){
  .page-header__title-row{align-items:center}
}

/* Shared semantic message tones — same status palette as badges and lights. */
.status-text--success{color:var(--signal-positive)}
.status-text--danger{color:var(--signal-negative)}
.status-text--warning{color:var(--signal-warning)}
.status-text--neutral{color:var(--signal-neutral)}
