*{box-sizing:border-box}
:root{--danger:#a1300f;--danger-hover:#7f250b}
html,body{margin:0}
body{background:var(--bg);color:var(--text);font:16px/1.5 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;min-height:100vh;display:flex;flex-direction:column}
a{color:var(--primary)}
.top{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;background:#fff;border-bottom:1px solid rgba(0,0,0,.08);flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--text);font-weight:650;font-size:18px}
.logo{height:32px;width:auto}
.who{display:flex;align-items:center;gap:12px;font-size:14px;min-width:0}
.who form{margin:0}
.email{max-width:42vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#555}
.wrap{width:100%;max-width:960px;margin:0 auto;padding:24px 16px;flex:1}
.h{font-size:24px;margin:0 0 16px}
.card{background:#fff;border:1px solid rgba(0,0,0,.08);border-radius:12px;padding:20px;margin:0 0 16px;overflow-wrap:anywhere}
.card h1{margin-top:0;font-size:24px}.card h2{margin-top:0;font-size:19px}
.narrow{max-width:520px;margin-left:auto;margin-right:auto}
.hero{text-align:center;padding:40px 20px}
.lead{font-size:18px;color:#444}
.actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin:20px 0}
.btn{display:inline-block;background:var(--primary);color:#fff;border:0;border-radius:8px;padding:11px 18px;font:inherit;font-weight:600;text-decoration:none;cursor:pointer;margin:4px 0;text-align:center}
.btn.ghost{background:transparent;color:var(--primary);border:1px solid var(--primary)}
.btn.small{padding:6px 10px;font-size:14px}
/* Destructive actions (wipe, revoke, delete payment/work/invoice/licence, cancel, reject...):
   one unambiguous style, applied consistently everywhere instead of the old mix of a
   text-color-only .danger, a background-only .danger-btn and plain .btn (which fell back to
   the primary brand colour, e.g. the Factory wipe button). Solid, never relies on .ghost. */
.btn.danger{background:var(--danger);color:#fff;border:1px solid var(--danger)}
.btn.danger:hover,.btn.danger:focus-visible{background:var(--danger-hover)}
.btn.danger:focus-visible{outline:2px solid var(--danger);outline-offset:2px}
.link{background:none;border:0;color:var(--primary);font:inherit;cursor:pointer;padding:0;text-decoration:underline}
.hidden{display:none}
.muted{color:#666}.small{font-size:14px}.warn{color:#9a3412}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px}
.stack{display:flex;flex-direction:column;gap:8px}
input,select{font:inherit;padding:10px;border:1px solid #bbb;border-radius:8px;width:100%;background:#fff;color:#111}
.copy{font-family:ui-monospace,monospace;font-size:13px}
.t{border-collapse:collapse;width:100%;font-size:14px}.t th,.t td{text-align:left;padding:6px 8px;border-bottom:1px solid #eee;vertical-align:top}
.scroll{overflow-x:auto}
.row-actions{display:flex;gap:6px;flex-wrap:wrap}.row-actions form{margin:0}
.pre{white-space:pre-wrap;font-size:13px;background:#f6f6f6;padding:10px;border-radius:8px;margin:0}
.foot{padding:16px;text-align:center;font-size:13px;color:#777}
@media (max-width:480px){.btn{width:100%}.email{max-width:50vw}.hero{padding:28px 12px}}
.approve{display:flex;gap:6px;flex-wrap:wrap}.approve select{width:auto;padding:6px}
/* ---- works & finance module (logical properties only: RTL-safe) ---- */
.who a{white-space:nowrap}
.wide{max-width:1180px}
.prop-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 16px;margin:0 0 8px}
.prop-head h1{margin:0;font-size:24px}
.crumb{font-size:14px;margin:0 0 6px}
.tabs{display:flex;gap:4px;overflow-x:auto;border-block-end:1px solid rgba(0,0,0,.1);margin:0 0 18px;padding:0;scrollbar-width:thin}
.tabs a{padding:9px 12px;text-decoration:none;color:#444;white-space:nowrap;border-block-end:2px solid transparent;font-size:15px}
.tabs a.on{color:var(--primary);border-block-end-color:var(--primary);font-weight:600}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin:0 0 16px}
.kpi{background:#fff;border:1px solid rgba(0,0,0,.08);border-radius:12px;padding:14px 16px;min-width:0}
.kpi .k{font-size:13px;color:#666;margin:0 0 4px}
.kpi .v{font-size:22px;font-weight:650;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.kpi .v small{font-size:13px;font-weight:500;color:#666}
.kpi .s{font-size:13px;color:#666;margin-block-start:4px}
.kpi.alert{border-color:#f0b4a6;background:#fff8f6}.kpi.alert .v{color:#a1300f}
.kpi.good .v{color:#17603a}
.two{display:grid;grid-template-columns:1fr 1fr;gap:16px}
@media (max-width:760px){.two{grid-template-columns:1fr}}
.num{font-variant-numeric:tabular-nums;text-align:end;white-space:nowrap}
.t th.num,.t td.num{text-align:end}
progress{width:100%;height:10px;accent-color:var(--primary);vertical-align:middle}
.bar{display:flex;align-items:center;gap:8px}.bar progress{flex:1;min-width:60px}.bar span{font-size:13px;min-width:3.2em;text-align:end;font-variant-numeric:tabular-nums}
.chip{display:inline-block;font-size:12px;font-weight:600;padding:2px 8px;border-radius:999px;background:#eee;color:#333;white-space:nowrap}
.chip.planned{background:#eef2f7;color:#334155}.chip.in_progress{background:#e7f1ff;color:#1d4ed8}
.chip.done,.chip.paid,.chip.approved{background:#e6f4ea;color:#17603a}.chip.on_hold{background:#fdf3d7;color:#7a5600}
.chip.unpaid{background:#eef2f7;color:#334155}.chip.part_paid{background:#e7f1ff;color:#1d4ed8}
.chip.overdue,.chip.rejected{background:#fde8e4;color:#a1300f}.chip.pending{background:#fdf3d7;color:#7a5600}
.chip.imported{background:#f3e8ff;color:#6b21a8}
.rows{display:flex;flex-direction:column;gap:10px}
.row{background:#fff;border:1px solid rgba(0,0,0,.08);border-radius:12px;padding:14px 16px;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 16px;align-items:start}
.row .main{min-width:0}
.row .ttl{font-weight:600;text-decoration:none;color:var(--text);overflow-wrap:anywhere}
.row .ttl:hover{text-decoration:underline}
.row .meta{font-size:13px;color:#666;margin-block-start:2px;overflow-wrap:anywhere}
.row .fig{text-align:end;font-variant-numeric:tabular-nums;white-space:nowrap;font-size:14px}
.row .fig b{font-size:16px}
.row .wide-cell{grid-column:1/-1}
@media (max-width:520px){.row{grid-template-columns:1fr}.row .fig{text-align:start}}
.toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:space-between;margin:0 0 12px}
.toolbar .grp{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.toolbar .btn{margin:0}
.filters a{font-size:14px;padding:5px 10px;border-radius:999px;border:1px solid rgba(0,0,0,.12);text-decoration:none;color:#444;background:#fff}
.filters a.on{border-color:var(--primary);color:var(--primary);font-weight:600}
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}
.form-grid .full{grid-column:1/-1}
@media (max-width:620px){.form-grid{grid-template-columns:1fr}}
.field label{display:block;font-size:14px;font-weight:600;margin:0 0 4px}
.field .hint{font-size:13px;color:#666;margin-block-start:3px}
textarea{font:inherit;padding:10px;border:1px solid #bbb;border-radius:8px;width:100%;min-height:84px;background:#fff;color:#111}
input[type=file]{padding:8px;background:#fafafa}
input[type=checkbox]{width:auto;margin-inline-end:8px;transform:scale(1.2)}
.check{display:flex;align-items:flex-start;gap:4px;font-size:15px}
.err{background:#fde8e4;color:#7f1d1d;border:1px solid #f5b5a6;border-radius:8px;padding:10px 12px;margin:0 0 12px}
.ok{background:#e6f4ea;color:#14532d;border:1px solid #a7d7b5;border-radius:8px;padding:10px 12px;margin:0 0 12px}
.totals{display:grid;grid-template-columns:auto auto;gap:4px 18px;justify-content:start;font-variant-numeric:tabular-nums}
.totals .big{font-size:20px;font-weight:650}
.files{list-style:none;padding:0;margin:0 0 10px}.files li{display:flex;gap:8px;align-items:center;justify-content:space-between;padding:6px 0;border-block-end:1px solid #eee;flex-wrap:wrap}
.files form{margin:0}
.attach{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.attach input[type=file]{flex:1;min-width:180px}
.attach .btn{margin:0}
.act{list-style:none;padding:0;margin:0}.act li{padding:8px 0;border-block-end:1px solid #f0f0f0;font-size:14px;overflow-wrap:anywhere}
.act .when{color:#777;font-size:12px;display:block}
.changes{font-size:13px;color:#555;margin:2px 0 0;padding-inline-start:16px}
.inline{display:inline}
.quick{display:flex;gap:6px;align-items:center}.quick input{width:5.2em;padding:6px}.quick .btn{margin:0}
.muted-box{background:#f6f6f4;border-radius:10px;padding:12px 14px;font-size:14px;color:#444}
.stat-list{list-style:none;padding:0;margin:0}.stat-list li{display:flex;justify-content:space-between;gap:12px;padding:7px 0;border-block-end:1px solid #f0f0f0;font-size:15px}
fieldset{border:0;padding:0;margin:0;min-width:0}
.kpi .v small{display:block;font-size:12px;line-height:1.2}
.kpi .v{white-space:nowrap;font-size:clamp(18px,1.9vw,22px)}
.changes li{border:0!important;padding:1px 0!important}
.row.flat{border:0;border-block-end:1px solid #eee;border-radius:0;padding:10px 0}
@media (max-width:620px){.tabs{flex-wrap:wrap;overflow-x:visible}.tabs a{padding:7px 9px}}
.t td,.t th{overflow-wrap:normal;word-break:normal}
.t td{min-width:4.5em}
.t td:first-child{min-width:7em}
.vat-off .vat-on-only,.vat-off #vat-note-on{display:none}
.vat-off-note{display:none}.vat-off .vat-off-note{display:inline}.vat-off p.vat-off-note{display:block}
.vat-toggle .check span{font-weight:600}
.flabel{display:block;font-size:14px;font-weight:600;margin:0 0 6px}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chips label{position:relative;margin:0;cursor:pointer}
.chips input{position:absolute;opacity:0;width:1px;height:1px}
.chips span{display:inline-block;padding:7px 12px;border:1px solid rgba(0,0,0,.18);border-radius:999px;font-size:14px;background:#fff;color:#333}
.chips input:checked+span{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:600}
.chips input:focus-visible+span{outline:2px solid var(--primary);outline-offset:2px}
.js-on .purpose-form:not(.purpose-progress) .stage-only{display:none}
.purpose-cell{min-width:12em;max-width:28em;white-space:normal}
input[readonly]{background:#f3f3f3;color:#555}
.fraud{background:#fde8e4;border:2px solid #d9534f;color:#7f1d1d;border-radius:10px;padding:12px 14px;margin:0 0 14px;overflow-wrap:anywhere}
.fraud form{margin-inline-start:6px}.fraud .btn{margin:6px 0 0}
.bank-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-block-end:1px solid #eee;flex-wrap:wrap}
.bank-row .bk{min-width:7.5em;font-size:13px;color:#666}
.bank-row .bv{flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:15px;overflow-wrap:anywhere;min-width:0}
.bank-row .btn{margin:0}
.prev{margin:10px 0;font-size:14px}.prev summary{cursor:pointer;color:#a1300f}
.bank-row .btn{width:auto}
.field.from-file input,.field.from-file textarea,.field.from-file select{background:#fffbea;border-color:#d4a72c}
.field.from-file>label::after{content:" · from file";font-weight:400;font-size:12px;color:#8a6a00}
.field.unsure input,.field.unsure textarea{border:2px solid #d9534f;background:#fff5f3}
.field.unsure>label::after{content:" · check this";color:#a1300f;font-weight:600}
.from-file-chip{background:#fffbea;border:1px solid #d4a72c;border-radius:4px;padding:0 4px}
.unsure-chip{border:2px solid #d9534f;border-radius:4px;padding:0 4px;color:#a1300f}
#reading progress{width:100%;margin:8px 0 12px}
.bank-row .bv{flex:1 1 14em}
.chips.big span{padding:10px 14px;font-size:15px}
.req-only{display:none}.status-form.is-request .req-only{display:inline}.status-form.is-request p.req-only{display:block}
.status-form.is-request .paid-only{display:none}
.status-form.is-request .bank-opt{display:none}
fieldset.bank-fields{border:1px solid rgba(0,0,0,.12);border-radius:10px;padding:12px 14px}
.status-form.is-request fieldset.bank-fields{border-color:var(--primary);background:#f6fbf9}
.transfer-q{border-color:#e9c46a;background:#fffdf5}
.toolbar h2{margin:0}
details.hist{margin-top:12px;border-top:1px solid #eee;padding-top:10px}
details.hist summary{cursor:pointer;color:var(--primary);font-weight:600}
.split-table input,.split-table select{padding:7px;font-size:14px}
.split-sum{font-variant-numeric:tabular-nums;font-weight:600}
.split-sum.off{color:#a1300f}
.split-row{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,2fr) minmax(0,1fr);gap:8px;margin:0 0 8px}
@media (max-width:620px){.split-row{grid-template-columns:1fr;border-bottom:1px solid #eee;padding-bottom:8px}}
.on-invoice .noinv-only{display:none}
/* .danger-link: a plain text LINK that leads to a destructive action (e.g. "Delete" next
   to a list row) - deliberately NOT a filled button (too heavy for an inline row action),
   but still coloured as a clear warning. Real destructive BUTTONS use .btn.danger above. */
.danger-link{color:var(--danger)}
.narrow-del{max-width:560px}
.big-amt{font-size:26px;font-weight:650;margin:0 0 4px;font-variant-numeric:tabular-nums}
.del-summary{background:#f6f6f4;border-radius:10px;padding:12px 14px;margin:0 0 12px}
.crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin:0 0 10px;font-size:14px}
.back-btn{display:inline-flex;align-items:center;gap:4px;padding:7px 12px;border:1px solid rgba(0,0,0,.15);border-radius:999px;background:#fff;text-decoration:none;color:var(--text);font-weight:600;white-space:nowrap}
.back-btn:hover{border-color:var(--primary);color:var(--primary)}
.crumbs .trail{color:#666;overflow-wrap:anywhere;min-width:0}
.crumbs .trail a{color:var(--primary)}
.apply-form{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:6px}
.apply-form select{width:auto;max-width:100%;padding:6px;font-size:14px}.apply-form input{width:7.5em;padding:6px;font-size:14px}
.apply-form .btn{margin:0}
.kpi.alert .v small{display:inline}
.overpaid{color:#a1300f;font-weight:600}
.quick-status{display:flex;flex-wrap:wrap;gap:6px 8px;align-items:center}
.quick-status select{width:auto;padding:6px 8px;font-size:14px}
.quick-status .btn{margin:0}
.quick-status progress{flex:1 1 100%;margin-top:2px}
.pair-code{font-family:ui-monospace,Menlo,monospace;font-size:34px;letter-spacing:.08em;text-align:center;background:#f6f6f4;border-radius:10px;padding:14px}
.lock-subnav{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}.lock-subnav .btn{width:auto;flex:0 0 auto}
.t.kv th{width:34%;text-align:start;vertical-align:top;font-weight:600}.t.kv td{word-break:break-word}
.flags-row .chip{white-space:normal;max-width:100%;display:inline-block;margin:2px 0}
.spinner{display:inline-block;width:12px;height:12px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin .8s linear infinite;vertical-align:-1px}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.spinner{animation:none}}
/* site visits / schedule */
.chip.partly_done{background:#e7f1ff;color:#1d4ed8}
.chip.no_show,.chip.cancelled{background:#eee;color:#555;text-decoration:line-through}
.small-kpis{margin:0 0 12px}
.small-kpis .kpi{padding:10px 14px}
.small-kpis .kpi .v{font-size:20px}
.day-group{margin:0 0 14px}
.day-group:last-child{margin-block-end:0}
.day-h{font-size:14px;font-weight:700;color:#666;margin:0 0 6px;text-transform:uppercase;letter-spacing:.02em}
.status-buttons{display:flex;flex-wrap:wrap;gap:6px 8px;margin-top:8px}
.status-buttons .btn{margin:0}
.visit-status-form{margin-top:10px;padding-top:10px;border-block-start:1px solid #eee}
.visit-row.cancelled,.visit-row.no_show{opacity:.7}
.book-visit-summary{cursor:pointer;color:var(--text);font-weight:650;font-size:19px;list-style:none}
.book-visit-summary::-webkit-details-marker{display:none}
.book-visit-summary::before{content:'▸ ';color:var(--primary)}
.book-visit-details[open] .book-visit-summary::before{content:'▾ '}
.book-visit-details form{margin-top:14px}
/* licences & compliance */
.chip.needs_confirming,.chip.not_started{background:#eee;color:#555}
.chip.preparing,.chip.submitted{background:#fdf3d7;color:#7a5600}
.chip.under_review,.chip.site_visit{background:#e7f1ff;color:#1d4ed8}
.chip.observations{background:#fde8e4;color:#a1300f}
.chip.issued{background:#e6f4ea;color:#17603a}
.chip.renewal_due{background:#fdf3d7;color:#7a5600}
.chip.not_required{background:#eee;color:#777;text-decoration:line-through}
.chip.suggested{background:#f3e8ff;color:#6b21a8}
.review-row{display:flex;flex-direction:column;gap:10px}
.review-row .main{min-width:0}
.review-form{display:flex;flex-direction:column;gap:8px}
.review-comment{width:100%;min-height:3em;padding:8px;border:1px solid rgba(0,0,0,.15);border-radius:8px;font:inherit;resize:vertical}
.review-form .status-buttons{display:flex;gap:8px}
.review-form .status-buttons .btn{flex:1 1 0;margin:0}
@media (min-width:620px){.review-row{flex-direction:row;align-items:flex-start;justify-content:space-between;gap:16px}
  .review-form{flex:0 0 260px}}
.review-notes{margin-top:6px}
.review-notes summary{cursor:pointer;color:var(--primary);font-size:13px;font-weight:600}
.review-notes p{margin:6px 0 0}

/* history block (work/invoice/payment pages) - EN/AR, newest-first timeline */
.hist-card{overflow-wrap:anywhere}
.hist-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap}
.hist-lang{margin:0}
.hist-list{list-style:none;padding:0;margin:0}
.hist-item{padding:10px 0;border-block-end:1px solid #f0f0f0;font-size:14px;overflow-wrap:anywhere}
.hist-item:last-child{border-block-end:0}
.hist-when{display:block;color:#777;font-size:12px}
.hist-line{display:block;margin-top:2px}
.hist-who{font-weight:650}
.hist-changes{font-size:13px;color:#555;margin:4px 0 0;padding-inline-start:16px;list-style:disc}
.hist-changes li{padding:1px 0}
.hist-self .hist-who{color:var(--primary)}
.hist-filter{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:8px 0}
.hist-filter select{padding:4px 6px;border-radius:6px;border:1px solid rgba(0,0,0,.15);font:inherit}
@media (max-width:480px){.hist-item{font-size:13px}.hist-when{font-size:11px}}
