:root{ --atiq-q2-build:'146000'; }
/* ══════════════════════════════════════════════════════════════════════════════════════════════
   [124000]  QUOTE DOCUMENT v2 — James's own design, built in Claude Design and read back from
   the artboard source rather than eyeballed from a screenshot.

   ⚠ NOT SCOPED UNDER .quote-view. The v1 sheet (css/quote-print.css) is a byte-for-byte lift of
   the old Quote app auto-scoped under .quote-view, and the document is also rendered inside the
   full-screen #qd-overlay, which is NOT a child of .quote-view. v1 works there only because
   app.css carries a second unscoped copy of the .qd-* rules. Rather than repeat that trick, every
   rule here is scoped to .q2-page, which exists in both places and nowhere else.

   ⚠ FIXED PAGE, HIDDEN OVERFLOW — and that is why quotedoc2.js measures every page after
   layout. A clipped exclusion on a contract document is the worst failure available to this
   file, so the clip is visible and reported rather than silent.
   ══════════════════════════════════════════════════════════════════════════════════════════════ */

/* [126500] ⚠ THE PAGE IS A4, NOT 794px. James: "the print is not coming out 1:1 as the preview".
   Measured, not guessed — the box was identical in both media (794x1123, no transform), so
   nothing here was distorting it. Two inherited rules were:

     1. css/quote-print.css:820 declares  @page{size:A4 portrait; margin:5mm}.  An ANONYMOUS
        @page applies to every page in the document, so the v2 sheet was handed a 5mm physical
        margin on top of a full-height page: content 10mm wider and 10mm taller than the area it
        was allowed, and Chrome's print dialog shrank the lot to fit. The cover sheet and the v1
        doc already dodge this with a named page (app.css:1602 @page cspage{margin:0}); v2 was
        never given one. It has q2page below.
     2. 794x1123px is A4 ROUNDED. A4 is 793.70 x 1122.52px, so the page overflowed the sheet by
        half a pixel even at margin:0 — enough for Chrome to emit a hairline blank page.

   So the box is now stated in mm and is the SAME box on screen and on paper. One box, two media,
   no divergence available. qdFitPreview() measures it rather than assuming 794. */
.q2-page{
  width:210mm; height:297mm; background:#fff; color:#141414;
  margin:0 auto 22px; position:relative; overflow:hidden; flex:0 0 auto;
  display:flex; flex-direction:column;
  box-shadow:0 8px 40px rgba(0,0,0,.5);
  font-family:'Barlow','Inter',-apple-system,'Segoe UI',Arial,sans-serif;
  font-size:12px; line-height:1.45; font-variant-numeric:tabular-nums;
}
/* the brand bar. A GRADIENT survives print where a flat background colour is often dropped,
   but browsers still honour it only with background-graphics on — the footer rule below is the
   fallback that keeps the page looking deliberate either way. */
.q2-grad{ height:8px; flex:0 0 8px;
  background:linear-gradient(90deg,#FF00FF 0%,#FFF200 55%,#55FF00 100%); }
/* [124000] the FOOT bar is gone — James: "on the very bottom of the page is a coloured line -
   i don't want that. Happy to keep the top one, but bottom is overkill". The rule stays so an
   older cached page that still emits the element does not grow a stray 4px block. */
.q2-grad.q2-gradb{ display:none; }

.q2-pad{ flex:1 1 auto; padding:36px 56px 0; display:flex; flex-direction:column; gap:20px;
  overflow:hidden; }

/* ── header ───────────────────────────────────────────────────────────────────────────────── */
.q2-hd{ display:flex; justify-content:space-between; align-items:center; }
.q2-logo{ width:200px; height:auto; display:block; }
.q2-hdr{ text-align:right; }
.q2-eyebrow{ font-size:11px; font-weight:600; letter-spacing:.12em; color:#5C5C5C; }
.q2-date{ font-size:12px; margin-top:2px; }
/* [126500] the quote tab's own name, printed only when it distinguishes one quote on the job
   from another — qd2QuoteLabel() drops "Quote", "Quote 2" and blanks */
.q2-qname{ font-size:11px; color:#5C5C5C; margin-top:1px; }
/* [127500] the masthead, then ONE group holding site/client + price + the note. .q2-pad puts
   20px between its children, and in the design these three are NOT its children — they share a
   wrapper with no gap and space themselves with their own padding and rules. */
.q2-headgrp{ display:flex; flex-direction:column; }
.q2-hd{ padding-bottom:4px; }

/* [127000] site and client are one bordered band of two columns. The 236px right track is the
   same one the GST figures use below, so the two bands align down the page. */
.q2-who{ display:grid; grid-template-columns:minmax(0,1fr) 236px;
  border-top:2px solid #141414; border-bottom:1px solid #D4D4D4; padding:14px 0; }
.q2-lbl{ font-size:11px; font-weight:600; letter-spacing:.06em; color:#5C5C5C;
  text-transform:uppercase; }
.q2-site{ font-size:16px; font-weight:700; line-height:1.25; margin-top:3px; }
.q2-client{ font-size:16px; font-weight:700; line-height:1.25; margin-top:3px; }
/* the old divider rule between the two — the band's own borders do that job now. Kept as a
   no-op so a cached page still emitting the class does not grow a stray border. */
.q2-whodiv{ padding-left:0; border-left:0; }

/* ── price ────────────────────────────────────────────────────────────────────────────────── */
/* [127000] NO GREY PANEL. The reworked design sets the price on the page between two rules and
   lets the 44px figure carry the weight. Same two-track grid as the band above it. */
/* [128000] the reworked price band: the two columns TOP-align and the left one stretches, so
   the acceptance line can be pushed to its foot and land level with "Total incl. GST" opposite.
   The heavy black rule underneath became a hairline — the band no longer needs to shout now the
   figure has come down to 34px. */
.q2-price{ display:grid; grid-template-columns:minmax(0,1fr) 236px; align-items:start;
  padding:16px 0; border-bottom:1px solid #D4D4D4; background:none; border-top:0; }
.q2-pmain{ display:flex; flex-direction:column; gap:8px; padding:0; align-self:stretch; }
.q2-pacc{ font-size:11px; color:#5C5C5C; margin-top:auto; padding-top:5px; line-height:17px; }
.q2-sq{ display:flex; align-items:center; gap:8px; }
.q2-sq:before{ content:''; width:8px; height:8px; background:#E600E6; flex:0 0 8px; }
.q2-pamt{ font-weight:700; font-size:34px; line-height:1; letter-spacing:-.01em;
  display:flex; align-items:baseline; gap:10px; margin-top:0; }
.q2-pamt span{ font-size:12px; font-weight:400; color:#5C5C5C; margin-left:0; }
.q2-pside{ width:auto; border-left:0; padding:0;
  display:flex; flex-direction:column; justify-content:center; gap:5px; }
.q2-pside>div{ display:flex; justify-content:space-between; }
.q2-psidelbl{ display:block!important; margin-bottom:3px; }
.q2-pside>div>span:first-child{ color:#5C5C5C; }
.q2-ptot{ border-top:1px solid #D4D4D4; padding-top:5px; font-weight:700; }
.q2-ptot>span:first-child{ color:#141414!important; }
/* [128000] .q2-pfoot carried the two-part note under the whole band. It is gone: the
   acceptance half moved into .q2-pacc inside the price column, and the "Fixed price for the
   concrete works described in this quotation" half was dropped. Both rules stay as no-ops so a
   cached page still emitting either class does not grow a stray row. */
.q2-pfoot{ display:none; }
.q2-pnote{ display:none; }

/* ── sections ─────────────────────────────────────────────────────────────────────────────── */
.q2-sec{ display:flex; align-items:center; gap:10px; margin-bottom:10px; }
.q2-sec i{ width:10px; height:10px; background:#E600E6; flex:0 0 10px; }
.q2-sec h2{ margin:0; font-weight:700; font-size:14px; letter-spacing:.08em;
  text-transform:uppercase; }
.q2-cols{ display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); column-gap:32px;
  align-items:start; }
.q2-scope{ font-size:13px; line-height:1.5; }
.q2-scope p{ margin:0 0 8px; max-width:620px; }
.q2-scope p:last-child{ margin-bottom:0; }
/* a heading line sitting directly on top of its own bullet list — "Areas in scope:" then the
   areas, which is 32 of the 78 paragraphs across the real jobs — closes up to read as one unit
   instead of a stranded sentence */
.q2-scope p + ul.q2-sl{ margin-top:2px; }
.q2-scope ul.q2-sl + p{ margin-top:8px; }

/* [127000] ONE TYPED PARAGRAPH = ONE .q2-para, and the gap belongs to the wrapper rather than to
   whatever happens to sit either side. Before this, two bullet groups separated by a blank line
   touched, because ul.q2-sl carries margin:0. The two gap sizes are the two the real text boxes
   actually use: 20 single blank lines and 7 doubles across the 51 filled fields. */
.q2-para + .q2-para.q2-gap1{ margin-top:11px; }
.q2-para + .q2-para.q2-gap2{ margin-top:22px; }

/* [127500] THREE columns, filled ACROSS then down, with the tighter rows from the reworked
   design (1px between items, down from 5px). CSS `columns` would fill the left column to the
   bottom first; a grid with the default row flow gives the order James asked for — item 1 left,
   item 2 middle, item 3 right, item 4 back to the left. */
.q2-scope ul.q2-sl.q2-mcol{ display:grid; grid-template-columns:repeat(3,minmax(0,1fr));
  column-gap:36px; row-gap:0; padding-left:18px; margin:0; }
.q2-scope ul.q2-sl.q2-mcol li{ margin-bottom:1px; break-inside:avoid; }
/* a continued scope on a later page carries no heading, so it needs its own top breathing room */
.q2-block.q2-cont2 .q2-scope{ margin-top:0; }
/* [127500] straight off the design: 12px above AND below, so scope→inclusions reads 32px with
   .q2-pad's own 20px. That supersedes the flat 20px bottom margin of 126500 — James, having
   reworked the design: "the ones on the design are perfect". */
.q2-block.q2-sgap{ margin:4px 0; padding-bottom:24px; border-bottom:1px solid #D4D4D4; }
.q2-none{ color:#aaa; font-style:italic; }
/* a scope that is still a bullet list — 28 of 39 existing quotes — keeps its bullets rather
   than being reflowed into a run-on paragraph on a document already sent */
ul.q2-sl{ margin:0; padding-left:17px; }
ul.q2-sl li{ margin-bottom:3px; }

.q2-panel{ background:#F3F3F1; padding:16px 18px; display:flex; flex-direction:column; gap:5px; }
.q2-panel.q2-empty{ color:#999; font-style:italic; }
.q2-row{ display:flex; gap:10px; align-items:flex-start; }
.q2-row svg{ width:12px; height:12px; flex:0 0 12px; margin-top:3px; fill:none;
  stroke:#2E7D00; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
.q2-row svg.x{ stroke:#B3261E; stroke-width:1.8; }
/* [125000] the job-specific bolding is GONE — James: "not sure why you keep bolding things in
   exclusions that are not part of the template - that feels like a hangover from an old design".
   It was: it came from a version that promoted those items into a callout box. They still come
   first in the list, which is the part that mattered. The rules stay as no-ops so a cached page
   still emitting the old classes does not grow stray weight. */
.q2-row.q2-job>div{ font-weight:inherit; }
.q2-legend{ display:none; }
/* a group heading inside a panel. Earns its place only when the group has 2+ items — the rule
   lives in qd2SplitExc(), not here. */
.q2-grp{ font-size:8.5px; font-weight:700; letter-spacing:.11em; text-transform:uppercase;
  color:#9a9a97; margin:9px 0 2px; padding-top:7px; border-top:1px solid #E2E2DF; }
.q2-panel .q2-grp:first-child{ margin-top:0; padding-top:0; border-top:0; }

.q2-pt{ width:100%; border-collapse:collapse; font-size:12px; }
.q2-pt th{ text-align:left; padding:6px 0; font-size:11px; font-weight:600; color:#5C5C5C;
  letter-spacing:.06em; text-transform:uppercase; border-bottom:2px solid #141414; }
.q2-pt th.r,.q2-pt td.r{ text-align:right; }
.q2-pt td{ padding:6px 0; border-bottom:1px solid #E0E0E0; }
.q2-pt tr.q2-ptot2 td{ background:#F3F3F1; font-weight:700; padding:6px 8px; border-bottom:0; }

ul.q2-asm{ margin:0; padding-left:18px; display:flex; flex-direction:column; gap:5px; }
ul.q2-asm li{ line-height:1.45; }

.q2-cont{ display:flex; justify-content:space-between; align-items:center;
  padding-bottom:14px; margin-bottom:12px; border-bottom:2px solid #141414; }
/* page 2's exclusions/assumptions pair carries 12px beneath it in the design */
.q2-cols.q2-colsb{ margin-bottom:12px; }
.q2-cont img{ width:150px; height:auto; display:block; }
.q2-conthdr{ text-align:right; display:flex; flex-direction:column; gap:2px; }
.q2-contsite{ font-size:12px; font-weight:600; color:#141414; }
.q2-contclient{ font-size:12px; color:#5C5C5C; }
.q2-cont b{ color:#141414; font-weight:600; }

/* terms sit at the FOOT of their page — margin-top:auto inside the flex column */
.q2-terms{ background:#F3F3F1; padding:14px 18px; margin-top:auto; margin-bottom:24px; }
.q2-terms h2{ margin:0 0 8px; font-weight:700; font-size:11px; letter-spacing:.08em;
  text-transform:uppercase; }
/* [124000] terms set smaller than the body. They are the one block on the page nobody reads
   line by line, and at body size they competed with the exclusions above them. Smaller also
   buys back the room James will need as he writes longer ones. */
.q2-terms ol{ margin:0; padding-left:16px; columns:2; column-gap:32px;
  font-size:10px; line-height:1.4; color:#3A3A3A; }
.q2-terms li{ margin-bottom:4px; break-inside:avoid; }

/* ── footer ───────────────────────────────────────────────────────────────────────────────── */
.q2-ft{ flex:0 0 auto; margin:0 56px; padding:16px 0 22px; display:flex;
  justify-content:space-between; align-items:center; font-size:11px; color:#5C5C5C; }
.q2-ft>div:first-child{ display:flex; align-items:center; gap:14px; }
.q2-ftname{ font-weight:700; color:#141414; letter-spacing:.08em; }
.q2-ft i{ width:1px; height:10px; background:#BDBDBD; display:block; }
.q2-ftpg{ font-weight:600; color:#141414; letter-spacing:.06em; }

/* ── the overflow warning — on screen only, never printed ─────────────────────────────────── */
.q2-overflow{ background:#5a3d10; border:1px solid #e0a33a; color:#ffe9c2; border-radius:8px;
  padding:11px 14px; font-size:12px; line-height:1.55; margin:0 auto 14px; max-width:794px;
  font-family:'Inter',system-ui,sans-serif; }
@media print{ .q2-overflow{ display:none!important; } }

/* print: the page IS exactly A4, so the only job here is to stop anything shrinking it.
   q2page is a NAMED page so the anonymous @page{margin:5mm} in quote-print.css cannot reach it —
   see the note at the top of this file. */
@page q2page{ size:A4; margin:0; }
@media print{
  .q2-page{ page:q2page;
            width:210mm!important; height:297mm!important;
            box-shadow:none!important; margin:0!important; transform:none!important;
            -webkit-print-color-adjust:exact; print-color-adjust:exact;
            page-break-after:always; break-after:page; }
  .q2-page:last-child{ page-break-after:auto; break-after:auto; }
  /* the preview pane scales its pages with a transform and sets a negative margin to claw back
     the gap that leaves. Printing from that pane must undo both. */
  .email-docprev .q2-page{ margin-bottom:0!important; }
}

/* [124000] a column promoted to full width when the pair could not fit on one page */
.q2-wide{ display:block; }
.q2-wide>div{ width:100%; }
.q2-wide ul.q2-asm{ columns:2; column-gap:32px; }
.q2-wide .q2-panel{ display:block; columns:2; column-gap:26px; }
.q2-wide .q2-panel .q2-row{ break-inside:avoid; margin-bottom:5px; }

/* [125500] an empty Assumptions section: a dash where the first bullet would be, no panel */
.q2-dash{ color:#bbb; padding-left:18px; }
