/* BunBun Operations — one stylesheet for the whole portal.
   Brand palette and typefaces come from the BunBun identity (brand/). */

@font-face{font-family:'BunBun Sans';font-weight:400;font-display:swap;src:url('/brand/fonts/zarid-sans-regular.otf') format('opentype')}
@font-face{font-family:'BunBun Sans';font-weight:500;font-display:swap;src:url('/brand/fonts/zarid-sans-medium.otf') format('opentype')}
@font-face{font-family:'BunBun Sans';font-weight:700;font-display:swap;src:url('/brand/fonts/zarid-sans-bold.otf') format('opentype')}
@font-face{font-family:'BunBun Display';font-weight:500;font-display:swap;src:url('/brand/fonts/zarid-display-medium.otf') format('opentype')}

:root{
  --cream:#f3ebdd;--paper:#fbf7f0;--espresso:#2a1710;--olive:#6b704f;--olive-dark:#565b3e;--clay:#b56a4a;--clay-dark:#96543a;
  --bg:#f6f1e8;--surface:#fffdf9;--line:#e4dacb;--line-strong:#cfc2b0;--text:#2a1710;--muted:#6f6052;
  --ok:#3f6b3a;--ok-soft:#e5efdf;--warn:#8a5a0c;--warn-soft:#f8ecd0;--danger:#9c3327;--danger-soft:#f8e2dd;--info:#3d5a73;--info-soft:#e6edf3;--clay-soft:#f6e6dc;--olive-soft:#eceedf;
  --radius:8px;--radius-lg:12px;--shadow:0 1px 2px #2a171014,0 4px 14px #2a17100a;--shadow-pop:0 10px 36px #2a171033;
  --sidebar:252px;--topbar:58px;
  --sans:'BunBun Sans',system-ui,-apple-system,'Segoe UI',Arial,sans-serif;--display:'BunBun Display',Georgia,serif;
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--text);font:400 15px/1.5 var(--sans);font-variant-numeric:tabular-nums}
[hidden]{display:none!important}
h1,h2,h3,h4{margin:0;font-family:var(--display);font-weight:500;line-height:1.25;color:var(--text)}
h1{font-size:26px}h2{font-size:20px}h3{font-size:16.5px;font-family:var(--sans);font-weight:700}
p{margin:0}
a{color:var(--clay-dark)}
.small,small{font-size:13px;color:var(--muted)}
.eyebrow{font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:700}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
:focus-visible{outline:2px solid var(--clay);outline-offset:2px}

/* ---------- controls ---------- */
button,.button{appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:38px;padding:8px 14px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--surface);color:var(--text);font:500 14px/1.2 var(--sans);cursor:pointer;text-decoration:none;white-space:nowrap;transition:background .12s,border-color .12s}
button:hover,.button:hover{background:var(--cream)}
button:disabled{opacity:.55;cursor:not-allowed}
button.primary,.button.primary{background:var(--olive);border-color:var(--olive);color:#fff}
button.primary:hover{background:var(--olive-dark);border-color:var(--olive-dark)}
button.danger{background:var(--danger);border-color:var(--danger);color:#fff}
button.danger:hover{background:#82291f}
button.ghost,button.wf-text-button{border-color:transparent;background:transparent;color:var(--clay-dark)}
button.ghost:hover,button.wf-text-button:hover{background:var(--clay-soft)}
button.icon{min-width:38px;padding:8px}
button.small-button{min-height:32px;padding:5px 10px;font-size:13px}
button svg,.button svg{width:18px;height:18px;flex:none}
button[aria-busy=true]{position:relative;color:transparent!important}
button[aria-busy=true]::after{content:'';position:absolute;width:16px;height:16px;border-radius:50%;border:2px solid #fff;border-top-color:transparent;animation:spin .7s linear infinite}
button.secondary[aria-busy=true]::after,button:not(.primary):not(.danger)[aria-busy=true]::after{border-color:var(--olive);border-top-color:transparent}
@keyframes spin{to{transform:rotate(360deg)}}

label{display:grid;gap:6px;font-size:13.5px;font-weight:500;color:var(--text)}
input,select,textarea{width:100%;min-height:40px;padding:8px 11px;border:1px solid var(--line-strong);border-radius:var(--radius);background:#fff;color:var(--text);font:400 15px/1.35 var(--sans)}
textarea{min-height:84px;resize:vertical}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--olive);box-shadow:0 0 0 3px #6b704f2b}
input[type=checkbox],input[type=radio]{width:18px;height:18px;min-height:0;padding:0;accent-color:var(--olive);flex:none}
input[type=file]{padding:7px;background:var(--paper)}
input:disabled,select:disabled,textarea:disabled,input[readonly]{background:var(--paper);color:var(--muted)}
label:has(>input[type=checkbox]),label:has(>input[type=radio]){display:flex;flex-direction:row-reverse;justify-content:flex-end;align-items:flex-start;gap:10px;font-weight:400;cursor:pointer}
label.portal-switch:has(>input),label.check:has(>input),label.portal-switch,label.check{display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-start;gap:10px;font-weight:400;cursor:pointer}
fieldset{margin:0;padding:14px;border:1px solid var(--line);border-radius:var(--radius);display:grid;gap:12px;min-width:0}
legend{padding:0 6px;font-weight:700;font-size:13.5px}
.field-error{color:var(--danger);font-size:13px;font-weight:400}
.field-hint{color:var(--muted);font-size:13px;font-weight:400}
[aria-invalid=true]{border-color:var(--danger)!important}
[role=alert]:not(:empty){color:var(--danger);background:var(--danger-soft);border-radius:var(--radius);padding:9px 12px;font-size:14px}

/* ---------- sign-in ---------- */
.login-screen{min-height:100vh;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);background:var(--paper)}
.login-art{background:var(--clay);color:#fff8ef;padding:48px;display:flex;flex-direction:column;justify-content:space-between;gap:32px}
.login-art img{width:150px}
.login-art h1{color:#fff8ef;font-size:38px;max-width:12ch}
.login-art p{max-width:38ch;color:#fdeede}
.login-panel{display:grid;place-items:center;padding:32px 20px}
.login-card{width:min(400px,100%);display:grid;gap:16px}
.login-card h2{font-size:24px}
.login-card .login-links{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;font-size:14px}
.login-card button.primary{min-height:44px}
.login-message:not(:empty){padding:10px 12px;border-radius:var(--radius);background:var(--info-soft);color:var(--info);font-size:14px}
.login-message[data-tone=error]{background:var(--danger-soft);color:var(--danger)}
.login-message[data-tone=ok]{background:var(--ok-soft);color:var(--ok)}
@media(max-width:820px){.login-screen{grid-template-columns:1fr}.login-art{padding:24px;flex-direction:row;align-items:center}.login-art h1,.login-art p{display:none}.login-art img{width:110px}}

/* ---------- shell ---------- */
.app-shell{min-height:100vh;display:grid;grid-template-columns:var(--sidebar) minmax(0,1fr)}
.sidebar{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;background:var(--paper);border-right:1px solid var(--line);z-index:30}
.app-brand{display:flex;align-items:flex-end;gap:10px;padding:18px 20px 14px;text-decoration:none;color:var(--muted)}
.app-brand img{width:104px;height:auto}
.app-brand span{font-size:10.5px;letter-spacing:.14em;font-weight:700;padding-bottom:3px}
#app-nav{flex:1;overflow-y:auto;padding:4px 10px 16px}
.nav-heading{margin:16px 10px 4px;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:700}
.nav-item{width:100%;justify-content:flex-start;gap:10px;min-height:36px;padding:7px 10px;margin:1px 0;border:0;border-radius:var(--radius);background:transparent;font-weight:400;font-size:14.5px;color:var(--text);text-align:left;white-space:normal}
.nav-item:hover{background:var(--cream)}
.nav-item[aria-current=page]{background:var(--espresso);color:#fff8ef;font-weight:500}
.nav-item svg{width:18px;height:18px;flex:none;opacity:.85}
.nav-item .menu-item-text{flex:1}
.nav-item .external{font-size:12px;opacity:.7}
.sidebar-notification{display:inline-flex}
.sidebar-notification[hidden]{display:none}
.sidebar-notice-count{min-width:20px;padding:1px 6px;border-radius:10px;background:var(--clay);color:#fff;font-size:11.5px;font-weight:700;text-align:center}
.sidebar-foot{border-top:1px solid var(--line);padding:10px}
.user-chip{width:100%;display:flex;align-items:center;gap:10px;padding:8px;border:0;border-radius:var(--radius);background:transparent;text-align:left;min-height:48px;white-space:normal}
.user-chip:hover{background:var(--cream)}
.avatar{width:34px;height:34px;border-radius:50%;background:var(--olive-soft);color:var(--olive-dark);display:grid;place-items:center;font-weight:700;font-size:13px;flex:none}
.user-chip strong{display:block;font-size:14px;line-height:1.2}
.user-chip small{display:block;font-size:12px}
.close-nav{display:none}
.nav-backdrop{position:fixed;inset:0;z-index:25;border:0;border-radius:0;background:#2a171066;padding:0;min-height:0}

.app-main{min-width:0;display:flex;flex-direction:column;min-height:100vh}
.app-topbar{position:sticky;top:0;z-index:20;height:var(--topbar);display:flex;align-items:center;gap:12px;padding:0 24px;background:var(--surface);border-bottom:1px solid var(--line)}
#toggle-nav{display:none}
.crumb{flex:1;min-width:0;display:flex;align-items:center;gap:8px;font-size:14px;color:var(--muted);white-space:nowrap;overflow:hidden}
.crumb strong{color:var(--text);font-weight:500;overflow:hidden;text-overflow:ellipsis}
.crumb span{opacity:.6}
.preview-badge{padding:4px 10px;border-radius:20px;background:var(--warn-soft);color:var(--warn);font-size:12px;font-weight:700;letter-spacing:.04em}
.location-switch{display:inline-flex;border:1px solid var(--line-strong);border-radius:var(--radius);overflow:hidden;background:var(--surface)}
.location-switch button{border:0;border-radius:0;min-height:34px;padding:6px 12px;font-size:13.5px;background:transparent}
.location-switch button[aria-pressed=true]{background:var(--espresso);color:#fff8ef}
.fixed-location{padding:5px 10px;border-radius:20px;background:var(--olive-soft);color:var(--olive-dark);font-size:13px;font-weight:500}
.portal-actions{display:flex;align-items:center;gap:8px}
.portal-icon-button{position:relative;min-width:38px;padding:8px}
.portal-badge{position:absolute;top:-5px;right:-5px;min-width:19px;padding:1px 5px;border-radius:10px;background:var(--clay);color:#fff;font-size:11px;font-weight:700}
.portal-settings-button{display:none}

.app-content{flex:1;width:100%;max-width:1320px;margin:0 auto;padding:24px 24px 48px}
.page-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:16px}
.page-heading p{color:var(--muted);margin-top:4px;max-width:70ch}
.page-actions{display:flex;gap:8px;flex-wrap:wrap}
.page-tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin:0 0 18px;overflow-x:auto;scrollbar-width:thin}
.page-tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;background:transparent;min-height:40px;padding:8px 14px;color:var(--muted);font-weight:500}
.page-tabs button:hover{color:var(--text);background:transparent}
.page-tabs button[aria-current=page]{color:var(--text);border-bottom-color:var(--clay)}
.app-footer{display:flex;justify-content:space-between;gap:12px;padding:14px 24px;border-top:1px solid var(--line);font-size:12.5px;color:var(--muted)}
#app-message:not(:empty){margin-bottom:14px;padding:10px 14px;border-radius:var(--radius);background:var(--warn-soft);color:var(--warn)}

@media(max-width:960px){
  .app-shell{grid-template-columns:1fr}
  .sidebar{position:fixed;inset:0 auto 0 0;width:min(300px,86vw);transform:translateX(-102%);transition:transform .18s ease;box-shadow:var(--shadow-pop)}
  .sidebar.is-open{transform:none}
  .close-nav{display:inline-flex;position:absolute;top:12px;right:10px;border:0;background:transparent;font-size:22px;min-width:40px}
  #toggle-nav{display:inline-flex}
  .app-topbar{padding:0 12px;gap:8px}
  .app-content{padding:16px 12px 40px}
  .nav-item{min-height:44px}
  h1{font-size:22px}
  .fixed-location,.crumb span,.crumb .crumb-group{display:none}
}

/* ---------- surfaces ---------- */
.card,.wf-card,.dash-panel,.ops-panel,.setup-step,.setup-hero{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:16px;display:grid;gap:8px;align-content:start}
.card>h2,.card>h3{margin-bottom:2px}
.card-grid,.wf-grid,.career-list,.setup-steps{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}
.stack{display:grid;gap:16px}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.wf-card>button,.card>button{justify-self:start}
.wf-card .small+button{margin-top:4px}
.section-title{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:8px 0 2px}
.notice,.wf-notice,.wf-count-hint{padding:10px 14px;border-radius:var(--radius);background:var(--warn-soft);color:var(--warn);font-size:14px}
.notice.info{background:var(--info-soft);color:var(--info)}
.notice.ok{background:var(--ok-soft);color:var(--ok)}
.notice.danger{background:var(--danger-soft);color:var(--danger)}
.wf-message:not(:empty){padding:10px 14px;border-radius:var(--radius);background:var(--info-soft);color:var(--info);margin-bottom:12px}
.wf-inline-warning{color:var(--warn);font-weight:500}

/* states */
.state{display:grid;justify-items:center;gap:10px;padding:40px 16px;text-align:center;color:var(--muted);background:var(--surface);border:1px dashed var(--line-strong);border-radius:var(--radius-lg)}
.state strong{color:var(--text);font-size:16px}
.state.error{border-color:#d9a79f;background:var(--danger-soft);color:var(--danger)}
.state .spinner,.spinner{width:26px;height:26px;border-radius:50%;border:3px solid var(--line);border-top-color:var(--olive);animation:spin .8s linear infinite}
.wf-empty,.dash-empty{padding:22px 12px;text-align:center;color:var(--muted);background:var(--paper);border-radius:var(--radius)}
.skeleton{height:14px;border-radius:6px;background:linear-gradient(90deg,var(--line) 25%,var(--cream) 37%,var(--line) 63%);background-size:400% 100%;animation:shimmer 1.4s infinite}
@keyframes shimmer{0%{background-position:100% 0}100%{background-position:0 0}}

/* badges */
.badge,.wf-badge,.proc-status,.invoice-status{display:inline-flex;align-items:center;gap:6px;padding:2px 9px;border-radius:20px;background:var(--cream);color:var(--muted);font-size:12.5px;font-weight:500;white-space:nowrap;text-transform:capitalize}
.badge.ok,.proc-status.good,.wf-badge[data-status=received]{background:var(--ok-soft);color:var(--ok)}
.badge.warn,.proc-status.partial,.wf-badge[data-status=preparing],.wf-badge[data-status=requested]{background:var(--warn-soft);color:var(--warn)}
.badge.danger,.wf-badge[data-status=cancelled]{background:var(--danger-soft);color:var(--danger)}
.badge.info,.proc-status.ordered,.wf-badge[data-status=dispatched]{background:var(--info-soft);color:var(--info)}
.badge.clay{background:var(--clay-soft);color:var(--clay-dark)}

/* metrics */
.metrics,.dash-metrics,.ops-metrics,.wf-order-kpis{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));margin-bottom:16px}
.metric,.dash-metric,.wf-order-kpi{display:grid;gap:2px;justify-items:start;justify-content:stretch;text-align:left;padding:14px 16px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);min-height:0;white-space:normal;height:auto}
button.dash-metric:hover{border-color:var(--olive);background:var(--surface)}
.metric span,.dash-metric span,.wf-order-kpi span{font-size:13px;color:var(--muted);font-weight:400}
.metric strong,.dash-metric strong,.wf-order-kpi strong{font-size:26px;line-height:1.15;font-weight:700}
.metric small,.dash-metric small{font-size:12.5px}
.wf-order-kpi{grid-template-columns:auto 1fr;align-items:baseline;column-gap:10px}
.wf-order-kpi[data-status=requested]{border-left:4px solid var(--warn)}.wf-order-kpi[data-status=preparing]{border-left:4px solid var(--clay)}.wf-order-kpi[data-status=dispatched]{border-left:4px solid var(--info)}.wf-order-kpi[data-status=received]{border-left:4px solid var(--ok)}

/* ---------- tables ---------- */
.table-wrap,.proc-table-wrap,.dash-table-wrap,.import-preview{overflow-x:auto;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg)}
table{width:100%;border-collapse:collapse;font-size:14px}
th{position:sticky;top:0;padding:10px 14px;text-align:left;font-size:12px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:700;background:var(--paper);border-bottom:1px solid var(--line);white-space:nowrap}
td{padding:10px 14px;border-bottom:1px solid var(--line);vertical-align:middle}
tbody tr:last-child td{border-bottom:0}
tbody tr:hover td{background:#fbf7f066}
th button.sort{all:unset;cursor:pointer;display:inline-flex;align-items:center;gap:4px;font:inherit;letter-spacing:inherit;text-transform:inherit;color:inherit}
th button.sort:focus-visible{outline:2px solid var(--clay);outline-offset:2px}
th[aria-sort=ascending] button.sort::after{content:'▲';font-size:9px}th[aria-sort=descending] button.sort::after{content:'▼';font-size:9px}
td.num,th.num{text-align:right}
td .cell-main{font-weight:500}td .cell-sub{display:block;font-size:12.5px;color:var(--muted)}
td.actions{text-align:right;white-space:nowrap}
td.actions button,.proc-row-actions button{min-height:32px;padding:5px 10px;font-size:13px}
.proc-row-actions,.wf-row-actions{display:flex;gap:6px;flex-wrap:wrap}
.proc-item{display:grid}.proc-item strong{font-weight:500}.proc-item small{font-size:12.5px}
.table-tools,.proc-toolbar,.dash-toolbar,.salary-toolbar,.access-toolbar,.invoice-toolbar,.wf-stock-toolbar,.wf-order-tools,.po-items-toolbar,.po-order-context{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end;margin-bottom:12px}
.table-tools label,.proc-toolbar label,.dash-toolbar label,.salary-toolbar label,.access-toolbar label,.po-order-context label,.po-items-toolbar label{min-width:170px;flex:0 1 220px}
.table-tools .grow{flex:1 1 240px}
.table-tools .spacer{flex:1}
.proc-toolbar h2{flex:1 1 100%;font-size:18px}
.table-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:10px 14px;border-top:1px solid var(--line);font-size:13px;color:var(--muted)}
.pager{display:flex;align-items:center;gap:6px}
.pager button{min-height:32px;padding:4px 10px}
.compact td{padding:6px 12px}.compact th{padding:7px 12px}
@media(max-width:640px){
  table.stackable thead{display:none}
  table.stackable tr{display:grid;gap:4px;padding:12px 14px;border-bottom:1px solid var(--line)}
  table.stackable td{display:flex;justify-content:space-between;gap:12px;padding:0;border:0;text-align:right}
  table.stackable td::before{content:attr(data-label);color:var(--muted);font-size:12.5px;text-align:left;flex:none}
  table.stackable td.actions{justify-content:flex-end}table.stackable td.actions::before{content:none}
  table.stackable td:first-child{font-size:15px;justify-content:flex-start}table.stackable td:first-child::before{content:none}
}

/* ---------- dialogs ---------- */
dialog{width:min(560px,calc(100vw - 24px));max-height:calc(100vh - 32px);padding:0;border:0;border-radius:var(--radius-lg);background:var(--surface);color:var(--text);box-shadow:var(--shadow-pop);overflow:auto}
dialog::backdrop{background:#2a171080}
dialog.wide,dialog.invoice-dialog,dialog.procurement-dialog{width:min(820px,calc(100vw - 24px))}
dialog>form,dialog>.dialog-body{display:flex;flex-wrap:wrap;gap:12px;justify-content:flex-end;padding:20px}
dialog>form>*,dialog>.dialog-body>*{flex:1 1 100%;min-width:0}
dialog>form>button,dialog>.dialog-body>button{flex:0 0 auto}
dialog>form>button.primary,dialog>form>button.danger{order:2}
dialog>form>button.secondary{order:1}
dialog h2{font-size:20px}
.wf-fields,.proc-fields,.form-grid{display:grid;gap:14px}
.form-grid.two{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}
.dialog-foot{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap;margin-top:4px}
.portal-dialog{padding:20px;display:block}
.portal-dialog>*+*{margin-top:12px}
.portal-dialog-head{display:flex;justify-content:space-between;align-items:center;gap:12px}
.portal-dialog-actions{display:flex;gap:8px;flex-wrap:wrap}
.portal-notice{width:100%;display:grid;justify-items:start;gap:2px;text-align:left;white-space:normal;height:auto;margin-bottom:6px;font-weight:400}
.portal-notice.unread{border-color:var(--clay);background:var(--clay-soft)}
.portal-clear-confirm{padding:12px;border-radius:var(--radius);background:var(--danger-soft);display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.portal-show-all{border:0;background:transparent;color:var(--clay-dark)}
.portal-notification-audit{display:grid;font-size:13px;color:var(--muted)}
.wf-lines{display:grid;gap:10px}
.wf-line{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));align-items:end;padding:12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--paper)}
.wf-line>p,.wf-line>button{grid-column:1/-1;justify-self:start}
.wf-photo{max-width:100%;max-height:260px;border-radius:var(--radius);border:1px solid var(--line)}
.wf-ai,details.proc-details,details.salary-access,details.po-order-help,.card details{border:1px solid var(--line);border-radius:var(--radius);padding:10px 14px;background:var(--paper)}
details>summary{cursor:pointer;font-weight:500}
details[open]>summary{margin-bottom:10px}
details>*+*{margin-top:10px}
.invoice-steps{font-size:13px;color:var(--muted)}
.import-example{padding:10px;border-radius:var(--radius);background:var(--paper);border:1px solid var(--line);font-size:12.5px;overflow:auto}
.day-options{grid-template-columns:repeat(auto-fit,minmax(90px,1fr))}

/* toasts */
.toasts{position:fixed;right:16px;bottom:16px;z-index:100;display:grid;gap:8px;width:min(380px,calc(100vw - 32px))}
.toast{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:var(--radius);background:var(--espresso);color:#fff8ef;box-shadow:var(--shadow-pop);font-size:14px;animation:rise .18s ease}
.toast.ok{background:#2f5a2b}.toast.error{background:#8a2b20}
.toast button{all:unset;cursor:pointer;margin-left:auto;padding:0 4px;opacity:.8}
@keyframes rise{from{opacity:0;transform:translateY(8px)}}

/* ---------- workflow screens (orders, stock, receiving, purchasing) ---------- */
.wf-head,.wf-nav{display:none}
.wf-search{margin-bottom:10px}
.wf-stock-toolbar select{flex:0 1 230px;width:auto}
.compact-tables td{padding:6px 12px}.compact-tables th{padding:7px 12px}.compact-tables .wf-order-row,.compact-tables .wf-stock-row{padding:6px 14px}
.wf-category-chips{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 12px}
.wf-category-chips button,.wf-low-filter{min-height:32px;padding:4px 12px;border-radius:20px;font-size:13px}
.wf-category-chips button[aria-pressed=true],.wf-low-filter[aria-pressed=true]{background:var(--espresso);border-color:var(--espresso);color:#fff8ef}
.wf-order-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:16px;align-items:start}
.wf-simple-list{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden}
.wf-list-labels{display:flex;justify-content:space-between;padding:9px 14px;background:var(--paper);border-bottom:1px solid var(--line);font-size:12px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:700}
.wf-order-row,.wf-stock-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;border-bottom:1px solid var(--line)}
.wf-order-row:last-child,.wf-stock-row:last-child{border-bottom:0}
.wf-order-row.selected{background:var(--olive-soft)}
.wf-order-row>div:first-child,.wf-stock-row>div:first-child{display:grid;min-width:0}
.wf-order-row strong,.wf-stock-row strong{font-weight:500}
.wf-quantity-unit{display:grid;justify-items:center;gap:2px}
.wf-counter{display:flex;align-items:center;gap:4px}
.wf-counter input{width:76px;text-align:center}
.wf-counter button{min-width:38px;padding:6px;font-size:18px}
.wf-order-summary{position:sticky;top:calc(var(--topbar) + 12px);display:grid;gap:10px;padding:16px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg)}
.wf-summary-line{display:flex;justify-content:space-between;gap:10px;font-size:14px}
.wf-stock-right{display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:flex-end}
.wf-stock-right>strong{font-size:16px;font-weight:700}
.wf-stock-right input{width:110px}
.wf-stock-actions{display:flex;gap:6px}
.wf-stock-actions button{min-height:32px;padding:4px 10px;font-size:13px}
.count-pack-controls{display:flex;gap:8px;align-items:end;flex-wrap:wrap}
.count-pack-controls label{width:110px}
.wf-count-footer{position:sticky;bottom:0;display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:12px;padding:12px 14px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow)}
.wf-order-ticket{position:relative}
.wf-order-ticket .wf-badge{justify-self:start}
.wf-order-progress{list-style:none;display:grid;grid-template-columns:repeat(4,1fr);gap:4px;margin:4px 0;padding:0;font-size:12px;color:var(--muted)}
.wf-order-progress li{padding-top:6px;border-top:3px solid var(--line)}
.wf-order-progress li.done{border-color:var(--olive);color:var(--text)}
.wf-order-progress li.cancelled{border-color:var(--danger)}
.wf-order-lines{display:grid;gap:4px;font-size:14px}
.wf-order-lines>div{display:flex;justify-content:space-between;gap:10px}
.wf-order-lines strong{font-weight:400}
.wf-order-note{font-size:13px;color:var(--muted);font-style:italic}
.invoice-inbox-row{padding:0;display:block}
.invoice-inbox-row>summary{display:flex;gap:12px;align-items:center;flex-wrap:wrap;padding:12px 16px;list-style:none}
.invoice-inbox-row>summary::-webkit-details-marker{display:none}
.invoice-inbox-row>summary>strong:first-child{flex:1 1 200px}
.invoice-inbox-row[open]>summary{border-bottom:1px solid var(--line);margin:0}
.invoice-inbox-row>:not(summary){margin:8px 16px}
.invoice-inbox-row>button{margin-right:0}
.invoice-inbox-row>:last-child{margin-bottom:14px}
.supplier-strip{display:flex;gap:10px;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:12px 14px;margin-bottom:12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg)}
.po-summary{display:flex;gap:12px;flex-wrap:wrap;align-items:center;justify-content:flex-end;margin-top:12px}
.setup-hero progress{width:100%;height:10px;accent-color:var(--olive)}
.setup-number{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:var(--olive-soft);color:var(--olive-dark);font-weight:700;font-size:13px}
.setup-step button{justify-self:start}
.salary-access-list{display:grid;gap:8px;grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}
.salary-links{display:flex;gap:16px;flex-wrap:wrap;margin:12px 0}
.career-form{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));align-items:end;padding:16px;margin-bottom:14px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg)}
.career-form>button,.career-form>p{justify-self:start}
.wf-export{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));align-items:end;padding:16px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg)}
.setup-import{max-width:760px}
.team-admin-frame{width:100%;height:calc(100vh - var(--topbar) - 150px);min-height:560px;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--surface)}
.wf-body>p.small,.ops-admin>p.small,.wf-body>.small{margin-bottom:10px}
.wf-body>button{margin:0 8px 12px 0}
.wf-body>select{max-width:320px;margin-bottom:12px}
.ops-admin>.eyebrow,.ops-admin>h2,.ops-admin>nav.wf-nav{display:none}
.ops-admin .wf-head{display:flex;gap:10px;align-items:center;justify-content:space-between;flex-wrap:wrap;margin-bottom:10px}
.ops-admin .wf-head h3{flex:1}
.ops-admin label:has(>input[type=search]){max-width:420px;margin-bottom:12px}

/* ---------- overview ---------- */
.dash-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(340px,1fr))}
.dash-panel h3{font-family:var(--display);font-weight:500;font-size:18px}
.dash-attention{width:100%;justify-content:space-between;white-space:normal;text-align:left;font-weight:400}
.dash-attention strong{font-weight:700}
.dash-bars{display:grid;gap:6px}
.dash-bar-row{display:grid;grid-template-columns:52px 1fr auto;gap:10px;align-items:center;border:0;background:transparent;padding:4px 0;min-height:0;font-weight:400}
.dash-track{height:8px;border-radius:6px;background:var(--cream);overflow:hidden}
.dash-track span{display:block;height:100%;background:var(--olive);border-radius:6px}
.todo-list{display:grid;gap:8px}
.todo{display:flex;align-items:center;gap:12px;padding:12px 14px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg)}
.todo .count{min-width:40px;height:40px;border-radius:10px;display:grid;place-items:center;background:var(--clay-soft);color:var(--clay-dark);font-weight:700;font-size:17px}
.todo .count.zero{background:var(--ok-soft);color:var(--ok)}
.todo div{flex:1;min-width:0}
.todo strong{display:block;font-weight:500}
.quick-actions{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}

/* ---------- administration ---------- */
.matrix-wrap{overflow:auto;max-height:70vh;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg)}
table.matrix th,table.matrix td{text-align:center;padding:8px 10px}
table.matrix th:first-child,table.matrix td:first-child{text-align:left;position:sticky;left:0;background:var(--surface);z-index:1;min-width:190px}
table.matrix thead th:first-child{background:var(--paper);z-index:2}
table.matrix td.na{color:var(--line-strong)}
table.matrix td label{display:inline-flex;padding:4px;cursor:pointer}
table.matrix tr.changed td:first-child{box-shadow:inset 3px 0 0 var(--clay)}
.role-list{display:grid;gap:8px}
.role-item{display:flex;align-items:center;gap:12px;width:100%;padding:12px 14px;text-align:left;white-space:normal;height:auto;justify-content:flex-start}
.role-item[aria-current=true]{border-color:var(--espresso);box-shadow:inset 3px 0 0 var(--espresso)}
.role-item div{flex:1;min-width:0}
.role-item strong{display:block}
.roles-layout{display:grid;grid-template-columns:300px minmax(0,1fr);gap:16px;align-items:start}
.link-box{display:flex;gap:8px;align-items:center}
.link-box input{font-family:ui-monospace,monospace;font-size:12.5px}
.kv{display:grid;grid-template-columns:auto 1fr;gap:4px 16px;font-size:14px}
.kv dt{color:var(--muted)}.kv dd{margin:0}
.audit-changes{font-size:13px;color:var(--muted);max-width:52ch;white-space:normal}
.settings-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));align-items:start}
.settings-card{display:grid;gap:14px}
.settings-card form{display:grid;gap:14px}
.scope-tag{font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;font-weight:700;color:var(--olive-dark);background:var(--olive-soft);padding:2px 8px;border-radius:20px;justify-self:start}
.toggle-list{display:grid;gap:8px;grid-template-columns:repeat(auto-fill,minmax(230px,1fr))}
.status-line{display:flex;align-items:center;gap:8px;font-size:14px}
.dot{width:9px;height:9px;border-radius:50%;background:var(--line-strong);flex:none}
.dot.ok{background:var(--ok)}.dot.off{background:var(--danger)}.dot.unknown{background:var(--warn)}

@media(max-width:900px){.wf-order-layout,.roles-layout{grid-template-columns:1fr}.wf-order-summary{position:static}}
@media(max-width:640px){
  input,select,textarea{font-size:16px}
  button,.button{min-height:44px}
  .page-actions{width:100%}.page-actions>*{flex:1}
  .wf-stock-row,.wf-order-row{flex-direction:column;align-items:stretch}
  .wf-stock-right{justify-content:space-between}
  .wf-order-kpis{grid-template-columns:1fr 1fr}
  .table-tools label,.proc-toolbar label,.dash-toolbar label,.salary-toolbar label{flex:1 1 100%}
  dialog>form,dialog>.dialog-body{padding:16px}
  .toasts{right:8px;left:8px;bottom:8px;width:auto}
}
@media print{.sidebar,.app-topbar,.page-actions,.app-footer,.toasts{display:none!important}.app-shell{display:block}}

/* layout refinements for inline filters */
.wf-body>label{max-width:420px;margin-bottom:10px}
.proc-toolbar>input,.proc-toolbar>select{flex:1 1 200px;width:auto;max-width:340px}
.wf-card>.wf-badge,.wf-card>.badge,.wf-card>.proc-status{justify-self:start}
.setup-step>.proc-status{justify-self:start}
a.nav-item{text-decoration:none;display:flex;align-items:center}

/* ---- Tasks & checklists (public/js/tasks.js) ---- */
.task-date-heading{margin:4px 0 12px;font-size:20px}
.task-daynav{align-self:flex-end;flex-wrap:nowrap}
.task-section{display:grid;gap:10px}
.task-section.overdue>.section-title{color:var(--danger)}
.task-card.overdue{border-color:var(--danger);border-left-width:4px}
.task-card h3{margin:0;font-size:17px;overflow-wrap:anywhere}
.task-badges{display:flex;gap:6px;flex-wrap:wrap}
.task-meta{margin:0;font-size:14px}
.task-actions{margin-top:4px}
dialog select[id^="f-employee-"]{margin-top:6px}
@media(max-width:640px){.task-daynav{width:100%}.task-daynav>button{flex:1}.task-actions>button{flex:1}}

/* ---- Inventory foundation (public/js/inventory.js): count sheet, line editors, cost panel ---- */
.stack-tight{display:grid;gap:8px}
.count-head .row h2{margin:0}
.count-area{margin:14px 0 2px;font:600 13px/1.2 var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.count-sheet{display:grid;gap:8px}
.count-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 16px;align-items:center;padding:12px 14px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg)}
.count-row.recount{border-color:var(--warn);box-shadow:inset 4px 0 0 var(--warn)}
.count-name{display:grid;gap:2px;min-width:0}
.count-name strong{overflow-wrap:anywhere}
.count-name small:empty{display:none}
.count-inputs{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;justify-content:flex-end}
.count-inputs label{width:120px}
.count-inputs label span{font-size:12.5px;color:var(--muted);font-weight:400}
.count-total{min-width:110px;text-align:right;font-weight:600;padding-bottom:10px}
.count-total.muted{color:var(--muted);font-weight:400}
.count-note{grid-column:1/-1}
.count-note.required span::after{content:' — needed before approval';color:var(--warn)}
.count-row>.field-error{grid-column:1/-1}
.count-footer-status{display:grid;gap:2px}
.count-save{font-size:13px;color:var(--muted)}
.count-save[data-state=ok]::before{content:'✓ ';color:var(--ok)}
.count-save[data-state=error]{color:var(--danger);font-weight:600}
.count-log,.plain-list{margin:8px 0 0;padding-left:18px;font-size:14px;display:grid;gap:4px}
td.neg{color:var(--danger);font-weight:600}
td.pos{color:var(--ok);font-weight:600}
td .indent{padding-left:18px}
details.card>summary{cursor:pointer;font-weight:600}
.line-editor{display:grid;gap:8px;padding:12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--paper)}
.line-editor-title{font-size:13.5px;font-weight:600}
.line-row{display:grid;grid-template-columns:minmax(0,2fr) minmax(90px,1fr) minmax(0,1.3fr) auto;gap:8px;align-items:center}
.line-row.recipe-line{grid-template-columns:minmax(0,1.3fr) minmax(0,2fr) minmax(90px,1fr) minmax(0,1.2fr) auto}
.line-row>.field-error{grid-column:1/-1}
.line-row>.field-error:empty{display:none}
.recipe-editor{gap:14px}
.cost-panel .metrics{margin-bottom:4px}
.cost-panel .metric strong{font-size:22px}
@media(max-width:640px){
  .count-row{grid-template-columns:1fr}
  .count-inputs{justify-content:flex-start}
  .count-inputs label{flex:1 1 110px;width:auto}
  .count-total{flex:1 1 100%;text-align:left;padding-bottom:0}
  .line-row,.line-row.recipe-line{grid-template-columns:1fr 1fr}
  .line-row>select:first-child{grid-column:1/-1}
  .wf-count-footer{flex-direction:column;align-items:stretch}
}

/* ---- Payroll workspace, lateness and late report (migration 071, public/js/payroll.js) ---- */
/* General fix found while printing statements: a closed <dialog> must not be drawn. `.portal-dialog{display:block}` (notifications)
   overrides the browser default and left the closed panel visible under the page footer. */
dialog:not([open]){display:none}
.pay-section>h3{margin:0}
.pay-sheet{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:20px}
.pay-sheet-head{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;align-items:flex-start}
.pay-sheet-head h2{margin:0}
.pay-steps{display:flex;gap:6px;flex-wrap:wrap}
.pay-step{padding:3px 12px;border-radius:20px;border:1px solid var(--line-strong);color:var(--muted);font-size:13px}
.pay-step.done{background:var(--olive-soft);border-color:var(--olive-soft);color:var(--olive-dark)}
.pay-step.current{background:var(--olive);border-color:var(--olive);color:#fff;font-weight:500}
.pay-columns{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}
.pay-columns h3{margin:0 0 8px}
table.pay-lines{width:100%}
table.pay-lines td{vertical-align:top}
tr.pay-total td{font-weight:700;border-top:2px solid var(--line-strong)}
button.pay-amount{border:0;background:transparent;padding:0;min-height:0;color:var(--text);font:inherit;font-variant-numeric:tabular-nums;text-decoration:underline dotted var(--line-strong);text-underline-offset:4px;cursor:pointer;border-radius:4px}
button.pay-amount:hover,button.pay-amount:focus-visible{background:var(--olive-soft);text-decoration-color:var(--olive)}
.pay-net{display:flex;justify-content:space-between;align-items:baseline;gap:16px;padding:14px 18px;border-radius:var(--radius-lg);background:var(--olive-soft)}
.pay-net strong{font-size:26px;font-family:var(--display)}
.pay-missing.open{border-color:var(--danger);background:var(--danger-soft)}
.pay-blockers{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.pay-blockers li{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:8px 12px;border-radius:var(--radius);background:var(--surface);border:1px solid var(--line)}
.pay-blockers li>div{display:grid;gap:2px}
.pay-blockers li.waived{opacity:.75}
.pay-calc{grid-template-columns:minmax(140px,auto) 1fr}
.pay-calc dd{overflow-wrap:anywhere}
.pay-modes .card.chosen{border-color:var(--olive);background:var(--olive-soft)}
.pay-print-only{display:none}
@media(max-width:640px){.pay-sheet{padding:14px}.pay-blockers li{flex-direction:column;align-items:flex-start}.pay-net strong{font-size:22px}}
@media print{
  .pay-noprint,.page-tabs,.page-heading,#app-message,.table-tools{display:none!important}
  dialog:not([open]){display:none!important}
  .pay-print-only{display:block}
  .pay-brand{font-family:var(--display);font-size:18px;margin:0 0 4px}
  body,.app-content,.app-main{background:#fff!important}
  .app-content{padding:0!important}
  .pay-sheet{border:0;padding:0;background:#fff}
  .pay-sheet .card,.pay-net{break-inside:avoid}
  button.pay-amount{text-decoration:none}
  .pay-step{border-color:#999}.pay-step.current{background:#fff;color:#000;border:2px solid #000}
}

/* ---- Production calendar and report (migration 075, public/js/production.js) ---- */
.segmented{display:inline-flex;border:1px solid var(--line-strong);border-radius:20px;overflow:hidden}
.segmented button{border:0;border-radius:0;min-height:32px;padding:5px 14px;font-size:13px;background:var(--surface);color:var(--text)}
.segmented button[aria-pressed=true]{background:var(--olive);color:#fff}
.cal-nav{gap:6px;flex-wrap:nowrap}
.cal-title{min-width:150px;text-align:center}
.prod-cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.prod-cal-head{font:600 12px/1.2 var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);padding:2px 6px}
button.prod-day{display:grid;gap:4px;align-content:start;justify-items:start;text-align:left;min-height:104px;padding:8px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);color:var(--text);font-weight:400;white-space:normal}
.prod-cal.week button.prod-day{min-height:190px}
button.prod-day:hover{border-color:var(--olive)}
button.prod-day.other{background:transparent;color:var(--muted)}
button.prod-day.today{border-color:var(--olive);box-shadow:inset 0 3px 0 var(--olive)}
.prod-day-date{display:flex;gap:6px;align-items:baseline}
.prod-day-date strong{font-size:17px}
.prod-day-date small{font-size:11.5px}
.prod-day-lines{display:grid;gap:1px;font-size:12.5px;line-height:1.3}
.prod-day-lines .muted{color:var(--muted)}
.prod-day-flags{display:flex;gap:4px;flex-wrap:wrap}
.prod-day-flags .badge{font-size:11px;padding:1px 7px}
.prod-sheet-head h2{margin:0}
button.figure-link{min-height:0;padding:0 2px;border:0;border-radius:4px;background:none;color:var(--text);font:inherit;font-weight:600;text-decoration:underline;text-decoration-color:var(--line-strong);text-underline-offset:3px;cursor:pointer}
button.figure-link:hover{text-decoration-color:var(--olive);color:var(--olive-dark)}
button.figure-link.item-link{text-align:left;white-space:normal}
.muted-figure{color:var(--muted)}
.plan-cell{display:grid;justify-items:end;gap:2px}
input.plan-input{width:104px;text-align:right;min-height:34px;padding:4px 8px}
.plan-status{font-size:12px;color:var(--muted);min-height:15px;max-width:220px;text-align:right}
.plan-status[data-state=ok]{color:var(--ok)}
.plan-status[data-state=ok]::before{content:'✓ '}
.plan-status[data-state=error]{color:var(--danger);font-weight:600}
.prod-basis strong{display:block}
.prod-filters .field-error{flex:1 1 100%}
.prod-filters .field-error:empty{display:none}
.prod-rankings{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(340px,1fr))}
.prod-rankings h2{margin:0}
.share{display:inline-flex;align-items:center;gap:6px;justify-content:flex-end;min-width:90px}
.share i{display:block;height:8px;min-width:2px;max-width:60px;border-radius:0 4px 4px 0;background:var(--olive)}
tr.today-row td{background:var(--olive-soft)}
.prod-chart-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
.prod-chart-legend i,.prod-chart-tip i{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:5px}
.prod-chart-plot{position:relative}
.prod-chart-svg{display:block;width:100%;height:auto;touch-action:pan-y}
.prod-chart-svg .grid{stroke:var(--line);stroke-width:1}
.prod-chart-svg .cross{stroke:var(--line-strong);stroke-width:1}
.prod-chart-svg .tick{font:11px var(--sans);fill:var(--muted)}
.prod-chart-tip{position:absolute;top:4px;display:grid;gap:2px;width:180px;padding:8px 10px;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:var(--shadow);font-size:12.5px;pointer-events:none}
@media(max-width:760px){
  .prod-cal{grid-template-columns:1fr}
  .prod-cal-head{display:none}
  button.prod-day,.prod-cal.week button.prod-day{min-height:0;grid-template-columns:86px minmax(0,1fr);align-items:start}
  button.prod-day.other{display:none}
  .prod-cal.month button.prod-day:not(.busy):not(.today){display:none}
  .prod-day-flags{grid-column:2}
  .cal-title{min-width:0}
  .plan-cell{justify-items:start}
  .plan-status{text-align:left}
  .prod-rankings{grid-template-columns:1fr}
}
.prod-cal-phone-note{display:none}
@media(max-width:760px){.prod-cal-phone-note{display:block}}

/* ---- Sales import & product performance (migration 073) ------------------- */
.sales-review{display:grid;grid-template-columns:minmax(0,4fr) minmax(0,7fr);gap:16px;align-items:start}
.sales-review .table-wrap{overflow-x:auto}
.sales-source{position:sticky;top:12px;max-height:calc(100vh - 24px);overflow:auto}
.sales-pdf-pages{display:grid;gap:10px}
.sales-pdf-pages canvas{width:100%;height:auto;border:1px solid var(--line);border-radius:var(--radius);background:#fff}
.sales-facts{display:grid;gap:8px 16px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.sales-facts>div{display:grid;gap:1px}
.sales-facts span{font-size:12.5px;color:var(--muted)}
.sales-facts strong{font-weight:600;overflow-wrap:anywhere}
.sales-log{display:grid;gap:8px;margin:8px 0 0;padding:0;list-style:none}
.sales-log li{display:grid;gap:1px;font-size:14px}
.sales-log li strong{font-size:12.5px;color:var(--muted);font-weight:600}
.sales-completeness{display:grid;gap:8px}
.sales-cal-row{display:grid;grid-template-columns:110px minmax(0,1fr);gap:10px;align-items:center}
.sales-cal{display:flex;flex-wrap:wrap;gap:3px}
.sales-cal i,.sales-cal-legend i{display:inline-block;width:14px;height:14px;border-radius:4px;border:1px solid var(--line-strong);background:transparent}
.sales-cal i.import,.sales-cal-legend i.import{background:var(--olive);border-color:var(--olive)}
.sales-cal i.manual,.sales-cal-legend i.manual{background:var(--clay-soft);border-color:var(--clay)}
.sales-cal-legend{display:flex;flex-wrap:wrap;gap:14px;font-size:13px;color:var(--muted)}
.sales-cal-legend span{display:inline-flex;align-items:center;gap:6px}
.sales-classes{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(190px,1fr))}
button.sales-class{display:grid;gap:4px;justify-items:start;text-align:left;min-height:0;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);color:var(--text);font:inherit}
button.sales-class strong{font-size:22px;line-height:1.1}
button.sales-class small{font-size:12.5px;color:var(--muted);font-weight:400;white-space:normal}
button.sales-class.chosen{border-color:var(--olive);background:var(--olive-soft)}
.sales-actions{display:grid;gap:10px;margin:0;padding:0;list-style:none}
.sales-actions li{display:grid;grid-template-columns:auto auto minmax(0,1fr);gap:8px 10px;align-items:baseline;font-size:14px}
svg.sales-spark{width:64px;height:20px;fill:var(--olive);flex:none}
.sales-lines-grid{max-height:46vh;overflow:auto}
.sales-lines-grid input{min-height:34px;padding:4px 8px;width:100%;min-width:70px}
@media(max-width:980px){
  .sales-review{grid-template-columns:1fr}
  .sales-source{position:static;max-height:none}
  .sales-actions li{grid-template-columns:1fr}
  .sales-cal-row{grid-template-columns:1fr}
}

/* ---- Purchasing documents (migration 072, public/js/purchasing.js): order and invoice forms, pickers, viewer, import ---- */
.pur-combo{position:relative;min-width:0}
.pur-combo-list{position:absolute;z-index:30;left:0;right:0;top:calc(100% + 4px);margin:0;padding:4px;list-style:none;max-height:300px;min-width:260px;overflow:auto;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:var(--shadow-pop)}
.pur-combo-list li{display:grid;gap:1px;padding:8px 10px;border-radius:6px;cursor:pointer;font-size:14.5px}
.pur-combo-list li small{font-size:12.5px;color:var(--muted)}
.pur-combo-list li[aria-selected=true],.pur-combo-list li[role=option]:hover{background:var(--olive-soft)}
.pur-combo-list li.pur-combo-empty{cursor:default;color:var(--muted);font-size:13px}
input.pur-num{text-align:right}
.pur-head .form-grid{align-items:start}
.pur-terms{margin-top:2px}
.pur-lines{display:grid;gap:8px;container:purlines/inline-size}
.pur-line{display:grid;gap:8px 10px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--paper)}
.pur-line-order{grid-template-columns:minmax(0,2.4fr) 110px minmax(0,2fr) 110px 40px}
.pur-line-doc{grid-template-columns:minmax(0,2.6fr) minmax(110px,1fr) 110px 120px 110px 40px}
.pur-lines.with-extra .pur-line-doc{grid-template-columns:minmax(0,2.2fr) minmax(100px,1fr) 96px 110px 96px 96px 104px 40px}
.pur-lines:not(.with-extra) .pur-extra{display:none}
.pur-line-head{padding:0 12px;border:0;background:transparent;font-size:12px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:700}
.pur-line .num,.pur-line-head .num{text-align:right}
.pur-line-total{font-weight:600}
.pur-line>.field-error,.pur-line>.pur-line-more,.pur-line>.pur-line-source{grid-column:1/-1}
.pur-line>.field-error:empty,.pur-line>.pur-line-more:empty{display:none}
.pur-line-more{display:flex;gap:8px 12px;flex-wrap:wrap;align-items:center}
.pur-line-more input[type=text]{flex:1 1 260px;min-height:36px}
.pur-inline{display:flex;flex-direction:row;align-items:center;gap:8px;font-weight:400;font-size:13px}
.pur-inline input{width:96px;min-height:36px}
.pur-cell{min-width:0}
.pur-total-bar{position:sticky;bottom:0;z-index:20;display:flex;gap:12px 18px;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius-lg);box-shadow:0 -4px 16px #2a171014}
.pur-total-figures{display:flex;gap:6px 16px;flex-wrap:wrap;align-items:baseline;color:var(--muted);font-size:14px}
.pur-total{font-size:19px;color:var(--text)}
.pur-save{font-size:13px;color:var(--muted)}
.pur-save[data-state=ok]::before{content:'✓ ';color:var(--ok)}
.pur-save[data-state=error]{color:var(--danger);font-weight:600}
.pur-resume{display:flex;gap:10px;flex-wrap:wrap;align-items:center;justify-content:space-between}
.pur-review-total{display:flex;gap:14px;flex-wrap:wrap;justify-content:flex-end;align-items:baseline;color:var(--muted)}
.pur-review-total strong{font-size:20px;color:var(--text)}
.pur-happens{margin-top:0}
input.pur-uncertain,select.pur-uncertain{background:var(--warn-soft);border-color:var(--warn);box-shadow:inset 3px 0 0 var(--warn)}
input.pur-read,select.pur-read{box-shadow:inset 3px 0 0 var(--olive)}
.pur-split{display:grid;gap:16px;align-items:start}
.pur-split.has-source{grid-template-columns:minmax(0,1.15fr) minmax(320px,.85fr)}
.pur-source{position:sticky;top:calc(var(--topbar) + 12px);max-height:calc(100vh - var(--topbar) - 24px);overflow:auto;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:12px}
.pur-viewer{display:grid;gap:8px}
.pur-viewer-bar{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.pur-viewer-bar button{min-height:32px;padding:4px 10px}
.pur-viewer-bar select{width:auto;min-height:32px;padding:4px 8px}
.pur-viewer-page{font-size:13px;color:var(--muted)}
.pur-viewer-stage{overflow:auto;max-height:70vh;border:1px solid var(--line);border-radius:var(--radius);background:#fff;min-height:160px;display:grid;justify-items:start}
.pur-viewer-stage canvas,.pur-viewer-stage img{display:block;max-width:none}
.pur-viewer-stage img{width:100%}
.pur-viewer-stage .spinner{margin:40px auto;justify-self:center}
.pur-attach-list{display:flex;gap:8px;flex-wrap:wrap}
.pur-attach{display:inline-flex;align-items:center;gap:6px;padding:4px 6px 4px 12px;border:1px solid var(--line);border-radius:20px;background:var(--paper);font-size:13.5px}
.pur-attach button{min-height:28px;padding:2px 8px}
.pur-receive{display:grid;gap:10px;margin-top:6px;padding:12px 14px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--olive-soft)}
.pur-receive-check>span{display:grid;gap:2px}
.pur-doc-head{margin-top:6px}
.pur-posted .metric strong{font-size:20px}
dialog.pur-chain,dialog.pur-wide{width:min(1040px,calc(100vw - 24px))}
dialog.pur-wide .pur-source{position:static;max-height:none}
.pur-counts{gap:6px}
tr.pur-row-error td{background:var(--danger-soft)}
@media(max-width:1100px){.pur-split.has-source{grid-template-columns:1fr}.pur-source{position:static;max-height:none;order:-1}.pur-source .pur-viewer-stage{max-height:46vh}}
@container purlines (max-width:700px){
  .pur-line-head{display:none}
  .pur-line-order,.pur-line-doc,.pur-lines.with-extra .pur-line-doc{grid-template-columns:1fr 1fr;padding:12px}
  .pur-line .pur-cell:first-child,.pur-line-info{grid-column:1/-1}
  .pur-cell[data-label]::before{content:attr(data-label);display:block;font-size:12.5px;color:var(--muted);margin-bottom:3px}
  .pur-line>button.icon{justify-self:end}
  .pur-line .pur-cell.num{text-align:left}
}
@media(max-width:760px){
  .pur-line input,.pur-line select{min-height:46px;font-size:16px}
  .pur-line>button.icon{min-width:44px;min-height:44px}
  .pur-total-bar{margin:0 -4px;padding:10px 12px;border-radius:var(--radius)}
  .pur-total-bar .row{flex:1 1 100%}.pur-total-bar .row button{flex:1;min-height:46px}
  .pur-head input,.pur-head select{min-height:46px;font-size:16px}
  .pur-combo-list{max-height:46vh}.pur-combo-list li{padding:11px 10px}
}

/* ---- Month-end, profit & loss, expenses, business performance (migration 076, public/js/month-end.js) ---- */
.me-close>.row{align-items:center}
.me-close>.row h2{margin:0;font-size:18px}
.me-close>.row .spacer{flex:1}
ul.me-checks{list-style:none;margin:0;padding:0;display:grid;gap:6px}
ul.me-checks>li{display:flex;gap:10px;align-items:flex-start;padding:8px 10px;border-radius:var(--radius);background:var(--bg)}
ul.me-checks>li>div{display:grid;gap:2px;min-width:0;flex:1}
ul.me-checks .me-mark{flex:0 0 22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:700;background:var(--ok-soft);color:var(--ok)}
ul.me-checks li.open .me-mark{background:var(--danger-soft);color:var(--danger)}
ul.me-checks li.warn .me-mark{background:var(--warn-soft);color:var(--warn)}
ul.me-checks details ul{margin:6px 0 0;padding-left:18px;display:grid;gap:4px;font-size:13.5px}
tr.me-total td{font-weight:700;border-top:2px solid var(--line-strong);background:var(--olive-soft)}
table.me-roll td.num,table.me-pnl-table td.num{white-space:nowrap}
.me-banner ul{margin:6px 0 0;padding-left:20px;display:grid;gap:2px}
.me-two{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(min(100%,380px),1fr));align-items:start}
.me-policies dl{margin:0;display:grid;gap:4px}
.me-policies dt{font-weight:600;margin-top:8px}
.me-policies dd{margin:0;color:var(--muted);font-size:14px}
.me-print-head h2{margin:0}
.me-kpis{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(210px,1fr))}
.me-kpi{margin:0}
.me-kpi strong.me-na{font-size:17px;color:var(--muted);font-weight:500}
.me-kpi .me-why{color:var(--warn)}
.me-target{width:100%;height:6px;border-radius:3px;background:var(--line);overflow:hidden;margin-top:4px}
.me-target i{display:block;height:100%;background:var(--clay);border-radius:3px}
.me-target i.met{background:var(--olive)}
.me-charts{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr))}
figure.me-chart{margin:0}
.me-chart-plot{position:relative}
.me-chart-svg{display:block;width:100%;height:auto}
.me-chart-svg .grid{stroke:var(--line);stroke-width:1}
.me-chart-svg .zero{stroke:var(--line-strong);stroke-width:1}
.me-chart-svg .tick{font:11px var(--sans);fill:var(--muted)}
.me-chart-svg .bar{fill:var(--olive)}
.me-chart-svg .line{fill:none;stroke:var(--olive);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.me-chart-svg .dot{fill:var(--olive);stroke:var(--surface);stroke-width:2}
.me-chart-svg .target{stroke:var(--espresso);stroke-width:2;stroke-dasharray:4 3}
.me-chart-svg .hit{fill:transparent;outline:none}
.me-chart-svg .hit:hover,.me-chart-svg .hit:focus{fill:#2a17100d}
.me-chart-tip{position:absolute;top:4px;display:grid;gap:2px;min-width:150px;padding:8px 10px;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:var(--shadow);font-size:13px;pointer-events:none}
.me-legend i{display:inline-block;vertical-align:middle;margin-right:5px}
.me-key-bar{width:12px;height:10px;border-radius:2px;background:var(--olive)}
.me-key-target{width:16px;height:0;border-top:2px dashed var(--espresso)}
.me-defs td{vertical-align:top;font-size:13.5px}
@media (max-width:700px){.me-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.me-kpi strong{font-size:20px}}
@media print{
  .me-noprint,.me-pnl .figure-link{text-decoration:none}
  .me-noprint{display:none!important}
  .me-pnl .card{break-inside:avoid;border-color:#bbb;background:#fff}
  .me-pnl .me-banner{border:1px solid #999;background:#fff;color:#000}
  .me-pnl button.figure-link{color:#000;text-decoration:none}
}

/* ---- Users & permissions: several scoped roles (068) ---------------------- */
fieldset.custom-field{border:1px solid var(--line,#d9cfbf);border-radius:16px;padding:14px 16px;display:grid;gap:10px;min-width:0}
.assignments{display:grid;gap:12px;min-width:0}
.assignment-list{display:grid;gap:10px}
.assignment{border:1px solid var(--line,#d9cfbf);border-radius:14px;padding:12px 14px;background:#fffdf9;display:grid;gap:8px}
.assignment-head{display:flex;gap:12px;justify-content:space-between;align-items:flex-start}
.assignment-head p{margin:2px 0 0;white-space:normal;overflow-wrap:anywhere}
.assignment-scope{display:flex;flex-wrap:wrap;gap:6px 18px}
.role-picker{display:grid;gap:6px}
.role-results{display:grid;gap:6px;max-height:220px;overflow:auto;padding:2px}
.role-option{display:grid;gap:2px;text-align:left;justify-items:start;width:100%;border:1px solid var(--line,#d9cfbf);border-radius:12px;background:#fbf7f0;padding:9px 12px;cursor:pointer;white-space:normal;height:auto;min-height:0}
.role-option:hover,.role-option:focus-visible{border-color:#6b704f;background:#f3ebdd}
.role-option .small{white-space:normal;overflow-wrap:anywhere}
.effective-wrap>summary{cursor:pointer;font-weight:600;padding:6px 0}
.effective{display:grid;gap:8px;max-height:320px;overflow:auto}
.effective-row{display:grid;grid-template-columns:minmax(120px,190px) 1fr;gap:10px;border-top:1px solid var(--line,#e6dccb);padding-top:8px}
.effective-row ul{margin:0;padding:0;list-style:none;display:grid;gap:3px}
.effective-action{font-weight:600}
.role-chips{display:flex;flex-wrap:wrap;gap:6px}
.role-chip{display:inline-grid;border:1px solid var(--line,#d9cfbf);border-radius:12px;padding:4px 10px;background:#fbf7f0;font-size:.86rem;line-height:1.25}
.role-chip span{color:#6b5d50;font-size:.8rem}
.role-chip.is-archived{opacity:.6;text-decoration:line-through}
@media (max-width:640px){.effective-row{grid-template-columns:1fr}.assignment-head{flex-direction:column}}

/* Embedded Team pages: one page scroll, no frame-in-a-frame. */
.team-admin-frame{height:560px;min-height:360px;border:0;border-radius:0;background:transparent;display:block;overflow:hidden}

/* =====================================================================================================================
   Shared refinements (one place for what several feature screens need)
   ===================================================================================================================== */
/* “Discard changes?” and the offer to restore what was typed before an automatic sign-out */
dialog.discard-dialog{width:min(420px,calc(100vw - 24px))}
.dialog-actions{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}
.restore-typed{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
/* tab bars: one line, scroll sideways, a faded edge where more tabs are hidden */
.page-tabs{scrollbar-width:none;-webkit-overflow-scrolling:touch;scroll-behavior:smooth}
.page-tabs::-webkit-scrollbar{display:none}
.page-tabs button{flex:none;white-space:nowrap}
.page-tabs.more-right{-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 44px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 44px),transparent)}
.page-tabs.more-left{-webkit-mask-image:linear-gradient(to left,#000 calc(100% - 44px),transparent);mask-image:linear-gradient(to left,#000 calc(100% - 44px),transparent)}
.page-tabs.more-left.more-right{-webkit-mask-image:linear-gradient(to right,transparent,#000 44px,#000 calc(100% - 44px),transparent);mask-image:linear-gradient(to right,transparent,#000 44px,#000 calc(100% - 44px),transparent)}
/* row actions stay on one line on a wide screen (they stack only in the phone card layout) */
td.actions .row,td.actions>div{flex-wrap:nowrap;justify-content:flex-end;gap:6px}
@media(max-width:640px){
  td.actions .row,td.actions>div{flex-wrap:wrap}
  /* header actions: the screen's own buttons share the rows; Refresh and Print are icon buttons at the end */
  .page-actions>*{flex:1 1 auto}
  .page-actions>.compact-action{flex:0 0 46px;min-width:46px;padding:0;justify-content:center}
  .page-actions>.compact-action>span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
}

/* ---- Settings centre (public/js/settings-centre.js): home, group pages, access & permissions ---- */
.crumb button.crumb-link{all:unset;cursor:pointer;color:var(--muted);opacity:.85;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.crumb button.crumb-link:hover{color:var(--clay-dark);text-decoration:underline}
.crumb button.crumb-link:focus-visible{outline:2px solid var(--clay);outline-offset:2px;border-radius:4px}
.set-back{margin:-6px 0 10px}
.set-back button{padding-left:6px}
.set-section-title{margin:22px 0 8px;font-size:18px}
.set-search{margin-bottom:14px}
.set-groups{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(290px,1fr))}
.set-group-card{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-areas:'icon text' 'foot foot';gap:10px 12px;align-items:start;justify-content:stretch;text-align:left;white-space:normal;height:auto;min-height:0;padding:16px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);font-weight:400}
.set-group-card:hover{background:var(--surface);border-color:var(--olive);box-shadow:var(--shadow)}
.set-group-icon{grid-area:icon;width:38px;height:38px;border-radius:50%;background:var(--olive-soft);color:var(--olive-dark);display:grid;place-items:center}
.set-group-text{grid-area:text;display:grid;gap:3px;min-width:0}
.set-group-text strong{font-family:var(--display);font-weight:500;font-size:17px;line-height:1.25}
.set-group-foot{grid-area:foot;display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;padding-top:10px;border-top:1px solid var(--line)}
.set-group-card .badge,.set-row .badge,.set-result .badge{text-transform:none}
.set-results{display:grid;gap:8px;margin-bottom:16px}
.set-result{display:flex;gap:12px;align-items:center;justify-content:flex-start;text-align:left;white-space:normal;height:auto;padding:10px 14px;font-weight:400}
.set-result-text{display:grid;gap:1px;min-width:0}
.set-result .badge{flex:none;min-width:64px;justify-content:center}
.card.set-list{padding:0;gap:0}
.set-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,360px);gap:14px 28px;padding:18px;border-top:1px solid var(--line);align-items:start}
.set-row:first-child{border-top:0}
.set-row.is-found,.set-link.is-found{background:var(--warn-soft);transition:background .6s}
.set-info{display:grid;gap:6px;min-width:0}
.set-head{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center}
.set-head h3{font-size:16px}
.set-info .notice{font-size:13.5px;padding:8px 12px}
.set-meta{display:flex;flex-wrap:wrap;gap:2px 4px;align-items:center}
button.set-linkbutton{all:unset;cursor:pointer;color:var(--clay-dark);font-size:13px;font-weight:500;text-decoration:underline;text-underline-offset:2px}
button.set-linkbutton:focus-visible{outline:2px solid var(--clay);outline-offset:2px;border-radius:4px}
.set-side{display:grid;gap:6px;min-width:0}
.set-unit-title{font-size:12px;letter-spacing:.05em;text-transform:uppercase;font-weight:700;color:var(--muted)}
.set-unit{display:grid;gap:8px;min-width:0}
.set-unit[data-dirty=true]{padding:10px;margin:-10px;border-radius:var(--radius);background:var(--clay-soft)}
.set-with-unit{display:flex;align-items:center;gap:8px;min-width:0}
.set-with-unit>input,.set-with-unit>select{flex:1 1 auto;min-width:0}
.set-suffix{color:var(--muted);font-size:13px;flex:0 1 auto;max-width:50%}
.set-actions{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.set-readonly{display:flex;gap:6px;align-items:flex-start}
.set-readonly svg{flex:none;width:15px;height:15px;margin-top:2px}
.set-reason-text{color:var(--warn)}
label.set-switch{position:relative;display:inline-flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:10px;font-weight:500;cursor:pointer;min-height:40px}
label.set-switch input{position:absolute;opacity:0;width:46px;height:26px;margin:0;cursor:pointer}
.set-switch-track{flex:none;width:46px;height:26px;border-radius:13px;background:var(--line-strong);position:relative;transition:background .15s}
.set-switch-track::after{content:'';position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #2a171033;transition:left .15s}
.set-switch input:checked+.set-switch-track{background:var(--olive)}
.set-switch input:checked+.set-switch-track::after{left:23px}
.set-switch input:indeterminate+.set-switch-track{background:var(--warn-soft);outline:1px dashed var(--warn)}
.set-switch input:indeterminate+.set-switch-track::after{left:13px}
.set-switch input:focus-visible+.set-switch-track{outline:2px solid var(--clay);outline-offset:2px}
.set-switch input:disabled+.set-switch-track{opacity:.55}
.set-locations{grid-column:1/-1;display:grid;gap:10px;padding:14px;border-radius:var(--radius);background:var(--paper);border:1px solid var(--line)}
.set-locations h4{font-family:var(--sans);font-weight:700;font-size:14px}
.set-location{display:grid;grid-template-columns:minmax(0,1fr) minmax(240px,340px);gap:10px 24px;align-items:start;padding-top:10px;border-top:1px solid var(--line)}
.set-location.is-warehouse .set-location-name{padding-left:18px}
.set-location-name{display:grid;gap:2px;min-width:0}
.set-table{display:grid;gap:8px}
.set-table.is-invalid .table-wrap{border-color:var(--danger)}
.set-table td{padding:6px 8px}.set-table input[type=text]{min-height:34px;min-width:90px}
.set-links{display:grid}
.set-link{display:flex;gap:14px;align-items:center;justify-content:space-between;padding:14px 18px;border-top:1px solid var(--line)}
.set-link:first-child{border-top:0}
.set-link>div{min-width:0;display:grid;gap:2px}
.set-link>button{flex:none}
table.set-matrix tr.set-matrix-module th{position:sticky;left:0;top:auto;text-align:left;background:var(--olive-soft);color:var(--olive-dark);text-transform:none;letter-spacing:0;font-size:13.5px;white-space:normal}
table.set-matrix tr.set-matrix-module th .small{font-weight:400}
table.set-matrix td:first-child{min-width:170px}
.matrix-tag{font-size:11px;font-weight:700;color:var(--olive-dark);background:var(--olive-soft);border-radius:10px;padding:0 6px;margin-left:4px;align-self:center}
.set-person-cells{display:grid;gap:6px;white-space:normal;min-width:240px}
.set-person-line{display:grid;gap:1px}
.set-person-line strong{font-weight:500;font-size:13.5px}
td.set-person-can{white-space:normal}
label.set-everyone{align-self:center;flex:0 1 auto!important;min-width:0!important}
.set-history table{font-size:13.5px}
/* the permission matrix has one column more (“Approve own entries”): long headings wrap instead of widening the table */
table.matrix thead th{white-space:normal;line-height:1.25;vertical-align:bottom}
table.matrix thead th:not(:first-child){max-width:92px}
#my-preferences{max-width:620px}
.set-foot{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;justify-content:space-between}
.set-foot .field-hint{flex:1 1 150px}
/* role picker: each choice shows its whole name and description */
.role-results{align-content:start;grid-auto-rows:max-content}
.role-option{justify-content:stretch;align-content:start}
/* role assignment: warehouses under their shop or factory */
.assignment-tree{display:grid;gap:8px;flex:1 1 100%}
.assignment-branch{display:grid;gap:6px}
.assignment-warehouses{display:grid;gap:5px;margin-left:28px;padding-left:12px;border-left:2px solid var(--line)}
/* fixed rules shown for information (082): text across the row, an optional button to where the rule is changed */
.set-info-row{grid-template-columns:minmax(0,1fr) auto}
.set-info-text{font-size:14.5px;line-height:1.5;max-width:76ch}
.set-info-row .set-side{align-self:center;justify-items:end}
.set-none{max-width:76ch}
/* recruitment list: the shared table footer under a card list (082) */
.career-foot{border:1px solid var(--line);border-radius:var(--radius);margin:10px 0 16px;background:var(--surface)}
/* stock on hand by warehouse (082) */
.wh-stock-group{margin-bottom:16px}
.wh-stock-group h3{font-size:16px;margin:0 0 6px;display:flex;flex-wrap:wrap;gap:6px 10px;align-items:baseline}
.wh-stock-group h3 .small{font-family:var(--sans);font-weight:400}
@media(max-width:960px){.crumb button.crumb-link{display:none}}
@media(max-width:760px){
  .set-row,.set-location{grid-template-columns:1fr}
  .set-row{padding:14px}
  .set-link{flex-direction:column;align-items:stretch}
  .set-link>button{align-self:flex-start}
  .set-groups{grid-template-columns:1fr}
  .set-person-cells{min-width:0}
  table.stackable td.set-person-can{flex-direction:column;text-align:left;gap:4px}
}

/* =====================================================================================================================
   Printing (every screen). Paper gets: a header (business name, report title, filters in force, time of printing),
   the content at full width, tables that wrap instead of scrolling — and none of the page chrome, filters or buttons.
   Page size and orientation come from shell.js (@page, landscape for wide reports).
   ===================================================================================================================== */
.print-header{display:none}
@media print{
  html,body,body.bb-portal{background:#fff!important;color:#000}
  .sidebar,.app-topbar,.page-actions,.app-footer,.toasts,.page-tabs,.page-heading,#app-message,.nav-backdrop,.login-screen,
  .table-tools,.table-foot .pager,.wf-stock-toolbar,.proc-toolbar,.dash-toolbar,.wf-count-footer,.pur-total-bar,.dialog-foot,
  td.actions,th.actions,.wf-row-actions,.proc-row-actions,.wf-stock-actions,.restore-typed,.spinner{display:none!important}
  .app-shell{display:block!important}.app-main{display:block!important;min-width:0}
  .app-content{padding:0!important;max-width:none!important;margin:0!important}
  .print-header{display:block;margin:0 0 10px;padding:0 0 8px;border-bottom:1.5px solid #000;font-family:var(--body,inherit)}
  .print-header-top{display:flex;justify-content:space-between;gap:16px;font-size:10pt}
  .print-header h1{margin:4px 0 0;font-family:var(--display);font-size:17pt;line-height:1.2;color:#000}
  .print-header p{margin:4px 0 0;font-size:9.5pt;color:#333}
  /* tables: natural layout, small type, wrapped cells, repeated header row, no scrolling box */
  .table-wrap,.proc-table-wrap,.dash-table-wrap,.import-preview,.matrix-wrap,.sales-review .table-wrap,[class*=table-wrap],[class*=-scroll]{overflow:visible!important;max-width:none!important;max-height:none!important;border:0!important;border-radius:0!important;background:#fff!important}
  #workflow-panel,#workflow-panel *,dialog[open],dialog[open] *{max-height:none!important}
  #workflow-panel{overflow:visible!important}
  table{table-layout:auto!important;width:100%!important;min-width:0!important;font-size:8.5pt!important;border-collapse:collapse}
  th,td{position:static!important;white-space:normal!important;overflow-wrap:anywhere;word-break:normal;padding:3px 5px!important;border-bottom:.5pt solid #999!important;background:#fff!important;color:#000!important;min-width:0!important;max-width:none!important}
  th{font-size:7.5pt!important;letter-spacing:0!important;border-bottom:1pt solid #000!important}
  td.num,th.num{white-space:nowrap!important}
  thead{display:table-header-group}tr{break-inside:avoid}
  th button.sort::after{content:none!important}
  td button,td a{all:unset;font:inherit;color:inherit}
  td .badge,.badge{border:.5pt solid #777;background:#fff!important;color:#000!important;padding:0 4px}
  /* phone card tables print as tables again */
  table.stackable thead{display:table-header-group!important}table.stackable tr{display:table-row!important;padding:0}
  table.stackable td{display:table-cell!important;text-align:left}table.stackable td.num{text-align:right}table.stackable td::before{content:none!important}
  /* cards and grids */
  .card,.wf-card,.dash-panel,.settings-card,.me-kpi,.metric{box-shadow:none!important;background:#fff!important;border-color:#bbb!important;break-inside:avoid}
  .metrics,.dash-metrics,.me-kpis{break-inside:avoid}
  .wf-order-summary,.pur-source,.sales-source,th,.wf-count-footer{position:static!important}
  input,select,textarea{border:.5pt solid #999!important;background:#fff!important;color:#000!important}
  a{color:#000;text-decoration:none}
  /* an open dialog (a document view) is what gets printed, not the page behind it */
  body:has(dialog[open]) .app-shell{display:none!important}
  body:has(dialog[open])>.print-header{display:none!important}
  dialog[open]{position:absolute!important;inset:0 0 auto 0!important;transform:none!important;width:100%!important;max-width:none!important;height:auto!important;margin:0!important;padding:0!important;border:0!important;box-shadow:none!important;overflow:visible!important;background:#fff!important}
  dialog[open] h2:first-of-type{display:none}
  dialog[open]:not(:last-of-type){display:none!important}
  dialog::backdrop{display:none;background:transparent}
  dialog[open] form>button,dialog[open] .dialog-body>button{display:none!important}
  /* action buttons are not printed; buttons that carry a figure or a name inside a table print as text */
  #workflow-panel :is(button.primary,button.secondary,button.danger,button.ghost,button.icon):not(td *):not(th *),dialog[open] :is(button.primary,button.secondary,button.danger,button.ghost):not(td *):not(th *){display:none!important}
}

/* ---- Sales policies (migration 080, public/js/sales-reports.js): insufficient-stock warning, approval and exceptions ---- */
.sales-stock-banner{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}
.sales-stock-banner span{flex:1 1 320px}
.sales-stock-card .notice{font-size:14px}
table.sales-short td strong{font-weight:700}
.sales-stock-dialog .dialog-body>.row{flex-wrap:wrap}
.sales-stock-dialog textarea{width:100%}
.sales-stock-dialog ul{margin:6px 0 0;padding-left:18px}

/* ---- Sales per shift (migration 094, public/js/sales-reports.js): shift switch, completeness, shift card, exceptions ---- */
.sales-shift-pick{display:grid;gap:4px;font-size:13px;color:var(--muted)}
.sales-shift-switch{flex-wrap:wrap;border-radius:16px}
.sales-shift-switch button{min-height:38px;padding:6px 16px;font-size:14px}
.sales-cal i.incomplete,.sales-cal-legend i.incomplete{background:linear-gradient(135deg,var(--olive) 50%,var(--warn-soft) 50%);border-color:var(--warn)}
.sales-shift-record{display:flex;flex-wrap:wrap;gap:6px 8px;align-items:center;font-size:14px}
.sales-breakdown{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(min(100%,400px),1fr));align-items:start}
.sales-shift-card h4{margin:6px 0 0;font-size:14px}
.sales-shift-card .notice{font-size:14px}
.sales-steps li{grid-template-columns:minmax(120px,190px) minmax(0,1fr);gap:2px 10px;color:var(--muted)}
.sales-steps li.done{color:var(--text)}
.sales-exception-detail{display:block;max-width:560px;font-size:13.5px;white-space:normal;overflow-wrap:anywhere}
@media (max-width:720px){
  .sales-shift-pick{flex:1 1 100%}
  .sales-shift-switch{display:flex;width:100%}
  .sales-shift-switch button{flex:1 1 auto;min-height:44px}
  .sales-steps li{grid-template-columns:1fr}
  .sales-exception-detail{max-width:none}
  .sales-shift-record{justify-content:flex-end}
}
/* ---- end of sales per shift (094) ---- */

/* ---- Accounting policies (migration 081, public/js/month-end.js): financial rules, branch views, closing counts ---- */
.me-rule>.row{align-items:center;flex-wrap:wrap;gap:8px 10px}
.me-rule>.row h2{margin:0;font-size:17px}
.me-rule>.row .spacer{flex:1}
.me-rule-text{margin:8px 0 6px;max-width:92ch}
.me-rule details{margin-top:6px}
.me-rule details summary,.me-alloc-recon summary{cursor:pointer;font-weight:600;font-size:13.5px}
.me-rules-notice,.me-alloc-off,.me-hour-missing{border-left:4px solid var(--warn)}
.me-rules-line{margin-top:4px}
.me-alloc>.segmented{margin:2px 0 12px;max-width:100%;width:fit-content;justify-self:start}
.me-alloc .segmented button{white-space:normal;height:auto}
tr.me-pool td{color:var(--muted);font-style:italic}
tr.me-replaced td{color:var(--muted)}
td.me-result{font-weight:700}
table.me-alloc-edit input{width:110px;max-width:100%;text-align:right}
table.me-cost-edit select{min-width:190px;max-width:100%}
@media (max-width:700px){.me-alloc>.segmented{display:flex;width:auto;justify-self:stretch}.me-alloc .segmented button{flex:1}table.me-alloc-edit input{width:100%}}
@media print{
  .me-rules-notice{border:1px solid #999;background:#fff;color:#000}
  .me-alloc details{display:none}
}

/* ---- 083: role templates and cost visibility (Users, Roles & Permissions) ---- */
.role-section{margin-top:10px;padding-top:10px;border-top:1px solid var(--line,#e6dccb)}
.role-section:first-child{margin-top:0;padding-top:0;border-top:0}
.role-section h3{margin:0;font-size:.95rem}
.role-section p{margin:2px 0 0}
.effective-costs{border-top:0;padding-top:0}
.effective-costs[data-costs=no] .effective-action{font-weight:600}

/* ---- Stock per location with a consolidated view (migration 084, public/js/stock.js): location choice, overview, movements, low stock ---- */
.stk-picker{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.stk-chip{min-height:34px;padding:4px 12px;border-radius:20px;font-size:13.5px;gap:7px}
.stk-chip.is-warehouse{border-style:dashed}
.stk-chip[aria-pressed=true]{background:var(--espresso);border-color:var(--espresso);border-style:solid;color:#fff8ef}
.stk-dot{width:9px;height:9px;border-radius:50%;background:var(--clay);flex:none}
.stk-dot[data-kind=factory]{background:var(--info)}.stk-dot[data-kind=warehouse]{background:transparent;border:2px solid var(--muted);border-radius:2px}
.stk-several{margin-left:6px;font-size:13.5px;align-items:center}
.stk-place{display:inline-flex;gap:8px;align-items:center}
.stk-fresh strong{color:var(--text);font-weight:500}
.stk-kind{text-transform:none}
.stk-cards{margin-bottom:0}
.stk-card{border-left:4px solid var(--clay)}
.stk-card[data-kind=factory]{border-left-color:var(--info)}.stk-card[data-kind=warehouse]{border-left-color:var(--line-strong);border-left-style:dashed}
.stk-card[data-kind=transit]{border-left-color:var(--warn);background:var(--warn-soft);cursor:pointer;font:inherit;color:inherit;height:auto}
.stk-card[data-kind=total]{border-left-color:var(--olive)}
.stk-card strong.stk-money{font-size:20px}
.stk-card .stk-value:empty{display:none}
.stk-links{align-items:center}
.stk-open-all{margin-left:auto;font-size:13.5px;align-items:center}
.stk-tools{align-items:flex-end}
.table-tools.stk-tools label{min-width:130px;flex:0 1 190px}.table-tools.stk-tools label.grow{flex:1 1 220px}.table-tools.stk-tools label.stk-narrow{flex:0 1 130px}
.stk-toggles{display:flex;gap:6px;flex-wrap:wrap}
[aria-busy=true]>.table-wrap,[aria-busy=true]>.stk-cards{opacity:.55;transition:opacity .15s}
/* The rows of one location keep the hooks of the earlier Stock screen (wf-stock-row / wf-stock-right / wf-stock-actions); in a table they are table rows. */
@media(min-width:641px){
  table.stk-table tr.wf-stock-row{display:table-row}
  table.stk-table td.actions{white-space:normal}
}
table.stk-table,table.stk-by-location{font-size:13.5px}
table.stk-table th,table.stk-table td{padding:10px 10px}
table.stk-table td{vertical-align:top}
table.stk-table .wf-stock-right{display:inline-flex;justify-content:flex-end;flex-wrap:nowrap;gap:6px;align-items:baseline}
table.stk-table .wf-stock-right>span,.stk-qty>span{font-size:13px;color:var(--muted)}
.stk-qty{display:inline-flex;gap:6px;align-items:baseline;justify-content:flex-end}.stk-qty b{font-size:16px;font-weight:700}
.stk-name{min-width:210px}
.stk-title{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.stk-title .badge{text-transform:none}
.stk-money{white-space:nowrap}
td.num>.stk-v{display:grid;justify-items:end}
dialog.stk-wide{width:min(1080px,calc(100vw - 24px))}
.stk-sub{display:block;font-size:12.5px;line-height:1.35}
.stk-lines .stk-v>span{white-space:nowrap}
.stk-quiet{color:var(--muted)}.stk-muted{color:var(--muted)}
.stk-neg,.stk-minus{color:var(--danger)}.stk-plus{color:var(--ok)}
.stk-in{color:var(--warn)}.stk-out{color:var(--warn)}.stk-wait{color:var(--info)}
.stk-count{font-size:13.5px;min-width:150px}
button.stk-link,button.stk-expand{all:unset;cursor:pointer;font:inherit;color:var(--text);border-radius:4px}
button.stk-link{font-weight:500;text-decoration:underline dotted var(--line-strong);text-underline-offset:4px}
button.stk-link:hover{color:var(--clay-dark)}
button.stk-link:focus-visible,button.stk-expand:focus-visible{outline:2px solid var(--clay);outline-offset:2px}
button.stk-link.stk-same{display:block;font-size:12.5px;font-weight:400;color:var(--muted)}
button.stk-expand{display:inline-block;width:22px;text-align:center;color:var(--clay-dark);font-size:15px}
tr.stk-total-row>td,tr.stk-sum-row>td{background:var(--paper);font-weight:500}
.stk-history .badge,.stk-low .badge{text-transform:none}
tr.stk-nested>td{background:var(--surface)}
tr.stk-nested>td:first-child{padding-left:14px}
.stk-indent{display:inline-block;width:22px;height:1px}
.stk-row-tools{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-top:6px}
.stk-row-tools .wf-stock-actions:empty{display:none}
.stk-row-tools .wf-stock-actions button{min-height:28px;padding:2px 9px;font-size:12.5px}
button.stk-link.stk-mini{font-size:12.5px;font-weight:400;color:var(--muted)}
.stk-note{margin-top:-6px}
.stk-sums{gap:16px;font-size:14px}
.stk-doc{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.stk-source{min-width:170px}
.stk-low-title{display:flex;gap:8px;align-items:center;margin-top:6px}
.stk-history h3{margin-top:4px}
.stk-period .metric strong{font-size:20px}
.stk-what{font-size:13px;color:var(--muted)}
@media(max-width:640px){
  .stk-chip{min-height:40px}
  button.stk-link,button.stk-expand{min-height:0}
  .stk-row-tools .wf-stock-actions button{min-height:40px;padding:4px 14px;font-size:13.5px}
  .stk-open-all,.stk-several{margin-left:0}
  table.stackable td.stk-none{display:none}
  table.stackable td>.stk-v{display:grid;justify-items:end;text-align:right}
  table.stk-table td.stk-name{display:block;text-align:left}table.stk-table td.stk-name>.stk-v{justify-items:start;text-align:left}
  table.stk-table tr.stk-nested{margin-left:14px;border-left:3px solid var(--line)}
  table.stk-table tr.stk-total-row{background:var(--paper)}
  .stk-lines .stk-v>span{white-space:normal}
  .stk-indent{display:none}
  .stk-sums{gap:8px 14px}
}
@media print{.stk-picker,.stk-links,.stk-row-tools,.stk-toggles,button.stk-expand{display:none!important}}

/* ---- Catalogue (migration 085, public/js/catalogue.js): products, storage areas, assortments, opening balances ---- */
button.cat-link{all:unset;cursor:pointer;color:var(--text);font-weight:600;text-decoration:underline;text-decoration-color:var(--line-strong);text-underline-offset:3px}
button.cat-link:hover{text-decoration-color:var(--olive)}
button.cat-link:focus-visible{outline:2px solid var(--clay);outline-offset:2px;border-radius:4px}
.cat-bulk{display:flex;gap:10px;flex-wrap:wrap;align-items:center;padding:10px 14px;margin-bottom:12px;background:var(--olive-soft);border:1px solid var(--line-strong);border-radius:var(--radius-lg)}
.cat-bulk[hidden]{display:none}
.cat-bulk select{width:auto;min-width:200px;flex:0 1 260px}
td.cat-check,th:has(>input[type=checkbox]){width:36px}
td.cat-check input,th>input[type=checkbox]{width:18px;min-height:18px;height:18px}
.cat-head h2{margin:0}
.cat-tabs{max-width:100%;overflow-x:auto;margin:14px 0 12px;justify-self:start}
.cat-tabs button{white-space:nowrap}
.cat-body .kv{grid-template-columns:minmax(120px,220px) 1fr;gap:8px 16px}
.cat-code-row{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) auto;gap:8px;align-items:center}
.cat-flag{display:inline-flex;flex-direction:column;gap:2px;align-items:flex-start}
.cat-left{color:var(--warn);font-weight:600}
.cat-area{gap:10px}
.cat-area .section-title{margin:0}
.cat-area h3{margin:0}
.cat-order{display:inline-grid;place-items:center;width:26px;height:26px;border-radius:50%;background:var(--olive-soft);color:var(--olive-dark);font-size:13px;font-weight:700}
.cat-area td select{min-height:34px;padding:4px 8px;width:auto;max-width:200px}
.cat-chosen{padding-left:0;list-style:none}
.cat-chosen li{display:flex;gap:10px;align-items:center;justify-content:space-between;padding:6px 10px;background:var(--paper);border:1px solid var(--line);border-radius:var(--radius)}
.cat-lines{display:grid;gap:8px}
.cat-line{display:grid;grid-template-columns:minmax(0,2.4fr) 120px minmax(0,1.3fr) minmax(110px,.9fr) auto;gap:8px 10px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--paper)}
.cat-line.with-cost{grid-template-columns:minmax(0,2.2fr) 110px minmax(0,1.2fr) 150px minmax(100px,.8fr) auto}
.cat-line.refused{border-color:var(--danger);box-shadow:inset 4px 0 0 var(--danger)}
.cat-line-head{padding:0 12px;border:0;background:transparent;font-size:12px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:700}
.cat-line-name{display:grid;gap:1px;min-width:0}
.cat-line-name strong{overflow-wrap:anywhere}
.cat-line-name small{font-size:12.5px;color:var(--muted)}
.cat-base{font-weight:600;white-space:nowrap}
.cat-line>.field-error,.cat-line>.field-hint{grid-column:1/-1}
.cat-line>.field-error:empty,.cat-line>.field-hint:empty{display:none}
.cat-add{max-width:520px}
.cat-actions{justify-content:flex-end;margin-top:4px}
@media(max-width:640px){
  .cat-line,.cat-line.with-cost{grid-template-columns:1fr 1fr}
  .cat-line-name,.cat-line>.cat-base{grid-column:1/-1}
  .cat-line-head{display:none}
  .cat-code-row{grid-template-columns:1fr}
  .cat-body .kv{grid-template-columns:1fr;gap:2px 0}
  .cat-body .kv dd{margin-bottom:8px}
  .cat-bulk select{flex:1 1 100%}
  .cat-actions{justify-content:stretch}
  .cat-actions button{flex:1 1 auto}
  .cat-area td select{max-width:none;width:100%}
}

/* ---- Any location (migration 089, public/js/shell.js, operations-core.js): the header location switch with more than two
   locations stays inside the top bar and scrolls sideways on a narrow screen; the factory choice of an order ---- */
.location-switch{max-width:100%;min-width:0;flex:0 1 auto;overflow-x:auto;scrollbar-width:none}
.location-switch::-webkit-scrollbar{display:none}
.location-switch button{flex:0 0 auto;white-space:nowrap}
.wf-order-factory{display:grid;gap:4px;max-width:420px;margin:0 0 12px;font-size:13px}
/* ---- end of any location (089) ---- */
/* ---- Waste & internal use (migration 088, public/js/waste.js): the record form, entries, report, reasons ---- */
.wst-sub{display:block;font-size:12.5px;line-height:1.35}
.wst-kind{text-transform:none}
.wst-tools label.grow{min-width:220px}
.wst-sums{gap:16px;font-size:14px;align-items:baseline}
.wst-row.wst-is-reversed td:not(.actions){color:var(--muted)}
.wst-row.wst-is-reversed .stk-link{text-decoration:line-through}
.wst-what-cell{min-width:200px}
.wst-section{display:grid;gap:10px;padding:16px 18px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg)}
.wst-section h3{margin:0}
.wst-cards .metric small{white-space:normal}
.wst-percent{font-weight:600}
.wst-ranks{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}
.wst-rank h4{margin:0 0 6px;font-size:13px;color:var(--muted);font-weight:700;letter-spacing:.04em;text-transform:uppercase}
.wst-rank ol{margin:0;padding:0 0 0 20px;display:grid;gap:5px;font-size:14px}
.wst-rank li>span{margin-right:8px}.wst-rank li>small{margin-left:8px}
.wst-presets{gap:6px;align-items:end}
/* the form */
dialog.wst-dialog{width:min(560px,calc(100vw - 24px))}
dialog.wst-dialog.wide{width:min(820px,calc(100vw - 24px))}
.wst-what{display:grid;gap:8px}
.wst-picked{display:flex;flex-wrap:wrap;gap:6px 8px;align-items:center}
.wst-picked:empty{display:none}
.wst-picked .wst-sub{display:inline}
.wst-change{margin-left:auto}
.wst-results{display:grid;gap:6px;max-height:260px;overflow-y:auto;overscroll-behavior:contain}
.wst-group{margin:4px 0 0;font-size:12px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:700}
.wst-chips{display:flex;flex-wrap:wrap;gap:6px}
.wst-list{display:grid;gap:4px}
button.wst-option{justify-content:space-between;min-height:42px;border-radius:20px;white-space:normal;text-align:left}
.wst-list button.wst-option{border-radius:var(--radius)}
button.wst-option small{font-size:12.5px;color:var(--muted);white-space:nowrap}
.wst-units{display:flex;flex-wrap:wrap;gap:6px}
.wst-preview{display:grid;gap:8px}
.wst-lines{list-style:none;margin:0;padding:0;display:grid;gap:4px;font-size:14px}
.wst-lines li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:0 12px;align-items:baseline;padding:6px 10px;background:var(--paper);border:1px solid var(--line);border-radius:var(--radius)}
.wst-lines li small{grid-column:1/-1;font-size:12.5px;color:var(--muted)}
.wst-lines li.wst-short{border-color:var(--danger);background:var(--danger-soft)}
.wst-lines li.wst-short small{color:var(--danger)}
.wst-money{color:var(--muted)}
details.wst-more>summary{cursor:pointer;font-size:14px;color:var(--clay-dark);padding:4px 0}
details.wst-more[open]>summary{margin-bottom:10px}
.wst-photo .field-hint{display:block;margin-top:4px}
/* one entry */
.wst-entry h3{margin:6px 0 0;font-size:15px}
.wst-kv{grid-template-columns:minmax(110px,auto) 1fr}
.wst-reversed strong{margin-right:4px}
.wst-entry-actions{gap:8px;flex-wrap:wrap}
img.wst-photo-view{max-width:100%;max-height:60vh;border-radius:var(--radius);border:1px solid var(--line)}
@media(max-width:640px){
  .wst-tools label.grow{min-width:0;flex:1 1 100%}
  .wst-sums{gap:6px 14px;flex-wrap:wrap}
  .wst-section{padding:14px}
  button.wst-option{min-height:46px}
  .wst-units .stk-chip{min-height:42px}
  .wst-kv{grid-template-columns:1fr;gap:0}
  .wst-kv dd{margin-bottom:8px}
  .wst-change{margin-left:0}
  .wst-entry-actions button{flex:1 1 auto}
  table.stackable td.wst-what-cell{flex-direction:column;align-items:flex-start;text-align:left;gap:2px;min-width:0}
  table.stackable td.wst-what-cell::before{content:none}
}
@media print{.wst-tools,.wst-entry-actions,.wst-presets{display:none!important}}
/* ---- end of waste & internal use (088) ---- */
/* ---- Stock counts (migration 087, public/js/counts.js): the count sheet on a phone, observations, review, variance report ---- */
.cnt-context{position:sticky;top:var(--topbar);z-index:6;display:flex;gap:4px 14px;flex-wrap:wrap;align-items:baseline;margin:10px 0;padding:8px 14px;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius);font-size:14px;box-shadow:var(--shadow)}
.cnt-context strong{font-weight:700}
.cnt-context .small{margin-left:auto}
.count-row.current{border-color:var(--olive);box-shadow:inset 4px 0 0 var(--olive)}
.count-row.recount.current{box-shadow:inset 4px 0 0 var(--warn)}
.count-row.cnt-extra{background:var(--paper)}
.count-inputs label:has(.cnt-stepper){width:176px}
.cnt-stepper{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:4px;align-items:center}
.cnt-stepper input{min-width:0;width:100%;text-align:center}
button.cnt-step{min-width:36px;padding:0;justify-content:center;font-size:18px;font-weight:700;line-height:1;color:var(--text)}
button.cnt-step span{font-size:inherit;font-weight:inherit}
.cnt-obs{grid-column:1/-1;margin:0;padding:0;list-style:none;display:grid;gap:2px;font-size:13px;color:var(--muted)}
td .cnt-obs{color:inherit;font-size:inherit}
.cnt-note{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end}
.cnt-note label{flex:0 1 230px}
.cnt-note label.grow{flex:1 1 260px}
.cnt-note.required label:first-child span::after{content:' and explanation — needed before approval';color:var(--warn)}
.count-note.cnt-note.required span::after{content:none}
.count-note.cnt-note.required label:first-child span::after{content:' and explanation — needed before approval';color:var(--warn)}
.cnt-row-tools{display:flex;gap:4px 14px;flex-wrap:wrap}
button.stk-link.cnt-link{font-size:13px;font-weight:400}
.cnt-nav{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.cnt-recon{display:block;font-weight:400;color:var(--muted)}
.cnt-assign{display:grid;gap:4px;padding:6px 0;border-bottom:1px solid var(--line)}
.cnt-assign details{margin-left:28px;font-size:14px}
.cnt-assign-areas{display:flex;gap:4px 16px;flex-wrap:wrap;padding:6px 0}
.cnt-found{align-items:center;padding:6px 0;border-bottom:1px solid var(--line)}
.cnt-summaries{margin:12px 0}
.cnt-summaries .card h3{margin-top:0}
@media (max-width:700px){
  .cnt-context{margin:8px 0;padding:8px 10px}
  .cnt-context .small{margin-left:0}
  .count-inputs label:has(.cnt-stepper){flex:1 1 150px;width:auto}
  .cnt-stepper input{height:48px;font-size:18px}
  button.cnt-step{min-width:48px;min-height:48px;font-size:22px}
  .cnt-nav{justify-content:stretch}
  .cnt-nav button{flex:1 1 30%;min-height:46px}
  .cnt-note label,.cnt-note label.grow{flex:1 1 100%}
}
@media print{.cnt-context,.cnt-nav,.cnt-row-tools,button.cnt-step{display:none!important}}
/* ---- end of stock counts (087) ---- */
/* ---- menu items & modifiers (092) ---- */
.menu-bar{align-items:center}
.badge.menu-badge{text-transform:none}
.menu-rule{display:grid;gap:2px;font-size:14px}
.menu-checks{display:flex;gap:6px 18px;flex-wrap:wrap}
.menu-extra{display:flex;gap:8px;align-items:center;flex:0 1 300px}
.menu-extra span{flex:1}
.menu-extra input{width:90px;flex:none}
.menu-sizes{display:grid;gap:8px}
.menu-size-row{display:grid;gap:8px;grid-template-columns:minmax(70px,.6fr) minmax(110px,1fr) minmax(140px,1.3fr) minmax(70px,.5fr) auto;align-items:center}
.menu-plan-line{align-items:center;gap:8px 12px;flex-wrap:wrap}
.menu-plan h3{margin-top:4px}
.menu-costs{max-width:420px}
.menu-rows td.actions{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.menu-needs h3{margin:0}
dialog.menu-test fieldset,dialog.menu-history fieldset{border:1px solid var(--line);border-radius:var(--radius);padding:8px 12px}
@media (max-width:700px){
  .menu-size-row{grid-template-columns:1fr 1fr}
  .menu-extra{flex:1 1 100%}
  .menu-rule{flex:1 1 100%}
}
/* ---- end of menu items & modifiers (092) ---- */
/* ---- Production orders (migration 093, public/js/production-orders.js): the order, the recording on a phone, yield & variance ---- */
.prd-states{margin:10px 0 2px}
.prd-status{text-transform:none}
.prd-sub{color:var(--muted);font-weight:400}
.prd-head{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:4px}
.prd-head h2{margin:0;font-size:20px}
.prd-where{display:inline-flex;gap:6px;align-items:center;font-size:14px}
.prd-save-status{margin-left:auto}
.prd-save-status[data-state=error]{color:var(--danger)}
.prd-save-status[data-state=ok]{color:var(--ok)}
.prd-summary{margin:0 0 10px}
.prd-tabs{display:flex;max-width:100%;overflow-x:auto;margin-bottom:12px;width:fit-content}
.prd-tabs button{min-height:40px;white-space:nowrap;flex:0 0 auto}
.prd-body h3{margin:10px 0 2px;font-size:16px}
.prd-kv{grid-template-columns:minmax(120px,200px) 1fr;gap:6px 16px}
.prd-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;align-items:end}
.prd-fields label{display:grid;gap:4px}
input.prd-qty{min-height:46px;font-size:18px;font-weight:600;text-align:right;width:100%;max-width:190px}
.prd-lines{display:grid;gap:10px}
.prd-line{display:grid;grid-template-columns:1fr auto auto;gap:10px;align-items:center;border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;background:var(--surface)}
.prd-line>*,.prd-fields>*{min-width:0}
.prd-line-name{display:grid;gap:2px;min-width:0;justify-items:start}
.prd-stepper{display:flex;align-items:center;gap:6px}
.prd-stepper .prd-step{min-width:46px;min-height:46px;padding:0;font-size:22px;line-height:1;border-radius:50%}
.prd-stepper input.prd-qty{width:120px}
.prd-unit{color:var(--muted);min-width:42px}
.prd-line.prd-short{border-color:var(--danger);background:var(--danger-soft)}
tr.prd-short td:first-child{box-shadow:inset 3px 0 0 var(--danger)}
.prd-var.over{color:var(--danger);font-weight:600}
.prd-var.under{color:var(--ok);font-weight:600}
.prd-yields{font-weight:600;margin:4px 0}
.prd-foot{position:sticky;bottom:0;z-index:2;display:flex;gap:10px;justify-content:flex-end;padding:10px 0 12px;margin-top:10px;background:var(--bg);border-top:1px solid var(--line)}
.prd-foot button{min-height:48px;min-width:150px}
.prd-confirm h3{margin:6px 0 0;font-size:15px}
.prd-confirm-list{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.prd-confirm-list li{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;padding:6px 10px;border:1px solid var(--line);border-radius:10px}
.prd-confirm-list li.prd-short{border-color:var(--danger);background:var(--danger-soft)}
.prd-confirm-list li strong{margin-left:auto}
tr.prd-sub-row>td{background:var(--paper);padding:10px 14px}
table.prd-yield td.num,table.prd-variance td.num,table.prd-table td.num{white-space:nowrap}
.prd-yield-hint{margin:8px 0 0}
.prd-plan .table-tools{margin-bottom:6px}
table.prd-plan-table input.prd-qty{min-height:40px;font-size:15px;max-width:120px}
table.prd-plan-table select{min-width:150px}
@media (max-width:700px){
  .prd-line{grid-template-columns:1fr}
  .prd-stepper{justify-content:space-between}
  .prd-stepper input.prd-qty{flex:1 1 0;max-width:none;width:0;min-width:0}
  .prd-tabs{width:auto}
  .prd-tabs button{flex:1 0 auto}
  .prd-fields{grid-template-columns:1fr}
  .prd-body{overflow-wrap:anywhere}
  .prd-foot button{flex:1;min-width:0}
  .prd-kv{grid-template-columns:1fr;gap:2px 0}
  .prd-kv dd{margin-bottom:8px}
  .prd-save-status{margin-left:0;flex:1 1 100%}
  .prd-states .stk-chip{min-height:42px}
  input.prd-qty{max-width:none}
}
@media print{.prd-tabs,.prd-foot,.prd-states{display:none!important}}
/* ---- end of production orders (093) ---- */

/* ---- Recipes and the cookbook (091, public/js/recipes.js) ---- */
.rcp-tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin:14px 0 16px;overflow-x:auto;scrollbar-width:thin}
.rcp-tabs button{border:0;border-bottom:2px solid transparent;border-radius:0;background:transparent;min-height:42px;padding:8px 14px;color:var(--muted);font-weight:500;white-space:nowrap;flex:none}
.rcp-tabs button:hover{color:var(--text);background:transparent}
.rcp-tabs button[aria-selected=true]{color:var(--text);border-bottom-color:var(--clay)}
.rcp-head .row h2{margin-right:4px}
.rcp-alert:empty{display:none}.rcp-alert{color:var(--danger);margin:10px 0 0}
.rcp-body,.rcp-form{display:grid;gap:14px;min-width:0}
.rcp-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));align-items:start}
.rcp-field{display:grid;gap:4px;min-width:0}
.rcp-field>span:first-child{font-size:13.5px;font-weight:500}
.rcp-field textarea,.rcp-step-edit textarea{width:100%;min-height:64px}
.rcp-usable{font-size:18px}
.rcp-places{display:flex;gap:6px 18px;flex-wrap:wrap}
.rcp-check ul{margin:4px 0 0;padding-left:18px}
.rcp-kind,.rcp-head .badge,.rcp-badges .badge{white-space:nowrap;text-transform:none}
.rcp-badges{display:inline-flex;gap:6px;flex-wrap:wrap;align-items:center}
.rcp-missing{color:var(--warn);font-size:13px}
table.rcp-lines input[type=number]{width:104px;min-width:0;text-align:right}
table.rcp-lines select{min-width:110px;max-width:180px}
table.rcp-lines td .field-error{display:block;font-weight:400}
table.rcp-list td.num,table.rcp-lines td.num{white-space:nowrap}
.rcp-row-actions{gap:4px;flex-wrap:nowrap}
.rcp-link,button.rcp-link{border:0;background:transparent;padding:0;min-height:0;color:var(--clay-dark);font:inherit;text-decoration:underline;cursor:pointer;text-align:left}
button.link-button{border:0;background:transparent;padding:0;min-height:0;color:var(--clay-dark);font:inherit;text-decoration:underline;cursor:pointer;text-align:left}
.rcp-allergens{display:grid;gap:4px}
.rcp-allergens p{margin:0;display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.rcp-allergens.compact{font-size:13px}
.rcp-allergen{text-transform:none}
.rcp-unknown{color:var(--warn)}
.rcp-two{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}
.rcp-cards{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}
button.rcp-card{display:grid;gap:6px;width:100%;text-align:left;align-content:start;align-items:start;justify-content:stretch;justify-items:start;font-weight:400;min-height:0;white-space:normal;cursor:pointer}
button.rcp-card:hover{border-color:var(--clay)}
button.rcp-card>strong{font-family:var(--display);font-size:18px;font-weight:500}
button.rcp-card .rcp-allergens{justify-items:start}
.rcp-image{margin:0;display:grid;gap:4px}
.rcp-image img{display:block;max-width:100%;height:auto;border-radius:var(--radius);border:1px solid var(--line);background:var(--cream)}
.rcp-image figcaption{font-size:12.5px;color:var(--muted)}
.rcp-thumb img{width:100%;height:140px;object-fit:cover}
.rcp-gallery{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}
.rcp-gallery:empty{display:none}
.rcp-thumb-box{display:grid;gap:6px;justify-items:start}
.rcp-upload{display:grid;gap:4px;max-width:340px}
.rcp-steps{margin:0;padding-left:22px;display:grid;gap:10px}
.rcp-steps li p{margin:0}
.rcp-step-edit{display:grid;gap:8px;grid-template-columns:1fr 110px auto;align-items:start}
.rcp-step-min{display:grid;gap:2px;font-size:12.5px}
.rcp-step-image img{max-width:320px}
.rcp-sheet{display:grid;gap:10px;min-width:0}
.rcp-sheet h3{margin-top:8px}
.rcp-sheet .rcp-note{margin:0;white-space:pre-wrap}
.rcp-facts{grid-template-columns:max-content 1fr}
.rcp-scale label{flex:0 1 200px}
.rcp-picker-results{display:grid;gap:6px;max-height:50vh;overflow:auto}
button.rcp-option{display:grid;gap:2px;text-align:left;justify-items:start;white-space:normal;min-height:48px;font-weight:400}
dialog.rcp-picker{width:min(560px,calc(100vw - 24px))}
.rcp-price{display:grid;gap:10px}
.rcp-diff h4{margin:16px 0 6px}
@media (max-width:700px){
  .rcp-step-edit{grid-template-columns:1fr}
  .rcp-grid{grid-template-columns:1fr}
  table.rcp-lines input[type=number]{width:120px;min-height:44px}
  .rcp-tabs button{min-height:46px}
  .rcp-facts{grid-template-columns:1fr;gap:0}
  .rcp-facts dd{margin-bottom:6px}
  .rcp-cards{grid-template-columns:1fr}
  .rcp-sheet{font-size:16px}
  .rcp-row-actions{flex-wrap:wrap}
}
@media print{
  .rcp-noprint,.rcp-tabs,.rcp-scale,.rcp-upload,.rcp-row-actions{display:none!important}
  dialog.rcp-print .dialog-body{padding:0!important}
  .rcp-sheet h3{font-size:11.5pt;margin:8pt 0 2pt}
  .rcp-sheet,.rcp-sheet p,.rcp-steps li{font-size:10.5pt}
  .rcp-steps li{break-inside:avoid}
  .rcp-image img{max-height:55mm;width:auto}
  .rcp-gallery{grid-template-columns:repeat(3,1fr)}
}
/* ---- end of recipes and the cookbook (091) ---- */
/* ---- Replenishment & forecast (migration 096, public/js/replenishment.js): suggestions, the review dialogs, the weekday profile ---- */
.rpl-ai,.rpl-forecast{margin:0}
.rpl-forecast button{margin-left:6px}
.rpl-confidence{color:var(--warn)}
.rpl-tools .rpl-views{flex:1 1 100%}
.rpl-views b{font-weight:700}
table.rpl-table td{vertical-align:top}
td.rpl-check{width:34px;padding-right:0}
td.rpl-check input{width:20px;height:20px;accent-color:var(--olive)}
td.rpl-explain{min-width:220px;font-size:13px}
.rpl-order{display:grid;gap:2px;justify-items:start;margin-top:6px}
.rpl-order:empty{display:none}
td.rpl-forecast-cell{min-width:118px}
td.rpl-incoming{min-width:120px}
td.rpl-target{min-width:92px}
.rpl-nowrap{white-space:nowrap}
table.rpl-table .stk-name{min-width:150px}
.rpl-arith{display:block}
.rpl-open,.rpl-notcounted,.rpl-warn{color:var(--warn)}
td.rpl-source{min-width:170px}
td.rpl-source select{min-width:160px;max-width:210px;min-height:34px}
.rpl-qty{display:inline-flex;gap:6px;align-items:center;white-space:nowrap}
input.rpl-packs{width:78px;min-height:34px;text-align:right}
tr.rpl-on>td{background:var(--paper)}
.rpl-created{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.rpl-lines{margin:0;padding-left:18px;display:grid;gap:4px}
.rpl-review{display:grid;gap:6px}
.rpl-doc{margin:2px 0}
.rpl-profile .badge,.rpl-table .badge,.rpl-history .badge{text-transform:none}
.rpl-coverage .metric strong.rpl-basis{font-size:18px}
table.rpl-profile td.num,table.rpl-weeks td.num{white-space:nowrap}
.state.rpl-not-configured strong{font-size:17px}
@media(max-width:640px){
  input.rpl-packs{width:96px;min-height:42px;font-size:16px}
  td.rpl-check input{width:26px;height:26px}
  table.rpl-table.stackable td.rpl-check{justify-content:flex-start}
  table.rpl-table.stackable td.rpl-explain,table.rpl-table.stackable td.rpl-source{display:grid;gap:2px;text-align:left;justify-items:start}
  table.rpl-table.stackable td.rpl-source select{max-width:100%;min-height:42px}
  table.rpl-table.stackable td.stk-name{font-size:15px}
  .rpl-tools .rpl-views button{min-height:40px}
}
/* ---- end of replenishment & forecast (096) ---- */

/* ---- Purchasing controls (migration 095, public/js/purchasing.js): New item review ---- */
.pur-review-grid{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start}
.pur-review-candidates{display:grid;gap:6px;max-height:280px;overflow:auto;margin:4px 0 10px}
.pur-review-candidate{display:flex;gap:10px;align-items:flex-start;padding:8px 12px;border:1px solid rgba(42,23,16,.16);border-radius:14px;cursor:pointer;background:#fff}
.pur-review-candidate:has(input:checked){border-color:#6b704f;background:#f1efe2}
.pur-review-candidate input{margin-top:4px;flex:none}
.pur-review-check[data-state=error]{color:#9b2c2c;font-weight:600}
.pur-review-check[data-state=ok]{color:#4d5a2c;font-weight:600}
tr.pur-review-this td{background:#fbf0d3}
.pur-review-others{flex-wrap:wrap}
@media(max-width:900px){.pur-review-grid{grid-template-columns:1fr}}
/* ---- end of purchasing controls ---- */

/* ---- Navigation layout and the Overview by area (migration 099, public/js/shell.js, dashboard.js, overview.js) ----
   Existing colours, type and components only. */
.nav-group{display:block}
button.nav-heading{display:flex;width:calc(100% - 4px);justify-content:flex-start;align-items:center;gap:8px;min-height:28px;margin:12px 2px 2px;padding:4px 8px;border:0;border-radius:var(--radius);background:transparent;font:700 11px/1.2 var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);text-align:left;white-space:normal;cursor:pointer}
button.nav-heading:hover{background:var(--cream);color:var(--text)}
button.nav-heading::after{content:'';order:3;margin-left:auto;width:7px;height:7px;flex:none;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:translateY(-2px) rotate(45deg);opacity:.75;transition:transform .12s}
button.nav-heading[aria-expanded=false]::after{transform:rotate(-45deg)}
button.nav-heading[data-count][aria-expanded=false]::before{content:attr(data-count);order:2;margin-left:auto;min-width:20px;padding:1px 6px;border-radius:10px;background:var(--clay);color:#fff;font-size:11.5px;letter-spacing:0;font-weight:700;text-align:center}
button.nav-heading[data-count][aria-expanded=false]::after{margin-left:0}
.ov-content{display:grid;gap:22px}
.ov-area{display:grid;gap:12px}
.ov-area-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px 16px;flex-wrap:wrap;padding-bottom:6px;border-bottom:1px solid var(--line)}
.ov-area-head h2{font-size:20px}
.ov-links{display:flex;flex-wrap:wrap;gap:2px 4px}
.ov-tiles{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));margin-bottom:0}
.ov-tiles .dash-metric{white-space:normal;align-content:start}
.ov-tiles .dash-metric strong{overflow-wrap:anywhere}
.ov-tiles .dash-metric small{color:var(--muted);line-height:1.35}
.dash-metric[data-tone=warn] strong{color:var(--clay-dark)}
.dash-metric[data-state=loading] strong,.dash-metric[data-state=error] strong{color:var(--muted)}
.dash-metric[data-state=error]{border-style:dashed}
.ov-fresh{margin:0;color:var(--muted)}
.ov-attention{align-content:start}
.ov-attention-group{display:grid;gap:6px}
.ov-attention-group .eyebrow{margin:4px 0 0}
.ov-error{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.ov-several,.ov-strip{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-bottom:12px}
.ov-chip{min-height:34px;padding:5px 12px;border-radius:20px;font-weight:400;white-space:normal;text-align:left}
.ov-chip[aria-pressed=true]{background:var(--espresso);border-color:var(--espresso);color:#fff8ef}
.ov-strip{margin:14px 0 0}
.ov-strip .eyebrow{margin-right:4px}
.ov-strip .ov-chip strong{font-weight:700;color:var(--clay-dark)}
@media(min-width:1100px){.ov-attention .ov-attention-group{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}.ov-attention-group .eyebrow{grid-column:1/-1}}
@media(max-width:960px){
  button.nav-heading{min-height:44px;margin-top:2px}
  .ov-chip{min-height:42px}
}
@media(max-width:640px){
  .ov-tiles{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .ov-tiles .dash-metric{padding:12px}
  .ov-tiles .dash-metric strong{font-size:22px}
  .ov-content{gap:18px}
}
@media print{.ov-links,.ov-several,.ov-strip,.ov-error button{display:none!important}}
/* ---- end of navigation layout and Overview (099) ---- */

/* ---- Settings groups and access (migration 098, public/js/settings-centre.js, admin-users.js): headings on the Settings
   home, the version in force of a dated editor, saving status, folded areas in the permission matrices, the grouped
   "what this person can do" ---- */
.set-groups .set-groups-heading{grid-column:1/-1;margin:14px 0 0}
.set-groups .set-groups-heading:first-child{margin-top:0}
.set-link-state{color:var(--ink)}
.set-link-state strong{font-weight:600}
.set-scope{color:var(--muted)}
.set-status{margin:0;color:var(--muted)}
.set-status[data-state=saved]{color:var(--olive-dark);font-weight:600}
.set-status[data-state=refused]{color:var(--danger,#9a2f24);font-weight:600}
.set-moved{margin:0 0 12px}
button.set-fold{all:unset;cursor:pointer;font-size:12px;font-weight:600;color:var(--clay-dark);text-decoration:underline;text-underline-offset:2px;margin-right:10px;min-width:38px;display:inline-block}
button.set-fold:focus-visible{outline:2px solid var(--clay);outline-offset:2px;border-radius:4px}
table.matrix tr.matrix-group th{position:sticky;left:0;top:auto;text-align:left;background:var(--olive-soft);color:var(--olive-dark);text-transform:none;letter-spacing:0;font-size:13.5px;white-space:normal}
table.matrix tr.matrix-group th .small{font-weight:400}
.matrix-tools{margin:0 0 8px;align-items:center}
.effective-summary{background:var(--surface);border:1px solid var(--line,#e6dccb);border-radius:var(--radius);padding:8px 10px}
.effective-summary[data-held=yes] .effective-action{color:var(--clay-dark)}
.effective-group{border-top:1px solid var(--line,#e6dccb);padding-top:6px}
.effective-group>summary{cursor:pointer;font-weight:600;padding:4px 0;font-family:var(--display)}
.effective-group .effective-row{border-top:0;padding:4px 0 4px 10px}
@media (max-width:640px){
  .set-group-card{padding:12px;gap:8px 10px}
  .set-group-icon{width:32px;height:32px}
  .set-group-text strong{font-size:16px}
  .set-group-text .small{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .set-group-foot{padding-top:8px}
  .set-link{flex-direction:column;align-items:stretch}
}
/* ---- end of settings groups and access (098) ---- */

/* ---- Inventory and recipe reports (migration 097, public/js/reports.js): the hub, the seven reports, drill-down ---- */
.rpt-head{gap:8px;margin-bottom:10px}
.rpt-tools{align-items:flex-end}
.table-tools.rpt-tools label{min-width:130px;flex:0 1 190px}.table-tools.rpt-tools label.grow{flex:1 1 200px;max-width:320px}
.table-tools.rpt-tools label.rpt-check{flex:0 0 auto;min-width:0;align-items:center;align-self:center;font-size:13.5px}
.rpt-host{gap:14px}
.rpt-host[aria-busy=true]>.table-wrap,.rpt-host[aria-busy=true]>.metrics{opacity:.55;transition:opacity .15s}
.rpt-print-only{display:none}
.rpt-basis{margin:0}
.rpt-identity{margin:0;padding:10px 14px;border:1px dashed var(--line-strong);border-radius:var(--radius);font-size:14px;background:var(--surface)}
.rpt-cards{margin-bottom:0}
.rpt-cards .metric strong{font-size:22px}
.rpt-provisional{display:grid;gap:4px}
.rpt-provisional ul{margin:0;padding-left:18px}
.rpt-sub{display:block;font-weight:400}
.rpt-sub.rpt-warn{color:var(--warn)}
.rpt-table td.rpt-name{min-width:170px}
.rpt-table td.rpt-where{min-width:230px}
.rpt-table tr.rpt-total-row>td{background:var(--olive-soft);font-weight:600}
.rpt-table tr.rpt-part-row>td:nth-child(2){padding-left:22px}
.rpt-table tr.rpt-bad-row>td{background:var(--danger-soft)}
.rpt-table td.rpt-key{font-weight:700}
.rpt-table td.rpt-flag{font-weight:700;color:var(--danger)}
.rpt-table .rpt-zero{color:var(--muted)}
.rpt-table .rpt-estimate{display:inline-grid;justify-items:end;font-style:italic}
.rpt-table button.rpt-open{display:block;margin-top:2px;font-size:12.5px}
.rpt-packs{display:grid;gap:2px;font-size:13.5px}
.rpt-view{align-self:flex-start}
.rpt-two{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.rpt-section{display:grid;gap:8px}
.rpt-section h3{margin:0}
.rpt-notes{border:1px solid var(--line);border-radius:var(--radius);padding:10px 14px;background:var(--surface);font-size:14px}
.rpt-notes summary{cursor:pointer;font-weight:600}
.rpt-notes dl{display:grid;grid-template-columns:minmax(120px,220px) 1fr;gap:4px 14px;margin:8px 0 0}
.rpt-notes dt{font-weight:600}.rpt-notes dd{margin:0;color:var(--muted)}
.rpt-check-line,.rpt-transit-line,.rpt-waste-rule,.rpt-method{margin:0}
.rpt-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.rpt-item{display:flex;gap:14px;align-items:center;justify-content:space-between;padding:12px 14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}
.rpt-item.is-off{background:transparent;border-style:dashed}
.rpt-item-text{display:grid;gap:3px;min-width:0}
.rpt-item-state .badge{margin-right:4px}
.rpt-sources{gap:10px}
.rpt-source-total{margin:0;padding-top:8px;border-top:1px solid var(--line)}
.rpt-ties.ok{color:var(--ok);font-weight:600}.rpt-ties.bad{color:var(--danger);font-weight:700}
@media(max-width:640px){
  .rpt-item{flex-direction:column;align-items:stretch}.rpt-item>button{align-self:flex-start}
  .table-tools.rpt-tools label{flex:1 1 100%;max-width:none}
  .rpt-notes dl{grid-template-columns:1fr}
  .rpt-table td.rpt-name,.rpt-table td.rpt-where{min-width:0}
  table.stackable.rpt-table td.rpt-where{flex-direction:column;align-items:flex-end;gap:2px}
  table.stackable.rpt-table tr.rpt-part-row{padding-left:26px}
  table.stackable.rpt-table tr.rpt-part-row>td:nth-child(2){padding-left:0}
  table.stackable.rpt-comparison td>.rpt-sub,table.stackable.rpt-usage td>.rpt-sub{text-align:right}
}
@media print{
  .rpt-head,.rpt-tools,.rpt-view,.rpt-no-export,.rpt-table button.rpt-open{display:none!important}
  .rpt-print-only{display:block;margin:0 0 6px;font-size:9.5pt}
  .rpt-notes{border:0;padding:0}.rpt-notes>summary{display:none}
  .rpt-identity,.rpt-provisional,.rpt-item{border:.5pt solid #999;background:#fff;color:#000}
  .rpt-table tr.rpt-total-row>td{background:#eee!important}
  [data-screen^=report-] .rpt-table button.figure-link{color:#000;text-decoration:none}
}
/* ---- end of inventory and recipe reports (097) ---- */

/* ---- HR final pass (migration 108, public/js/shell.js): the phone drawer with eleven areas ----
   The areas of the back office are folded in the phone drawer and must fit one 390×844 screen without scrolling.
   With the HR area there are eleven: the spacing around the headings is tightened on a narrow screen only. Every
   heading keeps its 44px touch height; colours, type and components are unchanged. */
@media(max-width:960px){
  button.nav-heading{margin-top:0;margin-bottom:0}
  p.nav-heading{margin-top:8px}
  #app-nav{padding-bottom:6px}
  .app-brand{padding:12px 20px 8px}
  .sidebar-foot{padding:6px 10px}
}
/* ---- end of HR final pass (108) ---- */
/* ---- Ledger (migration 109): the journal lines editor and the standard-chart preview ------------------------- */
.gl-line{display:grid;grid-template-columns:minmax(160px,2.2fr) minmax(110px,1.2fr) minmax(90px,1fr) minmax(90px,1fr) minmax(120px,1.6fr) auto;gap:8px;align-items:center}
.gl-std-row{display:grid;grid-template-columns:auto 110px minmax(160px,1fr) minmax(140px,auto);gap:8px;align-items:center}
.gl-line input,.gl-line select,.gl-std-row input[type=text]{width:100%;min-width:0}
.gl-tree{display:inline-block}
@media (max-width:720px){
  .gl-line{grid-template-columns:1fr 1fr}
  .gl-line>select:first-child,.gl-line>input[aria-label="Line note"]{grid-column:1/-1}
  .gl-std-row{grid-template-columns:auto 1fr}
  .gl-std-row>input[aria-label="Name"],.gl-std-row>.small{grid-column:1/-1}
}
/* ---- end of Ledger ----------------------------------------------------------------------------------------- */

/* ---- Customers, orders, invoices and payments (migration 111, public/js/customers.js) ------------------------ */
.cu-line{display:grid;grid-template-columns:minmax(0,2.2fr) minmax(0,.8fr) minmax(0,.9fr) minmax(0,1.6fr) auto;gap:8px;align-items:center}
.cu-line input[readonly]{background:var(--cream);color:var(--muted)}
.cu-deliver{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1.6fr) minmax(0,.9fr);gap:8px;align-items:center}
.cu-doc-head{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;align-items:flex-start}
.cu-doc-seller{font-family:var(--display);font-size:20px}
.cu-doc-title{text-align:right}
.cu-totals{justify-content:end;margin-left:auto;min-width:min(320px,100%)}
.cu-totals dd{text-align:right}
@media(max-width:640px){
  .cu-line,.cu-deliver{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
  .cu-line>select:first-child,.cu-line>input[aria-label="Reason for the price"],.cu-deliver>span{grid-column:1/-1}
  .cu-doc-title{text-align:left}
}
@media print{.cu-doc .pay-noprint{display:none!important}.cu-doc-seller{font-size:16pt}}
/* ---- end of Customers --------------------------------------------------------------------------------------- */
/* ---- Till (migration 112, public/js/till.js): the sale screen, the receipt and the close summary ------------- */
.till-layout{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(300px,1fr);gap:16px;align-items:start}
.till-menu{display:grid;gap:12px;min-width:0}
.till-cats{gap:6px}
button.till-cat{min-height:44px;padding:6px 14px;border-radius:999px;background:transparent;border:1px solid var(--line-strong);color:var(--text);font-weight:500}
button.till-cat[aria-selected=true]{background:var(--olive);border-color:var(--olive);color:#fff}
.till-tiles{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(132px,1fr))}
.till-tiles>.state{grid-column:1/-1}
button.till-tile{display:grid;grid-template-columns:minmax(0,1fr);gap:4px;align-content:space-between;justify-items:start;text-align:left;min-height:84px;padding:12px;white-space:normal;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius-lg);color:var(--text)}
button.till-tile:hover:not(:disabled){border-color:var(--olive)}
button.till-tile:disabled{opacity:.55}
button.till-tile strong{font-size:15px;line-height:1.25}
button.till-tile span{font-size:14px;color:var(--muted)}
.till-cart{position:sticky;top:12px}
.till-cart-lines{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.till-cart-lines li{display:grid;gap:6px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.till-qty{flex-wrap:nowrap}
.till-qty button{min-width:44px;min-height:44px;padding:0;font-size:20px;line-height:1}
.till-q{min-width:28px;text-align:center;font-weight:700}
.till-line-total{margin-left:auto}
.till-sums{display:grid;gap:6px}
.till-sum{display:flex;gap:10px;align-items:center;justify-content:space-between;flex-wrap:wrap;font-size:14px}
.till-sum-total{font-size:20px;border-top:1px solid var(--line-strong);padding-top:8px}
.till-cart-actions button.primary{flex:1 1 140px;min-height:52px;font-size:17px}
.till-head .spacer,.till-filters .spacer,.till-day .spacer{flex:1}
.till-open{max-width:460px}
.till-pay{display:grid;gap:10px}
.till-due{margin:0;font-size:18px;font-weight:700}
.till-due[data-state=short],.till-due[data-state=bad]{color:var(--danger)}
.till-due[data-state=ok]{color:var(--ok)}
.till-waiting{padding:6px 0;border-top:1px solid var(--line)}
.till-receipt,.till-summary{display:grid;gap:8px}
.till-receipt h3,.till-summary h3{margin:0}
.till-receipt-no{margin:0;font-weight:700}
.till-receipt table th{text-align:left;font-weight:400;text-transform:none;letter-spacing:0;font-size:14px;color:inherit;background:transparent}
.till-receipt tr.till-total th,.till-receipt tr.till-total td{font-weight:700;font-size:16px;border-top:1px solid var(--line-strong)}
.till-others{margin:0;padding-left:18px}
.till-print-root{display:none}
@media (max-width:860px){
  .till-layout{grid-template-columns:minmax(0,1fr)}
  .till-cart{position:static}
  .till-tiles{grid-template-columns:repeat(auto-fill,minmax(120px,1fr))}
}
@media print{
  body.till-printing>*:not(.till-print-root){display:none!important}
  body.till-printing>.till-print-root{display:block!important;max-width:80mm;margin:0 auto;color:#000;font-size:11pt}
  body.till-printing .till-summary{max-width:none}
  body.till-printing>.till-print-root:has(.till-summary){max-width:none}
  .till-noprint{display:none!important}
  body.till-printing .notice{border:.5pt solid #999;background:#fff;color:#000}
}
/* ---- end of Till (112) ---------------------------------------------------------------------------------------- */
