/* ==========================================================================
   Paraspec team.css  (owner, office, attendants, designer, ops manager)
   Final design system. Base: "Operator" with grafts (see design-spec.md).
   Every class is prefixed `ps-` so it can load next to Bootstrap 5 without
   collisions. Fonts: Inter (Google Fonts). Icons: Bootstrap Icons.
   Minimum text 12px; money and counts minimum 13px.
   ========================================================================== */

/* ---------- 1. Tokens ---------- */
/* Paraspec gold scheme (owner decision, Sep 17 2026): NO purple anywhere.
   Gold = brand: actions, selection, focus. Gold is never a status, never "warning", never "paid".
   Contrast (WCAG 2.1) measured and listed in design-spec.md 4.2. */
:root{
  /* surfaces (warm neutrals) */
  --canvas:#f7f7f5; --surface:#ffffff; --sunken:#fafaf9; --hover:#f5f5f4;
  --line:#e7e5e4; --line-strong:#d6d3d1;
  /* text (all >= 5.4:1 on canvas) */
  --text:#1c1917; --text-2:#57534e; --text-3:#6b645f; --text-inverse:#ffffff;
  /* brand gold. #846100 fill + white text 5.69:1; hover 7.65:1; press 9.20:1.
     --accent-text #7a5a00: 5.95:1 canvas, 6.38:1 white, 5.76:1 on --accent-soft. */
  --accent:#846100; --accent-hover:#6b4f00; --accent-press:#5c4400; --accent-soft:#fbf3dc; --accent-text:#7a5a00;
  --on-accent:#ffffff;            /* text/icons placed on --accent */
  --accent-line:#d1a200;          /* decoration only: selected borders next to a fill, rules. Never text on light. */
  --gold-bright:#d1a200;          /* paraspec.co accent: decoration, and fills on --night surfaces */
  /* focus: 2px surface gap + 2px gold ring. #a37800 is 4.00:1 on white, 3.73:1 on canvas (>= 3:1 non-text) */
  --focus:#a37800;
  --focus-ring:0 0 0 2px var(--surface),0 0 0 4px var(--focus);
  /* client-visible marker: NOT gold any more (gold is the primary colour). Neutral outline pill + eye icon + words. */
  --client-fg:#44403c; --client-bg:#ffffff; --client-line:#a8a29e; --client-dot:#57534e;
  /* five status tones: fg on bg all >= 5.0:1. Attention is ORANGE (hue ~25deg), clearly apart from gold (~44deg) and red (~4deg). */
  --n-fg:#44403c; --n-bg:#f5f5f4; --n-dot:#a8a29e;   /* neutral: info, not started, closed */
  --p-fg:#175cd3; --p-bg:#eff8ff; --p-dot:#2e90fa;   /* progress: waiting on someone else */
  --a-fg:#b54708; --a-bg:#fff4ed; --a-dot:#ef6820;   /* attention: the team must act (orange, never gold) */
  --s-fg:#067647; --s-bg:#ecfdf3; --s-dot:#17b26a;   /* success: done, paid, staffed */
  --d-fg:#b42318; --d-bg:#fef3f2; --d-dot:#f04438;   /* danger: overdue, failed, conflict, unusable */
  /* solid fills that carry white text in BOTH themes */
  --d-solid:#b42318; --s-solid:#067647; --count-bg:#d92d20;
  /* night card (Tonight, dark run sheet) */
  --night:#1c1917; --night-2:#292524; --night-text:#fafaf9; --night-text-2:#d6d3d1;
  --night-accent:#d1a200; --night-on-accent:#1c1917; --night-accent-text:#f0c95c;  /* 7.39:1 / 11.0:1 */
  /* charts: no purple, no gold for money states. Ink = revenue, stone = second series, teal = crew pay. */
  --chart-1:#44403c; --chart-2:#a39c95; --chart-pay:#0e7490; --chart-pay-est:#9fd3df; --chart-pay-est-line:#0e7490; --chart-grid:#e7e5e4;
  /* Collected-by-month series (kept apart from ink, which means Profit on the same page) */
  --chart-cash-1:#78716c; --chart-cash-2:#d6d3d1;
  /* receivables aging: danger shades only (overdue money is danger everywhere) */
  --aging-0:#a39c95; --aging-1:#f04438; --aging-2:#b42318; --aging-3:#7a271a;
  /* solid attention fill with white icon (severity tiles on selected cards) 5.52:1 */
  --a-solid:#c4320a; --n-solid:#57534e;
  /* focus on night surfaces (Tonight card, bulk bar, toast, night run sheet) */
  --focus-ring-night:0 0 0 2px var(--night),0 0 0 4px var(--night-accent-text);
  /* person colours (decoration only, name always shown) */
  --person-1:#0e7090; --person-2:#0f766e; --person-3:#3e6b2f; --person-4:#2f4a6d; --person-5:#7c4a3a; --person-6:#44403c; --person-7:#475467;
  /* teal 5.62 · teal-green 5.47 · moss 6.27 · ink blue 9.05 · cocoa 7.25 · stone 10.3 · slate 7.69 (white text). No purple, gold, orange or red. */
  /* type */
  --font:"Inter",system-ui,-apple-system,"Segoe UI",sans-serif;
  --fs-display:28px; --lh-display:34px;
  --fs-title:22px;   --lh-title:28px;
  --fs-heading:15px; --lh-heading:22px;
  --fs-body:14px;    --lh-body:20px;
  --fs-label:13px;   --lh-label:18px;
  --fs-meta:12px;    --lh-meta:16px;
  /* space (4px grid) */
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:20px; --s6:24px; --s8:32px; --s10:40px; --s14:56px;
  --gutter:16px;
  /* radius */
  --r-xs:6px; --r-sm:8px; --r-md:10px; --r-lg:14px; --r-xl:20px; --r-pill:999px;
  /* elevation: flat cards, shadows only for floating things */
  --shadow-pop:0 8px 24px rgba(28,25,23,.12);
  --shadow-sheet:0 -8px 32px rgba(28,25,23,.18);
  /* sizes */
  --row-min:44px; --tap:44px; --sidebar-w:240px; --rail-w:64px; --tabbar-h:64px;
  /* motion */
  --t-fast:120ms; --t-med:180ms; --ease:cubic-bezier(.2,.8,.2,1);
}
@media (min-width:768px){ :root{ --gutter:32px; } }

/* Dark (team + staff). Gold stays the brand: bright gold fill with ink text (7.39:1), gold text 10.5:1 on surface. */
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --canvas:#0f0e0d; --surface:#171514; --sunken:#1c1a18; --hover:#211e1c; --line:#2a2725; --line-strong:#6b645f;
    --text:#fafaf9; --text-2:#d6d3d1; --text-3:#a8a29e;
    --accent:#d1a200; --accent-hover:#e0b320; --accent-press:#b08600; --accent-soft:#2a220f; --accent-text:#e8c14f;
    --on-accent:#1c1917; --accent-line:#d1a200; --focus:#d1a200;
    --client-fg:#d6d3d1; --client-bg:#171514; --client-line:#78716c; --client-dot:#a8a29e;
    --n-fg:#d6d3d1; --n-bg:#292524; --p-fg:#84caff; --p-bg:#0c1a2e; --a-fg:#fb923c; --a-bg:#2b1608; --a-dot:#f97316;
    --s-fg:#75e0a7; --s-bg:#0b2016; --d-fg:#fda29b; --d-bg:#2a1211;
    --night:#000000; --night-2:#1c1a18; --chart-grid:#2a2725; --chart-hb:#57534e;
    --chart-1:#d6d3d1; --chart-2:#78716c; --chart-pay:#22d3ee; --chart-pay-est:#2b8fa3; --chart-pay-est-line:#67c6d8;
    --chart-cash-1:#8a837d; --chart-cash-2:#4a4541; --aging-0:#78716c; --aging-1:#f97066; --aging-2:#d92d20; --aging-3:#fda29b;
    --shadow-pop:0 8px 24px rgba(0,0,0,.5); --shadow-sheet:0 -8px 32px rgba(0,0,0,.6);
  }
}
:root[data-theme="dark"]{
  --canvas:#0f0e0d; --surface:#171514; --sunken:#1c1a18; --hover:#211e1c; --line:#2a2725; --line-strong:#6b645f;
  --text:#fafaf9; --text-2:#d6d3d1; --text-3:#a8a29e;
  --accent:#d1a200; --accent-hover:#e0b320; --accent-press:#b08600; --accent-soft:#2a220f; --accent-text:#e8c14f;
  --on-accent:#1c1917; --accent-line:#d1a200; --focus:#d1a200;
  --client-fg:#d6d3d1; --client-bg:#171514; --client-line:#78716c; --client-dot:#a8a29e;
  --n-fg:#d6d3d1; --n-bg:#292524; --p-fg:#84caff; --p-bg:#0c1a2e; --a-fg:#fb923c; --a-bg:#2b1608; --a-dot:#f97316;
  --s-fg:#75e0a7; --s-bg:#0b2016; --d-fg:#fda29b; --d-bg:#2a1211;
  --night:#000000; --night-2:#1c1a18; --chart-grid:#2a2725; --chart-hb:#57534e;
  --chart-1:#d6d3d1; --chart-2:#78716c; --chart-pay:#22d3ee; --chart-pay-est:#2b8fa3; --chart-pay-est-line:#67c6d8;
    --chart-cash-1:#8a837d; --chart-cash-2:#4a4541; --aging-0:#78716c; --aging-1:#f97066; --aging-2:#d92d20; --aging-3:#fda29b;
  --shadow-pop:0 8px 24px rgba(0,0,0,.5); --shadow-sheet:0 -8px 32px rgba(0,0,0,.6);
}

/* ---------- 2. Base ---------- */
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0}
body.ps{background:var(--canvas);color:var(--text);font-family:var(--font);font-size:15px;line-height:22px;-webkit-font-smoothing:antialiased;font-feature-settings:"cv11","ss01";-webkit-text-size-adjust:100%}
@media (min-width:1024px){ body.ps{font-size:var(--fs-body);line-height:var(--lh-body)} }
.ps a{color:inherit;text-decoration:none}
.ps a.ps-link,.ps .ps-link{color:var(--accent-text);font-weight:500}
.ps a.ps-link:hover{text-decoration:underline}
.ps h1,.ps h2,.ps h3,.ps h4,.ps p{margin:0}
.ps .bi{line-height:1;vertical-align:-.125em}
.ps :focus-visible{outline:none;box-shadow:var(--focus-ring);border-radius:var(--r-sm)}
.ps-sr{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
/* Skip to content: hidden until it is tabbed to, then a real, visible button. */
.ps-sr:focus,.ps-sr:focus-visible{position:fixed!important;top:8px;left:8px;width:auto;height:auto;overflow:visible;clip:auto;padding:10px 16px;background:var(--surface);color:var(--text);font-size:14px;font-weight:600;border-radius:var(--r-md);box-shadow:var(--focus-ring),var(--shadow-pop);z-index:120}

/* type */
.ps-display{font-size:var(--fs-display);line-height:var(--lh-display);font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.ps-title{font-size:var(--fs-title);line-height:var(--lh-title);font-weight:600;letter-spacing:-.01em}
.ps-heading{font-size:var(--fs-heading);line-height:var(--lh-heading);font-weight:600}
.ps-label{font-size:var(--fs-label);line-height:var(--lh-label);font-weight:500}
.ps-meta{font-size:var(--fs-meta);line-height:var(--lh-meta);font-weight:500;color:var(--text-3)}
.ps-eyebrow{font-size:12px;line-height:16px;font-weight:600;color:var(--text-3);letter-spacing:.02em}
.ps-num{font-variant-numeric:tabular-nums;font-size:max(13px,1em)}
.ps-muted{color:var(--text-2)} .ps-faint{color:var(--text-3)}
.ps-strong{font-weight:600}
.ps-danger-text{color:var(--d-fg)} .ps-success-text{color:var(--s-fg)} .ps-attn-text{color:var(--a-fg)}
.ps-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}

/* utilities */
.ps-flex{display:flex;align-items:center;gap:var(--s2)}
.ps-flex.wrap{flex-wrap:wrap}
.ps-between{display:flex;align-items:center;justify-content:space-between;gap:var(--s3)}
.ps-stack{display:flex;flex-direction:column;gap:var(--s3)}
.ps-stack.tight{gap:var(--s2)} .ps-stack.loose{gap:var(--s6)}
.ps-grow{flex:1;min-width:0}
.ps-divider{height:1px;background:var(--line);border:0;margin:0}

/* ---------- 3. App shell ---------- */
.ps-app{min-height:100vh}
.ps-sidebar{display:none}
.ps-main{padding-bottom:calc(var(--tabbar-h) + 16px + env(safe-area-inset-bottom))}
@media (min-width:768px){
  .ps-app{display:grid;grid-template-columns:var(--rail-w) 1fr}
  /* No overflow on the sidebar itself: the nav list below is the part that
     scrolls, and an overflow here turned the whole column into a clipping box,
     so the "+ New" popover and the account menu — both absolutely positioned
     inside it — were cut off at the sidebar's edge and lost the end of every
     line. The list keeps its own overflow-y. */
  .ps-sidebar{display:flex;flex-direction:column;position:sticky;top:0;height:100vh;background:var(--surface);border-right:1px solid var(--line);padding:var(--s3) var(--s2);gap:var(--s1);overflow:visible;z-index:40}
  .ps-main{padding-bottom:40px;min-width:0}
  .ps-tabbar{display:none!important}
  .ps-sidebar .ps-nav-text,.ps-sidebar .ps-nav-group-label,.ps-sidebar .ps-setup-card,.ps-sidebar .ps-search-btn span{display:none}
}
@media (min-width:1024px){
  .ps-app{grid-template-columns:var(--sidebar-w) 1fr}
  .ps-sidebar{padding:var(--s4) var(--s3)}
  .ps-sidebar .ps-nav-text,.ps-sidebar .ps-nav-group-label,.ps-sidebar .ps-search-btn span{display:inline}
  .ps-sidebar .ps-setup-card{display:block}
}
.ps-brand{display:flex;align-items:center;gap:var(--s2);height:36px;padding:0 var(--s2);margin-bottom:var(--s2)}
.ps-brand img{height:26px;width:auto}
.ps-logo-dark{display:none}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .ps-logo-light{display:none} :root:not([data-theme="light"]) .ps-logo-dark{display:inline} }
:root[data-theme="dark"] .ps-logo-light{display:none} :root[data-theme="dark"] .ps-logo-dark{display:inline}
.ps-search-btn{display:flex;align-items:center;gap:var(--s2);height:36px;padding:0 var(--s3);border:1px solid var(--line);border-radius:var(--r-md);background:var(--sunken);color:var(--text-3);font:500 13px/1 var(--font);width:100%;margin-bottom:var(--s3)}
.ps-new-btn{margin-bottom:var(--s3)}
.ps-nav-group-label{font-size:12px;line-height:16px;font-weight:600;color:var(--text-3);padding:var(--s3) var(--s2) var(--s1)}
.ps-nav-item{display:flex;align-items:center;gap:10px;min-height:36px;padding:0 var(--s2);border-radius:var(--r-sm);color:var(--text-2);font-weight:500;font-size:14px;position:relative}
.ps-nav-item .bi{font-size:18px;width:20px;text-align:center;flex:none}
.ps-nav-item:hover{background:var(--hover);color:var(--text)}
.ps-nav-item.is-active{background:var(--accent-soft);color:var(--accent-text);font-weight:600}
.ps-nav-item .ps-count{margin-left:auto}
@media (min-width:768px) and (max-width:1023px){
  .ps-nav-item{justify-content:center;min-height:44px}
  .ps-nav-item .ps-count{position:absolute;top:2px;right:2px;margin:0}
}
.ps-sidebar>*,.ps-sidebar-scroll>*{flex-shrink:0}
/* The nav list is the part that scrolls. `margin-top:auto` on the foot used to
   do this, but once the items were taller than the window the browser still
   pinned the foot to the bottom of the box while the items ran on underneath
   it, so the Setup card was painted over Equipment, Supplies and Records. */
.ps-sidebar>.ps-sidebar-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--s1);
  scrollbar-width:thin;overscroll-behavior:contain;
  /* A soft edge at whichever end has more nav under it, so a window too short
     for the whole list still shows that Gear and Records are down there. */
  background:linear-gradient(var(--surface) 40%, rgba(255,255,255,0)) top/100% 16px no-repeat local,
    linear-gradient(rgba(255,255,255,0), var(--surface) 60%) bottom/100% 16px no-repeat local,
    radial-gradient(farthest-side at 50% 0, rgba(12,10,9,.14), rgba(12,10,9,0)) top/100% 7px no-repeat scroll,
    radial-gradient(farthest-side at 50% 100%, rgba(12,10,9,.14), rgba(12,10,9,0)) bottom/100% 7px no-repeat scroll}
/* "4 more below": the fade alone read as the end of the list. On the 64px rail
   it is a chevron only, like every other item there. */
.ps-nav-more{display:flex;align-items:center;justify-content:center;gap:6px;min-height:28px;margin-top:2px;
  padding:0 var(--s2);border:1px solid var(--line);border-radius:var(--r-pill);background:var(--sunken);
  color:var(--text-2);font:600 12px/16px var(--font);flex:none;width:100%}
.ps-nav-more:hover{background:var(--hover);color:var(--text)}
.ps-nav-more[hidden]{display:none}
.ps-sidebar-foot{display:flex;flex-direction:column;gap:var(--s2);padding-top:var(--s3);border-top:1px solid var(--line);margin-top:var(--s2)}
.ps-setup-card{border:1px solid var(--line);border-radius:var(--r-md);padding:var(--s3);background:var(--sunken)}
.ps-setup-card .ps-progress{margin-top:var(--s2)}
.ps-profile{display:flex;align-items:center;gap:var(--s2);padding:var(--s2);border-radius:var(--r-sm);font-weight:500}

/* laptop top bar */
.ps-topbar{display:none}
@media (min-width:768px){
  .ps-topbar{display:flex;align-items:center;gap:var(--s3);height:56px;padding:0 var(--gutter);border-bottom:1px solid var(--line);background:var(--surface);position:sticky;top:0;z-index:20}
}
.ps-crumbs{display:flex;align-items:center;gap:var(--s2);color:var(--text-3);font-size:13px;font-weight:500}
.ps-crumbs .bi{font-size:12px}
.ps-crumbs b,.ps-crumbs h1{color:var(--text);font-size:inherit;line-height:inherit;font-weight:600}

/* phone header */
.ps-phone-head{padding:calc(env(safe-area-inset-top) + 12px) var(--gutter) var(--s3);display:flex;align-items:flex-start;justify-content:space-between;gap:var(--s3)}
.ps-phone-head .ps-title{font-size:26px;line-height:32px;letter-spacing:-.02em}
.ps-head-actions{display:flex;gap:var(--s2);flex:none}
@media (min-width:768px){ .ps-phone-head{display:none} }
.ps-page{padding:var(--s4) var(--gutter) var(--s6);max-width:1240px}
.ps-page.narrow{max-width:760px}
.ps-page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--s4);margin-bottom:var(--s5);flex-wrap:wrap}
.ps-cols{display:grid;gap:var(--s4)}
@media (min-width:1024px){ .ps-cols{grid-template-columns:minmax(0,1fr) 340px;gap:var(--s5);align-items:start} .ps-cols.even{grid-template-columns:1fr 1fr} }

/* phone tab bar */
.ps-tabbar{position:fixed;left:0;right:0;bottom:0;z-index:30;display:grid;grid-template-columns:repeat(6,1fr);height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:color-mix(in srgb,var(--surface) 94%,transparent);backdrop-filter:blur(12px);border-top:1px solid var(--line)}
.ps-tabbar.static{position:relative} /* static mockups only: place as the last element so full-page renders show it at the bottom */
.ps-tab{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--text-3);font-size:12px;font-weight:500;position:relative;min-height:var(--tap)}
.ps-tab .bi{font-size:22px}
.ps-tab.is-active{color:var(--accent-text);font-weight:600}
.ps-tab .ps-count{position:absolute;top:4px;left:calc(50% + 8px);box-shadow:0 0 0 2px var(--surface)}

/* ---------- 4. Buttons ---------- */
.ps-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:36px;padding:0 14px;border-radius:var(--r-md);border:1px solid var(--line-strong);background:var(--surface);color:var(--text);font:500 14px/1 var(--font);white-space:nowrap;cursor:pointer;transition:background var(--t-fast),border-color var(--t-fast),box-shadow var(--t-fast);text-decoration:none}
.ps-btn .bi{font-size:inherit}
.ps-btn:hover{background:var(--hover)}
.ps-btn:active{transform:translateY(.5px)}
.ps-btn:focus-visible{box-shadow:var(--focus-ring);outline:none}
.ps-btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.ps-btn.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}
.ps-btn.primary:active{background:var(--accent-press)}
.ps-btn.secondary{background:var(--surface)}
.ps-btn.tint{background:var(--accent-soft);border-color:transparent;color:var(--accent-text);font-weight:600}
.ps-btn.ghost{background:transparent;border-color:transparent;color:var(--text-2)}
.ps-btn.ghost:hover{background:var(--hover);color:var(--text)}
.ps-btn.danger{background:var(--surface);border-color:var(--d-fg);color:var(--d-fg)}
.ps-btn.danger.solid{background:var(--d-solid);border-color:var(--d-solid);color:#fff}
.ps-btn.client{background:var(--surface);border-color:var(--line-strong);color:var(--text);font-weight:600} /* "Client's view": secondary style + bi-eye icon (no gold, no colour meaning) */
.ps-btn.sm{min-height:32px;padding:0 10px;font-size:13px;border-radius:var(--r-sm)}
.ps-btn.lg{min-height:44px;padding:0 18px;font-size:15px;font-weight:600}
.ps-btn.block{display:flex;width:100%}
.ps-btn.icon{width:36px;padding:0}
.ps-btn.icon.sm{width:32px}
.ps-btn.icon.lg{width:44px}
.ps-btn[disabled],.ps-btn.is-disabled{opacity:.45;pointer-events:none}
.ps-btn.is-loading{color:transparent!important;position:relative;pointer-events:none}
.ps-btn.is-loading::after{content:"";position:absolute;width:16px;height:16px;border-radius:50%;border:2px solid currentColor;border-color:#fff #fff transparent transparent;animation:ps-spin .7s linear infinite}
.ps-btn.secondary.is-loading::after{border-color:var(--text-2) var(--text-2) transparent transparent}
/* 40px, not 36: the spec's own floor for a phone (design-spec.md:517, and again
   at :2015 for queue actions, segments and filters). The small size was 36px and
   none of the places it is really used — Mark paid, Choose someone, Review,
   Start repair, Add a day, Export CSV, Edit rate — is inline in a 64px tappable
   row, which is the only case the spec allows 40 to drop to. */
@media (max-width:767px){ .ps-btn{min-height:40px} .ps-btn.sm{min-height:40px} .ps-btn.icon{width:40px} }
/* Undo is the one control that is both small and on a clock: the spec gives it
   six seconds to live (0.2), so it gets the full 44px rather than the button
   floor. Missing it costs the whole action. */
@media (max-width:767px){ .ps-btn.sm.ps-undo,.ps-undo{min-height:44px;padding:8px 12px} }
@keyframes ps-spin{to{transform:rotate(360deg)}}
.ps-kbd{display:none}
@media (min-width:1024px){ .ps-kbd{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 4px;border:1px solid var(--line);border-radius:4px;font:500 12px/1 var(--font);color:var(--text-3);background:var(--surface)} }

/* ---------- 5. Chips, tags, counts ---------- */
.ps-chip{display:inline-flex;align-items:center;gap:6px;min-height:22px;padding:2px 8px;border-radius:var(--r-xs);font-size:12px;line-height:16px;font-weight:500;white-space:nowrap;color:var(--n-fg);background:var(--n-bg)}
.ps-chip::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--n-dot);flex:none}
.ps-chip.n{color:var(--n-fg);background:var(--n-bg)} .ps-chip.n::before{background:var(--n-dot)}
.ps-chip.p{color:var(--p-fg);background:var(--p-bg)} .ps-chip.p::before{background:var(--p-dot)}
.ps-chip.a{color:var(--a-fg);background:var(--a-bg)} .ps-chip.a::before{background:var(--a-dot)}
.ps-chip.s{color:var(--s-fg);background:var(--s-bg)} .ps-chip.s::before{background:var(--s-dot)}
.ps-chip.d{color:var(--d-fg);background:var(--d-bg)} .ps-chip.d::before{background:var(--d-dot)}
.ps-chip.nodot::before{display:none}
.ps-chips{display:flex;flex-wrap:wrap;gap:6px}
/* client-visible tag: outline pill + bi-eye + words ("Client sees this" / "With Priya"). Never gold, never a status. */
.ps-client-tag{display:inline-flex;align-items:center;gap:5px;min-height:22px;padding:1px 8px;border-radius:var(--r-pill);font-size:12px;line-height:16px;font-weight:600;color:var(--client-fg);background:var(--client-bg);border:1px solid var(--client-line);white-space:nowrap}
.ps-client-tag .bi{font-size:13px}
/* lead source, playbook: neutral outline with icon */
.ps-source{display:inline-flex;align-items:center;gap:5px;min-height:22px;padding:2px 8px;border-radius:var(--r-xs);border:1px solid var(--line);font-size:12px;line-height:16px;font-weight:500;color:var(--text-2);background:var(--surface);white-space:nowrap}
.ps-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;border-radius:var(--r-pill);background:var(--count-bg);color:#fff;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}
.ps-count.quiet{background:var(--n-bg);color:var(--n-fg)}
.ps-count.attn{background:var(--a-bg);color:var(--a-fg)}

/* avatars */
.ps-avatar{width:28px;height:28px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font:600 12px/1 var(--font);color:#fff;background:var(--person-6);flex:none}
.ps-avatar.sm{width:24px;height:24px;font-size:12px}
.ps-avatar.lg{width:40px;height:40px;font-size:14px}
.ps-avatar.open{background:transparent;color:var(--a-fg);border:1.5px dashed var(--a-dot)}
.ps-avatar.p1{background:var(--person-1)}.ps-avatar.p2{background:var(--person-2)}.ps-avatar.p3{background:var(--person-3)}.ps-avatar.p4{background:var(--person-4)}.ps-avatar.p5{background:var(--person-5)}.ps-avatar.p7{background:var(--person-7)}
.ps-avatars{display:inline-flex}
.ps-avatars .ps-avatar{box-shadow:0 0 0 2px var(--surface)}
.ps-avatars .ps-avatar+.ps-avatar{margin-left:-4px}

/* ---------- 6. Cards and sections ---------- */
.ps-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg)}
.ps-card-head{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);padding:var(--s3) var(--s4);min-height:52px;border-bottom:1px solid var(--line)}
.ps-card-head.plain{border-bottom:0}
.ps-card-body{padding:var(--s4)}
.ps-card-foot{padding:var(--s3) var(--s4);border-top:1px solid var(--line);display:flex;gap:var(--s2);flex-wrap:wrap}
.ps-section-head{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);margin:var(--s6) 0 var(--s2)}
.ps-section-head:first-child{margin-top:0}
.ps-section-head h2{font-size:17px;line-height:24px;font-weight:600;display:flex;align-items:center;gap:var(--s2)}
.ps-list>*+*{border-top:1px solid var(--line)}
.ps-row{display:flex;align-items:center;gap:var(--s3);min-height:56px;padding:var(--s3) var(--s4)}
@media (min-width:1024px){ .ps-row{min-height:var(--row-min)} }
.ps-row:hover{background:var(--hover)}
.ps-row-main{flex:1;min-width:0}
.ps-row-title{font-weight:600;font-size:15px;line-height:20px}
.ps-row-sub{font-size:13px;line-height:18px;color:var(--text-2)}
.ps-kv{display:grid;grid-template-columns:108px 1fr;gap:var(--s2) var(--s3);font-size:14px}
.ps-kv dt{color:var(--text-3);font-weight:500}
.ps-kv dd{margin:0}

/* ---------- 7. Home: summary, queue, tonight, week ---------- */
.ps-summary-line{font-size:15px;line-height:22px;color:var(--text-2);margin-top:2px}
.ps-summary-line b{color:var(--text);font-weight:600}
.ps-queue{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.ps-q{display:grid;grid-template-columns:32px minmax(0,1fr) auto;align-items:center;column-gap:var(--s3);padding:10px var(--s3) 10px var(--s4);min-height:64px;position:relative}
.ps-q+.ps-q{border-top:1px solid var(--line)}
.ps-q-icon{width:32px;height:32px;border-radius:var(--r-sm);display:flex;align-items:center;justify-content:center;font-size:16px;background:var(--n-bg);color:var(--n-fg)}
.ps-q-icon.a{background:var(--a-bg);color:var(--a-fg)} .ps-q-icon.d{background:var(--d-bg);color:var(--d-fg)} .ps-q-icon.p{background:var(--p-bg);color:var(--p-fg)} .ps-q-icon.s{background:var(--s-bg);color:var(--s-fg)}
.ps-q-icon img{width:32px;height:32px;border-radius:var(--r-sm);object-fit:cover}
.ps-q-title{font-size:15px;line-height:20px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ps-q-why{font-size:13px;line-height:18px;color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ps-q-why b{color:var(--text);font-weight:600}
.ps-q-why .ps-danger-text{font-weight:600}
.ps-q-why.wrap,.ps-q-title.wrap{white-space:normal}
.ps-q-action{display:flex;gap:var(--s2);align-items:center}
/* expanded row: shows consequence + secondary actions (tap row chevron or long reason) */
.ps-q.is-open{grid-template-columns:32px minmax(0,1fr);align-items:start;background:var(--sunken)}
.ps-q.is-open .ps-q-action{grid-column:2;margin-top:var(--s3);flex-wrap:wrap;gap:6px}
.ps-q.is-open .ps-q-action .ps-btn{padding:0 12px}
.ps-q.is-open .ps-q-action .ps-btn.ghost{margin-left:auto;padding:0 8px}
.ps-effect{display:flex;align-items:flex-start;gap:6px;font-size:13px;line-height:18px;color:var(--text-3);margin-top:var(--s2)}
.ps-effect .bi{font-size:13px;margin-top:2px}
.ps-q.is-open .ps-effect{grid-column:2}
/* done state with undo (6s) */
.ps-q.is-done{grid-template-columns:32px 1fr auto;min-height:48px;background:var(--s-bg)}
.ps-q.is-done .ps-q-title{font-weight:500;color:var(--s-fg)}
.ps-undo{font-weight:600;color:var(--accent-text);font-size:14px;padding:8px 10px;border-radius:var(--r-sm);background:transparent;border:0;cursor:pointer}
.ps-also{display:flex;align-items:center;gap:var(--s2);padding:var(--s3) var(--s4);border-top:1px solid var(--line);font-size:13px;line-height:18px;color:var(--text-2);background:var(--sunken)}
.ps-also b{color:var(--text);font-weight:600}
.ps-queue-foot{display:flex;justify-content:space-between;align-items:center;padding:var(--s3) var(--s4);border-top:1px solid var(--line);font-size:14px}

.ps-tonight{background:var(--night);color:var(--night-text);border-radius:var(--r-lg);padding:var(--s4)}
.ps-tonight .ps-eyebrow{color:var(--night-text-2)}
.ps-tonight-title{font-size:18px;line-height:24px;font-weight:600;margin-top:4px}
.ps-tonight-sub{color:var(--night-text-2);font-size:14px;line-height:20px}
.ps-tonight-crew{display:flex;align-items:center;gap:var(--s3);margin-top:var(--s3);padding:var(--s3);border-radius:var(--r-md);background:var(--night-2)}
.ps-tonight .ps-btn{background:var(--night-2);border-color:#3a3634;color:var(--night-text);min-height:40px;font-size:14px}
.ps-live{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:#75e0a7}
.ps-live::before{content:"";width:8px;height:8px;border-radius:50%;background:#17b26a}

.ps-week{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.ps-wd{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 0 6px;border-radius:var(--r-md);color:var(--text-2)}
.ps-wd small{font-size:12px;font-weight:500;line-height:16px}
.ps-wd b{font-size:17px;line-height:22px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}
.ps-wd.is-today{background:var(--accent);color:var(--on-accent)}
.ps-wd.is-today b{color:var(--on-accent)}
.ps-cap{display:flex;gap:3px;height:8px;align-items:center}
.ps-cap i{width:6px;height:6px;border-radius:50%;background:var(--s-dot)}
.ps-cap i.a{background:var(--a-dot)} .ps-cap i.d{background:var(--d-dot)} .ps-cap i.hold{background:transparent;box-shadow:inset 0 0 0 1.5px var(--p-dot)}
.ps-cap i.gear{box-shadow:0 0 0 1.5px var(--a-dot)}
.ps-wd.is-today .ps-cap i{box-shadow:0 0 0 1.5px var(--on-accent)}

/* Three tiles across at every width, because that is what he asked for. The one
   new grid rule: everything else on Home reuses .ps-kpis, .ps-cols, .ps-card,
   .ps-list and .ps-row exactly as the rest of the app uses them.

   The value is sized to fit the tile it sits in, rather than to a guess at one
   width: --ch is the length of the string, 100cqi is that tile's own inner
   width, and .62em is what a tabular character costs, so the figure steps down
   only as far as it has to and $248,500.75 prints in full at 390px and at
   320px. Money is never abbreviated: the tile prints what the Money tab prints,
   to the cent. The plain font-size above each fitted one is the fallback where
   container queries are missing, and overflow-wrap is the backstop under both:
   a figure too long for any tile wraps and the row of tiles grows, which is
   honest, instead of running off the card and losing its last digits. */
.ps-kpis.r7-three{grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s2)}
.r7-three .ps-kpi{padding:var(--s3);container-type:inline-size}
.r7-three .ps-kpi b{font-size:20px;line-height:26px;overflow-wrap:anywhere}
.r7-three .ps-kpi b{font-size:min(20px,calc(100cqi/(var(--ch,4)*.62)))}
/* No price anywhere in the app. The fact stands in the value slot itself: at
   this size a middle dot is a speck, and the caption would carry the tile alone. */
.r7-three .ps-kpi b.r7-none{font-size:17px;line-height:22px}
@media (min-width:1024px){
  .ps-kpis.r7-three{gap:var(--s3)}
  .r7-three .ps-kpi{padding:var(--s3) var(--s4)}
  .r7-three .ps-kpi b{font-size:28px;line-height:36px}
  .r7-three .ps-kpi b{font-size:min(28px,calc(100cqi/(var(--ch,4)*.62)))}
  .r7-three .ps-kpi b.r7-none{font-size:20px;line-height:28px}
}
.r7-kpi-link{display:flex;flex-direction:column;gap:2px;color:inherit;text-decoration:none}
/* Tonight, on one 44px line: who it is, when, who is on it, and whether it has
   started. Its buttons live on the booking's Days pane, one tap through Open. */
/* `.ps a{color:inherit}` outranks a bare class, so the strip names itself as an
   anchor: without this the whole line inherits the page's dark text onto the
   night background and reads as an empty black bar. */
.ps a.r7-strip{display:flex;align-items:center;gap:var(--s3);flex-wrap:wrap;min-height:44px;padding:10px var(--s4);color:var(--night-text);text-decoration:none}
.r7-strip .r7-who{flex:1 1 auto;min-width:0;font-weight:600;font-size:14px;line-height:20px}
.r7-strip .r7-who.open{color:#fdb022}          /* nobody on it: the thing to fix */
.r7-strip .r7-go{white-space:nowrap;font-weight:600}
/* An activity row: who, what they did, when. Three columns on a laptop; on a
   phone the time sits top right beside the name and what they did goes under. */
.r7-act{flex-wrap:wrap;column-gap:var(--s3);row-gap:2px}
.r7-act .r7-who{font-weight:600;flex:0 1 auto;min-width:0}
.r7-act .r7-what{color:var(--text-2);font-size:14px;line-height:20px}
.r7-act .r7-when{white-space:nowrap;margin-left:auto}
@media (max-width:1023px){ .r7-act .r7-what{order:3;flex:1 1 100%} }
@media (min-width:1024px){ .r7-act .r7-who{flex:0 0 200px} .r7-act .r7-what{flex:1 1 auto} }

/* ---------- 8. Controls: segmented, tabs, filters ---------- */
.ps-seg{display:inline-flex;padding:3px;background:var(--n-bg);border-radius:var(--r-md);gap:2px;max-width:100%;overflow-x:auto}
.ps-seg a,.ps-seg button{min-height:32px;padding:0 12px;display:inline-flex;align-items:center;gap:6px;border:0;background:transparent;border-radius:var(--r-sm);font:500 13px/1 var(--font);color:var(--text-2);white-space:nowrap;cursor:pointer}
.ps-seg .is-active{background:var(--surface);color:var(--text);font-weight:600;box-shadow:0 1px 2px rgba(28,25,23,.12)}
.ps-seg.block{display:flex}.ps-seg.block>*{flex:1;justify-content:center}
.ps-tabs{display:flex;gap:var(--s5);border-bottom:1px solid var(--line);overflow-x:auto;scrollbar-width:none}
.ps-tabs a{display:inline-flex;align-items:center;gap:6px;min-height:44px;font-size:14px;font-weight:500;color:var(--text-2);border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap}
.ps-tabs a.is-active{color:var(--text);font-weight:600;border-color:var(--accent)}
.ps-filter{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:0 12px;border:1px solid var(--line);border-radius:var(--r-pill);font-size:13px;font-weight:500;color:var(--text-2);background:var(--surface);white-space:nowrap}
.ps-filter.is-active{background:var(--text);color:var(--surface);border-color:var(--text)}
.ps-filters{display:flex;gap:var(--s2);overflow-x:auto;scrollbar-width:none;padding-bottom:2px}

/* ---------- 9. Tables (laptop lists) ---------- */
.ps-table{width:100%;border-collapse:collapse;font-size:14px}
.ps-table th{text-align:left;font-size:12px;line-height:16px;font-weight:600;color:var(--text-3);padding:10px var(--s3);border-bottom:1px solid var(--line);background:var(--sunken);white-space:nowrap}
.ps-table td{padding:10px var(--s3);border-bottom:1px solid var(--line);vertical-align:middle}
.ps-table tr:hover td{background:var(--hover)}
.ps-table .r{text-align:right;font-variant-numeric:tabular-nums}
.ps-table tr.is-selected td{background:var(--accent-soft)}
.ps-date-block{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;width:44px;height:48px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);flex:none}
.ps-date-block small{font-size:12px;line-height:14px;font-weight:600;color:var(--text-3);text-transform:uppercase}
.ps-date-block b{font-size:18px;line-height:22px;font-weight:600;font-variant-numeric:tabular-nums}
/* pipeline board */
.ps-board{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(248px,1fr);gap:var(--s3);overflow-x:auto;padding-bottom:var(--s2)}
.ps-lane{background:var(--sunken);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s2);display:flex;flex-direction:column;gap:var(--s2)}
.ps-lane-head{display:flex;justify-content:space-between;align-items:center;padding:6px var(--s2);font-weight:600;font-size:14px}
.ps-lane-head .ps-meta{font-variant-numeric:tabular-nums}
.ps-bcard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:var(--s3);display:flex;flex-direction:column;gap:6px}
.ps-bcard.needs{box-shadow:inset 3px 0 0 var(--a-dot)}
.ps-bcard.late{box-shadow:inset 3px 0 0 var(--d-dot)}

/* ---------- 10. Booking page ---------- */
.ps-bhead{background:var(--surface);border-bottom:1px solid var(--line);padding:var(--s5) var(--gutter) 0}
.ps-bhead-top{display:grid;gap:var(--s4)}
@media (min-width:1024px){ .ps-bhead-top{grid-template-columns:minmax(0,1fr) auto;align-items:start} }
.ps-bhead h1{font-size:24px;line-height:30px;font-weight:600;letter-spacing:-.015em}
.ps-bhead-facts{display:flex;flex-direction:column;gap:2px;margin-top:6px;color:var(--text-2);font-size:14px}
.ps-bhead-facts .bi{color:var(--text-3);margin-right:6px}
.ps-bhead-actions{display:flex;gap:var(--s2);flex-wrap:wrap}
.ps-money-strip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;background:var(--surface)}
.ps-money-strip>div{padding:var(--s3) var(--s4)}
.ps-money-strip>div+div{border-left:1px solid var(--line)}
.ps-money-strip small{display:block;font-size:12px;line-height:16px;font-weight:500;color:var(--text-3)}
.ps-money-strip b{display:block;font-size:20px;line-height:28px;font-weight:600;font-variant-numeric:tabular-nums}
.ps-money-strip .paid b{color:var(--s-fg)} .ps-money-strip .late b{color:var(--d-fg)}
.ps-progress{height:6px;border-radius:var(--r-pill);background:var(--n-bg);overflow:hidden;display:flex}
.ps-progress>i{display:block;height:100%;background:var(--s-dot)}
.ps-progress>i.accent{background:var(--accent)} .ps-progress>i.p{background:var(--p-dot)} .ps-progress>i.d{background:var(--d-dot)} .ps-progress>i.n{background:var(--line-strong)}
/* journey rail: 8 stops */
.ps-rail{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));margin:var(--s5) 0 var(--s2);list-style:none;padding:0}
.ps-rail li{position:relative;padding-top:24px;font-size:13px;line-height:18px;min-width:0}
.ps-rail li::before{content:"";position:absolute;top:8px;left:18px;right:-2px;height:2px;background:var(--line)}
.ps-rail li:last-child::before{display:none}
.ps-rail li.done::before{background:var(--s-dot)}
.ps-rail .dot{position:absolute;top:0;left:0;width:18px;height:18px;border-radius:50%;background:var(--surface);border:2px solid var(--line-strong);display:flex;align-items:center;justify-content:center;font-size:12px;color:#fff;z-index:1}
.ps-rail li.done .dot{background:var(--s-dot);border-color:var(--s-dot)}
.ps-rail li.current .dot{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.ps-rail li.current .dot::after{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent)}
.ps-rail li.late .dot{border-color:var(--d-dot);background:var(--d-dot)}
.ps-rail b{display:block;font-weight:600;color:var(--text);padding-right:6px}
.ps-rail li.current b{color:var(--accent-text)}
.ps-rail span{display:block;color:var(--text-3);font-size:12px;line-height:16px;padding-right:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media (max-width:767px){
  .ps-rail{grid-template-columns:none;grid-auto-flow:column;grid-auto-columns:92px;overflow-x:auto;scrollbar-width:none}
}
/* anchor tabs under the header (sub-routes or #anchors) */
.ps-bhead .ps-tabs{margin-top:var(--s3);border-bottom:0}

/* next step card */
.ps-next{border:1px solid color-mix(in srgb,var(--accent) 35%,var(--line));background:linear-gradient(0deg,var(--surface),var(--surface)),var(--surface);border-radius:var(--r-lg);padding:var(--s4) var(--s5);box-shadow:inset 3px 0 0 var(--accent)}
.ps-next .ps-eyebrow{color:var(--accent-text);display:flex;align-items:center;gap:6px}
.ps-next h3{font-size:18px;line-height:24px;font-weight:600;margin:4px 0}
.ps-next p{color:var(--text-2);font-size:14px;line-height:20px}
.ps-next-actions{display:flex;flex-wrap:wrap;gap:var(--s2);margin-top:var(--s3)}
.ps-open-items{margin-top:var(--s4);border-top:1px solid var(--line)}
.ps-open-item{display:flex;align-items:center;gap:var(--s3);padding:10px 0;font-size:14px;line-height:20px}
.ps-open-item+.ps-open-item{border-top:1px solid var(--line)}
.ps-open-item>.bi{color:var(--text-3);font-size:16px}

/* day card with Booth | Attendant | Design table */
.ps-day{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);overflow:hidden}
.ps-day+.ps-day{margin-top:var(--s3)}
.ps-day-head{display:flex;gap:var(--s3);align-items:flex-start;padding:var(--s3) var(--s4);background:var(--sunken);border-bottom:1px solid var(--line)}
.ps-day-head h4{font-size:15px;line-height:20px;font-weight:600}
.ps-dtable{width:100%;border-collapse:collapse;font-size:14px;table-layout:fixed}
.ps-dtable col.c-booth{width:30%} .ps-dtable col.c-person{width:44%}
.ps-dtable th{font-size:12px;line-height:16px;font-weight:600;color:var(--text-3);text-align:left;padding:8px var(--s4) 6px;border-bottom:1px solid var(--line)}
.ps-dtable td{padding:10px var(--s4);border-bottom:1px solid var(--line);vertical-align:top}
.ps-dtable tr:last-child td{border-bottom:0}
.ps-booth{display:flex;gap:10px;align-items:center;min-width:0}
.ps-booth b{white-space:nowrap}
.ps-booth img{width:40px;height:40px;border-radius:var(--r-sm);object-fit:cover;flex:none}
.ps-person{display:flex;gap:var(--s2);align-items:center}
.ps-slot-open{background:color-mix(in srgb,var(--a-bg) 60%,var(--surface))}
.ps-slot-foot{display:flex;flex-wrap:wrap;gap:4px var(--s3);padding:8px var(--s4) 10px;font-size:13px;line-height:18px;color:var(--text-3);border-top:1px dashed var(--line)}
.ps-slot-foot span{display:inline-flex;align-items:center;gap:5px}
@media (max-width:767px){
  .ps-dtable thead{display:none}
  .ps-dtable tr{display:grid;grid-template-columns:1fr;border-bottom:1px solid var(--line);padding:var(--s2) 0}
  .ps-dtable td{border:0;padding:4px var(--s4)}
  .ps-dtable td[data-label]::before{content:attr(data-label);display:block;font-size:12px;font-weight:600;color:var(--text-3)}
}

/* ledger */
.ps-ledger{font-size:14px}
.ps-ledger-group{padding:var(--s3) var(--s4)}
.ps-ledger-group+.ps-ledger-group{border-top:1px solid var(--line)}
.ps-ledger-group h5{margin:0 0 6px;font-size:12px;line-height:16px;font-weight:600;color:var(--text-3)}
.ps-line{display:flex;justify-content:space-between;gap:var(--s3);padding:5px 0}
.ps-line .amt{font-variant-numeric:tabular-nums;font-weight:500;white-space:nowrap}
.ps-line .amt.in{color:var(--s-fg)}
.ps-line .ps-meta{display:block}
.ps-line.total{border-top:1px solid var(--line);margin-top:6px;padding-top:10px;font-weight:600}
.ps-balance{display:flex;justify-content:space-between;align-items:flex-end;padding:var(--s4);background:var(--sunken);border-top:1px solid var(--line)}
.ps-balance b{font-size:24px;line-height:30px;font-weight:600;font-variant-numeric:tabular-nums}
.ps-hatch{background-image:repeating-linear-gradient(135deg,transparent 0 4px,rgba(120,113,108,.28) 4px 6px)}

/* timeline */
.ps-timeline{list-style:none;margin:0;padding:0}
.ps-tl{display:grid;grid-template-columns:28px 1fr auto;gap:var(--s3);padding:10px var(--s4);align-items:start}
.ps-tl+.ps-tl{border-top:1px solid var(--line)}
.ps-tl-icon{width:28px;height:28px;border-radius:50%;background:var(--n-bg);color:var(--text-2);display:flex;align-items:center;justify-content:center;font-size:13px}
.ps-tl.client .ps-tl-icon{background:var(--client-bg);color:var(--client-fg);box-shadow:inset 0 0 0 1px var(--client-line)}
.ps-tl.failed .ps-tl-icon{background:var(--d-bg);color:var(--d-fg)}
.ps-tl-time{font-size:12px;line-height:16px;color:var(--text-3);white-space:nowrap;font-variant-numeric:tabular-nums}

/* ---------- 11. Sheets (bottom sheet on phone, right drawer on laptop) ---------- */
.ps-scrim{position:fixed;inset:0;background:rgba(12,10,9,.45);z-index:50}
.ps-scrim.static{position:absolute}
.ps-sheet{position:fixed;left:0;right:0;bottom:0;z-index:51;background:var(--surface);border-radius:var(--r-xl) var(--r-xl) 0 0;box-shadow:var(--shadow-sheet);max-height:92vh;display:flex;flex-direction:column;padding-bottom:env(safe-area-inset-bottom)}
.ps-sheet.static{position:absolute}
@media (min-width:768px){ .ps-sheet{left:auto;top:0;width:440px;max-height:none;border-radius:0;box-shadow:var(--shadow-pop);border-left:1px solid var(--line)} }
.ps-sheet-handle{width:36px;height:5px;border-radius:3px;background:var(--line-strong);margin:8px auto 0}
@media (min-width:768px){ .ps-sheet-handle{display:none} }
.ps-sheet-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--s3);padding:var(--s3) var(--s4) var(--s2)}
.ps-sheet-head h3{font-size:18px;line-height:24px;font-weight:600}
.ps-sheet-body{padding:var(--s2) var(--s4) var(--s4);overflow-y:auto;display:flex;flex-direction:column;gap:var(--s4)}
.ps-sheet-foot{padding:var(--s3) var(--s4);border-top:1px solid var(--line);display:flex;flex-direction:column;gap:var(--s2);background:var(--surface)}
/* side effects: who gets contacted, each with a switch */
.ps-effects{border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden}
.ps-effects-head{padding:10px var(--s3);font-size:13px;font-weight:600;background:var(--sunken);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:6px}
.ps-effect-row{display:flex;align-items:center;gap:var(--s3);padding:10px var(--s3);font-size:14px;line-height:20px}
.ps-effect-row+.ps-effect-row{border-top:1px solid var(--line)}
.ps-effect-row.excluded{color:var(--text-3)}
.ps-preview{border:1px solid var(--line);border-radius:var(--r-md);padding:var(--s3);background:var(--sunken);font-size:14px;line-height:20px;color:var(--text-2);white-space:pre-line}
.ps-preview.sms{background:var(--n-bg);border-radius:18px 18px 18px 4px;border:0;max-width:92%}
.ps-preview.email{border-left:3px solid var(--line-strong)}
.ps-confirm-note{font-size:13px;line-height:18px;color:var(--text-3);text-align:center}

/* ---------- 12. Forms ---------- */
.ps-field{display:flex;flex-direction:column;gap:6px}
.ps-field>label,.ps-field-label{font-size:13px;line-height:18px;font-weight:600;color:var(--text)}
.ps-input,.ps-select,.ps-textarea{width:100%;min-height:44px;padding:10px 12px;border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface);color:var(--text);font:400 16px/22px var(--font)}
@media (min-width:1024px){ .ps-input,.ps-select,.ps-textarea{min-height:38px;padding:8px 12px;font-size:14px;line-height:20px} }
.ps-textarea{min-height:96px;resize:vertical}
.ps-input::placeholder,.ps-textarea::placeholder{color:var(--text-3)}
.ps-input:focus,.ps-select:focus,.ps-textarea:focus{outline:none;border-color:var(--accent);box-shadow:var(--focus-ring)}
.ps-input.is-invalid{border-color:var(--d-fg)}
.ps-input.money{font-size:22px;font-weight:600;font-variant-numeric:tabular-nums}
.ps-hint{font-size:13px;line-height:18px;color:var(--text-3)}
.ps-error{font-size:13px;line-height:18px;color:var(--d-fg);display:flex;gap:6px;align-items:center;font-weight:500}
.ps-saved{font-size:12px;line-height:16px;color:var(--s-fg);font-weight:600;display:inline-flex;gap:4px;align-items:center}
.ps-switch{position:relative;width:44px;height:26px;border-radius:var(--r-pill);background:var(--line-strong);flex:none;display:inline-block;transition:background var(--t-fast)}
.ps-switch::after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.25);transition:transform var(--t-med) var(--ease)}
.ps-switch.on{background:var(--accent)}
.ps-switch.on::after{transform:translateX(18px)}
.ps input[type=checkbox],.ps input[type=radio]{accent-color:var(--accent);width:18px;height:18px}
.ps-choice{display:flex;flex-wrap:wrap;gap:var(--s2)}
.ps-choice>*{min-height:40px;padding:0 14px;display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line-strong);border-radius:var(--r-md);font-size:14px;font-weight:500;background:var(--surface)}
.ps-choice>.is-active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-text);font-weight:600;box-shadow:inset 0 0 0 1px var(--accent)}

/* ---------- 13. Feedback: toast, banner, empty, skeleton ---------- */
.ps-toast{display:flex;align-items:center;gap:var(--s3);padding:10px 10px 10px var(--s4);border-radius:var(--r-md);background:var(--night);color:var(--night-text);box-shadow:var(--shadow-pop);font-size:14px;line-height:20px}
.ps-toast .ps-undo{color:var(--night-accent-text)}
.ps-banner{display:flex;gap:var(--s3);align-items:flex-start;padding:var(--s3) var(--s4);border-radius:var(--r-md);font-size:14px;line-height:20px;background:var(--n-bg);color:var(--n-fg)}
.ps-banner>.bi{font-size:16px;margin-top:2px}
.ps-banner.p{background:var(--p-bg);color:var(--p-fg)} .ps-banner.a{background:var(--a-bg);color:var(--a-fg)} .ps-banner.d{background:var(--d-bg);color:var(--d-fg)} .ps-banner.s{background:var(--s-bg);color:var(--s-fg)}
.ps-banner b{font-weight:600}
.ps-banner.test{border-radius:0;justify-content:center;padding:6px var(--s4);font-size:13px;font-weight:600;background:var(--p-bg);color:var(--p-fg)}
.ps-empty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--s2);padding:var(--s10) var(--s6);color:var(--text-2)}
.ps-empty .bi{font-size:28px;color:var(--s-fg)}
.ps-empty h4{font-size:16px;line-height:22px;font-weight:600;color:var(--text)}
.ps-skel{background:linear-gradient(90deg,var(--n-bg) 0,var(--hover) 50%,var(--n-bg) 100%);background-size:200% 100%;animation:ps-shimmer 1.2s linear infinite;border-radius:var(--r-xs);height:12px}
@keyframes ps-shimmer{to{background-position:-200% 0}}

/* ---------- 14. Money & Insights ---------- */
.ps-kpis{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s3)}
@media (min-width:1024px){ .ps-kpis{grid-template-columns:repeat(4,minmax(0,1fr))} }
.ps-kpi{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--s3) var(--s4);display:flex;flex-direction:column;gap:2px;min-width:0}
.ps-kpi small{font-size:13px;line-height:18px;font-weight:500;color:var(--text-2)}
.ps-kpi b{font-size:24px;line-height:32px;font-weight:600;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
@media (min-width:1024px){ .ps-kpi b{font-size:28px;line-height:36px} }
.ps-kpi .ps-meta{white-space:normal}
.ps-kpi.late b{color:var(--d-fg)}
.ps-delta{font-size:12px;font-weight:600;color:var(--s-fg)} .ps-delta.down{color:var(--d-fg)}
.ps-bars{display:flex;align-items:flex-end;gap:6px;height:160px;padding-top:var(--s2);border-bottom:1px solid var(--chart-grid);position:relative}
.ps-bar{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:stretch;height:100%;position:relative;min-width:0}
.ps-bar i{display:block;background:var(--chart-1);border-radius:3px 3px 0 0;min-height:2px}
.ps-bar i+i{border-radius:0}
.ps-bar i.m2{background:var(--chart-2)}
.ps-bar i.hb{background-color:transparent;border:1.5px dashed var(--chart-hb);border-bottom:0;background-image:repeating-linear-gradient(135deg,transparent 0 4px,rgba(120,113,108,.3) 4px 6px)}
.ps-bar.none i{background:transparent;border:0}
.ps-bar-labels{display:flex;gap:6px;margin-top:6px}
.ps-bar-labels span{flex:1;text-align:center;font-size:12px;line-height:16px;color:var(--text-3);min-width:0}
.ps-since{position:absolute;top:0;bottom:0;border-left:1.5px dashed var(--text-3)}
.ps-since span{position:absolute;top:-2px;left:6px;z-index:1;font-size:12px;line-height:16px;font-weight:600;color:var(--text-2);white-space:nowrap;background:var(--surface);padding-right:4px}
.ps-legend{display:flex;flex-wrap:wrap;gap:var(--s2) var(--s4);font-size:12px;line-height:16px;color:var(--text-2)}
.ps-legend span{display:inline-flex;align-items:center;gap:6px}
.ps-legend i{width:10px;height:10px;border-radius:2px;background:var(--chart-1);display:inline-block}
.ps-legend i.m2{background:var(--chart-2)} .ps-legend i.hb{background:transparent;border:1.5px dashed var(--chart-hb)}
.ps-coverage{display:flex;flex-direction:column;gap:6px;padding:var(--s3) var(--s4);border:1px dashed var(--line-strong);border-radius:var(--r-lg);background:var(--sunken)}
.ps-aging{display:flex;height:12px;border-radius:var(--r-pill);overflow:hidden;background:var(--n-bg)}
.ps-aging i{display:block;height:100%}
.ps-aging .c0{background:var(--aging-0)} .ps-aging .c1{background:var(--aging-1)} .ps-aging .c2{background:var(--aging-2)} .ps-aging .c3{background:var(--aging-3)}
.ps-funnel{display:flex;flex-direction:column;gap:6px}
.ps-funnel-row{display:grid;grid-template-columns:110px 1fr 64px;gap:var(--s3);align-items:center;font-size:13px}
.ps-funnel-row i{display:block;height:20px;border-radius:4px;background:var(--chart-1)}
.ps-funnel-row .r{text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
.ps-placeholder{border:1px dashed var(--line-strong);border-radius:var(--r-lg);padding:var(--s4);color:var(--text-2);font-size:14px;line-height:20px;background:var(--surface)}

/* ---------- 15. Calendar ---------- */
.ps-agenda-day{display:flex;align-items:baseline;justify-content:space-between;padding:var(--s4) var(--gutter) var(--s2);position:sticky;top:0;background:var(--canvas);z-index:2}
.ps-agenda-day h3{font-size:15px;line-height:20px;font-weight:600}
.ps-agenda-day.today h3{color:var(--accent-text)}
.ps-hold{border:1.5px dashed var(--p-dot)!important;background:transparent!important}
.ps-month{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border-top:1px solid var(--line);border-left:1px solid var(--line);background:var(--surface)}
.ps-month-dow{padding:8px;font-size:12px;font-weight:600;color:var(--text-3);border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--sunken)}
.ps-mcell{min-height:118px;padding:6px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:4px;min-width:0}
.ps-mcell.out{background:var(--sunken)} .ps-mcell.out .ps-mdate{color:var(--text-3)}
.ps-mcell.today .ps-mdate{background:var(--accent);color:var(--on-accent)}
.ps-mhead{display:flex;justify-content:space-between;align-items:center}
.ps-mdate{font-size:13px;font-weight:600;width:24px;height:24px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-variant-numeric:tabular-nums}
.ps-mcap{font-size:12px;font-weight:600;color:var(--text-3);font-variant-numeric:tabular-nums}
.ps-mcap.full{color:var(--d-fg)}
.ps-pill{display:flex;align-items:center;gap:5px;min-height:22px;padding:2px 6px;border-radius:5px;font-size:12px;line-height:16px;font-weight:500;background:var(--n-bg);color:var(--text);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;border-left:3px solid var(--s-dot)}
.ps-pill.a{border-left-color:var(--a-dot)} .ps-pill.d{border-left-color:var(--d-dot)} .ps-pill.p{border-left-color:var(--p-dot)}
.ps-pill.ps-hold{border-left-width:1.5px;color:var(--p-fg)}
.ps-capbar{display:flex;gap:2px}
.ps-capbar i{flex:1;height:4px;border-radius:2px;background:var(--line)}
.ps-capbar i.on{background:var(--chart-1)} .ps-capbar i.full{background:var(--d-dot)}

/* ---------- 16. Setup checklist ---------- */
.ps-checklist{list-style:none;margin:0;padding:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.ps-check{display:grid;grid-template-columns:32px minmax(0,1fr) auto;gap:var(--s3);align-items:center;padding:var(--s3) var(--s4);min-height:64px}
.ps-check+.ps-check{border-top:1px solid var(--line)}
.ps-check-mark{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:2px solid var(--line-strong);font-size:13px;font-weight:600;color:var(--text-3);font-variant-numeric:tabular-nums}
.ps-check.done .ps-check-mark{background:var(--s-solid);border-color:var(--s-solid);color:#fff}
.ps-check.todo .ps-check-mark{border-color:var(--a-dot);color:var(--a-fg)}
.ps-check.done .ps-check-title{color:var(--text-2)}
.ps-check-title{font-size:15px;line-height:20px;font-weight:600}
.ps-check.is-next{background:color-mix(in srgb,var(--accent-soft) 45%,var(--surface))}

/* ---------- 17. Staff (field) surfaces ---------- */
.ps-field-page{max-width:560px;margin:0 auto}
.ps-staff-head{display:flex;align-items:center;justify-content:space-between;padding:calc(env(safe-area-inset-top) + 12px) var(--gutter) var(--s2)}
.ps-staff-head img{height:24px}
.ps-runsheet{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-xl);overflow:hidden}
.ps-runsheet.night{background:var(--night);color:var(--night-text);border-color:var(--night)}
.ps-runsheet.night .ps-meta,.ps-runsheet.night .ps-muted{color:var(--night-text-2)}
.ps-bigtime{font-size:40px;line-height:44px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.ps-rs-block{padding:var(--s4)}
.ps-rs-block+.ps-rs-block{border-top:1px solid var(--line)}
.ps-runsheet.night .ps-rs-block+.ps-rs-block{border-color:#3a3634}
.ps-runsheet.night .ps-btn{background:var(--night-2);border-color:#3a3634;color:var(--night-text)}
.ps-runsheet.night .ps-btn.primary{background:var(--night-accent);border-color:var(--night-accent);color:var(--night-on-accent)}
.ps-runsheet.night .ps-chip{background:#292524;color:#e7e5e4}
.ps-bigbtns{display:grid;grid-template-columns:1fr 1fr;gap:var(--s2)}
.ps-bigbtns .ps-btn{min-height:52px;font-size:15px;font-weight:600}
.ps-floorplan{display:block;width:100%;border-radius:var(--r-md);border:1px solid var(--line);background:var(--sunken)}
.ps-kit{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px;font-size:15px}
.ps-kit li{display:flex;gap:var(--s2);align-items:center}
.ps-facts{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line);border-radius:var(--r-lg);overflow:hidden;border:1px solid var(--line)}
.ps-facts>div{background:var(--surface);padding:var(--s3) var(--s4)}
/* Two columns, so an odd last cell spans both rather than leaving a gap. */
.ps-facts>div:last-child:nth-child(odd){grid-column:1 / -1}
.ps-facts small{display:block;font-size:12px;line-height:16px;font-weight:500;color:var(--text-3)}
.ps-facts b{display:block;font-size:17px;line-height:24px;font-weight:600;font-variant-numeric:tabular-nums}
.ps-answer{display:grid;grid-template-columns:1fr 1fr;gap:var(--s2)}
.ps-answer button,.ps-answer a{min-height:56px;border-radius:var(--r-lg);border:1.5px solid var(--line-strong);background:var(--surface);font:600 16px/1 var(--font);color:var(--text);display:flex;align-items:center;justify-content:center;gap:8px;cursor:pointer}
.ps-answer .yes.is-selected{background:var(--s-solid);border-color:var(--s-solid);color:#fff}
.ps-answer .no.is-selected{background:var(--text);border-color:var(--text);color:var(--surface)}
.ps-answer .yes:not(.is-selected){background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.ps-pinned-note{border-radius:var(--r-lg);background:var(--a-bg);color:var(--text);padding:var(--s3) var(--s4);border:1px solid color-mix(in srgb,var(--a-dot) 40%,transparent)}
.ps-pinned-note .ps-eyebrow{color:var(--a-fg)}
.ps-locked{display:flex;gap:var(--s2);align-items:center;padding:var(--s3) var(--s4);border-radius:var(--r-md);background:var(--p-bg);color:var(--p-fg);font-size:14px;font-weight:500}
.ps-thumbs{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.ps-thumbs img,.ps-thumbs i{aspect-ratio:1;width:100%;object-fit:cover;border-radius:var(--r-sm);background:var(--n-bg);display:block}
.ps-uploader{border:1.5px dashed var(--line-strong);border-radius:var(--r-lg);padding:var(--s5);display:flex;flex-direction:column;align-items:center;gap:var(--s2);text-align:center;background:var(--sunken)}
.ps-upload-row{display:grid;grid-template-columns:40px 1fr auto;gap:var(--s3);align-items:center;padding:var(--s2) 0;font-size:14px}
.ps-upload-row .ps-progress{margin-top:4px}

/* ---------- 18. Motion preferences ---------- */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important;scroll-behavior:auto!important}
}

/* ---------- 19. Staff portal additions (attendant, invitation, designer, manager) ---------- */
.ps-staff-hello{display:flex;align-items:center;gap:var(--s2);font-size:14px;font-weight:500;color:var(--text-2)}
.ps-staff-hello .ps-avatar{width:32px;height:32px}
.ps-staff-foot{padding:var(--s6) var(--gutter) var(--s8);text-align:center;font-size:13px;line-height:18px;color:var(--text-3)}
.ps-staff-foot a{color:var(--accent-text);font-weight:600;white-space:nowrap}
/* run sheet info rows: icon + text + optional actions */
.ps-rs-head{display:flex;align-items:center;gap:var(--s2);font-size:15px;line-height:22px;font-weight:600}
.ps-rs-head .bi{color:var(--text-3);font-size:16px}
.ps-rs-line{display:flex;align-items:flex-start;gap:var(--s3);font-size:15px;line-height:22px}
.ps-rs-line>.bi{color:var(--text-3);font-size:16px;margin-top:3px;flex:none}
.ps-rs-line b{font-weight:600}
.ps-icon-tile{width:40px;height:40px;border-radius:var(--r-md);display:flex;align-items:center;justify-content:center;background:var(--n-bg);color:var(--text-2);font-size:18px;flex:none}
/* CSS-drawn floor plan (a real upload renders as <img class="ps-floorplan">) */
.ps-fp{position:relative;display:block;width:100%;aspect-ratio:4/3.1;border-radius:var(--r-md);background:var(--sunken);border:1px solid var(--line);overflow:hidden;color:var(--text-2)}
.ps-fp-room{position:absolute;inset:14px 34px 44px 14px;border:3px solid var(--line-strong);border-radius:4px;background:var(--surface)}
.ps-fp-label{position:absolute;font-size:12px;line-height:14px;font-weight:600;color:var(--text-2);white-space:nowrap}
.ps-fp-stage{position:absolute;left:22%;right:40%;top:0;height:17%;background:var(--n-bg);border:1px solid var(--line-strong);border-top:0;border-radius:0 0 6px 6px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:var(--text-2)}
.ps-fp-dance{position:absolute;left:26%;right:47%;top:30%;height:40%;border:1.5px dashed var(--line-strong);border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:var(--text-2);background-image:repeating-linear-gradient(45deg,transparent 0 9px,color-mix(in srgb,var(--line) 70%,transparent) 9px 10px)}
.ps-fp-tables{position:absolute;left:5%;top:24%;bottom:8%;width:14%;display:grid;grid-template-columns:1fr 1fr;gap:8px;align-content:space-between;justify-items:center}
.ps-fp-tables i{width:15px;height:15px;border-radius:50%;border:1.5px solid var(--line-strong);display:block}
.ps-fp-booth{position:absolute;right:0;border-right:0!important;border-radius:var(--r-sm) 0 0 var(--r-sm)!important;display:flex;align-items:center;gap:5px;padding:4px 8px;border-radius:var(--r-sm);font-size:12px;line-height:14px;font-weight:600;background:var(--n-bg);color:var(--text);border:1px solid var(--line-strong);white-space:nowrap}
.ps-fp-booth.you{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.ps-fp-booth .bi{font-size:12px}
.ps-fp-wall{position:absolute;right:0;top:14px;bottom:44px;width:34px;display:flex;align-items:center;justify-content:center}
.ps-fp-wall span{transform:rotate(90deg);font-size:12px;font-weight:600;color:var(--text-3);white-space:nowrap;letter-spacing:.04em}
.ps-fp-dock{position:absolute;left:10%;bottom:6px;display:flex;align-items:center;gap:5px;font-size:12px;font-weight:600;color:var(--n-fg);background:var(--n-bg);border:1px solid var(--line-strong);border-bottom:0;padding:3px 8px 3px 6px;border-radius:var(--r-sm) var(--r-sm) 0 0}
.ps-fp-dock .bi{font-size:13px}
.ps-fp-gap{position:absolute;left:12%;width:24%;bottom:41px;height:6px;background:var(--surface)}
.ps-fp-zoom{position:absolute;right:8px;bottom:6px;display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:0 10px;border-radius:var(--r-pill);background:var(--night);color:var(--night-text);font-size:12px;font-weight:600;box-shadow:var(--shadow-pop)}
/* photo */
.ps-photo{display:block;width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:var(--r-lg);background:var(--n-bg)}
/* setting row */
.ps-setting{display:flex;align-items:center;gap:var(--s3);min-height:64px;padding:var(--s3) var(--s4)}
.ps-setting+.ps-setting{border-top:1px solid var(--line)}
.ps-setting .ps-row-sub{margin-top:1px}
/* show-more button for collapsed lists */
.ps-more{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);width:100%;min-height:56px;padding:var(--s3) var(--s4);border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);font:600 15px/20px var(--font);color:var(--text);text-align:left;cursor:pointer}
.ps-more .ps-meta{display:block;font-weight:500;margin-top:1px}
.ps-more>.bi{color:var(--text-3);font-size:16px}
.ps-card.muted{background:var(--sunken)}
/* design thumbnails: mini print mocks */
.ps-print{flex:none;width:48px;height:56px;border-radius:var(--r-sm);background:var(--n-bg);display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;border:1px solid var(--line)}
.ps-print .card{width:34px;height:46px;background:#fbf8f2;border:1.5px solid #c9a227;border-radius:2px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;box-shadow:0 1px 2px rgba(0,0,0,.15)}
.ps-print .card b{font:italic 600 11px/1 Georgia,"Playfair Display",serif;color:#6b4f00}
.ps-print .card i{display:block;width:20px;height:1px;background:#c9a227}
.ps-print .card.blush{border-color:#d9a3a8} .ps-print .card.blush b{color:#8a4a52} .ps-print .card.blush i{background:#d9a3a8}
.ps-print .card.navy{background:#1f2a44;border-color:#c9a227} .ps-print .card.navy b{color:#f0c95c}
.ps-print .strip{width:17px;height:48px;background:#fff;border:1px solid #d6d3d1;border-radius:2px;display:flex;flex-direction:column;gap:2px;padding:2px;box-shadow:0 1px 2px rgba(0,0,0,.15)}
.ps-print .strip i{flex:1;background:#a8a29e;border-radius:1px}
.ps-print .strip i:last-child{flex:.6;background:#1c1917}
.ps-print .strip+.strip{margin-left:3px}
.ps-print.empty{border-style:dashed;border-color:var(--line-strong);background:var(--sunken);color:var(--text-3);font-size:20px}
.ps-print.lg{width:88px;height:104px;border-radius:var(--r-md)}
.ps-print.lg .card{width:64px;height:88px;border-width:2px;gap:3px}
.ps-print.lg .card b{font-size:18px}
.ps-print.lg .card i{width:36px}
.ps-print.lg .card small{font:600 7px/1 var(--font);letter-spacing:.08em;color:#6b4f00}
/* design list row: thumbnail + text + chevron, with room for a note under it */
.ps-drow{display:grid;grid-template-columns:48px minmax(0,1fr) 16px;gap:var(--s3);align-items:center;padding:var(--s3) var(--s4)}
.ps-drow+.ps-drow{border-top:1px solid var(--line)}
.ps-drow>.bi-chevron-right{color:var(--text-3);font-size:14px}
.ps-drow .ps-chips{margin-top:6px}
.ps-drow-extra{grid-column:1 / -1}
.ps-pinned-note.inline{padding:10px var(--s3);font-size:14px;line-height:20px}
.ps-pinned-note.inline .ps-eyebrow{margin-bottom:2px}
.ps-locked.inline{padding:8px var(--s3);font-size:13px;line-height:18px}
/* manager board: compact unstaffed slot card */
.ps-slot-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.ps-slot-card+.ps-slot-card{margin-top:var(--s3)}
.ps-slot-top{display:flex;gap:var(--s3);align-items:center;padding:var(--s3) var(--s4)}
.ps-slot-top img{width:48px;height:48px;border-radius:var(--r-sm);object-fit:cover;flex:none}
.ps-slot-body{padding:var(--s3) var(--s4) var(--s4);border-top:1px solid var(--line);display:flex;flex-direction:column;gap:var(--s3)}
.ps-slot-body.open{background:color-mix(in srgb,var(--a-bg) 60%,var(--surface))}
.ps-slot-card .ps-slot-foot{border-top:1px solid var(--line)}
.ps-slot-card .ps-effect{margin-top:0}
.ps-tonight.mini{padding:var(--s3) var(--s4)}
.ps-tonight.mini .ps-tonight-title{font-size:16px;line-height:22px}
.ps-tonight.mini .ps-tonight-crew{margin-top:var(--s3);padding:10px var(--s3)}
.ps-tonight.mini .ps-tonight-crew .ps-btn{min-height:40px;padding:0 12px}

/* ==========================================================================
   20. Additions from the final team mockups (Home, Bookings, Booking,
   Calendar, Money, Inbox, Setup, sheets, catch-up). Token-based only.
   ========================================================================== */

/* 20.1 Shell extras */
.ps-topbar-right{margin-left:auto;display:flex;align-items:center;gap:var(--s2);color:var(--text-2);font-size:13px;font-weight:500}
.ps-setup-card.is-active{background:var(--accent-soft);border-color:color-mix(in srgb,var(--accent) 35%,var(--line))}
.ps-setup-card.is-active b{color:var(--accent-text)}
.ps-page.wide{max-width:none}
/* phone sub-page bar: back link + trailing actions, then a large title */
.ps-phone-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--s2);min-height:52px;padding:calc(env(safe-area-inset-top) + 4px) 8px 0 4px}
.ps-back{display:inline-flex;align-items:center;gap:2px;min-height:44px;padding:0 8px;color:var(--accent-text)!important;font-size:16px;font-weight:500}
.ps-back .bi{font-size:20px}
.ps-phone-title{padding:2px var(--gutter) var(--s3)}
.ps-phone-title h1{font-size:26px;line-height:32px;font-weight:600;letter-spacing:-.02em}
.ps-phone-title .ps-summary-line{margin-top:2px}
@media (min-width:768px){ .ps-phone-bar,.ps-phone-title{display:none} }
/* a horizontally scrolling strip that bleeds to the right edge on phone (signals more) */
.ps-bleed-right{margin-right:calc(var(--gutter) * -1);padding-right:var(--gutter)}
.ps-hscroll{overflow-x:auto;scrollbar-width:none}
.ps-hscroll::-webkit-scrollbar{display:none}

/* 20.2 Home */
.ps-section-head .ps-count{font-size:12px}
.ps-q .ps-q-action .ps-btn.ghost.sm{color:var(--text-3)}
/* design thumbnail (neutral artwork tile, not a status) */
.ps-design-thumb{width:32px;height:32px;border-radius:var(--r-sm);border:1px solid var(--line-strong);background:var(--sunken);display:flex;align-items:center;justify-content:center;color:var(--text);font:italic 500 13px/1 Georgia,"Times New Roman",serif;letter-spacing:-.02em;flex:none;position:relative;overflow:hidden}
.ps-design-thumb::after{content:"";position:absolute;inset:3px;border:1px solid var(--line);border-radius:4px}
.ps-design-thumb.lg{width:44px;height:56px;font-size:15px}
.ps-design-thumb.strip{width:28px;height:56px;font-size:12px;writing-mode:vertical-rl}
/* stacked money bar legend with amounts */
.ps-legend b{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums}
.ps-money-line{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s3);font-size:14px;line-height:20px;color:var(--text-2);padding-top:var(--s3);border-top:1px solid var(--line)}
.ps-money-line b{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums}
.ps-banner a.ps-link{white-space:nowrap}
/* staffing glance lines */
.ps-slot-line{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--s3);align-items:center;padding:var(--s3) var(--s4)}
.ps-slot-line+.ps-slot-line{border-top:1px solid var(--line)}
.ps-slot-line .ps-row-title{font-size:14px}

/* 20.3 Page heads and toolbars (laptop) */
.ps-page-title{font-size:var(--fs-title);line-height:var(--lh-title);font-weight:600;letter-spacing:-.01em}
.ps-toolbar{display:flex;align-items:center;gap:var(--s2);flex-wrap:wrap}
.ps-toolbar .ps-grow{min-width:8px}
.ps-search{display:flex;align-items:center;gap:var(--s2);height:36px;padding:0 var(--s3);border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface);color:var(--text-3);font-size:14px;min-width:220px}
.ps-seg .ps-count{min-width:18px;height:18px;padding:0 5px}
.ps-seg .is-active .ps-count.quiet{background:var(--n-bg)}
.ps-filter .bi-chevron-down{font-size:11px;color:var(--text-3)}
.ps-note-row{display:flex;align-items:center;gap:var(--s2);padding:var(--s3) var(--s4);border:1px dashed var(--line-strong);border-radius:var(--r-md);color:var(--text-2);font-size:13px;line-height:18px}

/* 20.4 Pipeline board (fits 5 lanes inside the laptop shell) */
.ps-board.fit{grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:var(--s2);overflow:visible;align-items:start}
.ps-board.fit .ps-lane{padding:6px}
.ps-lane-head{flex-direction:column;align-items:flex-start;gap:0;padding:6px 6px 8px}
.ps-lane-head .ps-lane-name{display:flex;align-items:center;gap:6px;font-size:14px;line-height:20px}
.ps-lane-head .ps-lane-sum{font-size:13px;line-height:18px;font-weight:500;color:var(--text-3);font-variant-numeric:tabular-nums}
.ps-bcard{gap:6px;padding:10px}
.ps-bcard-name{font-size:14px;line-height:19px;font-weight:600;color:var(--text)}
.ps-bcard-sub{font-size:12px;line-height:16px;color:var(--text-2);font-weight:500}
.ps-bcard-value{font-size:13px;line-height:18px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--text)}
.ps-bcard-foot{display:flex;align-items:center;justify-content:space-between;gap:var(--s2);min-height:24px}
.ps-bcard .ps-chips{gap:4px}
.ps-bcard .ps-chip{white-space:normal}
.ps-chip.dashed{background:transparent;outline:1px dashed var(--line-strong);outline-offset:-1px}
.ps-bcard-hint{display:flex;align-items:center;gap:5px;font-size:12px;line-height:16px;color:var(--text-2);font-weight:500}
.ps-bcard-hint .bi{color:var(--accent-text)}

/* 20.5 Booking page extras */
.ps-rowlist{display:flex;flex-direction:column}
.ps-rowlist>*+*{border-top:1px solid var(--line)}
.ps-design-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:var(--s3);align-items:center;padding:var(--s3) var(--s4)}
.ps-design-row .ps-row-title{font-size:14px;line-height:20px}
.ps-file-row{display:grid;grid-template-columns:32px minmax(0,1fr) auto;gap:var(--s3);align-items:center;padding:10px var(--s4);font-size:14px;line-height:20px}
.ps-file-icon{width:32px;height:32px;border-radius:var(--r-sm);background:var(--n-bg);color:var(--text-2);display:flex;align-items:center;justify-content:center;font-size:15px}
.ps-file-row .ps-meta{display:block}
.ps-card-head .ps-filters{padding-bottom:0}
.ps-filter.sm{min-height:28px;padding:0 10px;font-size:12px}
.ps-tl-body{font-size:14px;line-height:20px;min-width:0}
.ps-tl-body .ps-meta{display:block;margin-top:1px}
.ps-lock-line{display:inline-flex;align-items:center;gap:5px;font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}
.ps-slot-assign{margin-top:var(--s2)}
/* phone booking header */
.ps-bhead.phone{padding:0 var(--gutter)}
.ps-bhead.phone h1{font-size:22px;line-height:28px}
.ps-bhead.phone .ps-bhead-sub{font-size:14px;line-height:20px;color:var(--text-2);margin-top:2px}
.ps-bhead.phone .ps-money-strip>div{padding:10px var(--s3)}
.ps-bhead.phone .ps-money-strip b{font-size:18px;line-height:24px}
.ps-actions-row{display:grid;grid-template-columns:auto auto minmax(0,1fr);gap:var(--s2)}
.ps-actions-row .ps-btn{padding:0 9px;min-height:40px}
.ps-rail.scroll{display:flex;margin-right:calc(var(--gutter) * -1);overflow-x:auto;scrollbar-width:none}
.ps-rail.scroll li{flex:0 0 100px}
.ps-rail.scroll li.done{flex-basis:74px}
.ps-bhead.phone .ps-tabs{margin-right:calc(var(--gutter) * -1)}
.ps-bhead.phone .ps-tabs a:last-child{padding-right:var(--gutter)}
@media (max-width:767px){
  .ps-next{padding:var(--s4)}
  .ps-next-actions.stack{display:grid;grid-template-columns:1fr 1fr;gap:var(--s2)}
  .ps-next-actions.stack .ps-btn.primary{grid-column:1/-1}
  .ps-open-item.stack{display:grid;grid-template-columns:20px minmax(0,1fr);row-gap:var(--s2);align-items:start}
  .ps-open-item.stack>.bi{margin-top:2px}
  .ps-open-item.stack .ps-open-actions{grid-column:2;display:flex;gap:var(--s2);align-items:center;flex-wrap:wrap}
  .ps-dtable td .ps-btn.block{margin-top:var(--s2)}
  .ps-day-head .ps-chip{margin-top:2px}
}

/* 20.6 Calendar */
.ps-agenda-day .ps-agenda-cap{font-size:12px;line-height:16px;font-weight:600;color:var(--text-3);font-variant-numeric:tabular-nums}
.ps-agenda-list{margin:0 var(--gutter)}
.ps-agenda-gap{display:flex;align-items:center;gap:var(--s2);margin:var(--s3) var(--gutter) 0;padding:10px var(--s4);border-radius:var(--r-md);background:var(--n-bg);color:var(--text-3);font-size:13px;font-weight:500}
.ps-row.ps-hold{border-radius:var(--r-lg)}
.ps-time-block{display:flex;flex-direction:column;width:56px;flex:none;font-variant-numeric:tabular-nums}
.ps-time-block b{font-size:14px;line-height:20px;font-weight:600}
.ps-time-block span{font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}
.ps-answer-line{display:flex;align-items:flex-start;gap:6px;font-size:13px;line-height:18px;font-weight:500}
.ps-answer-line.s{color:var(--s-fg)} .ps-answer-line.a{color:var(--a-fg)}
.ps-input-row{display:flex;gap:var(--s2)}
.ps-input-row .ps-input{flex:1;min-width:0}
.ps-input.icon-left{padding-left:38px;background-repeat:no-repeat}
.ps-input-wrap{position:relative;flex:1;min-width:0}
.ps-input-wrap>.bi{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-3);font-size:16px;pointer-events:none}
.ps-input-wrap .ps-input{padding-left:38px}
.ps-legend-chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;line-height:16px;font-weight:500;color:var(--text-2)}
.ps-legend-chip i{width:14px;height:10px;border-radius:2px;background:var(--n-bg);border-left:3px solid var(--s-dot)}
.ps-legend-chip i.a{border-left-color:var(--a-dot)} .ps-legend-chip i.d{border-left-color:var(--d-dot)}
.ps-legend-chip i.hold{border:1.5px dashed var(--p-dot);background:transparent}
.ps-month.compact .ps-mcell{min-height:132px;padding:5px}
.ps-mcell.is-selected{box-shadow:inset 0 0 0 2px var(--accent);background:color-mix(in srgb,var(--accent-soft) 35%,var(--surface))}
.ps-pill.two{flex-direction:column;align-items:stretch;gap:0;padding:3px 6px;min-height:0}
.ps-pill.two>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ps-pill.two>small{font-size:12px;line-height:15px;color:var(--text-3);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ps-pill.ps-hold>small{color:var(--p-fg)}
.ps-pill-more{font-size:12px;line-height:16px;font-weight:600;color:var(--text-2);padding:0 2px}
.ps-capbar i.hold{background:transparent;box-shadow:inset 0 0 0 1px var(--p-dot)}
.ps-cap-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px var(--s3);align-items:center;font-size:14px}
.ps-cap-row .ps-capbar{grid-column:1/-1}
.ps-cap-row .ps-capbar i{height:8px;border-radius:3px}
.ps-cap-row b{font-variant-numeric:tabular-nums;font-weight:600;font-size:13px}
.ps-cap-row b.full{color:var(--d-fg)}
.ps-cal-grid{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:var(--s4);align-items:start}

/* 20.7 Money */
.ps-chart{display:grid;grid-template-columns:40px minmax(0,1fr);column-gap:var(--s2)}
.ps-yaxis{position:relative;height:200px;margin-top:0}
.ps-yaxis span{position:absolute;right:0;transform:translateY(50%);font-size:12px;line-height:16px;color:var(--text-3);font-variant-numeric:tabular-nums}
.ps-bars.grid{height:200px;padding-top:0;background-image:linear-gradient(var(--chart-grid) 1px,transparent 1px);background-size:100% 33.333%;background-position:0 0}
.ps-bars.grid.phone{height:180px}
.ps-bar-val{display:block;text-align:center;font-size:12px;line-height:16px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;margin-bottom:3px;white-space:nowrap;position:relative;z-index:2}
.ps-bar-val.muted{color:var(--text-3);font-weight:500}
.ps-bars-gap{position:absolute;top:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;border:1px dashed var(--line-strong);border-bottom:0;border-radius:6px 6px 0 0;background:repeating-linear-gradient(135deg,transparent 0 10px,color-mix(in srgb,var(--n-bg) 70%,transparent) 10px 20px);color:var(--text-3);font-size:12px;font-weight:500;text-align:center;padding:0 var(--s2)}
.ps-since span{top:4px}
.ps-bar i.hb{border-color:var(--text-3)}
.ps-legend i.hb{border-color:var(--text-3);background-image:repeating-linear-gradient(135deg,transparent 0 2px,rgba(120,113,108,.35) 2px 3px)}
.ps-capline{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:visible}
.ps-capline polyline{fill:none;stroke:var(--a-fg);stroke-width:2;vector-effect:non-scaling-stroke}
.ps-capline circle{fill:var(--surface);stroke:var(--a-fg);stroke-width:2;vector-effect:non-scaling-stroke}
.ps-legend i.line{height:2px;width:14px;border-radius:0;background:var(--a-fg)}
.ps-kpi .ps-kpi-note{font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}
.ps-kpi .ps-kpi-note.d{color:var(--d-fg);font-weight:600}
.ps-cash-rows{display:flex;flex-direction:column}
.ps-cash-row{display:flex;justify-content:space-between;align-items:baseline;padding:10px 0;font-size:14px;color:var(--text-2)}
.ps-cash-row+.ps-cash-row{border-top:1px solid var(--line)}
.ps-cash-row b{font-size:18px;line-height:24px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}
.ps-cash-tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden}
.ps-cash-tiles>div{background:var(--surface);padding:var(--s3)}
.ps-cash-tiles small{display:block;font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}
.ps-cash-tiles b{display:block;font-size:18px;line-height:26px;font-weight:600;font-variant-numeric:tabular-nums}
.ps-aging-labels{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--s2);margin-top:var(--s2)}
.ps-aging-labels div{font-size:12px;line-height:16px;color:var(--text-3);font-weight:500;display:flex;flex-direction:column;gap:2px}
.ps-aging-labels b{font-size:13px;line-height:18px;color:var(--text);font-weight:600;font-variant-numeric:tabular-nums}
.ps-aging-labels i{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:4px}
.ps-aging-labels .c0{background:var(--aging-0)} .ps-aging-labels .c1{background:var(--aging-1)} .ps-aging-labels .c2{background:var(--aging-2)} .ps-aging-labels .c3{background:var(--aging-3)}
.ps-att-row{display:grid;grid-template-columns:28px minmax(0,1fr) auto;gap:var(--s3);align-items:center;padding:10px 0;font-size:14px;line-height:20px}
.ps-att-row+.ps-att-row{border-top:1px solid var(--line)}
.ps-att-row .ps-q-icon{width:28px;height:28px;font-size:14px}
.ps-switch-row{display:flex;align-items:center;gap:var(--s3);font-size:14px;line-height:20px;font-weight:500}
.ps-switch-row .ps-grow small{display:block;font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}
.ps-period{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 12px;border:1px solid var(--line-strong);border-radius:var(--r-pill);background:var(--surface);font-size:14px;font-weight:600}
.ps-footnote{font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}
.ps-grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s4)}
.ps-grid-2-1{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:var(--s4)}
@media (max-width:1023px){ .ps-grid-3,.ps-grid-2-1{grid-template-columns:1fr} }
/* catch-up */
.ps-money-input{position:relative}
.ps-money-input>span{position:absolute;left:14px;top:50%;transform:translateY(-50%);font-size:22px;font-weight:600;color:var(--text-3)}
.ps-money-input .ps-input.money{padding-left:34px}
.ps-textlink{display:inline-flex;align-items:center;justify-content:center;min-height:44px;font-size:14px;font-weight:500;color:var(--text-2);text-decoration:underline;text-underline-offset:3px}

/* 20.8 Inbox */
.ps-inbox-group{display:flex;align-items:center;justify-content:space-between;gap:var(--s2);padding:8px var(--s4);background:var(--sunken);border-top:1px solid var(--line);border-bottom:1px solid var(--line);font-size:13px;line-height:18px;font-weight:600;color:var(--text-2)}
.ps-inbox-group:first-child{border-top:0}
.ps-inbox-group .ps-meta{font-weight:500}
.ps-queue .ps-inbox-group+.ps-q{border-top:0}
.ps-quote{margin-top:var(--s2);padding:8px var(--s3);border-left:3px solid var(--line-strong);background:var(--surface);border-radius:0 var(--r-sm) var(--r-sm) 0;font-size:13px;line-height:18px;color:var(--text-2)}
.ps-clamp2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ps-diff{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:6px;font-size:14px;line-height:20px;font-variant-numeric:tabular-nums}
.ps-diff s{color:var(--text-3)}
.ps-diff b{font-weight:600;color:var(--text)}
.ps-diff .bi{color:var(--text-3)}
.ps-divider-label{display:flex;align-items:center;gap:var(--s3);margin:var(--s5) 0 var(--s2);font-size:12px;line-height:16px;font-weight:600;color:var(--text-3)}
.ps-divider-label::after{content:"";flex:1;height:1px;background:var(--line)}
.ps-q.fyi{min-height:56px;grid-template-columns:32px minmax(0,1fr) auto}
.ps-q.fyi .ps-q-title{font-weight:500;color:var(--text-2);font-size:14px}
.ps-q-icon.client{background:var(--client-bg);color:var(--client-fg);box-shadow:inset 0 0 0 1px var(--client-line)}
.ps-q-time{font-size:12px;line-height:16px;color:var(--text-3);font-variant-numeric:tabular-nums;white-space:nowrap}

/* 20.9 Setup */
.ps-setup-layout{display:grid;grid-template-columns:minmax(0,760px) 300px;gap:var(--s6);align-items:start}
.ps-check-state{font-size:13px;line-height:18px;color:var(--text-3);font-weight:500;margin-top:1px}
.ps-check.is-next .ps-check-state{color:var(--text-2)}
.ps-check.is-next .ps-check-mark{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.ps-check.done .ps-check-title{color:var(--text)}
.ps-check-actions{display:flex;align-items:center;gap:var(--s2)}
.ps-integration{display:grid;grid-template-columns:28px minmax(0,1fr) auto;gap:var(--s3);align-items:center;padding:var(--s3) var(--s4)}
.ps-integration+.ps-integration{border-top:1px solid var(--line)}
.ps-integration .ps-file-icon{width:28px;height:28px;font-size:14px}
.ps-integration b{font-size:14px;line-height:20px;font-weight:600;display:block}
.ps-integration small{display:block;font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}

/* 20.10 Static sheet stage (mockups): the page behind + scrim + sheet at viewport height */
.ps-stage{position:relative;height:100vh;min-height:844px;overflow:hidden}
.ps-stage>.ps-behind{position:absolute;inset:0;overflow:hidden}
.ps-sheet.static.tall{height:88%;max-height:none}
.ps-sheet.static .ps-sheet-body{flex:1;min-height:0}
.ps-sheet-sub{font-size:13px;line-height:18px;color:var(--text-2);margin-top:2px}
.ps-effect-row .ps-grow small{display:block;font-size:13px;line-height:18px;color:var(--text-3);font-weight:500}
.ps-effect-row.excluded .ps-avatar{background:var(--n-bg);color:var(--text-3);box-shadow:inset 0 0 0 1px var(--line-strong)}
.ps-effect-row.off b{color:var(--text-2)}
.ps-foot-effect{display:flex;align-items:center;gap:var(--s3);font-size:14px;line-height:20px;color:var(--text-2);padding-bottom:var(--s1)}
.ps-foot-effect .bi{color:var(--text-3)}
.ps-facts.four>div b{font-size:15px;line-height:22px}
.ps-sms-meta{font-size:12px;line-height:16px;color:var(--text-3);margin-top:6px;font-weight:500}
/* 20.11 Phone queue density: the reason line runs under the action so titles get the width */
@media (max-width:767px){
  .ps-q:not(.is-open):not(.is-done):not(.fyi){grid-template-columns:32px minmax(0,1fr) auto;grid-template-areas:"icon title action" "icon why why";column-gap:10px;align-items:center;padding:10px 8px 10px 12px}
  .ps-q:not(.is-open):not(.is-done):not(.fyi)>.ps-grow{display:contents}
  .ps-q:not(.is-open):not(.is-done):not(.fyi)>:first-child{grid-area:icon;align-self:center}
  .ps-q:not(.is-open):not(.is-done):not(.fyi) .ps-q-title{grid-area:title;letter-spacing:-.01em}
  .ps-q:not(.is-open):not(.is-done):not(.fyi) .ps-q-why{grid-area:why}
  .ps-q:not(.is-open):not(.is-done):not(.fyi) .ps-q-action{grid-area:action;margin:-6px 0}
  .ps-q:not(.is-open):not(.is-done):not(.fyi) .ps-q-action .ps-btn.sm{padding:0 10px;min-height:32px}
}
/* phone home header: date + buttons on one row, greeting full width */
.ps-home-head{padding:calc(env(safe-area-inset-top) + 8px) var(--gutter) var(--s3)}
.ps-home-head .ps-title{font-size:26px;line-height:32px;letter-spacing:-.02em;margin-top:2px}
@media (min-width:768px){ .ps-home-head{display:none} }
@media (max-width:767px){
  .ps-q:not(.is-open):not(.is-done):not(.fyi){grid-template-columns:28px minmax(0,1fr) auto}
  .ps-q:not(.is-open):not(.is-done):not(.fyi) .ps-q-icon,.ps-q:not(.is-open):not(.is-done):not(.fyi) .ps-design-thumb{width:28px;height:28px;font-size:14px}
}
.ps-app:has(.ps-tabbar.static) .ps-main{padding-bottom:8px} /* static mockups: no room reserved for a fixed tab bar */
@media (max-width:767px){
  .ps-q:not(.is-open):not(.is-done):not(.fyi){column-gap:9px;padding-left:12px;padding-right:6px}
  .ps-q:not(.is-open):not(.is-done):not(.fyi) .ps-q-title{letter-spacing:-.015em}
}
.ps-avatars .ps-avatar.open{background:var(--surface)}
.ps-filters.bleed{margin-left:calc(-1*var(--gutter));margin-right:calc(-1*var(--gutter));padding-left:var(--gutter);padding-right:var(--gutter)}
.ps-avatars .ps-avatar.sm+.ps-avatar.sm{margin-left:2px}
.ps-avatar.sm{letter-spacing:-.02em}
/* month grid weighted toward weekends, when the business happens (laptop) */
.ps-month.weekend{grid-template-columns:minmax(0,1.1fr) repeat(4,minmax(0,.62fr)) minmax(0,1.1fr) minmax(0,1.7fr)}
.ps-legend-chip i{border-left-width:4px}
.ps-legend-chip .ps-capbar i{width:auto;height:4px;border:0;border-radius:2px;background:var(--line)}
.ps-legend-chip .ps-capbar i.on{background:var(--chart-1)}
.ps-since.left span{left:auto;right:6px;padding:0 4px}
.ps-legend i.since{width:0;height:12px;border-radius:0;background:transparent;border-left:1.5px dashed var(--text-3)}
.ps-q.is-open.plain{background:var(--surface)}
.ps-q.is-open.plain .ps-q-action .ps-btn.secondary{margin-left:0}
.ps-inbox-group+.ps-q{border-top:0}
.ps-q+.ps-inbox-group{border-top:1px solid var(--line)}
.ps-inbox-group>.bi{font-size:12px;color:var(--text-3)}
.ps-integration>div{min-width:0}
.ps-sheet-body>*{flex-shrink:0} /* sections keep their height; the body scrolls */

/* ===== Staff portal fixes (design critique, staff group; additive) ===== */
/* .ps-live: dark-mode mint only on dark surfaces; light canvas uses success text (#067647, 5.4:1) */
.ps-live{color:#067647}
.ps-tonight .ps-live,.ps-runsheet.night .ps-live{color:#75e0a7}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .ps-live{color:#75e0a7} }
:root[data-theme="dark"] .ps-live{color:#75e0a7}
/* staff pages are phone-first: 44px minimum tap targets */
@media (max-width:767px){
  .ps-field-page .ps-btn,.ps-field-page .ps-btn.sm{min-height:44px}
  .ps-field-page .ps-btn.icon{width:44px}
  .ps-field-page .ps-filter{min-height:44px;padding:0 14px;font-size:14px}
}
.ps-staff-foot a{display:inline-flex;align-items:center;min-height:44px;padding:0 4px}
.ps-link.tap{display:inline-flex;align-items:center;gap:6px;min-height:44px}
/* An inline text link is 15-22px of words. `.hit` gives it a real target: 24x24
   with a mouse (WCAG 2.5.8) and 44px under a thumb (see the phone block below).
   The negative margins are the whole trick — the box grows, the line does not —
   so it can be put on a link inside a sentence without moving the sentence. */
.ps-link.hit{display:inline-flex;align-items:center;min-height:24px;margin:-2px 0;padding:0 2px}
/* horizontal chip scroller: right-edge fade says "more this way" */
.ps-filters.fade{-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 40px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 40px),transparent);padding-right:40px}
/* avatar stack: 2px surface ring, -6px overlap, the open "?" slot sits apart so no initials are clipped */
.ps-avatars .ps-avatar+.ps-avatar{margin-left:-6px}
.ps-avatars .ps-avatar{position:relative}
.ps-avatars .ps-avatar+.ps-avatar.open{margin-left:4px}
/* floor plan: booth pills and labels stay inside the room outline; dock label anchored on the wall gap */
.ps-fp .ps-fp-room .ps-fp-booth{right:12px;border-right:1px solid var(--line-strong)!important;border-radius:var(--r-sm)!important}
.ps-fp .ps-fp-room .ps-fp-booth.you{border-color:var(--accent)!important}
.ps-fp .ps-fp-dock{left:24%;transform:translateX(-50%);white-space:nowrap;bottom:12px;padding:3px 8px 3px 6px;border-radius:var(--r-sm)}
.ps-fp .ps-fp-gap{background:var(--a-bg)}
/* kit list: who brings each item */
.ps-kit li .ps-kit-who{margin-left:auto;display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--text-2);white-space:nowrap}
.ps-kit li.theirs{color:var(--text-2)}
.ps-kit-sub{font-size:12px;line-height:16px;font-weight:600;color:var(--text-3);margin-top:4px}
/* not-yet-open action (e.g. footage before the window) */
.ps-btn[aria-disabled="true"]{background:var(--sunken);border-color:var(--line);color:var(--text-2);cursor:default}
/* answered invitation: the answer as a chip, not live buttons */
.ps-answered{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);flex-wrap:wrap}
.ps-answer-chip{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 16px;border-radius:var(--r-pill);background:var(--s-bg);color:var(--s-fg);font-weight:600;font-size:15px}
/* neutral lock line (state already carried by the client tag) */
.ps-locked.n{background:var(--n-bg);color:var(--n-fg)}
/* design row with its one obvious action */
.ps-drow.has-action{cursor:default}
.ps-drow .ps-row-title a{color:inherit;text-decoration:none}
.ps-drow .ps-row-title a::after{content:"";position:absolute;inset:0}
.ps-drow.has-action{position:relative}
.ps-drow-action{grid-column:2 / -1;position:relative;z-index:1;display:flex;gap:var(--s2);align-items:center}
.ps-drow-extra{position:relative;z-index:1}
/* staff empty and error states */
.ps-empty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--s2);padding:var(--s8) var(--s5)}
.ps-empty .ps-empty-icon{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--n-bg);color:var(--text-2);font-size:24px;margin-bottom:var(--s2)}
.ps-empty h2{font-size:20px;line-height:26px;font-weight:600;margin:0}
.ps-empty p{margin:0;color:var(--text-2);font-size:15px;line-height:22px;max-width:300px}
.ps-state-label{font-size:12px;line-height:16px;font-weight:600;letter-spacing:.06em;color:var(--text-3);text-transform:uppercase;padding:0 var(--gutter);margin:var(--s6) 0 var(--s2)}
.ps-print .strip.blush{border-color:#d9a3a8} .ps-print .strip.blush i{background:#ecd3d5} .ps-print .strip.blush i:last-child{background:#d9a3a8}
.ps-print .strip.navy{background:#1f2a44;border-color:#c9a227} .ps-print .strip.navy i{background:#5b6680} .ps-print .strip.navy i:last-child{background:#c9a227}

/* ===== Team screens fixes (design critique, team group; additive) ===== */
/* phone tap targets: segments, filters and queue actions are at least 40px; text links get a 44px hit area */
@media (max-width:767px){
  .ps-seg a,.ps-seg button{min-height:40px}
  .ps-filter{min-height:40px}
  .ps-link.hit{display:inline-flex;align-items:center;min-height:44px;margin:-12px 0;padding:0 2px}
  .ps-section-head .ps-link{display:inline-flex;align-items:center;min-height:44px;margin:-10px 0}
  .ps-btn.icon.nav{width:44px;min-height:44px}
}
/* phone queue rows: one 40px icon column, 16px inset on both sides, 40px action,
   reason line may take 2 lines under the title (runs under the action) */
@media (max-width:767px){
  .ps-q:not(.is-open):not(.is-done):not(.fyi){grid-template-columns:40px minmax(0,1fr) auto;column-gap:8px;padding:12px 16px}
  .ps-q:not(.is-open):not(.is-done):not(.fyi) .ps-q-icon,.ps-q:not(.is-open):not(.is-done):not(.fyi) .ps-design-thumb{width:32px;height:32px;font-size:15px}
  .ps-q:not(.is-open):not(.is-done):not(.fyi)>:first-child{align-self:start;margin-top:2px}
  .ps-q:not(.is-open):not(.is-done):not(.fyi) .ps-q-title{letter-spacing:-.01em;align-self:center}
  .ps-q:not(.is-open):not(.is-done):not(.fyi) .ps-q-why{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-top:1px}
  .ps-q:not(.is-open):not(.is-done):not(.fyi) .ps-q-action{margin:-8px 0 -4px}
  .ps-q:not(.is-open):not(.is-done):not(.fyi) .ps-q-action .ps-btn.sm{min-height:40px;padding:0 14px;font-size:14px}
  .ps-q.is-open,.ps-q.is-done,.ps-q.fyi{grid-template-columns:40px minmax(0,1fr);column-gap:8px;padding:12px 16px}
  .ps-q.fyi,.ps-q.is-done{grid-template-columns:40px minmax(0,1fr) auto}
  .ps-q.is-open .ps-q-action .ps-btn{min-height:40px}
}
/* the "Also" line: each name opens its own job, and only the last link opens the list */
.ps-also{min-height:52px;color:var(--text-2)}
.ps-also .ps-also-one{color:var(--text);font-weight:600;text-decoration:none;padding:6px 2px}
.ps-also .ps-also-one:hover{text-decoration:underline}
.ps-also .ps-also-go{margin-left:auto;display:inline-flex;align-items:center;gap:4px;color:var(--accent-text);font-weight:600;white-space:nowrap;text-decoration:none;padding:6px 2px}
.ps-also .ps-also-go:hover{text-decoration:underline}
/* money composition uses chart tokens; only overdue carries the danger tone */
.ps-progress>i.c1{background:var(--chart-1)} .ps-progress>i.c2{background:var(--chart-2)}
.ps-legend i.c1{background:var(--chart-1)} .ps-legend i.c2{background:var(--chart-2)} .ps-legend i.d{background:var(--d-dot)}
/* aging: current neutral, 1-30 attention, 31+ danger */
.ps-aging .c0,.ps-aging-labels .c0{background:var(--aging-0)}
.ps-aging .c1,.ps-aging-labels .c1{background:var(--aging-1)}
.ps-aging .c2,.ps-aging-labels .c2{background:var(--aging-2)}
.ps-aging .c3,.ps-aging-labels .c3{background:var(--aging-3)}
/* bar totals: stack total on top, in-app share on a quieter second line */
.ps-bar-val small{display:block;font-size:12px;line-height:14px;font-weight:500;color:var(--text-3)}
.ps-bar-val.two{margin-bottom:2px}
/* utilisation shown as its own labelled row under the bars (no second axis) */
.ps-util-row{display:grid;grid-template-columns:40px minmax(0,1fr);column-gap:var(--s2);margin-top:10px;align-items:center}
.ps-util-row>span{font-size:12px;line-height:16px;color:var(--text-3);font-weight:600;text-align:right}
.ps-util-cells{display:flex;gap:6px}
.ps-util-cells>div{flex:1;min-width:0;text-align:center;font-size:12px;line-height:16px;font-weight:600;color:var(--text-2);font-variant-numeric:tabular-nums}
.ps-util-cells i{display:block;height:4px;border-radius:2px;background:var(--n-bg);margin:4px 8px 0;overflow:hidden;position:relative}
.ps-util-cells i b{position:absolute;left:0;top:0;bottom:0;background:var(--text-3)}
/* ledger: payments read as "Paid $1,074" in ink with a success dot; minus only for discounts and refunds */
.ps-line .amt.paid{color:var(--text);display:inline-flex;align-items:center;gap:6px}
.ps-line .amt.paid::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--s-dot)}
.ps-line .amt.paid em{font-style:normal;color:var(--text-3);font-weight:500}
/* horizontally scrolling strips (tracker, tabs, segments) fade at the right edge and snap */
.ps-fade-r{-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 36px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 36px),transparent);scroll-snap-type:x proximity}
.ps-fade-r>*{scroll-snap-align:start}
.ps-actions-row.two{grid-template-columns:1fr 1fr}
/* pipeline board: sub-groups inside a lane (Viewed vs Signed) and the board scope line */
.ps-lane-sub{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:6px 6px 0;font-size:12px;line-height:16px;font-weight:600;color:var(--text-3)}
.ps-lane-sub+.ps-bcard{margin-top:-2px}
.ps-scope{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 12px;border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface);font-size:14px;font-weight:500;color:var(--text)}
.ps-scope .bi{font-size:12px;color:var(--text-3)}
/* calendar: gentler weekend weighting, conflict marker on holds, tone rule note */
.ps-month.weekend{grid-template-columns:minmax(0,1.6fr) repeat(4,minmax(0,1fr)) minmax(0,1.6fr) minmax(0,1.6fr)}
.ps-conflict{display:inline-flex;align-items:center;gap:3px;color:var(--d-fg);font-weight:600}
.ps-legend-chip i.p{border-left-color:var(--p-dot)}
.ps-tone-note{font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}
/* rows that are labels for their switch (whole row toggles) */
label.ps-effect-row{cursor:pointer;min-height:60px}
.ps-effect-row .ps-link.hit{margin:-12px 0}
/* grouped More menu (phone) */
.ps-menu-group{margin:var(--s5) var(--gutter) 0}
.ps-menu-group>h2{font-size:12px;line-height:16px;font-weight:600;color:var(--text-3);letter-spacing:.02em;margin:0 0 6px 4px}
.ps-menu{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.ps-menu-row{display:flex;align-items:center;gap:var(--s3);min-height:56px;padding:0 var(--s4);font-size:15px;line-height:20px;font-weight:500;color:var(--text)}
.ps-menu-row+.ps-menu-row{border-top:1px solid var(--line)}
.ps-menu-row>.bi:first-child{font-size:18px;width:24px;text-align:center;color:var(--text-2)}
.ps-menu-row .ps-grow small{display:block;font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}
.ps-menu-row>.bi-chevron-right{color:var(--text-3);font-size:14px}
.ps-menu-row.danger,.ps-menu-row.danger>.bi:first-child{color:var(--d-fg)}
/* states board labels (mockups) */
.ps-state-card{background:var(--canvas);border:1px dashed var(--line-strong);border-radius:var(--r-lg);padding:var(--s3)}
.ps-toast.static{position:relative;inset:auto;margin:0}
.ps-fp .ps-fp-room .ps-fp-dance{left:23%;right:54%;text-align:center;line-height:16px}
.ps-empty h2{color:var(--text)}
.ps-empty .ps-empty-icon .bi{font-size:24px;color:inherit}
.ps-empty .ps-btn .bi{font-size:16px;color:inherit}
@media (max-width:767px){
  .ps-q:not(.is-open):not(.is-done):not(.fyi) .ps-q-action{margin:-10px 0}
  .ps-q.is-open .ps-q-action{gap:6px}
  .ps-q.is-open .ps-q-action .ps-btn{padding:0 12px}
  .ps-q.is-open .ps-q-action .ps-btn.ghost{margin-left:0;padding:0 10px}
}
@media (max-width:767px){
  /* action spans both lines of the row, so it never overlaps the reason line */
  .ps-q:not(.is-open):not(.is-done):not(.fyi){grid-template-areas:"icon title action" "icon why action";row-gap:2px}
  .ps-q:not(.is-open):not(.is-done):not(.fyi) .ps-q-action{margin:0;align-self:center}
  .ps-q.is-open .ps-q-action .ps-btn{padding:0 10px}
  .ps-q.is-open .ps-q-action .ps-btn.ghost{padding:0 8px}
}
.ps-also{gap:8px}
.ps-also>.bi:first-child{width:40px;flex:none;font-size:16px}
/* month grid: Fri, Sat, Sun all get room (Sat most), weekdays narrower but not starved */
.ps-month.weekend{grid-template-columns:minmax(0,1.5fr) repeat(4,minmax(0,.8fr)) minmax(0,1.5fr) minmax(0,2.1fr)}

/* ==========================================================================
   21. Sep 17 additions: gold scheme details, crew pay and profit, supplies,
   equipment. Token-based only; see design-spec.md 5.3.
   ========================================================================== */

/* 21.1 Gold scheme details */
.ps input[type=checkbox],.ps input[type=radio]{accent-color:var(--accent)}
.ps-client-tag .bi{font-size:13px;color:var(--client-dot)}
.ps-client-tag.lg{min-height:28px;padding:3px 10px;font-size:13px}
.ps-since-label{display:inline-flex;align-items:center;gap:6px;min-height:28px;padding:0 10px;border-radius:var(--r-pill);background:var(--n-bg);color:var(--n-fg);font-size:12px;line-height:16px;font-weight:600;white-space:nowrap}
.ps-since-label .bi{font-size:13px}
.ps-bars-gap.before{font-weight:600}

/* 21.2 Crew pay: payout lines, person groups, bulk bar */
.ps-amt{font-variant-numeric:tabular-nums;font-weight:600;white-space:nowrap;font-size:max(13px,1em)}
.ps-pay-person{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.ps-pay-person+.ps-pay-person{margin-top:var(--s3)}
.ps-pay-person.is-selected{border-color:var(--accent)}
.ps-pay-head{display:grid;grid-template-columns:24px 40px minmax(0,1fr) auto;gap:var(--s3);align-items:center;padding:var(--s3) var(--s4);background:var(--sunken);border-bottom:1px solid var(--line)}
.ps-pay-head .ps-row-sub{font-size:13px}
.ps-pay-total{text-align:right}
.ps-pay-total b{display:block;font-size:18px;line-height:24px;font-weight:600;font-variant-numeric:tabular-nums}
.ps-pay-total small{display:block;font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}
.ps-pay-line{display:grid;grid-template-columns:24px minmax(0,1fr) auto auto;gap:var(--s3);align-items:center;padding:10px var(--s4);font-size:14px;line-height:20px}
.ps-pay-line+.ps-pay-line{border-top:1px solid var(--line)}
.ps-pay-line .ps-row-sub{font-size:13px;line-height:18px}
.ps-pay-line .ps-amt{text-align:right;min-width:64px}
.ps-pay-line.is-paid{color:var(--text-2)}
.ps-pay-foot{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);padding:10px var(--s4);border-top:1px solid var(--line)}
@media (max-width:767px){
  .ps-pay-head{grid-template-columns:24px 36px minmax(0,1fr) auto;padding:var(--s3)}
  .ps-pay-line{grid-template-columns:24px minmax(0,1fr) auto;row-gap:4px;padding:10px var(--s3)}
  .ps-pay-line>.ps-chip,.ps-pay-line>.ps-pay-state{grid-column:2 / -1;justify-self:start}
  .ps-pay-foot{padding:10px var(--s3)}
}
.ps-pay-state{display:inline-flex;align-items:center;gap:6px;font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}
/* sticky bulk action bar (phone: above the tab bar; laptop: bottom of the content column) */
.ps-bulkbar{position:sticky;bottom:0;z-index:25;display:flex;align-items:center;gap:var(--s3);padding:var(--s3) var(--s4);background:var(--night);color:var(--night-text);border-radius:var(--r-lg);box-shadow:var(--shadow-pop)}
.ps-bulkbar .ps-grow b{display:block;font-size:15px;line-height:20px;font-variant-numeric:tabular-nums}
.ps-bulkbar .ps-grow small{display:block;font-size:12px;line-height:16px;color:var(--night-text-2)}
.ps-bulkbar .ps-btn.primary{background:var(--night-accent);border-color:var(--night-accent);color:var(--night-on-accent)}
.ps-bulkbar .ps-btn.ghost{color:var(--night-text-2)}
.ps-bulkbar.static{position:relative}
/* display:flex above beats the hidden attribute, and the bar is only for
   what the person has chosen. */
.ps-bulkbar[hidden]{display:none}
/* day card pay column */
.ps-dtable col.c-pay{width:16%}
.ps-pay-cell{display:flex;flex-direction:column;gap:2px;align-items:flex-start}
.ps-pay-cell .ps-amt{font-size:14px}
.ps-pay-cell small{font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}
.ps-pay-cell small.a{color:var(--a-fg);font-weight:600}
.ps-pay-cell small.s{color:var(--s-fg);font-weight:600}
.ps-pay-cell .est{color:var(--text-3);font-weight:500}

/* 21.3 Profit */
.ps-profit-strip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;background:var(--surface)}
.ps-profit-strip>div{padding:10px var(--s3);min-width:0}
.ps-profit-strip>div+div{border-left:1px solid var(--line)}
.ps-profit-strip small{display:block;font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}
.ps-profit-strip b{display:block;font-size:17px;line-height:24px;font-weight:600;font-variant-numeric:tabular-nums}
.ps-profit-strip .neg b{color:var(--d-fg)}
.ps-bar i.pay{background:var(--chart-pay);border-radius:0}
.ps-bar i.pay-est{background:var(--surface);border:1.5px solid var(--chart-pay-est-line);border-bottom:0;border-radius:0;background-image:repeating-linear-gradient(135deg,transparent 0 4px,var(--chart-pay-est) 4px 6px)}
.ps-bar i.profit{background:var(--chart-1)}
.ps-legend i.pay{background:var(--chart-pay)}
.ps-legend i.pay-est{background:var(--surface);border:1.5px solid var(--chart-pay-est-line);background-image:repeating-linear-gradient(135deg,transparent 0 3px,var(--chart-pay-est) 3px 5px)}
.ps-legend i.profit{background:var(--chart-1)}
.ps-defs{display:grid;grid-template-columns:minmax(120px,max-content) minmax(0,1fr);gap:6px var(--s4);margin:0;font-size:13px;line-height:18px}
.ps-defs dt{font-weight:600;color:var(--text)}
.ps-defs dd{margin:0;color:var(--text-2)}
@media (max-width:767px){ .ps-defs{grid-template-columns:1fr;gap:2px} .ps-defs dd{margin-bottom:var(--s2)} }

/* 21.4 Supplies: stock meter with restock threshold, level presets, stepper */
.ps-stock{position:relative;height:8px;border-radius:var(--r-pill);background:var(--n-bg);overflow:visible}
.ps-stock>i{display:block;height:100%;border-radius:var(--r-pill);background:var(--text-3)}
.ps-stock.low>i{background:var(--a-dot)} .ps-stock.out>i{background:var(--d-dot)} .ps-stock.ok>i{background:var(--s-dot)}
.ps-stock>b{position:absolute;top:-4px;bottom:-4px;width:2px;border-radius:1px;background:var(--text)} /* restock threshold tick; label it in text */
.ps-stock-row{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) auto;gap:var(--s4);align-items:center;padding:var(--s3) var(--s4)}
.ps-stock-row+.ps-stock-row{border-top:1px solid var(--line)}
.ps-stock-row .ps-stock{margin:6px 0 4px}
@media (max-width:767px){ .ps-stock-row{grid-template-columns:minmax(0,1fr) auto;row-gap:var(--s2)} .ps-stock-row>.ps-stock-meter{grid-column:1 / -1;grid-row:2} }
.ps-levels{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--s2)}
.ps-levels>*{min-height:72px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;border:1.5px solid var(--line-strong);border-radius:var(--r-lg);background:var(--surface);color:var(--text);font:600 15px/1.1 var(--font);cursor:pointer;padding:6px 2px}
.ps-levels>* small{font-size:12px;line-height:14px;font-weight:500;color:var(--text-3)}
.ps-levels>.is-selected{border-color:var(--accent);background:var(--accent-soft);color:var(--text);box-shadow:inset 0 0 0 1px var(--accent)}
.ps-levels>.is-selected small{color:var(--text-2)}
.ps-level-icon{width:14px;height:22px;border:2px solid currentColor;border-radius:3px;position:relative;display:block;color:var(--text-2)}
.ps-level-icon::after{content:"";position:absolute;left:1px;right:1px;bottom:1px;height:var(--lvl,0%);background:currentColor;border-radius:1px}
.ps-stepper{display:inline-grid;grid-template-columns:44px minmax(72px,auto) 44px;align-items:center;border:1px solid var(--line-strong);border-radius:var(--r-md);overflow:hidden;background:var(--surface)}
.ps-stepper button{height:44px;border:0;background:var(--sunken);color:var(--text);font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center}
.ps-stepper output,.ps-stepper input{height:44px;border:0;border-left:1px solid var(--line);border-right:1px solid var(--line);text-align:center;font:600 18px/44px var(--font);font-variant-numeric:tabular-nums;color:var(--text);background:var(--surface);width:100%;min-width:0}
.ps-loc-row{display:grid;grid-template-columns:32px minmax(0,1fr) auto;gap:var(--s3);align-items:center;padding:10px var(--s4);font-size:14px;line-height:20px}
.ps-loc-row+.ps-loc-row{border-top:1px solid var(--line)}
.ps-loc-row .ps-amt{text-align:right}

/* 21.5 Equipment: severity choices, issues, units, day-card warnings */
.ps-sev-list{display:flex;flex-direction:column;gap:var(--s2)}
.ps-sev{display:grid;grid-template-columns:36px minmax(0,1fr) 22px;gap:var(--s3);align-items:center;min-height:64px;padding:10px var(--s3);border:1.5px solid var(--line-strong);border-radius:var(--r-lg);background:var(--surface);cursor:pointer}
.ps-sev b{display:block;font-size:15px;line-height:20px;font-weight:600}
.ps-sev small{display:block;font-size:13px;line-height:18px;color:var(--text-2)}
.ps-sev .ps-q-icon{width:36px;height:36px;font-size:17px}
.ps-sev .ps-radio{width:22px;height:22px;border-radius:50%;border:2px solid var(--line-strong);position:relative}
.ps-sev.is-selected{border-color:var(--accent);background:var(--accent-soft);box-shadow:inset 0 0 0 1px var(--accent)}
.ps-sev.is-selected .ps-radio{border-color:var(--accent)}
.ps-sev.is-selected .ps-radio::after{content:"";position:absolute;inset:3px;border-radius:50%;background:var(--accent)}
.ps-issue{display:grid;grid-template-columns:36px minmax(0,1fr) auto;gap:var(--s3);align-items:start;padding:var(--s3) var(--s4)}
.ps-issue+.ps-issue{border-top:1px solid var(--line)}
.ps-issue .ps-q-icon{width:36px;height:36px;font-size:17px}
.ps-issue-title{font-size:15px;line-height:20px;font-weight:600}
.ps-issue-meta{font-size:13px;line-height:18px;color:var(--text-2)}
.ps-issue .ps-chips{margin-top:6px}
.ps-issue.is-selected{background:var(--hover);box-shadow:inset 3px 0 0 var(--accent)}
.ps-issue-need{display:flex;align-items:flex-start;gap:6px;margin-top:6px;font-size:13px;line-height:18px;font-weight:500;color:var(--a-fg)}
.ps-issue-need.d{color:var(--d-fg)} .ps-issue-need.n{color:var(--text-2)}
.ps-issue-need .bi{margin-top:2px}
.ps-photo-add{aspect-ratio:1;border:1.5px dashed var(--line-strong);border-radius:var(--r-sm);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;color:var(--text-2);font-size:12px;font-weight:600;background:var(--sunken);min-height:44px}
.ps-photo-add .bi{font-size:20px}
.ps-photo-tile{position:relative;aspect-ratio:1;border-radius:var(--r-sm);overflow:hidden;background:var(--n-bg)}
.ps-photo-tile img{width:100%;height:100%;object-fit:cover;display:block}
.ps-photo-tile .rm{position:absolute;top:0;right:0;width:44px;height:44px;display:flex;align-items:flex-start;justify-content:flex-end;padding:4px;color:#fff}
.ps-photo-tile .rm .bi{width:22px;height:22px;border-radius:50%;background:rgba(12,10,9,.7);display:flex;align-items:center;justify-content:center;font-size:12px}
/* status steps: Open -> In repair -> Fixed */
.ps-steps{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);list-style:none;margin:0;padding:0;gap:4px}
.ps-steps li{display:flex;flex-direction:column;gap:6px;font-size:13px;line-height:18px;font-weight:500;color:var(--text-3)}
.ps-steps li::before{content:"";height:4px;border-radius:2px;background:var(--line)}
.ps-steps li.done::before{background:var(--text-3)}
.ps-steps li.current{color:var(--p-fg);font-weight:600}
.ps-steps li.current::before{background:var(--p-dot)}
.ps-steps li.done::before{background:var(--text-2)}
.ps-steps li.fixed{color:var(--s-fg);font-weight:600} .ps-steps li.fixed::before{background:var(--s-dot)}
/* unit label ("Spinner #1") and kit cards */
.ps-unit{display:inline-flex;align-items:center;gap:5px;font-size:12px;line-height:16px;font-weight:600;color:var(--text-2);white-space:nowrap}
.ps-unit .bi{font-size:12px;color:var(--text-3)}
.ps-unit.a,.ps-unit.a .bi{color:var(--a-fg)} .ps-unit.d,.ps-unit.d .bi{color:var(--d-fg)}
.ps-kit-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.ps-kit-head{display:flex;gap:var(--s3);align-items:center;justify-content:space-between;padding:var(--s3) var(--s4);border-bottom:1px solid var(--line)}
.ps-kit-head>*{min-width:0} .ps-kit-head>:last-child{flex:none}
.ps-kit-head img{flex:none;width:48px;height:48px;border-radius:var(--r-sm);object-fit:cover}
.ps-unit-row{display:grid;grid-template-columns:28px minmax(0,1fr) auto;gap:var(--s3);align-items:center;padding:8px var(--s4);font-size:14px;line-height:20px}
.ps-unit-row+.ps-unit-row{border-top:1px solid var(--line)}
.ps-unit-row>.bi{font-size:16px;color:var(--text-3);text-align:center}
/* warning strip inside a day card (under the day head) */
.ps-day-warn{display:flex;gap:var(--s3);align-items:flex-start;padding:10px var(--s4);font-size:14px;line-height:20px;border-bottom:1px solid var(--line);background:var(--n-bg);color:var(--n-fg)}
.ps-day-warn>.bi{font-size:16px;margin-top:2px;flex:none}
.ps-day-warn.a{background:var(--a-bg);color:var(--a-fg)} .ps-day-warn.d{background:var(--d-bg);color:var(--d-fg)} .ps-day-warn.p{background:var(--p-bg);color:var(--p-fg)} .ps-day-warn.n{background:var(--n-bg);color:var(--n-fg)}
.ps-day-warn b{font-weight:600}
.ps-day-warn .ps-grow span{color:var(--text-2)}
.ps-day-warn .ps-link{white-space:nowrap}
/* person profile */
.ps-person-head{display:grid;grid-template-columns:64px minmax(0,1fr) auto;gap:var(--s4);align-items:center}
.ps-person-head .ps-avatar{width:64px;height:64px;font-size:22px}
.ps-anchor-nav{display:flex;flex-direction:column;gap:2px;position:sticky;top:72px}
.ps-anchor-nav a{display:flex;align-items:center;justify-content:space-between;gap:var(--s2);min-height:36px;padding:0 var(--s3);border-radius:var(--r-sm);font-size:14px;font-weight:500;color:var(--text-2)}
.ps-anchor-nav a.is-active{background:var(--accent-soft);color:var(--accent-text);font-weight:600}
.ps-rate{display:flex;align-items:baseline;gap:6px}
.ps-rate b{font-size:28px;line-height:34px;font-weight:600;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.ps-rate span{font-size:14px;color:var(--text-2);font-weight:500}
/* run sheet: after-event prompt card (works on light and night run sheets) */
.ps-wrapup{border-radius:var(--r-lg);border:1px solid color-mix(in srgb,var(--accent) 45%,var(--line));background:var(--accent-soft);padding:var(--s4)}
.ps-wrapup .ps-eyebrow{color:var(--accent-text)}
.ps-runsheet.night .ps-wrapup{background:#2a220f;border-color:#5c4a14}
.ps-runsheet.night .ps-wrapup .ps-eyebrow{color:var(--night-accent-text)}
.ps-todo{list-style:none;margin:var(--s3) 0 0;padding:0;display:flex;flex-direction:column;gap:var(--s2)}
.ps-todo li{display:grid;grid-template-columns:28px minmax(0,1fr) auto;gap:var(--s3);align-items:center;min-height:52px;padding:6px var(--s3);border-radius:var(--r-md);background:var(--surface);border:1px solid var(--line)}
.ps-todo li.done{color:var(--text-2)}
.ps-todo .ps-check-mark{width:24px;height:24px;font-size:12px}
.ps-todo li.done .ps-check-mark{background:var(--s-solid);border-color:var(--s-solid);color:#fff}
/* 21.6 Fit fixes: day table with a Pay column, unit labels wrap, stock meta stays on one line */
.ps-dtable.has-pay col.c-booth{width:27%} .ps-dtable.has-pay col.c-person{width:33%} .ps-dtable.has-pay col.c-design{width:21%} .ps-dtable.has-pay col.c-pay{width:19%}
.ps-dtable.has-pay td{padding-left:var(--s3);padding-right:var(--s3)}
.ps-dtable.has-pay th{padding-left:var(--s3);padding-right:var(--s3)}
.ps-dtable.has-pay .ps-booth img{width:36px;height:36px}
.ps-dtable .ps-chip{white-space:normal}
.ps-unit{white-space:normal}
.ps-booth>div{min-width:0}
.ps-stock-row{grid-template-columns:minmax(0,1.2fr) minmax(190px,1fr) auto}
.ps-stock-meter .ps-meta,.ps-stock-meter .ps-amt{white-space:nowrap}
@media (max-width:767px){ .ps-stock-row{grid-template-columns:minmax(0,1fr) auto} }
.ps-stock-meter{display:flex;flex-direction:column;min-width:0}
.ps-stock-meter>.ps-stock{margin:6px 0}
@media (max-width:767px){
  .ps-pay-line{grid-template-columns:24px minmax(0,1fr) auto;grid-template-areas:"sel main amt" "sel state state"}
  .ps-pay-line>:first-child{grid-area:sel;align-self:start;margin-top:2px}
  .ps-pay-line>.ps-grow{grid-area:main}
  .ps-pay-line>.ps-amt{grid-area:amt;align-self:start}
  .ps-pay-line>.ps-chip,.ps-pay-line>.ps-pay-state{grid-area:state;grid-column:auto}
}
.ps-bulkbar{border:1px solid var(--line-strong)}

/* 21.7 Staff (Sep 17, staff group; additive): after-event report, issue form, your pay, unit block */
/* job facts: a sub-line under the value ("$30/hr × 6 hr") */
.ps-facts b small{display:block;font-size:12px;line-height:16px;font-weight:500;color:var(--text-3);margin-top:1px}
/* big two-way choice where selection is gold, not a status (All good / Something's wrong) */
.ps-answer.pick button,.ps-answer.pick a{color:var(--text);border-color:var(--line-strong);gap:8px}
.ps-answer.pick .bi{font-size:18px}
.ps-answer.pick .is-selected{background:var(--accent-soft);border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent);color:var(--text)}
/* a question block inside a card */
.ps-q-block{display:flex;flex-direction:column;gap:var(--s2)}
.ps-q-block+.ps-q-block{border-top:1px solid var(--line);padding-top:var(--s4)}
.ps-q-block .ps-hint{font-size:13px;line-height:18px;color:var(--text-3)}
.ps-q-label{font-size:15px;line-height:22px;font-weight:600;color:var(--text)}
.ps-q-note{display:flex;align-items:center;gap:6px;font-size:13px;line-height:18px;font-weight:500;color:var(--text-2)}
.ps-q-note .bi{color:var(--accent-text)}
.ps-step-row{display:flex;align-items:center;justify-content:space-between;gap:var(--s3)}
.ps-step-row .ps-grow b{display:block;font-size:15px;line-height:22px;font-weight:600}
.ps-step-row .ps-grow small{display:block;font-size:13px;line-height:18px;color:var(--text-3);font-weight:500}
/* unselected preset while an exact count is in use: stays readable */
.ps-levels.is-muted>*:not(.is-selected){border-style:dashed}
/* selectable chips (kit, part): 44px, gold when selected */
.ps-pick-chips{display:flex;flex-wrap:wrap;gap:var(--s2)}
.ps-pick-chips>*{min-height:44px;padding:0 14px;display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line-strong);border-radius:var(--r-pill);background:var(--surface);color:var(--text);font:500 15px/1.2 var(--font);cursor:pointer}
.ps-pick-chips>* small{font-size:13px;color:var(--text-3);font-weight:500}
.ps-pick-chips>.is-selected{border-color:var(--accent);background:var(--accent-soft);box-shadow:inset 0 0 0 1px var(--accent);font-weight:600}
.ps-pick-chips>.is-selected .bi-check2{color:var(--accent-text)}
/* inline issue form nested under "Something's wrong" */
.ps-nested{border-left:3px solid var(--accent-line);padding-left:var(--s4);display:flex;flex-direction:column;gap:var(--s4)}
/* CSS-drawn neutral photo thumbnails (mockups never use real people) */
.ps-photo-art{position:absolute;inset:0;background:linear-gradient(160deg,#d6d3d1,#a8a29e)}
.ps-photo-art.b{background:linear-gradient(200deg,#e7e5e4,#78716c)}
.ps-photo-art::before{content:"";position:absolute;left:18%;right:18%;bottom:22%;height:26%;border-radius:50%;background:rgba(28,25,23,.35)}
.ps-photo-art.b::before{left:30%;right:30%;bottom:30%;height:34%;border-radius:8px;background:rgba(28,25,23,.4)}
.ps-photo-art.c::before{left:12%;right:12%;bottom:34%;height:18%;border-radius:4px;background:rgba(250,250,249,.75);transform:rotate(-6deg)}
/* effect line with a tone (the attendant sees what sending does) */
.ps-effect.a{color:var(--a-fg);font-weight:500;font-size:14px;line-height:20px;background:var(--a-bg);border-radius:var(--r-md);padding:10px 12px;margin-top:0}
.ps-effect.a .bi{font-size:15px;margin-top:2px}
/* staff sticky action bar: bright gold on night in both themes */
.ps-actionbar{position:sticky;bottom:0;z-index:20;margin:0 calc(-1 * var(--gutter));padding:12px var(--gutter) calc(12px + env(safe-area-inset-bottom));background:var(--night);color:var(--night-text);border-top:1px solid #3a3634}
.ps-actionbar .ps-btn.primary{background:var(--night-accent);border-color:var(--night-accent);color:var(--night-on-accent);min-height:52px;font-size:16px}
.ps-actionbar small{display:block;text-align:center;margin-top:8px;font-size:12px;line-height:16px;color:var(--night-text-2)}
.ps-actionbar.static{position:relative}
/* labelled mockup panel ("After sending") */
.ps-panel-label{display:flex;align-items:center;gap:8px;font-size:12px;line-height:16px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-3)}
.ps-panel-label::after{content:"";flex:1;height:1px;background:var(--line)}
/* summary list inside a sent-state card */
.ps-kv{display:grid;grid-template-columns:auto minmax(0,1fr);gap:6px var(--s4);margin:0;font-size:14px;line-height:20px}
.ps-kv dt{color:var(--text-3);font-weight:500}
.ps-kv dd{margin:0;font-weight:600;color:var(--text)}
/* run sheet: your unit and your pay */
.ps-unit-block{display:grid;grid-template-columns:40px minmax(0,1fr);gap:var(--s3);align-items:start}
.ps-pay-mine{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px var(--s3);align-items:center;padding:10px var(--s4);font-size:14px;line-height:20px}
.ps-pay-mine+.ps-pay-mine{border-top:1px solid var(--line)}
.ps-pay-mine .ps-row-sub{font-size:13px;line-height:18px}
.ps-pay-mine .ps-amt{font-size:15px;text-align:right}
.ps-pay-mine .ps-chip{justify-self:end}
/* gear rows on the manager board */
.ps-gear-row{display:grid;grid-template-columns:36px minmax(0,1fr);gap:var(--s3);align-items:start;padding:var(--s3) var(--s4)}
.ps-gear-row+.ps-gear-row{border-top:1px solid var(--line)}
.ps-gear-row .ps-q-icon{width:36px;height:36px;font-size:17px}
.ps-gear-row .ps-gear-actions{display:flex;gap:var(--s2);margin-top:var(--s2);flex-wrap:wrap}
.ps-step-row .ps-stepper{flex:none;grid-template-columns:44px 76px 44px}
.ps-answer.pick button,.ps-answer.pick a{font-size:15px;padding:0 8px;gap:6px}
.ps-actionbar{margin-bottom:calc(-1 * var(--s6))}
.ps-photo-add span.bi,.ps-photo-tile .rm span.bi{aspect-ratio:auto;background:none}
.ps-photo-tile .rm span.bi{background:rgba(12,10,9,.7)}
.ps-answer.pick button,.ps-answer.pick a{flex-direction:column;min-height:72px;gap:4px;line-height:20px}
.ps-answer.pick .bi{font-size:20px}
.ps-step-row .ps-stepper{grid-template-columns:44px 64px 44px}
.ps-stepper.is-set{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}
/* light action bar for light staff forms: surface bar, regular gold primary, effect line inside */
.ps-actionbar.light{background:var(--surface);color:var(--text);border-top:1px solid var(--line);box-shadow:0 -6px 16px rgba(28,25,23,.06)}
.ps-actionbar.light .ps-btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.ps-actionbar .ps-effect.a{margin:0 0 10px}

/* ==========================================================================
   22. Sep 17 team screens (Supplies, Equipment, Pay the team, person profile,
   Booking day card with pay). Additive, token-based. Team group.
   ========================================================================== */
.ps-stock-row.is-selected{background:var(--hover);box-shadow:inset 3px 0 0 var(--accent)}
.ps-stock-row .ps-meta{font-size:12px}
.ps-stock-big{display:flex;align-items:baseline;gap:var(--s3);flex-wrap:wrap}
.ps-stock-big b{font-size:28px;line-height:34px;font-weight:600;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.ps-sub-h{font-size:12px;line-height:16px;font-weight:600;color:var(--text-3);padding:var(--s3) var(--s4) 4px;display:flex;justify-content:space-between;align-items:center;gap:var(--s2)}
.ps-loc-row .ps-file-icon{width:32px;height:32px}
.ps-loc-row.stale{background:color-mix(in srgb,var(--a-bg) 55%,var(--surface))}
.ps-loc-row .ps-row-sub{font-size:13px;line-height:18px}
.ps-loc-row .ps-loc-end{display:flex;flex-direction:column;align-items:flex-end;gap:4px}
.ps-mini-bars{display:flex;align-items:flex-end;gap:var(--s4);height:88px;border-bottom:1px solid var(--chart-grid);padding:0 var(--s2)}
.ps-mini-bars>div{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%;min-width:0}
.ps-mini-bars i{display:block;width:100%;max-width:44px;background:var(--chart-1);border-radius:3px 3px 0 0}
.ps-mini-bars i.m2{background:var(--chart-2)}
.ps-mini-bars span{font-size:12px;line-height:16px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;margin-bottom:3px;white-space:nowrap}
.ps-mini-bars span.muted{color:var(--text-3);font-weight:500}
.ps-mini-labels{display:flex;gap:var(--s4);padding:4px var(--s2) 0}
.ps-mini-labels span{flex:1;text-align:center;font-size:12px;line-height:16px;color:var(--text-3)}
.ps-report-row{display:grid;grid-template-columns:28px minmax(0,1fr) auto;gap:var(--s3);align-items:center;padding:10px var(--s4);font-size:14px;line-height:20px}
.ps-report-row+.ps-report-row{border-top:1px solid var(--line)}
.ps-report-row .ps-row-sub{font-size:13px;line-height:18px}
.ps-report-row.missing{background:color-mix(in srgb,var(--a-bg) 55%,var(--surface))}
.ps-detail-actions{display:flex;flex-wrap:wrap;gap:var(--s2)}
/* equipment */
.ps-photo-ph{position:relative;aspect-ratio:1;border-radius:var(--r-sm);background:var(--n-bg);border:1px solid var(--line);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:var(--text-3);font-size:12px;font-weight:500;overflow:hidden}
.ps-photo-ph .bi{font-size:22px;color:var(--text-2)}
.ps-photo-ph::before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(135deg,transparent 0 12px,color-mix(in srgb,var(--line) 60%,transparent) 12px 13px)}
.ps-photo-ph>*{position:relative}
.ps-thumbs.three{grid-template-columns:repeat(3,1fr)}
.ps-affect{display:grid;grid-template-columns:44px minmax(0,1fr) auto;gap:var(--s3);align-items:center;padding:10px var(--s4)}
.ps-affect+.ps-affect{border-top:1px solid var(--line)}
.ps-affect .ps-row-title{font-size:14px;line-height:20px}
.ps-affect .ps-row-sub{font-size:13px;line-height:18px}
.ps-issue-need.p{color:var(--p-fg)}
.ps-inv-row{display:grid;grid-template-columns:40px minmax(0,1fr) auto;gap:var(--s3);align-items:center;padding:10px var(--s4)}
.ps-inv-row+.ps-inv-row{border-top:1px solid var(--line)}
.ps-inv-row img{width:40px;height:40px;border-radius:var(--r-sm);object-fit:cover}
.ps-inv-row .ps-row-title{font-size:14px;line-height:20px}
.ps-inv-units{display:flex;flex-wrap:wrap;gap:4px 12px;margin-top:2px}
.ps-inv-count{font-size:20px;line-height:26px;font-weight:600;font-variant-numeric:tabular-nums;text-align:right}
.ps-inv-count small{display:block;font-size:12px;line-height:16px;font-weight:500;color:var(--text-3)}
.ps-kv.tight{grid-template-columns:120px 1fr;font-size:14px;line-height:20px;gap:6px var(--s3)}
/* pay the team (laptop line with an edit pencil) */
.ps-pay-line.edit{grid-template-columns:24px minmax(0,1fr) auto 64px 32px}
.ps-pay-line .ps-note-a{display:inline-flex;align-items:center;gap:4px;color:var(--a-fg);font-weight:600;font-size:12px;line-height:16px}
.ps-tiles-2{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.ps-tiles-2>div{background:var(--surface);padding:var(--s3) var(--s4)}
.ps-tiles-2 small{display:block;font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}
.ps-tiles-2 b{display:block;font-size:22px;line-height:30px;font-weight:600;font-variant-numeric:tabular-nums}
.ps-tiles-2 span{display:block;font-size:12px;line-height:16px;color:var(--text-2)}
.ps-tiles-3{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.ps-tiles-3>div{background:var(--surface);padding:var(--s3) var(--s4)}
.ps-tiles-3 small{display:block;font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}
.ps-tiles-3 b{display:block;font-size:22px;line-height:30px;font-weight:600;font-variant-numeric:tabular-nums}
.ps-tiles-3 span{display:block;font-size:12px;line-height:16px;color:var(--text-2)}
.ps-bar i.paid{background:var(--chart-pay)}
.ps-bar i.owed{background:var(--chart-pay);opacity:.6}
.ps-bar i.sched{background:var(--surface);border:1.5px solid var(--chart-pay);border-bottom:0}
.ps-legend i.owed{background:var(--chart-pay);opacity:.6}
.ps-legend i.sched{background:var(--surface);border:1.5px solid var(--chart-pay)}
.ps-method-chips{display:flex;flex-wrap:wrap;gap:var(--s2)}
.ps-panel-label{display:flex;align-items:center;gap:var(--s2);margin:var(--s6) var(--gutter) var(--s2);font-size:12px;line-height:16px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-3)}
.ps-panel-label::after{content:"";flex:1;height:1px;background:var(--line-strong)}
/* person profile */
.ps-profile-layout{display:grid;grid-template-columns:200px minmax(0,1fr);gap:var(--s6);align-items:start}
.ps-rate-row{display:flex;align-items:center;justify-content:space-between;gap:var(--s4);flex-wrap:wrap}
.ps-collapsed{display:flex;align-items:center;gap:var(--s3);min-height:56px;padding:var(--s3) var(--s4);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg)}
.ps-collapsed+.ps-collapsed{margin-top:var(--s2)}
.ps-collapsed .ps-heading{min-width:140px}
.ps-collapsed .ps-row-sub{flex:1;min-width:0}
.ps-table tr.muted td{color:var(--text-3);background:var(--sunken);font-size:13px}
.ps-table td .ps-meta{display:block}
.ps-thumbs .ps-photo-ph .bi,.ps-thumbs .ps-photo-add .bi,.ps-thumbs .ps-photo-tile .bi{aspect-ratio:auto;width:auto;height:auto;background:none;border-radius:0;display:inline-block;object-fit:initial}
.ps-issue.is-selected .ps-btn.tint{background:var(--surface);border-color:var(--line-strong)}

/* ==========================================================================
   23. Critique round 2 (Sep 17): gold never touches orange; focus everywhere.
   ========================================================================== */
/* Severity cards: the tone icon becomes a solid tile when its card is selected,
   so an orange or red icon never floats on gold. Selection itself = gold ring + radio. */
.ps-sev.is-selected .ps-q-icon{background:var(--n-solid);color:#fff}
.ps-sev.is-selected .ps-q-icon.a{background:var(--a-solid);color:#fff}
.ps-sev.is-selected .ps-q-icon.d{background:var(--d-solid);color:#fff}
.ps-sev.is-selected .ps-q-icon.s{background:var(--s-solid);color:#fff}
/* Dark: selected choice fills are neutral; only the ring and the radio are gold */
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]) .ps-sev.is-selected,
  :root:not([data-theme="light"]) .ps-levels>.is-selected,
  :root:not([data-theme="light"]) .ps-answer.pick .is-selected,
  :root:not([data-theme="light"]) .ps-pick-chips>.is-selected{background:var(--hover)}
}
:root[data-theme="dark"] .ps-sev.is-selected,
:root[data-theme="dark"] .ps-levels>.is-selected,
:root[data-theme="dark"] .ps-answer.pick .is-selected,
:root[data-theme="dark"] .ps-pick-chips>.is-selected{background:var(--hover)}
/* Tint buttons inside a toned row or banner get a surface fill and an edge (they vanished on orange tints) */
.ps-dtable tr.open .ps-btn.tint,.ps-slot-open .ps-btn.tint,.ps-banner .ps-btn.tint,.ps-day-warn .ps-btn.tint,
.ps-loc-row.stale .ps-btn.tint,.ps-report-row.missing .ps-btn.tint,.ps-q-tone .ps-btn.tint,.ps-check.is-next .ps-btn.tint{background:var(--surface);border:1px solid color-mix(in srgb,var(--accent) 45%,var(--line-strong))}
/* Inputs in dark mode: visible edge on hover and focus */
.ps-input:hover,.ps-select:hover,.ps-textarea:hover{border-color:var(--text-3)}
.ps-input:focus,.ps-select:focus,.ps-textarea:focus{border-color:var(--text-3)}
/* Focus on night surfaces: night gap + bright gold ring */
.ps-tonight :focus-visible,.ps-tonight .ps-btn:focus-visible,.ps-bulkbar :focus-visible,.ps-bulkbar .ps-btn:focus-visible,
.ps-toast :focus-visible,.ps-runsheet.night :focus-visible,.ps-runsheet.night .ps-btn:focus-visible,.ps-actionbar:not(.light) .ps-btn:focus-visible{box-shadow:var(--focus-ring-night)}
/* Mockup-only: show a focus ring statically (.is-focus mirrors :focus-visible) */
.ps .is-focus{box-shadow:var(--focus-ring)!important;outline:none}
.ps-tonight .is-focus,.ps-bulkbar .is-focus,.ps-toast .is-focus,.ps-runsheet.night .is-focus,.ps-actionbar:not(.light) .is-focus{box-shadow:var(--focus-ring-night)!important}
.ps-input.is-focus,.ps-select.is-focus,.ps-textarea.is-focus{border-color:var(--text-3)}
/* "Up next" on the setup checklist: a next-action cue, gold-soft pill in gold text (not attention) */
.ps-next-pill{display:inline-flex;align-items:center;gap:5px;min-height:22px;padding:2px 8px;border-radius:var(--r-pill);background:var(--accent-soft);color:var(--accent-text);font-size:12px;line-height:16px;font-weight:600;white-space:nowrap}
.ps-check.is-next{background:var(--surface);box-shadow:inset 3px 0 0 var(--accent)}
/* profile anchor nav: amounts stay neutral text even on the active item */
.ps-anchor-nav a small{font-size:12px;font-weight:500;color:var(--text-2)}
/* Equipment "Needed" line inside a selected (neutral) row keeps its tone */
/* held payout */
.ps-chip.held{color:var(--n-fg);background:var(--n-bg)} .ps-chip.held::before{background:var(--n-solid)}
/* supplies: range amounts and spare rolls sub-line */
.ps-range{white-space:nowrap;font-variant-numeric:tabular-nums}
/* Supplies phone: the open card is marked by a stronger neutral border + chevron-up, not gold */
.ps-card.is-open{border-color:var(--line-strong)}
/* Floor plan landmark label (loading dock): neutral way-finding, not a warning */
.ps-fp-dock .bi{color:var(--text-2)}
/* Collected-by-month series */
.ps-bar i.cash1{background:var(--chart-cash-1)} .ps-bar i.cash2{background:var(--chart-cash-2)}
.ps-legend i.cash1{background:var(--chart-cash-1)} .ps-legend i.cash2{background:var(--chart-cash-2)}
/* crew pay not recorded (events before pay rates existed): neutral dashed segment */
.ps-bar i.pay-none{background:transparent;border:1.5px dashed var(--text-3);border-bottom:0}
.ps-legend i.pay-none{background:transparent;border:1.5px dashed var(--text-3)}
/* lock-screen push + SMS bubble mocks */
.ps-lock{border-radius:28px;padding:18px 14px 22px;background:linear-gradient(180deg,#292524,#0c0a09);color:#fafaf9}
.ps-lock-time{text-align:center;font-size:56px;line-height:60px;font-weight:300;letter-spacing:-.02em}
.ps-lock-date{text-align:center;font-size:15px;line-height:20px;font-weight:500;color:#d6d3d1;margin-bottom:14px}
.ps-push{display:grid;grid-template-columns:36px minmax(0,1fr);gap:10px;padding:12px;border-radius:18px;background:rgba(250,250,249,.14);backdrop-filter:blur(8px)}
.ps-push+.ps-push{margin-top:8px}
.ps-push-icon{width:36px;height:36px;border-radius:9px;background:#fbf8f2;display:flex;align-items:center;justify-content:center;overflow:hidden}
.ps-push-icon img{width:30px;height:auto}
.ps-push b{font-size:14px;line-height:18px;font-weight:600;display:flex;justify-content:space-between;gap:8px}
.ps-push b small{font-size:12px;font-weight:500;color:#d6d3d1}
.ps-push p{font-size:14px;line-height:19px;color:#fafaf9;margin:0}
.ps-sms-thread{display:flex;flex-direction:column;gap:6px;padding:var(--s4);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg)}
.ps-sms-stamp{text-align:center;font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}
.ps-sms-in{align-self:flex-start;max-width:86%;background:var(--n-bg);color:var(--text);padding:9px 12px;border-radius:18px 18px 18px 6px;font-size:15px;line-height:21px}
.ps-sms-in a{color:var(--p-fg);text-decoration:underline}
/* focus specimen grid */
.ps-focus-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px var(--s3);align-items:center}
.ps-focus-grid>div{display:flex;flex-direction:column;gap:6px;align-items:flex-start;min-width:0}
.ps-focus-grid small{font-size:12px;line-height:16px;color:var(--text-3);font-weight:500}
.ps-steps li.current.open{color:var(--text)} .ps-steps li.current.open::before{background:var(--n-solid)}
