/* Tangible portal and admin: one system (18 Oct 2026, ux4 comps).
   Everything here is scoped to html.v2, which index.html and admin.html set when PORTAL_CONFIG.SHELL allows it.
   With the switch off, or on pay.html (which never loads this file), the old look is untouched.
   The deliverable viewer and Tangible Studio keep their frame: rules that move the frame skip .portal.viewer. */

/* ---------- tokens ---------- */
html.v2{
  --text:#201E1D; --text-2:#5C5753; --text-3:#736D68; --text-4:#A29C97;
  --ground:#F4F3F2; --surface:#FFFFFF; --sunk:#FAF9F8; --hover:rgba(32,30,29,.04); --sel:rgba(32,30,29,.055);
  --line:#E7E4E1; --line-2:#D6D2CE; --field-line:#948E89;
  --brand-tint:#F2F8F4; --brand-line:#D5E8DC;
  --you:#8A4F0B; --you-bg:#FBF0E1; --you-dot:#D08A2E;
  --tang:#2A5F98; --tang-bg:#EAF1F9; --tang-dot:#4A86C5;
  --done:#17663F; --done-bg:#E7F4EB; --done-dot:#3FBB63;
  --gone:#5C5753; --gone-bg:#F0EEEC; --gone-dot:#A8A29D;
  --neg:#A2531B;
  --sh-pop:0 1px 2px rgba(32,30,29,.06),0 12px 32px rgba(32,30,29,.12);
  --top-h:64px; --rail-w:232px; --aside-w:340px; --pad-x:56px; --pad-top:40px;
  /* the old names, pointed at the new palette, so older blocks follow without a rewrite */
  --pj-sky:var(--tang); --pj-sky-bg:var(--tang-bg); --sc-sky:var(--tang); --sc-sky-bg:var(--tang-bg);
}
@media (max-width:820px){ html.v2{--top-h:58px;--pad-x:16px;--pad-top:24px} }
html.v2 body{background:var(--ground)}
html.v2 #field{display:none}

/* ---------- header: full width, logo lined up with the rail ---------- */
html.v2 .mast{background:var(--ground);backdrop-filter:none;-webkit-backdrop-filter:none;border-bottom:1px solid var(--line)}
html.v2 .mast .wrap{max-width:none;padding-inline:28px 24px}
html.v2 body:not(:has(.portal.viewer)) .mast .wrap{min-height:var(--top-h)}
html.v2 .brand{display:flex;align-items:center;gap:0;min-width:0}
html.v2 .brand .ctx{display:inline-block;margin-left:14px;padding-left:14px;border-left:1px solid var(--line-2);font-size:13px;font-weight:500;color:var(--text-2);line-height:20px}
html.v2 .mast .clogo img{max-height:34px}

/* ---------- frame: rail on the ground, one white surface to the right edge ---------- */
html.v2 body:not(:has(.portal.viewer)) main{padding:var(--top-h) 0 0}
html.v2 body:not(:has(.portal.viewer)) #app{max-width:none;padding-inline:0}
html.v2 .portal:not(.viewer){grid-template-columns:var(--rail-w) minmax(0,1fr);gap:0;align-items:stretch;min-height:calc(100vh - var(--top-h))}
html.v2 .portal:not(.viewer) > .pane{background:var(--surface);border-left:1px solid var(--line);padding:var(--pad-top) var(--pad-x) 72px;min-width:0}
@media (min-width:821px){html.v2 body:has(.portal:not(.viewer)) > footer{display:none}}

/* ---------- rail ---------- */
html.v2 .portal:not(.viewer) > .rail{position:sticky;top:var(--top-h);align-self:start;height:calc(100vh - var(--top-h));display:flex;flex-direction:column;flex-wrap:nowrap;gap:2px;padding:24px 12px 18px;margin:0;overflow:visible}
html.v2 .rail .rail-h{display:none}
html.v2 .rail .rail-g{margin:18px 0 6px;padding:0 12px;font-size:11px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--text-3)}
html.v2 .rail .rail-h + .rail-g{margin-top:2px}
html.v2 .rail a{position:relative;display:flex;align-items:center;gap:11px;height:36px;min-height:36px;padding:0 10px 0 12px;border-radius:6px;font-size:14px;font-weight:500;color:var(--text-2);background:none;box-shadow:none;text-decoration:none}
html.v2 .rail a > span:not(.n){flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
html.v2 .rail a:hover{background:var(--hover);color:var(--text)}
html.v2 .rail a.on{background:var(--sel);color:var(--text);font-weight:600;box-shadow:none}
html.v2 .rail a.on::before{content:"";display:block;position:absolute;left:0;top:9px;bottom:9px;width:2px;border-radius:2px;background:linear-gradient(180deg,var(--live),var(--lime))}
html.v2 .rail .ri{display:block;width:17px;height:17px;flex:none;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;color:var(--text-3)}
html.v2 .rail a.on .ri,html.v2 .rail a:hover .ri{color:var(--forest)}
/* counts only for things that need the person: amber chips */
html.v2 .rail .n{display:none}
html.v2 .rail .n.live{display:grid;place-items:center;margin-left:auto;min-width:22px;height:20px;padding:0 6px;border-radius:5px;font-size:11.5px;font-weight:600;line-height:1;background:var(--you-bg);color:var(--you)}
html.v2 .rail .rail-foot{margin-top:auto;padding-top:0;border-top:0;border-radius:6px}
html.v2 .rail .rail-foot::after{content:"";position:absolute;left:12px;right:12px;top:-11px;height:1px;background:var(--line)}
html.v2 .rail .rail-by{display:flex;flex-direction:column;gap:8px;padding:14px 12px 0;font-size:11.5px;color:var(--text-3)}
html.v2 .rail .rail-by a{height:auto;min-height:0;padding:0;gap:8px;font-size:11.5px;font-weight:500;color:var(--text-3);background:none}
html.v2 .rail .rail-by a:hover{color:var(--deep);background:none}
html.v2 .rail .rail-by span{display:flex;gap:14px}

/* ---------- page header: the noun, one sentence, one action ---------- */
html.v2 .portal:not(.viewer) > .pane .band{padding:0;margin:0 0 28px}
html.v2 .portal:not(.viewer) > .pane .band-k:not(:has(a)){display:none}
html.v2 .portal:not(.viewer) > .pane .band-k:has(a){display:flex;align-items:center;gap:6px;margin:0 0 10px;font-size:13px;font-weight:400;letter-spacing:0;text-transform:none;color:var(--text-3)}
html.v2 .portal:not(.viewer) > .pane .band-k:has(a)::before{display:none}
html.v2 .portal:not(.viewer) > .pane .band-k a{min-height:0;margin:0;color:var(--text-2)}
html.v2 .portal:not(.viewer) > .pane .band-k a:hover{color:var(--deep)}
html.v2 .portal:not(.viewer) > .pane .band-h{font-size:28px;font-weight:600;line-height:1.2;letter-spacing:-.022em}
html.v2 .portal:not(.viewer) > .pane .band-sub{margin:6px 0 0;font-size:15px;color:var(--text-2);max-width:68ch}
html.v2 .portal:not(.viewer) > .pane .band-row{align-items:flex-start}
@media (max-width:820px){html.v2 .portal:not(.viewer) > .pane .band-h{font-size:24px}}

/* ---------- section heading: the green-rule label ---------- */
html.v2 .pane .sect{display:flex;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:6px 10px;margin:20px 0 14px}
html.v2 .pane .band + .sect,html.v2 .pane .band + * > .sect:first-child,html.v2 .pane .ibx-tabs + .sect{margin-top:8px}
html.v2 .pane .sect h3{display:inline-flex;align-items:center;gap:10px;margin:0;font-size:11.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--text-3)}
html.v2 .pane .sect h3::before{content:"";width:20px;height:2px;border-radius:2px;background:linear-gradient(90deg,var(--live),var(--lime))}
html.v2 .pane .sect .sect-n{background:none;padding:0;margin:0;font-size:11.5px;letter-spacing:0;color:var(--text-3);font-weight:500}
html.v2 .pane .sect .sect-a{margin-left:auto;font-size:13px}
html.v2 .pane .sect > .small{font-size:13px;color:var(--text-3)}

/* ---------- tab line ---------- */
html.v2 .pane .ibx-tabs{gap:4px 24px;margin:0 0 28px;border-bottom:1px solid var(--line);flex-wrap:wrap}
html.v2 .pane .ibx-tab{padding:0 0 12px;font-size:14px;font-weight:500;color:var(--text-2)}
html.v2 .pane .ibx-tab::after{left:0;right:0}
html.v2 .pane .ibx-tab.on{color:var(--text);font-weight:600}
html.v2 .pane .ibx-tab .n{background:none;padding:0;font-size:12px;color:var(--text-3)}
html.v2 .pane .ibx-tab .n.live{color:var(--you);font-weight:600;background:none}
@media (max-width:640px){html.v2 .pane .ibx-tabs.pj-tabs{flex-wrap:wrap;overflow:visible}}

/* ---------- status pills: sentence case, a dot, one meaning per colour ---------- */
html.v2 .pill{height:22px;padding:0 9px 0 8px;gap:6px;border-radius:999px;font-size:12px;font-weight:500;letter-spacing:0;line-height:1;text-transform:none;background:var(--gone-bg);color:var(--gone)}
html.v2 .pill::before{width:6px;height:6px;flex:none}
html.v2 .pill.in_review,html.v2 .pill.iv-due,html.v2 .pill.sc-talk{background:var(--you-bg);color:var(--you)}
html.v2 .pill.in_review::before,html.v2 .pill.iv-due::before{background:var(--you-dot)}
html.v2 .pill.changes_requested,html.v2 .pill.approved,html.v2 .pill.iv-sched,html.v2 .pill.pj-on,html.v2 .pill.sc-next{background:var(--tang-bg);color:var(--tang)}
html.v2 .pill.changes_requested::before,html.v2 .pill.approved::before,html.v2 .pill.pj-on::before{background:var(--tang-dot)}
html.v2 .pill.delivered,html.v2 .pill.iv-paid,html.v2 .pill.pj-done{background:var(--done-bg);color:var(--done)}
html.v2 .pill.delivered::before,html.v2 .pill.iv-paid::before{background:var(--done-dot)}
html.v2 .pill.replaced,html.v2 .pill.iv-void,html.v2 .pill.draft,html.v2 .pill.sc-free,html.v2 .pill.pj-prop,html.v2 .pill.pj-hold{background:var(--gone-bg);color:var(--gone)}
html.v2 .pill.st-open{background:transparent;color:var(--text-2);box-shadow:inset 0 0 0 1px var(--line-2)}
html.v2 .chip{text-transform:none;letter-spacing:0;font-size:12px;border-radius:999px;padding:3px 9px;background:var(--gone-bg);color:var(--text-2)}

/* ---------- buttons and fields ---------- */
html.v2 .btn{font-size:13.5px;letter-spacing:0;border-radius:6px}
html.v2 .btn-sm{min-height:32px;padding:0 13px;font-size:13px}
html.v2 .btn-b{background:var(--surface)}
html.v2 .btn-b:hover{border-color:var(--forest);color:var(--forest)}
html.v2 .pane input:not([type=checkbox]):not([type=radio]):not([type=file]),html.v2 .pane select,html.v2 .pane textarea{border-color:var(--field-line)}

/* ---------- lists: hairlines instead of a box per item ---------- */
html.v2 .pane .dc .dc-sum{background:none;padding:0;margin:0 0 0 52px;font-size:13.5px;color:var(--text-2);max-width:72ch}
html.v2 .pane .dc .dc-f{margin-left:52px}
@container (max-width:560px){html.v2 .pane .dc .dc-sum,html.v2 .pane .dc .dc-f{margin-left:0}}
/* earlier versions, project page list, billing rows, admin rows */
html.v2 .pane .card.ev,html.v2 .pane .card.pj-dl,html.v2 .pane .card:has(> .alist),html.v2 .pane .card:has(> .ibx-tabs + .alist){background:transparent;border:0;border-radius:0;padding:0}
html.v2 .pane .card.pj-dl{border-top:1px solid var(--line)}
html.v2 .pane .alist{border-top:1px solid var(--line)}
html.v2 .pane .alist > .arow{border-top:0;border-bottom:1px solid var(--line);padding:16px 4px}
/* icon chips */
html.v2 .pane .dic{background:var(--brand-tint);box-shadow:inset 0 0 0 1px var(--brand-line);color:var(--deep)}

/* ---------- empty states: left-aligned, inside their section ---------- */
html.v2 .pane .card:has(> .empty),html.v2 .pane .card:has(> .fin-empty){background:transparent;border:0;border-top:1px solid var(--line);border-radius:0;padding:0}
html.v2 .pane .empty,html.v2 .pane .fin-empty{justify-items:start;text-align:left;padding:22px 4px 8px;font-size:14px;gap:6px}

/* ---------- stat strips (Billing, Financials) ---------- */
html.v2 .pane .kpis{border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:0 0 32px;padding:0}
html.v2 .pane .kpi{padding:16px 24px 16px 0;margin-right:24px}
html.v2 .pane .kpi b{font-size:22px;font-weight:600}
html.v2 .pane .fin-card{background:transparent;border:0;border-radius:0;padding:0}

/* ---------- Home inside the shared frame ---------- */
html.v2 .portal:not(.viewer) > .pane:has(> .hm),html.v2 .portal:not(.viewer) > .pane:has(> .pg2){padding:0}
html.v2 .hm{border:0;border-radius:0;min-height:calc(100vh - var(--top-h));background:var(--surface);grid-template-columns:minmax(0,1fr) var(--aside-w);align-items:stretch}
html.v2 .hm-main{padding:var(--pad-top) var(--pad-x) 72px;align-self:start}
html.v2 .hm-main > *{max-width:none}
html.v2 .hm-act{background:var(--surface);border-color:var(--line)}
html.v2 .hm-ic{background:var(--brand-tint);box-shadow:inset 0 0 0 1px var(--brand-line)}
html.v2 .hm-side{border-left:1px solid var(--line);padding:var(--pad-top) 28px 48px;position:static}
html.v2 .hm-lede{margin:-20px 0 36px;font-size:15.5px;color:var(--text-2);max-width:56ch}
html.v2 .hm-k .c{letter-spacing:0}
html.v2 .hm-k .end{margin-left:auto;letter-spacing:0;text-transform:none;font-size:13px;font-weight:500;color:var(--deep)}
html.v2 .hm-sec{margin:0 0 44px}
html.v2 .hm-late:empty,html.v2 .hm-late:has(> #hmBill:empty){display:none}
html.v2 .hm-pt{margin:0 0 6px;font-size:15px;font-weight:600}
html.v2 .hm-sec .sc-card{border:0;padding:8px 0 0;background:transparent}
html.v2 .hm-sec .sc-card .sc-h{display:none}
html.v2 .hm-act-log{border-top:1px solid var(--line)}
html.v2 .hm-act-log > div{display:grid;grid-template-columns:64px minmax(0,1fr) auto;gap:12px;align-items:baseline;padding:13px 2px;border-bottom:1px solid var(--line);font-size:13.5px;color:var(--text-2)}
html.v2 .hm-act-log .d{color:var(--text-3);font-size:13px}
html.v2 .hm-act-log a{color:var(--deep);font-weight:500;white-space:nowrap}
html.v2 .hm-msg{border:0;padding:0}
@container (max-width:900px){html.v2 .hm{grid-template-columns:minmax(0,1fr)}html.v2 .hm-side{border-left:0;border-top:1px solid var(--line)}}
@container (max-width:560px){html.v2 .hm-main{padding:28px 16px 32px}html.v2 .hm-side{padding:24px 16px}html.v2 .hm-act-log > div{grid-template-columns:minmax(0,1fr)}}
/* list rows on the empty Home (With Tangible) */
html.v2 .v2-list{border-top:1px solid var(--line)}
html.v2 .v2-row{display:grid;grid-template-columns:36px minmax(0,1fr) 168px 92px;gap:0 16px;align-items:center;min-height:68px;padding:14px 4px;border-bottom:1px solid var(--line);color:inherit;text-decoration:none}
html.v2 .v2-row:hover{background:var(--sunk)}
html.v2 .v2-row .dic{width:36px;height:36px;border-radius:9px;background:var(--sunk);box-shadow:inset 0 0 0 1px var(--line);color:var(--text-2)}
html.v2 .v2-tx b{display:block;font-size:15px;font-weight:600;letter-spacing:-.01em;line-height:1.35}
html.v2 .v2-tx .s{display:block;margin-top:2px;font-size:13px;color:var(--text-3)}
html.v2 .v2-go{justify-self:end}
@container (max-width:560px){html.v2 .v2-row{grid-template-columns:36px minmax(0,1fr)}html.v2 .v2-st,html.v2 .v2-go{grid-column:2;margin-top:8px;justify-self:start}}

/* ---------- pages with a right column (project, Billing) ---------- */
html.v2 .pg2{display:grid;grid-template-columns:minmax(0,1fr) var(--aside-w);align-items:stretch;min-height:calc(100vh - var(--top-h))}
html.v2 .pg2-main{padding:var(--pad-top) var(--pad-x) 72px;min-width:0;display:flex;flex-direction:column;gap:0}
html.v2 .pg2-side{border-left:1px solid var(--line);padding:var(--pad-top) 28px 48px;min-width:0}
html.v2 .pg2-side h2{margin:0;font-size:16px;font-weight:600;letter-spacing:-.01em;line-height:1.3}
html.v2 .pg2-side .part{padding:0 0 28px;margin:0 0 28px;border-bottom:1px solid var(--line)}
html.v2 .pg2-side .part.last{border-bottom:0;margin-bottom:0}
html.v2 .pg2-side .kv{display:grid;grid-template-columns:112px minmax(0,1fr);gap:10px 12px;margin:14px 0 0;font-size:13.5px}
html.v2 .pg2-side .kv dt{color:var(--text-3)}
html.v2 .pg2-side .kv dd{margin:0;color:var(--text)}
html.v2 .pg2-side .pl{margin:16px 0 0;font-size:13.5px}
html.v2 .pg2-side .pl a{color:var(--deep);font-weight:500;text-decoration:none}
html.v2 .pg2-side .ps{margin:10px 0 14px;font-size:13.5px;color:var(--text-2)}
html.v2 .pg2-side .gl-msg{padding:14px 0 0;border:0}
@container (max-width:1000px){html.v2 .pg2{grid-template-columns:minmax(0,1fr)}html.v2 .pg2-side{border-left:0;border-top:1px solid var(--line)}}
@container (max-width:560px){html.v2 .pg2-main{padding:24px 16px 32px}html.v2 .pg2-side{padding:24px 16px}}
/* the project page's closed record and stages sit on the surface, not in boxes */
html.v2 .pane .card.sc-card{background:transparent;border:0;border-radius:0;padding:4px 0 0}
html.v2 .pane .sb{border:0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);border-radius:0;background:transparent;margin-top:28px}
html.v2 .pane .sb > summary{padding:16px 4px}
html.v2 .pane .sb .in{border-top:1px solid var(--line);padding:4px 4px 22px}

/* ---------- Messages and Inbox: two columns split by a hairline ---------- */
html.v2 .pane .ibx-list{background:transparent;border:0;border-radius:0;padding:0}
html.v2 .pane .ibx-main{background:transparent;border:0;border-radius:0;padding:24px 0 0}
@media (min-width:860px){
  html.v2 .pane .ibx{gap:0;border-top:1px solid var(--line)}
  html.v2 .pane .ibx-list{border-right:1px solid var(--line)}
  html.v2 .pane .ibx-main{padding:24px 0 0 32px}
}
html.v2 .pane .mb-item{border-radius:0;border-bottom:1px solid var(--line)}
html.v2 .pane .mb-item.on{background:var(--sunk);box-shadow:inset 2px 0 0 var(--live)}

/* ---------- Settings and Files keep their structure, lighter ---------- */
html.v2 .pane .set{background:transparent;border:0;border-top:1px solid var(--line);border-radius:0;padding:28px 0}

/* ---------- the as-client bar: a quiet toast that never covers a dialog ---------- */
html.v2 body:not(.sx-page) .asbar{z-index:55;background:var(--surface);border:1px solid var(--line);border-radius:10px;box-shadow:var(--sh-pop);backdrop-filter:none;-webkit-backdrop-filter:none;padding:8px 8px 8px 14px;font-size:13px}
html.v2 body:not(.sx-page) .asbar.on{border-color:var(--brand-line);background:var(--surface)}
html.v2 .alert.toast{background:var(--surface);border:1px solid var(--line);border-radius:10px;box-shadow:var(--sh-pop);color:var(--text)}

/* ---------- phone: the rail becomes a wrapped section bar above the surface ---------- */
@media (max-width:820px){
  html.v2 .portal:not(.viewer){grid-template-columns:minmax(0,1fr)}
  html.v2 .portal:not(.viewer) > .rail{position:static;height:auto;flex-direction:row;flex-wrap:wrap;gap:4px;padding:10px 12px;border-bottom:1px solid var(--line)}
  html.v2 .rail .rail-g,html.v2 .rail .rail-by{display:none}
  html.v2 .rail a{height:34px;min-height:34px;padding:0 10px;gap:7px;flex:none}
  html.v2 .rail a > span:not(.n){flex:none}
  html.v2 .rail a.on::before{left:10px;right:10px;top:auto;bottom:0;width:auto;height:2px}
  html.v2 .rail .rail-foot{margin-top:0}
  html.v2 .rail .rail-foot::after{display:none}
  html.v2 .portal:not(.viewer) > .pane{border-left:0}
  html.v2 .mast .wrap{padding-inline:16px}
  html.v2 .brand .ctx{display:none}
}

/* ---------- print: an invoice or a page prints whole ---------- */
@media print{
  html.v2 .mast,html.v2 .rail,html.v2 .asbar,html.v2 .alert.toast,html.v2 .pg2-side,html.v2 .hm-side{display:none!important}
  html.v2 .portal:not(.viewer){display:block}
  html.v2 .portal:not(.viewer) > .pane{border:0;padding:0}
  html.v2 .rise{opacity:1!important;transform:none!important}
}

/* ---------- admin tables and stat labels: sentence case ---------- */
html.v2 .pane .tbl th{font-size:12.5px;letter-spacing:0;text-transform:none;font-weight:500}
html.v2 .pane .kpi span{font-size:12.5px;letter-spacing:0;text-transform:none;font-weight:400}
html.v2 .pane .fin-tbl th:first-child,html.v2 .pane .fin-tbl td:first-child{padding-left:4px}
html.v2 .pane .fin-tbl th:last-child,html.v2 .pane .fin-tbl td:last-child{padding-right:4px}

/* ---------- Home on wide screens: the work fills the column instead of leaving a gap ---------- */
@container (min-width:901px){html.v2 .hm{grid-template-columns:minmax(0,1fr) clamp(340px,24vw,420px)}}
html.v2 .hm-main > *{max-width:none}
html.v2 .hm-main > .hm-h1{max-width:760px}
html.v2 .hm-main > .hm-lede{max-width:64ch}
@container (min-width:1001px){html.v2 .pg2{grid-template-columns:minmax(0,1fr) clamp(340px,24vw,420px)}}

/* ---------- wide screens: list pages keep a readable measure; Messages, Inbox and Financials stay full width ---------- */
/* the rail credit: mark and name side by side */
html.v2 .rail .rail-by a{justify-content:flex-start}

/* ---------- deliverable rows: icon, what and why, then the pill and the button on the title's line ---------- */

/* ---------- phone pass (19 Oct) ---------- */
@media (max-width:820px){
  /* no grey band under the rail on short pages: the rail row is its own height, the surface takes the rest */
  html.v2 .portal:not(.viewer){grid-template-rows:auto 1fr;align-content:stretch}
  /* the rail is one bar naming the page; Menu opens the full list */
  html.v2 .portal:not(.viewer) > .rail{display:block;padding:8px 12px;gap:0}
  html.v2 .rail .rail-bar{display:flex;align-items:center;gap:10px;width:100%;height:44px;padding:0 12px;border:1px solid var(--line);border-radius:8px;background:var(--surface);font:600 15px/1 Archivo,system-ui,sans-serif;color:var(--text);cursor:pointer}
  html.v2 .rail .rail-bar .rb-l{flex:1;text-align:left}
  html.v2 .rail .rail-bar .rb-m{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:500;color:var(--deep)}
  html.v2 .rail .rail-bar svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:2;transition:transform .2s}
  html.v2 .rail.open .rail-bar svg{transform:rotate(180deg)}
  html.v2 .rail .rail-bar .n.live{margin-left:0}
  html.v2 .rail > a,html.v2 .rail > .rail-g{display:none}
  html.v2 .rail.open > a{display:flex;height:44px;min-height:44px;margin-top:2px;padding:0 12px;gap:11px}
  html.v2 .rail.open > a > span:not(.n){flex:1}
  html.v2 .rail.open > .rail-g{display:block;margin:12px 0 4px}
  html.v2 .rail.open a.on::before{left:0;right:auto;top:10px;bottom:10px;width:2px;height:auto}
  html.v2 .rail.open .rail-foot{margin-top:8px}
  html.v2 .rail.open .rail-foot::after{display:block;top:-5px}
  /* Home: every next step reads the same way, the button under the words */
  html.v2 .hm-act{grid-template-columns:36px minmax(0,1fr);padding:14px}
  html.v2 .hm-act .hm-go,html.v2 .hm-ln .hm-go{grid-column:2;justify-content:flex-start;margin-top:10px}
  html.v2 .hm-ln{grid-template-columns:minmax(0,1fr)}
  html.v2 .hm-ln .hm-go{grid-column:1}
  html.v2 .hm-go .btn{width:auto;min-width:120px}
  html.v2 .hm-blk{padding:14px 14px 4px}
  /* done recently and activity: check, sentence, link under it */
  html.v2 .hm-done > div{display:grid;grid-template-columns:16px minmax(0,1fr);gap:4px 10px;align-items:start}
  html.v2 .hm-done > div svg{margin-top:3px}
  html.v2 .hm-done a{grid-column:2;margin-left:0}
  /* tabs: tighter, so five fit on two short lines; the project picker takes the full width */
  html.v2 .pane .ibx-tabs{gap:2px 18px}
  html.v2 .pane .ibx-tab{font-size:13.5px;padding-bottom:10px}
  html.v2 .pane .bl-pf{flex-basis:100%;width:100%;margin:8px 0 10px}
  html.v2 .pane .bl-pf select{width:100%}
  /* Billing: the three figures side by side */
  /* Messages: a little less air between the header and the list */
  html.v2 .portal:not(.viewer) > .pane .band-row{margin-bottom:18px}
  html.v2 .portal:not(.viewer) > .pane .band-row .btn{margin-top:4px}
}

/* ---------- restored QA fixes (19 Oct) ---------- */
/* Messages: the pinned reply box sits inside the thread column, so it never pokes past the page edge */
html.v2 .pane .ibx-send.pinned{margin:24px 0 0;padding:16px 0 18px}
/* Home: the project and date sit on their own line under each next step */
html.v2 .hm-tx .s .p{display:block;margin-top:1px}
html.v2 .hm-main > *{max-width:none}

/* ---------- phone lists (19 Oct) ---------- */
@container (max-width:560px){
  /* deliverable rows: icon, words, then the button under the words, as on Home */
}
@media (max-width:820px){
  html.v2 .pane .ibx-send.pinned{margin:16px 0 0;padding:12px 0 14px}
  /* less air between the page header and what follows */
  html.v2 .portal:not(.viewer) > .pane{gap:16px}
  html.v2 .portal:not(.viewer) > .pane .band{margin-bottom:8px}
  /* Billing figures: labels at a reading line height */
}
@media (max-width:820px){
  /* tabs with the project picker under them: one rule, the list's own top line, not two */
  html.v2 .pane .ibx-tabs:has(.bl-pf){border-bottom:0;margin-bottom:16px}
  html.v2 .pane .ibx-tabs:has(.bl-pf) .bl-pf{margin-bottom:0}
  html.v2 .portal:not(.viewer) > .pane .band{margin-bottom:12px}
  /* an open conversation starts right under the header */
  html.v2 .pane .ibx-main{padding-top:0}
  html.v2 .pane .ibx-back{padding-left:0}
}
@media (max-width:820px){
  /* admin Financials: the five figures fill the width in three columns */
  html.v2 .pane .fin-head .kpis{flex:1 1 100%;width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border-top:0;border-bottom:0}
  html.v2 .pane .fin-head .kpi{margin:0;padding:12px 8px 12px 0;border-right:0;border-top:0;border-bottom:1px solid var(--line)}
  html.v2 .pane .fin-head .kpi b{font-size:19px}
  /* admin Inbox: "Rounds waiting" on its own line, the explanation under it */
  html.v2 .pane .rounds-h{flex-wrap:wrap;gap:2px 10px}
  html.v2 .pane .rounds-h b{white-space:nowrap;flex:1 1 100%}
}
@media (max-width:759px){
  /* admin rows on a phone: buttons start at the left edge under the words; the counts show once, as chips */
  html.v2 .pane .arow:has(.zin) .aside{display:none}
  html.v2 .pane .arow .aact{justify-content:flex-start}
  html.v2 .pane .arow:has(.zin) .amain .s{overflow-wrap:normal;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
}


/* the walkthrough's calls on a revision card (admin.html wkList, staff-calls.js): the same items, decisions and pills as
   Studio's walkthrough. Green approved or noted, blue needs a change, grey rejected, amber asked, an outline while undecided */
.rv-callbar{display:flex;flex-wrap:wrap;align-items:flex-start;gap:10px 16px;margin:0 0 14px}
.rv-wkprog{flex:1 1 260px;min-width:0;display:flex;flex-direction:column;gap:6px}
.rv-callline{margin:0;font-size:14px;color:var(--text-2,#5C5753)}
.rv-callline b{color:var(--text,#201E1D);font-weight:600}
.rv-callline.ok{color:var(--done,#17663F)}
.rv-callbar .btn{white-space:normal;height:auto;min-height:32px;line-height:1.3;text-align:left}
.rv-wkbar{display:flex;gap:2px;height:6px;border-radius:3px;overflow:hidden;background:var(--line,#E7E4E1)}
.rv-wkbar i{display:block;height:100%;min-width:3px}
.rv-wkbar .ok{background:var(--done-dot,#3FBB63)}.rv-wkbar .tang{background:var(--tang-dot,#4A86C5)}.rv-wkbar .gone{background:var(--gone-dot,#A8A29D)}.rv-wkbar .wait{background:var(--you-dot,#D08A2E)}.rv-wkbar .open{background:transparent}
.rv-wklist{display:flex;flex-direction:column;gap:14px;margin:0 0 14px}
.rv-wkg-h{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 12px;padding:0 0 6px;border-bottom:1px solid var(--line,#E7E4E1)}
.rv-wkg-h .lbl{margin:0}
.rv-wkg-h .lnk{margin-left:auto;font-size:13px}
.rv-wks{list-style:none;margin:0;padding:0}
.rv-wk{display:flex;flex-direction:column;gap:4px;padding:10px 0 12px;border-bottom:1px solid var(--line,#E7E4E1)}
.rv-wk-h{display:flex;align-items:center;flex-wrap:wrap;gap:6px 10px}
.rv-wk-h b{font-size:14px;font-weight:600}
.rv-wk-h .lnk{margin-left:auto;font-size:12.5px}
.rv-wk p{margin:0}
.rv-wk .rv-ask{font-size:13.5px}
.rv-wk-q,.rv-wk-was{font-size:13px;color:var(--text-2,#5C5753)}
.rv-wk-sug,.rv-wk-pn{font-size:13px;padding:6px 9px;border-radius:6px;background:var(--brand-tint,#F2F8F4)}
.rv-wk-pn{background:none;border:1px dashed var(--line-2,#D6D2CE)}
.rv-wk-sug b,.rv-wk-pn b{font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;margin-right:6px;color:var(--text-3,#736D68)}
.rv-call-l{font-size:13px;color:var(--text-2,#5C5753)}
.rv-wkpill{flex:none;display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 9px 0 8px;border-radius:999px;font-size:12px;font-weight:500;line-height:1;background:var(--gone-bg,#F0EEEC);color:var(--gone,#5C5753)}
.rv-wkpill::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--gone-dot,#A8A29D)}
.rv-wkpill.ok{background:var(--done-bg,#E7F4EB);color:var(--done,#17663F)}.rv-wkpill.ok::before{background:var(--done-dot,#3FBB63)}
.rv-wkpill.tang{background:var(--tang-bg,#EAF1F9);color:var(--tang,#2A5F98)}.rv-wkpill.tang::before{background:var(--tang-dot,#4A86C5)}
.rv-wkpill.wait{background:var(--you-bg,#FBF0E1);color:var(--you,#8A4F0B)}.rv-wkpill.wait::before{background:var(--you-dot,#D08A2E)}
.rv-wkpill.open{background:#fff;color:var(--text-3,#736D68);box-shadow:inset 0 0 0 1px var(--line-2,#D6D2CE)}.rv-wkpill.open::before{background:#fff;box-shadow:inset 0 0 0 1.5px var(--text-4,#A29C97)}
.rv-wk-acts{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:4px}
.rv-wk-acts[hidden],.rv-wk-f[hidden]{display:none}
.rv-wk-acts .btn.on{background:var(--tang-bg,#EAF1F9);border-color:var(--tang,#2A5F98);color:var(--tang,#2A5F98)}
.rv-wk-acts .btn.on[data-wk-a="approve"]{background:var(--done-bg,#E7F4EB);border-color:var(--done,#17663F);color:var(--done,#17663F)}
.rv-wk-acts .btn.on[data-wk-a="reject"]{background:var(--gone-bg,#F0EEEC);border-color:var(--gone,#5C5753);color:var(--gone,#5C5753)}
.rv-wk-acts .lnk{font-size:13px}
.rv-wk-f{display:flex;flex-direction:column;gap:6px;margin-top:4px}
.rv-wk-f label{font-size:13px;font-weight:600}
.rv-wk-f textarea{width:100%;box-sizing:border-box;min-height:56px;padding:8px 10px;resize:vertical}
.rv-sendnote:empty{display:none}
/* the customer line on each item, and Send changes with items kept back (20 Oct 2026) */
.rv-wk-cust{font-size:13px;padding:6px 9px;border-radius:6px;background:var(--brand-tint,#F2F8F4)}
.rv-wk-cust b{font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;margin-right:6px;color:var(--done,#17663F)}
.rv-sendc{display:flex;flex-direction:column;gap:12px;padding-top:12px;border-top:1px solid var(--line,#E7E4E1)}
.rv-sendc-h{margin:0;display:flex;flex-wrap:wrap;gap:4px 12px;align-items:baseline}
.rv-sendc-h span{font-size:13px;color:var(--text-3,#736D68)}
.rv-sendc-l{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.rv-sendc-t{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin-bottom:6px}
.rv-sendc-t b{font-size:14px}
.rv-sendc-l textarea{width:100%;box-sizing:border-box;min-height:52px;padding:8px 10px;resize:vertical}
.rv-sendc .acts{display:flex;gap:8px;flex-wrap:wrap}
@media(max-width:520px){.rv-wk-h .lnk{margin-left:0}.rv-wkg-h .lnk{margin-left:0}}

/* ---------- list-page template and button scheme (template/SPEC.md, Brad's decisions 20 Oct 2026) ----------
   One page = .lt: head (the place, a quiet total, one action) / four permanent tabs in a fixed order / filters / one row
   anatomy (.lt-row) / a one-line empty state. Pills: st-you amber (the customer's move), st-out amber ring (out with someone
   the customer sent it to), st-tang blue (Tangible's move or in progress), st-draft blue ring, st-done green, st-gone grey. */
/* ---------- page head: the place, a quiet total, one action on the heading's line ---------- */
html.v2 .lt-head{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:36px;margin:0 0 24px}
html.v2 .lt-h{margin:0;display:flex;align-items:baseline;gap:10px;font-size:28px;font-weight:600;line-height:1.2;letter-spacing:-.022em;color:var(--text);min-width:0}
html.v2 .lt-h .lt-n{font-size:15px;font-weight:500;letter-spacing:0;color:var(--text-3);font-variant-numeric:tabular-nums}
html.v2 .lt-head .lt-act{flex:none;display:flex;gap:8px}

/* ---------- tabs: always the same set, always in the same order; a zero stays, muted ---------- */
html.v2 .lt-tabs{display:flex;gap:0 28px;margin:0 0 16px;border-bottom:1px solid var(--line);flex-wrap:nowrap}
html.v2 .lt-tab{position:relative;display:inline-flex;align-items:baseline;gap:7px;padding:0 0 12px;margin:0;border:0;background:none;font:inherit;font-size:14px;font-weight:500;color:var(--text-2);cursor:pointer;white-space:nowrap}
html.v2 .lt-tab .c{font-size:12.5px;font-weight:500;color:var(--text-3);font-variant-numeric:tabular-nums}
html.v2 .lt-tab.zero{color:var(--text-3)}
html.v2 .lt-tab.zero .c{color:var(--text-4)}
html.v2 .lt-tab.on{color:var(--text);font-weight:600}
html.v2 .lt-tab.on::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;border-radius:2px;background:var(--forest)}
/* the viewer's own tab: its count takes the colour of whose move it is */
html.v2 .lt-tab.you:not(.zero) .c{color:var(--you);font-weight:600}
html.v2 .lt-tab.tang:not(.zero) .c{color:var(--tang);font-weight:600}
html.v2 .lt-tabs .lt-sep{flex:1}

/* ---------- filters: pickers on one line under the tabs ---------- */
html.v2 .lt-filters{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin:0 0 16px}
html.v2 .lt-sel{position:relative;display:inline-flex}
html.v2 .lt-sel select,html.v2 .lt-search{appearance:none;-webkit-appearance:none;height:36px;padding:0 34px 0 12px;border:1px solid var(--line-2);border-radius:6px;background:var(--surface);font:inherit;font-size:13.5px;color:var(--text);min-width:180px}
html.v2 .lt-sel::after{content:"";position:absolute;right:13px;top:50%;width:7px;height:7px;margin-top:-6px;border-right:1.5px solid var(--text-2);border-bottom:1.5px solid var(--text-2);transform:rotate(45deg);pointer-events:none}
html.v2 .lt-search{padding:0 12px;min-width:260px}
html.v2 .lt-sw{display:inline-flex}
html.v2 .lt-chk{display:inline-flex;align-items:center;gap:8px;font-size:13.5px;color:var(--text-2)}
html.v2 .lt-chk input{width:16px;height:16px;accent-color:var(--forest)}
html.v2 .lt-filters .push{margin-left:auto}

/* ---------- the list and its one row ---------- */
html.v2 .lt-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--line);container-type:inline-size}
html.v2 .lt-row{--st-w:132px;--go-w:var(--lt-go,104px);display:grid;grid-template-columns:36px minmax(0,1fr) var(--st-w) var(--go-w) 32px;grid-template-areas:"ic main st go more";column-gap:16px;align-items:start;padding:14px 4px 14px 4px;border-bottom:1px solid var(--line);position:relative}
html.v2 .lt-list.has-fig .lt-row{--st-w:200px}
html.v2 .lt-list.has-fig .lt-st .pill{flex:none}
html.v2 .lt-row:hover{background:var(--sunk)}
html.v2 .lt-row.sel{background:var(--sel)}
html.v2 .lt-ic{grid-area:ic;width:36px;height:36px;border-radius:9px;display:grid;place-items:center;background:var(--sunk);box-shadow:inset 0 0 0 1px var(--line);color:var(--text-2);position:relative}
html.v2 .lt-ic svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
html.v2 .lt-ic.av{border-radius:50%;background:var(--brand-tint);box-shadow:inset 0 0 0 1px var(--brand-line);color:var(--forest);font-size:13px;font-weight:600}
html.v2 .lt-ic.av svg{width:18px;height:18px;stroke:none}
html.v2 .lt-ic .ud{position:absolute;left:-3px;top:-3px;width:10px;height:10px;border-radius:50%;background:var(--done-dot);box-shadow:0 0 0 2px var(--surface)}
html.v2 .lt-main{grid-area:main;min-width:0;padding-top:1px}
html.v2 .lt-t{display:block;font-size:15px;font-weight:600;line-height:22px;color:var(--text);text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
html.v2 .lt-t::after{content:"";position:absolute;inset:0}           /* the whole row opens the item */
html.v2 .lt-t:hover{color:var(--forest)}
html.v2 .lt-m{margin-top:2px;font-size:13px;line-height:18px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
html.v2 .lt-m b{font-weight:500;color:var(--text-2)}
/* status column: pill (and, on money pages, the figure before it) on the title's line */
html.v2 .lt-st{grid-area:st;display:flex;align-items:center;justify-content:flex-start;gap:16px;height:22px;margin-top:1px}
html.v2 .lt-fig{width:88px;flex:none;text-align:right;font-size:14px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;white-space:nowrap}
html.v2 .lt-go{grid-area:go;display:flex;justify-content:flex-end;margin-top:-4px;position:relative;z-index:1}
html.v2 .lt-go .btn{min-width:84px}
html.v2 .lt-more{grid-area:more;position:relative;z-index:2;margin-top:-4px}
html.v2 .lt-row:has(.menu.open){z-index:30}
html.v2 .lt-split .lt-row .lt-m{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* the More button: three dots, a square the size of a small button */
html.v2 .btn-more{width:32px;min-width:32px;padding:0;color:var(--text-2)}
html.v2 .btn-more svg{width:16px;height:16px;fill:currentColor;stroke:none}
html.v2 .btn-more[aria-expanded="true"]{border-color:var(--forest);color:var(--forest)}
html.v2 .lt-menu{top:38px;right:0;min-width:208px;z-index:80}
html.v2 .lt-menu.up{top:auto;bottom:38px}
html.v2 .menu .mi-sep{height:1px;margin:6px 4px;background:var(--line)}
html.v2 .menu .mi-d{color:var(--neg)}
html.v2 .menu .mi-k{display:block;padding:8px 12px 4px;font-size:12px;color:var(--text-3)}

/* lists with no status (Files): no pill column */
html.v2 .lt-list.no-st .lt-row{grid-template-columns:36px minmax(0,1fr) var(--go-w) 32px;grid-template-areas:"ic main go more"}
html.v2 .lt-list.no-st .lt-st{display:none}
html.v2 .lt-pa .lt-more{margin-top:0}
html.v2 .sign[hidden]{display:none}

/* ---------- pills: five tones, one meaning each ---------- */
html.v2 .pill.st-you{background:var(--you-bg);color:var(--you)}
html.v2 .pill.st-you::before{background:var(--you-dot)}
html.v2 .pill.st-out{background:var(--surface);color:var(--you);box-shadow:inset 0 0 0 1px #E8C9A0}
html.v2 .pill.st-out::before{background:var(--surface);box-shadow:inset 0 0 0 1.5px var(--you-dot)}
html.v2 .pill.st-tang{background:var(--tang-bg);color:var(--tang)}
html.v2 .pill.st-tang::before{background:var(--tang-dot)}
html.v2 .pill.st-done{background:var(--done-bg);color:var(--done)}
html.v2 .pill.st-done::before{background:var(--done-dot)}
html.v2 .pill.st-gone{background:var(--gone-bg);color:var(--gone)}
html.v2 .pill.st-gone::before{background:var(--gone-dot)}
html.v2 .pill.st-draft{background:var(--surface);color:var(--tang);box-shadow:inset 0 0 0 1px #BFD3EA}
html.v2 .pill.st-draft::before{background:var(--surface);box-shadow:inset 0 0 0 1.5px var(--tang-dot)}

/* ---------- empty tab: one short line ---------- */
html.v2 .lt-empty{margin:0;padding:18px 4px;border-bottom:1px solid var(--line);font-size:14px;color:var(--text-3)}

/* ---------- destructive button (new): rust outline in a row of choices, rust fill to confirm ---------- */
html.v2 .btn-d{background:var(--surface);border-color:#E3C3AE;color:var(--neg)}
html.v2 .btn-d:hover{border-color:var(--neg);color:var(--neg)}
html.v2 .btn-d.btn-a,html.v2 .btn-a.btn-d{background:var(--neg);border-color:var(--neg);color:#fff}

/* ---------- split variant (Messages, Inbox): the list beside a reading pane ---------- */
html.v2 .lt-split{display:grid;grid-template-columns:380px minmax(0,1fr);border-top:1px solid var(--line)}
html.v2 .lt-split > .lt-col{border-right:1px solid var(--line);min-width:0}
html.v2 .lt-split > .lt-col > .lt-list{border-top:0}
html.v2 .lt-split > .lt-col > .lt-empty{border-bottom:0;padding-left:8px}
html.v2 .lt-split .lt-row{--st-w:auto;grid-template-columns:36px minmax(0,1fr) auto;grid-template-areas:"ic main st";column-gap:12px;padding:14px 16px 14px 8px}
html.v2 .lt-split .lt-row .lt-st{height:auto;flex-direction:column;align-items:flex-end;gap:6px;margin-top:3px}
html.v2 .lt-split .lt-row .lt-d{font-size:12.5px;color:var(--text-3);white-space:nowrap}
html.v2 .lt-pane{min-width:0;padding:0 0 0 32px}
html.v2 .lt-ph{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:16px 0;border-bottom:1px solid var(--line)}
html.v2 .lt-ph h2{margin:0;font-size:17px;font-weight:600;line-height:1.35}
html.v2 .lt-ph .lt-m{white-space:normal}
html.v2 .lt-ph .lt-pa{flex:none;display:flex;gap:8px;align-items:center;position:relative}
html.v2 .lt-back{display:none}
html.v2 .lt-msg{display:grid;grid-template-columns:36px minmax(0,1fr);gap:12px;padding:20px 0;border-bottom:1px solid var(--line)}
html.v2 .lt-msg > .lt-ic{grid-area:auto}
html.v2 .lt-msg .who{font-size:14px;font-weight:600}.lt-msg .who span{font-weight:400;color:var(--text-3);font-size:12.5px;margin-left:8px}
html.v2 .lt-msg p{margin:6px 0 0;font-size:14.5px;line-height:1.55;color:var(--text)}
html.v2 .lt-msg.tang .bd{border-left:3px solid var(--forest);background:var(--brand-tint);padding:12px 16px;border-radius:0 8px 8px 0;margin-top:8px}
html.v2 .lt-msg.tang .bd p:first-child{margin-top:0}
html.v2 .lt-q{margin:12px 0 0;padding:0;list-style:none;display:grid;gap:10px}
html.v2 .lt-q li{font-size:14px;line-height:1.45}
html.v2 .lt-q li small{display:block;color:var(--text-3);font-size:12.5px}
html.v2 .lt-k{margin:14px 0 4px;font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--deep)}
/* composer: tools on the left as quiet text buttons, the one send on the right */
html.v2 .lt-comp{padding:16px 0 0}
html.v2 .lt-comp textarea{width:100%;min-height:96px;padding:12px 14px;border:1px solid var(--field-line);border-radius:8px;font:inherit;font-size:14.5px;resize:vertical;background:var(--surface);box-sizing:border-box}
html.v2 .lt-bar{display:flex;align-items:center;gap:8px;margin-top:10px}
html.v2 .lt-bar .btn-t{color:var(--text-2);padding-inline:8px}
html.v2 .lt-bar .btn-t svg{width:15px;height:15px}
html.v2 .lt-bar .end{margin-left:auto;display:flex;gap:8px;align-items:center}

/* ---------- aside facts (Billing details etc.) ---------- */
html.v2 .lt-wrap{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:40px;align-items:start}
html.v2 .lt-aside{border-left:1px solid var(--line);padding-left:24px}
html.v2 .lt-aside dl{grid-template-columns:96px minmax(0,1fr)!important}
html.v2 .lt-aside h2{margin:0 0 14px;font-size:15px;font-weight:600}
html.v2 .lt-aside dl{margin:0;display:grid;grid-template-columns:110px minmax(0,1fr);gap:10px 12px;font-size:13.5px}
html.v2 .lt-aside dt{color:var(--text-3)}html.v2 .lt-aside dd{margin:0;color:var(--text)}
html.v2 .lt-aside .part + .part{margin-top:28px;padding-top:24px;border-top:1px solid var(--line)}
html.v2 .lt-aside .btn-t{padding-inline:0;margin-top:12px}

/* ---------- dialogs: title, fields, footer with Cancel then the confirm on the right ---------- */
html.v2 .lt-dlg{background:var(--surface);border-radius:10px;box-shadow:var(--sh-pop);width:min(520px,100%);padding:24px 24px 20px;box-sizing:border-box}
html.v2 .lt-dlg-h{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 16px}
html.v2 .lt-dlg-h h3{margin:0;font-size:18px;font-weight:600}
html.v2 .lt-dlg .x{width:32px;height:32px;border:0;background:none;border-radius:6px;font-size:22px;line-height:1;color:var(--text-2);cursor:pointer}
html.v2 .lt-dlg label{display:grid;gap:6px;margin:0 0 14px;font-size:13px;font-weight:500;color:var(--text-2)}
html.v2 .lt-dlg input,html.v2 .lt-dlg textarea{height:40px;padding:0 12px;border:1px solid var(--field-line);border-radius:6px;font:inherit;font-size:14.5px;color:var(--text);box-sizing:border-box}
html.v2 .lt-dlg textarea{height:auto;min-height:72px;padding:10px 12px}
html.v2 .lt-dlg-f{display:flex;justify-content:flex-end;align-items:center;gap:8px;margin-top:20px}
html.v2 .lt-dlg-f .note{margin-right:auto;font-size:12.5px;color:var(--text-3)}

/* ---------- phone: no sideways scroll; the row keeps its order, the pill and the action share a second line ---------- */
@container (max-width:640px){
  html.v2 .lt-row{grid-template-columns:36px minmax(0,1fr) auto;grid-template-areas:"ic main more" ". st go";column-gap:12px;row-gap:10px;padding:14px 0}
  html.v2 .lt-list.has-fig .lt-row{--st-w:auto}
  html.v2 .lt-list.no-st .lt-row{grid-template-columns:36px minmax(0,1fr) auto;grid-template-areas:"ic main more" ". . go"}
  html.v2 .lt-st{height:32px;margin-top:0;gap:12px}
  html.v2 .lt-fig{width:auto;text-align:left;order:2;font-size:13.5px}
  html.v2 .lt-go{margin-top:0}
  html.v2 .lt-more{justify-self:end;margin-top:-5px}
  html.v2 .lt-t{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
  html.v2 .lt-m{white-space:normal}
}
@media (max-width:820px){
  html.v2 .lt-head{margin-bottom:18px}
  html.v2 .lt-h{font-size:24px}
  html.v2 .lt-tabs{gap:0 18px;margin-bottom:12px}
  html.v2 .lt-tab{font-size:13.5px;gap:5px;padding-bottom:10px}
  html.v2 .lt-filters{gap:8px}
  html.v2 .lt-filters .lt-sel{flex:1 1 0;min-width:0}
  html.v2 .lt-sel select,html.v2 .lt-search{min-width:0;width:100%;font-size:16px;height:40px}
  html.v2 .lt-search{flex:1 1 100%}
  html.v2 .lt-filters .lt-chk{flex-basis:100%}
  html.v2 .lt-filters .lt-sw{flex-basis:100%}
  html.v2 .lt-ph .lt-pa{margin-left:auto}
  html.v2 .lt-filters .push{margin-left:0}
  html.v2 .lt-wrap{grid-template-columns:minmax(0,1fr);gap:32px}
  html.v2 .lt-aside{border-left:0;padding-left:0;border-top:1px solid var(--line);padding-top:24px}
  html.v2 .lt-split{grid-template-columns:minmax(0,1fr)}
  html.v2 .lt-split > .lt-col{border-right:0}
  html.v2 .lt-split.open > .lt-col{display:none!important}
  html.v2 .lt-split:not(.open) > .lt-pane{display:none}
  html.v2 .lt-pane{padding:0}
  html.v2 .lt-back{display:inline-flex;margin:12px 0 0}
  html.v2 .lt-ph{flex-wrap:wrap}
  html.v2 .lt-bar .btn-t .tl{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  html.v2 .lt-bar .btn-t{width:40px;min-height:40px;padding:0;justify-content:center}
  html.v2 .lt-bar .btn-t svg{width:18px;height:18px}
  html.v2 .lt-bar .end .btn{min-height:40px}
  html.v2 .lt-dlg{padding:20px 16px 16px}
  html.v2 .lt-dlg-f .btn{flex:1 1 0;min-height:44px}
  html.v2 .lt-dlg-f .note{flex-basis:100%}
  html.v2 .lt-dlg-f{flex-wrap:wrap}
}

/* ---------- template additions in the live pages ---------- */
html.v2 .lt-col0{min-width:0}
html.v2 .lt .lt-pn[hidden]{display:none}
html.v2 .lt-head .lt-h:focus{outline:none}
html.v2 .lt-tabs a.lt-tab{text-decoration:none}
html.v2 .lt-t:focus-visible{outline:2px solid var(--forest);outline-offset:2px;border-radius:3px}
html.v2 .lt-split .lt-row .lt-d{order:-1}
html.v2 .lt-ic.ext{border-radius:50%;background:transparent;box-shadow:inset 0 0 0 1px var(--line-2);color:var(--text-3)}
html.v2 .lt-ic img{width:100%;height:100%;object-fit:contain;border-radius:inherit}
html.v2 .lt-aside .lt-act{margin-top:14px}
html.v2 .lt-sec{margin-top:40px}
html.v2 .lt-sec > .lt-head{margin-bottom:16px}
html.v2 .lt-sec h2.lt-h{font-size:17px;letter-spacing:0}
html.v2 .lt-sec h2.lt-h .lt-n{font-size:13.5px}
html.v2 .lt-link{margin-left:auto;font-size:13.5px;font-weight:500;color:var(--deep);text-decoration:none;white-space:nowrap}
html.v2 .lt-link:hover{text-decoration:underline}
html.v2 .lt-tabs .lt-link{align-self:center;margin:0 0 12px 18px}
html.v2 .lt-drop.over{outline:2px dashed var(--forest);outline-offset:6px;border-radius:8px}
html.v2 .lt-status:empty{display:none}
html.v2 .lt-status{margin:0 0 12px;font-size:13.5px;color:var(--text-2)}
html.v2 .lt-status.err{color:var(--neg)}
html.v2 button.lt-t{border:0;background:none;padding:0;margin:0;font:inherit;font-size:15px;font-weight:600;line-height:22px;text-align:left;cursor:pointer;max-width:100%;color:var(--text)}
html.v2 .lt-split .lt-row .lt-go,html.v2 .lt-split .lt-row .lt-more{display:none}
html.v2 .lt-entries{margin:0 0 4px}
html.v2 .fl-dropped{margin:0 0 14px;font-size:13.5px;color:var(--text-2)}
/* the People list keeps its wider action column and round avatars */
html.v2 .pp .lt-row{--go-w:120px;--st-w:96px}
/* dialogs: one card, title left with the close mark, Cancel then the confirm on the right */
html.v2 .sign-card.lt-dlg{display:block;padding:24px 24px 20px}
html.v2 .sign-card.lt-dlg .f{margin:0 0 14px}
html.v2 .lt-dlg label.f{display:block}
html.v2 .lt-dlg label.f > span{display:block;margin:0 0 6px;font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--text-2)}
html.v2 .lt-dlg .f input,html.v2 .lt-dlg .f select,html.v2 .lt-dlg .f textarea{width:100%}
html.v2 .sign-h:has(> .sign-t){align-items:flex-start}
html.v2 .sign-h > .sign-t{font-size:20px}
html.v2 .sign-a{flex-wrap:wrap}
/* pills: the old status classes follow the five tones; Approved is green (done) */
html.v2 .pill.approved,html.v2 .pill.iv-paid,html.v2 .pill.delivered{background:var(--done-bg);color:var(--done)}
html.v2 .pill.approved::before,html.v2 .pill.iv-paid::before,html.v2 .pill.delivered::before{background:var(--done-dot)}
html.v2 .pill.draft{background:var(--surface);color:var(--tang);box-shadow:inset 0 0 0 1px #BFD3EA}
html.v2 .pill.draft::before{background:var(--surface);box-shadow:inset 0 0 0 1.5px var(--tang-dot)}
/* btn-c (amber outline) is retired: amber is a status colour */
html.v2 .btn-c{background:var(--surface);border-color:var(--line-2);color:var(--text)}
html.v2 .btn-c:hover{border-color:var(--forest);color:var(--forest)}
/* no sub-line under any heading */
html.v2 .portal:not(.viewer) > .pane .band-sub{display:none}
/* the Studio entry row (a draft ready to decide) inside the template: its More in the row's last column; in a split
   column it stacks, the pill and the button under the words */
html.v2 .rp-entry.has-more{grid-template-columns:36px minmax(0,1fr) 132px var(--lt-go,104px) 32px}
html.v2 .rp-entry .more{position:relative;z-index:2;margin-top:-4px}
html.v2 .rp-entry .rp-sg,html.v2 .rv-wkprog .rp-sg{display:flex;flex-direction:column;gap:5px;max-width:520px}
html.v2 .lt-split .rp-entry{grid-template-columns:36px minmax(0,1fr);margin:8px 8px 8px 0;padding:12px}
html.v2 .lt-split .rp-entry .st,html.v2 .lt-split .rp-entry .go{grid-column:2;justify-self:start}
html.v2 h2.lt-h{font-size:17px;letter-spacing:0}
html.v2 h2.lt-h .lt-n{font-size:13.5px}
html.v2 .pj-lt{margin-top:8px}
html.v2 .pj-lt > .lt-head{margin-bottom:16px}
@media (max-width:640px){
  html.v2 .rp-entry.has-more{grid-template-columns:36px minmax(0,1fr) auto}
  html.v2 .rp-entry.has-more .more{grid-column:3;grid-row:1}
  html.v2 .rp-entry.has-more .st,html.v2 .rp-entry.has-more .go{grid-column:2}
}
@media (max-width:820px){
  /* a text link at the end of the tabs (Open Zoho Books) takes its own line on a phone */
  html.v2 .lt-tabs:has(.lt-link){flex-wrap:wrap}
  html.v2 .lt-tabs:has(.lt-link) .lt-sep{display:none}
  html.v2 .lt-tabs .lt-link{order:-1;flex-basis:100%;margin:0 0 12px}
}
/* the deliverable's stage: every stage on one track (Posted, Your review, Revisions, Approved, Delivered) */
.iprog .bar.seg{display:flex;gap:2px;background:none;border-radius:0}
.iprog .bar.seg i{flex:1 1 0;width:auto;border-radius:2px;background:var(--line,#E7E4E1)!important}
.iprog .bar.seg i.done,.iprog .bar.seg i.on{background:var(--forest,#0E5040)!important}
html.v2 .lt-rvli{list-style:none;padding:4px 0 20px;border-bottom:1px solid var(--line)}
