/* PrepSheet app: account features for PrepSheet Plus accounts (plus-app-plus-v1, stamped 20261010). Generated by
   tools/mk-app-plus.py from /prepsheet-plus-20261015p.css (unchanged): feature rules only. Loaded only by /app pages. */
.plus-account{margin-top:10px;padding:12px 14px;border:1px solid var(--line,#dcd2cb);border-radius:10px;background:var(--bg3,#f3f1ec)}
.plus-account p{margin:4px 0}
.plus-badge{display:inline-block;padding:2px 10px;border-radius:999px;border:1px solid var(--line2,#b9adbc);font-weight:600;font-size:.9rem}
.plus-badge.on{background:var(--ps-green,#3b1b45);color:#fff;border-color:transparent}
.plus-alert{padding:8px 10px;border-radius:8px;background:#fdecea;color:#7a1f14;border:1px solid #f1b8af}
.menu-gp .dash-wrap{overflow-x:auto;position:relative}
.menu-gp table.dash{width:100%;border-collapse:collapse}
.menu-gp table.dash th,.menu-gp table.dash td{padding:6px 8px;border-bottom:1px solid var(--line,#dcd2cb);text-align:left}
.menu-gp table.dash .num{text-align:right}
.menu-gp input.menu-price{width:6.5em;text-align:right}
.menu-gp tr.locked td{filter:blur(4px);user-select:none;pointer-events:none}
.gp-flag{font-size:.85rem;padding:1px 8px;border-radius:999px;white-space:nowrap;background:#f1f0ed;color:#493550}
.gp-flag.bad{background:#fdecea;color:#7a1f14}
.gp-flag.ok{background:#e6f2ea;color:#6b3a7d}
.dash-upsell{margin-top:10px;padding:12px;border-radius:10px;background:var(--bg3,#f3f1ec)}
.dash-controls label{display:inline-flex;gap:6px;align-items:center}
.wc-window{margin:6px 0 10px}
.wc-window .seg button[aria-disabled="true"]{opacity:.65}
.wc-window .movers ol{margin:6px 0 0 18px}
.plus-brand{margin-top:10px}
.plus-brand summary{cursor:pointer;font-weight:600}
.plus-brand .chk{display:flex;gap:8px;align-items:center;margin-top:8px}
.ps-brand{display:flex;align-items:center;gap:12px;margin-bottom:8px}
.ps-brand .ps-logo{max-height:48px;max-width:160px;object-fit:contain}
.ps-brand .ps-kitchen{font-weight:700;font-size:1.2rem}
.ps-extra{margin-top:10px}
.ps-extra .ps-photo{display:block;max-width:220px;max-height:160px;margin-top:8px;object-fit:cover;border-radius:6px}
@media print{
  body.print-dash main > *:not(#view-recipes){display:none!important}
  body.print-dash #view-recipes > *:not(#menu-gp){display:none!important}
  body.print-dash #menu-gp{display:block!important}
  body.print-dash #menu-gp .dash-controls,body.print-dash #menu-gp .dash-upsell{display:none!important}
  body.print-dash #menu-gp input.menu-price{border:0}
}
.plus-note{background:#fff7e6;border-left:3px solid #c98a2b;padding:8px 12px}
/* v1.3 staffing (stamped 20261012). Web only; stripped from /app. */
.ps-labour{margin-top:12px}
.ps-labour .staff-dish summary,.ps-rota .staff-rota>summary{cursor:pointer;font-weight:600}
.ps-rota .staff-rota>summary h2{display:inline;margin:0}
.ps-labour .row3,.ps-rota .row3{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;margin:8px 0}
.ps-labour .row3 label,.ps-rota .row3 label{display:block;font-size:.9rem;margin-bottom:4px}
.ps-labour .row3 input,.ps-rota .row3 input{width:100%;box-sizing:border-box}
.ps-labour .inline{display:flex;gap:6px;align-items:center}
.ps-labour .inline input{flex:1 1 auto;min-width:0}
.staff-out{margin:8px 0;padding:10px 12px;border-radius:10px;background:var(--bg3,#f3f1ec)}
.staff-out p{margin:3px 0}
.staff-out .bad,.menu-gp td.bad{color:#7a1f14}
.staff-out .good{color:#6b3a7d}
.ps-rota table.rota{width:100%;border-collapse:collapse}
.ps-rota table.rota td,.ps-rota table.rota th{padding:4px 6px;border-bottom:1px solid var(--line,#dcd2cb);text-align:left}
.ps-rota table.rota input{width:100%;min-width:60px;box-sizing:border-box}
.ps-rota table.rota input[data-rk="role"]{min-width:110px}
.ps-rota table.rota .num,.ps-rota table.rota input.num{text-align:right}
.ps-rota table.rota-hist{width:100%;border-collapse:collapse;margin-top:6px}
.ps-rota table.rota-hist td,.ps-rota table.rota-hist th{padding:6px 8px;border-bottom:1px solid var(--line,#dcd2cb);text-align:left}
.ps-rota table.rota-hist .num{text-align:right}
.ps-rota .chks{display:flex;flex-wrap:wrap;gap:6px 18px;margin:6px 0}
.ps-rota .chks .chk{display:inline-flex;gap:6px;align-items:center;font-size:.92rem}
.ps-rota .chks input[type=checkbox]{width:18px;height:18px;min-width:18px;padding:0;margin:0;flex:none;box-shadow:none}
.ps-rota .rota-save .actions{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap}
.menu-gp .menu-prime{margin:4px 0 10px}
@media (max-width:560px){.ps-rota .dash-wrap{overflow-x:auto}.ps-rota table.rota{min-width:560px}}
/* ---------- v1.4 (20261013): rota table stacks on phones (no sideways scroll) ---------- */
@media (max-width:560px){
  .ps-rota .dash-wrap{overflow-x:visible}
  .ps-rota table.rota{min-width:0}
  .ps-rota table.rota thead{display:none}
  .ps-rota table.rota,.ps-rota table.rota tbody{display:block;width:100%}
  .ps-rota table.rota tr{display:grid;grid-template-columns:1fr 1fr;gap:6px 10px;padding:10px 0;border-bottom:1px solid var(--line,#dcd2cb)}
  .ps-rota table.rota td{display:block;padding:0;border:0}
  .ps-rota table.rota td[data-label]::before{content:attr(data-label);display:block;font-size:.8rem;font-weight:600;margin-bottom:2px;color:var(--muted,#65496d)}
  .ps-rota table.rota td:first-child{grid-column:1 / -1}
  .ps-rota table.rota td.rota-del{grid-column:1 / -1;text-align:right}
  .ps-rota table.rota input,.ps-rota table.rota select{width:100%;min-width:0}
  .ps-rota table.rota input.num{text-align:left}
}
/* ---------- v1.4 (20261013): allergen matrix ---------- */
.ps-allergens{margin:10px 0}
.ps-allergens summary{font-weight:700;cursor:pointer}
.ps-allergens .alg-list{display:grid;gap:10px;margin:8px 0}
.ps-allergens fieldset.alg-ing{border:1px solid var(--line,#dcd2cb);border-radius:10px;padding:8px 10px;margin:0;min-width:0}
.ps-allergens fieldset.alg-ing legend{font-weight:600;padding:0 4px}
.ps-allergens .alg-chips{display:flex;flex-wrap:wrap;gap:6px}
.ps-allergens .alg-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border:1px solid var(--line,#dcd2cb);border-radius:999px;font-size:.9rem;cursor:pointer;background:#fff}
.ps-allergens .alg-chip input{width:16px;height:16px;min-width:16px;margin:0;padding:0;flex:none;box-shadow:none}
.ps-allergens .alg-chip:has(input:checked){background:#fdecea;border-color:#c0392b}
.ps-allergens .alg-chip.alg-none:has(input:checked){background:#e9f5ee;border-color:#2e7d4f}
.ps-allergens .alg-out{margin:8px 0;padding:10px 12px;border-radius:10px;background:#f7f5f2}
.ps-allergens .alg-out p{margin:2px 0}
.ps-allergens .alg-unchecked{color:#8a5a00}
.ps-allergens .alg-actions{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0}
.ps-allergens .alg-disclaimer{font-size:.85rem}
.alg-wrap{overflow-x:auto}
table.alg-matrix{border-collapse:collapse;width:100%;font-size:.9rem}
table.alg-matrix th,table.alg-matrix td{border:1px solid var(--line,#dcd2cb);padding:4px 6px;text-align:center}
table.alg-matrix tbody th{text-align:left;font-weight:600;white-space:nowrap}
table.alg-matrix th.rot{vertical-align:bottom;height:150px;padding:4px 2px}
table.alg-matrix th.rot span{writing-mode:vertical-rl;transform:rotate(180deg);white-space:nowrap;font-weight:600;font-size:.82rem}
table.alg-matrix td.y{font-weight:700;color:#a3271b;background:#fdecea}
table.alg-matrix td.warn{color:#8a5a00;font-weight:600}
#psa-print{display:none}
@media print{
  body.print-allergens > *:not(#psa-print){display:none!important}
  body.print-allergens #psa-print{display:block!important;font-size:10pt}
  body.print-allergens #psa-print h1{font-size:16pt;margin:0 0 4px}
  body.print-allergens table.alg-matrix{font-size:9pt}
  body.print-allergens table.alg-matrix td.y{background:none;color:#000}
  body.print-allergens table.alg-matrix th.rot{height:130px}
  body.print-allergens .alg-wrap{overflow:visible}
  body.print-allergens table.alg-matrix tr{break-inside:avoid}
}
/* v1.5 price-rise and GP alerts */
.ps-alerts .alert-banner{border-left:4px solid var(--copper-hot,#F76D8C);background:var(--bg3,#322437);padding:10px 12px;border-radius:8px;margin:0 0 8px}
.ps-alerts .alert-h{font-weight:700;margin:0 0 4px;font-size:1.02rem}
.ps-alerts table.alert-dishes tr.below td:nth-child(3){color:var(--copper-hot,#F76D8C)}
.ps-alerts table.alert-dishes tr.ok td{color:var(--muted,#666)}
.ps-alerts .linkbtn{background:none;border:0;padding:0;color:var(--text,#EDE7DA);text-decoration:underline;cursor:pointer;font:inherit;text-align:left}
.ps-alerts input.alert-gp{width:4.5em;min-width:0}
.ps-alerts .alert-hist h3{margin:12px 0 6px;font-size:1rem}
.ps-alerts details.alert-item{border-top:1px solid var(--line,#e5e5e5);padding:6px 0}
.ps-alerts details.alert-item summary{cursor:pointer}
.ps-alerts .actions{margin-top:6px}
@media (max-width:560px){.ps-alerts table.alert-dishes td:nth-child(5),.ps-alerts table.alert-dishes th:nth-child(5){display:none}}
/* app.css hides .whatchanged and every <details> in the app shell; for Plus accounts (body.ps-app-plus, set by the app
   Plus script) only the Plus panels come back: price history, labour, rota, allergens, branded prints, alert history */
body.ps-app-shell.ps-app-plus .whatchanged{display:block!important}
body.ps-app-shell.ps-app-plus details.staff-dish,body.ps-app-shell.ps-app-plus details.staff-rota,body.ps-app-shell.ps-app-plus details.alg-dish,body.ps-app-shell.ps-app-plus details.plus-brand,body.ps-app-shell.ps-app-plus details.alert-item{display:block!important}
/* app: dashboard, rota, labour-history and alert tables scroll inside their card; the page itself never scrolls sideways */
body.ps-app-shell .dash-wrap{overflow-x:auto;max-width:100%;position:relative}
@media (max-width:640px){body.ps-app-shell .menu-gp .dash-wrap{max-width:100%;-webkit-overflow-scrolling:touch}body.ps-app-shell .menu-gp table.dash{min-width:560px}body.ps-app-shell .dash-controls{display:flex;flex-wrap:wrap;gap:8px}}
