/* Tendersmith product system: compact hierarchy, quiet surfaces, consistent controls. */
:root {
  /* Values come from tokens.css; these names are kept for older rules. */
  --color-copper:var(--color-muted);
  --surface:var(--color-surface);
  --surface-soft:var(--color-surface-soft);
  --line:var(--color-line);
  font-size:var(--fs-base);
  font-synthesis:none
}
body {
  line-height:1.6
}
/* Inline links remain identifiable without relying on colour alone. */
.page-content p a:not(.btn), .page-content caption a:not(.btn), .launch-allowance a {
  text-decoration:underline;
  text-underline-offset:3px;
}
h1,h2,h3,h4 {
  font-family:var(--font-sans);
  font-weight:650;
  letter-spacing:-.025em
}
h1,.tw-page-header h1,.page-content>.container>.flex-between:first-child h1 {
  font-size:var(--fs-2xl);
  line-height:1.25
}
h2 {
  font-size:var(--fs-lg);
  line-height:1.4
}
h3 {
  font-size:var(--fs-md);
  line-height:1.45
}
h4 {
  font-size:var(--fs-base)
}
.page-subtitle,.text-muted {
  color:var(--color-gray-600)
}
.page-subtitle {
  font-size:var(--fs-base);
  line-height:1.65;
  max-width:72ch;
  margin-top:8px
}
.main-content {
  min-width:0
}
.page-content {
  padding:32px;
  overflow:visible
}
.container {
  width:100%;
  max-width:1280px;
  margin-inline:auto;
  padding-inline:0
}
.tw-page-header,.flex-between {
  gap:20px;
  flex-wrap:wrap
}
.tw-page-header {
  align-items:flex-start;
  margin-bottom:28px
}
.tw-page-header h1 {
  margin:0
}
.tw-page-actions,.quick-actions,.bid-actions,.vault-item-actions {
  gap:10px;
  flex-wrap:wrap
}
.section {
  margin-bottom:32px
}
.section-header {
  gap:16px;
  margin-bottom:16px;
  flex-wrap:wrap
}
.section-header h2 {
  font-size:var(--fs-lg);
  font-weight:650
}
.tw-breadcrumbs {
  font-size:var(--fs-sm);
  line-height:1.5;
  margin-bottom:20px;
  flex-wrap:wrap
}
/* Navigation */
.sidebar {
  width:240px;
  padding:24px 16px 16px;
  background:var(--color-brand)
}
.main-content {
  margin-left:240px
}
.layout-simple .main-content {
  margin-left:0
}
.sidebar-logo {
  font-family:var(--font-sans);
  font-size:var(--fs-2xl);
  font-weight:700;
  letter-spacing:-.065em;
  gap:0;
  color:#fff;
  padding:0 12px 22px;
  margin-bottom:18px
}
.sidebar-logo::before {
  content:none
}
.sidebar-logo span {
  color:#7fc2b7
}
.sidebar-logo:hover {
  color:#fff
}
.sidebar-nav {
  gap:3px
}
.sidebar-section-label {
  font-size:var(--fs-sm);
  line-height:1.4;
  font-weight:500;
  letter-spacing:0;
  text-transform:none;
  color:#aebfc9;
  padding:14px 12px 6px;
  margin:0
}
.sidebar-nav-item {
  color:#d9e3e9;
  min-height:42px;
  padding:9px 12px;
  gap:12px;
  font-size:var(--fs-sm);
  line-height:1.5;
  border-radius:6px
}
.sidebar-nav-item svg {
  flex-shrink:0;
  opacity:.8
}
.sidebar-nav-item.active {
  background:#e6f2ef;
  color:var(--color-primary-dark);
  font-weight:600
}
.sidebar-nav-item.active svg {
  opacity:1
}
.sidebar-nav-ai {
  background:transparent;
  border-color:transparent
}
.sidebar-ai-badge {
  font-size:var(--fs-sm);
  background:#ffffff12;
  color:inherit;
  padding:0 6px
}
.sidebar-nav-item.active .sidebar-ai-badge {
  background:#156c6910
}
.sidebar-account {
  padding-top:16px;
  border-top:1px solid #ffffff20;
  display:flex;
  align-items:center;
  gap:10px
}
.sidebar-avatar {
  width:36px;
  height:36px;
  display:grid;
  place-items:center;
  flex-shrink:0;
  border-radius:7px;
  background:#29485b;
  color:#e9f1f4;
  font-size:var(--fs-sm);
  font-weight:600
}
.sidebar-company {
  flex:1;
  min-width:0
}
.sidebar-company-name {
  font-size:var(--fs-sm);
  color:white;
  margin:0;
  font-weight:600;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap
}
.sidebar-company-plan {
  font-size:var(--fs-sm);
  color:#aebfc9;
  margin:0;
  text-transform:capitalize
}
.sidebar-logout {
  color:#c5d3dc;
  width:40px;
  height:40px;
  display:grid;
  place-items:center;
  border-radius:6px
}
.sidebar-logout:hover {
  color:white;
  background:#ffffff10
}
.top-bar {
  min-height:64px;
  height:auto;
  padding:14px 32px;
  background:#fff;
  box-shadow:none;
  border-bottom:1px solid var(--line);
  gap:20px
}
.top-bar h2 {
  font-size:var(--fs-sm);
  font-weight:600;
  letter-spacing:0
}
.top-bar-username,.logout-btn {
  font-size:var(--fs-sm);
  font-weight:400;
  color:var(--color-gray-600)
}
.top-bar-user {
  gap:20px
}
.logout-btn {
  min-height:36px;
  display:inline-flex;
  align-items:center
}
/* Controls and keyboard focus */
button,.btn,input[type="button"],input[type="submit"] {
  min-height:44px;
  padding:10px 16px;
  font-size:var(--fs-sm);
  line-height:1.4;
  font-weight:600;
  border-radius:6px;
  letter-spacing:0;
  transition:background-color .15s,border-color .15s,box-shadow .15s
}
.btn-primary,button[type="submit"],input[type="submit"],.btn-activate-bid {
  background:var(--color-teal);
  color:white
}
.btn-primary:hover,button[type="submit"]:hover,.btn-activate-bid:hover {
  background:var(--color-teal-dark);
  color:white;
  box-shadow:none;
  transform:none
}
.btn.btn-outline {
  background:white;
  border:1px solid #bcccd2;
  color:var(--color-ink)
}
.btn.btn-outline:hover {
  background:var(--color-surface-soft);
  border-color:#8caeac;
  color:var(--color-primary-dark)
}
.btn.btn-secondary {
  background:var(--color-surface-muted);
  color:var(--color-ink)
}
.btn-sm {
  min-height:38px;
  padding:8px 12px;
  font-size:var(--fs-sm)
}
.btn-lg {
  min-height:48px;
  padding:12px 20px;
  font-size:var(--fs-base)
}
.btn.btn-danger {
  background:var(--color-danger)
}
.btn-danger.btn-sm {
  min-height:38px
}
.btn.btn-success {
  background:var(--color-success)
}
button:disabled,.btn:disabled {
  cursor:not-allowed;
  opacity:.6
}
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible,[tabindex]:focus-visible {
  outline:3px solid var(--color-focus);
  outline-offset:3px
}
label,.form-label {
  font-size:var(--fs-sm);
  font-weight:600;
  line-height:1.5;
  margin-bottom:6px
}
input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]):not([type="range"]):not([type="submit"]):not([type="button"]),select,textarea {
  min-height:44px;
  padding:10px 12px;
  font-size:var(--fs-base);
  line-height:1.5;
  border:1px solid var(--color-line-strong);
  border-radius:var(--radius-sm);
  background:var(--color-surface);
  color:var(--color-ink);
  font-family:var(--font-sans)
}
input::placeholder,textarea::placeholder {
  color:var(--color-muted);
  opacity:1
}
input[type="checkbox"],input[type="radio"] {
  accent-color:var(--color-teal);
  width:18px;
  height:18px;
  flex-shrink:0
}
textarea {
  resize:vertical
}
.form-group {
  margin-bottom:20px
}
.form-help,.form-hint,.help-text,small {
  font-size:var(--fs-sm);
  line-height:1.6;
  color:var(--color-gray-600)
}
/* Shared surfaces and data reading */
.card,.stat-card,.hero-card,.vault-item-card,.bid-section,.policy-card {
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:var(--surface);
  box-shadow:var(--shadow-sm)
}
.card:hover,.hero-card:hover,.vault-item-card:hover,.policy-card:hover {
  box-shadow:var(--shadow-sm);
  transform:none;
  border-color:#bdcdd3
}
.card-header {
  padding:20px 24px;
  margin:0;
  border-bottom:1px solid var(--line);
  background:#fbfcfb
}
.card-header h2,.card-header h3 {
  margin:0
}
.card-body {
  padding:24px
}
.stats-row,.market-stats {
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:16px;
  margin-bottom:24px
}
.stat-card {
  padding:20px;
  text-align:left;
  border-top:1px solid var(--line)
}
.stat-label {
  color:var(--color-gray-600);
  font-size:var(--fs-sm);
  line-height:1.5;
  letter-spacing:0;
  text-transform:none;
  font-weight:500;
  margin:0 0 8px
}
.stat-value {
  font-size:var(--fs-2xl);
  font-weight:650;
  color:var(--color-ink);
  letter-spacing:-.04em;
  line-height:1.2;
  font-variant-numeric:tabular-nums;
  margin:0
}
.stat-change {
  font-size:var(--fs-sm);
  margin-top:8px
}
.stat-value.warning {
  color:var(--color-warning)
}
.stat-value.danger {
  color:var(--color-danger)
}
.table-wrap,.market-table-wrap,.pipeline-table-wrap {
  overflow-x:auto;
  background:white;
  border:1px solid var(--line);
  border-radius:var(--radius)
}
table {
  width:100%;
  border-collapse:collapse
}
.table,.market-table {
  margin:0
}
.table th,.market-table th {
  padding:13px 16px;
  font-size:var(--fs-sm);
  letter-spacing:0;
  text-transform:none;
  font-weight:600;
  line-height:1.5;
  color:var(--color-body);
  background:var(--color-surface-soft);
  border-bottom:1px solid var(--line);
  text-align:left
}
.table td,.market-table td {
  padding:16px;
  font-size:var(--fs-sm);
  line-height:1.6;
  border-bottom:1px solid var(--color-line);
  vertical-align:top
}
.table tr:last-child td,.market-table tr:last-child td {
  border-bottom:0
}
.table tr:hover td,.market-table tbody tr:hover td {
  background:#f7faf9
}
.table-link-primary,.market-title {
  color:var(--color-primary-dark);
  font-weight:600;
  line-height:1.55
}
.badge,.tag,.tw-badge,.match-score,.type-badge,.card-expiry {
  font-size:var(--fs-sm);
  line-height:1.4;
  letter-spacing:0;
  font-weight:500;
  border-radius:4px;
  padding:4px 8px
}
.tag {
  background:#f0f4f5;
  border:1px solid #e0e8eb;
  color:#425b6b
}
.badge-purple,.tw-badge-purple {
  color:#405d72;
  background:#eaf0f4
}
.empty-state,.tw-empty {
  padding:40px 24px;
  border:1px dashed #c6d3d8;
  border-radius:var(--radius);
  background:#fff
}
.empty-state h3,.tw-empty h3 {
  font-size:var(--fs-md)
}
.empty-state p,.tw-empty p {
  font-size:var(--fs-base);
  max-width:62ch;
  margin-inline:auto
}
.alert,.toast {
  font-size:var(--fs-sm);
  line-height:1.6;
  border-radius:6px
}
.alert-close {
  min-width:38px;
  min-height:38px;
  padding:4px
}
.archive-context-warning {
  display:flex;
  align-items:flex-start;
  gap:12px;
  border:1px solid #dec9a9;
  border-left:3px solid var(--color-warning);
  background:#fbf7ee;
  color:#654b25;
  border-radius:6px;
  padding:16px 20px;
  margin:0 0 24px;
  font-size:var(--fs-sm);
  line-height:1.6
}
.archive-context-warning strong {
  display:block;
  margin-bottom:4px;
  font-weight:600
}
.archive-context-warning p {
  margin:0
}
.archive-context-warning svg {
  flex-shrink:0;
  margin-top:2px
}
/* Dashboard and response writing */
.dashboard-progress {
  padding:20px 24px;
  margin-bottom:24px;
  background:var(--surface-soft)
}
.dashboard-progress p {
  margin:6px 0 0;
  color:var(--color-gray-600)
}
.hero-cards-grid {
  grid-template-columns:repeat(auto-fit,minmax(min(100%,290px),1fr));
  gap:18px
}
.hero-card {
  padding:22px;
  border-top:1px solid var(--line)
}
.hero-score-badge {
  top:20px;
  right:20px;
  width:auto;
  min-width:48px;
  height:28px;
  padding:4px 8px;
  border-radius:4px;
  font-size:var(--fs-sm);
  background:#eaf3f0;
  color:#245b49;
  box-shadow:none
}
.hero-card-title {
  font-size:var(--fs-md);
  font-weight:650;
  line-height:1.5;
  margin:0 58px 8px 0
}
.hero-card-authority,.hero-card-link {
  font-size:var(--fs-sm);
  line-height:1.6
}
.hero-card-tags {
  gap:6px;
  margin-block:16px
}
.hero-btn-row {
  margin-top:18px;
  gap:8px
}
.hero-card form .btn-block {
  margin-top:8px
}
.bid-header {
  padding:24px;
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:#fff;
  align-items:flex-start;
  gap:24px
}
.bid-header-info {
  min-width:0
}
.bid-header-title {
  font-size:var(--fs-xl);
  font-weight:650;
  line-height:1.4;
  letter-spacing:-.025em;
  margin-bottom:22px;
  color:var(--color-ink)
}
.bid-header-meta {
  gap:18px 28px
}
.bid-header-meta-label {
  font-size:var(--fs-sm);
  letter-spacing:0;
  text-transform:none;
  color:var(--color-gray-600);
  margin-bottom:4px
}
.bid-header-meta-value {
  font-size:var(--fs-sm);
  font-weight:600
}
.bid-status {
  flex-wrap:wrap
}
.bid-sections {
  min-width:0;
  grid-template-columns:minmax(0,1fr);
  gap:20px
}
.bid-section {
  min-width:0;
  padding:26px
}
.bid-section-header {
  gap:12px;
  flex-wrap:wrap;
  margin-bottom:18px;
  padding-bottom:16px;
  border-bottom:1px solid var(--line)
}
.bid-section-header h3 {
  font-size:var(--fs-md);
  margin:0
}
.bid-section-content {
  white-space:normal;
  font-size:var(--fs-base);
  line-height:1.8;
  color:var(--color-body);
  max-width:82ch
}
.bid-section-content p {
  white-space:pre-wrap;
  margin-bottom:16px
}
.bid-section-content textarea {
  max-width:100%;
  width:100%
}
/* Evidence and compliance */
.vault-grid {
  grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));
  gap:18px
}
.vault-item-card {
  padding:24px
}
.vault-item-content {
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  height:100%
}
.vault-item-content h3 {
  font-size:var(--fs-md);
  margin-bottom:12px
}
.vault-item-count {
  font-size:var(--fs-2xl);
  color:var(--color-ink);
  margin-bottom:8px
}
.vault-item-desc {
  font-size:var(--fs-base);
  line-height:1.6;
  color:var(--color-gray-600);
  flex:1;
  margin-bottom:20px
}
.vault-context-card {
  background:#f0f6f4;
  border-color:#bcd6d0
}
.vault-evidence-grid {
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:16px
}
.compliance-container {
  max-width:1280px
}
.compliance-container .stats-row {
  grid-template-columns:repeat(auto-fit,minmax(140px,1fr))
}
.type-section {
  margin-top:30px
}
.type-section-header {
  margin-bottom:16px;
  padding-bottom:12px
}
.cards-grid {
  gap:18px
}
.policy-card {
  padding:22px
}
.card-title {
  font-size:var(--fs-md);
  line-height:1.5
}
.card-meta-item {
  font-size:var(--fs-sm);
  gap:16px
}
.card-content {
  font-size:var(--fs-base);
  line-height:1.65;
  max-height:none
}
.card-actions {
  flex-wrap:wrap;
  gap:8px
}
.completeness-bar {
  height:5px;
  background:#e7eeee;
  margin-top:14px
}
.completeness-fill {
  border-radius:5px
}
.modal-content,.modal-box {
  border-radius:12px;
  box-shadow:var(--shadow-xl)
}
.modal-content {
  width:min(620px,calc(100vw - 32px));
  padding:28px
}
/* Market */
.market-filter-panel {
  padding:22px;
  margin-bottom:20px;
  background:white;
  border:1px solid var(--line);
  border-radius:var(--radius)
}
.market-filter-form {
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:16px;
  align-items:end
}
.market-filter-field {
  min-width:0
}
.market-filter-search {
  grid-column:span 2
}
.market-filter-actions {
  display:flex;
  gap:10px;
  align-items:center
}
.market-results-count {
  margin-bottom:14px;
  font-size:var(--fs-sm);
  color:var(--color-gray-600)
}
.market-table {
  min-width:860px
}
.market-table th:first-child,.market-table td:first-child {
  width:34%;
  min-width:250px
}
.market-table th:nth-child(2) {
  width:21%
}
.market-table td:nth-child(3),.market-table td:last-child {
  white-space:nowrap;
  font-variant-numeric:tabular-nums
}
.market-sort {
  display:inline-flex;
  align-items:center;
  gap:6px;
  min-height:32px;
  color:inherit
}
.market-sort:hover {
  color:var(--color-teal)
}
.market-sort-direction {
  color:var(--color-teal);
  font-size:var(--fs-sm)
}
.market-region {
  display:block;
  margin-top:5px;
  font-size:var(--fs-sm);
  color:var(--color-gray-600)
}
.market-sector {
  display:inline-block;
  color:#405d72;
  background:#eef3f5;
  border-radius:4px;
  padding:4px 8px;
  font-size:var(--fs-sm)
}
.market-pagination {
  display:flex;
  flex-wrap:wrap;
  justify-content:center;
  gap:8px;
  margin-top:24px
}
.market-pagination a,.market-pagination>span {
  min-height:40px;
  min-width:40px;
  padding:8px 12px;
  border:1px solid var(--line);
  border-radius:6px;
  display:inline-flex;
  align-items:center;
  justify-content:center
}
.market-pagination .active {
  background:var(--color-teal);
  color:white;
  border-color:var(--color-teal)
}
/* Auth and onboarding */
.auth-container,.onboarding-container {
  background:none;
  min-height:calc(100vh - 64px);
  padding:24px
}
.auth-card,.onboarding-card {
  border:1px solid var(--line);
  padding:36px;
  border-radius:12px;
  box-shadow:var(--shadow-md)
}
.auth-card {
  max-width:440px
}
.onboarding-card {
  max-width:760px
}
.auth-logo {
  display:inline-flex;
  align-items:center;
  gap:10px;
  font-family:var(--font-sans);
  font-weight:750;
  font-size:var(--fs-lg);
  letter-spacing:-.02em;
  color:var(--color-ink);
  text-decoration:none;
  margin-bottom:24px
}
.auth-logo:hover { color:var(--color-ink) }
.auth-logo span {
  color:var(--color-ink)
}
.auth-card-header h1,.step-header h2 {
  font-size:var(--fs-xl)
}
.auth-card-header p,.step-header p {
  font-size:var(--fs-base)
}
.auth-footer {
  font-size:var(--fs-sm)
}
.onboarding-progress {
  max-width:720px;
  margin:0 auto 28px;
  padding:0;
  list-style:none;
  display:grid;
  grid-template-columns:repeat(5,minmax(0,1fr));
  gap:8px
}
.onboarding-progress li {
  min-width:0;
  border-top:3px solid var(--color-line);
  padding-top:12px;
  color:var(--color-gray-600);
  font-size:var(--fs-sm);
  line-height:1.4
}
.onboarding-progress li.complete,.onboarding-progress li.current {
  border-color:var(--color-teal)
}
.onboarding-progress li.current {
  color:var(--color-ink);
  font-weight:600
}
.onboarding-progress .step-number {
  display:block;
  margin-bottom:6px;
  font-weight:600;
  color:var(--color-teal)
}
.tw-nav-toggle {
  padding:0;
  background:var(--color-ink)
}
.tw-nav-toggle svg {
  flex-shrink:0
}
@media(max-width:1100px) {
  .page-content {
    padding:26px
  }
  .bid-header {
    flex-direction:column
  }
  .bid-header-meta {
    grid-template-columns:repeat(2,minmax(0,1fr))
  }
  .stats-row,.market-stats {
    gap:12px
  }
  .stat-card {
    padding:18px
  }
}
@media(max-width:768px) {
  .sidebar {
    width:272px;
    max-width:calc(100vw - 52px)
  }
  .main-content {
    margin-left:0
  }
  .sidebar-nav-item {
    min-height:44px
  }
  .sidebar-logo {
    padding-left:48px
  }
  .layout>.main-content>.page-content {
    padding:24px 18px 32px
  }
  .layout-simple>.main-content>.page-content {
    padding:20px 16px
  }
  .top-bar {
    min-height:72px;
    padding:12px 18px 12px 68px;
    flex-direction:column;
    align-items:flex-start;
    gap:4px
  }
  .top-bar-left,.top-bar-right {
    max-width:100%;
    gap:10px
  }
  .top-bar-user {
    gap:16px;
    flex-wrap:wrap
  }
  .top-bar-username {
    overflow-wrap:anywhere
  }
  h1,.tw-page-header h1,.page-content>.container>.flex-between:first-child h1 {
    font-size:var(--fs-xl)
  }
  .stats-row,.market-stats {
    grid-template-columns:repeat(2,minmax(0,1fr))
  }
  .stat-value {
    font-size:var(--fs-xl)
  }
  .tw-page-header {
    margin-bottom:24px
  }
  .tw-page-actions {
    width:100%
  }
  .quick-actions .btn {
    flex:1 1 auto
  }
  .btn-sm,.btn-danger.btn-sm {
    min-height:44px
  }
  .market-filter-form {
    grid-template-columns:repeat(2,minmax(0,1fr))
  }
  .market-filter-search {
    grid-column:1/-1
  }
  .market-filter-panel {
    padding:18px
  }
  .market-filter-actions {
    grid-column:1/-1
  }
  .market-filter-actions .btn {
    flex:1
  }
  .bid-header,.bid-section {
    padding:20px
  }
  .bid-header-title {
    font-size:var(--fs-xl)
  }
  .bid-header-meta {
    grid-template-columns:minmax(0,1fr)
  }
  .bid-actions .btn {
    white-space:normal
  }
  .vault-evidence-grid {
    grid-template-columns:minmax(0,1fr)
  }
  .card-body {
    padding:20px
  }
  .card-header {
    padding:18px 20px
  }
  .auth-container,.onboarding-container {
    padding:0;
    min-height:auto
  }
  .auth-card,.onboarding-card {
    padding:28px 22px
  }
  .onboarding-progress {
    gap:6px
  }
  .onboarding-progress li {
    overflow-wrap:anywhere
  }
  .form-row {
    flex-wrap:wrap
  }
  .modal-content {
    padding:22px
  }
  .card-meta-item {
    flex-wrap:wrap;
    gap:4px
  }
  .archive-context-warning {
    padding:14px 16px
  }
}
@media(prefers-reduced-motion:reduce) {
  html {
    scroll-behavior:auto
  }
  *,*::before,*::after {
    animation:none!important;
    transition:none!important
  }
}
/* Narrow content grids and compact status details. */
.sr-only {
  position:absolute;
  width:1px;
  height:1px;
  padding:0;
  margin:-1px;
  overflow:hidden;
  clip:rect(0,0,0,0);
  white-space:nowrap;
  border:0
}
.compliance-header {
  gap:20px;
  flex-wrap:wrap;
  margin-bottom:28px;
  align-items:flex-start
}
.items-grid {
  grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));
  gap:18px
}
.compliance-card {
  border-radius:10px;
  padding:22px;
  border-color:var(--line);
  box-shadow:var(--shadow-sm)
}
.compliance-card:hover {
  box-shadow:var(--shadow-sm);
  border-color:#bdcdd3
}
.compliance-card.expired {
  border-left:3px solid var(--color-danger)
}
.compliance-card.expiring {
  border-left:3px solid var(--color-warning)
}
.compliance-card.valid {
  border-left:3px solid #b8cfc6
}
.type-section-header {
  border-bottom:1px solid var(--line)
}
.stat-value.warn {
  color:var(--color-warning)
}
.stat-value+.stat-label {
  margin-top:10px;
  margin-bottom:0
}
#scrapeStatus {
  font-size:var(--fs-sm);
  color:var(--color-gray-600);
  max-width:38ch
}
.market-table td[colspan] {
  padding:36px 24px;
  text-align:center;
  color:var(--color-gray-600)
}
.bid-status .badge {
  align-self:center
}
.bid-source-links {
  display:flex;
  flex-wrap:wrap;
  gap:12px 24px;
  padding:16px 20px;
  background:var(--surface-soft);
  border-radius:6px;
  margin-bottom:20px
}
@media(max-width:768px) {
  .form-row {
    grid-template-columns:minmax(0,1fr)
  }
  .compliance-header>.btn {
    width:100%
  }
  .card-actions>.btn {
    min-width:100px
  }
  .onboarding-progress li {
    font-size:var(--fs-sm)
  }
  .market-sort {
    min-height:44px
  }
  .market-table {
    min-width:860px
  }
}
/* Sources and freshness */
.source-eyebrow {
  font-size:var(--fs-sm);
  color:var(--color-teal);
  font-weight:600;
  margin:0 0 8px
}
.freshness-overview {
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:24px;
  padding:24px;
  background:var(--color-surface-soft);
  border:1px solid #d5e5e1;
  border-radius:10px;
  margin-bottom:22px
}
.freshness-overview h2 {
  font-size:var(--fs-md);
  margin:0 0 8px
}
.freshness-overview p {
  font-size:var(--fs-base);
  color:#47625f;
  margin:0;
  max-width:75ch
}
.source-status {
  display:inline-flex;
  align-items:center;
  border-radius:4px;
  padding:5px 9px;
  font-size:var(--fs-sm);
  line-height:1.4;
  white-space:nowrap;
  font-weight:500
}
.source-status-active {
  background:#e5f1e9;
  color:#245b40
}
.source-status-neutral {
  background:#e9eef2;
  color:#405d72
}
.source-status-attention {
  background:#faf0dc;
  color:#805719
}
.source-cards {
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:22px;
  margin-bottom:24px
}
.source-card {
  padding:26px;
  background:#fff;
  border:1px solid var(--line);
  border-radius:10px
}
.source-card-heading {
  display:flex;
  align-items:center;
  gap:12px;
  margin-bottom:18px
}
.source-card-heading h2 {
  margin:0;
  font-size:var(--fs-lg)
}
.source-monogram {
  width:42px;
  height:42px;
  display:grid;
  place-items:center;
  flex-shrink:0;
  border:1px solid #dbe6ea;
  border-radius:8px;
  background:#f2f6f7;
  color:#425e72;
  font-size:var(--fs-sm);
  font-weight:600
}
.source-card>p {
  font-size:var(--fs-base);
  color:var(--color-gray-600);
  margin-bottom:22px
}
.source-volume {
  display:flex;
  align-items:baseline;
  gap:12px;
  margin:24px 0
}
.source-volume strong {
  font-size:var(--fs-2xl);
  font-weight:650;
  letter-spacing:-.035em;
  font-variant-numeric:tabular-nums
}
.source-volume>span {
  font-size:var(--fs-sm);
  color:var(--color-gray-600)
}
.source-details {
  margin:0 0 20px
}
.source-details>div {
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:20px;
  border-top:1px solid #e8edef;
  padding:12px 0
}
.source-details dt,.source-details dd {
  font-size:var(--fs-sm);
  margin:0
}
.source-details dt {
  color:var(--color-gray-600)
}
.source-card .source-attention {
  font-size:var(--fs-sm);
  line-height:1.6;
  color:#805719;
  background:#fbf7ee;
  padding:12px 14px;
  border-radius:6px
}
.source-external {
  display:inline-flex;
  align-items:center;
  gap:12px;
  min-height:36px;
  font-size:var(--fs-sm);
  font-weight:600
}
.source-history {
  overflow:hidden;
  margin-bottom:28px
}
.source-check-list {
  margin:0;
  padding:0 24px
}
.source-check-list>div {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:24px;
  padding:20px 0;
  border-bottom:1px solid var(--line)
}
.source-check-list>div:last-child {
  border:0
}
.source-check-list dt>strong {
  display:block;
  font-size:var(--fs-base);
  font-weight:600;
  margin-bottom:4px
}
.source-check-list dt>span {
  font-size:var(--fs-sm);
  color:var(--color-gray-600)
}
.source-check-list dd {
  margin:0;
  font-size:var(--fs-sm);
  white-space:nowrap
}
.source-notes {
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:32px
}
.source-notes h2 {
  font-size:var(--fs-md);
  margin-bottom:10px
}
.source-notes p {
  font-size:var(--fs-sm);
  line-height:1.75;
  color:var(--color-gray-600);
  margin:0
}
@media(max-width:768px) {
  .freshness-overview {
    padding:20px;
    align-items:flex-start;
    flex-direction:column;
    gap:16px
  }
  .source-cards,.source-notes {
    grid-template-columns:minmax(0,1fr);
    gap:18px
  }
  .source-card {
    padding:22px
  }
  .source-volume {
    flex-wrap:wrap;
    gap:6px 12px
  }
  .source-check-list>div {
    align-items:flex-start;
    flex-direction:column;
    gap:10px
  }
  .source-check-list {
    padding:0 20px
  }
  .source-details>div {
    flex-wrap:wrap;
    gap:8px
  }
  .source-external {
    min-height:44px
  }
}
.card:has(>.card-body) {
  padding:0
}
.source-history.card {
  padding:0
}
.hero-score-badge.score-fair {
  background:#f0f3f5;
  color:var(--color-muted);
}
.hero-score-badge.score-good {
  background:var(--color-surface-soft);
  color:#35645f;
}
.source-check-list dd .source-status {
  display: table;
  margin: 8px 0 0 auto;
}
.hero-card .btn-skip {
  background: transparent;
  color: var(--color-muted);
  border: 1px solid transparent;
  box-shadow: none;
}
.hero-card .btn-skip:hover {
  background: var(--color-surface-soft);
  color: var(--color-ink);
  box-shadow: none;
}
.hero-score-badge.score-excellent,
.hero-score-badge.score-great,
.hero-score-badge.score-good,
.hero-score-badge.score-fair {
  background: #e5f2ef;
  color: #205f55;
}
@media (max-width: 768px) {
  .source-check-list dd .source-status { margin-left: 0; }
}

/* Keep search, analysis and settings controls within their page on small screens. */
.tender-search-toolbar {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto 200px;
  gap: var(--spacing-lg);
  margin-bottom: var(--spacing-lg);
  align-items: center;
}
.tender-filter-grid,
.tender-search-results {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--spacing-lg);
}
.tender-search-toolbar > div,
.tender-filter-grid > div,
.tender-search-results > .tender-card {
  min-width: 0;
}
.tender-search-toolbar select {
  width: 100%;
  max-width: 100%;
}
.tender-bot-workflow {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 16px;
}
.tender-bot-progress-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
  margin-top: 24px;
  text-align: left;
}
.intelligence-navigation {
  flex-wrap: wrap;
}
.intelligence-navigation a {
  display: flex;
  align-items: center;
  min-height: 44px;
}
.intelligence-metrics,
.intelligence-deadlines,
.intelligence-panels {
  display: grid;
  gap: var(--spacing-lg);
}
.intelligence-metrics {
  grid-template-columns: repeat(4, minmax(0, 1fr));
  margin-bottom: var(--spacing-2xl);
}
.intelligence-deadlines {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.intelligence-panels {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--spacing-xl);
  margin-bottom: var(--spacing-xl);
}
.intelligence-metrics > *,
.intelligence-deadlines > *,
.intelligence-panels > * {
  min-width: 0;
}
.alerts-container .save-bar {
  flex-wrap: wrap;
}
@media (max-width: 768px) {
  .tender-search-toolbar,
  .tender-filter-grid,
  .intelligence-deadlines,
  .intelligence-panels,
  .tender-bot-progress-grid {
    grid-template-columns: minmax(0, 1fr);
  }
  /* The existing view toggle writes grid columns inline; a vertical flex list
     keeps both of its modes readable on a narrow screen without changing JS. */
  #tenders-container.tender-search-results {
    display: flex;
    flex-direction: column;
  }
  .tender-search-results .tender-card-header,
  .tender-search-results .tender-card-footer {
    flex-wrap: wrap;
    gap: 8px;
  }
  .tender-search-results .tender-card-meta-row > span {
    overflow-wrap: anywhere;
  }
  .tender-bot-workflow,
  .intelligence-metrics {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .tender-bot-workflow {
    gap: 24px 16px;
  }
  .alerts-container .save-bar > .btn {
    width: 100%;
  }
}

/* Public account and preparation controls. */
.launch-status,.launch-allowance{background:#e9f3f1;color:#173e44;border:1px solid #bbd7d2;padding:14px 20px;font-size:var(--fs-sm);line-height:1.6;margin:0}
.launch-allowance{margin:0 0 20px;border-radius:8px}
.sidebar-secondary summary{cursor:pointer;list-style:revert}
.sidebar-secondary[open]{border-bottom:1px solid #ffffff30;padding-bottom:12px}
:focus-visible{outline:3px solid #1d827a;outline-offset:3px}
@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}

/* ══════════════════════════════════════════════════════════════════════════
   DESIGN SYSTEM LAYER (UI audit, Sept 2026). Loaded last; every value is a token
   from tokens.css. Components: shell, type, buttons, forms, tables, badges, cards,
   alerts, empty/loading states, dialogs, toasts, print. See docs/UI_AUDIT.md.
   ══════════════════════════════════════════════════════════════════════════ */

/* Base type */
body.ts-app { font-family: var(--font-sans); font-size: var(--fs-base); line-height: var(--lh-base); color: var(--color-ink);
  background: var(--color-bg); }
:where(.ts-app) h1 { font-size: var(--fs-2xl); line-height: var(--lh-tight); font-weight: 650; letter-spacing: -.02em; color: var(--color-ink); }
:where(.ts-app) h2 { font-size: var(--fs-lg); line-height: var(--lh-snug); font-weight: 650; letter-spacing: -.015em; }
:where(.ts-app) h3 { font-size: var(--fs-md); line-height: var(--lh-snug); font-weight: 650; letter-spacing: -.01em; }
:where(.ts-app) h4, :where(.ts-app) h5, :where(.ts-app) h6 { font-size: var(--fs-base); line-height: var(--lh-snug); font-weight: 650; letter-spacing: 0; }
:where(.ts-app) .page-content { overflow-wrap: break-word; }
:where(.ts-app) a { color: var(--color-primary); }
:where(.ts-app) a:hover { color: var(--color-primary-dark); }
:where(.ts-app) code, :where(.ts-app) kbd { font-family: var(--font-mono); font-size: .9em; }
.page-subtitle, .text-muted { color: var(--color-muted); }
@media (max-width: 768px) {
  :where(.ts-app) h1, .tw-page-header h1 { font-size: var(--fs-xl); }
  :where(.ts-app) h2 { font-size: var(--fs-md); }
}

/* Focus: always visible, 3:1 against the surface it sits on */
:where(.ts-app) :focus-visible { outline: 3px solid var(--color-focus); outline-offset: 2px; }
.ts-app .sidebar :focus-visible, .ts-app .tw-nav-toggle:focus-visible, .tw-skip-link:focus-visible { outline-color: var(--color-focus-on-dark); }
#tw-main:focus { outline: none; }
.tw-skip-link { background: var(--color-brand); color: #fff; }
.tw-skip-link:focus { left: var(--space-2); top: var(--space-2); border-radius: var(--radius-sm); }

/* App shell: sidebar */
.ts-app .sidebar { width: var(--sidebar-width); background: var(--color-brand); padding: var(--space-5) var(--space-3) var(--space-3);
  display: flex; flex-direction: column; gap: var(--space-2); overflow-y: auto; }
.ts-app .main-content { margin-left: var(--sidebar-width); min-width: 0; }
.ts-app .layout-simple .main-content { margin-left: 0; }
.sidebar-logo { display: flex; align-items: center; gap: var(--space-3); padding: 0 var(--space-2) var(--space-4); margin: 0 0 var(--space-2);
  border-bottom: 1px solid rgba(255,255,255,.12); color: #fff; font-size: var(--fs-lg); font-weight: 750; letter-spacing: -.03em; text-decoration: none; }
.sidebar-logo:hover, .sidebar-logo span { color: #fff; }
.sidebar-logo svg { flex: none; }
.sidebar-nav { gap: 2px; overflow: visible; }
.ts-app .sidebar-section-label { margin: var(--space-3) 0 0; padding: var(--space-2) var(--space-3) var(--space-1); font-size: var(--fs-xs);
  font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--color-on-dark-muted); }
.ts-app .sidebar-nav-item { display: flex; align-items: center; gap: var(--space-3); min-height: 40px; padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-sm); color: var(--color-on-dark); font-size: var(--fs-sm); font-weight: 500; line-height: var(--lh-snug); text-decoration: none; }
.ts-app .sidebar-nav-item:hover { background: rgba(255,255,255,.08); color: #fff; }
.ts-app .sidebar-nav-item.active { background: var(--color-primary-soft); color: var(--color-primary-dark); font-weight: 600; }
.ts-app .sidebar-nav-item.active:hover { color: var(--color-primary-dark); }
.sidebar-badge { margin-left: auto; min-width: 24px; padding: 0 var(--space-2); border-radius: var(--radius-pill); background: var(--color-accent);
  color: var(--color-ink); font-size: var(--fs-xs); font-weight: 700; line-height: 20px; text-align: center; }
.sidebar-secondary { margin-top: var(--space-2); }
.sidebar-secondary > summary { list-style: none; cursor: pointer; }
.sidebar-secondary > summary::-webkit-details-marker { display: none; }
.sidebar-secondary > summary::after { content: ""; margin-left: auto; width: 8px; height: 8px; border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor; transform: rotate(45deg); opacity: .7; }
.sidebar-secondary[open] > summary::after { transform: rotate(-135deg); }
.sidebar-secondary[open] { border-bottom: 0; padding-bottom: 0; }
.sidebar-secondary > a.sidebar-nav-item { padding-left: calc(var(--space-3) + 30px); }
.sidebar-secondary > a.sidebar-nav-item svg { display: none; }
.sidebar-recent { border-top: 1px solid rgba(255,255,255,.12); padding-top: var(--space-1); }
.sidebar-recent[hidden] { display: none; }
.sidebar-recent-item { display: block; padding: 6px var(--space-3); color: var(--color-on-dark-muted); font-size: var(--fs-sm); text-decoration: none;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; border-radius: var(--radius-sm); }
.sidebar-recent-item:hover { color: #fff; background: rgba(255,255,255,.08); }
.ts-app .sidebar-account { margin-top: auto; padding-top: var(--space-3); border-top: 1px solid rgba(255,255,255,.12); }
.ts-app .sidebar-avatar { background: var(--color-brand-2); color: #fff; border-radius: var(--radius-sm); font-size: var(--fs-sm); }
.ts-app .sidebar-company-name { color: #fff; font-size: var(--fs-sm); }
.ts-app .sidebar-company-plan { color: var(--color-on-dark-muted); font-size: var(--fs-xs); text-transform: none; }
.ts-app .sidebar-logout { color: var(--color-on-dark); width: 40px; height: 40px; }

/* App shell: top bar and page area */
.ts-app .top-bar { display: flex; align-items: center; justify-content: space-between; gap: var(--space-4); min-height: 60px; height: auto;
  padding: var(--space-3) var(--page-gutter); background: var(--color-surface); border-bottom: 1px solid var(--color-line); box-shadow: none; }
.top-bar-company { margin: 0; font-size: var(--fs-sm); font-weight: 600; color: var(--color-ink); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ts-app .top-bar-user { display: flex; align-items: center; gap: var(--space-4); flex: none; }
.ts-app .top-bar-username, .ts-app .logout-btn { font-size: var(--fs-sm); color: var(--color-muted); font-weight: 400; }
.ts-app .logout-btn { min-height: 40px; display: inline-flex; align-items: center; text-decoration: underline; text-underline-offset: 3px; }
.ts-app .layout > .main-content > .page-content { padding: var(--space-8) var(--page-gutter) var(--space-12); overflow: visible; }
.ts-app .layout-simple > .main-content > .page-content { padding: 0; }
.page-content > .container, .page-content > div > .container { max-width: var(--content-max); }
.tw-flash-stack { max-width: var(--content-max); margin: 0 auto var(--space-4); display: grid; gap: var(--space-2); }
.ts-simple .tw-flash-stack { position: fixed; top: var(--space-4); left: 50%; transform: translateX(-50%); width: min(560px, calc(100% - 32px)); z-index: 50; }

@media (max-width: 1024px) {
  :root { --sidebar-width: 220px; --page-gutter: 24px; }
}
@media (max-width: 768px) {
  /* Closed drawer is hidden from keyboard and screen readers, not just moved off screen */
  .ts-app .sidebar { width: min(288px, calc(100vw - 48px)); transform: translateX(-105%); visibility: hidden; z-index: 1001;
    transition: transform var(--duration) var(--ease), visibility 0s linear var(--duration); }
  .ts-app .sidebar.open { transform: none; visibility: visible; box-shadow: var(--shadow-lg); transition: transform var(--duration) var(--ease); }
  .ts-app .main-content { margin-left: 0; }
  /* A real top bar on phones: it stays put and holds the fixed menu button, so page content scrolls beneath it
     instead of under the button (the button cut "Tender brief" to "ender brief" on the live site, 29 Sep 2026). */
  .ts-app .top-bar { min-height: 60px; padding: var(--space-2) var(--page-gutter) var(--space-2) 64px; flex-direction: row; align-items: center;
    position: sticky; top: 0; z-index: 999; background: var(--color-surface); }
  :root:has(body.ts-app .top-bar) { scroll-padding-top: 72px; }
  .ts-app .top-bar-username { display: none; }
  .ts-app .layout > .main-content > .page-content { padding: var(--space-5) var(--page-gutter) var(--space-10); }
  .ts-app .tw-nav-toggle { top: 8px; left: 8px; width: 44px; height: 44px; min-height: 44px; background: var(--color-brand); border-radius: var(--radius-sm); }
  .ts-app .sidebar-logo { padding-left: var(--space-2); }
  body.tw-nav-open { overflow: hidden; }
}

/* Page header and breadcrumbs */
.tw-page-header { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--space-4) var(--space-6); flex-wrap: wrap;
  margin-bottom: var(--space-6); }
.tw-page-header h1 { margin: 0; }
.tw-page-header .page-subtitle { margin: var(--space-2) 0 0; font-size: var(--fs-base); max-width: 72ch; }
.tw-breadcrumbs { display: flex; flex-wrap: wrap; gap: var(--space-1) var(--space-2); font-size: var(--fs-sm); margin-bottom: var(--space-4); color: var(--color-muted); }
.section { margin-bottom: var(--space-8); }

/* Buttons: primary, outline, secondary, danger, success, link; sm / default / lg */
.ts-app .btn, :where(.ts-app) button:where(:not(.alert-close, .tw-tip, .sk-followup, .btn-link)),
:where(.ts-app) input[type="submit"], :where(.ts-app) input[type="button"] {
  min-height: var(--control-height); padding: 10px var(--space-4); border-radius: var(--radius-sm); font-family: var(--font-sans);
  font-size: var(--fs-sm); font-weight: 600; line-height: var(--lh-snug); gap: var(--space-2); white-space: normal; text-align: center;
  transition: background-color var(--duration) var(--ease), border-color var(--duration) var(--ease), color var(--duration) var(--ease); }
.ts-app .btn { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; border: 1px solid transparent; }
.ts-app .btn-primary, :where(.ts-app) button[type="submit"]:where(:not(.btn-outline, .btn-secondary, .btn-danger, .btn-success, .btn-link, .btn-ghost)) {
  background: var(--color-primary); border-color: var(--color-primary); color: #fff; }
.ts-app .btn-primary:hover, :where(.ts-app) button[type="submit"]:where(:not(.btn-outline, .btn-secondary, .btn-danger, .btn-success, .btn-link, .btn-ghost)):hover {
  background: var(--color-primary-dark); border-color: var(--color-primary-dark); color: #fff; box-shadow: none; }
.ts-app .btn.btn-outline, .ts-app .btn-outline { background: var(--color-surface); border: 1px solid var(--color-line-strong); color: var(--color-ink); }
.ts-app .btn.btn-outline:hover, .ts-app .btn-outline:hover { background: var(--color-primary-soft); border-color: var(--color-primary); color: var(--color-primary-dark); }
.ts-app .btn.btn-secondary, .ts-app .btn-secondary { background: var(--color-surface-muted); border: 1px solid var(--color-line); color: var(--color-ink); }
.ts-app .btn.btn-secondary:hover, .ts-app .btn-secondary:hover { background: var(--color-line); color: var(--color-ink); }
.ts-app .btn.btn-danger, .ts-app .btn-danger { background: var(--color-danger); border-color: var(--color-danger); color: #fff; }
.ts-app .btn.btn-danger:hover, .ts-app .btn-danger:hover { background: #8f2b25; border-color: #8f2b25; color: #fff; }
.ts-app .btn.btn-success, .ts-app .btn-success { background: var(--color-success); border-color: var(--color-success); color: #fff; }
.ts-app .btn-sm, .ts-app .btn.btn-sm { min-height: var(--control-height-sm); padding: 6px var(--space-3); font-size: var(--fs-sm); }
.ts-app .btn-lg, .ts-app .btn.btn-lg { min-height: 48px; padding: var(--space-3) var(--space-5); font-size: var(--fs-base); }
.ts-app .btn-block { width: 100%; }
.ts-app .btn:disabled, :where(.ts-app) button:disabled, .ts-app .btn[aria-disabled="true"] { opacity: .55; cursor: not-allowed; }
:where(.ts-app) button.loading, .ts-app .btn.loading { position: relative; color: transparent !important; }
:where(.ts-app) button.loading::after, .ts-app .btn.loading::after { content: ""; position: absolute; inset: 0; margin: auto; width: 16px; height: 16px;
  border: 2px solid #fff; border-right-color: transparent; border-radius: 50%; animation: tw-spin .8s linear infinite; }
.ts-app .btn-outline.loading::after, .ts-app .btn-secondary.loading::after { border-color: var(--color-ink); border-right-color: transparent; }
@keyframes tw-spin { to { transform: rotate(360deg); } }
@media (max-width: 768px) { .ts-app .btn-sm, .ts-app .btn.btn-sm { min-height: var(--control-height); } }

/* Forms */
:where(.ts-app) label, .ts-app .form-label { display: block; font-size: var(--fs-sm); font-weight: 600; line-height: var(--lh-base); color: var(--color-ink); margin-bottom: 6px; }
:where(.ts-app) input:where(:not([type="checkbox"], [type="radio"], [type="hidden"], [type="range"], [type="submit"], [type="button"], [type="file"])),
:where(.ts-app) select, :where(.ts-app) textarea {
  min-height: var(--control-height); padding: 10px var(--space-3); font-family: inherit; font-size: var(--fs-base); line-height: var(--lh-snug);
  color: var(--color-ink); background: var(--color-surface); border: 1px solid var(--color-line-strong); border-radius: var(--radius-sm); }
:where(.ts-app) input:focus-visible, :where(.ts-app) select:focus-visible, :where(.ts-app) textarea:focus-visible { border-color: var(--color-focus); }
:where(.ts-app) input[aria-invalid="true"], :where(.ts-app) select[aria-invalid="true"], :where(.ts-app) textarea[aria-invalid="true"], .ts-app .is-invalid { border-color: var(--color-danger); }
:where(.ts-app) input::placeholder, :where(.ts-app) textarea::placeholder { color: var(--color-muted); opacity: 1; }
:where(.ts-app) input[type="checkbox"], :where(.ts-app) input[type="radio"] { accent-color: var(--color-primary); width: 18px; height: 18px; }
:where(.ts-app) input[type="file"] { font-size: var(--fs-sm); max-width: 100%; }
.form-group { margin-bottom: var(--space-5); }
.form-help, .form-hint, .help-text, :where(.ts-app) small { font-size: var(--fs-sm); line-height: var(--lh-base); color: var(--color-muted); }
.form-error, .field-error { color: var(--color-danger); font-size: var(--fs-sm); margin-top: var(--space-1); }

/* Cards, stats */
.ts-app .card, .ts-app .stat-card { background: var(--color-surface); border: 1px solid var(--color-line); border-radius: var(--radius); box-shadow: var(--shadow-sm); }
.ts-app .card-header { padding: var(--space-4) var(--space-6); background: var(--color-surface-soft); border-bottom: 1px solid var(--color-line); }
.ts-app .card-body { padding: var(--space-6); }
.ts-app .stat-card { padding: var(--space-5); }
.ts-app .stat-label { font-size: var(--fs-sm); color: var(--color-muted); font-weight: 500; text-transform: none; letter-spacing: 0; }
.ts-app .stat-value { font-size: var(--fs-2xl); font-weight: 650; color: var(--color-ink); line-height: var(--lh-tight); }
@media (max-width: 768px) { .ts-app .card-header { padding: var(--space-3) var(--space-4); } .ts-app .card-body { padding: var(--space-4); }
  .ts-app .stat-value { font-size: var(--fs-xl); } }

/* Tables: readable on every width. Wide tables scroll inside their own box. */
:where(.ts-app) table { border-collapse: collapse; width: 100%; }
:where(.ts-app) th { font-size: var(--fs-sm); font-weight: 600; color: var(--color-body); text-align: left; }
:where(.ts-app) td { font-size: var(--fs-sm); }
.table-wrap, .ts-table-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; max-width: 100%; }
:where(.ts-app) td a, :where(.ts-app) tbody th a { text-decoration: underline; text-underline-offset: 3px; text-decoration-thickness: 1px; }
:where(.ts-app) td a.btn, :where(.ts-app) th a.btn { text-decoration: none; }
@media (max-width: 900px) {
  /* Any table wider than the screen scrolls inside its own box (ui.js makes it keyboard-focusable) */
  .ts-app main table:not(.sk-gantt) { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; max-width: 100%; }
}

/* Badges and tags: text always carries the meaning */
.ts-app .badge, .ts-app .tag, .ts-app .tw-badge { display: inline-flex; align-items: center; gap: 4px; font-size: var(--fs-xs); font-weight: 600;
  line-height: 1.5; padding: 2px var(--space-2); border-radius: var(--radius-pill); white-space: nowrap; }
.ts-app .tag { background: var(--color-surface-muted); border: 1px solid var(--color-line); color: var(--color-body); }
.badge-success, .tw-badge-success { background: var(--color-success-soft); color: var(--color-success); }
.badge-warning, .tw-badge-warning { background: var(--color-warning-soft); color: var(--color-warning); }
.badge-danger, .badge-error, .tw-badge-danger { background: var(--color-danger-soft); color: var(--color-danger); }
.badge-info, .tw-badge-info { background: var(--color-info-soft); color: var(--color-info); }

/* Alerts and flash messages */
.ts-app .alert { display: flex; align-items: flex-start; gap: var(--space-3); padding: var(--space-3) var(--space-4); margin: 0 0 var(--space-4);
  border: 1px solid; border-left-width: 4px; border-radius: var(--radius-sm); font-size: var(--fs-sm); line-height: var(--lh-base); }
.ts-app .alert-success { background: var(--color-success-soft); border-color: var(--color-success); color: #1a4f36; }
.ts-app .alert-error { background: var(--color-danger-soft); border-color: var(--color-danger); color: #6d1f19; }
.ts-app .alert-warning { background: var(--color-warning-soft); border-color: var(--color-warning); color: #5f3d0b; }
.ts-app .alert-info { background: var(--color-info-soft); border-color: var(--color-info); color: #173a59; }
.alert-icon { font-weight: 700; flex: none; width: 20px; height: 20px; display: inline-grid; place-items: center; border-radius: 50%; border: 1.5px solid currentColor;
  font-size: var(--fs-xs); line-height: 1; margin-top: 2px; }
.alert-text { flex: 1; min-width: 0; }
.ts-app .alert-close { margin: -6px -8px -6px auto; min-width: 36px; min-height: 36px; padding: 0; background: transparent; border: 0; color: inherit;
  font-size: var(--fs-lg); line-height: 1; cursor: pointer; opacity: .8; }
.ts-app .alert-close:hover { opacity: 1; }

/* Empty, loading and error states */
.empty-state, .tw-empty { padding: var(--space-10) var(--space-6); border: 1px dashed var(--color-line-strong); border-radius: var(--radius); background: var(--color-surface);
  text-align: center; color: var(--color-muted); }
.empty-state h2, .empty-state h3, .tw-empty h2, .tw-empty h3 { font-size: var(--fs-md); color: var(--color-ink); margin: 0 0 var(--space-2); }
.empty-state p, .tw-empty p { font-size: var(--fs-base); max-width: 62ch; margin: 0 auto var(--space-4); }
.tw-skeleton { background: linear-gradient(90deg, var(--color-surface-muted) 0%, var(--color-line) 50%, var(--color-surface-muted) 100%);
  background-size: 200% 100%; animation: tw-shimmer 1.4s linear infinite; border-radius: 4px; min-height: 14px; }
@keyframes tw-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
.tw-skeleton.lg { min-height: 24px; }
.tw-skeleton.line { min-height: 12px; margin: 6px 0; }
.tw-skeleton.circle { border-radius: 50%; width: 36px; height: 36px; min-height: 36px; }
.tw-skeleton-block { display: flex; flex-direction: column; gap: var(--space-2); }
.tw-error-page { max-width: 560px; margin: var(--space-16) auto; padding: 0 var(--page-gutter); text-align: center; }
.tw-error-page .tw-error-code { font-size: var(--fs-sm); font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--color-muted); margin: 0 0 var(--space-2); }
.tw-error-page h1 { margin: 0 0 var(--space-3); }
.tw-error-page p { color: var(--color-muted); margin: 0 0 var(--space-6); }
.tw-error-page .tw-error-actions { display: flex; gap: var(--space-3); justify-content: center; flex-wrap: wrap; }

/* Tooltip (_macros.html info_tip) */
.tw-tip { display: inline-grid; place-items: center; width: 18px; height: 18px; min-height: 18px; padding: 0; border-radius: 50%; border: 0;
  background: var(--color-line); color: var(--color-body); font-size: var(--fs-xs); font-weight: 700; cursor: help; position: relative; margin-left: 4px; vertical-align: 1px; }
.tw-tip:hover, .tw-tip:focus-visible { background: var(--color-primary); color: #fff; }
.tw-tip:hover::after, .tw-tip:focus::after { content: attr(data-tip); position: absolute; bottom: calc(100% + 8px); left: 50%; transform: translateX(-50%);
  background: var(--color-ink); color: #fff; padding: var(--space-2) var(--space-3); border-radius: var(--radius-sm); font-size: var(--fs-sm); font-weight: 400;
  line-height: var(--lh-snug); white-space: normal; width: max-content; max-width: min(280px, 80vw); z-index: 1000; box-shadow: var(--shadow-md); text-align: left; }

/* Dialogs, command palette, toasts */
.tw-modal { position: fixed; inset: 0; z-index: 9998; background: rgba(20, 35, 31, .55); display: flex; align-items: center; justify-content: center; padding: var(--space-4); }
.tw-modal[hidden] { display: none; }
.tw-modal--top { align-items: flex-start; padding-top: 10vh; }
.tw-modal-panel { background: var(--color-surface); width: 100%; max-width: 440px; border-radius: var(--radius-lg); padding: var(--space-6); box-shadow: var(--shadow-lg); }
.tw-modal-title { font-size: var(--fs-md); margin: 0 0 var(--space-2); }
.tw-modal-text { margin: 0 0 var(--space-5); color: var(--color-muted); font-size: var(--fs-sm); }
.tw-modal-actions { display: flex; gap: var(--space-2); justify-content: flex-end; flex-wrap: wrap; }
.tw-cmdk-panel { max-width: 560px; padding: 0; overflow: hidden; }
.ts-app input#tw-cmdk-input { border: 0; border-bottom: 1px solid var(--color-line); border-radius: 0; padding: var(--space-4) var(--space-5); min-height: 56px; }
.tw-cmdk-results { max-height: 50vh; overflow: auto; padding: var(--space-2); }
.tw-cmdk-option { display: block; padding: 10px var(--space-3); border-radius: var(--radius-sm); color: var(--color-ink); text-decoration: none; }
.tw-cmdk-option[aria-selected="true"] { background: var(--color-primary-soft); color: var(--color-primary-dark); }
.tw-cmdk-empty { padding: var(--space-6); text-align: center; color: var(--color-muted); margin: 0; }
.tw-shortcut-list { display: grid; grid-template-columns: auto 1fr; gap: var(--space-2) var(--space-4); margin: 0 0 var(--space-5); font-size: var(--fs-sm); }
.tw-shortcut-list dd { margin: 0; }
.tw-shortcut-list kbd { background: var(--color-surface-muted); border: 1px solid var(--color-line); border-radius: 4px; padding: 1px 6px; }
.tw-toast-stack { position: fixed; bottom: var(--space-6); right: var(--space-6); z-index: 9999; display: flex; flex-direction: column; gap: var(--space-2);
  pointer-events: none; max-width: calc(100vw - 32px); }
.tw-toast { display: flex; align-items: center; gap: var(--space-3); max-width: 420px; padding: var(--space-3) var(--space-5); border-radius: var(--radius);
  box-shadow: var(--shadow-lg); color: #fff; font-size: var(--fs-sm); pointer-events: auto; transform: translateY(12px); opacity: 0;
  transition: transform var(--duration) var(--ease), opacity var(--duration) var(--ease); }
.tw-toast.is-in { transform: none; opacity: 1; }
.tw-toast--success { background: var(--color-success); }
.tw-toast--error { background: var(--color-danger); }
.tw-toast--warning { background: var(--color-warning); }
.tw-toast--info { background: var(--color-brand); }
.tw-toast-icon { font-weight: 700; }
@media (max-width: 768px) { .tw-toast-stack { right: var(--space-4); left: var(--space-4); bottom: var(--space-4); } .tw-toast { max-width: none; } }

/* Print: exports preview and any page print cleanly, without the app chrome */
@media print {
  .sidebar, .top-bar, .tw-nav-toggle, .tw-nav-overlay, .quick-actions, .bid-card-actions, .tw-toast-stack, .tw-flash-stack,
  .tw-modal, .no-print, .print-bar, .ts-stepper, .ts-run-form, .tw-skip-link, .tw-breadcrumbs, form button, .btn { display: none !important; }
  .layout { display: block !important; }
  .ts-app .main-content { margin: 0 !important; }
  .ts-app .layout > .main-content > .page-content, .container { max-width: 100% !important; padding: 0 !important; margin: 0 !important; }
  body.ts-app { background: #fff !important; font-size: 11pt; }
  .card, .stat-card, .ts-panel, .ts-card, .sk-card, table { box-shadow: none !important; }
  .card, .ts-panel, .ts-card { border: 1px solid var(--color-line-strong) !important; }
  a { color: inherit !important; }
  h1, h2, h3 { break-after: avoid; }
  tr, .bid-card, .section, .ts-card, .sk-section { break-inside: avoid; }
  :where(.ts-app) table { display: table !important; overflow: visible !important; }
}

/* Dashboard match cards: the fit label sits above the title instead of overlapping it */
.ts-app .hero-card { position: relative; display: flex; flex-direction: column; }
.ts-app .hero-score-badge { position: static; align-self: flex-start; display: inline-flex; align-items: center; width: auto; height: auto;
  min-height: 26px; margin: 0 0 var(--space-3); padding: 2px var(--space-2); border-radius: var(--radius-pill); font-size: var(--fs-xs);
  font-weight: 600; background: var(--color-primary-soft); color: var(--color-primary-dark); box-shadow: none; }
.ts-app .hero-card-title { margin: 0 0 var(--space-2); font-size: var(--fs-md); }
.ts-app .hero-btn-row { margin-top: auto; padding-top: var(--space-4); display: flex; flex-wrap: wrap; gap: var(--space-2); }
.ts-app .hero-btn-row > * { flex: 1 1 140px; }
.ts-app .hero-btn-row form button { width: 100%; }
.dashboard-progress p { margin: 6px 0 0; color: var(--color-muted); }
.stat-change { font-size: var(--fs-sm); color: var(--color-muted); margin-top: var(--space-2); }

/* Charts that cannot load (blocked CDN, offline) are replaced by a note; the page's tables hold the same figures */
.no-charts .chart-card canvas { display: none; }
.no-charts .chart-card::after { content: "This chart could not load. The same figures are in the tables on this page."; display: block;
  padding: var(--space-4); color: var(--color-muted); font-size: var(--fs-sm); }

/* Detail page layout helpers (tender detail and similar two-column pages) */
.ts-detail-grid { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: var(--space-8); align-items: start; }
.ts-fact-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-4); margin-bottom: var(--space-6); }
.ts-box { background: var(--color-surface); padding: var(--space-6); border-radius: var(--radius); border: 1px solid var(--color-line);
  margin-bottom: var(--space-6); min-width: 0; }
.ts-fact-grid > .ts-box { margin-bottom: 0; }
@media (max-width: 1024px) { .ts-detail-grid { grid-template-columns: minmax(0, 1fr); gap: var(--space-6); } }
@media (max-width: 560px) { .ts-fact-grid { grid-template-columns: minmax(0, 1fr); } .ts-box { padding: var(--space-4); } }

/* Vault list item actions wrap instead of pushing past the card on small screens */
.ts-app .card-header { flex-wrap: wrap; gap: var(--space-3); }
.ts-app .vault-item-actions { display: flex; flex-wrap: wrap; gap: var(--space-2); align-items: center; min-width: 0; }
.ts-app .vault-item-actions form { display: inline-flex; }

/* Sub-navigation (tabs between related pages) */
.ts-subnav { display: flex; flex-wrap: wrap; gap: var(--space-2); margin: 0 0 var(--space-6); }
.ts-subnav a { display: inline-flex; align-items: center; min-height: 40px; padding: 0 var(--space-4); border: 1px solid var(--color-line-strong);
  border-radius: var(--radius-pill); color: var(--color-ink); background: var(--color-surface); font-size: var(--fs-sm); font-weight: 500; text-decoration: none; }
.ts-subnav a:hover { border-color: var(--color-primary); color: var(--color-primary-dark); }
.ts-subnav a[aria-current="page"] { background: var(--color-primary); border-color: var(--color-primary); color: #fff; font-weight: 600; }

/* Narrow single-column pages (account, support) */
.ts-narrow { max-width: 760px; margin-inline: 0; }
.ts-standalone { margin: var(--space-12) auto; padding: 0 var(--page-gutter); }
.ts-standalone .auth-logo { display: inline-block; margin-bottom: var(--space-6); }
.ts-box > h2:first-child, .ts-box > h3:first-child { margin-top: 0; }
.ts-box > :last-child { margin-bottom: 0; }
.ts-link-row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-5); }

/* One stat card style everywhere (pages used to restyle these with dark or gold one-offs) */
.ts-app .stat-card { color: var(--color-ink); text-align: left; background: var(--color-surface); border: 1px solid var(--color-line); }
.ts-app .stat-card-value, .ts-app .bid-stat-value { font-size: var(--fs-2xl); font-weight: 650; line-height: var(--lh-tight); color: var(--color-ink);
  margin: 0 0 var(--space-1); font-variant-numeric: tabular-nums; }
.ts-app .stat-card-label, .ts-app .bid-stat-label { font-size: var(--fs-sm); font-weight: 500; color: var(--color-muted); text-transform: none; letter-spacing: 0; }
.ts-app .stat-card-value + .stat-card-label { margin-top: 0; }

/* Your activity: bid funnel */
.ts-funnel-row { display: grid; grid-template-columns: 120px minmax(0, 1fr) 3ch; align-items: center; gap: var(--space-3); }
.ts-funnel-label { font-size: var(--fs-sm); font-weight: 500; text-align: right; }
.ts-funnel-track { height: 20px; background: var(--color-surface-soft); border-radius: var(--radius-sm); overflow: hidden; }
.ts-funnel-bar { height: 100%; border-radius: var(--radius-sm); min-width: 2px; }
.ts-funnel-count { font-size: var(--fs-sm); font-weight: 600; font-variant-numeric: tabular-nums; }
@media (max-width: 560px) { .ts-funnel-row { grid-template-columns: 90px minmax(0, 1fr) 3ch; } }

/* A label and control on one line (sort pickers) */
.ts-inline-field { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-3); margin-bottom: var(--space-6); }
.ts-inline-field label { margin: 0; }
.ts-inline-field select { width: auto; min-width: 220px; max-width: 100%; }

/* Onboarding: brand bar above the progress steps */
.onboarding-brand { display: flex; align-items: center; justify-content: space-between; gap: var(--space-4); max-width: 760px;
  margin: var(--space-6) auto var(--space-4); padding: 0 var(--page-gutter); }
.onboarding-brand .auth-logo { margin: 0; }
.onboarding-signout { font-size: var(--fs-sm); color: var(--color-muted); }

/* Tables that are wider than their column scroll inside themselves (ui.js adds the class) */
.ts-table-overflow { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; max-width: 100%; }

/* Tender documents list (tenders/_documents.html) */
.ts-doc-list { width: 100%; border-collapse: collapse; font-size: var(--fs-sm); }
.ts-doc-list th { padding: var(--space-2) var(--space-3); text-align: left; border-bottom: 2px solid var(--color-line); }
.ts-doc-list td { padding: var(--space-3); border-bottom: 1px solid var(--color-line); vertical-align: top; }
.ts-doc-list .ts-doc-action, .ts-doc-list .ts-doc-action-head { text-align: right; }
.ts-doc-title { font-weight: 600; color: var(--color-ink); }
.ts-doc-desc { color: var(--color-muted); margin-top: var(--space-1); }
.ts-doc-link { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; color: var(--color-primary); text-decoration: underline;
  text-underline-offset: 3px; }
.ts-doc-link--portal { min-height: 36px; padding: 4px var(--space-3); border: 1px solid var(--color-line-strong); border-radius: var(--radius-sm);
  background: var(--color-surface); color: var(--color-ink); text-decoration: none; white-space: normal; text-align: left; }
.ts-doc-link--portal:hover { border-color: var(--color-primary); color: var(--color-primary-dark); }
.ts-ext-icon { flex: none; }
.ts-doc-note { font-size: var(--fs-sm); color: var(--color-muted); margin: var(--space-3) 0 0; }
.ts-doc-access { margin-top: var(--space-4); padding: var(--space-4); background: var(--color-surface-soft); border-radius: var(--radius); }
.ts-doc-access h3 { font-size: var(--fs-base); margin: 0 0 var(--space-2); }
.ts-doc-access-text { white-space: pre-wrap; margin: 0; }
.ts-doc-empty { padding: var(--space-4); color: var(--color-muted); }
@media (max-width: 640px) {
  .ts-app main table.ts-doc-list, .ts-doc-list tbody, .ts-doc-list tr, .ts-doc-list td { display: block; width: 100%; overflow: visible; }
  .ts-doc-list thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
  .ts-doc-list tr { padding: var(--space-3) 0; border-bottom: 1px solid var(--color-line); }
  .ts-doc-list td { border: 0; padding: var(--space-1) 0; }
  .ts-doc-list td[data-label="Format"]::before { content: "Format: "; color: var(--color-muted); }
  .ts-doc-list .ts-doc-action { text-align: left; padding-top: var(--space-2); }
}
/* VAT basis beside a money value */
.ts-vat { margin-left: 4px; font-size: var(--fs-xs); font-weight: 500; color: var(--color-muted); white-space: nowrap; }
.source-card .source-coverage-note { font-size: var(--fs-sm); color: var(--color-muted); margin: var(--space-3) 0 0; }
/* Early-stage notices (pipeline, preliminary market engagement): not yet open for bids */
.ts-notice-stage { display: inline-block; margin: var(--space-1) var(--space-2) 0 0; padding: 0 var(--space-2); border: 1px solid var(--color-info);
  border-radius: var(--radius-pill); color: var(--color-info); background: var(--color-info-soft); font-size: var(--fs-xs); font-weight: 600; }
/* Onboarding: one h1 per step, sections with h2 titles (final audit, 28 Sep 2026) */
.auth-card-header h1, .step-header h1 { font-size: var(--fs-xl); color: var(--color-ink); margin: 0 0 var(--space-3); }
.onboarding-section, .onboarding-team { margin-bottom: var(--space-8); padding-top: var(--space-6); border-top: 1px solid var(--color-line); }
.onboarding-team { border-top: 0; padding-top: 0; }
.onboarding-section-title { font-size: var(--fs-md); margin: 0 0 var(--space-3); }
.onboarding-section > .ts-muted { margin: 0 0 var(--space-4); font-size: var(--fs-sm); }
.onboarding-section .checkbox-item { align-items: flex-start; gap: var(--space-2); margin-bottom: var(--space-4); }
.onboarding-section .checkbox-item input { margin-top: 3px; }
.onboarding-section .checkbox-item label { margin: 0; cursor: pointer; flex: 1; }
.onboarding-section .checkbox-item .form-hint { display: block; font-weight: 400; margin-top: var(--space-1); }
.onboarding-subfield { margin: 0 0 var(--space-4) var(--space-6); padding-left: var(--space-4); border-left: 2px solid var(--color-primary); }
.onboarding-subfield[hidden] { display: none; }
.onboarding-standing { margin: 0 0 var(--space-3); padding-left: 1.2rem; font-size: var(--fs-sm); }
.onboarding-team-list { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--space-3); }
.onboarding-team-list li { display: flex; justify-content: space-between; align-items: center; gap: var(--space-3); flex-wrap: wrap;
  padding: var(--space-4); background: var(--color-surface-muted); border-radius: var(--radius-sm); }
.onboarding-team-list p { margin: 0; }
.onboarding-team-name { font-weight: 600; color: var(--color-ink); }
