body { background: #f6f8fc; color: #152644; }
.brand-home { display: inline-block; max-width: 100%; }
.brand-wordmark { display: block; width: min(100%, 28rem); height: auto; }
.footer-icon { width: 2.75rem; height: auto; }
.eyebrow { color: #062c79; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; font-size: .8rem; }
.btn-primary { --bs-btn-bg: #062c79; --bs-btn-border-color: #062c79; --bs-btn-hover-bg: #041e53; --bs-btn-hover-border-color: #041e53; --bs-btn-active-bg: #041e53; --bs-btn-active-border-color: #041e53; }
.text-primary { color: #062c79 !important; }
.card { border-top: 4px solid #efbd19 !important; }
a:focus-visible { outline: 3px solid #18233b; outline-offset: 4px; }

.input-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr)); gap: 1rem; }
.input-grid label { font-weight: 600; }
.input-grid input { margin-top: .35rem; }
.result-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 150px), 1fr)); gap: 1rem; }
.result-grid dd { font-size: 1.25rem; margin-bottom: 0; overflow-wrap: anywhere; }
#results[data-tone="LOSS"] #verdict { color: #a01527; }
#results[data-tone="THIN"] #verdict { color: #785000; }
/* Status labels from docs/design/sol-chat/status-labels.html. Text on each background is at least 4.5:1 (checked in test/status-label.test.js). */
.status-label { display: flex; align-items: center; gap: .65rem; padding: .75rem; margin-bottom: 1rem; border-radius: .6rem; }
.status-label i { font-size: 1.25rem; }
.status-title { margin: 0; font-weight: 700; font-size: 1rem; }
.status-detail { margin: 0; font-size: .875rem; }
.status-label[data-tone="OK"] { background: #e7f4ec; color: #145c38; }
.status-label[data-tone="THIN"] { background: #fdf1dc; color: #7a4200; }
.status-label[data-tone="LOSS"] { background: #fbe4e1; color: #8e1b12; }
/* Two panels from lg up: the results card stays in view beside the inputs. Below lg it stacks under them. */
@media (min-width: 992px) { .results-panel { position: sticky; top: 1rem; } }
/* Summary bar, below lg only. Page padding and scroll padding keep the last inputs and the focused field clear of it. */
.summary-bar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 1030; display: flex; align-items: center; justify-content: space-between; gap: .75rem; width: 100%; min-height: 3.5rem; padding: .6rem 1rem calc(.6rem + env(safe-area-inset-bottom)); border: 0; border-top: 4px solid #efbd19; background: #fff; color: #152644; text-align: left; font-size: .9rem; box-shadow: 0 -.25rem 1rem rgba(6, 44, 121, .15); }
.summary-bar[hidden] { display: none; }
.summary-numbers { display: flex; flex-wrap: wrap; gap: .1rem 1rem; }
.summary-numbers span { white-space: nowrap; }
.summary-numbers strong { font-variant-numeric: tabular-nums; }
.summary-bar[data-tone="LOSS"] #bar-profit { color: #a01527; }
.summary-go { flex: none; color: #062c79; font-weight: 600; }
#results { scroll-margin-top: 1rem; }
#results-heading:focus { outline: none; } /* Focus target for the bar's jump, not a control. */
@media (max-width: 991.98px) {
  body { padding-bottom: 5rem; }
  html { scroll-padding-bottom: 5.5rem; }
}
button:focus-visible, input:focus-visible { outline: 3px solid #062c79; outline-offset: 3px; }

.checklist { display: grid; gap: .8rem; }
.checklist input, #won { width: 1.15rem; height: 1.15rem; vertical-align: middle; }
#customer-preview { overflow-wrap: anywhere; }
@media print {
  body { background: white; color: black; }
  body > :not(main), main > .row > .col-12 > :not(#customer-preview) { display: none !important; }
  main.container { max-width: none; padding: 0 !important; }
  #customer-preview { border: 0 !important; box-shadow: none !important; }
  #customer-preview .brand-wordmark { width: 240px; }
}

/* Hours range sliders: likely sits mid-track; ticks mark low, likely and high. */
.phase-list { display: grid; gap: 1.5rem; }
.phase-head { display: flex; flex-wrap: wrap; justify-content: space-between; gap: .25rem 1rem; }
.phase-hours { font-variant-numeric: tabular-nums; font-weight: 600; }
.phase-hours[data-side="under"] { color: #146c43; }
.phase-hours[data-side="over"] { color: #785000; }
.phase-row .form-range { margin-top: .5rem; background: linear-gradient(90deg, transparent calc(50% - 1px), #062c79 calc(50% - 1px), #062c79 calc(50% + 1px), transparent calc(50% + 1px)) center / 100% 1.25rem no-repeat; }
.phase-ticks { display: grid; grid-template-columns: 1fr 1fr 1fr; }
.phase-ticks span:nth-child(2) { text-align: center; }
.phase-ticks span:nth-child(3) { text-align: right; }
.phase-edit { margin-top: .35rem; }
.phase-edit-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 7rem)); gap: .5rem; margin-top: .5rem; }
.price-row { display: grid; grid-template-columns: 1fr 11rem; gap: 1rem; align-items: center; }
@media (max-width: 575.98px) { .price-row { grid-template-columns: 1fr; } }
.job-track { position: relative; height: 2.25rem; margin: 1rem .5rem .25rem; }
.job-track-bar { position: absolute; inset: .85rem 0; background: #d7e3f7; border-radius: .3rem; overflow: hidden; }
.job-track-loss { position: absolute; top: 0; bottom: 0; background: repeating-linear-gradient(45deg, #f1aeb5, #f1aeb5 6px, #f8d7da 6px, #f8d7da 12px); }
.job-mark { position: absolute; top: 0; bottom: 0; width: 4px; margin-left: -2px; border-radius: 2px; }
.job-mark-likely { background: #062c79; opacity: .45; }
.job-mark-break { background: #a01527; }
.job-mark-now { width: 1rem; height: 1rem; margin-left: -.5rem; top: .6rem; border-radius: 50%; background: #efbd19; border: 3px solid #062c79; }
.job-track-labels { display: flex; justify-content: space-between; margin: 0 .5rem; }
.key { display: inline-block; width: .8rem; height: .8rem; border-radius: 2px; vertical-align: -1px; }
.key-now { background: #efbd19; border: 2px solid #062c79; border-radius: 50%; }
.key-likely { background: #062c79; opacity: .45; }
.key-break { background: #a01527; }
.key-loss { background: #f1aeb5; }
#results[data-tone="LOSS"] #verdict { color: #a01527; }
#results[data-tone="THIN"] #verdict { color: #785000; }
