:root{font-family:system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;color:#302a2d;background:#faf8f6;font-size:16px;--wine:#5a1f2b;--line:#e7dfe2}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button,a{touch-action:manipulation}a{color:var(--wine);text-decoration:none}button,.button{border:1px solid var(--line);background:#fff;color:var(--wine);border-radius:10px;padding:12px 17px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;font-weight:600}button:hover,.button:hover{background:#f3e9ec}button:disabled{opacity:.5;cursor:not-allowed}.primary{background:var(--wine);color:white;border-color:var(--wine)}.primary:hover{background:#783447}input,select,textarea{width:100%;min-width:0;border:1px solid #cfc4c8;border-radius:9px;padding:12px;background:white;color:inherit;min-height:46px}textarea{min-height:95px;resize:vertical}input[type=checkbox]{width:20px;min-height:20px;flex:0 0 20px}label{display:grid;gap:8px;font-size:14px;font-weight:600}.check{display:flex;align-items:center}.shell{display:grid;grid-template-columns:235px minmax(0,1fr);min-height:100vh}aside{padding:30px 20px;border-right:1px solid var(--line);background:white}.brand{display:flex;gap:12px;align-items:center;font-size:26px;font-weight:700;letter-spacing:-1px}.brand img{width:48px;height:48px;border-radius:12px}.brand small{display:block;font-size:11px;letter-spacing:2px;text-transform:uppercase;font-weight:500;margin-top:3px}nav{display:grid;gap:7px;margin-top:35px}nav a{padding:14px;border-radius:9px;color:#65565d}nav a.active{background:#f1e6e9;color:var(--wine);font-weight:650}.identity{margin-top:32px;padding-top:22px;border-top:1px solid var(--line);display:grid;gap:8px}.identity small,small,.muted{color:#7b7075;font-size:14px;line-height:1.6}main{width:100%;max-width:1180px;padding:40px;margin:auto;align-self:start}h1{font-size:32px;letter-spacing:-1px;margin:8px 0 12px;line-height:1.2}h2{font-size:20px;margin:0 0 16px}h3{font-size:17px;margin:0 0 10px}p{line-height:1.65;margin:8px 0 18px}.eyebrow{text-transform:uppercase;font-size:12px;letter-spacing:2px;color:#8b6873;margin-bottom:12px}.heading{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:24px}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}.card{background:white;border:1px solid var(--line);border-radius:17px;padding:24px;margin-bottom:18px;min-width:0}.grid>.card{margin-bottom:0}.stack{display:grid;gap:14px}.row{padding:16px 0;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:16px}.row:last-child{border-bottom:0}.row>div{min-width:0}.row small{display:block}.actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px}.badge{display:inline-block;font-size:12px;font-weight:650;padding:5px 9px;border-radius:6px;background:#f1ecef;color:#67565e;margin:0 5px 8px 0}.good{background:#e7f1eb;color:#326248}.pending{background:#fbf0d9;color:#7b5c19}.notice{border-left:3px solid #ab7b89;background:#f4edef;border-radius:8px;padding:14px 18px;margin:18px 0;font-size:14px;line-height:1.6}.empty{color:#81757c;padding:18px 0}.welcome{max-width:620px;margin:60px auto;text-align:center}.welcome .brand{justify-content:center}.welcome h1{font-size:38px;margin-top:40px}.welcome .actions{justify-content:center}.personal{max-width:850px}.personal .hero{background:#f5eeef;border:0;padding:32px}.formgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.wide{grid-column:1/-1}.checklist{display:grid;gap:10px}.checklist a{padding:14px;background:#f8f4f5;border-radius:9px}details{border-top:1px solid var(--line);padding-top:15px;margin-top:8px}summary{cursor:pointer;color:var(--wine);font-weight:600;padding:5px 0 15px}details .formgrid{margin-top:10px}dialog{width:min(690px,calc(100vw - 24px));max-height:calc(100dvh - 32px);border:1px solid var(--line);border-radius:18px;padding:0;color:inherit;overflow:auto;background:#fff}dialog::backdrop{background:#29202770}.modal-head{position:sticky;top:0;display:flex;justify-content:space-between;align-items:center;gap:12px;background:white;border-bottom:1px solid var(--line);padding:18px 24px;z-index:1}.modal-head h2{margin:0}.modal-body{padding:24px}.modal-head button{border:0;padding:5px 13px;font-size:22px}.modal-footer{display:flex;justify-content:flex-end;gap:10px;grid-column:1/-1;margin-top:16px}.stat{font-size:32px;font-weight:600;display:block;margin-bottom:4px}.board{display:grid;grid-template-columns:repeat(4,minmax(180px,1fr));gap:12px;overflow-x:auto}.board .card{padding:15px}.calendar{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}.day{border:1px solid var(--line);border-radius:6px;padding:8px;min-height:90px;background:#fff;font-size:13px;overflow-wrap:anywhere}.day button{font-size:12px;padding:5px;min-height:30px;width:100%;margin-top:5px}.person-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.person-grid button{display:grid;text-align:left;justify-content:stretch;padding:16px}.person-grid small{font-weight:400}.mobile-nav{display:none}#toast{display:none;position:fixed;bottom:90px;left:50%;transform:translateX(-50%);background:#30242a;color:white;padding:14px 22px;border-radius:10px;z-index:100;max-width:90vw}strong{overflow-wrap:anywhere}.code{font-size:22px;letter-spacing:1px}.link-card{display:block}.link-card:hover{border-color:#b48492}.section{margin-top:26px}.compact{font-size:14px}:focus-visible{outline:3px solid #b88095;outline-offset:3px}@media(max-width:900px){main{padding:25px}.shell{grid-template-columns:190px minmax(0,1fr)}aside{padding:25px 12px}.grid.three{grid-template-columns:repeat(2,minmax(0,1fr))}.person-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:650px){.shell{display:block}aside{display:none}main{padding:24px 16px 105px}.heading{align-items:flex-start;flex-direction:column;gap:8px}h1{font-size:28px}.grid,.grid.three{grid-template-columns:1fr}.card{padding:20px}.formgrid{grid-template-columns:1fr}.modal-body{padding:20px}.modal-head{padding:15px 20px}.mobile-nav{display:flex;position:fixed;bottom:0;left:0;right:0;background:#fff;border-top:1px solid var(--line);padding:8px 5px max(10px,env(safe-area-inset-bottom));z-index:10;justify-content:space-around;margin:0;gap:0}.mobile-nav a{padding:11px 7px;font-size:13px;text-align:center}.welcome{margin:35px auto}.welcome h1{font-size:32px}.row{align-items:flex-start}.row button{padding:10px}.day{padding:4px;min-height:65px;font-size:12px}.calendar{gap:2px}.day button{font-size:10px}.person-grid{grid-template-columns:1fr 1fr}.personal .hero{padding:24px}}
/* Accounts: compact ledgers, clear totals and touch-friendly controls. */
.ac-tabs{display:flex;flex-wrap:wrap;gap:8px;border-bottom:1px solid var(--line);padding-bottom:12px;margin-bottom:24px}.ac-tabs a{padding:10px 14px;border-radius:9px;font-weight:600}.ac-tabs a[aria-current=page]{background:var(--wine);color:white}.ac-primary{margin-bottom:22px}.ac-table-wrap{max-width:100%;overflow:auto}.ac-table{width:100%;border-collapse:collapse;font-size:14px}.ac-table th,.ac-table td{text-align:left;padding:12px 9px;border-bottom:1px solid var(--line);vertical-align:top}.ac-table th{font-weight:650;color:#65565d;background:#faf8f6}.ac-table td{font-variant-numeric:tabular-nums}.ac-table th:first-child,.ac-table td:first-child{padding-left:0}.ac-table td button{padding:8px 12px;white-space:nowrap}.ac-filter{background:white;border:1px solid var(--line);padding:18px;border-radius:12px;margin:20px 0}.ac-item{padding:18px 0;border-bottom:1px solid var(--line)}.ac-journal-row{display:grid;grid-template-columns:2fr 1fr 1fr;gap:10px;padding:12px 0;border-bottom:1px solid var(--line)}.row>.actions{margin-top:0}.card:has(.stat){border-top:3px solid var(--wine)}.stat{font-size:clamp(20px,2.5vw,30px);overflow-wrap:anywhere}@media(max-width:650px){.ac-tabs a{padding:9px 10px;font-size:14px}.ac-journal-row{grid-template-columns:1fr 1fr}.ac-journal-row>label:first-child{grid-column:1/-1}.ac-table th,.ac-table td{padding:10px 7px}.mobile-nav{overflow-x:auto;justify-content:flex-start}.mobile-nav a{flex-shrink:0}.row{flex-wrap:wrap}.row>div:first-child{flex:1 1 200px}}
@media print{body{background:white}dialog[open]{display:block!important;position:static;margin:0;width:100%;max-width:none;max-height:none;border:0;overflow:visible}.modal-body{padding:0}.ac-table-wrap{overflow:visible}}

main{padding-top:max(32px,env(safe-area-inset-top))}

.inspection-banner{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:14px 20px;background:#5a1f2b;color:white;font-size:14px}.inspection-banner a{color:white;text-decoration:underline;margin-left:auto}

/* Participant journey (participant.js). Status pills make the difference
   between a paid place and an approved place readable at a glance, which
   matters because those are two separate decisions and people confuse them. */
.pill{display:inline-block;padding:2px 10px;border-radius:999px;font-size:13px;font-weight:600;line-height:1.6;white-space:nowrap}
.pill.ok{background:#e3eee5;color:#2f5c3a}
.pill.wait{background:#f7ecd8;color:#7a4e0c}
.pill.bad{background:#f8e2dd;color:#8f2d1a}
button.ghost{background:transparent;border-color:transparent;color:#6b5c60;font-weight:500}
button.ghost:hover{border-color:var(--line)}
h2.section{font-size:15px;letter-spacing:.06em;text-transform:uppercase;color:#8a787d;margin:28px 0 10px;font-weight:600}
@media (prefers-color-scheme:dark){
  .pill.ok{background:#22301f;color:#9ccaa6}
  .pill.wait{background:#3a2d17;color:#e2b26a}
  .pill.bad{background:#3d1f19;color:#f0907d}
}

/* Swallows implicit form submission so pressing Enter in a decision form's
   reason field cannot pick the first button, which is always the approving
   one. It must be focusable-by-form but never reachable or visible. */
.enter-guard{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;min-height:0}
label.check{display:flex;align-items:center;gap:8px;font-weight:500;margin:4px 0}
label.check input{width:auto;min-height:0}
fieldset{border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin:0}
fieldset legend{padding:0 6px;font-size:14px;font-weight:600}
.allowance{display:flex;align-items:center;gap:12px}
.allowance input[type=number]{max-width:130px}

/* The gate. Someone standing at a door with a scanner reads this from arm's
   length, so the outcome is large and the colour carries the meaning before
   the words do. */
.scan-panel input{font-size:18px;font-family:var(--mono,ui-monospace,monospace)}
.scan-result{border-left:6px solid var(--line)}
.scan-result h2{margin:0 0 4px;font-size:28px}
.scan-result .scan-name{font-size:22px;font-weight:600;margin:0 0 6px}
.scan-result.in{border-left-color:#3f6b4a;background:#f2f8f3}
.scan-result.out{border-left-color:#8a5a12;background:#fbf5ea}
.scan-result.bad{border-left-color:#a1331f;background:#fbeeeb}
@media (prefers-color-scheme:dark){
  .scan-result.in{background:#1c2a1d}
  .scan-result.out{background:#2c2415}
  .scan-result.bad{background:#2f1a16}
}

/* Before and after in the activity log. Monospaced values so a changed number
   lines up with the one it replaced. */
table.changes{font-size:14px}
table.changes td:nth-child(2),table.changes td:nth-child(3){font-family:var(--mono,ui-monospace,monospace);font-variant-numeric:tabular-nums}
table.changes td:nth-child(2){color:#8b7b7f}

/*
  Touch targets on the bottom navigation.

  These were 38px tall. Both Apple's and WCAG's guidance put the minimum at
  44px, and this is the control people tap most often, frequently one-handed
  and often while doing something else: a guard at a gate, someone at a till
  during service. A missed tap there is not a cosmetic problem.

  min-height rather than padding, so the target grows without pushing the
  labels apart on a narrow screen.
*/
.mobile-nav a{min-height:44px;display:flex;align-items:center;justify-content:center;padding:6px 10px}
