/*!*********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[3]!./app/ui/primitives/skeleton.module.css ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************/
.skeleton_bar__YMWvP {
  display: block;
  border-radius: 6px;
  background: linear-gradient(
    100deg,
    var(--hover) 32%,
    color-mix(in srgb, var(--text) 9%, transparent) 46%,
    var(--hover) 60%
  );
  background-size: 220% 100%;
  animation: skeleton_skShimmer__iSdM5 1.3s ease-in-out infinite;
}

.skeleton_stack__j_QOP {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.skeleton_row__CXp4j {
  display: flex;
  gap: 12px;
  padding: 10px 14px;
}

@keyframes skeleton_skShimmer__iSdM5 {
  from { background-position: 120% 0; }
  to { background-position: -100% 0; }
}

@media (prefers-reduced-motion: reduce) {
  .skeleton_bar__YMWvP { animation: none; }
}

/*!*************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[3]!./app/ui/dashboard/cards/kpiTile.module.css ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************/
/* KpiTile — compact KPI tile (see KpiTile.jsx). One surface for all twelve
   dashboard cards: white card, tinted icon square, title / number / caption,
   change chip with its note, sparkline, three-dot options. The accent
   variant is the single highlighted tile (first Today tile). */

.kpiTile_tile__4ytzh {
  position: relative;
  container-type: inline-size;   /* lets the sparkline yield when the tile itself is narrow */
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  min-width: 0;
  overflow: hidden;
  min-height: 84px;
  padding: 14px 40px 14px 16px;   /* right padding keeps the text clear of the menu button */
  border-radius: 16px;
  background: var(--card);
  color: var(--text);
  border: 1px solid var(--border);
  box-shadow: var(--cardShadow);
  transition: box-shadow 0.2s ease, transform 0.2s ease;
}
.kpiTile_tile__4ytzh:hover { transform: translateY(-2px); box-shadow: var(--cardShadowHover); }
[data-theme="dark"] .kpiTile_tile__4ytzh:hover { transform: none; }

.kpiTile_clickable__JF8Vm { cursor: pointer; }
.kpiTile_clickable__JF8Vm:focus-visible { outline: 2px solid var(--accentColor); outline-offset: 2px; }

.kpiTile_icon__VmX1U {
  flex: none;
  width: 40px;
  height: 40px;
  border-radius: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: color-mix(in srgb, var(--accentColor) 14%, transparent);
  color: var(--accentColor);
}

.kpiTile_texts__I_W44 {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
  flex: 1;
}

.kpiTile_title__Rjlw_ {
  font-size: 13px;
  font-weight: 600;
  color: var(--text);
  line-height: 1.25;
  overflow-wrap: anywhere;   /* wraps to a second line rather than cutting the sentence off */
}

.kpiTile_value__pkfYK {
  font-variant-numeric: tabular-nums;
  font-size: 1.35rem;
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1.15;
  color: var(--text);
  white-space: nowrap;
}

.kpiTile_caption__Q8y8_ {
  font-size: 11.5px;
  color: var(--textSoft);
  line-height: 1.25;
  overflow-wrap: anywhere;
}

/* Change chip + its note, stacked, right of the text */
.kpiTile_chipGroup__baOzY {
  flex: none;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 3px;
}
.kpiTile_chip__Yx6hr {
  font-family: var(--font-mono), ui-monospace, monospace;
  font-variant-numeric: tabular-nums;
  font-size: 11px;
  font-weight: 700;
  border-radius: 999px;
  padding: 2px 8px;
  white-space: nowrap;
}
.kpiTile_chipUp__2ZhLl   { background: color-mix(in srgb, var(--positiveColor) 14%, transparent); color: var(--positiveColor); }
.kpiTile_chipDown__zM1pb { background: color-mix(in srgb, var(--negativeColor) 13%, transparent); color: var(--negativeColor); }
.kpiTile_chipNote__qySDu { font-size: 10.5px; color: var(--textSoft); white-space: nowrap; }
.kpiTile_chipGroup__baOzY { max-width: 40%; }

.kpiTile_spark__zA8_5 { flex: none; display: flex; align-items: center; }

/* Three-dot options in the corner; it triggers the tile's own action */
.kpiTile_menu__mh9Sj {
  position: absolute;
  top: 10px;
  right: 10px;
  width: 26px;
  height: 26px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: none;
  border-radius: 8px;
  background: transparent;
  color: var(--textSoft);
  cursor: pointer;
}
.kpiTile_menu__mh9Sj:hover { background: var(--hover); color: var(--text); }
.kpiTile_menu__mh9Sj:focus-visible { outline: 2px solid var(--accentColor); outline-offset: 1px; }

/* The one highlighted tile */
.kpiTile_accent__qCnbt {
  background: linear-gradient(135deg, #2f80ed 0%, #1d63d8 100%);
  color: #ffffff;
  border-color: rgba(255, 255, 255, 0.18);
  box-shadow: 0 10px 26px -12px rgba(31, 100, 216, 0.55);
}
[data-theme="dark"] .kpiTile_accent__qCnbt { background: linear-gradient(135deg, #2a6fd4 0%, #1b4fae 100%); }
.kpiTile_accent__qCnbt .kpiTile_icon__VmX1U { background: rgba(255, 255, 255, 0.2); color: #ffffff; }
.kpiTile_accent__qCnbt .kpiTile_title__Rjlw_ { color: #ffffff; }
.kpiTile_accent__qCnbt .kpiTile_caption__Q8y8_, .kpiTile_accent__qCnbt .kpiTile_chipNote__qySDu { color: rgba(255, 255, 255, 0.85); }
.kpiTile_accent__qCnbt .kpiTile_value__pkfYK { color: #ffffff; }
.kpiTile_accent__qCnbt .kpiTile_chipUp__2ZhLl, .kpiTile_accent__qCnbt .kpiTile_chipDown__zM1pb { background: rgba(255, 255, 255, 0.2); color: #ffffff; }
.kpiTile_accent__qCnbt .kpiTile_menu__mh9Sj { color: rgba(255, 255, 255, 0.85); }
.kpiTile_accent__qCnbt .kpiTile_menu__mh9Sj:hover { background: rgba(255, 255, 255, 0.18); color: #ffffff; }

/* States */
.kpiTile_error__A9pJM .kpiTile_value__pkfYK { color: var(--negativeColor); font-size: 1.1rem; }
.kpiTile_error__A9pJM .kpiTile_icon__VmX1U { background: color-mix(in srgb, var(--negativeColor) 13%, transparent) !important; color: var(--negativeColor) !important; }
.kpiTile_loading__iphw4 { pointer-events: none; }

/* When the tile is narrow (a three-column grid on a modest window), the
   sparkline yields first, then the chip note; the number never gets pushed. */
@container (max-width: 400px) { .kpiTile_spark__zA8_5 { display: none; } }
@container (max-width: 300px) { .kpiTile_chipNote__qySDu { display: none; } }
@media (prefers-reduced-motion: reduce) {
  .kpiTile_tile__4ytzh, .kpiTile_tile__4ytzh:hover { transform: none; }
}

/*!***********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[3]!./app/ui/primitives/primitives.module.css ***!
  \***********************************************************************************************************************************************************************************************************************************************************************************/
/* Drey primitives — the shared component layer every page migrates onto.
   All colors come from globals.css tokens so both themes work by construction. */

/* ---------- buttons ---------- */
.primitives_btn__iw6Ym {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  font-family: inherit;
  font-size: 13px;
  font-weight: 600;
  line-height: 1.2;
  padding: 7px 12px;
  border-radius: 10px;
  border: 1px solid var(--border);
  background: var(--card);
  color: var(--textSoft);
  cursor: pointer;
  transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, transform 0.1s ease;
  white-space: nowrap;
}
.primitives_btn__iw6Ym:hover:not(:disabled) { color: var(--text); border-color: var(--textSoft); }
.primitives_btn__iw6Ym:active:not(:disabled) { transform: translateY(1px); }
.primitives_btn__iw6Ym:disabled { opacity: 0.55; cursor: not-allowed; }
.primitives_btn__iw6Ym:focus-visible { outline: 2px solid var(--accentColor); outline-offset: 2px; }

.primitives_btn_primary__uILhS {
  background: var(--accentColor);
  border-color: var(--accentColor);
  color: var(--onAccent, #fff);
  box-shadow: 0 6px 18px -6px color-mix(in srgb, var(--accentColor) 55%, transparent);
}
.primitives_btn_primary__uILhS:hover:not(:disabled) { color: var(--onAccent, #fff); border-color: var(--accentColor); filter: brightness(1.06); }

.primitives_btn_danger__7mF4l {
  background: color-mix(in srgb, var(--negativeColor) 13%, transparent);
  border-color: transparent;
  color: var(--negativeColor);
}
.primitives_btn_danger__7mF4l:hover:not(:disabled) { color: var(--negativeColor); border-color: var(--negativeColor); }

.primitives_btn_dangerSolid__QnssP {
  background: var(--negativeColor);
  border-color: var(--negativeColor);
  color: #fff;
}
.primitives_btn_dangerSolid__QnssP:hover:not(:disabled) { color: #fff; filter: brightness(1.08); border-color: var(--negativeColor); }

.primitives_btn_ghost__2CYud { background: transparent; border-color: transparent; }
.primitives_btn_ghost__2CYud:hover:not(:disabled) { background: var(--hover); border-color: transparent; }

.primitives_btn_sm__ik6Q4 { font-size: 12px; padding: 4px 9px; border-radius: 8px; }

.primitives_spin__IEEKj { animation: primitives_primSpin__HB_xb 0.9s linear infinite; }
@keyframes primitives_primSpin__HB_xb { from { transform: rotate(0); } to { transform: rotate(360deg); } }

/* Spinner's overlay mode: dimmed full-viewport backdrop, centered ring +
   optional label. Same z-index tier as Modal's veil (10000) minus one, so a
   loading overlay never outranks an actual dialog if both are briefly live. */
.primitives_spinnerOverlay__nm8jf {
  position: fixed;
  inset: 0;
  background: rgba(15, 23, 42, 0.45);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 16px;
  z-index: 9999;
  backdrop-filter: blur(2px);
  color: white;
}
.primitives_spinnerOverlayLabel__kqE3g {
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.3px;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4);
}

/* ---------- panel / card ---------- */
.primitives_panel__rrPzH {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 16px;
  box-shadow: var(--cardShadow);
  /* clip, not hidden: clips to the rounded corners just the same but does
     NOT create a scroll container, so sticky table headers inside a panel
     stick to the page instead of to the panel. hidden stays as the fallback
     for browsers without clip. */
  overflow: hidden;
  overflow: clip;
  animation: primitives_primRise__4QMkJ 0.35s ease both;
}
.primitives_panelHead__Iwh_V {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 16px 0;
}
.primitives_panelHead__Iwh_V > .primitives_eyebrow__UhDQO { flex: 1; }
.primitives_panelActions__Tl7DZ { display: flex; align-items: center; gap: 6px; }
.primitives_panelBody__MvoQh { padding: 14px 16px; }
.primitives_panelBody_flush__52jx1 { padding: 0; }
.primitives_panelSub__HtxNA { font-size: 12px; color: var(--textSoft); padding: 2px 16px 0; }

@keyframes primitives_primRise__4QMkJ { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
  .primitives_panel__rrPzH { animation: none; }
  .primitives_btn__iw6Ym, .primitives_segBtn__efaW4 { transition: none; }
}

/* ---------- typography bits ---------- */
.primitives_eyebrow__UhDQO {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--textSoft);
}
.primitives_pageHeader__yDP6H {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  margin: 2px 0 16px;
}
.primitives_pageTitle__bwASz {
  font-size: 1.4rem;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: var(--text);
  display: flex;
  align-items: center;
  gap: 8px;
}
.primitives_pageSub__KXZ3H { font-size: 13px; color: var(--textSoft); margin-top: 2px; max-width: 80ch; }
.primitives_pageActions__O_YM_ { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }

.primitives_mono__IKn8f {
  font-family: var(--font-mono), ui-monospace, SFMono-Regular, monospace;
  font-variant-numeric: tabular-nums;
}

/* ---------- stat tile ---------- */
.primitives_statTile__4cTuj {
  background: var(--bgSoft);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 10px 12px;
  min-width: 0;
}
.primitives_statLabel__bsCY6 {
  display: block;
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--textSoft);
  margin-bottom: 2px;
}
.primitives_statValue__bvc5z {
  font-family: var(--font-mono), ui-monospace, SFMono-Regular, monospace;
  font-variant-numeric: tabular-nums;
  font-size: 1.45rem;
  font-weight: 500;
  letter-spacing: -0.02em;
  color: var(--text);
  line-height: 1.15;
}
.primitives_statSub__Q_L2b { font-size: 11.5px; color: var(--textSoft); }
.primitives_tone_good__rwhDv .primitives_statValue__bvc5z { color: var(--positiveColor); }
.primitives_tone_warn__bjAkE .primitives_statValue__bvc5z { color: #d69e2e; }
.primitives_tone_bad__lItaP .primitives_statValue__bvc5z { color: var(--negativeColor); }

/* ---------- pills ---------- */
.primitives_pill__C8efK {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 11px;
  font-weight: 600;
  border-radius: 999px;
  padding: 2px 10px;
  white-space: nowrap;
}
.primitives_pill__C8efK::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; flex: none; }
.primitives_pill_nodot___wQCN::before { display: none; }
.primitives_pill_neutral__yrP17 { background: var(--hover); color: var(--textSoft); }
.primitives_pill_info__yoWuW { background: color-mix(in srgb, var(--accentColor) 14%, transparent); color: var(--accentColor); }
.primitives_pill_good__05j77 { background: color-mix(in srgb, var(--positiveColor) 14%, transparent); color: var(--positiveColor); }
.primitives_pill_warn___wdkY { background: color-mix(in srgb, #d69e2e 16%, transparent); color: #d69e2e; }
.primitives_pill_bad__vxoAT { background: color-mix(in srgb, var(--negativeColor) 13%, transparent); color: var(--negativeColor); }

/* ---------- segmented control — the raised white active pill ---------- */
.primitives_seg__lITUm {
  display: inline-flex;
  flex-wrap: wrap; /* many-option controls (e.g. 8 time ranges) wrap instead of clipping */
  background: var(--hover);
  border: 1px solid var(--border);
  border-radius: 11px;
  padding: 3px;
  gap: 2px;
}
.primitives_segBtn__efaW4 {
  font-family: inherit;
  font-size: 12.5px;
  font-weight: 500;
  color: var(--textSoft);
  background: transparent;
  border: none;
  border-radius: 8px;
  padding: 5px 12px;
  cursor: pointer;
  white-space: nowrap;
  transition: background-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
}
.primitives_segBtn__efaW4:hover { color: var(--text); }
.primitives_segBtnActive__4cUfk {
  background: var(--card); /* white in light theme — the raised pill */
  color: var(--text);
  font-weight: 700;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.14);
}

/* ---------- table ---------- */
/* Narrow screens keep horizontal scrolling for wide tables. From 1024px up
   the wrapper only clips, so it stops being a scroll container and the
   sticky header below can follow the page scroll. */
.primitives_tableWrap__IKRmT { overflow-x: auto; }
@media (min-width: 1024px) {
  .primitives_tableWrap__IKRmT { overflow-x: clip; }
}
.primitives_table__p0BSq { width: 100%; border-collapse: collapse; font-size: 13px; }
.primitives_table__p0BSq th {
  text-align: left;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--textSoft);
  padding: 10px 14px;
  /* Sticky column headers. Opaque card background so scrolled rows don't
     show through; the rule line is an inset shadow rather than a border,
     because collapsed-border tables drop a sticky cell's border on scroll. */
  position: sticky;
  top: 0;
  z-index: 2;
  background: var(--card);
  box-shadow: inset 0 -1px 0 var(--border);
  white-space: nowrap;
}
.primitives_table__p0BSq td { padding: 10px 14px; border-bottom: 1px solid var(--border); vertical-align: middle; }
.primitives_table__p0BSq tbody tr:last-child td { border-bottom: none; }
.primitives_table__p0BSq tbody tr:hover { background: var(--hover); }

/* ---------- pagination ---------- */
.primitives_pager__ZB80o {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 10px 0;
  font-size: 12.5px;
  color: var(--textSoft);
}
.primitives_pagerLabel__1Xrod {
  font-family: var(--font-mono), ui-monospace, monospace;
  font-variant-numeric: tabular-nums;
  font-size: 12px;
  padding: 0 4px;
}

/* ---------- modal ---------- */
.primitives_veil__iI41l {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.45);
  /* Above every page-level modal/toast (pages use up to ~1001-9999):
     a confirm launched from inside another modal must stack on top,
     the way native window.confirm always did. */
  z-index: 10000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  animation: primitives_primFade__dQW3L 0.15s ease both;
}
.primitives_modal__uaiHa {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 16px;
  box-shadow: var(--cardShadowHover);
  width: min(520px, 94vw);
  max-height: 88vh;
  display: flex;
  flex-direction: column;
  animation: primitives_primRise__4QMkJ 0.2s ease both;
}
.primitives_modalHead__Nk08J {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 14px 16px 0;
}
.primitives_modalX__6jplc {
  background: transparent;
  border: none;
  color: var(--textSoft);
  font-size: 14px;
  cursor: pointer;
  border-radius: 6px;
  padding: 2px 7px;
}
.primitives_modalX__6jplc:hover { background: var(--hover); color: var(--text); }
.primitives_modalBody__Nahwt { padding: 12px 16px; overflow-y: auto; font-size: 13.5px; color: var(--text); }
.primitives_modalFoot__uzH8F {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  padding: 0 16px 14px;
}
.primitives_confirmBody__icor4 { font-size: 13.5px; color: var(--textSoft); white-space: pre-line; }

.primitives_promptInput__wuJm7 {
  width: 100%;
  font-family: inherit;
  font-size: 13.5px;
  color: var(--text);
  background: var(--bgSoft);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 8px 12px;
  margin-top: 4px;
}
.primitives_promptInput__wuJm7:focus-visible {
  outline: 2px solid var(--accentColor);
  outline-offset: 1px;
}
.primitives_promptInput__wuJm7::placeholder { color: var(--textSoft); }

@keyframes primitives_primFade__dQW3L { from { opacity: 0; } to { opacity: 1; } }

/* ---------- empty state / spinner ---------- */
.primitives_empty__g5y5_ {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  text-align: center;
  padding: 32px 20px;
  color: var(--textSoft);
}
.primitives_emptyTitle__p0qZG { font-size: 14px; font-weight: 600; color: var(--text); }
.primitives_emptySub__wWHYu { font-size: 12.5px; max-width: 46ch; }
.primitives_emptyIllust__pQ20d { margin-bottom: 6px; }

/*!*************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[3]!./app/ui/primitives/illustration.module.css ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************/
/* Illustration — one visual grammar for every empty state and status page:
   the same "floating chart card" object that lives on the login rail and
   the dashboard hero, so a blank panel still reads as part of this product.
   Light palette matches login.css / the hero SVG exactly; dark overrides
   mirror login.css's [data-theme="dark"] recolours. Semantic colours
   (good/bad) come from the app tokens so they track the theme by themselves. */

.illustration_svg__HjW7A { display: block; overflow: visible; }

.illustration_card__fFkZF   { fill: var(--card); stroke: var(--border); stroke-width: 1; }
.illustration_cardFill__cXowx { fill: var(--card); }
.illustration_shadow__PCYfQ { fill: #2f80ed; opacity: 0.10; }
.illustration_soft__tYODU   { fill: #eaf1fb; }
.illustration_track__juZCw  { stroke: #e3edfb; }
.illustration_accentStroke__4FMic { stroke: #2f80ed; }
.illustration_accentFill__qR5Ag   { fill: #2f80ed; }
.illustration_ghost__2fvQl  { fill: none; stroke: #2f80ed; stroke-dasharray: 5 5; opacity: 0.55; }

.illustration_good__DPxfF     { stroke: var(--positiveColor); }
.illustration_goodFill__mFR_V { fill: var(--positiveColor); }
.illustration_bad__1IRU7      { stroke: var(--negativeColor); }
.illustration_badFill__Tc8Y1  { fill: var(--negativeColor); }

[data-theme="dark"] .illustration_soft__tYODU   { fill: rgba(255, 255, 255, 0.14); }
[data-theme="dark"] .illustration_track__juZCw  { stroke: rgba(255, 255, 255, 0.14); }
[data-theme="dark"] .illustration_accentStroke__4FMic,
[data-theme="dark"] .illustration_ghost__2fvQl  { stroke: #2f9fda; }
[data-theme="dark"] .illustration_accentFill__qR5Ag,
[data-theme="dark"] .illustration_shadow__PCYfQ { fill: #2f9fda; }

/*!****************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[3]!./app/ui/dashboard/cards/TrendModal.module.css ***!
  \****************************************************************************************************************************************************************************************************************************************************************************************/
/* TrendModal — a KPI tile's monthly history. Three quiet stat cells, one
   single-series area chart in the accent (one series needs no legend; the
   title names it), and a note saying exactly what the data is. Numbers in
   the data face, text in text tokens; the chart's grid and axes recede. */

.TrendModal_loading__QAw9I {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  padding: 28px 0;
  font-size: 13px;
  color: var(--textSoft);
}

.TrendModal_stats__9yt0J {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
  margin-bottom: 12px;
}
.TrendModal_stat__Mmzmd {
  background: var(--bgSoft);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 10px 12px;
  min-width: 0;
}
.TrendModal_statLabel__SfKLw {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--textSoft);
  margin-bottom: 4px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.TrendModal_statValue__hqq3l {
  font-family: var(--font-mono), ui-monospace, SFMono-Regular, Menlo, monospace;
  font-variant-numeric: tabular-nums;
  font-size: 18px;
  font-weight: 600;
  color: var(--text);
  white-space: nowrap;
}
.TrendModal_up__mwTVe   { color: var(--positiveColor); }
.TrendModal_down__TyNNz { color: var(--negativeColor); }
.TrendModal_pct__yU4Pr  { font-size: 12px; font-weight: 500; opacity: 0.85; }

.TrendModal_callout__NePSH {
  margin: 0 0 10px;
  font-size: 13px;
  line-height: 1.5;
  color: var(--text);
}

.TrendModal_chart__1tNjY { margin: 0 -4px; }

.TrendModal_tip__xboxg {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 8px 10px;
  box-shadow: var(--cardShadowHover);
}
.TrendModal_tipLabel__YGSdi { font-size: 11px; color: var(--textSoft); margin-bottom: 2px; }
.TrendModal_tipValue__T0ge_ {
  font-family: var(--font-mono), ui-monospace, SFMono-Regular, Menlo, monospace;
  font-variant-numeric: tabular-nums;
  font-size: 13px;
  font-weight: 600;
  color: var(--text);
}

@media (max-width: 560px) {
  .TrendModal_stats__9yt0J { grid-template-columns: 1fr; }
}

/*!***************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[3]!./app/ui/dashboard/cards/card_latest_news/card_latest_news.module.css ***!
  \***************************************************************************************************************************************************************************************************************************************************************************************************************/
/* Drey restyle: quiet card surface, eyebrow headers, tokenized text.
   The old navy promo gradient is gone; icon hues are theme-scoped so they
   read on both grounds. */

.card_latest_news_container__0B22e {
  background: var(--card);
  padding: 20px 18px;
  border-radius: 16px;
  display: flex;
  flex-direction: column;
  width: 100%;
  box-shadow: var(--cardShadow);
  border: 1px solid var(--border);
  position: relative;
  overflow: hidden;
  transition: box-shadow 0.2s ease, border-color 0.2s ease;
}

[data-theme="light"] .card_latest_news_container__0B22e {
  background: var(--card);
  box-shadow: var(--cardShadow);
  border: 1px solid var(--border);
}

[data-theme="dark"] .card_latest_news_container__0B22e {
  background: var(--card);
  box-shadow: var(--cardShadow);
  border: 1px solid var(--border);
}

.card_latest_news_container__0B22e:hover {
  transform: none;
  box-shadow: var(--cardShadowHover);
  border-color: var(--border);
}

[data-theme="light"] .card_latest_news_container__0B22e:hover {
  box-shadow: var(--cardShadowHover);
}

[data-theme="dark"] .card_latest_news_container__0B22e:hover {
  background: var(--card);
  box-shadow: var(--cardShadowHover);
}

.card_latest_news_header__8nSMR {
  margin-bottom: 12px;
  position: relative;
}

.card_latest_news_title__b9DdI {
  font-size: 11px;
  font-weight: 700;
  margin: 0 0 9px 0;
  color: var(--textSoft);
  text-align: left;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  text-shadow: none;
}

.card_latest_news_headerDivider__Kv2z3 {
  width: 100%;
  height: 1px;
  margin: 0;
  background: var(--border);
}

.card_latest_news_featureList__gGywS {
  display: flex;
  flex-direction: column;
  gap: 7px;
  position: relative;
  margin-bottom: 6px;
}

.card_latest_news_featureItem__7f4q2 {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 9px;
  min-height: 0;
  height: auto;
  border-radius: 10px;
  transition: background-color 0.15s ease;
  background: transparent;
}

.card_latest_news_featureItem__7f4q2:hover {
  background: var(--hover);
  transform: none;
}

.card_latest_news_featureIcon__Onnxr {
  display: flex;
  justify-content: center;
  align-items: center;
  min-width: 18px;
  height: 18px;
  font-size: 16px;
  flex-shrink: 0;
}

.card_latest_news_featureItem__7f4q2:hover .card_latest_news_featureIcon__Onnxr {
  transform: none;
}

/* Icon hues — soft set for the dark ground */
.card_latest_news_iconSavings__BXFv5 { color: #4ade80; }
.card_latest_news_iconSecurity__CJ72V { color: #38bdf8; }
.card_latest_news_iconCode__mJ5sf { color: #e879f9; }
.card_latest_news_iconGlobe__DnWU6 { color: #22d3ee; }
.card_latest_news_iconRestore__oteBG { color: #a3e635; }
.card_latest_news_iconPerson__EDEsq { color: #fbbf24; }
.card_latest_news_iconClick__C470s { color: #2dd4bf; }
.card_latest_news_iconAI__72v3A { color: #c084fc; }

/* Saturated set for the light ground */
[data-theme="light"] .card_latest_news_iconSavings__BXFv5 { color: #16a34a; }
[data-theme="light"] .card_latest_news_iconSecurity__CJ72V { color: #0284c7; }
[data-theme="light"] .card_latest_news_iconCode__mJ5sf { color: #c026d3; }
[data-theme="light"] .card_latest_news_iconGlobe__DnWU6 { color: #0891b2; }
[data-theme="light"] .card_latest_news_iconRestore__oteBG { color: #65a30d; }
[data-theme="light"] .card_latest_news_iconPerson__EDEsq { color: #d97706; }
[data-theme="light"] .card_latest_news_iconClick__C470s { color: #0d9488; }
[data-theme="light"] .card_latest_news_iconAI__72v3A { color: #9333ea; }

.card_latest_news_featureText__Zcfd_ {
  flex: 1;
  display: flex;
  align-items: center;
}

.card_latest_news_featureTitle__u77Yl {
  margin: 0;
  font-size: 13px;
  color: var(--text);
  font-weight: 500;
  line-height: 1.4;
  text-shadow: none;
  transition: none;
  padding: 2px 0;
  text-align: left;
}

.card_latest_news_featureItem__7f4q2:hover .card_latest_news_featureTitle__u77Yl {
  transform: none;
}

/* News & Updates Section */
.card_latest_news_newsSection__3PZz5 {
  margin-top: 13px;
  padding-top: 14px;
  border-top: 1px solid var(--border);
}

.card_latest_news_newsHeader__54gTr {
  margin-bottom: 9px;
  position: relative;
}

.card_latest_news_newsTitle__LgXPo {
  font-size: 11px;
  font-weight: 700;
  margin: 0 0 7px 0;
  color: var(--textSoft);
  text-align: left;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  text-shadow: none;
}

.card_latest_news_newsDivider__OwEN4 {
  width: 100%;
  height: 1px;
  margin: 0;
  background: var(--border);
}

.card_latest_news_newsList__HzE1f {
  display: flex;
  flex-direction: column;
  gap: 9px;
}

.card_latest_news_newsItem__BuIxA {
  display: flex;
  align-items: flex-start;
  gap: 9px;
  padding: 7px 9px;
  border-radius: 10px;
  transition: background-color 0.15s ease;
  background: transparent;
  cursor: pointer;
}

.card_latest_news_newsItem__BuIxA:hover {
  background: var(--hover);
  transform: none;
}

.card_latest_news_newsIcon__BTNKm {
  display: flex;
  justify-content: center;
  align-items: center;
  min-width: 16px;
  height: 16px;
  font-size: 14px;
  flex-shrink: 0;
  margin-top: 1px;
}

.card_latest_news_newsItem__BuIxA:hover .card_latest_news_newsIcon__BTNKm {
  transform: none;
}

/* News icon colors */
.card_latest_news_iconNew__r4r_Z { color: #f87171; }
.card_latest_news_iconUpdate__Ba3t1 { color: #2dd4bf; }
.card_latest_news_iconRocket__yb0mt { color: #facc15; }
.card_latest_news_iconTrending__x9jWN { color: #4ade80; }
.card_latest_news_iconWiki__KegKi { color: #fbbf24; }

[data-theme="light"] .card_latest_news_iconNew__r4r_Z { color: #dc2626; }
[data-theme="light"] .card_latest_news_iconUpdate__Ba3t1 { color: #0d9488; }
[data-theme="light"] .card_latest_news_iconRocket__yb0mt { color: #ca8a04; }
[data-theme="light"] .card_latest_news_iconTrending__x9jWN { color: #16a34a; }
[data-theme="light"] .card_latest_news_iconWiki__KegKi { color: #d97706; }

.card_latest_news_newsContent__opOC1 {
  flex: 1;
}

.card_latest_news_newsText__b5N2p {
  margin: 0;
  font-size: 12.5px;
  color: var(--text);
  font-weight: 500;
  line-height: 1.45;
  text-shadow: none;
  text-align: left;
}

.card_latest_news_newsDate__2sXBN {
  display: block;
  font-size: 11px;
  color: var(--textSoft);
  margin-top: 2px;
  font-weight: 400;
}

/* Responsive adjustments */
@media (max-width: 768px) {
  .card_latest_news_container__0B22e {
    padding: 17px 15px;
  }

  .card_latest_news_title__b9DdI {
    font-size: 11px;
  }

  .card_latest_news_newsTitle__LgXPo {
    font-size: 11px;
  }

  .card_latest_news_featureItem__7f4q2,
  .card_latest_news_newsItem__BuIxA {
    padding: 7px 8px;
  }

  .card_latest_news_featureIcon__Onnxr {
    min-width: 18px;
    height: 18px;
    font-size: 16px;
  }

  .card_latest_news_newsIcon__BTNKm {
    min-width: 16px;
    height: 16px;
    font-size: 14px;
  }
}

a.card_latest_news_featureItem__7f4q2,
a.card_latest_news_newsItem__BuIxA {
  cursor: pointer;
}

/*!*********************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[3]!./app/ui/dashboard/cards/RightNowStrip/RightNowStrip.module.css ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************************************/
/* RightNowStrip — the one thing on the overview that moves. A single quiet
   card: a live dot, the eyebrow, three facts, and the file being archived
   this moment with its progress. Numbers in the data face, tabular. */

.RightNowStrip_strip__vhb11 {
  margin: 0 4px 12px;
  padding: 12px 16px;
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 16px;
  box-shadow: var(--cardShadow);
  display: flex;
  flex-direction: column;
  gap: 8px;
  animation: RightNowStrip_rnFade__wAygy 0.35s ease both;
}

.RightNowStrip_head__9oVSQ {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  font-size: 13px;
  color: var(--textSoft);
}

.RightNowStrip_eyebrow__m5kj3 {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--textSoft);
}

.RightNowStrip_facts__d6Y01 b {
  font-family: var(--font-mono), ui-monospace, SFMono-Regular, Menlo, monospace;
  font-variant-numeric: tabular-nums;
  font-weight: 600;
  color: var(--text);
}
.RightNowStrip_sep__9_unO { margin: 0 8px; opacity: 0.5; }
.RightNowStrip_muted__4V5Mn { opacity: 0.7; }

.RightNowStrip_dot__li82t {
  flex: none;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--textSoft);
  opacity: 0.45;
}
.RightNowStrip_dotLive__39cYK {
  background: var(--positiveColor);
  opacity: 1;
  animation: RightNowStrip_rnPulse__qqcVz 2s ease-out infinite;
}

.RightNowStrip_now__EyvES {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
  font-size: 13px;
  color: var(--text);
}
.RightNowStrip_nowLabel__PyIyN {
  flex: none;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--accentColor);
}
.RightNowStrip_file__KSm7O {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.RightNowStrip_track__QDUTB {
  flex: 0 0 140px;
  height: 6px;
  border-radius: 999px;
  background: var(--hover);
  overflow: hidden;
}
.RightNowStrip_fill__AmpXs {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: var(--accentColor);
  transition: width 0.6s ease;
}
.RightNowStrip_pct__l4y3v {
  flex: none;
  width: 36px;
  text-align: right;
  font-family: var(--font-mono), ui-monospace, SFMono-Regular, Menlo, monospace;
  font-variant-numeric: tabular-nums;
  font-size: 12px;
  color: var(--textSoft);
}
.RightNowStrip_idle__5s1pu { color: var(--textSoft); }

@keyframes RightNowStrip_rnPulse__qqcVz {
  0%   { box-shadow: 0 0 0 0 color-mix(in srgb, var(--positiveColor) 45%, transparent); }
  70%  { box-shadow: 0 0 0 8px transparent; }
  100% { box-shadow: 0 0 0 0 transparent; }
}
@keyframes RightNowStrip_rnFade__wAygy { from { opacity: 0; } to { opacity: 1; } }

@media (prefers-reduced-motion: reduce) {
  .RightNowStrip_dotLive__39cYK { animation: none; }
  .RightNowStrip_fill__AmpXs { transition: none; }
  .RightNowStrip_strip__vhb11 { animation: none; }
}
@media (max-width: 640px) {
  .RightNowStrip_track__QDUTB { flex-basis: 90px; }
}

/*!*************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[3]!./app/ui/dashboard/cards/HighlightsStrip/HighlightsStrip.module.css ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************************************/
/* HighlightsStrip — the "Right now" strip's sibling: one card, three cells,
   each the latest invoiced month against the one before. Same card grammar;
   percentages in the data face, tabular; one accent for "now", a muted bar
   for "then". Direction is carried by the arrow and the words, not by
   colour — a fall in restores is not bad news. */

.HighlightsStrip_strip__l71Rn {
  margin: 0 4px 12px;
  padding: 12px 16px 14px;
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 16px;
  box-shadow: var(--cardShadow);
  display: flex;
  flex-direction: column;
  gap: 10px;
  animation: HighlightsStrip_hlFade__GCNmK 0.35s ease both;
}

.HighlightsStrip_head__Uvpen {
  display: flex;
  align-items: baseline;
  gap: 10px;
}

.HighlightsStrip_eyebrow__FOuh3 {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--textSoft);
}

.HighlightsStrip_period__tosh6 {
  font-size: 12px;
  color: var(--textSoft);
}

.HighlightsStrip_grid__xKY2v {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.HighlightsStrip_cell__ZDF8B {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-width: 0;
  overflow: hidden;
  padding: 2px 16px;
  border-left: 1px solid var(--border);
}
.HighlightsStrip_cell__ZDF8B:first-child {
  padding-left: 0;
  border-left: none;
}
.HighlightsStrip_cell__ZDF8B:last-child { padding-right: 0; }

.HighlightsStrip_text__FJRZc {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}

.HighlightsStrip_noun__NBqdN {
  font-size: 12px;
  color: var(--textSoft);
  overflow-wrap: anywhere;
}

.HighlightsStrip_line__At_2D {
  display: flex;
  align-items: baseline;
  gap: 6px;
  flex-wrap: wrap;
}

.HighlightsStrip_arrow__swuRj {
  font-size: 11px;
  color: var(--textSoft);
  align-self: center;
}

.HighlightsStrip_delta__5deis {
  font-family: var(--font-mono), ui-monospace, SFMono-Regular, Menlo, monospace;
  font-variant-numeric: tabular-nums;
  font-size: 22px;
  font-weight: 600;
  line-height: 1.1;
  color: var(--text);
}

.HighlightsStrip_rel__r3372 {
  font-size: 12px;
  color: var(--textSoft);
}

.HighlightsStrip_values__YZJzL {
  font-size: 12px;
  color: var(--text);
  font-variant-numeric: tabular-nums;
  overflow-wrap: anywhere;
}
.HighlightsStrip_vs__CZBOY { color: var(--textSoft); }

.HighlightsStrip_bars__JlaiG { flex: none; }
.HighlightsStrip_barPrev__8dchX { fill: var(--textSoft); opacity: 0.35; }
.HighlightsStrip_barNow__NADke  { fill: var(--accentColor); }

.HighlightsStrip_srOnly__Hurra {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

@keyframes HighlightsStrip_hlFade__GCNmK { from { opacity: 0; } to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .HighlightsStrip_strip__l71Rn { animation: none; } }

@media (max-width: 900px) {
  .HighlightsStrip_grid__xKY2v { grid-template-columns: 1fr; }
  .HighlightsStrip_cell__ZDF8B {
    padding: 8px 0;
    border-left: none;
    border-top: 1px solid var(--border);
  }
  .HighlightsStrip_cell__ZDF8B:first-child { border-top: none; padding-top: 0; }
  .HighlightsStrip_cell__ZDF8B:last-child { padding-bottom: 0; }
}

/*!******************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[3]!./app/ui/dashboard/cards/insightCards.module.css ***!
  \******************************************************************************************************************************************************************************************************************************************************************************************/
/* Insight cards on the overview: Savings, SharePoint-without-Squirrel,
   Largest sites. Same card grammar as the KPI tiles; numbers in the data
   face; the two bar colours are the validated pair the bottom row uses
   (blue = in SharePoint now, green = archived / in Squirrel). */

.insightCards_card__VW1VO {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 16px;
  box-shadow: var(--cardShadow);
  padding: 14px 16px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  min-width: 0;
  overflow: hidden;   /* long content wraps or clips inside the card, never outside it */
  container-type: inline-size;
  min-width: 0;
}

.insightCards_eyebrow__ecHQb {
  font-size: 13px;
  font-weight: 700;
  color: var(--text);
}

.insightCards_big__FM_YP {
  font-family: var(--font-mono), ui-monospace, SFMono-Regular, Menlo, monospace;
  font-variant-numeric: tabular-nums;
  font-size: 24px;
  font-weight: 600;
  letter-spacing: -0.02em;
  line-height: 1.1;
  color: var(--text);
}
.insightCards_sub__VcYHC { font-size: 12.5px; color: var(--textSoft); margin-top: -4px; }
.insightCards_line__ZGxmg { font-size: 13px; line-height: 1.45; color: var(--text); }
.insightCards_line__ZGxmg b {
  font-family: var(--font-mono), ui-monospace, SFMono-Regular, Menlo, monospace;
  font-variant-numeric: tabular-nums;
  font-weight: 600;
}
.insightCards_note__LN9r8 { font-size: 11px; line-height: 1.45; color: var(--textSoft); margin-top: auto; }

/* compact stat cells (savings card) */
.insightCards_cells__KiMru { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
@container (max-width: 300px) { .insightCards_cells__KiMru { grid-template-columns: 1fr; } }   /* narrow card: stack the two cells */
.insightCards_cell__q6YAE {
  background: var(--bgSoft);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 8px 10px;
  min-width: 0;
}
.insightCards_cellLabel__uLZlh {
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--textSoft);
  margin-bottom: 2px;
}
.insightCards_cellValue__C8k7d {
  font-family: var(--font-mono), ui-monospace, SFMono-Regular, Menlo, monospace;
  font-variant-numeric: tabular-nums;
  font-size: 15px;
  font-weight: 600;
  color: var(--text);
  white-space: nowrap;
}
.insightCards_cellSub__QnKzN { font-size: 11px; color: var(--textSoft); }

/* full-width sparkline with a caption */
.insightCards_sparkWrap__2SLqR { display: flex; flex-direction: column; gap: 4px; margin-top: 2px; }
.insightCards_sparkWrap__2SLqR svg { display: block; }
.insightCards_caption__wp7w5 { font-size: 11px; color: var(--textSoft); }

/* two-segment comparison bar */
.insightCards_track__EpeqH {
  display: flex;
  gap: 2px;
  height: 8px;
  border-radius: 999px;
  overflow: hidden;
  background: var(--hover);
}
.insightCards_segCurrent__TVuxv  { display: block; height: 100%; background: #2f80ed; border-radius: 999px 0 0 999px; }
.insightCards_segArchived__vtDAx { display: block; height: 100%; background: #16a34a; border-radius: 0 999px 999px 0; }
.insightCards_legend__3yZDB { display: flex; gap: 14px; flex-wrap: wrap; font-size: 12px; color: var(--textSoft); }
.insightCards_dot__Q4Kqm { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 6px; vertical-align: 1px; }
.insightCards_dotCurrent__vHcJ_  { background: #2f80ed; }
.insightCards_dotArchived__dk957 { background: #16a34a; }

/* ranked list */
.insightCards_list__CVw9t { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 7px; }
.insightCards_row__DaYRC {
  display: grid;
  grid-template-columns: 18px minmax(0, 1fr) auto;
  align-items: center;
  column-gap: 8px;
  row-gap: 3px;
  font-size: 13px;
}
.insightCards_rank__y7Vr6 {
  font-family: var(--font-mono), ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 11px;
  color: var(--textSoft);
}
.insightCards_name__wHAtr {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--text);
  text-decoration: none;
}
.insightCards_name__wHAtr:hover { text-decoration: underline; }
.insightCards_size__Gx4CK {
  font-family: var(--font-mono), ui-monospace, SFMono-Regular, Menlo, monospace;
  font-variant-numeric: tabular-nums;
  font-size: 12px;
  color: var(--text);
}
.insightCards_rowTrack__fDzLy { grid-column: 2 / 4; height: 4px; border-radius: 999px; background: var(--hover); overflow: hidden; }
.insightCards_rowFill__qDIgW { display: block; height: 100%; background: #2f80ed; border-radius: 999px; }

.insightCards_link__fdb7n {
  align-self: flex-start;
  margin-top: auto;
  background: none;
  border: none;
  padding: 0;
  font: inherit;
  font-size: 12px;
  font-weight: 600;
  color: var(--accentColor);
  cursor: pointer;
}
.insightCards_link__fdb7n:hover { text-decoration: underline; }
.insightCards_link__fdb7n:focus-visible { outline: 2px solid var(--accentColor); outline-offset: 2px; border-radius: 4px; }

/* Same content rendered inside another card (Storage Metrics): no chrome, a hairline above. */
.insightCards_bare__Ues06 {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 14px;
  padding-top: 12px;
  border-top: 1px solid var(--border);
}

/*!*********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[5].use[3]!./app/ui/dashboard/dashboard.module.css ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************/
/* Dashboard layout styles */
.dashboard_layout__tmA8d {
  display: flex;
  width: 100%;
  min-height: 100vh;
}

.dashboard_sidebarContainer__ISEk2 {
  width: 230px;
  flex-shrink: 0;
  background: linear-gradient(180deg, var(--sidebar) 0%, var(--sidebarDeep, var(--sidebar)) 100%);
  height: 100vh;
  position: sticky;
  top: 0;
  overflow-y: auto;
}

.dashboard_contentContainer__sTzkv {
  flex: 1;
  min-width: 0;   /* never wider than the window: a wide child (log lines) scrolls inside itself, not the page */
  max-width: 100%;
  display: flex;
  flex-direction: column;
  background-color: var(--bg);
  /* clip rather than hidden: still stops horizontal page overflow, but
     doesn't create a scroll container, so sticky table headers can follow
     the window scroll. hidden stays as the fallback. */
  overflow-x: hidden;
  overflow-x: clip;
}

.dashboard_pageContent__XLGzY {
  padding: 8px;
  /* The window scrolls the page (the sidebar is sticky against the
     viewport); this box never scrolled on its own, but overflow-y: auto
     still made it a scroll container that trapped sticky headers. */
  overflow-y: visible;
}

/* Dashboard content styles */
.dashboard_wrapper__BHOQf {
  display: flex;
  gap: 14px;
  margin-top: 0;
  padding: 0 14px;
  /* Full browser width (operator's call). The grids use minmax(0,1fr) and the
     tiles yield their sparkline when narrow, so stretching is safe now. */
  max-width: 100%;
}

.dashboard_main__h9_Qo {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 5px;
}

.dashboard_side__cRt2d {
  flex: 0 0 300px;   /* fixed rail: it was being squeezed off the edge as a flex fraction */
  width: 300px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}

/* Card row - using grid for equal spacing and width */
.dashboard_cardRow__AeYHq, .dashboard_cards__FzV77 {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));   /* minmax(0,…): a wide tile can never push the row past the edge */
  gap: 12px;
}

/* Make side cards have consistent styling */
/* Neutral pass-through: the news card styles its own surface now —
   the old purple rail background/white text/centering are gone.
   Surface properties (padding/background/shadow/radius) are left off this
   rule entirely - .side > div's higher specificity (class+type) was beating
   the card's own .container class and silently zeroing its padding, which
   pushed the heading text up into the rounded corner's clip region. */
.dashboard_side__cRt2d > div {
  margin-bottom: 14px;
  width: 100%;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  text-align: left;
  color: inherit;
}

/* Squirrel Features card specifically */
.dashboard_side__cRt2d > div:nth-child(1) {
  height: auto;
  justify-content: flex-start;
  margin-bottom: 0;
}

/* Card styles */
.dashboard_card__KyCkw {
  background-color: var(--card);
  padding: 16px;
  border-radius: 16px;
  border: 1px solid var(--border);
  box-shadow: var(--cardShadow);
  display: flex;
  flex-direction: column;
  transition: background-color 0.3s ease, box-shadow 0.3s ease;
}

/* Light theme specific styling */
[data-theme="light"] .dashboard_card__KyCkw {
  box-shadow: var(--cardShadow);
}

/* Card title styles */
.dashboard_cardTitle__BMhBI {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--textSoft);
  margin-bottom: 10px;
}

/* Card value styles */
.dashboard_cardValue__gj4CO {
  font-size: 1.6rem;
  font-weight: 500;
  font-family: var(--font-mono), ui-monospace, SFMono-Regular, monospace;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.02em;
  color: var(--accentColor, #00a0e4);
  margin: 6px 0;
}

.dashboard_valueGreen__Yew1k {
  color: #4caf50;
}

.dashboard_valueBlue__Be3C0 {
  color: #2196f3;
}

.dashboard_valuePurple__GbPNr {
  color: #9c27b0;
}

/* Description styles */
.dashboard_cardDesc__nJNnR {
  font-size: 12px;
  color: var(--textSoft);
  margin-top: 6px;
}

/* Icon styles */
.dashboard_cardIcon__hM0tl {
  padding: 5px;
  border-radius: 10px;
  margin-bottom: 8px;
  width: 32px;
  height: 32px;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* Section title styles */
.dashboard_sectionTitle__wqeBB {
  font-size: 18px;
  font-weight: 500;
  margin-bottom: 14px;
  color: var(--text);
}

/* Common styles for side card elements */
.dashboard_side__cRt2d h2,
.dashboard_side__cRt2d span[class*="title"],

.dashboard_side__cRt2d div[class*="title"] {
  font-size: inherit;
  font-weight: inherit;
  color: inherit;
  margin-bottom: 0;
}

.dashboard_side__cRt2d span[class*="number"],
.dashboard_side__cRt2d p[class*="number"],
.dashboard_side__cRt2d div[class*="number"],
.dashboard_side__cRt2d div[class*="value"] {
  font-size: inherit;
  color: inherit;
  font-weight: inherit;
  margin: 0;
}

.dashboard_side__cRt2d span[class*="detail"],
.dashboard_side__cRt2d p[class*="detail"],
.dashboard_side__cRt2d div[class*="detail"],
.dashboard_side__cRt2d div[class*="desc"] {
  font-size: inherit;
  color: inherit;
  opacity: 1;
  margin-bottom: 0;
}

/* Feature item styling for Squirrel Features card — inert: the card's own
   module classes govern layout now; this must not override them. */
.dashboard_side__cRt2d div[class*="feature"] {
  margin: 0;
  text-align: left;
  background-color: transparent;
}

/* Header Statistics Bar */
.dashboard_headerStats__smMIn {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
  margin-bottom: 16px;
  padding: 8px 0;
}

.dashboard_statItem__kvYUc {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px;
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 16px;
  box-shadow: var(--cardShadow);
  transition: all 0.2s ease;
}

.dashboard_statItem__kvYUc:hover {
  background: var(--card);
  box-shadow: var(--cardShadowHover);
  transform: translateY(-2px);
}

.dashboard_statIcon__F2ocY {
  font-size: 18px;
  color: var(--iconColor);
}

.dashboard_statLabel__hZr9X {
  display: block;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--textSoft);
}

.dashboard_statValue__Eeuod {
  display: block;
  font-size: 16px;
  font-weight: 600;
  font-family: var(--font-mono), ui-monospace, SFMono-Regular, monospace;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.02em;
  color: var(--text);
}

/* Actions and Activity Strip */
.dashboard_actionsStrip__Dcwp6 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  margin-top: 16px;
  padding-top: 14px;
  border-top: 1px solid var(--border);
}

.dashboard_quickActions__h0Tq3 h3,
.dashboard_recentActivity__rt3h7 h3 {
  font-size: 14px;
  font-weight: 600;
  color: var(--text);
  margin-bottom: 10px;
}

.dashboard_actionButtons__JhSaY {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}

.dashboard_actionBtn__bx2xa {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 14px;
  background: #00a8e1;
  color: white;
  border: none;
  border-radius: 12px;
  cursor: pointer;
  font-size: 14px;
  font-weight: 600;
  transition: all 0.2s ease;
}

.dashboard_actionBtn__bx2xa:hover {
  background: #0088b8;
  transform: translateY(-1px);
}

.dashboard_actionBtn__bx2xa svg {
  font-size: 16px;
}

.dashboard_activityList__Xlq9m {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.dashboard_activityItem__R_DW5 {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 0;
  color: var(--textSoft);
  font-size: 14px;
}

.dashboard_activityDot__l3XEL {
  width: 8px;
  height: 8px;
  background: #00a8e1;
  border-radius: 50%;
  flex-shrink: 0;
}

/* Bottom Section Styles */
.dashboard_bottomSection__iHwnv {
  margin-top:  14px;
  padding-top: 0;
  container-type: inline-size;   /* columns follow the real content width, not the screen */
}

.dashboard_summaryBar__VJHb_ {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));   /* the five bottom cards in one row */
  gap: 14px;
  align-items: stretch;
}
/* 5 across down to ~240px per card (a 1920 screen gives ~255px); then 3, 2, 1 */
@container (max-width: 1199px) { .dashboard_summaryBar__VJHb_ { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@container (max-width: 760px)  { .dashboard_summaryBar__VJHb_ { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@container (max-width: 480px)  { .dashboard_summaryBar__VJHb_ { grid-template-columns: 1fr; } }

.dashboard_summaryItem__ur7o8 {
  background: var(--card);
  padding: 14px 16px;
  border-radius: 16px;
  min-height: 124px;          /* was a fixed height with overflow hidden: it clipped its own content */
  display: flex;
  flex-direction: column;
  transition: all 0.2s ease;
  border: 1px solid var(--border);
  box-shadow: var(--cardShadow);
  position: relative;
  min-width: 0;
  overflow: hidden;   /* long content wraps or clips inside the card, never outside it */
}

.dashboard_summaryItem__ur7o8:hover {
  transform: translateY(-2px);
  box-shadow: var(--cardShadowHover);
}

.dashboard_summaryLabel__9ZCgr {
  display: block;
  font-size: 13px;
  color: var(--text);
  margin-bottom: 10px;
  font-weight: 700;
  text-align: left;
}

.dashboard_chartContent___kSj_ {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  justify-content: flex-start;
  flex: 1;
}

/* Inline status text for summary-card fetches (small indicator inside a
   fixed-height 124px card, not a full content-loading gate). */
.dashboard_loadingIndicator__zJuMJ {
  font-size: 13px;
  color: var(--textSoft);
  padding: 8px 12px;
  text-align: center;
}

.dashboard_errorMessage__kzz1_ {
  font-size: 13px;
  font-weight: 600;
  color: var(--negativeColor);
  padding: 8px 12px;
  text-align: center;
}

/* Donut Chart Styles */
.dashboard_donutChartContainer__C3HeF {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  gap: 25px;
}

.dashboard_donutChart__iwKtV {
  width: 100px;
  height: 100px;
  position: relative;
  border-radius: 50%;
  flex-shrink: 0;
}

.dashboard_donutSegment__d3oLC {
  width: 100%;
  height: 100%;
  border-radius: 50%;
  position: relative;
}

.dashboard_donutHole__qdGJ_ {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 60%;
  height: 60%;
  background-color: var(--card);
  border-radius: 50%;
}

/* Chart Labels Styles */
.dashboard_chartLabels__qWRxe {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.dashboard_chartLabel__LlW8F {
  display: flex;
  align-items: center;
  gap: 8px;
}

.dashboard_labelColor__F8wlq {
  width: 12px;
  height: 12px;
  border-radius: 2px;
}

.dashboard_labelText__sjihb {
  font-size: 12px;
  color: var(--textSoft, #94a3b8);
  width: 70px;
}

.dashboard_labelValue__FGdQJ {
  font-size: 14px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  color: var(--text, white);
}

/* Horizontal bar chart */
.dashboard_barContainer__8w7NL {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 0 5px;
}

.dashboard_barItem__9QMEk {
  width: 100%;
}

.dashboard_barLabel__k_3tO {
  display: flex;
  justify-content: space-between;
  font-size: 12px;
  color: var(--textSoft, #94a3b8);
  margin-bottom: 3px;
  width: 100%;
}

.dashboard_barValue__SQIAB {
  font-weight: bold;
  font-variant-numeric: tabular-nums;
  color: var(--text, white);
}

.dashboard_barTrack__7rKt6 {
  background-color: var(--hover);
  height: 6px;
  border-radius: 999px;
  width: 100%;
  overflow: hidden;
}

.dashboard_bar__5bf9j {
  height: 100%;
  border-radius: 999px;
  transition: width 0.5s ease;
}

/* System status */
.dashboard_statusContainer__SwX6X {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  height: 100%;
}

.dashboard_statusText__5nNjR {
  font-size: 16px;
  font-weight: bold;
  color: #4ade80;
}

/* Light mode adjustments */
[data-theme="light"] .dashboard_summaryItem__ur7o8 {
  border-color: var(--border);
}

[data-theme="light"] .dashboard_donutHole__qdGJ_ {
  background-color: var(--card);
}

[data-theme="light"] .dashboard_donutData__pyQO6 {
  color: var(--text, #1e293b);
}

[data-theme="light"] .dashboard_barValue__SQIAB {
  color: var(--text, #1e293b);
}

[data-theme="light"] .dashboard_barTrack__7rKt6 {
  background-color: var(--hover);
}

[data-theme="light"] .dashboard_statusText__5nNjR {
  color: #16a34a;
}

/* Responsive adjustments */
@media (max-width: 1400px) {
  .dashboard_main__h9_Qo {
    flex: 4;
  }
  
  .dashboard_side__cRt2d {
    max-width: 290px;
  }
  
  .dashboard_headerStats__smMIn {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 1280px) {
  .dashboard_cardRow__AeYHq, .dashboard_cards__FzV77 {
    grid-template-columns: repeat(2, 1fr);
  }
  
  .dashboard_actionsStrip__Dcwp6 {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 1024px) {
  .dashboard_wrapper__BHOQf {
    flex-direction: column;
  }
  
  .dashboard_side__cRt2d {
    max-width: none;
    width: 100%;
  }
}

@media (max-width: 768px) {
  .dashboard_layout__tmA8d {
    flex-direction: column;
  }
  
  .dashboard_sidebarContainer__ISEk2 {
    width: 100%;
    height: auto;
    position: relative;
  }
  
  .dashboard_cardRow__AeYHq, .dashboard_cards__FzV77 {
    grid-template-columns: 1fr;
  }
  
  .dashboard_headerStats__smMIn {
    grid-template-columns: 1fr;
  }
  
  .dashboard_actionButtons__JhSaY {
    flex-direction: column;
  }
  
  .dashboard_actionBtn__bx2xa {
    width: 100%;
  }
  
  .dashboard_wrapper__BHOQf {
    padding: 0 10px;
  }
  
  .dashboard_summaryBar__VJHb_ {
    grid-template-columns: 1fr;
  }
  
  .dashboard_summaryItem__ur7o8 {
    height: 116px;
  }
}

/* For the Storage component and other full-width sections */
.dashboard_fullWidth__Axs_F {
  width: 100%;
}

@keyframes dashboard_pulse__nkUtv {
  0% {
    opacity: 0.6;
    transform: scale(0.95);
  }
  70% {
    opacity: 1;
    transform: scale(1.05);
  }
  100% {
    opacity: 0.6;
    transform: scale(0.95);
  }
}

/* dashboard.module.css */
.dashboard_loadingFade__xf__T {
  opacity: 0.4;
  pointer-events: none;
  transition: opacity 0.3s ease;
}

/* ---------- hero banner ---------- */
/* Not a card: a soft blue wash with waves that spans the top of the page,
   with the first rows overlapping its foot (negative bottom margin). The
   greeting sits over it on the left, floating icon tiles on the right. */
.dashboard_hero__KjkxB {
  position: relative;
  overflow: hidden;
  z-index: 0;
  margin: -6px 0 -54px;
  padding: 26px 24px 84px;
  min-height: 160px;
  border-radius: 16px 16px 0 0;
  background: linear-gradient(180deg, #eaf3ff 0%, #f3f8ff 55%, var(--bg) 100%);
}
[data-theme="dark"] .dashboard_hero__KjkxB {
  background: linear-gradient(180deg, color-mix(in srgb, var(--accentColor) 16%, var(--bg)) 0%, var(--bg) 100%);
}
/* Everything after the banner paints above its overlapped foot */
.dashboard_main__h9_Qo > * { position: relative; }
.dashboard_heroArt__zMwRu { position: absolute; inset: 0; pointer-events: none; }
.dashboard_heroWaves__GDEGg { position: absolute; inset: 0; width: 100%; height: 100%; }
.dashboard_heroIcons__tyrbT { position: absolute; inset: 0; }
.dashboard_heroIcon__oBWYj {
  position: absolute;
  width: 44px;
  height: 44px;
  border-radius: 12px;
  background: #ffffff;
  color: #2f80ed;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 10px 22px -10px rgba(31, 100, 216, 0.45);
}
[data-theme="dark"] .dashboard_heroIcon__oBWYj { background: var(--card); }
@media (max-width: 900px) { .dashboard_heroIcons__tyrbT { display: none; } }

/* ---------- Storage Distribution donut ---------- */
.dashboard_donutRow__D3PEz { display: flex; flex-direction: column; align-items: center; gap: 12px; }
.dashboard_donutSvg__jN1wc { width: 136px; height: 136px; flex: none; }
.dashboard_donutBig__6tVbA { font-family: var(--font-mono), ui-monospace, monospace; font-size: 13px; font-weight: 700; fill: var(--text); }
.dashboard_donutSmall__4eodk { font-size: 7.5px; fill: var(--textSoft); }
.dashboard_donutLegend__g_Iwp { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; min-width: 0; width: 100%; }
.dashboard_donutLegend__g_Iwp li { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--text); min-width: 0; }
.dashboard_donutLegend__g_Iwp li span { flex: 1; min-width: 0; }
.dashboard_donutLegend__g_Iwp li b { white-space: nowrap; }
.dashboard_donutLegend__g_Iwp li i { width: 10px; height: 10px; border-radius: 50%; display: inline-block; }
.dashboard_donutLegend__g_Iwp li b { font-family: var(--font-mono), ui-monospace, monospace; font-variant-numeric: tabular-nums; font-weight: 600; }
.dashboard_donutLegend__g_Iwp li em { font-style: normal; color: var(--textSoft); font-variant-numeric: tabular-nums; margin-left: 6px; font-weight: 400; }
.dashboard_donutNote__Rz1MA { display: block !important; font-size: 11px !important; color: var(--textSoft) !important; margin-top: 4px; padding-top: 8px; border-top: 1px solid var(--border); }

/* ---------- Storage Distribution line ---------- */
.dashboard_lineWrap__Eatej { display: flex; flex-direction: column; gap: 8px; width: 100%; min-width: 0; }
.dashboard_lineHead__fFjhB { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; font-size: 11.5px; color: var(--textSoft); }
.dashboard_lineHead__fFjhB b { font-family: var(--font-mono), ui-monospace, monospace; font-variant-numeric: tabular-nums; font-size: 14px; color: var(--text); white-space: nowrap; }
.dashboard_lineChart__N03Dc { width: 100%; min-height: 88px; display: flex; align-items: center; }
.dashboard_lineChart__N03Dc svg { width: 100%; display: block; }
.dashboard_lineEmpty__khuXS { font-size: 12px; color: var(--textSoft); }
.dashboard_lineAxis__zPYF9 { display: flex; justify-content: space-between; font-size: 10.5px; color: var(--textSoft); font-variant-numeric: tabular-nums; margin-top: -4px; }

