/* VirtualSelect dropdown options — REAL Float rules (families bxzdq9X + _10kgivx),
   ported verbatim from the build-consistent bundle. The vanilla-extract modules were
   absent from the captured snapshot, so these rules live here (snapshot-independent) and
   the css.ts files (VirtualSelect.styles.css.ts, VirtualSelectOptionDescription/styles.css.ts)
   emit the real hashes — replacing the earlier approximate rs-vs-* replica. */
/* option row (VirtualSelect.styles.css.ts) */
.bxzdq92 { padding-left: 31px; } /* virtualSelect recipe, icon:left */
.bxzdq93 { overflow: hidden; } /* optionRow */
.bxzdq94 { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } /* optionLabelNoWrap */
.bxzdq95 { width: 100%; margin-top: 4px; } /* optionChildren */
/* secondary description (VirtualSelectOptionDescription/styles.css.ts) */
._10kgivx1 {
  font-style: normal;
  font-weight: 400;
  font-size: 12px;
  line-height: 1.65;
  display: flex;
  align-items: center;
  align-self: flex-start;
  position: relative;
  width: 100%;
  min-height: 20px;
  color: var(--_1gb9yzu7p, #617798);
  padding-left: var(--_10kgivx0);
  box-sizing: border-box;
}
._10kgivx2 { --_10kgivx0: 31px; }
._10kgivx3 { width: 100%; height: 100%; } /* textSkeleton */
._10kgivx4 { width: 100%; max-width: 160px; height: 12px; } /* skeleton */
._10kgivx5 { text-wrap: wrap; flex: 1; } /* optionDescriptionText */

/* ──────────────────────────────────────────────────────────────────────────
   Schedule MainCell entity wrapper ("baseLayer" recipe) + resize handles.
   The vanilla-extract `baseLayer` recipe was stubbed (name->name) in
   packages/common/src/components/Schedule/Cell/MainCell/Item/styles.css.ts, so
   the wrapper computed position:static and the view code's data-driven inline
   left/top/width/height were ignored — allocation boxes stretched across the
   whole week/row instead of sizing to their wrapper. The recipe is now
   reconstructed in styles.css.ts to emit these real classes; the rules are
   recreated here (own copy; values taken from the original, with token
   fallbacks, so we no longer depend on real-app.css for the entity wrapper).
   x7yxhd0 base · 1/2 roundness · 3/4 background · 5/6/7 rounded ·
   a ghost border + b/c/d ghost-edge compounds · e..h resize handles. */
.x7yxhd0 {
  position: absolute;
  transition: top ease 0.2s, opacity ease 0.2s;
  z-index: 3;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.x7yxhd1 {
  --roundness: 3px;
}
.x7yxhd2 {
  --roundness: 8px;
}
.x7yxhd3 {
  background-color: transparent;
}
.x7yxhd4 {
  background-color: var(--_1gb9yzu3a, #ffffff);
}
.x7yxhd5 {
  border-top-left-radius: var(--roundness);
  border-bottom-left-radius: var(--roundness);
}
.x7yxhd6 {
  border-top-right-radius: var(--roundness);
  border-bottom-right-radius: var(--roundness);
}
.x7yxhd7 {
  border-radius: var(--roundness);
}
.x7yxhda {
  border: 1px solid var(--_1gb9yzu69, #ebedf0);
}
.x7yxhdb {
  border-right: 0;
}
.x7yxhdc {
  border-left: 0;
}
.x7yxhdd {
  border-right: 0;
  border-left: 0;
}
.x7yxhde {
  position: absolute;
  cursor: ew-resize;
  z-index: 5;
}
.x7yxhdf {
  top: 0;
  left: -3px;
  width: 6px;
  height: 100%;
}
.x7yxhdg {
  top: 0;
  right: -3px;
  width: 6px;
  height: 100%;
}
.x7yxhdh {
  left: 0;
  bottom: -2px;
  height: 7px;
  width: 100%;
  cursor: ns-resize;
}

/* === Side panel bridge fixes ============================================== */

/* Tag primitive (recipe _17hp3kb*). ui/components/Tag had no styles.css.ts, so
   the `tag` recipe emitted a literal "tag" with no rule (18px/700 grey). Base +
   size + colour, recovered from the live original; FIN-token hex fallbacks so we
   don't depend on real-app.css. */
._17hp3kb2 {
  display: inline-flex;
  justify-content: center;
  align-items: center;
  color: var(--_17hp3kb0, var(--_1gb9yzu3l, #0b0c10));
  background-color: var(--_17hp3kb1, var(--_1gb9yzu3c, #f3f2f5));
  box-sizing: border-box;
}
._17hp3kb3 {
  font-style: normal;
  font-weight: 500;
  font-size: 13px;
  line-height: 1.23;
  padding: 4px 8px;
  gap: 4px;
  border-radius: 6px;
  height: 30px;
}
._17hp3kb4 {
  font-style: normal;
  font-weight: 500;
  font-size: 13px;
  line-height: 1.23;
  padding: 4px 8px;
  gap: 4px;
  border-radius: 6px;
  height: 28px;
}
._17hp3kb5 {
  font-style: normal;
  font-weight: 500;
  font-size: 13px;
  line-height: 1.23;
  padding: 4px 6px;
  gap: 4px;
  border-radius: 6px;
  height: 24px;
}
._17hp3kb6 {
  font-style: normal;
  font-weight: 500;
  font-size: 12px;
  line-height: 1.33;
  padding: 2px 6px;
  gap: 4px;
  border-radius: 4px;
  height: 20px;
}
._17hp3kb7 {
  font-style: normal;
  font-weight: 500;
  font-size: 13px;
  line-height: 1.23;
  padding: 2px;
  gap: 4px;
  border-radius: 6px;
}
._17hp3kb9 {
  --_17hp3kb1: var(--_1gb9yzu3p, #e1f0ff);
  --_17hp3kb0: var(--_1gb9yzu3k, #344765);
}
._17hp3kba {
  --_17hp3kb1: var(--_1gb9yzu3d, #ebedf0);
  --_17hp3kb0: var(--_1gb9yzu3k, #344765);
}
._17hp3kbb {
  --svg-icon-color: var(--_1gb9yzu4w, #9d1010);
  --_17hp3kb1: var(--_1gb9yzu4o, #ffefef);
}
._17hp3kbc {
  --_17hp3kb0: var(--_1gb9yzu3h, #a6b3c7);
  --_17hp3kb1: var(--_1gb9yzu3c, #f3f2f5);
}
._17hp3kbd {
  --svg-icon-color: var(--_1gb9yzu48, #bd4b00);
  --_17hp3kb1: var(--_1gb9yzu40, #ffedd5);
}

/* Edit-project header actions wrapper. ProjectHeaderSection mapped
   editProjectActions to _1ygxsnhd (flex-column + padding:16px → header 128px,
   icons stacked); the original uses _19m1vpr2 — an inline row. */
._19m1vpr2 {
  display: flex;
  gap: 8px;
}

/* Project colour swatch (deprecated ColorPicker, pn7gqu1). The stub emitted a
   literal "colorPickerSwatch" (no rule → 0 height). Colour comes from the inline
   --pn7gqu0 var; sizes via data-size (sm 24 / md 28 / lg 30). */
.pn7gqu1 {
  position: relative;
  align-self: center;
  display: block;
  box-sizing: border-box;
  background-color: var(--pn7gqu0);
  width: 24px;
  height: 24px;
  border: 1px solid var(--_1gb9yzu1l, #cfd8e5);
  border-radius: 24px;
  cursor: pointer;
}
.pn7gqu1:after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  transform: scaleY(1);
  transform-origin: center;
  background-color: inherit;
  opacity: 0.25;
  transition-property: transform;
  transition-duration: 0.3s;
  transition-timing-function: cubic-bezier(0.3, 0.76, 0.27, 1);
}
.pn7gqu1:hover:after,
.pn7gqu1:focus-visible:after {
  transform: scale(1.3);
}
.pn7gqu1[data-state="open"]:after,
.pn7gqu1[data-popup-open]:after {
  transform: scale(1.3);
}
.pn7gqu1[aria-selected="true"]:after {
  transform: scale(1.3);
}
.pn7gqu1[data-size="md"] {
  width: 28px;
  height: 28px;
  border-radius: 28px;
}
.pn7gqu1[data-size="lg"] {
  width: 30px;
  height: 30px;
  border-radius: 32px;
}

/* ColorPicker dropdown/menu (deprecated ColorPicker, RES-7). Recovered verbatim
   from the deployed bundle so the project-colour menu renders + is selectable.
   colorPickerLabel is a recipe: base pn7gqu5 + pn7gqu6 (withTopPadding). pn7gqua is
   the section. Theme vars carry literal fallbacks (real-app.css is disposable). */
.pn7gqu2 { /* colors container */
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  padding: 4px;
}
.pn7gqu3 { /* input wrapper */
  --svg-icon-color: var(--_1gb9yzu3k, #344765);
  position: relative;
  display: flex;
  flex-wrap: wrap;
  border: none;
  cursor: pointer;
  padding: 0;
}
.pn7gqu4 { /* hex input wrapper */
  padding-bottom: 6px;
}
.pn7gqu5 { /* label base (recipe) */
  font-style: normal;
  font-weight: 600;
  font-size: 12px;
  line-height: 1.33;
  display: flex;
  color: var(--_1gb9yzu7b, #0b0c10);
}
.pn7gqu6 { /* label withTopPadding variant */
  padding-top: 4px;
}
.pn7gqu7 { /* custom color */
  --svg-icon-color: unset;
  width: 100%;
  position: relative;
}
.pn7gqu8 { /* input color (hidden native picker overlay) */
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  cursor: pointer;
}
.pn7gqu9 { /* dropdown container */
  width: 288px;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
}
.pn7gqua { /* section */
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.pn7gqub { /* menu container */
  box-sizing: border-box;
}
.pn7gquc { /* menu divider */
  width: 100%;
  border-top: 0;
  border-top-style: solid;
  border-top-width: 1px;
  border-top-color: var(--_1gb9yzu1e, #e1e4eb);
  margin: 8px 0;
}
.pn7gqud { /* field wrapper */
  width: 50px;
  flex-grow: 1;
  margin-bottom: 0;
  position: relative;
}
.pn7gqud[aria-disabled="true"] {
  color: var(--_1gb9yzu3h, #a6b3c7);
}

/* SideCell ProjectCard (core: wrapper + content + project-colour stripe + density).
   ProjectCard.css was missing projectCardWrapper + contentBgColorVar and stubbed
   projectCardContent, so the card had no wrapper/padding and no project colour.
   Recovered from the original; production hashes _1nmuwb7* + card base pkf8ek4. */
.pkf8ek4 {
  height: 100%;
  box-sizing: border-box;
}
._1nmuwb70:hover {
  background-color: var(--_1gb9yzu3d, #ebedf0);
}
._1nmuwb70:active,
._1nmuwb70[data-state="open"] {
  background-color: var(--_1gb9yzu3e, #e1e4eb);
}
._1nmuwb76 {
  padding-left: 12px;
  height: 100%;
  box-sizing: border-box;
}
._1nmuwb76:after {
  content: "";
  width: 4px;
  display: flex;
  background: var(--_1nmuwb71);
  position: absolute;
  top: -1px;
  left: 0;
  height: calc(100% + 1px);
}
._1nmuwb77 {
  padding-top: 4px;
}
._1nmuwb78 {
  padding-top: 8px;
}

/* FieldLabel primitive (packages/ui/src/primitives/FieldLabel) — Category-3 bridge
   gap: no FieldLabel.css.ts was recovered, so `styles.fieldLabel` auto-stubbed to the
   literal class "fieldLabel" (no rule) and labels rendered through the primitive (e.g.
   the PersonModal "Cost rate" field) showed ~14px/700 instead of the field-label style.
   Values copied from the build's field-label rule _1acxxpvb (12px/500, line-height 1.33,
   color --_1gb9yzu7o #344765). display:block matches the sibling field labels (e.g. the
   styled-component "Bill rate" label, which renders block/full-width). Only the
   FieldLabel primitive emits the literal "fieldLabel", so this rule is isolated to it. */
.fieldLabel {
  display: block;
  font-style: normal;
  font-weight: 500;
  font-size: 12px;
  line-height: 1.33;
  color: var(--_1gb9yzu7o, #344765);
}

/* ========================================================================
   Dashboard chart primitives (Category-2 bridge: missing *.css.ts auto-stubbed)
   packages/ui/src/primitives/Chart/** and /DonutChart/**

   The chart/donut components do `import * as styles from './X.css'` but no X.css.ts
   existed, so the Vite plugin auto-stubbed them and chart classes rendered as literal
   strings with no rule. The matching X.css.ts files now emit the real hashes; these are
   our snapshot-independent copies of the rule bodies, taken verbatim from a live
   /dashboard extraction (chart-extract.json -> rules) with var(--token,#hex) fallbacks.
   The line (_6kz2870) and area (dblzdm0) carry no CSS rule — their stroke/fill come from
   the components' inline FIN props — so they are intentionally absent below.
   ======================================================================== */

/* Chart wrapper / svg / content (Chart.css.ts) */
._1w3tu409 {
  position: relative;
  display: flex;
  width: 100%;
  height: 100%;
  box-sizing: border-box;
  overflow: hidden;
}
._1w3tu40a {
  cursor: grab;
}
._1w3tu40a:active {
  cursor: grabbing;
}
._1w3tu40b {
  width: 100%;
  height: 100%;
}
._1w3tu40c {
  outline: none;
}

/* Grid lines (ChartGrid.css.ts): grid colour _1lrvn1b0 + shared dashed stroke _18rjrzi0 */
._1lrvn1b0 {
  stroke: var(--_1gb9yzu3l, #0b0c10);
}
._18rjrzi0 {
  stroke: var(--_1gb9yzu3g, #c0cad7);
  stroke-dasharray: 1, 5;
  stroke-dashoffset: 1;
  stroke-width: 1;
  stroke-linecap: round;
}

/* Shared axis stroke/colour (_18rjrzi*), composed by X/Y axis exports */
._18rjrzi1 {
  color: var(--_1gb9yzu7o, #344765);
}
._18rjrzi2,
._18rjrzi3 {
  stroke: var(--_1gb9yzu3f, #cfd8e5);
  stroke-linecap: round;
}

/* Y axis (ChartYAxis.css.ts): tick text qajgj10, axis line qajgj11, tick line qajgj12 */
.qajgj10 {
  font-size: 12px;
  font-variant-numeric: tabular-nums;
  color: var(--_1gb9yzu3l, #0b0c10);
}
.qajgj11,
.qajgj12 {
  stroke: var(--_1gb9yzu3l, #0b0c10);
  stroke-width: 1;
}

/* X axis (ChartXAxis.css.ts): tick text _1oelmwu0, axis line _1oelmwu1, tick line _1oelmwu2 */
._1oelmwu0 {
  font-style: normal;
  font-weight: 400;
  font-size: 12px;
  line-height: 1.33;
  color: var(--_1gb9yzu3l, #0b0c10);
  font-variant-numeric: tabular-nums;
}
._1oelmwu1,
._1oelmwu2 {
  stroke: var(--_1gb9yzu3l, #0b0c10);
  stroke-width: 1;
}

/* Marker dot clusters (ChartXAxisMarkers.css.ts): group fr7vqx0, hit-area fr7vqx1, dot fr7vqx2 */
.fr7vqx0 {
  cursor: default;
  outline: none;
}
.fr7vqx1 {
  fill: transparent;
}
.fr7vqx2 {
  fill: var(--_1gb9yzu3h, #a6b3c7);
}
.fr7vqx0:focus-visible .fr7vqx2 {
  stroke: #b7d9f8;
  stroke-width: 2;
}

/* DonutChart wrapper / svg / content (DonutChart.css.ts) */
.a6rew12 {
  position: relative;
  display: flex;
  width: 100%;
  height: 100%;
  box-sizing: border-box;
}
.a6rew13 {
  width: 100%;
  height: 100%;
}
.a6rew14 {
  outline: none;
}

/* DonutChart arcs (DonutChartArc.css.ts): base _1sld6a70, dimOnHover _1sld6a71, dimmed _1sld6a72 */
._1sld6a70 {
  outline: none;
}
._1sld6a71 {
  transition-property: opacity, filter;
  transition-duration: 0.3s;
  transition-timing-function: cubic-bezier(0.3, 0.76, 0.27, 1);
}
._1sld6a72 {
  opacity: 0.25;
  filter: saturate(0.5);
}

/* DonutChart centre value/sub-value (DonutChartCenterValue.css.ts) */
._1wpubbw0 {
  position: absolute;
  inset: 16%;
  display: flex;
  justify-content: center;
  align-items: center;
}
._1wpubbw1 {
  font-family: Lexend, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial,
    sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  font-style: normal;
  font-weight: 500;
  font-size: 20px;
  line-height: 1.3;
  display: inline-block;
  font-variant-numeric: tabular-nums;
  color: var(--_1gb9yzu7b, #0b0c10);
  white-space: nowrap;
  text-align: center;
}
._1wpubbw2 {
  font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial,
    sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
  font-style: normal;
  font-weight: 400;
  font-size: 0.7em;
  line-height: 1.5;
  letter-spacing: -0.2px;
  color: var(--_1gb9yzu7p, #617798);
}

/* ManageQuickFilters — resolved from live Float DOM; rules ported from real-app.css (ailment: prefix-not-resolved). */
._15h1gcz0 { display: flex; align-items: center; padding-left: 13px; gap: 14px; min-height: 32px; }
._15h1gcz2 { display: flex; align-items: center; }
._15h1gcz3 { display: flex; height: 16px; width: 1px; background-color: var(--_1gb9yzu3h, #a6b3c7); margin: 0 12px 0 16px; }
@media screen and (max-width: 767px) {
  ._15h1gcz0 { padding-left: 0; margin: 10px 0; }
  ._15h1gcz1 { display: none; }
  ._15h1gcz2 { align-items: flex-start; flex-flow: column; gap: 10px; }
  ._15h1gcz3 { display: none; }
}
