:root{
  --njr-orange:#D65600;--njr-orange-light:#D96820;--njr-orange-pale:#FDF0E8;--njr-orange-border:#E8A07A;
  --njr-dark:#2D2D2D;--njr-dark-mid:#3D3D3D;
  --cream:#EFEFEF;--cream-dark:#E2E2E2;--white:#FFFFFF;
  --text:#2D2D2D;--text-mid:#4A4A4A;--text-light:#717171;
  --border:#D8D3CA;--border-light:#E8E3DA;
  --green:#16a34a;--green-pale:#dcfce7;--green-border:#86efac;--green-dark:#15803d;
  --blue:#1d4ed8;--blue-pale:#dbeafe;--blue-border:#93c5fd;
  --gray:#6b7280;--gray-pale:#f3f4f6;--gray-border:#d1d5db;
  --amber:#b45309;--amber-pale:#fef3c7;--amber-border:#fcd34d;
  --purple:#7c3aed;--purple-pale:#ede9fe;--purple-border:#c4b5fd;
  --red:#dc2626;--red-pale:#fee2e2;--red-border:#fca5a5;
  --radius:6px;--radius-sm:4px;
  --shadow-xs:0 1px 2px rgba(45,45,45,.05);
  --shadow:0 1px 3px rgba(45,45,45,.10);
  --shadow-md:0 2px 8px rgba(45,45,45,.10);
}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:'Source Sans 3',sans-serif;background:var(--cream);color:var(--text);min-height:100vh;font-size:14px;line-height:1.45}

.topbar{height:54px;background:var(--njr-dark-mid);display:flex;align-items:center;justify-content:space-between;padding:0 16px;border-bottom:3px solid var(--njr-orange);position:sticky;top:0;z-index:50}
.topbar-left{display:flex;align-items:center;gap:18px}
.logo-wrap{display:flex;align-items:center;gap:11px;padding-right:14px;border-right:1px solid rgba(255,255,255,.12)}
.logo-banner{width:78px;height:31px;flex-shrink:0;display:block}
/* All-orange logo variant — both NJR letters and LAND SURVEYING tag are orange.
   No dark-topbar override needed; orange reads cleanly on the dark background. */
.logo-sub{font-size:10px;color:rgba(255,255,255,.5);letter-spacing:.1em;text-transform:uppercase;font-weight:600}
.nav-tabs{display:flex;gap:2px}
.nav-tab{background:transparent;border:none;color:rgba(255,255,255,.55);font-family:inherit;font-size:12px;font-weight:500;padding:6px 12px;border-radius:var(--radius-sm);cursor:pointer;transition:all .15s;letter-spacing:.01em}
.nav-tab:hover{color:rgba(255,255,255,.9);background:rgba(255,255,255,.06)}
.nav-tab.active{background:var(--njr-orange);color:#fff;font-weight:600}
.topbar-right{display:flex;align-items:center;gap:8px}
.btn{font-family:inherit;font-size:12px;font-weight:500;padding:6px 12px;border-radius:var(--radius-sm);cursor:pointer;border:1px solid transparent;transition:all .15s;display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.btn-orange{background:var(--njr-orange);color:#fff;font-weight:600;border-color:var(--njr-orange)}
.btn-orange:hover{background:var(--njr-orange-light)}
.btn-ghost-dark{background:transparent;color:rgba(255,255,255,.6);border-color:rgba(255,255,255,.18)}
.btn-ghost-dark:hover{background:rgba(255,255,255,.08);color:#fff}
.btn-ghost{background:transparent;color:var(--text-mid);border-color:var(--border)}
.btn-ghost:hover{background:var(--cream-dark);color:var(--text)}
.btn-ghost.active{background:var(--njr-orange);color:#fff;border-color:var(--njr-orange);font-weight:600}
.btn-sm{padding:4px 9px;font-size:11px}
.btn-link{background:none;border:none;color:var(--text-mid);font-family:inherit;font-size:12px;cursor:pointer;padding:4px 6px;border-radius:var(--radius-sm)}
.btn-link:hover{background:var(--cream-dark);color:var(--text)}

.content{max-width:1400px;margin:0 auto;padding:22px 24px 60px}
.view{display:none}
.view.active{display:block}

.page-hdr{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:18px;gap:16px;flex-wrap:wrap}
.page-hdr h1{font-size:22px;font-weight:600;color:var(--text);letter-spacing:-.01em}
.page-hdr-sub{font-size:12px;color:var(--text-light);margin-top:2px}

.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:20px}
.stat-card{background:var(--white);border:1px solid var(--border-light);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow-xs);position:relative;overflow:hidden}
.stat-card.clickable{cursor:pointer}
.stat-card::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--njr-orange);opacity:.0;transition:opacity .15s}
.stat-card:hover::before{opacity:.7}
.stat-label{font-size:10px;font-weight:700;color:var(--text-light);letter-spacing:.08em;text-transform:uppercase;margin-bottom:4px}
.stat-value{font-size:26px;font-weight:600;color:var(--text);letter-spacing:-.01em;line-height:1.1}
.stat-value.warm{color:var(--njr-orange)}
.stat-meta{font-size:11px;color:var(--text-light);margin-top:3px}
.stat-meta .overdue{color:var(--red);font-weight:600}

.section-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;gap:14px;flex-wrap:wrap}
.section-hdr h2{font-size:14px;font-weight:600;color:var(--text);text-transform:uppercase;letter-spacing:.06em}
.section-hdr.with-spacer{margin-top:24px}
.filter-group{display:flex;gap:4px;flex-wrap:wrap}
.filter-chip{background:var(--white);border:1px solid var(--border);color:var(--text-mid);font-family:inherit;font-size:11px;font-weight:500;padding:4px 10px;border-radius:100px;cursor:pointer;transition:all .15s}
.filter-chip:hover{border-color:var(--njr-orange);color:var(--text)}
.filter-chip.active{background:var(--njr-dark);color:#fff;border-color:var(--njr-dark)}

/* === DASHBOARD 2-COL ROW (Tasks + Activity Feed) === */
.dash-row{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:14px;margin-bottom:24px}
@media(max-width:980px){.dash-row{grid-template-columns:1fr}}

/* === PSA COUNTERSIGN WIDGET (action-needed banner above stats) === */
.psa-queue-card{background:#fff;border:1px solid var(--njr-orange-border);border-left:4px solid var(--njr-orange);border-radius:var(--radius);box-shadow:var(--shadow-xs);margin-bottom:14px;overflow:hidden}
.psa-queue-card.empty{border-left-color:var(--green);border-color:var(--green-border)}
.psa-queue-hdr{padding:11px 14px;border-bottom:1px solid var(--border-light);background:linear-gradient(to bottom,#fff,var(--cream));display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.psa-queue-card.empty .psa-queue-hdr{border-bottom:none}
.psa-queue-hdr h2{font-size:13px;font-weight:600;color:var(--text);text-transform:uppercase;letter-spacing:.06em;display:flex;align-items:center;gap:8px}
.psa-queue-hdr h2 .psa-q-count{font-size:10px;font-weight:700;color:#fff;background:var(--njr-orange);padding:2px 9px;border-radius:100px;letter-spacing:.04em}
.psa-queue-card.empty .psa-q-count{background:var(--green)}
.psa-queue-hdr .psa-q-sub{font-size:11px;color:var(--text-light);font-weight:500;font-style:italic}
.psa-queue-list{}
.psa-q-row{display:flex;align-items:center;gap:14px;padding:11px 14px;border-bottom:1px solid var(--cream-dark);transition:background .12s}
.psa-q-row:last-child{border-bottom:none}
.psa-q-row:hover{background:var(--cream)}
.psa-q-meta{flex:1;min-width:0}
.psa-q-top{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:2px}
.psa-q-id{font-size:10px;font-weight:700;color:var(--text-light);letter-spacing:.04em}
.psa-q-fee{font-size:11px;font-weight:700;color:var(--njr-orange)}
.psa-q-tag{font-size:9px;font-weight:600;padding:1px 7px;border-radius:100px;letter-spacing:.04em;text-transform:uppercase;background:var(--cream-dark);color:var(--text-light);border:1px solid var(--border-light)}
.psa-q-tag.t-residential{background:var(--blue-pale);color:var(--blue);border-color:var(--blue-border)}
.psa-q-tag.t-commercial{background:var(--amber-pale);color:var(--amber);border-color:var(--amber-border)}
.psa-q-tag.t-subconsult{background:var(--gray-pale);color:var(--gray);border-color:var(--gray-border)}
.psa-q-client{font-size:14px;font-weight:600;color:var(--text);line-height:1.3}
.psa-q-detail{font-size:11px;color:var(--text-mid);margin-top:1px}
.psa-q-detail .psa-q-when{color:var(--text-light)}
.psa-q-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}
.psa-q-btn{background:var(--njr-orange);color:#fff;border:none;padding:7px 14px;border-radius:var(--radius-sm);font-family:inherit;font-size:12px;font-weight:600;cursor:pointer;letter-spacing:.02em}
.psa-q-btn:hover{background:var(--njr-orange-light)}
.psa-q-btn.secondary{background:transparent;color:var(--text-mid);border:1px solid var(--border)}
.psa-q-btn.secondary:hover{background:var(--cream-dark);color:var(--text)}
.psa-queue-empty{padding:14px;text-align:center;color:var(--green-dark);font-size:12px;display:flex;align-items:center;justify-content:center;gap:7px}
.psa-queue-empty .check{width:18px;height:18px;border-radius:50%;background:var(--green);color:#fff;font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center}
@media(max-width:640px){
  .psa-q-row{flex-wrap:wrap}
  .psa-q-actions{width:100%;justify-content:flex-end}
}

/* === ACTIVITY FEED === */
.feed-card{background:var(--white);border:1px solid var(--border-light);border-radius:var(--radius);box-shadow:var(--shadow-xs);overflow:hidden;display:flex;flex-direction:column;min-width:0}
.feed-hdr{padding:11px 14px;border-bottom:1px solid var(--border-light);background:linear-gradient(to bottom,#fff,var(--cream));display:flex;align-items:center;justify-content:space-between}
.feed-hdr h2{font-size:13px;font-weight:600;color:var(--text);text-transform:uppercase;letter-spacing:.06em;display:flex;align-items:center;gap:8px}
.feed-hdr h2 .feed-count{font-size:10px;font-weight:700;color:var(--text-light);background:var(--cream-dark);padding:1px 8px;border-radius:100px}
.feed-refresh{background:transparent;border:none;color:var(--text-light);font-size:11px;font-family:inherit;cursor:pointer;padding:2px 6px;border-radius:var(--radius-sm)}
.feed-refresh:hover{background:var(--cream-dark);color:var(--text)}
.feed-body-wrap{flex:1;overflow-y:auto;max-height:340px}
.feed-empty{padding:22px 14px;text-align:center;color:var(--text-light);font-size:12px;font-style:italic}
.feed-item{display:flex;align-items:flex-start;gap:9px;padding:8px 14px;border-bottom:1px solid var(--cream-dark);cursor:pointer;transition:background .12s;min-width:0}
.feed-item:last-child{border-bottom:none}
.feed-item:hover{background:var(--cream)}
.feed-icon{flex-shrink:0;width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;background:var(--cream-dark);color:var(--text-mid);border-radius:3px;margin-top:1px}
.feed-item.accepted .feed-icon{background:var(--green-pale);color:var(--green-dark)}
.feed-item.declined .feed-icon{background:var(--red-pale);color:var(--red)}
.feed-item.warm .feed-icon{background:var(--njr-orange-pale);color:var(--njr-orange)}
.feed-item.intent .feed-icon{background:var(--blue-pale);color:var(--blue)}
.feed-body-text{flex:1;min-width:0}
.feed-text{font-size:12px;color:var(--text);line-height:1.4;word-break:break-word}
.feed-text strong{font-weight:600}
.feed-text .feed-id{font-size:10px;font-weight:600;color:var(--text-light);letter-spacing:.04em;margin-left:4px}
.feed-when{font-size:10px;color:var(--text-light);margin-top:1px}

/* === TASKS === */
.tasks-card{background:var(--white);border:1px solid var(--border-light);border-radius:var(--radius);box-shadow:var(--shadow-xs);margin-bottom:24px;overflow:hidden}
.tasks-hdr{display:flex;align-items:center;justify-content:space-between;padding:11px 14px;border-bottom:1px solid var(--border-light);background:linear-gradient(to bottom,#fff,var(--cream))}
.tasks-hdr h2{font-size:13px;font-weight:600;color:var(--text);text-transform:uppercase;letter-spacing:.06em;display:flex;align-items:center;gap:8px}
.tasks-hdr h2 .tasks-count{font-size:10px;font-weight:700;color:var(--text-light);background:var(--cream-dark);padding:1px 8px;border-radius:100px}
.tasks-toggle{background:transparent;border:none;color:var(--text-light);font-size:11px;font-family:inherit;cursor:pointer;padding:2px 6px;border-radius:var(--radius-sm)}
.tasks-toggle:hover{background:var(--cream-dark);color:var(--text)}
.task-add{display:flex;gap:8px;padding:10px 14px;border-bottom:1px solid var(--border-light);background:var(--cream)}
.task-add input{flex:1;padding:7px 10px;font-size:13px;border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;color:var(--text);background:#fff}
.task-add input:focus{outline:none;border-color:var(--njr-orange)}
.task-add select{padding:7px 10px;font-size:12px;border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;color:var(--text-mid);background:#fff;max-width:160px}
#task-due{padding:7px 8px;font-size:12px;border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;color:var(--text-mid);background:#fff;width:138px;flex-shrink:0}
.task-add button{padding:7px 14px;background:var(--njr-orange);color:#fff;border:none;border-radius:var(--radius-sm);font-family:inherit;font-size:13px;font-weight:600;cursor:pointer}
.task-add button:hover{background:var(--njr-orange-light)}
.task-list{max-height:280px;overflow-y:auto}
.task-item{display:flex;align-items:flex-start;gap:10px;padding:9px 14px;border-bottom:1px solid var(--border-light);transition:background .12s}
.task-item:last-child{border-bottom:none}
.task-item:hover{background:var(--cream)}
.task-item.done{opacity:.55}
.task-item.done .task-text{text-decoration:line-through;color:var(--text-light)}
.task-check{flex-shrink:0;width:16px;height:16px;border:1.5px solid var(--border);border-radius:3px;cursor:pointer;display:flex;align-items:center;justify-content:center;background:#fff;margin-top:1px;transition:all .12s}
.task-check:hover{border-color:var(--njr-orange)}
.task-item.done .task-check{background:var(--green);border-color:var(--green)}
.task-item.done .task-check::after{content:'';width:4px;height:8px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg);margin-top:-2px}
.task-body{flex:1;min-width:0}
.task-text{font-size:13px;color:var(--text);line-height:1.4;word-break:break-word}
.task-meta{display:flex;gap:7px;margin-top:3px;font-size:11px;color:var(--text-light);align-items:center;flex-wrap:wrap}
.task-tag{font-size:9px;font-weight:600;padding:1px 6px;border-radius:100px;background:var(--cream-dark);color:var(--text-mid);border:1px solid var(--border-light);text-transform:uppercase;letter-spacing:.04em}
.task-tag.linked{background:var(--njr-orange-pale);color:var(--njr-orange);border-color:var(--njr-orange-border);cursor:pointer}
.task-tag.due{background:var(--blue-pale);color:var(--blue);border-color:var(--blue-border)}
.task-tag.due.overdue{background:var(--red-pale);color:var(--red);border-color:var(--red-border)}
.task-del{flex-shrink:0;background:transparent;border:none;color:var(--text-light);font-size:14px;cursor:pointer;padding:2px 6px;border-radius:var(--radius-sm);opacity:0;transition:opacity .15s}
.task-item:hover .task-del{opacity:.7}
.task-del:hover{opacity:1!important;background:var(--red-pale);color:var(--red)}
.tasks-empty{padding:22px 14px;text-align:center;color:var(--text-light);font-size:12px;font-style:italic}

/* === KANBAN === */
.kanban{display:grid;gap:12px;align-items:start;margin-bottom:24px}
.kanban-3{grid-template-columns:repeat(3,minmax(0,1fr))}
.kanban-5{grid-template-columns:repeat(5,minmax(0,1fr))}
.kanban-col{background:transparent;border-radius:var(--radius);min-height:180px}
.kanban-col-hdr{display:flex;align-items:center;justify-content:space-between;padding:6px 10px 8px;border-bottom:1px solid var(--border);margin-bottom:8px}
.kanban-col-name{font-size:11px;font-weight:700;color:var(--text-light);letter-spacing:.08em;text-transform:uppercase;display:flex;align-items:center;gap:6px}
.kanban-col-dot{width:7px;height:7px;border-radius:100px;display:inline-block}
.kc-draft .kanban-col-dot,.kc-scheduled .kanban-col-dot{background:var(--gray)}
.kc-sent .kanban-col-dot,.kc-field .kanban-col-dot{background:var(--blue)}
.kc-signing .kanban-col-dot,.kc-drafting .kanban-col-dot{background:var(--njr-orange)}
.kc-review .kanban-col-dot{background:var(--purple)}
.kc-awaiting_payment .kanban-col-dot{background:var(--amber)}
.kc-delivered .kanban-col-dot{background:var(--green)}
.kanban-col-count{font-size:10px;font-weight:600;color:var(--text-light);background:var(--cream-dark);padding:1px 7px;border-radius:100px;min-width:20px;text-align:center}
.kanban-col-body{display:flex;flex-direction:column;gap:7px}
.kanban-col-empty{padding:18px 12px;text-align:center;color:var(--text-light);font-size:11px;font-style:italic;border:1.5px dashed var(--border-light);border-radius:var(--radius);line-height:1.5}

.kcard{background:var(--white);border:1px solid var(--border-light);border-left:3px solid var(--gray);border-radius:var(--radius);padding:9px 11px;cursor:pointer;transition:all .15s;box-shadow:var(--shadow-xs)}
.kcard:hover{box-shadow:var(--shadow-md);transform:translateY(-1px);border-left-color:var(--njr-orange)}
.kcard.s-draft,.kcard.s-scheduled{border-left-color:var(--gray)}
.kcard.s-sent,.kcard.s-field{border-left-color:var(--blue)}
.kcard.s-signing,.kcard.s-drafting{border-left-color:var(--njr-orange)}
.kcard.s-review{border-left-color:var(--purple)}
.kcard.s-delivered{border-left-color:var(--green)}
/* Three-pipeline kcard accents (spec §5.15). Lead pipeline pales toward orange,
   Proposal pipeline runs gray→orange→green, Project pipeline gray→blue→orange→
   purple→green→slate. Matches the stage-badge color groups above. */
.kcard.s-new{border-left-color:var(--gray)}
.kcard.s-contacted{border-left-color:var(--blue)}
.kcard.s-qualified{border-left-color:var(--njr-orange)}
.kcard.s-converted{border-left-color:var(--green)}
.kcard.s-accepted,.kcard.s-psa_sent,.kcard.s-cad,.kcard.s-ready_for_delivery{border-left-color:var(--njr-orange)}
.kcard.s-executed,.kcard.s-won{border-left-color:var(--green)}
.kcard.s-field_work{border-left-color:var(--blue)}
.kcard.s-qa_qc{border-left-color:var(--purple)}
.kcard.s-closeout{border-left-color:#64748b}
.kcard.s-lost{border-left-color:var(--gray);opacity:0.6}
/* All Pipelines stacked layout (spec §5.15.2) */
.all-pipelines-wrap{display:flex;flex-direction:column;gap:24px}
.all-pipelines-section{background:#fff;border:1px solid var(--border-light);border-radius:var(--radius);box-shadow:var(--shadow-xs);padding:16px}
.all-pipelines-header{display:flex;align-items:center;gap:10px;margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid var(--border-light)}
.all-pipelines-title{font-size:14px;font-weight:600;color:var(--text)}
.all-pipelines-count{font-size:12px;color:var(--text-light)}
/* Kanban drag-and-drop (spec §1.3.2). Visual feedback only — the actual
   transition is validated server-side via changeStage(). */
.kcard{cursor:grab}
.kcard:active{cursor:grabbing}
.kcard--dragging{opacity:0.4;outline:2px dashed var(--njr-orange);outline-offset:-2px}
.kanban-col--dropzone{background:var(--njr-orange-pale);outline:2px dashed var(--njr-orange);outline-offset:-4px;border-radius:6px}
.kanban-col--dropzone .kanban-col-hdr{color:var(--njr-orange)}
/* Audit log (spec §2.2.3) — timeline of server-side deal_events. */
.audit-loading,.audit-empty{padding:12px 0;font-size:12px;color:var(--text-light);font-style:italic}
.audit-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px}
.audit-row{display:grid;grid-template-columns:80px 1fr;gap:10px;padding:6px 0;font-size:12px;border-bottom:1px dashed var(--border-light)}
.audit-row:last-child{border-bottom:none}
.audit-when{color:var(--text-light);font-variant-numeric:tabular-nums;white-space:nowrap}
.audit-body{color:var(--text)}
.audit-body strong{font-weight:600;color:var(--text)}
.audit-tag{display:inline-block;font-size:9px;font-weight:700;padding:1px 5px;border-radius:3px;background:var(--gray-pale);color:var(--gray);letter-spacing:.04em;text-transform:uppercase;margin-left:4px}
.audit-tag.warn{background:#fee2e2;color:var(--red)}
.audit-link{color:var(--njr-orange);text-decoration:none;font-weight:600}
.audit-link:hover{text-decoration:underline}
.audit-reason{font-style:italic;color:var(--text-light);margin-top:2px}
.audit-raw{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;color:var(--text-light)}
/* Contact action bar (spec §5.11.1) */
.contact-actions{display:inline-flex;gap:6px;margin-left:8px;flex-wrap:wrap}
.contact-act-btn{display:inline-flex;align-items:center;gap:4px;background:#fff;border:1px solid var(--border);color:var(--text);font-size:11px;padding:2px 8px;border-radius:4px;cursor:pointer;font-family:inherit;transition:background .1s,border-color .1s}
.contact-act-btn:hover{background:var(--njr-orange-pale);border-color:var(--njr-orange-border);color:var(--njr-orange)}
.contact-actions-empty{font-size:11px;color:var(--text-light);font-style:italic}
/* Attention card (spec §1.1.1) — Dashboard hero. */
.attention-card{background:#fff;border:1px solid var(--border-light);border-left:4px solid var(--njr-orange);border-radius:var(--radius);box-shadow:var(--shadow-xs);margin-bottom:16px;overflow:hidden}
.attention-card.attention-empty{display:flex;align-items:center;gap:12px;padding:14px 18px;border-left-color:var(--green);color:var(--text-mid);font-size:13px}
.attention-empty-icon{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;background:var(--green-pale);color:var(--green-dark);border-radius:50%;font-weight:700}
.attention-card-hdr{display:flex;align-items:baseline;justify-content:space-between;padding:14px 18px 8px}
.attention-card-hdr h2{margin:0;font-size:15px;color:var(--text)}
.attention-card-count{font-size:11px;color:var(--text-light);text-transform:uppercase;letter-spacing:.05em}
.attention-card-body{display:flex;flex-direction:column}
.attention-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 18px;border-top:1px solid var(--border-light)}
.attention-row:hover{background:var(--cream)}
.attention-row-main{flex:1;min-width:0}
.attention-row-title{font-size:13px;color:var(--text);line-height:1.3}
.attention-row-title strong{font-weight:700;color:var(--text);margin-right:6px}
.attention-row-reason{font-size:11px;color:var(--text-light);margin-top:2px}
.attention-row-actions{display:flex;gap:6px;flex-shrink:0}
/* Kanban card days-in-stage chip + priority flag (spec §1.3.1, §1.3.4) */
.kcard-chip{display:inline-block;font-size:10px;font-weight:600;padding:1px 7px;border-radius:3px;background:var(--gray-pale);color:var(--gray);border:1px solid var(--gray-border);font-variant-numeric:tabular-nums}
.kcard-chip.warm{background:var(--njr-orange-pale);color:var(--njr-orange);border-color:var(--njr-orange-border)}
.kcard-chip.danger{background:#fee2e2;color:var(--red);border-color:#fca5a5}
.kcard-top{display:flex;align-items:center;gap:8px}
.kcard-top .kcard-num{flex:1}
.kcard-top .kcard-fee{margin-left:auto}
.kcard-priority{display:inline-block;font-size:11px;line-height:1;margin-right:4px;cursor:default}
.kcard-priority.p-urgent{color:var(--red)}
.kcard-priority.p-high{color:#ea580c}
.kcard-priority.p-low{color:#94a3b8}
/* Urgent priority gets a thicker red left border to draw the eye */
.kcard.priority-urgent{border-left-width:5px;border-left-color:var(--red) !important;background:#fef2f2}
.kcard.priority-high{border-left-width:4px}
/* Clickable status badges in tables (spec §1.2.2) */
.status-badge.clickable{cursor:pointer;transition:transform .1s,box-shadow .1s}
.status-badge.clickable:hover{transform:scale(1.04);box-shadow:0 1px 3px rgba(0,0,0,.08)}
.status-badge.clickable:after{content:" ▾";opacity:.55;font-size:8px;letter-spacing:0}
/* Status popover (rendered into <body>, positioned: fixed) */
.status-popover{background:#fff;border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 4px 16px rgba(0,0,0,.12);padding:8px;min-width:200px;max-width:280px;font-size:12px}
.status-popover-hdr{padding:4px 6px 8px;border-bottom:1px solid var(--border-light);color:var(--text-mid);font-size:11px}
.status-popover-section{padding:6px 0}
.status-popover-section + .status-popover-section{border-top:1px solid var(--border-light)}
.status-popover-section-lbl{font-size:10px;font-weight:700;color:var(--text-light);text-transform:uppercase;letter-spacing:.04em;padding:0 6px 4px}
.status-popover-hint{font-weight:400;text-transform:none;font-size:10px;color:var(--text-light)}
.status-popover-item{display:block;width:100%;text-align:left;background:transparent;border:none;padding:6px 8px;border-radius:4px;cursor:pointer;color:var(--text);font-size:12px;font-family:inherit}
.status-popover-item:hover{background:var(--cream)}
.status-popover-item--force{color:var(--text-light)}
.status-popover-item--force:hover{background:#fef2f2;color:var(--red)}
.status-popover-empty{padding:8px;color:var(--text-light);font-style:italic;font-size:11px;text-align:center}
/* Deliverable lock (spec §5.16.1) */
.doc-locked-tag{display:inline-block;font-size:10px;font-weight:600;color:#b45309;padding:1px 6px;border-radius:3px;background:#fef3c7;border:1px solid #fde68a}
.doc-final-tag{display:inline-block;font-size:10px;font-weight:600;color:var(--green-dark);padding:1px 6px;border-radius:3px;background:var(--green-pale);border:1px solid var(--green-border)}
.doc-item--locked{background:#fffbeb}
/* Closeout modal (spec §5.13.1) */
.co-modal-veil{display:none;align-items:center;justify-content:center;position:fixed;inset:0;background:rgba(45,45,45,0.6);z-index:1000}
.co-gate{list-style:none;padding:10px 12px;border-bottom:1px solid var(--border-light);font-size:13px}
.co-gate:last-child{border-bottom:none}
.co-gate.ok{background:var(--green-pale)}
.co-gate.fail{background:#fef2f2}
.co-row{display:flex;align-items:center;gap:10px}
.co-icon{font-weight:700;width:18px;text-align:center}
.co-gate.ok .co-icon{color:var(--green-dark)}
.co-gate.fail .co-icon{color:var(--red)}
.co-label{flex:1}
.co-hint{font-size:11px;color:var(--text-light);margin-left:28px;margin-top:2px;font-style:italic}
.co-override{font-size:11px;color:#92400e;margin-left:28px;margin-top:2px;font-style:italic}
/* Reports (spec §4.1) */
.report-card{background:#fff;border:1px solid var(--border-light);border-radius:var(--radius);box-shadow:var(--shadow-xs);padding:18px;margin-bottom:16px}
.report-card h2{margin:0 0 8px;font-size:16px}
.report-card h3{margin:14px 0 8px;font-size:13px;color:var(--text-mid)}
.funnel-block{margin-bottom:16px}
.funnel-rows{display:flex;flex-direction:column;gap:6px}
.funnel-row{display:grid;grid-template-columns:160px 1fr 100px;align-items:center;gap:10px;font-size:13px}
.funnel-label{color:var(--text-mid)}
.funnel-bar-wrap{height:18px;background:var(--cream-dark);border-radius:3px;overflow:hidden}
.funnel-bar{height:100%;background:var(--njr-orange);border-radius:3px;transition:width .3s}
.funnel-count{font-variant-numeric:tabular-nums;font-weight:600}
.funnel-drop{color:var(--red);font-size:11px;font-weight:400}
.aging-section{margin-bottom:18px}
.aging-section h3{display:flex;align-items:center;gap:8px}
.aging-count{font-size:11px;font-weight:600;background:var(--cream-dark);color:var(--text-mid);padding:1px 8px;border-radius:10px}
.aging-overdue h3{color:var(--red)}
.aging-warm h3{color:var(--njr-orange)}
.aging-muted h3{color:var(--text-light)}
.aging-empty{padding:10px;color:var(--text-light);font-style:italic;font-size:12px}
.revenue-bars{display:flex;flex-direction:column;gap:6px}
.revenue-row{display:grid;grid-template-columns:120px 1fr 100px;align-items:center;gap:10px;font-size:13px}
.revenue-bar-wrap{height:14px;background:var(--cream-dark);border-radius:3px;overflow:hidden}
.revenue-bar{height:100%;background:var(--green);border-radius:3px}
.revenue-val{font-variant-numeric:tabular-nums;font-weight:600;text-align:right}
/* Scheduling card (spec May 13) */
.sched-summary{display:flex;flex-direction:column;gap:6px;font-size:13px;background:var(--cream);border:1px solid var(--border-light);border-radius:var(--radius);padding:12px 14px}
.sched-row{display:grid;grid-template-columns:130px 1fr;align-items:center;gap:10px;padding:6px 0;border-bottom:1px dashed var(--border-light)}
.sched-row:last-child{border-bottom:none}
.sched-lbl{color:var(--text-light);font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.06em}
.sched-val{color:var(--text);font-size:13px}
.sched-val .sched-week-iso{color:var(--text-light);font-size:11px;font-weight:400;margin-left:6px}
.sched-pill{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:11px;font-size:11.5px;font-weight:600;line-height:1.6}
.sched-pill-ok{background:#dcfce7;color:#166534}
.sched-pill-warn{background:#fff4e3;color:#9a3412;border:1px solid #fcd9b6}
.sched-pill-muted{background:var(--cream-dark);color:var(--text-mid)}
.sched-visits{display:flex;flex-direction:column;gap:0;margin-bottom:4px}
.sched-visit-row{padding:9px 0;border-bottom:1px dashed var(--border-light);display:flex;flex-direction:column;gap:3px}
.sched-visit-row:last-child{border-bottom:none}
.sched-visit-meta{font-size:13px;display:flex;align-items:center;flex-wrap:wrap;gap:5px}
.sched-visit-meta .sched-week-iso{color:var(--text-light);font-size:11px}
.sched-visit-detail{font-size:12px;color:var(--text-mid)}
.sched-visit-actions{display:flex;gap:6px;margin-top:4px}
.sched-actions{margin-top:12px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.sched-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;background:#fff;border:1px solid var(--border-light);border-radius:var(--radius);padding:14px}
.sched-form-grid .sched-field{display:flex;flex-direction:column;gap:4px}
.sched-form-grid .sched-field.full{grid-column:1/-1}
.sched-form-grid input[type=date],
.sched-form-grid input[type=text],
.sched-form-grid select,
.sched-form-grid textarea{width:100%;padding:7px 10px;border:1px solid var(--border);border-radius:4px;font-size:13px;background:#fff;transition:border-color .12s,box-shadow .12s;font-family:inherit}
.sched-form-grid input[type=date]:focus,
.sched-form-grid input[type=text]:focus,
.sched-form-grid select:focus,
.sched-form-grid textarea:focus{outline:none;border-color:var(--njr-orange);box-shadow:0 0 0 2px rgba(214,86,0,.15)}
.sched-form-grid .np-lbl{font-size:11px;font-weight:600;color:var(--text-mid);text-transform:uppercase;letter-spacing:.04em}
.sched-week-hint{font-size:11px;color:var(--text-light);margin-top:2px}
.sched-time-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:4px}
.sched-allday-label{display:flex;align-items:center;gap:5px;font-size:13px;cursor:pointer;white-space:nowrap}
.sched-allday-label input[type=checkbox]{accent-color:var(--njr-orange);width:14px;height:14px;cursor:pointer}
.sched-time-pickers{display:flex;align-items:center;gap:6px}
.sched-time-pickers input[type=time]{padding:5px 8px;border:1px solid var(--border);border-radius:4px;font-size:13px;font-family:inherit;background:#fff}
.sched-time-pickers input[type=time]:focus{outline:none;border-color:var(--njr-orange);box-shadow:0 0 0 2px rgba(214,86,0,.15)}
.sched-time-sep{color:var(--text-light);font-size:12px}
.sched-notify-row{grid-column:1/-1;display:flex;align-items:center;gap:8px;padding:9px 11px;background:var(--cream);border:1px solid var(--border-light);border-radius:4px;font-size:13px}
.sched-notify-row input[type=checkbox]{accent-color:var(--njr-orange);width:15px;height:15px;cursor:pointer}
.sched-notify-row label{cursor:pointer;flex:1}
.sched-notify-row .sched-notify-note{color:var(--text-light);font-size:11px}
.sched-warn{grid-column:1/-1;display:flex;align-items:flex-start;gap:8px;padding:9px 11px;border-radius:4px;font-size:12.5px;line-height:1.4;margin-top:2px}
.sched-warn-icon{flex-shrink:0;font-size:14px;line-height:1.2}
.sched-warn-tight{background:#fff4e3;border:1px solid #fcd9b6;color:#7c2d12}
.sched-warn-past{background:#fee2e2;border:1px solid #fca5a5;color:#991b1b}
.sched-warn-summary{display:inline-flex;align-items:center;gap:6px;padding:3px 9px;border-radius:11px;font-size:11.5px;font-weight:600}
.sched-warn-summary.sched-warn-tight{background:#fff4e3;border:1px solid #fcd9b6;color:#9a3412}
.sched-warn-summary.sched-warn-past{background:#fee2e2;border:1px solid #fca5a5;color:#991b1b}
.sched-cal-link{margin-left:auto;font-size:12px;color:var(--njr-orange);text-decoration:none;display:inline-flex;align-items:center;gap:4px;background:transparent;border:none;cursor:pointer;padding:4px 8px;border-radius:3px;transition:background .12s}
.sched-cal-link:hover{background:rgba(214,86,0,.1);text-decoration:underline}
/* Capacity view (Reports → Capacity) */
.cap-grid{display:grid;grid-template-columns:repeat(4, 1fr);gap:10px;margin-top:8px}@media(max-width:1000px){.cap-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:560px){.cap-grid{grid-template-columns:1fr}}
.cap-week{background:#fff;border:1px solid var(--border-light);border-left:5px solid var(--gray);border-radius:var(--radius);padding:10px 12px;cursor:pointer;transition:background .12s}
.cap-week:hover{background:var(--cream)}
.cap-week.open{border-left-color:var(--green)}
.cap-week.filling{border-left-color:var(--njr-orange)}
.cap-week.full{border-left-color:var(--red);background:#fef2f2}
.cap-week-hdr{font-size:12px;font-weight:600;color:var(--text-mid);margin-bottom:4px}
.cap-week-range{font-size:14px;font-weight:700;color:var(--text)}
.cap-week-meta{font-size:11px;color:var(--text-light);margin-top:4px}
.cap-week-deals{margin-top:6px;font-size:11px;color:var(--text-mid);max-height:80px;overflow-y:auto}
.cap-week-deals .cap-deal{padding:2px 0}
.cap-edit{float:right;background:transparent;border:none;cursor:pointer;color:var(--text-light);font-size:14px;line-height:1;padding:0 2px}
.cap-edit:hover{color:var(--njr-orange)}

/* === FIELD CALENDAR === */
.cal-nav{display:inline-flex;gap:4px;background:var(--cream);border:1px solid var(--border-light);border-radius:var(--radius);padding:2px}
.cal-nav .btn{padding:4px 10px}
.cal-toolbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:8px 0 10px;padding:10px 14px;background:#fff;border:1px solid var(--border-light);border-radius:var(--radius)}
.cal-month-label{font-size:18px;font-weight:700;color:var(--njr-dark);min-width:180px}
.cal-legend{display:flex;gap:14px;font-size:11px;color:var(--text-mid);flex-wrap:wrap;margin-left:auto}
.cal-legend-item{display:inline-flex;align-items:center;gap:5px}
.cal-swatch{width:11px;height:11px;border-radius:2px;display:inline-block}
.cal-swatch-proj{background:var(--njr-orange)}
.cal-swatch-office{background:#388e3c}
.cal-swatch-task{background:#16a34a}
.cal-swatch-gcal{background:#1a73e8}
.cal-swatch-today{background:transparent;border:2px solid var(--njr-orange)}
.cal-filters{display:flex;gap:14px;font-size:12px;color:var(--text-mid)}
.cal-filter{display:inline-flex;align-items:center;gap:5px;cursor:pointer}
.cal-filter input{accent-color:var(--njr-orange)}
.cal-grid-wrap{background:#fff;border:1px solid var(--border-light);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow-xs)}
.cal-dow-row{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));background:var(--cream-dark);border-bottom:1px solid var(--border-light)}
.cal-dow-row > div{padding:8px 10px;font-size:11px;font-weight:700;color:var(--text-mid);text-transform:uppercase;letter-spacing:.06em;text-align:left;border-right:1px solid var(--border-light)}
.cal-dow-row > div:last-child{border-right:none}
.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));grid-auto-rows:minmax(110px,auto)}
.cal-cell{border-right:1px solid var(--border-light);border-bottom:1px solid var(--border-light);padding:6px 7px 8px;background:#fff;display:flex;flex-direction:column;gap:4px;min-height:110px;position:relative;cursor:pointer;transition:background .12s}
.cal-cell:nth-child(7n){border-right:none}
.cal-cell:hover{background:var(--cream)}
.cal-cell.cal-other-month{background:#fafaf8;color:var(--text-light)}
.cal-cell.cal-other-month .cal-daynum{color:var(--text-light)}
.cal-cell.cal-weekend{background:#fbfaf7}
.cal-cell.cal-today{background:#fff7ee;box-shadow:inset 0 0 0 2px var(--njr-orange)}
.cal-cell.cal-past{opacity:.85}
.cal-daynum{font-size:12px;font-weight:600;color:var(--text-mid);display:flex;align-items:center;justify-content:space-between;line-height:1.2}
.cal-cell.cal-today .cal-daynum{color:var(--njr-orange)}
.cal-addbtn{opacity:0;background:transparent;border:none;cursor:pointer;color:var(--njr-orange);font-size:14px;line-height:1;padding:0 4px;border-radius:3px;transition:opacity .12s,background .12s}
.cal-cell:hover .cal-addbtn{opacity:1}
.cal-addbtn:hover{background:rgba(214,86,0,.12)}
.cal-events{display:flex;flex-direction:column;gap:3px;overflow:hidden}
.cal-evt{font-size:11px;line-height:1.3;padding:3px 6px;border-radius:3px;cursor:pointer;display:flex;align-items:center;gap:4px;border:1px solid transparent;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cal-evt-proj{background:#ffe7d2;color:#7c2d12;border-color:#fbd0aa}
.cal-evt-proj:hover{background:#ffd4ad;border-color:var(--njr-orange)}
.cal-evt-proj .cal-evt-pill{background:var(--njr-orange);color:#fff;font-size:9px;font-weight:700;padding:1px 5px;border-radius:8px;flex-shrink:0}
.cal-evt-gcal{background:#e8f0fe;color:#174ea6;border-color:#c6dafc}
.cal-evt-gcal:hover{background:#d2e3fc}
.cal-evt-gcal::before{content:'';display:inline-block;width:6px;height:6px;border-radius:50%;background:#1a73e8;flex-shrink:0}
.cal-evt-office{background:#e8f5e9;color:#1b5e20;border-color:#a5d6a7}
.cal-evt-office:hover{background:#c8e6c9;border-color:#4caf50}
.cal-evt-office .cal-evt-pill{background:#388e3c;color:#fff;font-size:9px;font-weight:700;padding:1px 5px;border-radius:8px;flex-shrink:0}
.cal-evt-task{background:#dcfce7;color:#14532d;border-color:#bbf7d0}
.cal-evt-booking{background:#f3e8ff;color:#6b21a8;border-color:#d8b4fe}
.cal-evt-task:hover{background:#bbf7d0;border-color:#16a34a}
.cal-evt-task .cal-evt-pill{background:#15803d;color:#fff;font-size:9px;font-weight:700;padding:1px 5px;border-radius:8px;flex-shrink:0}
.cal-evt-more{font-size:10px;color:var(--text-light);font-weight:600;padding:1px 4px;cursor:default}
.cal-status-warn{padding:8px 12px;font-size:12px;background:#fff4e3;border:1px solid #fcd9b6;color:#7c2d12;border-radius:var(--radius);margin-bottom:10px}
.cal-status-info{padding:8px 12px;font-size:12px;background:#e8f0fe;border:1px solid #c6dafc;color:#174ea6;border-radius:var(--radius);margin-bottom:10px}
.cal-status-warn a,.cal-status-info a{color:inherit;text-decoration:underline}
@media (max-width:900px){
  .cal-toolbar{gap:8px}
  .cal-month-label{font-size:15px;min-width:auto}
  .cal-legend,.cal-filters{font-size:10px;gap:10px}
  .cal-grid{grid-auto-rows:minmax(80px,auto)}
  .cal-cell{min-height:80px;padding:4px 5px 6px}
  .cal-evt{font-size:10px;padding:2px 4px}
}
.kcard-top{display:flex;justify-content:space-between;align-items:flex-start;gap:6px;margin-bottom:3px}
.kcard-num{font-size:10px;font-weight:600;color:var(--text-light);letter-spacing:.04em}
.kcard-fee{font-size:11px;font-weight:700;color:var(--njr-orange)}
.kcard-client{font-size:13px;font-weight:600;color:var(--text);margin-bottom:1px;line-height:1.25}
.kcard-survey{font-size:11px;color:var(--text-mid);margin-bottom:6px;line-height:1.3;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.kcard-footer{display:flex;align-items:center;justify-content:space-between;font-size:10px;color:var(--text-light);gap:6px;flex-wrap:wrap}
.kcard-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.kcard-tag{display:inline-block;font-size:9px;font-weight:600;padding:1px 6px;border-radius:100px;letter-spacing:.02em;text-transform:uppercase;background:var(--cream-dark);color:var(--text-light);border:1px solid var(--border-light)}
.kcard-tag.t-residential{background:var(--blue-pale);color:var(--blue);border-color:var(--blue-border)}
.kcard-tag.t-commercial{background:var(--amber-pale);color:var(--amber);border-color:var(--amber-border)}
.kcard-tag.t-subconsult{background:var(--gray-pale);color:var(--gray);border-color:var(--gray-border)}
.kcard-views{display:flex;align-items:center;gap:3px;color:var(--text-light)}
.kcard-views.warm{color:var(--njr-orange);font-weight:600}

/* === MAP === */
.map-wrap{background:#fff;border:1px solid var(--border-light);border-radius:var(--radius);padding:10px;box-shadow:var(--shadow-xs)}
#map{width:100%;height:620px;border-radius:var(--radius-sm);background:var(--cream-dark)}
.map-legend{display:flex;gap:14px;padding:8px 4px 0;font-size:11px;color:var(--text-mid);flex-wrap:wrap}
.map-legend-item{display:flex;align-items:center;gap:5px}
.map-legend-item.is-hidden{display:none}
.map-legend-dot{width:10px;height:10px;border-radius:100px;border:2px solid #fff;box-shadow:0 0 0 1px rgba(0,0,0,.18)}
/* Map secondary filter row — stage dropdown + invoice-state chips. Sits between the
   page header and the map canvas. Wraps gracefully on narrow viewports. */
.map-filter-row-2{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:0 0 12px 2px;font-size:12px;color:var(--text-mid)}
.map-filter-label{display:inline-flex;align-items:center;gap:6px;font-weight:500}
.map-stage-select{background:var(--white);border:1px solid var(--border);color:var(--text);font-family:inherit;font-size:12px;padding:4px 22px 4px 8px;border-radius:6px;cursor:pointer;min-width:170px}
.map-stage-select:focus{outline:none;border-color:var(--njr-orange);box-shadow:0 0 0 2px rgba(214,86,0,.12)}
.map-filter-divider{width:1px;height:18px;background:var(--border)}
/* Project-page Location card — embedded mini-map for setting / nudging a deal's
   lat/lng via click + drag. ~240px tall so it doesn't dominate the side column. */
.pp-loc-coords{font-size:11px;color:var(--text-mid);font-weight:600;letter-spacing:.02em;margin-bottom:8px;font-variant-numeric:tabular-nums}
.pp-loc-coords.is-empty{color:var(--text-light);font-style:italic;font-weight:500}
.pp-loc-map{width:100%;height:240px;border-radius:var(--radius-sm);background:var(--cream-dark);overflow:hidden}
.pp-loc-actions{display:flex;align-items:center;gap:10px;margin-top:8px;flex-wrap:wrap}
.pp-loc-hint{font-size:10px;color:var(--text-light);font-style:italic;flex:1}
/* Map — unlocated deals panel: deals with no lat/lng yet. Click a chip to
   enter placement mode (next map click sets that deal's location). Hidden
   when there's nothing to surface. */
.map-unlocated-panel{display:flex;align-items:center;gap:10px;margin:0 0 10px 2px;padding:8px 12px;background:var(--cream-dark);border:1px solid var(--border);border-radius:6px;font-size:12px;color:var(--text-mid);flex-wrap:wrap}
.map-unlocated-label{font-weight:600;letter-spacing:.01em}
.map-unlocated-list{display:flex;gap:6px;flex-wrap:wrap;flex:1;max-height:80px;overflow-y:auto}
.map-unlocated-chip{background:var(--white);border:1px solid var(--border);color:var(--text);font-size:11px;font-weight:500;padding:4px 10px;border-radius:100px;cursor:pointer;font-family:inherit;display:inline-flex;align-items:center;gap:4px;transition:all .15s;white-space:nowrap}
.map-unlocated-chip:hover{border-color:var(--njr-orange);color:var(--njr-orange)}
.map-unlocated-chip.is-active{background:var(--njr-orange);color:#fff;border-color:var(--njr-orange)}
/* Placement mode banner — appears above the map while the user is about to
   click to place a specific deal. Pulses subtly to draw the eye. */
.map-placement-banner{display:flex;align-items:center;gap:14px;margin:0 0 10px 2px;padding:10px 14px;background:#FDF0E8;border:1px solid var(--njr-orange);border-radius:6px;font-size:13px;color:var(--text)}
.map-placement-banner[hidden]{display:none}
.map-placement-text{flex:1;font-weight:500}
.is-placement-mode #map{cursor:crosshair}
/* Google Maps InfoWindow — restyle the default white bubble to match our UI */
.gm-style-iw.gm-style-iw-c{border-radius:var(--radius)!important;padding:0!important;max-width:280px!important}
.gm-style-iw-d{overflow:visible!important;padding:10px 12px!important;font-family:'Source Sans 3',sans-serif!important;font-size:12px!important;line-height:1.5!important;color:var(--text)!important}
.gm-ui-hover-effect{display:none!important} /* hide the InfoWindow close X — clicking elsewhere closes */
.lpop-num{font-size:10px;font-weight:700;color:var(--text-light);letter-spacing:.06em}
.lpop-client{font-size:14px;font-weight:600;color:var(--text);margin-top:2px}
.lpop-meta{font-size:11px;color:var(--text-mid);margin:6px 0}
.lpop-tag{display:inline-block;font-size:9px;font-weight:700;padding:2px 7px;border-radius:100px;letter-spacing:.06em;text-transform:uppercase;margin-right:4px}
.lpop-tag.proposal{background:var(--njr-orange-pale);color:var(--njr-orange);border:1px solid var(--njr-orange-border)}
.lpop-tag.project{background:var(--green-pale);color:var(--green-dark);border:1px solid var(--green-border)}
.lpop-link{display:inline-block;margin-top:6px;background:var(--njr-orange);color:#fff!important;text-decoration:none!important;font-size:11px;font-weight:600;padding:5px 11px;border-radius:var(--radius-sm)}
.lpop-link:hover{background:var(--njr-orange-light)}

/* === SORTABLE TABLE === */
.data-table{width:100%;background:#fff;border:1px solid var(--border-light);border-radius:var(--radius);box-shadow:var(--shadow-xs);border-collapse:separate;border-spacing:0;overflow:hidden}
.data-table thead th{font-size:10px;font-weight:700;color:var(--text-light);letter-spacing:.08em;text-transform:uppercase;text-align:left;padding:10px 14px;background:var(--cream);border-bottom:1px solid var(--border);user-select:none;cursor:pointer;white-space:nowrap}
.data-table thead th:hover{color:var(--text)}
.data-table thead th.sorted{color:var(--njr-orange)}
.data-table thead th .sort-arrow{display:inline-block;margin-left:4px;opacity:.5;font-size:9px}
.data-table thead th.sorted .sort-arrow{opacity:1}
.data-table thead th.num,.data-table tbody td.num{text-align:right}
.data-table tbody tr{cursor:pointer;transition:background .12s}
.data-table tbody tr:hover{background:var(--cream)}
.data-table tbody td{font-size:13px;padding:10px 14px;border-bottom:1px solid var(--border-light);color:var(--text);vertical-align:middle}
.data-table tbody tr:last-child td{border-bottom:none}
.data-table .td-id{font-size:11px;font-weight:600;color:var(--text-light);font-variant-numeric:tabular-nums}
.data-table .td-client{font-weight:600}
.data-table .td-fee{font-variant-numeric:tabular-nums;font-weight:600;color:var(--text)}
.data-table .status-badge{display:inline-block;font-size:10px;font-weight:600;padding:2px 9px;border-radius:100px;letter-spacing:.02em;text-transform:uppercase;border:1px solid transparent}
.data-table .status-badge.s-scheduled{background:var(--gray-pale);color:var(--gray);border-color:var(--gray-border)}
.data-table .status-badge.s-field{background:var(--blue-pale);color:var(--blue);border-color:var(--blue-border)}
.data-table .status-badge.s-drafting{background:var(--njr-orange-pale);color:var(--njr-orange);border-color:var(--njr-orange-border)}
.data-table .status-badge.s-review{background:var(--purple-pale);color:var(--purple);border-color:var(--purple-border)}
.data-table .status-badge.s-delivered{background:var(--green-pale);color:var(--green-dark);border-color:var(--green-border)}
.data-table .status-badge.s-lead{background:#fff5d9;color:#8a6712;border-color:#e9d27a}
.data-table .status-badge.s-draft{background:var(--gray-pale);color:var(--gray);border-color:var(--gray-border)}
.data-table .status-badge.s-sent{background:var(--blue-pale);color:var(--blue);border-color:var(--blue-border)}
.data-table .status-badge.s-signing{background:var(--njr-orange-pale);color:var(--njr-orange);border-color:var(--njr-orange-border)}
/* Three-pipeline vocabulary (spec §5.15). Color groups follow lib/stages.js stageColor():
   gray = early/inert, blue = first contact, orange = active work, purple = review/qa,
   green = success, slate = closeout, gray-dim = lost. */
.data-table .status-badge.s-new{background:var(--gray-pale);color:var(--gray);border-color:var(--gray-border)}
.data-table .status-badge.s-contacted{background:var(--blue-pale);color:var(--blue);border-color:var(--blue-border)}
.data-table .status-badge.s-qualified{background:var(--njr-orange-pale);color:var(--njr-orange);border-color:var(--njr-orange-border)}
.data-table .status-badge.s-converted{background:var(--green-pale);color:var(--green-dark);border-color:var(--green-border)}
.data-table .status-badge.s-accepted{background:var(--njr-orange-pale);color:var(--njr-orange);border-color:var(--njr-orange-border)}
.data-table .status-badge.s-psa_sent{background:var(--njr-orange-pale);color:var(--njr-orange);border-color:var(--njr-orange-border)}
.data-table .status-badge.s-executed{background:var(--green-pale);color:var(--green-dark);border-color:var(--green-border)}
.data-table .status-badge.s-won{background:var(--green-pale);color:var(--green-dark);border-color:var(--green-border)}
.data-table .status-badge.s-field_work{background:var(--blue-pale);color:var(--blue);border-color:var(--blue-border)}
.data-table .status-badge.s-cad{background:var(--njr-orange-pale);color:var(--njr-orange);border-color:var(--njr-orange-border)}
.data-table .status-badge.s-qa_qc{background:var(--purple-pale);color:var(--purple);border-color:var(--purple-border)}
.data-table .status-badge.s-ready_for_delivery{background:var(--njr-orange-pale);color:var(--njr-orange);border-color:var(--njr-orange-border)}
.data-table .status-badge.s-closeout{background:#e2e8f0;color:#475569;border-color:#cbd5e1}
.data-table .status-badge.s-lost{background:var(--gray-pale);color:var(--text-light);border-color:var(--gray-border);text-decoration:line-through;opacity:0.7}
/* Pipeline group hint — small badge prepended to deal labels when it helps disambiguate */
.pipeline-tag{display:inline-block;font-size:9px;font-weight:700;padding:1px 6px;border-radius:3px;letter-spacing:.04em;text-transform:uppercase;margin-right:4px;vertical-align:middle}
.pipeline-tag.p-lead{background:var(--blue-pale);color:var(--blue)}
.pipeline-tag.p-proposal{background:var(--njr-orange-pale);color:var(--njr-orange)}
.pipeline-tag.p-project{background:var(--green-pale);color:var(--green-dark)}
.data-table .deadline-cell{font-size:12px}
.data-table .deadline-cell.overdue{color:var(--red);font-weight:600}
.data-table .deadline-cell.soon{color:var(--njr-orange);font-weight:600}
.data-table-empty{padding:40px 20px;text-align:center;color:var(--text-light);font-size:12px;font-style:italic}

/* === PROJECT PAGE === */
.proj-page-hdr{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid var(--border-light);flex-wrap:wrap}
.proj-back-btn{background:transparent;border:1px solid var(--border);color:var(--text-mid);font-family:inherit;font-size:12px;font-weight:500;padding:6px 12px;border-radius:var(--radius-sm);cursor:pointer;display:flex;align-items:center;gap:5px}
.proj-back-btn:hover{background:var(--cream-dark);color:var(--text)}
.proj-page-title{flex:1;min-width:200px}
.proj-page-id{font-size:11px;font-weight:700;color:var(--text-light);letter-spacing:.08em;margin-bottom:2px}
.proj-page-title h1{font-size:22px;font-weight:600;color:var(--text);letter-spacing:-.01em;line-height:1.2}
.proj-page-title h1[contenteditable="true"]{border:1px dashed transparent;border-radius:3px;padding:1px 4px;margin-left:-4px;outline:none;cursor:text}
.proj-page-title h1[contenteditable="true"]:hover,
.proj-page-title h1[contenteditable="true"]:focus{border-color:var(--border)}
.proj-page-title h1[contenteditable="true"]:empty::before{content:attr(data-placeholder);color:var(--text-light);font-style:italic;font-weight:500}
.proj-page-client{font-size:13px;color:var(--text-mid);margin-top:4px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.proj-page-client .pp-client-label{font-size:10px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase}
.proj-page-client [contenteditable="true"]{border:1px dashed transparent;border-radius:3px;padding:1px 4px;outline:none;cursor:text;font-weight:500;color:var(--text)}
.proj-page-client [contenteditable="true"]:hover,
.proj-page-client [contenteditable="true"]:focus{border-color:var(--border)}
.proj-page-sub{display:flex;align-items:center;gap:10px;margin-top:6px;flex-wrap:wrap}
.proj-page-actions{display:flex;gap:6px;align-items:center}
.proj-status-badge{display:inline-block;font-size:11px;font-weight:600;padding:3px 10px;border-radius:100px;letter-spacing:.04em;text-transform:uppercase;border:1px solid transparent}
.proj-status-badge.s-lead{background:#fff5d9;color:#8a6712;border-color:#e9d27a}
.proj-status-badge.s-draft{background:var(--gray-pale);color:var(--gray);border-color:var(--gray-border)}
.proj-status-badge.s-sent{background:var(--blue-pale);color:var(--blue);border-color:var(--blue-border)}
.proj-status-badge.s-signing{background:var(--njr-orange-pale);color:var(--njr-orange);border-color:var(--njr-orange-border)}
.proj-status-badge.s-scheduled{background:var(--gray-pale);color:var(--gray);border-color:var(--gray-border)}
.proj-status-badge.s-field{background:var(--blue-pale);color:var(--blue);border-color:var(--blue-border)}
.proj-status-badge.s-drafting{background:var(--njr-orange-pale);color:var(--njr-orange);border-color:var(--njr-orange-border)}
.proj-status-badge.s-review{background:var(--purple-pale);color:var(--purple);border-color:var(--purple-border)}
.proj-status-badge.s-delivered{background:var(--green-pale);color:var(--green-dark);border-color:var(--green-border)}

/* Proposal lifecycle badge — derived state (not pipeline stage). Tells you
   where the proposal is in its delivery cycle (draft → built → ready → sent
   → viewed → accepted). Used on the Proposal Document card, kanban cards,
   and the proposals table. */
.lifecycle-badge{display:inline-block;font-size:10px;font-weight:700;padding:2px 9px;border-radius:100px;letter-spacing:.06em;text-transform:uppercase;border:1px solid transparent;line-height:1.5;vertical-align:middle;white-space:nowrap}
.lifecycle-badge.sm{font-size:9px;padding:1px 7px;letter-spacing:.05em}
.lifecycle-badge.lc-draft{background:var(--gray-pale);color:var(--gray);border-color:var(--gray-border)}
.lifecycle-badge.lc-building{background:#e0e7ff;color:#3730a3;border-color:#a5b4fc}
.lifecycle-badge.lc-ready{background:var(--njr-orange-pale);color:var(--njr-orange);border-color:var(--njr-orange-border)}
.lifecycle-badge.lc-sent{background:#dbeafe;color:#1d4ed8;border-color:#93c5fd}
.lifecycle-badge.lc-viewed{background:#fff7ed;color:#c2410c;border-color:#fdba74}
.lifecycle-badge.lc-accepted{background:var(--green-pale);color:var(--green-dark);border-color:var(--green-border)}
.lifecycle-badge.lc-declined{background:var(--red-pale);color:var(--red);border-color:var(--red-border)}

/* Proposal Document card layout (sits in the project page sidebar). */
.pdoc-badge-row{margin-bottom:8px}
.pdoc-empty{font-size:12px;color:var(--text-light);font-style:italic;margin:6px 0 10px}
.pdoc-activity{font-size:11px;color:var(--text-mid);line-height:1.6;margin-bottom:10px;display:flex;flex-wrap:wrap;gap:4px 6px;align-items:baseline}
.pdoc-activity-item{white-space:nowrap}
.pdoc-activity-sep{color:var(--text-light);opacity:.6}
.pdoc-actions{display:flex;gap:6px;flex-wrap:wrap}
.pdoc-versions{margin-top:12px;padding-top:10px;border-top:1px dashed var(--border-light)}
.pdoc-versions summary{font-size:11px;color:var(--text-mid);cursor:pointer;font-weight:600;letter-spacing:.02em;padding:2px 0;list-style:none}
.pdoc-versions summary::-webkit-details-marker{display:none}
.pdoc-versions summary::before{content:'▸ ';color:var(--text-light);font-size:9px}
.pdoc-versions[open] summary::before{content:'▾ '}
.pdoc-version-list{margin-top:8px;display:flex;flex-direction:column;gap:4px}
.pdoc-version-item{display:flex;justify-content:space-between;align-items:center;padding:4px 8px;background:var(--cream);border-radius:var(--radius-sm);font-size:11px}
.pdoc-version-item.disabled{opacity:.6}
.pdoc-version-name{color:var(--text-mid);font-variant-numeric:tabular-nums}
.pdoc-version-note{font-size:10px;color:var(--text-light);font-style:italic}

/* E-Sign queue: status alert banner + per-row action layout. The stats grid,
   filter chips, and table all reuse the existing app-wide styles. */
.esign-alert{padding:12px 16px;margin-bottom:14px;border-radius:var(--radius);border:1px solid var(--border-light);background:#fff;font-size:13px;line-height:1.5;color:var(--text-mid)}
.esign-alert.warn{background:#fffbeb;border-color:#fde68a;color:#92400e}
.esign-alert.error{background:var(--red-pale);border-color:var(--red-border);color:var(--red)}
.esign-alert code{background:rgba(0,0,0,.05);padding:1px 5px;border-radius:3px;font-size:11px}
.esign-actions{display:flex;gap:4px;flex-wrap:wrap}
.esign-actions .btn{padding:3px 8px;font-size:10px;min-height:0}
.esign-row-meta{font-size:11px;color:var(--text-light);margin-top:2px}

/* PSA Document card — mirrors the Proposal Document card pattern. State
   badges use the existing lifecycle-badge classes (color reuse: gray=draft,
   amber=needs setup, orange=ready/in flight, green=executed). */
.psadoc-badge-row{margin-bottom:8px}
.psadoc-empty{font-size:12px;color:var(--text-light);font-style:italic;margin:6px 0 10px;line-height:1.5}
.psadoc-meta{font-size:11px;color:var(--text-mid);line-height:1.6;margin-bottom:10px;display:flex;flex-direction:column;gap:2px}
.psadoc-meta-row{display:flex;gap:6px;align-items:baseline}
.psadoc-meta-label{font-size:9px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase;flex-shrink:0;min-width:60px}
.psadoc-meta-val{color:var(--text)}
.psadoc-meta-val .file{font-family:'Courier New',monospace;font-size:10px;color:var(--text-mid);word-break:break-all}
.psadoc-warn{background:#fffbeb;border:1px solid #fde68a;color:#92400e;border-radius:var(--radius-sm);padding:8px 10px;font-size:11px;line-height:1.5;margin-bottom:10px}
.psadoc-actions{display:flex;gap:6px;flex-wrap:wrap}
.psadoc-actions .btn-link{font-size:11px;color:var(--text-mid)}
.psadoc-state-line{padding-top:10px;margin-top:10px;border-top:1px dashed var(--border-light);font-size:11px;color:var(--text-mid);line-height:1.6}
.psadoc-state-line strong{color:var(--text)}
/* PSA modal contents */
#psa-modal .modal-body{padding:18px;max-height:70vh;overflow-y:auto}
.psa-section{margin-bottom:16px}
.psa-section h4{font-size:11px;font-weight:700;color:var(--text-light);letter-spacing:.07em;text-transform:uppercase;margin-bottom:6px}
.psa-template-row{display:grid;grid-template-columns:1fr;gap:4px;background:var(--cream);border-radius:var(--radius-sm);padding:10px 12px;font-size:12px}
.psa-template-row .row-name{font-weight:600;color:var(--text)}
.psa-template-row .row-file{font-family:'Courier New',monospace;font-size:10px;color:var(--text-mid);word-break:break-all}
.psa-template-row .row-desc{font-size:11px;color:var(--text-mid);font-style:italic}
.psa-merge-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px;font-size:11px;background:#fff;border:1px solid var(--border-light);border-radius:var(--radius-sm);padding:10px 12px}
.psa-merge-row{display:flex;justify-content:space-between;gap:8px;align-items:baseline;border-bottom:1px dotted var(--border-light);padding:3px 0}
.psa-merge-row:last-child,.psa-merge-row:nth-last-child(2){border-bottom:none}
.psa-merge-field{font-family:'Courier New',monospace;font-size:10px;color:var(--text-light)}
.psa-merge-val{color:var(--text);font-weight:500;text-align:right;font-variant-numeric:tabular-nums;word-break:break-word}
.psa-merge-val.empty{color:var(--text-light);font-style:italic;font-weight:400}
.psa-id-row{display:flex;gap:8px;align-items:center;background:#fff;border:1px solid var(--border-light);border-radius:var(--radius-sm);padding:8px 12px;margin-top:4px}
.psa-id-row input{flex:1;border:1px solid var(--border);border-radius:var(--radius-sm);padding:6px 10px;font-size:13px;font-family:inherit;background:#fff}
.psa-id-row input:focus{outline:none;border-color:var(--njr-orange)}
.psa-checklist{font-size:12px;color:var(--text-mid);line-height:1.6}
.psa-checklist ol{margin-left:18px;display:flex;flex-direction:column;gap:6px}
.proj-deadline-tag{font-size:12px;color:var(--text-mid)}
.proj-deadline-tag.overdue{color:var(--red);font-weight:600}
.proj-deadline-tag.soon{color:var(--njr-orange);font-weight:600}

.proj-grid{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:18px}
@media(max-width:980px){.proj-grid{grid-template-columns:1fr}}

/* "What's next?" contextual nudge above the project grid. One per page,
   colored by severity (info/action/warn/success), with an icon, a title +
   hint, and an optional single-action button. */
.next-action-banner{display:flex;align-items:center;gap:14px;padding:12px 16px;border-radius:var(--radius);border:1px solid transparent;margin-bottom:14px;background:#fff;box-shadow:var(--shadow-xs)}
.next-action-banner[hidden]{display:none}
.next-action-banner .na-icon{font-size:22px;line-height:1;flex-shrink:0;width:32px;text-align:center}
.next-action-banner .na-text{flex:1;min-width:0}
.next-action-banner .na-title{font-size:14px;font-weight:600;color:var(--text);letter-spacing:-.005em}
.next-action-banner .na-hint{font-size:12px;color:var(--text-mid);margin-top:2px;line-height:1.4}
.next-action-banner .na-btn{flex-shrink:0}
.next-action-banner.na-info   {background:#f0f7ff;border-color:#bfdbfe;color:#1e3a8a}
.next-action-banner.na-info   .na-title{color:#1e3a8a}
.next-action-banner.na-action {background:var(--njr-orange-pale);border-color:var(--njr-orange-border)}
.next-action-banner.na-action .na-title{color:var(--njr-orange)}
.next-action-banner.na-warn   {background:#fffbeb;border-color:#fde68a;color:#92400e}
.next-action-banner.na-warn   .na-title{color:#92400e}
.next-action-banner.na-success{background:var(--green-pale);border-color:var(--green-border);color:var(--green-dark)}
.next-action-banner.na-success .na-title{color:var(--green-dark)}
.next-action-banner.na-muted  {background:var(--cream);border-color:var(--border-light)}
.next-action-banner.na-muted  .na-title{color:var(--text-mid)}
.next-action-banner.na-muted  .na-icon{opacity:.6}
.proj-main{display:flex;flex-direction:column;gap:14px;min-width:0}
.proj-side{display:flex;flex-direction:column;gap:14px;min-width:0}
.proj-card{background:#fff;border:1px solid var(--border-light);border-radius:var(--radius);padding:0;box-shadow:var(--shadow-xs);overflow:hidden}
.proj-card-hdr{padding:11px 16px;border-bottom:1px solid var(--border-light);background:linear-gradient(to bottom,#fff,var(--cream));display:flex;align-items:center;justify-content:space-between;gap:8px}
.proj-card-hdr h3{font-size:11px;font-weight:700;color:var(--text-light);letter-spacing:.08em;text-transform:uppercase}
.proj-card-hdr .add-btn{background:transparent;border:none;color:var(--text-light);font-family:inherit;font-size:11px;cursor:pointer;padding:2px 8px;border-radius:var(--radius-sm)}
.proj-card-hdr .add-btn:hover{background:var(--njr-orange-pale);color:var(--njr-orange)}
.proj-card-body{padding:14px 16px}
.proj-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:8px 16px}
.proj-field{display:flex;flex-direction:column;gap:1px;font-size:13px}
.proj-field-lbl{font-size:10px;font-weight:600;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase}
.proj-field-val{color:var(--text);word-break:break-word}
.proj-field-val.warm{color:var(--njr-orange);font-weight:600}
.proj-field-val.danger{color:var(--red);font-weight:600}
.proj-notes-block{margin-top:14px;padding-top:14px;border-top:1px solid var(--border-light)}
.proj-notes-block textarea{width:100%;min-height:60px;padding:8px 11px;font-size:13px;border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;color:var(--text);background:#fff;resize:vertical;line-height:1.5}
.proj-notes-block textarea:focus{outline:none;border-color:var(--njr-orange)}

/* Stage timeline */
.stage-track{display:flex;flex-direction:column;gap:0;position:relative}
.stage-item{display:flex;align-items:flex-start;gap:10px;padding:6px 0;font-size:12px;position:relative}
.stage-item:not(:last-child)::before{content:'';position:absolute;left:7px;top:20px;bottom:-6px;width:2px;background:var(--border-light)}
.stage-item.done:not(:last-child)::before{background:var(--green)}
.stage-item.current:not(:last-child)::before{background:linear-gradient(to bottom,var(--njr-orange),var(--border-light))}
.stage-dot{flex-shrink:0;width:16px;height:16px;border-radius:100px;border:2px solid var(--border);background:#fff;display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;color:#fff;z-index:1;margin-top:1px}
.stage-item.done .stage-dot{background:var(--green);border-color:var(--green)}
.stage-item.done .stage-dot::after{content:'';width:3px;height:6px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg);margin-top:-2px}
.stage-item.current .stage-dot{background:var(--njr-orange);border-color:var(--njr-orange)}
.stage-item.current .stage-dot::after{content:'';width:5px;height:5px;background:#fff;border-radius:100px}
.stage-body{flex:1;line-height:1.35}
.stage-name{font-weight:600;color:var(--text)}
.stage-item.upcoming .stage-name{color:var(--text-light);font-weight:500}
.stage-date{font-size:11px;color:var(--text-light);margin-top:1px}
.stage-item.current .stage-name{color:var(--njr-orange)}

/* Contact card */
.contact-row{display:flex;align-items:center;gap:8px;font-size:13px;padding:6px 0;border-bottom:1px solid var(--cream-dark)}
.contact-row:last-child{border-bottom:none}
.contact-row .contact-lbl{flex-shrink:0;width:64px;font-size:10px;font-weight:600;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase}
.contact-row .contact-val{flex:1;min-width:0;color:var(--text);word-break:break-word}
.contact-row a{color:var(--blue);text-decoration:none}
.contact-row a:hover{text-decoration:underline}

/* Documents */
.doc-list{display:flex;flex-direction:column;gap:0}
.doc-item{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--cream-dark)}
.doc-item:last-child{border-bottom:none}
.doc-icon{flex-shrink:0;width:28px;height:32px;background:var(--njr-orange-pale);border:1px solid var(--njr-orange-border);border-radius:3px;display:flex;align-items:center;justify-content:center;color:var(--njr-orange);font-size:11px;font-weight:700;letter-spacing:.04em}
.doc-icon.psa{background:var(--blue-pale);border-color:var(--blue-border);color:var(--blue)}
.doc-icon.deliverable{background:var(--green-pale);border-color:var(--green-border);color:var(--green-dark)}
.doc-info{flex:1;min-width:0}
.doc-name{font-size:13px;font-weight:500;color:var(--text);line-height:1.3;word-break:break-word}
.doc-meta{font-size:10px;color:var(--text-light);margin-top:1px}
.doc-action{flex-shrink:0;background:transparent;border:none;color:var(--text-light);font-size:13px;padding:2px 6px;cursor:pointer;border-radius:var(--radius-sm)}
.doc-action:hover{background:var(--cream-dark);color:var(--text)}

/* Communications */
.comm-list{display:flex;flex-direction:column;gap:0}
.comm-item{padding:10px 0;border-bottom:1px solid var(--cream-dark)}
.comm-item:last-child{border-bottom:none}
.comm-item-top{display:flex;align-items:center;gap:8px;margin-bottom:3px;flex-wrap:wrap}
.comm-dir{display:inline-block;font-size:9px;font-weight:700;padding:1px 6px;border-radius:100px;letter-spacing:.06em;text-transform:uppercase}
.comm-dir.sent{background:var(--blue-pale);color:var(--blue);border:1px solid var(--blue-border)}
.comm-dir.received{background:var(--cream-dark);color:var(--text-mid);border:1px solid var(--border-light)}
.comm-channel{font-size:10px;color:var(--text-light);text-transform:uppercase;letter-spacing:.04em}
.comm-date{font-size:11px;color:var(--text-light);margin-left:auto}
.comm-subject{font-size:13px;font-weight:600;color:var(--text);line-height:1.3;margin-bottom:3px}
.comm-body{font-size:12px;color:var(--text-mid);line-height:1.5;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}

/* Invoices */
.inv-list{display:flex;flex-direction:column;gap:0}
.inv-item{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--cream-dark)}
.inv-item:last-child{border-bottom:none}
.inv-info{flex:1;min-width:0}
.inv-num{font-size:11px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}
.inv-meta{font-size:10px;color:var(--text-light);margin-top:1px}
.inv-amount{font-size:13px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;text-align:right;margin-left:auto}
.inv-status{font-size:9px;font-weight:700;padding:2px 8px;border-radius:100px;letter-spacing:.06em;text-transform:uppercase;margin-left:8px}
.inv-status.paid{background:var(--green-pale);color:var(--green-dark);border:1px solid var(--green-border)}
.inv-status.sent{background:var(--blue-pale);color:var(--blue);border:1px solid var(--blue-border)}
.inv-status.draft{background:var(--cream-dark);color:var(--text-light);border:1px solid var(--border-light)}
.inv-status.overdue{background:var(--red-pale);color:var(--red);border:1px solid var(--red-border)}
.inv-summary{padding:10px 0 0;margin-top:6px;border-top:1px solid var(--border-light);font-size:12px;color:var(--text-mid);text-align:right}
.inv-summary strong{color:var(--text);font-variant-numeric:tabular-nums}

/* Clients — list + detail */
.client-avatar{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;background:var(--njr-orange-pale);color:var(--njr-orange);font-size:11px;font-weight:700;letter-spacing:.02em;border:1px solid var(--njr-orange-border);text-transform:uppercase;flex-shrink:0;font-variant:normal}
.client-avatar.lg{width:48px;height:48px;font-size:16px}
.client-cell{display:flex;align-items:center;gap:10px;min-width:0}
.client-cell-name{font-weight:600;color:var(--text);font-size:13px;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.client-cell-meta{font-size:11px;color:var(--text-light);margin-top:1px;line-height:1.2}
.client-type-tag{display:inline-block;font-size:9px;font-weight:700;padding:2px 7px;border-radius:100px;letter-spacing:.06em;text-transform:uppercase}
.client-type-tag.residential{background:var(--cream-dark);color:var(--text-mid);border:1px solid var(--border-light)}
.client-type-tag.commercial{background:var(--blue-pale);color:var(--blue);border:1px solid var(--blue-border)}
.client-type-tag.subconsult{background:var(--njr-orange-pale);color:var(--njr-orange);border:1px solid var(--njr-orange-border)}
.cp-meta-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px 18px}
.cp-meta-row{font-size:12px;color:var(--text)}
.cp-meta-row .lbl{display:block;font-size:10px;color:var(--text-light);text-transform:uppercase;letter-spacing:.06em;margin-bottom:2px;font-weight:600}
.cp-meta-row .val{font-size:13px;color:var(--text);word-break:break-word}
.cp-meta-row .val a{color:var(--njr-orange);text-decoration:none}
.cp-meta-row .val a:hover{text-decoration:underline}
.cp-contact-item{display:flex;align-items:flex-start;gap:10px;padding:10px 0;border-bottom:1px solid var(--cream-dark)}
.cp-contact-item:last-child{border-bottom:none}
.cp-contact-info{flex:1;min-width:0}
.cp-contact-name{font-size:13px;font-weight:600;color:var(--text);line-height:1.2}
.cp-contact-role{font-size:11px;color:var(--text-light);margin-top:1px}
.cp-contact-detail{font-size:12px;color:var(--text-mid);margin-top:3px;line-height:1.4}
.cp-contact-detail a{color:var(--njr-orange);text-decoration:none}
.cp-contact-actions{display:flex;gap:4px;flex-shrink:0}
.cp-contact-actions .btn-sm{padding:3px 8px;font-size:11px}
.cp-totals-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px}
.cp-total-tile{background:var(--cream);border:1px solid var(--border-light);border-radius:6px;padding:10px 12px}
.cp-total-tile .lbl{font-size:10px;color:var(--text-light);text-transform:uppercase;letter-spacing:.06em;font-weight:600;margin-bottom:3px}
.cp-total-tile .val{font-size:18px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;line-height:1.1}
.cp-total-tile .sub{font-size:10px;color:var(--text-light);margin-top:2px}
.cp-deal-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--cream-dark);cursor:pointer}
.cp-deal-row:last-child{border-bottom:none}
.cp-deal-row:hover{background:var(--cream)}
.cp-deal-info{flex:1;min-width:0}
.cp-deal-id{font-size:11px;font-weight:700;color:var(--text-light);letter-spacing:.06em;font-variant-numeric:tabular-nums}
.cp-deal-title{font-size:12px;color:var(--text);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cp-deal-fee{font-size:12px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;text-align:right;flex-shrink:0}
.cp-deal-badge{flex-shrink:0}

/* Inline-add forms (comms / invoices) */
.add-form{padding:12px 16px;background:var(--cream);border-top:1px solid var(--border-light);display:none}
.add-form.show{display:block}
.add-form .row{display:flex;gap:8px;margin-bottom:8px}
.add-form input,.add-form select,.add-form textarea{flex:1;padding:6px 9px;font-size:12px;border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;color:var(--text);background:#fff}
.add-form input:focus,.add-form select:focus,.add-form textarea:focus{outline:none;border-color:var(--njr-orange)}
.add-form textarea{min-height:50px;resize:vertical}
.add-form .actions{display:flex;justify-content:flex-end;gap:6px}

/* === EMPTY STATE === */
.empty-state{background:var(--white);border:1.5px dashed var(--border);border-radius:var(--radius);padding:48px 24px;text-align:center;color:var(--text-light)}
.empty-state-icon{font-size:32px;color:var(--border);margin-bottom:8px;opacity:.7}
.empty-state h3{font-size:15px;font-weight:600;color:var(--text-mid);margin-bottom:4px}
.empty-state p{font-size:12px;line-height:1.6;max-width:420px;margin:0 auto 12px}
.empty-state .pending-tag{display:inline-block;font-size:10px;font-weight:600;background:var(--njr-orange-pale);color:var(--njr-orange);border:1px solid var(--njr-orange-border);padding:2px 9px;border-radius:100px;letter-spacing:.04em;text-transform:uppercase;margin-bottom:14px}

/* === LOCATION subsection inside Overview === */
.proj-section{margin-top:16px;padding-top:14px;border-top:1px solid var(--border-light)}
.proj-section-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:9px;gap:8px}
.proj-section-hdr .proj-field-lbl{font-size:11px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase}
.proj-section-hdr .edit-btn{background:transparent;border:none;color:var(--text-light);font-family:inherit;font-size:11px;cursor:pointer;padding:2px 8px;border-radius:var(--radius-sm)}
.proj-section-hdr .edit-btn:hover{background:var(--njr-orange-pale);color:var(--njr-orange)}

/* Location edit form (toggled inline) */
.loc-form{padding:12px;background:var(--cream);border-radius:var(--radius-sm);display:none;margin-top:6px}
.loc-form.show{display:block}
.loc-form .row{display:flex;gap:8px;margin-bottom:8px;flex-wrap:wrap}
.loc-form input{flex:1;min-width:110px;padding:7px 10px;font-size:12px;border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;color:var(--text);background:#fff}
.loc-form input:focus{outline:none;border-color:var(--njr-orange)}
.loc-form label{flex:1;min-width:110px;display:flex;flex-direction:column;gap:3px;font-size:10px;font-weight:600;color:var(--text-light);letter-spacing:.04em;text-transform:uppercase}
.loc-form label input{margin-top:0}
.loc-form .row.full label{flex:1 1 100%}
.loc-form .actions{display:flex;justify-content:space-between;align-items:center;gap:6px;margin-top:4px}
.loc-form .ac-status{font-size:10px;color:var(--text-light);font-style:italic;flex:1}

/* Address autocomplete dropdown */
.ac-wrap{position:relative;flex:1;min-width:0}
.ac-list{position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:0 6px 18px rgba(45,45,45,.18);z-index:120;max-height:260px;overflow-y:auto;display:none;margin-top:2px}
.ac-list.show{display:block}
.ac-item{padding:8px 11px;font-size:12px;color:var(--text);cursor:pointer;border-bottom:1px solid var(--cream-dark);line-height:1.4}
.ac-item:last-child{border-bottom:none}
.ac-item:hover,.ac-item.selected{background:var(--njr-orange-pale);color:var(--njr-orange)}
.ac-empty,.ac-loading{padding:10px;font-size:12px;color:var(--text-light);font-style:italic;text-align:center}

/* === NEW DEAL TOGGLE (Proposal | Project) === */
.np-type-toggle{display:inline-flex;gap:0;background:var(--cream-dark);padding:3px;border-radius:var(--radius-sm);margin-top:8px}
.np-type-toggle button{background:transparent;border:none;font-family:inherit;font-size:12px;font-weight:500;padding:6px 14px;border-radius:3px;cursor:pointer;color:var(--text-mid);transition:all .12s}
.np-type-toggle button:hover:not(.active){color:var(--text)}
.np-type-toggle button.active{background:#fff;color:var(--text);font-weight:600;box-shadow:0 1px 2px rgba(0,0,0,.08)}
.np-type-toggle button.active[data-mode="project"]{color:var(--green-dark)}

/* === NEW PROPOSAL FORM (view-new-proposal) === */
.np-page-hdr{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid var(--border-light);flex-wrap:wrap}
.np-page-title{flex:1;min-width:200px}
.np-page-id{font-size:11px;font-weight:700;color:var(--text-light);letter-spacing:.08em;margin-bottom:2px}
.np-page-title h1{font-size:22px;font-weight:600;color:var(--text);letter-spacing:-.01em;line-height:1.2}
.np-page-actions{display:flex;gap:6px;align-items:center}

.np-form{max-width:820px;display:flex;flex-direction:column;gap:14px}
.np-section{background:#fff;border:1px solid var(--border-light);border-radius:var(--radius);box-shadow:var(--shadow-xs);overflow:hidden}
.np-section-hdr{padding:10px 16px;border-bottom:1px solid var(--border-light);background:linear-gradient(to bottom,#fff,var(--cream))}
.np-section-hdr h2{font-size:11px;font-weight:700;color:var(--text-light);letter-spacing:.08em;text-transform:uppercase}
.np-section-body{padding:14px 16px}

.np-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px 14px}
.np-field{display:flex;flex-direction:column;gap:4px;min-width:0}
.np-field.full{grid-column:1/-1}
.np-field label{font-size:10px;font-weight:600;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase;display:flex;align-items:center;gap:6px}
.np-field label .req{color:var(--red);font-weight:700}
.np-field input,.np-field select,.np-field textarea{padding:8px 11px;font-size:13px;border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;color:var(--text);background:#fff;width:100%}
.np-field input:focus,.np-field select:focus,.np-field textarea:focus{outline:none;border-color:var(--njr-orange)}
.np-field input[type=number]{font-variant-numeric:tabular-nums}
/* Address inputs — bigger, taller, easier to read at a glance.
   A typical full address ("4500 Chapman Rd, Stockbridge, MI 49285")
   is ~40 chars, so we bump font-size and padding and let the input
   take its row's full width with a comfortable min-width for narrow
   parent containers (e.g. side-panel modals). */
#np-address,#pp-loc-address,#lnl-address,#cp-edit-addr,#cp-edit-mail{
  font-size:14px;
  padding:10px 13px;
  min-width:100%;
  text-overflow:ellipsis;
}
.np-field textarea{min-height:72px;resize:vertical;line-height:1.5}
.np-field .np-hint{font-size:11px;color:var(--text-light);font-style:italic}

.np-field-pair{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px}
.np-status{font-size:11px;color:var(--text-light);font-style:italic;grid-column:1/-1;min-height:14px}

/* === COST ESTIMATE — summary card on project page === */
.est-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:12px;margin-bottom:12px}
.est-stat{display:flex;flex-direction:column;gap:2px}
.est-stat-val{font-size:18px;font-weight:600;color:var(--text);line-height:1.05}
.est-stat-val.warm{color:var(--njr-orange)}
.est-stat-val.danger{color:var(--red)}
.est-stat-val.good{color:var(--green-dark)}
.est-stat-lbl{font-size:9px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase}
.est-bar{height:5px;background:var(--cream-dark);border-radius:100px;overflow:hidden;margin-top:4px}
.est-bar-fill{height:100%;background:var(--green);transition:width .25s ease}
.est-bar-fill.warm{background:var(--njr-orange)}
.est-bar-fill.danger{background:var(--red)}
.est-task-summary{display:flex;flex-direction:column;gap:4px;padding-top:10px;border-top:1px solid var(--border-light)}
.est-task-row{display:flex;justify-content:space-between;font-size:12px;color:var(--text-mid);gap:8px}
.est-task-row .est-tname{font-weight:500;color:var(--text)}
.est-task-row .est-thours{color:var(--text-light);font-variant-numeric:tabular-nums}
.est-task-row .est-tcost{font-variant-numeric:tabular-nums;font-weight:600;color:var(--text);min-width:60px;text-align:right}
.est-empty{padding:18px 14px;text-align:center;color:var(--text-light);font-size:12px;font-style:italic;background:var(--cream);border-radius:var(--radius-sm);border:1px dashed var(--border-light)}
.est-empty button{margin-top:8px;background:var(--njr-orange);color:#fff;border:none;font-family:inherit;font-size:12px;font-weight:600;padding:6px 14px;border-radius:var(--radius-sm);cursor:pointer}
.est-empty button:hover{background:var(--njr-orange-light)}

/* === COST ESTIMATE — detail view === */
.est-page-hdr{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid var(--border-light);flex-wrap:wrap}
.est-page-title{flex:1;min-width:200px}
.est-page-id{font-size:11px;font-weight:700;color:var(--text-light);letter-spacing:.08em;margin-bottom:2px}
.est-page-title h1{font-size:22px;font-weight:600;color:var(--text);letter-spacing:-.01em;line-height:1.2}
.est-page-sub{font-size:12px;color:var(--text-mid);margin-top:4px}
.est-page-margin{display:flex;align-items:center;gap:14px;font-size:13px}
.est-page-margin-val{font-size:20px;font-weight:600;letter-spacing:-.01em}
.est-page-margin-val.good{color:var(--green-dark)}
.est-page-margin-val.warm{color:var(--njr-orange)}
.est-page-margin-val.danger{color:var(--red)}
.est-page-margin-lbl{font-size:10px;font-weight:600;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase}
.ep-save-status{font-size:11px;color:var(--text-light);font-style:italic;min-width:60px;text-align:right;transition:opacity .2s ease}
.ep-save-status.saved{color:var(--green-dark);font-style:normal;font-weight:600}
.ep-save-status.saving{color:var(--text-light)}

.est-grid{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:18px}
@media(max-width:980px){.est-grid{grid-template-columns:1fr}}
.est-main{display:flex;flex-direction:column;gap:14px;min-width:0}
.est-side{display:flex;flex-direction:column;gap:14px;min-width:0}

.est-task{background:#fff;border:1px solid var(--border-light);border-left:3px solid var(--njr-orange);border-radius:var(--radius);padding:0;box-shadow:var(--shadow-xs);overflow:hidden}
.est-task.t-field{border-left-color:var(--blue)}
.est-task.t-office{border-left-color:var(--njr-orange)}
.est-task-hdr{padding:9px 14px;display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--border-light);background:linear-gradient(to bottom,#fff,var(--cream))}
.est-task-name{flex:1;font-size:14px;font-weight:600;color:var(--text);background:transparent;border:none;font-family:inherit;padding:3px 6px;border-radius:var(--radius-sm);min-width:0}
.est-task-name:focus{outline:none;background:var(--white);box-shadow:0 0 0 2px var(--njr-orange-pale)}
.est-task-type{font-size:11px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;color:var(--text-mid);padding:3px 8px;font-family:inherit;cursor:pointer}
.est-task-type:focus{outline:none;border-color:var(--njr-orange)}
.est-task-del{background:transparent;border:none;color:var(--text-light);font-size:14px;cursor:pointer;padding:2px 8px;border-radius:var(--radius-sm)}
.est-task-del:hover{background:var(--red-pale);color:var(--red)}
.est-task-body{padding:10px 14px}
.est-line{display:grid;grid-template-columns:minmax(140px,1.6fr) 70px 60px 70px 24px;gap:6px;align-items:center;padding:5px 0;border-bottom:1px solid var(--cream-dark);font-size:12px}
.est-line:last-child{border-bottom:none}
.est-line select,.est-line input{padding:5px 6px;font-size:12px;border:1px solid var(--border-light);border-radius:var(--radius-sm);font-family:inherit;color:var(--text);background:#fff;width:100%;font-variant-numeric:tabular-nums;min-width:0}
.est-line input[type=number]{text-align:right}
.est-line select:focus,.est-line input:focus{outline:none;border-color:var(--njr-orange)}
.est-line .est-line-total{font-weight:600;color:var(--text);text-align:right;padding-right:2px;font-variant-numeric:tabular-nums}
.est-line .est-line-del{background:transparent;border:none;color:var(--text-light);font-size:14px;cursor:pointer;padding:0;border-radius:var(--radius-sm);width:22px;height:22px}
.est-line .est-line-del:hover{background:var(--red-pale);color:var(--red)}
.est-line-header{display:grid;grid-template-columns:minmax(140px,1.6fr) 70px 60px 70px 24px;gap:6px;font-size:9px;font-weight:700;color:var(--text-light);letter-spacing:.05em;text-transform:uppercase;padding:0 0 5px;border-bottom:1px solid var(--border-light);margin-bottom:4px}
.est-line-header div{padding:0 4px}
.est-line-header div.num{text-align:right}
.est-totals-row.variance{font-weight:600;font-size:13px}
.est-totals-row.variance.under{color:var(--green-dark)}
.est-totals-row.variance.over{color:var(--red)}
.est-totals-row.variance.even{color:var(--text-mid)}
.est-totals-table{width:100%;border-collapse:collapse;font-size:12px}
.est-totals-table td{padding:5px 4px}
.est-totals-table td.num{text-align:right;font-variant-numeric:tabular-nums;font-weight:600;color:var(--text)}
.est-totals-table td.num.actual{color:var(--text-mid);font-style:italic}
.est-totals-table thead th{font-size:9px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase;text-align:right;padding:4px 4px 6px;border-bottom:1px solid var(--border-light)}
.est-totals-table thead th:first-child{text-align:left}
.est-totals-table tr.sum td{border-top:1px solid var(--border-light);padding-top:7px;padding-bottom:7px}
.est-totals-table tr.margin td{border-top:2px solid var(--border);padding-top:8px;font-size:13px}
.est-totals-table tr.margin td.num{font-size:15px;letter-spacing:-.01em}
.est-line-add{background:transparent;border:1px dashed var(--border);color:var(--text-mid);font-family:inherit;font-size:11px;padding:5px 10px;border-radius:var(--radius-sm);cursor:pointer;margin-top:6px;width:100%;text-align:center}
.est-line-add:hover{border-color:var(--njr-orange);color:var(--njr-orange);background:var(--njr-orange-pale)}
.est-task-foot{padding:7px 14px;background:var(--cream);border-top:1px solid var(--border-light);display:flex;justify-content:space-between;font-size:12px;color:var(--text-mid)}
.est-task-foot strong{color:var(--text);font-variant-numeric:tabular-nums}
.est-task-add{background:#fff;border:1.5px dashed var(--border);color:var(--text-mid);font-family:inherit;font-size:13px;font-weight:500;padding:14px;border-radius:var(--radius);cursor:pointer;width:100%;text-align:center}
.est-task-add:hover{border-color:var(--njr-orange);color:var(--njr-orange)}
.est-phase{margin-bottom:16px}
.est-phase-hdr{display:flex;align-items:center;gap:8px;padding:6px 0;margin-bottom:8px;border-bottom:2px solid var(--border-light);font-size:13px;color:var(--text-mid)}
.est-phase-hdr strong{color:var(--text)}
.est-phase-badge{font-size:10px;font-weight:700;letter-spacing:.06em;background:var(--njr-orange);color:#fff;border-radius:var(--radius-sm);padding:2px 6px}
.est-task-picker{display:flex;align-items:center;gap:8px;padding:10px 14px;background:var(--cream);border:1.5px solid var(--njr-orange);border-radius:var(--radius);margin-bottom:10px}
.est-task-name{flex:1;font-size:14px;font-weight:600;color:var(--text)}

.est-totals-card{position:sticky;top:64px}
.est-totals-card .proj-card-body{padding:12px 14px}
.est-totals-row{display:flex;justify-content:space-between;font-size:12px;padding:5px 0;color:var(--text-mid)}
.est-totals-row strong{color:var(--text);font-variant-numeric:tabular-nums}
.est-totals-row.sum{padding:9px 0;margin-top:5px;border-top:1px solid var(--border-light);font-size:13px;color:var(--text)}
.est-totals-row.margin{padding:9px 0;margin-top:5px;border-top:2px solid var(--border);font-size:14px;font-weight:600;color:var(--text)}
.est-totals-row.margin .margin-val{font-size:18px;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.est-totals-row.margin.good .margin-val{color:var(--green-dark)}
.est-totals-row.margin.warm .margin-val{color:var(--njr-orange)}
.est-totals-row.margin.danger .margin-val{color:var(--red)}
.est-totals-bar{height:6px;background:var(--cream-dark);border-radius:100px;overflow:hidden;margin:6px 0 4px}
.est-totals-bar-fill{height:100%;background:var(--green);transition:width .25s ease}
.est-totals-bar-fill.warm{background:var(--njr-orange)}
.est-totals-bar-fill.danger{background:var(--red)}

.est-side-info{font-size:11px;color:var(--text-light);font-style:italic;line-height:1.5;padding:10px 14px;background:var(--cream);border-radius:var(--radius-sm)}

/* === QUICK LOG HOURS — mobile-first time entry on the project page === */
.ql-form{display:flex;flex-direction:column;gap:10px}
.ql-row{display:grid;grid-template-columns:1fr 1fr;gap:8px;min-width:0}
.ql-row label{display:flex;flex-direction:column;gap:3px;font-size:10px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase;min-width:0}
.ql-row select{padding:9px 10px;font-size:14px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;font-family:inherit;color:var(--text);width:100%}
.ql-row select:focus{outline:none;border-color:var(--njr-orange)}
.ql-hours-row{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:end}
.ql-hours-row label{display:flex;flex-direction:column;gap:3px;font-size:10px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase}
.ql-hours-row input{padding:9px 12px;font-size:18px;font-weight:600;font-variant-numeric:tabular-nums;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;font-family:inherit;color:var(--text);text-align:right;width:100%}
.ql-hours-row input:focus{outline:none;border-color:var(--njr-orange)}
.ql-chips{display:flex;flex-wrap:wrap;gap:6px}
.ql-chip{background:var(--cream);border:1px solid var(--border);color:var(--text-mid);font-family:inherit;font-size:12px;font-weight:600;padding:8px 12px;border-radius:100px;cursor:pointer;transition:all .12s;min-height:36px}
.ql-chip:hover{border-color:var(--njr-orange);color:var(--njr-orange);background:var(--njr-orange-pale)}
.ql-chip.active{background:var(--njr-orange);color:#fff;border-color:var(--njr-orange)}
.ql-note{width:100%;padding:8px 10px;font-size:13px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;font-family:inherit;color:var(--text);min-height:42px;resize:vertical;line-height:1.4}
.ql-note:focus{outline:none;border-color:var(--njr-orange)}
.ql-submit{background:var(--njr-orange);color:#fff;border:none;font-family:inherit;font-size:14px;font-weight:600;padding:11px 16px;border-radius:var(--radius-sm);cursor:pointer;width:100%;min-height:44px}
.ql-submit:hover{background:var(--njr-orange-light)}
.ql-submit:disabled{opacity:.5;cursor:not-allowed}
.ql-empty{font-size:12px;color:var(--text-light);font-style:italic;padding:8px 0}
.ql-today-list{display:flex;flex-direction:column;gap:0;margin-top:12px;padding-top:10px;border-top:1px solid var(--border-light)}
.ql-today-hdr{font-size:10px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase;margin-bottom:6px}
.ql-entry{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px dashed var(--cream-dark);font-size:13px}
.ql-entry:last-child{border-bottom:none}
.ql-entry-hrs{font-variant-numeric:tabular-nums;font-weight:700;color:var(--njr-orange);min-width:48px}
.ql-entry-body{flex:1;min-width:0;color:var(--text);line-height:1.3}
.ql-entry-body small{display:block;color:var(--text-light);font-size:11px;margin-top:1px}
.ql-entry-del{background:transparent;border:none;color:var(--text-light);font-size:16px;cursor:pointer;padding:6px 10px;border-radius:var(--radius-sm);min-width:32px;min-height:32px}
.ql-entry-del:hover{background:var(--red-pale);color:var(--red)}

/* The mobile decorator wraps est-line number inputs in <label.est-line-fieldwrap>.
   On desktop we want zero visual effect: display:contents makes the label
   transparent to layout, so the input sits in its original grid cell, and the
   caption is hidden. Mobile overrides reactivate the label as a flex column. */
.est-line-fieldwrap{display:contents}
.est-line-fieldwrap > span{display:none}

/* =====================================================================
   BUILDER SUB-VIEW (view-builder)
   Embeds proposal-builder-v3.html in an iframe and overlays a side drawer
   with the deal's cost estimate. Runs full-bleed under the topbar so the
   iframe + drawer get the full viewport width.
   ===================================================================== */
#view-builder.active{
  display:flex;flex-direction:column;
  position:fixed;top:57px;left:0;right:0;bottom:0; /* 54px topbar + 3px orange border */
  background:var(--cream);z-index:20;
}
.builder-shell{display:flex;flex-direction:column;width:100%;height:100%}
.builder-shell-header{
  display:flex;align-items:center;gap:14px;
  padding:8px 18px;background:#fff;border-bottom:1px solid var(--border-light);
  flex-shrink:0;min-height:44px;
}
.builder-shell-title{flex:1;display:flex;align-items:baseline;gap:12px;min-width:0}
.builder-shell-id{font-family:'Courier New',monospace;font-weight:700;color:var(--njr-orange);font-size:13px;letter-spacing:.04em;flex-shrink:0}
.builder-shell-name{font-size:13px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}
.builder-shell-meta{font-size:11px;color:var(--text-light);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.builder-shell-actions{display:flex;gap:6px;flex-shrink:0;align-items:center}
.builder-shell-body{flex:1;display:flex;min-height:0;position:relative}
.builder-iframe{flex:1;border:none;background:#fff;min-width:0;display:block}
.builder-drawer{
  width:360px;flex-shrink:0;background:var(--cream);border-left:1px solid var(--border-light);
  overflow-y:auto;display:flex;flex-direction:column;
}
.builder-drawer[hidden]{display:none}
.builder-drawer-hdr{padding:12px 14px 8px;border-bottom:1px solid var(--border-light);background:#fff}
.builder-drawer-hdr h3{font-size:13px;font-weight:600;color:var(--text);margin:0 0 2px;letter-spacing:-.005em}
.builder-drawer-hdr .builder-drawer-sub{font-size:10px;color:var(--text-light);letter-spacing:.04em;text-transform:uppercase;font-weight:600}
.builder-drawer-body{padding:12px 14px;display:flex;flex-direction:column;gap:12px;flex:1}
.builder-drawer-fee{background:#fff;border:1px solid var(--border-light);border-radius:var(--radius-sm);padding:10px 12px}
.builder-drawer-fee label{font-size:9px;font-weight:700;color:var(--text-light);letter-spacing:.08em;text-transform:uppercase;display:block;margin-bottom:4px}
.builder-drawer-fee-wrap{display:flex;align-items:center;gap:6px}
.builder-drawer-fee-prefix{font-size:18px;font-weight:600;color:var(--text-mid)}
.builder-drawer-fee input{flex:1;font-size:20px;font-weight:600;color:var(--text);font-family:inherit;border:1px solid transparent;background:transparent;padding:4px 6px;border-radius:var(--radius-sm);font-variant-numeric:tabular-nums;text-align:right}
.builder-drawer-fee input:focus{outline:none;border-color:var(--njr-orange);background:#fff}
.builder-drawer-fee-hint{font-size:10px;color:var(--text-light);margin-top:4px;font-style:italic}
.builder-drawer-tiles{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.builder-drawer-tile{background:#fff;border:1px solid var(--border-light);border-radius:var(--radius-sm);padding:8px 10px}
.builder-drawer-tile-lbl{font-size:9px;font-weight:700;color:var(--text-light);letter-spacing:.07em;text-transform:uppercase;margin-bottom:3px}
.builder-drawer-tile-val{font-size:15px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.builder-drawer-tile-val.warm{color:var(--njr-orange)}
.builder-drawer-tile-val.green{color:var(--green-dark)}
.builder-drawer-tile-val.red{color:var(--red)}
.builder-drawer-tile-sub{font-size:10px;color:var(--text-light);margin-top:2px}
.builder-drawer-tasks{background:#fff;border:1px solid var(--border-light);border-radius:var(--radius-sm);overflow:hidden}
.builder-drawer-tasks-hdr{padding:8px 11px;font-size:10px;font-weight:700;color:var(--text-light);letter-spacing:.07em;text-transform:uppercase;background:var(--cream);border-bottom:1px solid var(--border-light)}
.builder-drawer-task{padding:7px 11px;display:flex;justify-content:space-between;gap:8px;font-size:12px;border-bottom:1px solid var(--cream-dark);align-items:center}
.builder-drawer-task:last-child{border-bottom:none}
.builder-drawer-task-name{color:var(--text);font-weight:500;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.builder-drawer-task-type{font-size:9px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;padding:1px 5px;border-radius:3px;flex-shrink:0}
.builder-drawer-task-type.field{background:#FFEDD5;color:#B45309}
.builder-drawer-task-type.office{background:#d1fae5;color:#065f46}
.builder-drawer-task-cost{font-size:12px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;flex-shrink:0}
.builder-drawer-empty{padding:14px;text-align:center;color:var(--text-light);font-size:11px;font-style:italic;background:#fff;border:1px dashed var(--border-light);border-radius:var(--radius-sm)}
.builder-drawer-link{display:block;text-align:center;padding:8px 12px;font-size:11px;font-weight:600;color:var(--njr-orange);text-decoration:none;border:1px solid var(--njr-orange);border-radius:var(--radius-sm);background:#fff;letter-spacing:.04em;text-transform:uppercase;transition:all .15s}
.builder-drawer-link:hover{background:var(--njr-orange);color:#fff}

.est-exp-row{display:grid;grid-template-columns:1fr 100px 28px;gap:8px;align-items:center;padding:5px 0;border-bottom:1px solid var(--cream-dark);font-size:12px}
.est-exp-row:last-child{border-bottom:none}
.est-exp-row input{padding:5px 7px;font-size:12px;border:1px solid var(--border-light);border-radius:var(--radius-sm);font-family:inherit;background:#fff}
.est-exp-row input[type=number]{text-align:right;font-variant-numeric:tabular-nums}
.est-exp-row input:focus{outline:none;border-color:var(--njr-orange)}

/* === ACTIVITY (engagement tracking) — used in proposal modal + project page === */
.activity-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(96px,1fr));gap:10px;padding:10px 0 12px;border-bottom:1px solid var(--border-light);margin-bottom:12px}
.activity-stat{display:flex;flex-direction:column;gap:2px}
.activity-stat-val{font-size:18px;font-weight:600;color:var(--text);line-height:1.05;letter-spacing:-.01em}
.activity-stat-val.warm{color:var(--njr-orange)}
.activity-stat-val.accepted{color:var(--green-dark)}
.activity-stat-val.cool{color:var(--text-light)}
.activity-stat-lbl{font-size:9px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase}
.session-list{display:flex;flex-direction:column;gap:6px}
.session-item{background:var(--cream);border:1px solid var(--border-light);border-left:3px solid var(--gray);border-radius:var(--radius-sm);padding:8px 11px}
.session-item.s-accepted{border-left-color:var(--green)}
.session-item.s-declined{border-left-color:var(--red)}
.session-item.s-warm{border-left-color:var(--njr-orange)}
.session-hdr{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}
.session-when{font-size:12px;font-weight:600;color:var(--text)}
.session-meta{font-size:11px;color:var(--text-mid)}
.session-tag{display:inline-block;font-size:9px;font-weight:700;padding:1px 7px;border-radius:100px;letter-spacing:.05em;text-transform:uppercase}
.session-tag.accepted{background:var(--green-pale);color:var(--green-dark);border:1px solid var(--green-border)}
.session-tag.declined{background:var(--red-pale);color:var(--red);border:1px solid var(--red-border)}
.session-tag.deep{background:var(--njr-orange-pale);color:var(--njr-orange);border:1px solid var(--njr-orange-border)}
.session-detail{margin-top:5px;font-size:11px;color:var(--text-mid);line-height:1.4;display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.session-detail .pip{display:inline-block;font-size:10px;padding:1px 6px;border-radius:3px;background:#fff;border:1px solid var(--border-light);color:var(--text-mid)}
.session-extra{padding:6px 8px;text-align:center;font-size:11px;color:var(--text-light);font-style:italic}
.activity-empty{padding:18px 14px;text-align:center;color:var(--text-light);font-size:12px;font-style:italic;background:var(--cream);border-radius:var(--radius-sm);border:1px dashed var(--border-light)}
.modal-divider{font-size:11px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase;margin:14px 0 10px;padding-top:14px;border-top:1px solid var(--border-light)}

/* === LOGIN MODAL === */
.login-veil{position:fixed;inset:0;background:rgba(45,45,45,.92);display:none;align-items:center;justify-content:center;z-index:500;padding:18px}
.login-veil.show{display:flex}
.login-card{background:#fff;border-radius:var(--radius);max-width:400px;width:100%;box-shadow:0 24px 64px rgba(0,0,0,.4);overflow:hidden;border-top:4px solid var(--njr-orange)}
.login-card-hdr{padding:22px 24px 6px;text-align:center}
.login-card-hdr h2{font-size:18px;font-weight:600;color:var(--text);margin-bottom:4px}
.login-card-hdr p{font-size:12px;color:var(--text-light)}
.login-form{padding:18px 24px 22px;display:flex;flex-direction:column;gap:11px}
.login-form label{font-size:10px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase;display:block;margin-bottom:3px}
.login-form input{width:100%;padding:9px 12px;font-size:14px;border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;color:var(--text);background:#fff}
.login-form input:focus{outline:none;border-color:var(--njr-orange)}
.login-form button{padding:10px 16px;background:var(--njr-orange);color:#fff;border:none;border-radius:var(--radius-sm);font-family:inherit;font-size:14px;font-weight:600;cursor:pointer;margin-top:6px}
.login-form button:hover{background:var(--njr-orange-light)}
.login-form button:disabled{opacity:.6;cursor:not-allowed}
.login-error{font-size:12px;color:var(--red);min-height:14px;margin-top:-4px}

/* === TIMESHEET VIEW === */
.ts-grid{display:grid;grid-template-columns:minmax(360px,440px) 1fr;gap:20px;align-items:start;max-width:1400px}
@media(max-width:900px){.ts-grid{grid-template-columns:1fr}}
.ts-form-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:20px;display:flex;flex-direction:column;gap:14px}
.ts-field{display:flex;flex-direction:column;gap:4px}
.ts-field label{font-size:10px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase}
.ts-field select,.ts-field input,.ts-field textarea{padding:9px 11px;font-size:14px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;font-family:inherit;color:var(--text);width:100%;box-sizing:border-box}
.ts-field textarea{resize:vertical;min-height:60px}
.ts-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.ts-timer-card{background:var(--njr-orange);color:#fff;border-radius:var(--radius);padding:16px 20px;display:flex;align-items:center;gap:16px}
.ts-timer-card button{background:rgba(255,255,255,.2);color:#fff;border:1.5px solid rgba(255,255,255,.5);border-radius:100px;padding:8px 18px;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;transition:background .15s}
.ts-timer-card button:hover{background:rgba(255,255,255,.35)}
.ts-timer-elapsed{font-size:28px;font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:.02em;min-width:90px}
.ts-timer-hint{font-size:12px;opacity:.85;margin-top:2px}
.ts-chips{display:flex;flex-wrap:wrap;gap:6px}
.ts-chip{background:#f3f3f3;border:1px solid var(--border);border-radius:100px;padding:5px 12px;font-size:12px;font-weight:600;cursor:pointer;font-family:inherit;transition:background .12s,color .12s}
.ts-chip:hover,.ts-chip.active{background:var(--njr-orange);color:#fff;border-color:var(--njr-orange)}
.ts-submit{background:var(--njr-orange);color:#fff;border:none;border-radius:var(--radius-sm);padding:11px 20px;font-size:14px;font-weight:700;cursor:pointer;font-family:inherit;align-self:flex-end;transition:opacity .15s}
.ts-submit:hover{opacity:.88}
.ts-submit:disabled{opacity:.5;cursor:not-allowed}
.ts-entries-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:0;overflow:hidden}
.ts-entries-hdr{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--border)}
.ts-entries-hdr h3{margin:0;font-size:14px;font-weight:700}
.ts-entries-hdr .ts-totals{font-size:12px;color:var(--text-light)}
.ts-table{width:100%;border-collapse:collapse;font-size:13px}
.ts-table th{text-align:left;padding:8px 14px;font-size:10px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase;border-bottom:1px solid var(--border);white-space:nowrap}
.ts-table td{padding:9px 14px;border-bottom:1px solid var(--border-light,#f0f0f0);vertical-align:middle}
.ts-table tr:last-child td{border-bottom:none}
.ts-table tr:hover td{background:#fafafa}
.ts-date-group{background:#f7f7f7;font-size:11px;font-weight:700;color:var(--text-light);letter-spacing:.05em;text-transform:uppercase}
.ts-date-group td{padding:6px 14px}
.ts-entry-del{background:none;border:none;color:var(--text-light);cursor:pointer;font-size:16px;padding:2px 6px;border-radius:4px;line-height:1}
.ts-entry-del:hover{color:var(--red,#c00);background:#fef2f2}
.ts-empty{padding:28px;text-align:center;color:var(--text-light);font-size:13px}
.ts-footer{padding:10px 18px;border-top:1px solid var(--border);font-size:12px;color:var(--text-light);display:flex;gap:20px}
.ts-footer strong{color:var(--text)}
.ts-loading{padding:20px;text-align:center;color:var(--text-light);font-size:13px}
.ts-ot-badge{background:#fff3cd;color:#856404;font-size:10px;font-weight:700;padding:1px 5px;border-radius:3px;margin-left:4px}

/* === MOBILE LOG-TIME FAB === */
/* Floating action button — only on mobile, always reachable for time entry */
.ql-fab{display:none;position:fixed;right:16px;bottom:16px;z-index:80;background:var(--njr-orange);color:#fff;border:none;border-radius:100px;padding:14px 18px;font-family:inherit;font-size:14px;font-weight:600;letter-spacing:.02em;box-shadow:0 6px 20px rgba(214,86,0,.4);cursor:pointer;align-items:center;gap:8px;min-height:52px}
.ql-fab svg{width:22px;height:22px;display:block}
.ql-fab:active{transform:scale(.96);box-shadow:0 4px 14px rgba(214,86,0,.45)}
@media(max-width:768px){.ql-fab{display:flex}}

/* Lightweight toast */
.toast{position:fixed;bottom:88px;left:50%;transform:translateX(-50%);background:var(--njr-dark);color:#fff;padding:11px 18px;border-radius:100px;font-size:13px;font-weight:600;z-index:300;box-shadow:0 8px 24px rgba(0,0,0,.32);opacity:0;transition:opacity .2s ease;pointer-events:none}
.toast.show{opacity:1}

/* Boot indicator — shows briefly while we hydrate from server on first load */
.boot-veil{position:fixed;inset:0;background:var(--cream);display:flex;align-items:center;justify-content:center;z-index:600;font-size:12px;color:var(--text-light)}
.boot-veil.hide{display:none}

/* Sync banner — shown when localStorage has data the server doesn't */
.sync-banner{background:var(--blue-pale);border:1px solid var(--blue-border);color:var(--blue);padding:10px 16px;border-radius:var(--radius-sm);font-size:13px;margin-bottom:14px;display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.sync-banner button{background:var(--blue);color:#fff;border:none;font-family:inherit;font-size:12px;font-weight:600;padding:6px 12px;border-radius:var(--radius-sm);cursor:pointer}
.sync-banner button:hover{filter:brightness(1.05)}
.sync-banner button.ghost{background:transparent;color:var(--blue);border:1px solid var(--blue-border)}

/* === SEND TO CLIENT MODAL === */
.modal.modal-wide{max-width:680px}
.send-form{padding:18px;display:flex;flex-direction:column;gap:11px;max-height:70vh;overflow-y:auto}
.send-row{display:flex;gap:10px;align-items:center}
.send-row label{flex-shrink:0;font-size:10px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase;width:70px}
.send-row input,.send-row select,.send-row textarea{flex:1;padding:7px 10px;font-size:13px;border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;color:var(--text);background:#fff}
.send-row input:focus,.send-row select:focus,.send-row textarea:focus{outline:none;border-color:var(--njr-orange)}
.send-row select{cursor:pointer}
.send-body{display:flex;flex-direction:column;gap:5px}
.send-body label{font-size:10px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase}
.send-body textarea{width:100%;min-height:200px;padding:11px 13px;font-size:13px;border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;color:var(--text);background:#fff;line-height:1.55;resize:vertical;font-family:'Source Sans 3','Helvetica Neue',Arial,sans-serif}
.send-body textarea:focus{outline:none;border-color:var(--njr-orange)}
.send-options{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text-mid);padding-top:2px}
.send-options input[type=checkbox]{accent-color:var(--njr-orange);cursor:pointer}
.send-help{font-size:11px;color:var(--text-light);font-style:italic;line-height:1.5;background:var(--cream);border-radius:var(--radius-sm);padding:8px 11px;border:1px solid var(--border-light)}
.send-help code{background:var(--cream-dark);padding:1px 5px;border-radius:3px;font-size:10px;color:var(--text)}
.send-surface-picker{display:flex;flex-direction:column;gap:6px;flex:1}
.send-surface-opt{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--text);cursor:pointer;font-weight:500}
.send-surface-opt input[type=radio]{accent-color:var(--njr-orange);cursor:pointer}
.send-surface-hint{color:var(--text-light);font-weight:400;font-style:italic}

/* === DETAIL MODAL (proposals) === */
.modal-veil{position:fixed;inset:0;background:rgba(20,20,20,.55);display:none;align-items:center;justify-content:center;z-index:200;padding:18px}
.modal-veil.show{display:flex}
.modal{background:#fff;border-radius:var(--radius);max-width:540px;width:100%;box-shadow:0 24px 48px rgba(0,0,0,.28);overflow:hidden}
.modal-hdr{padding:14px 18px;border-bottom:1px solid var(--border-light);display:flex;align-items:center;justify-content:space-between;gap:10px}
.modal-hdr h3{font-size:15px;font-weight:600;color:var(--text)}
.modal-close{background:transparent;border:none;font-size:18px;color:var(--text-light);cursor:pointer;padding:2px 6px;border-radius:var(--radius-sm)}
.modal-close:hover{background:var(--cream-dark);color:var(--text)}
.modal-body{padding:18px;max-height:60vh;overflow-y:auto}
.modal-row{display:grid;grid-template-columns:130px 1fr;gap:8px 14px;font-size:13px;margin-bottom:8px}
.modal-row-lbl{font-size:11px;font-weight:600;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase;padding-top:1px}
.modal-row-val{color:var(--text)}
.modal-foot{padding:12px 18px;background:var(--cream);border-top:1px solid var(--border-light);display:flex;gap:6px;justify-content:flex-end;flex-wrap:wrap}

@media(max-width:1100px){
  .kanban-3{grid-template-columns:repeat(3,1fr)}
  .kanban-5{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:680px){
  .topbar{padding:0 12px}
  .logo-wrap{padding-right:8px}
  .kanban-3,.kanban-5{grid-template-columns:1fr}
  .content{padding:16px 14px 40px}
  #map{height:480px}
}

/* ============================================================
   PASS 2 — TABLET / DETAIL PAGES (project, estimate, kanban)
   ============================================================ */

/* Tablet range: stop squeezing the side rail at 980–1024px */
@media(max-width:1024px){
  .proj-grid,.est-grid{grid-template-columns:1fr}
  .est-totals-card{position:static}
}

/* ============================================================
   MOBILE — PASS 1: NAV DRAWER, TABLE CARDS, MODAL STACKING
   ============================================================ */

/* Hamburger button: hidden on desktop, shown on mobile */
.nav-hamburger{display:none;background:transparent;border:none;color:#fff;padding:8px;margin-right:4px;cursor:pointer;border-radius:var(--radius-sm);width:40px;height:40px;align-items:center;justify-content:center}
.nav-hamburger:hover{background:rgba(255,255,255,.08)}
.nav-hamburger svg{width:22px;height:22px;display:block}

/* Backdrop behind the drawer */
.nav-backdrop{position:fixed;inset:0;background:rgba(20,20,20,.55);z-index:90;display:none}
body.nav-open .nav-backdrop{display:block}
/* Raise the topbar (and its child nav-tabs drawer) above the backdrop.
   The topbar normally has z-index:50, which creates a stacking context
   that traps nav-tabs below the z-index:90 backdrop. */
body.nav-open .topbar{z-index:120}

@media(max-width:768px){
  /* --- Topbar / Drawer ---------------------------------------------- */
  .nav-hamburger{display:inline-flex}
  /* Reorder so hamburger sits at the far left of topbar-left */
  .topbar-left{gap:6px}
  .logo-wrap{padding-right:10px}
  .logo-sub{display:none}

  /* The nav-tabs element becomes a slide-in drawer */
  .nav-tabs{
    position:fixed;top:0;left:0;bottom:0;width:260px;max-width:80vw;
    background:var(--njr-dark-mid);
    flex-direction:column;align-items:stretch;gap:2px;
    padding:64px 12px 20px;
    transform:translateX(-100%);transition:transform .22s ease;
    z-index:100;overflow-y:auto;
    border-right:3px solid var(--njr-orange);
    box-shadow:0 0 24px rgba(0,0,0,.4);
  }
  body.nav-open .nav-tabs{transform:translateX(0)}
  .nav-tab{
    text-align:left;font-size:14px;padding:12px 14px;border-radius:var(--radius-sm);
    color:rgba(255,255,255,.75);
    min-height:44px;
  }
  .nav-tab.active{background:var(--njr-orange);color:#fff}

  /* Topbar-right: tighten so it fits on small screens */
  .topbar-right{gap:4px}
  .topbar-right .btn{padding:8px 10px;font-size:12px;min-height:36px}
  .topbar-right #builder-link-btn{display:none}

  /* --- Inputs: prevent iOS zoom-on-focus ---------------------------- */
  input[type=text],input[type=email],input[type=tel],input[type=password],
  input[type=number],input[type=search],input[type=date],input[type=url],
  textarea,select{font-size:16px}
  /* Keep our small inline filter chips and dense form rows visually compact
     even with 16px base — they use their own classes */
  .filter-chip{font-size:11px}

  /* --- Tables → stacked cards --------------------------------------- */
  .data-table{border:none;background:transparent;box-shadow:none;border-radius:0}
  .data-table thead{display:none}
  .data-table,.data-table tbody,.data-table tr,.data-table td{display:block;width:100%}
  .data-table tbody tr{
    background:#fff;border:1px solid var(--border-light);border-radius:var(--radius);
    box-shadow:var(--shadow-xs);
    margin-bottom:10px;padding:10px 12px;
  }
  .data-table tbody tr:hover{background:#fff}
  .data-table tbody td{
    border-bottom:1px dashed var(--cream-dark);
    padding:6px 0;font-size:13px;
    display:flex;justify-content:space-between;align-items:center;gap:12px;
    text-align:right;min-height:32px;
  }
  .data-table tbody tr td:last-child{border-bottom:none}
  .data-table tbody td::before{
    content:attr(data-mlabel);
    font-size:10px;font-weight:700;color:var(--text-light);
    letter-spacing:.06em;text-transform:uppercase;
    text-align:left;flex-shrink:0;
  }
  /* Labels are stamped onto each td as data-mlabel by decorateDataTables()
     (a MutationObserver picks up newly-rendered tables and copies thead text). */
  .data-table tbody td[data-mlabel]::before{
    content:attr(data-mlabel);
    color:var(--text-light);font-weight:700;
  }
  .data-table tbody td:empty{display:none}
  /* Right-align numeric cells stay right-aligned; status badge floats right */
  .data-table tbody td.num{text-align:right}
  .data-table tbody td .status-badge{margin-left:auto}

  /* --- Page header on mobile ---------------------------------------- */
  .page-hdr{flex-direction:column;align-items:stretch;gap:10px}
  .page-hdr h1{font-size:19px}

  /* --- Modals: full-screen-ish on phones ---------------------------- */
  .modal-veil{padding:0;align-items:flex-end}
  .modal{max-width:100%;width:100%;border-radius:var(--radius) var(--radius) 0 0;max-height:92vh;display:flex;flex-direction:column}
  .modal.modal-wide{max-width:100%}
  .modal-body{flex:1;max-height:none;padding:14px}
  .modal-row{grid-template-columns:1fr;gap:2px;margin-bottom:10px}
  .modal-row-lbl{padding-top:0}
  .modal-hdr{padding:12px 14px}
  .modal-close{font-size:22px;padding:6px 10px;min-width:40px;min-height:40px}
  .modal-foot{padding:10px 14px}
  .modal-foot .btn{min-height:40px;padding:9px 14px}

  /* --- Pass-2 additions inside the 768px block --------------------- */

  /* Multi-column form/meta grids collapse to a single column */
  .proj-fields,
  .cp-meta-grid,
  .np-fields,
  .est-summary{grid-template-columns:1fr}
  .cp-totals-grid{grid-template-columns:1fr}
  .np-field-pair{grid-template-columns:1fr 1fr}
  /* Header inputs (e.g. lead-new-form) often override np-field-pair inline */
  .np-field-pair[style*="grid-template-columns"]{grid-template-columns:1fr 1fr!important}

  /* Project page header: stack the title and actions */
  .proj-page-hdr{flex-direction:column;align-items:stretch;gap:10px}
  .proj-page-actions{flex-wrap:wrap}
  .proj-page-actions .btn{min-height:36px}

  /* Estimate line items: turn the fixed 7-column row into a stacked block.
     A small JS decorator (decorateEstLines) wraps each number input in a
     <label> so we can show captions above each field — see scripts below. */
  .est-line-header{display:none}
  .est-line{
    display:grid;
    grid-template-columns:1fr 1fr 1fr;
    grid-template-areas:
      'cat  cat  del'
      'hb   rate rate'
      'tb   tb   tb';
    gap:8px;
    padding:10px 12px;
    background:var(--cream);
    border-radius:var(--radius-sm);
    margin-bottom:8px;
    border-bottom:none;
    align-items:center;
  }
  .est-line .est-line-cat{grid-area:cat;font-size:14px;padding:8px 10px}
  .est-line .est-line-del{grid-area:del;justify-self:end;width:36px;height:36px;font-size:20px}
  .est-line .est-line-total{grid-area:tb;text-align:left;padding-left:2px}
  /* The decorator wraps each number input in <label class="est-line-fieldwrap">.
     Overrides the desktop display:contents/none rules so caption shows. */
  .est-line-fieldwrap{display:flex;flex-direction:column;gap:2px;min-width:0}
  .est-line-fieldwrap > span{display:block;font-size:9px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase}
  .est-line-fieldwrap.f-hb{grid-area:hb}
  .est-line-fieldwrap.f-rate{grid-area:rate}
  .est-line-fieldwrap input{padding:8px 8px;font-size:14px;text-align:right;width:100%}
  /* Tag the totals with currency cue */

  .est-line .est-line-actual-total::before{content:'Actual ';font-size:9px;font-weight:700;color:var(--text-light);letter-spacing:.06em;text-transform:uppercase;margin-right:4px}

  /* Expense rows stay 2-col with delete; description full row */
  .est-exp-row{grid-template-columns:1fr 100px 32px}
  .est-exp-row input{padding:8px 8px;font-size:14px}

  /* Estimate task header: allow wrap */
  .est-task-hdr{flex-wrap:wrap}
  .est-task-name{flex-basis:100%;font-size:15px;padding:8px 10px;background:#fff;border:1px solid var(--border-light)}

  /* Kanban: intermediate 2-column layout for tablet/large phone (681–768px).
     The existing 680px rule collapses to 1 col below this. */
  .kanban-3,.kanban-5{grid-template-columns:repeat(2,minmax(0,1fr))}
  /* Bigger, more tappable cards */
  .kcard{padding:11px 13px;font-size:13px}
  .kanban-col-hdr{padding:8px 10px 10px}
  .kanban-col-name{font-size:12px}

  /* --- Pass-3: tap-target audit & form polish ---------------------- */
  .btn{padding:10px 14px;font-size:13px;min-height:40px}
  .btn-sm{padding:8px 12px;font-size:12px;min-height:36px}
  .btn-link{padding:8px 10px;min-height:36px}
  .filter-chip{padding:7px 12px;font-size:12px;min-height:32px}
  .add-btn{padding:7px 12px;font-size:12px;min-height:32px}
  .task-del,.est-task-del,.est-line-del,.doc-action{
    min-width:32px;min-height:32px;font-size:16px;padding:4px 8px;
  }
  /* Hover never fires on touch, so reveal task-del at low opacity */
  .task-item .task-del{opacity:.7}

  /* Page header action row wraps to full width on mobile, inline search expands */
  .page-hdr-actions{display:flex;flex-wrap:wrap;gap:8px;width:100%}
  .page-hdr-actions .btn{flex:1 1 auto}
  #client-search{min-width:0!important;width:100%!important;padding:10px 12px!important;font-size:16px!important}
}


/* === WORKLOAD page === */
.wl-rollup-row{display:grid;grid-template-columns:repeat(auto-fit, minmax(260px, 1fr));gap:12px;margin-bottom:18px}
.wl-rollup-card{background:#fff;border:1px solid var(--border-light);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow-xs)}
.wl-rollup-card-hdr{display:flex;align-items:center;gap:8px;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-mid);margin-bottom:10px}
.wl-rollup-dot{width:10px;height:10px;border-radius:100px;border:2px solid #fff;box-shadow:0 0 0 1px rgba(0,0,0,.18)}
.wl-rollup-dot.office{background:#388e3c}
.wl-rollup-dot.field{background:var(--njr-orange,#D65600)}
.wl-rollup-big{font-size:26px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;line-height:1.1}
.wl-rollup-big-suffix{font-size:14px;color:var(--text-mid);margin-left:4px;font-weight:500}
.wl-rollup-sub{margin-top:6px;font-size:12px;color:var(--text-mid);font-variant-numeric:tabular-nums}
.wl-rollup-sub strong{color:var(--text);font-weight:600}
.wl-rollup-weeks{margin-top:10px;padding-top:10px;border-top:1px solid var(--border-light);font-size:12px;color:var(--text-mid)}
.wl-rollup-weeks-num{font-weight:600;color:var(--text)}
.wl-rollup-weeks-num.over{color:var(--red)}
.wl-rollup-weeks-num.near{color:#b45309}
.wl-rollup-weeks-num.ok{color:#15803d}

.wl-attention-card{background:#fff;border:1px solid var(--border-light);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow-xs);margin-bottom:18px}
.wl-attention-hdr{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:10px}
.wl-attention-hdr h3{margin:0;font-size:13px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--text)}
.wl-attention-hdr-count{font-size:12px;color:var(--text-light);font-variant-numeric:tabular-nums}
.wl-attention-list{display:flex;flex-direction:column;gap:6px}
.wl-attention-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--border-light);border-radius:var(--radius-sm);background:var(--cream);font-size:13px}
.wl-attention-row:hover{border-color:var(--njr-orange,#D65600);cursor:pointer;background:#fff}
.wl-attention-meta{flex:1;display:flex;flex-direction:column;gap:2px}
.wl-attention-task{font-weight:500;color:var(--text)}
.wl-attention-project{font-size:11px;color:var(--text-light)}
.wl-attention-hours{font-size:12px;color:var(--text-mid);font-variant-numeric:tabular-nums;flex-shrink:0;text-align:right;min-width:120px}
.wl-flag-chip{font-size:10px;font-weight:700;padding:2px 7px;border-radius:100px;letter-spacing:.04em;text-transform:uppercase;flex-shrink:0}
.wl-flag-chip.over_budget{background:#fee;color:var(--red)}
.wl-flag-chip.near_budget{background:#FEF3C7;color:#92400E}
.wl-flag-chip.past_deadline{background:#fee;color:var(--red)}
.wl-attention-empty{padding:24px;text-align:center;color:var(--text-light);font-style:italic;font-size:12px}

.wl-projects-card{background:#fff;border:1px solid var(--border-light);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow-xs)}
.wl-projects-table{width:100%;border-collapse:collapse;font-size:13px}
.wl-projects-table th{text-align:left;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-light);padding:6px 8px;border-bottom:1px solid var(--border)}
.wl-projects-table th.r{text-align:right}
.wl-projects-table td{padding:8px;border-bottom:1px solid var(--border-light);vertical-align:middle}
.wl-projects-table td.r{text-align:right;font-variant-numeric:tabular-nums}
.wl-projects-table tr:hover td{background:var(--cream);cursor:pointer}
.wl-projects-table .wl-proj-name{font-weight:500;color:var(--text)}
.wl-projects-table .wl-proj-client{font-size:11px;color:var(--text-light);margin-top:1px}
.wl-projects-table .wl-flag-strip{display:inline-flex;gap:4px;margin-left:8px;vertical-align:middle}
.wl-projects-empty{padding:24px;text-align:center;color:var(--text-light);font-style:italic;font-size:12px}

/* Capacity settings inline row */
.wl-cap-row{display:grid;grid-template-columns:repeat(auto-fit, minmax(180px, 1fr));gap:14px;margin-bottom:10px}
.wl-cap-row label{display:flex;flex-direction:column;font-size:11px;color:var(--text-light);gap:4px}
.wl-cap-row input{padding:6px 8px;font:inherit;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;color:var(--text);font-variant-numeric:tabular-nums}
.wl-cap-row input:focus{outline:none;border-color:var(--njr-orange,#D65600);box-shadow:0 0 0 2px rgba(214,86,0,.12)}


/* === Project page Tasks card — project_tasks structured view (punch #9) === */
.pt-card-toolbar{display:flex;gap:8px;align-items:center;margin-bottom:10px;flex-wrap:wrap}
.pt-card-toolbar select{flex:1;min-width:160px;padding:6px 8px;font:inherit;font-size:12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff}
.pt-phase-section{margin-bottom:14px}
.pt-phase-section:last-of-type{margin-bottom:0}
.pt-phase-hdr{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;margin-bottom:0;background:var(--cream-dark);border-radius:var(--radius-sm) var(--radius-sm) 0 0;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-mid)}
.pt-phase-hdr-name{display:inline-flex;align-items:center;gap:6px}
.pt-phase-hdr-total{font-weight:600;color:var(--text);font-size:11px;letter-spacing:0;text-transform:none;font-variant-numeric:tabular-nums}
.pt-phase-hdr-total b{color:var(--text);font-weight:600}
.pt-phase-list{border:1px solid var(--border);border-top:0;border-radius:0 0 var(--radius-sm) var(--radius-sm);overflow:hidden;background:#fff}
.pt-row{display:grid;grid-template-columns:auto 1fr auto auto auto auto auto;gap:10px;align-items:center;padding:7px 10px;border-bottom:1px solid var(--border-light);background:#fff;border-left:3px solid transparent;font-size:13px}
.pt-row:last-child{border-bottom:0}
.pt-row:hover{background:var(--cream)}
.pt-row.complete{opacity:.55}
.pt-row.complete .pt-task-name{text-decoration:line-through;color:var(--text-light)}
.pt-row.attention-3{border-left-color:var(--red);background:#fff8f8}
.pt-row.attention-2{border-left-color:#b45309;background:#fffdf5}
.pt-row.attention-1{border-left-color:#ca8a04}
.pt-check{cursor:pointer;width:16px;height:16px;flex-shrink:0}
.pt-task-name{color:var(--text);font-weight:500;line-height:1.3}
.pt-task-code{font-size:10px;color:var(--text-light);margin-right:6px;font-variant-numeric:tabular-nums;display:inline-block;padding:1px 5px;background:var(--cream-dark);border-radius:2px}
.pt-hours-input{width:54px;text-align:right;padding:3px 6px;font:inherit;font-size:12px;border:1px solid var(--border);border-radius:3px;background:#fff;font-variant-numeric:tabular-nums;-moz-appearance:textfield}
.pt-hours-input::-webkit-outer-spin-button,.pt-hours-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.pt-hours-input:focus{outline:none;border-color:var(--njr-orange,#D65600);box-shadow:0 0 0 2px rgba(214,86,0,.12)}
.pt-logged{font-size:11px;color:var(--text-mid);font-variant-numeric:tabular-nums;min-width:54px;text-align:right;white-space:nowrap}
.pt-logged .pt-logged-suffix{color:var(--text-light)}
.pt-pct-badge{font-size:10px;font-weight:600;padding:2px 6px;border-radius:100px;font-variant-numeric:tabular-nums;min-width:46px;text-align:center;white-space:nowrap}
.pt-pct-badge.ok{background:#e8f5e9;color:#15803d}
.pt-pct-badge.near{background:#FEF3C7;color:#92400E}
.pt-pct-badge.over{background:#fee;color:var(--red)}
.pt-pct-badge.none{background:transparent;color:var(--text-light)}
.pt-remove{background:transparent;border:0;color:var(--text-light);cursor:pointer;font-size:16px;padding:2px 4px;border-radius:3px;line-height:1}
.pt-remove:hover{background:#fee;color:var(--red)}
.pt-empty{text-align:center;color:var(--text-light);padding:18px 14px;font-style:italic;font-size:12px}
.pt-foot{margin-top:10px;display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;font-size:11px;color:var(--text-light)}
.pt-foot-totals{font-variant-numeric:tabular-nums}
.pt-foot-totals strong{color:var(--text);font-weight:600}
.pt-foot a{color:var(--njr-orange,#D65600);text-decoration:none;cursor:pointer}
.pt-foot a:hover{text-decoration:underline}

/* === Dashboard workload pulse card (punch #9) === */
.dwl-card{background:#fff;border:1px solid var(--border-light);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow-xs);margin-bottom:18px;cursor:pointer;transition:border-color .12s,box-shadow .12s}
.dwl-card:hover{border-color:var(--njr-orange,#D65600);box-shadow:0 2px 8px rgba(214,86,0,.08)}
.dwl-hdr{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:10px;gap:10px}
.dwl-hdr h3{margin:0;font-size:13px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--text)}
.dwl-hdr-link{font-size:11px;color:var(--text-light);font-style:italic}
.dwl-card:hover .dwl-hdr-link{color:var(--njr-orange,#D65600);font-style:normal}
.dwl-rows{display:flex;flex-direction:column;gap:10px}
.dwl-row{display:grid;grid-template-columns:60px 1fr auto;gap:12px;align-items:center;font-size:12px}
.dwl-row-label{display:inline-flex;align-items:center;gap:6px;font-weight:600;color:var(--text);letter-spacing:.02em}
.dwl-row-label .dwl-dot{width:8px;height:8px;border-radius:100px;border:2px solid #fff;box-shadow:0 0 0 1px rgba(0,0,0,.18)}
.dwl-row-label .dwl-dot.field{background:var(--njr-orange,#D65600)}
.dwl-row-label .dwl-dot.office{background:#388e3c}
.dwl-row-bar{position:relative;background:var(--cream-dark);border-radius:100px;height:14px;overflow:hidden}
.dwl-row-fill{position:absolute;top:0;left:0;bottom:0;border-radius:100px;transition:width .4s ease}
.dwl-row-fill.ok{background:linear-gradient(90deg,#22c55e,#15803d)}
.dwl-row-fill.near{background:linear-gradient(90deg,#fbbf24,#d97706)}
.dwl-row-fill.over{background:linear-gradient(90deg,#ef4444,var(--red))}
.dwl-row-fill.none{background:linear-gradient(90deg,var(--cream-dark),var(--border))}
.dwl-row-meta{font-size:11px;color:var(--text-mid);font-variant-numeric:tabular-nums;white-space:nowrap;min-width:130px;text-align:right}
.dwl-row-meta strong{color:var(--text);font-weight:600}
.dwl-row-meta .dwl-weeks{color:var(--text-light);margin-left:4px}
.dwl-row-meta .dwl-weeks.over{color:var(--red);font-weight:600}
.dwl-foot{margin-top:12px;padding-top:10px;border-top:1px solid var(--border-light);display:flex;justify-content:space-between;align-items:center;font-size:11px;color:var(--text-light)}
.dwl-foot-flagged{color:var(--red);font-weight:600}
.dwl-foot-flagged.zero{color:var(--text-light);font-weight:400}
.dwl-loading{color:var(--text-light);font-style:italic;text-align:center;padding:14px;font-size:12px}
.dwl-empty{color:var(--text-light);font-style:italic;text-align:center;padding:14px;font-size:12px}
.dwl-error{color:var(--red,var(--red));text-align:center;padding:14px;font-size:12px}

/* === Project page tabs (punch #6 — Notion-style top-tab nav) === */
.proj-tabs{display:flex;gap:2px;border-bottom:1px solid var(--border);margin-bottom:18px;overflow-x:auto;scrollbar-width:thin;padding-bottom:0;-webkit-overflow-scrolling:touch}
.proj-tab{background:transparent;border:0;padding:10px 16px;font:inherit;font-size:13px;font-weight:500;color:var(--text-mid);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;transition:color .12s,border-color .12s;font-family:inherit}
.proj-tab:hover{color:var(--text)}
.proj-tab.is-active{color:var(--njr-orange,#D65600);border-bottom-color:var(--njr-orange,#D65600);font-weight:600}
.proj-tab-panel{display:none}
.proj-tab-panel.is-active{display:block}
.proj-tab-panel .proj-card{margin-bottom:14px}
.proj-tab-panel .proj-card:last-child{margin-bottom:0}
.proj-tab-panel .proj-grid{display:grid;grid-template-columns:1fr 320px;gap:14px;align-items:start}
.proj-tab-panel .proj-grid .proj-main,.proj-tab-panel .proj-grid .proj-side{display:flex;flex-direction:column;gap:14px}
.proj-tab-panel .proj-grid .proj-main .proj-card,.proj-tab-panel .proj-grid .proj-side .proj-card{margin-bottom:0}
@media(max-width:900px){.proj-tab-panel .proj-grid{grid-template-columns:1fr}}
@media(max-width:640px){.proj-tab{padding:8px 12px;font-size:12px}}

/* === Project page Time tab — desktop time-entry form (punch #9 follow-up) === */
.ptl-form{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;align-items:end;margin-bottom:14px}
.ptl-form label{display:flex;flex-direction:column;gap:4px;font-size:11px;color:var(--text-light);font-weight:500}
.ptl-form input,.ptl-form select,.ptl-form textarea{padding:6px 8px;font:inherit;font-size:13px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;color:var(--text)}
.ptl-form input:focus,.ptl-form select:focus,.ptl-form textarea:focus{outline:none;border-color:var(--njr-orange,#D65600);box-shadow:0 0 0 2px rgba(214,86,0,.12)}
.ptl-form input[type="number"]{font-variant-numeric:tabular-nums;-moz-appearance:textfield}
.ptl-form input[type="number"]::-webkit-outer-spin-button,.ptl-form input[type="number"]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.ptl-form .ptl-fullrow{grid-column:1 / -1}
.ptl-form .ptl-ot-cell{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text-mid);padding-bottom:6px}
.ptl-form .ptl-ot-cell input{margin:0}
.ptl-submit-row{grid-column:1 / -1;display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.ptl-submit-status{font-size:11px;color:var(--text-light)}
.ptl-submit-status.ok{color:var(--green,#15803d)}
.ptl-submit-status.error{color:var(--red,var(--red))}
.ptl-entries-hdr{display:flex;align-items:baseline;justify-content:space-between;margin:18px 0 8px 0}
.ptl-entries-hdr h4{margin:0;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-mid)}
.ptl-totals{font-size:11px;color:var(--text-light);font-variant-numeric:tabular-nums}
.ptl-totals strong{color:var(--text);font-weight:600}
.ptl-entries{display:flex;flex-direction:column;gap:0;border:1px solid var(--border-light);border-radius:var(--radius-sm);overflow:hidden;background:#fff}
.ptl-entry{display:grid;grid-template-columns:88px 1fr auto auto auto;gap:10px;align-items:center;padding:7px 10px;border-bottom:1px solid var(--border-light);font-size:12px;color:var(--text)}
.ptl-entry:last-child{border-bottom:0}
.ptl-entry:hover{background:var(--cream)}
.ptl-entry-date{font-variant-numeric:tabular-nums;color:var(--text-mid);font-weight:500;white-space:nowrap}
.ptl-entry-task{color:var(--text);line-height:1.3}
.ptl-entry-task small{color:var(--text-light);display:block;font-size:11px}
.ptl-entry-hours{font-variant-numeric:tabular-nums;font-weight:600;text-align:right;color:var(--text);white-space:nowrap}
.ptl-entry-ot{font-size:10px;font-weight:700;padding:1px 5px;border-radius:100px;background:#FEF3C7;color:#92400E;letter-spacing:.04em;text-transform:uppercase}
.ptl-entry-person{font-size:11px;color:var(--text-light);font-style:italic;text-align:right;white-space:nowrap}
.ptl-entry-del{background:transparent;border:0;color:var(--text-light);cursor:pointer;font-size:14px;line-height:1;padding:2px 5px;border-radius:3px}
.ptl-entry-del:hover{background:#fee;color:var(--red)}
.ptl-entries-empty{padding:16px;text-align:center;color:var(--text-light);font-style:italic;font-size:12px;background:#fff;border:1px solid var(--border-light);border-radius:var(--radius-sm)}
.ptl-loading{color:var(--text-light);font-style:italic;text-align:center;padding:14px;font-size:12px}
.ptl-error{color:var(--red,var(--red));text-align:center;padding:14px;font-size:12px}
.ptl-needs-tasks{color:var(--text-light);font-style:italic;padding:16px;text-align:center;font-size:13px}
@media(max-width:720px){.ptl-form{grid-template-columns:1fr 1fr}.ptl-entry{grid-template-columns:80px 1fr auto auto}.ptl-entry-person{display:none}}
@media(max-width:480px){.ptl-form{grid-template-columns:1fr}}

/* === Settings page tabs — punch #6 (same visual as .proj-tabs) === */
.settings-tabs{display:flex;gap:2px;border-bottom:1px solid var(--border);margin-bottom:18px;overflow-x:auto;scrollbar-width:thin;padding-bottom:0;-webkit-overflow-scrolling:touch}
.settings-tab{background:transparent;border:0;padding:10px 16px;font:inherit;font-size:13px;font-weight:500;color:var(--text-mid);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;transition:color .12s,border-color .12s;font-family:inherit}
.settings-tab:hover{color:var(--text)}
.settings-tab.is-active{color:var(--njr-orange,#D65600);border-bottom-color:var(--njr-orange,#D65600);font-weight:600}
.settings-tab-panel{display:none}
.settings-tab-panel.is-active{display:block}
@media(max-width:640px){.settings-tab{padding:8px 12px;font-size:12px}}
@media(max-width:480px){
  .content{padding:14px 12px 40px}
  .page-hdr h1{font-size:18px}
  /* Estimate line: drop to 2-column on very narrow screens */
  .est-line{
    grid-template-columns:1fr 1fr;
    grid-template-areas:
      'cat del'
      'hb  ha'
      'rate rate'
      'tb  ta';
  }
  /* Expense row: hide delete-column padding tweaks */
  .est-exp-row{grid-template-columns:1fr 90px 32px;gap:6px}

  /* Reports rows: fixed 120–160px label columns crowd the bar at 360px width.
     Let the label flex and clamp the right column so the value bar gets room. */
  .funnel-row{grid-template-columns:minmax(80px,auto) 1fr minmax(60px,80px);gap:8px;font-size:12px}
  .revenue-row{grid-template-columns:minmax(70px,auto) 1fr minmax(60px,80px);gap:8px;font-size:12px}
  .sched-row{grid-template-columns:minmax(90px,auto) 1fr;gap:8px;font-size:12px}

  /* Modal row spacing is already 1fr from pass 1; tighten margins on small screens */
  .modal-row{margin-bottom:8px}
}

/* ── Client Portal toggle switch ─────────────────────────────────────────── */
.portal-toggle-sw {
  position: relative;
  width: 36px;
  height: 20px;
  border-radius: 999px;
  background: var(--text-light, #aaa);
  flex-shrink: 0;
  cursor: pointer;
  transition: background .2s;
}
.portal-toggle-sw::after {
  content: '';
  position: absolute;
  top: 3px;
  left: 3px;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background: #fff;
  transition: transform .2s;
}
.portal-toggle-sw.on {
  background: var(--green-dark, #15803d);
}
.portal-toggle-sw.on::after {
  transform: translateX(16px);
}
label:has(.portal-toggle-sw) { cursor: pointer; user-select: none; }

/* ============================================================
   Dashboard 1-3-10 view switcher + trend tiles (2026-06-09)
   ============================================================ */
.dash-switch { display: flex; gap: 2px; background: var(--cream-dark); border-radius: 100px; padding: 3px; }
.dash-switch-btn { border: none; background: transparent; padding: 6px 14px; border-radius: 100px; font-size: 12px; font-weight: 600; color: var(--text-mid); cursor: pointer; font-family: inherit; white-space: nowrap; }
.dash-switch-btn.active { background: var(--white); color: var(--njr-orange); box-shadow: var(--shadow-xs); }

.dash-banner { background: var(--white); border: 1px solid var(--border); border-left: 3px solid var(--njr-orange); border-radius: var(--radius); padding: 10px 16px; margin-bottom: 14px; display: flex; justify-content: space-between; align-items: center; gap: 10px; font-size: 14px; font-weight: 600; color: var(--text); box-shadow: var(--shadow-xs); }
.dash-banner.ok { border-left-color: var(--green); }
.dash-banner-sub { font-size: 12px; font-weight: 400; color: var(--text-light); }

.dash-trends { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-bottom: 20px; }
.dash-tile { background: var(--white); border: 1px solid var(--border-light); border-radius: var(--radius); padding: 12px 14px; box-shadow: var(--shadow-xs); }
.dash-tile-lbl { font-size: 10px; text-transform: uppercase; letter-spacing: .5px; color: var(--text-light); font-weight: 600; }
.dash-tile-val { font-size: 20px; font-weight: 700; color: var(--text); margin: 2px 0 6px; }
.dash-tile-delta { font-size: 11px; font-weight: 600; margin-left: 6px; }
.dash-tile-delta.good { color: var(--green); }
.dash-tile-delta.bad { color: var(--red); }
.dash-tile-delta.flat { color: var(--text-light); }
.dash-tile svg { display: block; width: 100%; height: 30px; }

.billing-card { background: var(--white); border: 1px solid var(--border-light); border-radius: var(--radius); box-shadow: var(--shadow-xs); margin-bottom: 20px; }
.billing-hdr { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 12px 16px; border-bottom: 1px solid var(--border-light); }
.billing-hdr h2 { font-size: 15px; margin: 0; }
.billing-hdr-sub { background: var(--cream); }
.billing-row { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 8px 16px; border-bottom: 1px solid var(--border-light); font-size: 13px; }
.billing-row:last-child { border-bottom: none; }
.billing-row.clickable { cursor: pointer; }
.billing-row.clickable:hover { background: var(--cream); }
.billing-amt { font-weight: 700; min-width: 70px; text-align: right; }
.billing-meta { color: var(--text-light); font-size: 12px; }
.billing-overdue { color: var(--red); font-weight: 700; }

@media (max-width: 640px) {
  .dash-trends { grid-template-columns: 1fr; }
  .dash-switch { width: 100%; }
  .dash-switch-btn { flex: 1; }
  .dash-banner { flex-direction: column; align-items: flex-start; gap: 4px; }
}

/* Board/Table toggle on the Proposals & Projects tabs (pipelines moved off
   the dashboard 2026-06-09). Mirrors the dashboard view switcher. */
.view-toggle { display: flex; gap: 2px; background: var(--cream-dark); border-radius: 100px; padding: 3px; }
.view-toggle-btn { border: none; background: transparent; padding: 5px 14px; border-radius: 100px; font-size: 12px; font-weight: 600; color: var(--text-mid); cursor: pointer; font-family: inherit; white-space: nowrap; }
.view-toggle-btn.active { background: var(--white); color: var(--njr-orange); box-shadow: var(--shadow-xs); }

/* Calendar action bar — the calendar's month nav + actions, relocated into
   the Time hub's Calendar sub-tab (Workload/Calendar merged into Time 2026-06-09). */
.cal-actionbar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 12px; }
.cal-subtitle-cap { font-size: 12px; color: var(--text-light); margin-right: auto; }

/* proj-overflow menu */
.proj-overflow{position:relative;display:inline-flex}
.proj-overflow-menu{position:absolute;top:calc(100% + 4px);right:0;background:#fff;border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);min-width:160px;z-index:200;padding:4px 0}
.proj-overflow-item{display:block;width:100%;text-align:left;padding:8px 14px;font-size:13px;font-weight:500;background:none;border:none;cursor:pointer;color:var(--text);font-family:inherit;white-space:nowrap;line-height:1.4}
.proj-overflow-item:hover{background:var(--bg-secondary)}
.proj-overflow-item.danger{color:var(--red)}
.proj-overflow-item.danger:hover{background:#fef2f2}
.proj-overflow-sep{height:1px;background:var(--border);margin:4px 0}

/* Top-nav "More" dropdown (less-used views collapsed) */
.nav-more{position:relative;display:inline-flex}
.nav-more-menu{position:absolute;top:calc(100% + 8px);right:0;background:var(--njr-dark-mid);border:1px solid rgba(255,255,255,.12);border-radius:var(--radius-sm);box-shadow:0 8px 24px rgba(0,0,0,.35);min-width:150px;padding:4px;z-index:200;display:flex;flex-direction:column;gap:2px}
.nav-more-menu .nav-tab{display:block;width:100%;text-align:left}
.nav-more-menu[hidden]{display:none}
@media(max-width:768px){
  /* Drawer lists every view flat — dissolve the More wrapper + menu. */
  .nav-more{display:contents}
  .nav-more-btn{display:none}
  .nav-more-menu,.nav-more-menu[hidden]{display:contents}
}

/* ---- Close ratio card ---- */
.close-ratio-card {
  background: var(--card-bg, #fff);
  border: 1px solid var(--border, #D8D3CA);
  border-radius: 8px;
  padding: 16px 20px;
  margin-bottom: 16px;
}
.cr-hdr {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 12px;
}
.cr-hdr h2 {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-secondary, #6B6B6B);
  text-transform: uppercase;
  letter-spacing: .05em;
  margin: 0;
}
.cr-edit-btn {
  font-size: 12px;
  color: var(--njr-orange, #D65600);
  background: none;
  border: 1px solid var(--njr-orange, #D65600);
  border-radius: 4px;
  padding: 2px 8px;
  cursor: pointer;
}
.cr-edit-btn:hover { background: rgba(214,86,0,.06); }
.cr-metrics {
  display: grid;
  grid-template-columns: 1fr 1fr auto;
  gap: 20px;
  align-items: start;
}
@media (max-width: 640px) { .cr-metrics { grid-template-columns: 1fr 1fr; } .cr-meta { grid-column: 1/-1; border-left: none; padding-left: 0; border-top: 1px solid var(--border, #D8D3CA); padding-top: 10px; } }
.cr-val {
  font-size: 28px;
  font-weight: 700;
  color: var(--text, #1A1A1A);
  line-height: 1;
}
.cr-lbl {
  font-size: 12px;
  color: var(--text-secondary, #6B6B6B);
  margin-top: 4px;
  line-height: 1.4;
}
.cr-lbl small { font-size: 11px; }
.cr-gauge {
  height: 5px;
  background: var(--border, #D8D3CA);
  border-radius: 3px;
  margin-top: 8px;
  overflow: hidden;
}
.cr-gauge-fill { height: 100%; border-radius: 3px; transition: width .3s; }
.cr-gauge-fill.good { background: #16a34a; }
.cr-gauge-fill.bad  { background: #dc2626; }
.cr-vs { font-size: 11px; margin-top: 3px; display: block; }
.cr-vs.good { color: #16a34a; }
.cr-vs.bad  { color: #dc2626; }
.cr-meta {
  font-size: 12px;
  color: var(--text-secondary, #6B6B6B);
  border-left: 1px solid var(--border, #D8D3CA);
  padding-left: 16px;
  line-height: 1.7;
}
.cr-targets-form {
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px solid var(--border, #D8D3CA);
  display: flex;
  gap: 16px;
  align-items: flex-end;
  flex-wrap: wrap;
}
.cr-targets-form label {
  font-size: 12px;
  color: var(--text-secondary, #6B6B6B);
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.cr-targets-form input {
  width: 110px;
  padding: 4px 8px;
  border: 1px solid var(--border, #D8D3CA);
  border-radius: 4px;
  font-size: 13px;
}
.cr-form-btns { display: flex; gap: 8px; }
.cr-form-btns button { padding: 4px 12px; border-radius: 4px; font-size: 12px; cursor: pointer; }
#cr-save-targets { background: var(--njr-orange, #D65600); color: #fff; border: none; }
#cr-save-targets:hover { background: #B84A00; }
#cr-cancel-targets { background: none; border: 1px solid var(--border, #D8D3CA); color: var(--text-secondary, #6B6B6B); }
#cr-cancel-targets:hover { background: var(--hover-bg, #F5F5F5); }

/* ── Send modal polish: Cc toggle + collapsible placeholder help ───────── */
.send-cc-toggle{flex-shrink:0;background:transparent;border:1px solid var(--border-light);color:var(--njr-orange);font-family:inherit;font-size:11px;font-weight:600;cursor:pointer;padding:5px 9px;border-radius:var(--radius-sm);white-space:nowrap;transition:all .12s}
.send-cc-toggle:hover{background:var(--njr-orange-pale);border-color:var(--njr-orange-border)}
.send-help-details{flex-shrink:0;border:1px solid var(--border-light);border-radius:var(--radius-sm);background:var(--cream);overflow:hidden}
.send-help-details summary{cursor:pointer;padding:7px 11px;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-light);list-style:none;display:flex;align-items:center;gap:7px;user-select:none}
.send-help-details summary::-webkit-details-marker{display:none}
.send-help-details summary::before{content:'\203A';font-size:14px;line-height:1;color:var(--text-light);transition:transform .15s}
.send-help-details[open] summary::before{transform:rotate(90deg)}
.send-help-details summary:hover{background:var(--cream-dark);color:var(--text-mid)}
.send-help-body{padding:0 11px 10px;font-size:11px;color:var(--text-light);line-height:1.95}
.send-help-body code{background:var(--white);padding:2px 5px;border-radius:3px;font-size:10px;color:var(--text-mid);border:1px solid var(--border-light)}

/* ── Communications — Gmail threading (punch #10c) ─────────────────────── */
.comm-thread{border:1px solid var(--border-light);border-radius:var(--radius-sm);margin:10px 0;overflow:hidden;background:#fff}
.comm-thread-hdr{display:flex;align-items:center;gap:8px;padding:8px 11px;background:var(--cream);border-bottom:1px solid var(--border-light)}
.comm-thread-subject{font-size:13px;font-weight:600;color:var(--text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.comm-thread-count{font-size:10px;font-weight:700;color:var(--text-light);background:var(--cream-dark);padding:1px 8px;border-radius:100px;white-space:nowrap}
.comm-thread-body{padding:0 11px}
.comm-thread-body .comm-item{padding:9px 0}
.comm-who{font-size:11px;color:var(--text-mid);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:170px}
.comm-reply-btn{background:transparent;border:1px solid var(--border);color:var(--njr-orange);font-family:inherit;font-size:10px;font-weight:600;cursor:pointer;padding:2px 9px;border-radius:var(--radius-sm);white-space:nowrap}
.comm-reply-btn:hover{background:var(--njr-orange-pale);border-color:var(--njr-orange-border)}

/* ===== Calendar view toggle (Day / Week / Month) + week & day layouts ===== */
.cal-viewseg{display:inline-flex;border:1px solid var(--border);border-radius:100px;overflow:hidden;background:#fff}
.cal-viewbtn{background:transparent;border:none;font-family:inherit;font-size:12px;font-weight:600;color:var(--text-mid);padding:5px 14px;cursor:pointer;transition:background .12s,color .12s}
.cal-viewbtn:not(:last-child){border-right:1px solid var(--border)}
.cal-viewbtn:hover{background:var(--cream)}
.cal-viewbtn.is-active{background:var(--njr-orange);color:#fff}
/* Week view — one tall row of 7 day columns; let a busy day scroll within its cell */
.cal-view-week .cal-grid{grid-auto-rows:minmax(440px,auto)}
.cal-view-week .cal-cell{min-height:440px}
.cal-view-week .cal-events{overflow:auto}
/* Day view — single full-width column, no weekday header row */
.cal-view-day .cal-dow-row{display:none}
.cal-view-day .cal-grid{grid-template-columns:minmax(0,1fr)}
.cal-view-day .cal-cell{min-height:60vh;border-right:none}
.cal-view-day .cal-daynum{font-size:14px}
.cal-view-day .cal-evt{font-size:13px;padding:6px 10px}

/* ── Send modal rich-text composer (bold / bullets / links) ────────────── */
.send-body-editor{width:100%;min-height:200px;max-height:340px;overflow-y:auto;padding:11px 13px;font-size:13px;border:1px solid var(--border);border-top:none;border-radius:0 0 var(--radius-sm) var(--radius-sm);color:var(--text);background:#fff;line-height:1.55;font-family:'Source Sans 3','Helvetica Neue',Arial,sans-serif}
.send-body-editor:focus{outline:none}
.send-body-editor ul{margin:6px 0;padding-left:22px}
.send-body-editor a{color:var(--njr-orange)}
.send-body-editor:empty:before{content:attr(data-placeholder);color:var(--text-light)}
.send-rt-toolbar{display:flex;gap:4px;padding:5px 6px;border:1px solid var(--border);border-bottom:none;border-radius:var(--radius-sm) var(--radius-sm) 0 0;background:var(--cream)}
.send-rt-btn{background:#fff;border:1px solid var(--border-light);color:var(--text-mid);font-family:inherit;font-size:11px;font-weight:600;cursor:pointer;padding:3px 9px;border-radius:var(--radius-sm);line-height:1.4}
.send-rt-btn:hover{background:var(--njr-orange-pale);border-color:var(--njr-orange-border);color:var(--njr-orange)}
.send-rt-linkform{display:flex;gap:6px;align-items:center;flex-wrap:wrap;padding:8px;border:1px solid var(--njr-orange-border);border-bottom:none;background:var(--njr-orange-pale)}
.send-rt-linkform input[type=text]{flex:1;min-width:120px;padding:5px 8px;font-size:12px;border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;color:var(--text);background:#fff}
.send-rt-asbtn{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--text-mid);white-space:nowrap;cursor:pointer}

/* ===== Calendar intake review queue (assistant → confirm) ===== */
#cal-intake-strip{margin:8px 0 10px}
.cal-intake-card{background:#fff;border:1px solid var(--njr-orange-border);border-left:4px solid var(--njr-orange);border-radius:var(--radius);box-shadow:var(--shadow-xs);padding:10px 14px}
.cal-intake-head{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.cal-intake-title{font-weight:700;color:var(--text)}
.cal-intake-count{background:var(--njr-orange);color:#fff;font-size:11px;font-weight:700;padding:1px 8px;border-radius:100px}
.cal-intake-link{background:transparent;border:none;color:var(--njr-orange);font-family:inherit;font-size:12px;font-weight:600;cursor:pointer;margin-left:auto;text-decoration:underline}
.cal-intake-list{display:flex;flex-direction:column;gap:8px}
.cal-intake-row{display:flex;gap:12px;align-items:flex-start;justify-content:space-between;padding:8px;border:1px solid var(--border-light);border-radius:var(--radius-sm);background:var(--cream)}
.cal-intake-main{min-width:0;flex:1}
.cal-intake-who{font-size:13px;color:var(--text)}
.cal-intake-when{font-size:12px;color:var(--text-mid);margin-top:2px}
.cal-intake-notes{font-size:11px;color:var(--text-light);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:40ch}
.cal-intake-nomatch{color:var(--red);font-size:11px;font-weight:600}
.cal-intake-warn{display:inline-block;font-size:11px;margin-top:4px;margin-right:6px;padding:1px 7px;border-radius:100px;background:var(--amber-pale);color:var(--amber);border:1px solid var(--amber-border)}
.cal-intake-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;flex-shrink:0}
.cal-intake-actions .cal-intake-date,.cal-intake-actions .cal-intake-job{font-family:inherit;font-size:12px;padding:3px 6px;border:1px solid var(--border);border-radius:var(--radius-sm)}
.cal-intake-job{width:9ch}
.cal-intake-notify{font-size:11px;color:var(--text-mid);display:flex;align-items:center;gap:3px;cursor:pointer}
.cal-intake-empty{font-size:12px;color:var(--text-light);padding:2px}
.cal-intake-setup{margin:6px 0 2px}
.cal-intake-setup-inner{font-size:12px;color:var(--text-mid);display:flex;flex-direction:column;gap:4px}
.cal-intake-code{display:block;background:var(--njr-dark);color:#f5f5f5;padding:6px 9px;border-radius:var(--radius-sm);font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11px;word-break:break-all;white-space:pre-wrap}
.cal-intake-pre{white-space:pre;overflow-x:auto}
.cal-intake-flash{outline:2px solid var(--njr-orange);outline-offset:2px;transition:outline .2s}
/* dashed "ghost" block on the day a pending item would land */
.cal-evt-intake{background:repeating-linear-gradient(45deg,var(--njr-orange-pale),var(--njr-orange-pale) 6px,#fff 6px,#fff 12px);color:#7c2d12;border:1px dashed var(--njr-orange);font-style:italic}
.cal-evt-intake:hover{background:var(--njr-orange-pale)}
.cal-evt-intake .cal-evt-pill{background:var(--njr-orange);color:#fff;font-size:9px;font-weight:700;padding:1px 5px;border-radius:8px;flex-shrink:0}

/* ===== Project Effort card (field + office: Budget / Scheduled / Actual) ===== */
.effort-grid{width:100%;border-collapse:collapse;font-size:13px;margin-top:2px}
.effort-grid th,.effort-grid td{padding:6px 8px;text-align:right;border-bottom:1px solid var(--border-light)}
.effort-grid thead th{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--text-light);font-weight:600;border-bottom:1px solid var(--border)}
.effort-grid tbody th{text-align:left;font-weight:600;color:var(--text-mid)}
.effort-grid .eff-tot{font-weight:700;color:var(--text)}
.effort-grid .eff-actual th{color:var(--text)}
.effort-grid td.eff-over{color:var(--red);font-weight:700}
.effort-grid td.eff-under{color:var(--green-dark)}
.effort-grid .eff-loading{color:var(--text-light);font-style:italic;text-align:center}
.eff-note{font-size:10px;color:var(--text-light);margin-top:6px;line-height:1.35}
