/* ============================================================
   Modules — Meetings, Decision Log, Approval Engine
   ============================================================ */

/* ---------- Meetings ---------- */
.meet-card{ background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg); box-shadow:var(--shadow); margin-bottom:13px; overflow:hidden; }
.meet-h{ display:flex; align-items:flex-start; gap:14px; padding:16px; cursor:pointer; }
.meet-cal{ width:50px; height:54px; border-radius:11px; background:var(--accent-tint); border:1px solid var(--accent-soft); display:grid; place-items:center; text-align:center; flex:none; }
.meet-cal b{ font-family:var(--num); font-variant-numeric:tabular-nums; font-size:20px; font-weight:700; color:var(--accent); line-height:1; }
.meet-cal span{ font-size:10px; color:var(--accent); font-weight:600; }
.meet-info{ flex:1; min-width:0; }
.meet-title{ font-size:15.5px; font-weight:600; }
.meet-meta{ font-size:12.5px; color:var(--muted); margin-top:4px; display:flex; flex-wrap:wrap; gap:5px 10px; align-items:center; }
.meet-tags{ display:flex; align-items:center; gap:8px; margin-top:9px; flex-wrap:wrap; }
.meet-chev{ color:var(--faint); align-self:center; transition:transform .2s; }
.meet-card.open .meet-chev{ transform:rotate(90deg); }
.meet-body{ border-top:1px solid var(--line-soft); padding:16px; display:grid; gap:18px; }
@media (min-width:1000px){ .meet-body{ grid-template-columns:1fr 1fr; } .meet-body .full{ grid-column:1 / -1; } }
.meet-sec h4{ font-size:11.5px; font-weight:700; letter-spacing:.05em; text-transform:uppercase; color:var(--muted); margin-bottom:9px; }
.meet-list{ display:flex; flex-direction:column; gap:7px; }
.meet-list li{ list-style:none; font-size:13.5px; display:flex; gap:9px; align-items:flex-start; }
.meet-list li .bullet{ width:6px; height:6px; border-radius:50%; background:var(--accent); margin-top:7px; flex:none; }
.attendee-row{ display:flex; flex-wrap:wrap; gap:7px; }
.attendee{ display:inline-flex; align-items:center; gap:7px; font-size:12.5px; background:var(--raised); border:1px solid var(--line); border-radius:99px; padding:4px 11px 4px 4px; }
.attendee .avatar{ width:22px; height:22px; font-size:10px; }
.action-item{ display:flex; align-items:center; gap:11px; padding:11px 12px; background:var(--raised); border:1px solid var(--line); border-radius:10px; }
.action-item .ai-task{ font-size:13.5px; font-weight:500; flex:1; }
.action-item .ai-meta{ font-size:11.5px; color:var(--muted); text-align:right; flex:none; }
.action-item .ai-check{ width:20px; height:20px; border-radius:6px; border:1.5px solid var(--line-strong); flex:none; }

/* ---------- Decision Log (vertical timeline) ---------- */
.dlog{ position:relative; padding-left:30px; }
.dlog::before{ content:""; position:absolute; left:9px; top:6px; bottom:6px; width:2px; background:var(--line); }
.dlog-item{ position:relative; margin-bottom:16px; }
.dlog-item::before{ content:""; position:absolute; left:-26px; top:6px; width:14px; height:14px; border-radius:50%;
  background:var(--surface); border:3px solid var(--accent); box-shadow:0 0 0 3px var(--bg); }
.dlog-item.exec::before{ border-color:var(--info); }
.dlog-card{ background:var(--surface); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); padding:15px 16px; }
.dlog-top{ display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; }
.dlog-date{ font-size:12px; font-weight:700; color:var(--ink2); }
.dlog-change{ font-size:15px; font-weight:600; margin-top:9px; line-height:1.35; }
.dlog-delta{ display:inline-flex; align-items:center; gap:9px; margin-top:11px; font-size:12.5px; flex-wrap:wrap; }
.delta-from{ color:var(--muted); text-decoration:line-through; background:var(--raised); padding:3px 10px; border-radius:7px; }
.delta-to{ color:var(--accent); font-weight:600; background:var(--accent-soft); padding:3px 10px; border-radius:7px; }
.delta-arrow{ color:var(--faint); }
.dlog-reason{ font-size:13px; color:var(--ink2); margin-top:11px; line-height:1.5; }
.dlog-foot{ display:flex; align-items:center; gap:14px; margin-top:12px; padding-top:11px; border-top:1px solid var(--line-soft); flex-wrap:wrap; }
.dlog-foot .fitem{ font-size:12px; color:var(--muted); display:flex; align-items:center; gap:7px; }
.dlog-foot .fitem b{ color:var(--ink2); font-weight:600; }

/* ---------- Approval Engine ---------- */
.flow-strip{ display:flex; align-items:center; gap:0; overflow-x:auto; padding:6px 0 14px; }
.flow-step{ display:flex; align-items:center; gap:10px; flex:none; }
.flow-node{ display:flex; align-items:center; gap:9px; padding:9px 14px; border-radius:99px; background:var(--surface); border:1px solid var(--line-strong); font-size:13px; font-weight:600; color:var(--ink2); }
.flow-node .fn-no{ width:20px; height:20px; border-radius:50%; background:var(--raised2); color:var(--muted); display:grid; place-items:center; font-size:11px; font-weight:700; }
.flow-arrow{ width:26px; height:2px; background:var(--line-strong); flex:none; }
.flow-node.active{ background:var(--accent); border-color:var(--accent); color:var(--accent-fg); }
.flow-node.active .fn-no{ background:rgba(255,255,255,.25); color:var(--accent-fg); }

.appr-card{ background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg); box-shadow:var(--shadow); margin-bottom:13px; overflow:hidden; }
.appr-card.prio-high{ border-left:3px solid var(--danger); }
.appr-h{ padding:16px; display:flex; flex-direction:column; gap:12px; }
.appr-top{ display:flex; align-items:flex-start; gap:12px; }
.appr-type{ width:42px; height:42px; border-radius:11px; display:grid; place-items:center; flex:none; font-size:10px; font-weight:700; }
.appr-type.Budget{ background:var(--ok-bg); color:var(--ok); } .appr-type.Vendor{ background:var(--info-bg); color:var(--info); }
.appr-type.Purchase{ background:var(--warn-bg); color:var(--warn); } .appr-type.Contract{ background:var(--danger-bg); color:var(--danger); }
.appr-title{ font-size:15px; font-weight:600; line-height:1.3; }
.appr-meta{ font-size:12.5px; color:var(--muted); margin-top:4px; }
.appr-amt{ margin-left:auto; text-align:right; flex:none; }
.appr-amt .a{ font-family:var(--num); font-variant-numeric:tabular-nums; font-size:19px; font-weight:700; color:var(--accent); }
.appr-amt .l{ font-size:11px; color:var(--faint); }
/* mini stepper */
.mini-flow{ display:flex; align-items:center; gap:6px; }
.mini-node{ flex:1; height:5px; border-radius:99px; background:var(--line-strong); }
.mini-node.done{ background:var(--accent); }
.mini-node.curr{ background:var(--warn); }
.appr-stage-lbl{ font-size:11.5px; color:var(--muted); margin-top:8px; }
.appr-stage-lbl b{ color:var(--warn); font-weight:600; }
.appr-acts{ display:flex; gap:9px; padding:0 16px 16px; }
.appr-acts .btn{ flex:1; }
.appr-trail{ border-top:1px solid var(--line-soft); padding:14px 16px; background:var(--raised); }
.trail-step{ display:flex; align-items:center; gap:11px; padding:5px 0; font-size:12.5px; }
.trail-step .ts-ic{ width:20px; height:20px; border-radius:50%; display:grid; place-items:center; flex:none; }
.trail-step .ts-ic.done{ background:var(--accent); color:var(--accent-fg); }
.trail-step .ts-ic.wait{ background:var(--warn-bg); color:var(--warn); border:1.5px dashed var(--warn); }
.trail-step .ts-by{ color:var(--ink2); font-weight:600; }
.trail-step .ts-when{ margin-left:auto; color:var(--faint); }

.hist-row{ display:flex; align-items:center; gap:13px; padding:13px 16px; border-bottom:1px solid var(--line-soft); }
.hist-row:last-child{ border-bottom:0; }
.hist-ic{ width:30px; height:30px; border-radius:8px; display:grid; place-items:center; flex:none; }
.hist-ic.approved{ background:var(--ok-bg); color:var(--ok); } .hist-ic.rejected{ background:var(--danger-bg); color:var(--danger); }
.hist-row .hn{ font-size:13.5px; font-weight:600; } .hist-row .hm{ font-size:11.5px; color:var(--muted); margin-top:2px; }
.hist-row .hr{ margin-left:auto; text-align:right; font-size:12px; }

/* toast */
.toast{ position:fixed; bottom:84px; left:50%; transform:translateX(-50%) translateY(20px); opacity:0;
  background:var(--toast-bg); color:var(--toast-fg); font-size:13.5px; font-weight:500; padding:12px 20px; border-radius:12px;
  box-shadow:var(--shadow-lg); z-index:90; transition:opacity .25s, transform .25s; pointer-events:none; display:flex; align-items:center; gap:9px; }
.toast.show{ opacity:1; transform:translateX(-50%) translateY(0); }
@media (min-width:1000px){ .toast{ bottom:32px; } }

/* ============================================================
   Document Hub
   ============================================================ */
.dh-layout{ }
.dh-folders{ display:flex; gap:9px; overflow-x:auto; padding:2px 2px 4px; -webkit-overflow-scrolling:touch; }
.dh-folders::-webkit-scrollbar{ height:0; }
.folder-chip{ flex:none; display:flex; align-items:center; gap:9px; padding:10px 14px; border-radius:11px;
  border:1px solid var(--line-strong); background:var(--surface); cursor:pointer; min-height:46px; }
.folder-chip:hover{ background:var(--raised); }
.folder-chip.on{ background:var(--accent); border-color:var(--accent); color:var(--accent-fg); }
.folder-chip .fc-ic{ color:var(--muted); display:grid; place-items:center; }
.folder-chip.on .fc-ic{ color:var(--accent-fg); }
.folder-chip .fc-n{ font-size:14px; font-weight:600; }
.folder-chip .fc-ct{ font-size:11.5px; font-weight:700; color:var(--muted); background:var(--raised2); padding:1px 8px; border-radius:99px; }
.folder-chip.on .fc-ct{ background:rgba(255,255,255,.22); color:var(--accent-fg); }

.doc-grid{ display:grid; grid-template-columns:1fr; gap:11px; }
@media (min-width:680px){ .doc-grid{ grid-template-columns:1fr 1fr; } }
@media (min-width:1000px){ .doc-grid{ grid-template-columns:repeat(3,1fr); } }
.doc-card{ background:var(--surface); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow);
  padding:16px; display:flex; flex-direction:column; gap:0; cursor:pointer; transition:border-color .15s, box-shadow .15s; }
.doc-card:hover{ border-color:var(--line-strong); box-shadow:var(--shadow-lg); }
.doc-card .dc-top{ display:flex; align-items:flex-start; gap:12px; }
.doc-card .dc-thumb{ width:46px; height:54px; border-radius:9px; background:var(--raised); border:1px solid var(--line);
  display:grid; place-items:center; flex:none; font-size:10px; font-weight:800; letter-spacing:.02em; }
.dc-thumb.boq{ color:var(--ok); background:var(--ok-bg); } .dc-thumb.quotation{ color:var(--info); background:var(--info-bg); }
.dc-thumb.contract{ color:var(--danger); background:var(--danger-bg); } .dc-thumb.drawing{ color:var(--warn); background:var(--warn-bg); }
.dc-thumb.proposal{ color:var(--accent); background:var(--accent-soft); } .dc-thumb.minutes{ color:var(--neutral); background:var(--neutral-bg); }
.doc-card .dc-name{ font-size:14.5px; font-weight:600; line-height:1.35; word-break:break-word; }
.doc-card .dc-proj{ font-size:12px; color:var(--muted); margin-top:3px; }
.doc-card .dc-star{ margin-left:auto; color:var(--faint); flex:none; }
.doc-card .dc-star.on{ color:var(--warn); }
.doc-card .dc-meta{ display:flex; align-items:center; gap:10px; margin-top:13px; padding-top:13px; border-top:1px solid var(--line-soft); font-size:12px; color:var(--muted); }
.doc-card .dc-ver{ font-size:11px; font-weight:700; color:var(--muted); background:var(--raised2); padding:2px 8px; border-radius:6px; }
.doc-card .dc-tags{ display:flex; gap:6px; flex-wrap:wrap; margin-top:11px; }
.doc-tag{ font-size:11px; font-weight:600; color:var(--ink2); background:var(--raised); border:1px solid var(--line); padding:2px 9px; border-radius:99px; }

/* ============================================================
   Reports
   ============================================================ */
.rep-kpis{ display:grid; grid-template-columns:repeat(2,1fr); gap:11px; }
@media (min-width:680px){ .rep-kpis{ grid-template-columns:repeat(4,1fr); } }
.rep-kpi{ background:var(--surface); border:1px solid var(--line); border-radius:var(--r); padding:15px 16px; box-shadow:var(--shadow); }
.rep-kpi .rk-l{ font-size:12.5px; color:var(--muted); display:flex; align-items:center; gap:7px; }
.rep-kpi .rk-v{ font-family:var(--num); font-variant-numeric:tabular-nums; font-size:28px; font-weight:700; margin-top:9px; line-height:1; letter-spacing:-.01em; }
.rep-kpi .rk-s{ font-size:12px; margin-top:7px; display:flex; align-items:center; gap:5px; }
.rep-kpi .rk-s.up{ color:var(--ok); } .rep-kpi .rk-s.down{ color:var(--danger); } .rep-kpi .rk-s svg{ width:14px; height:14px; }

.rep-cards{ display:grid; grid-template-columns:1fr; gap:18px; align-items:start; }
@media (min-width:1000px){ .rep-cards{ grid-template-columns:1.3fr 1fr; } }

.panel{ background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg); box-shadow:var(--shadow); overflow:hidden; }
.panel-h{ display:flex; align-items:center; justify-content:space-between; padding:16px 18px 12px; }
.panel-h h3{ font-family:var(--serif); font-size:17px; font-weight:600; }
.panel-b{ padding:6px 18px 18px; }

/* sparkline / trend */
.trend-chart{ display:flex; align-items:flex-end; gap:8px; height:120px; padding:10px 0 0; }
.trend-col{ flex:1; display:flex; flex-direction:column; align-items:center; gap:7px; height:100%; justify-content:flex-end; }
.trend-bar{ width:100%; max-width:34px; border-radius:7px 7px 0 0; background:var(--accent-soft); position:relative; }
.trend-bar > i{ position:absolute; left:0; right:0; bottom:0; border-radius:7px 7px 0 0; background:var(--accent); }
.trend-x{ font-size:10.5px; color:var(--faint); }
.trend-v{ font-size:11px; font-weight:700; color:var(--ink2); }

/* budget bars */
.budget-row{ padding:11px 0; border-bottom:1px solid var(--line-soft); }
.budget-row:last-child{ border-bottom:0; }
.budget-row .br-top{ display:flex; align-items:baseline; justify-content:space-between; gap:10px; margin-bottom:7px; }
.budget-row .br-n{ font-size:13.5px; font-weight:600; }
.budget-row .br-v{ font-size:12.5px; color:var(--muted); }
.budget-row .br-v b{ color:var(--ink2); font-weight:600; }
.budget-track{ height:9px; border-radius:99px; background:var(--raised2); overflow:hidden; position:relative; }
.budget-track > i{ display:block; height:100%; border-radius:99px; background:var(--accent); }

/* delay rows */
.delay-row{ display:flex; align-items:center; gap:13px; padding:13px 0; border-bottom:1px solid var(--line-soft); }
.delay-row:last-child{ border-bottom:0; }
.delay-badge{ width:54px; height:54px; border-radius:13px; display:grid; place-items:center; flex:none; text-align:center; }
.delay-badge.danger{ background:var(--danger-bg); color:var(--danger); } .delay-badge.warn{ background:var(--warn-bg); color:var(--warn); }
.delay-badge b{ font-family:var(--num); font-variant-numeric:tabular-nums; font-size:22px; font-weight:700; line-height:1; }
.delay-badge span{ font-size:9.5px; font-weight:600; }
.delay-row .dl-n{ font-size:14px; font-weight:600; }
.delay-row .dl-r{ font-size:12.5px; color:var(--muted); margin-top:3px; }

/* vendor performance */
.vperf-row{ display:flex; align-items:center; gap:13px; padding:12px 0; border-bottom:1px solid var(--line-soft); }
.vperf-row:last-child{ border-bottom:0; }
.vperf-row .vp-n{ font-size:13.5px; font-weight:600; flex:none; width:150px; }
.vperf-track{ flex:1; height:8px; border-radius:99px; background:var(--raised2); overflow:hidden; }
.vperf-track > i{ display:block; height:100%; border-radius:99px; }
.vperf-row .vp-s{ font-size:13px; font-weight:700; width:38px; text-align:right; flex:none; }

/* report template cards */
.tmpl-grid{ display:grid; grid-template-columns:1fr; gap:11px; }
@media (min-width:680px){ .tmpl-grid{ grid-template-columns:1fr 1fr; } }
.tmpl-card{ background:var(--surface); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); padding:16px; display:flex; gap:13px; align-items:flex-start; }
.tmpl-ic{ width:44px; height:44px; border-radius:12px; display:grid; place-items:center; flex:none; }
.tmpl-ic.info{ background:var(--info-bg); color:var(--info); } .tmpl-ic.accent{ background:var(--accent-soft); color:var(--accent); }
.tmpl-ic.ok{ background:var(--ok-bg); color:var(--ok); } .tmpl-ic.warn{ background:var(--warn-bg); color:var(--warn); }
.tmpl-ic.danger{ background:var(--danger-bg); color:var(--danger); } .tmpl-ic.neutral{ background:var(--neutral-bg); color:var(--neutral); }
.tmpl-card .tc-n{ font-size:14.5px; font-weight:600; }
.tmpl-card .tc-d{ font-size:12.5px; color:var(--muted); margin-top:3px; line-height:1.45; }
.tmpl-card .tc-s{ font-size:11.5px; color:var(--faint); margin-top:9px; display:flex; align-items:center; gap:6px; }
.tmpl-card .tc-s svg{ width:13px; height:13px; }
.tmpl-card .tc-go{ margin-left:auto; align-self:center; color:var(--faint); flex:none; }

/* ---------- Per-project LINE summary ---------- */
.linesum-tools{ display:flex; align-items:center; gap:9px; flex-wrap:wrap; margin-bottom:13px; }
.linesum-tools .spacer{ flex:1; }
.line-select{ font:inherit; font-size:14px; font-weight:600; color:var(--ink); background:var(--surface);
  border:1px solid var(--line-strong); border-radius:10px; padding:0 12px; min-height:42px; flex:1 1 220px; max-width:380px; }
.line-select:focus{ outline:none; border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-tint); }
.linebox{ width:100%; min-height:330px; resize:vertical; border:1px dashed var(--line-strong); border-radius:12px;
  background:var(--bg); color:var(--ink); font-family:var(--sans); font-size:14.5px; line-height:1.75;
  padding:16px 18px; outline:none; white-space:pre-wrap; -webkit-text-size-adjust:100%; }
.linebox:focus{ border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-tint); }
.linesum-foot{ font-size:12.5px; color:var(--muted); margin-top:11px; display:flex; align-items:center; gap:8px; }
.linesum-foot svg{ width:15px; height:15px; color:var(--accent); flex:none; }
