/* ProcureValor tool styles. CI v2 (Markensystem_CI.md, released 02.10.2026): every colour comes from the design
   tokens --pv-* (core/static/core/tokens.css, generated from branding/ by branding/sync_tool.py, loaded before this
   file). No colour values in this file except the status colours of forms and messages below (ok/warn/bad).
   No external resources. */
:root {
  /* Legacy names of the tool, mapped onto the tokens (CI v2 Abschn. 4) */
  --navy: var(--pv-ink-800);    /* dark menu bar and dark surfaces (E2: ink-800) */
  --brand: var(--pv-accent);    /* interactive accent: Signal on suite level, module colour 600 in a module (Abschn. 8);
                                   white label overrides --pv-accent only */
  --accent: var(--pv-signal);   /* Signal Blue: only on dark surfaces */
  --ink: var(--pv-text);
  --muted: var(--pv-muted);
  --line: var(--pv-line);
  --line-strong: var(--pv-line-strong);
  --bg: var(--pv-bg);
  --card: var(--pv-surface);
  --calc: var(--pv-signal-paper);
  --calc-bg: var(--pv-signal-tint);
  --radius: var(--pv-radius-s);
  --font: var(--pv-font-body);
  --font-title: var(--pv-font-display);
  /* Derived from the tokens: stronger line for input borders and dashed drop zones */
  --pv-line-strong: color-mix(in srgb, var(--pv-muted-light) 38%, var(--pv-line-light));
  /* Status colours of forms and messages (error / success / warning). Not CI tokens; kept from the tool and allowed
     by the CI briefing 02.10.2026. Never used for savings or risk (charts and price comparisons use Signal shades). */
  --ok: #1d7a46;
  --ok-bg: #e7f5ec;
  --ok-line: #b9e0c8;
  --warn: #9a5b00;
  --warn-bg: #fff4de;
  --warn-line: #f0d7a4;
  --warn-strong: #e08a00;
  --bad: #b3261e;
  --bad-bg: #fdeceb;
  --bad-line: #f3c1bd;
}

/* Accent per module (Abschn. 8): data-module on <html> sets --pv-accent to the module colour 600 (light theme).
   Suite level (dashboard, login, master data) has no data-module and keeps Signal (signal-paper). */
[data-module="spend"] { --pv-accent: var(--pv-mod-spend-600); }
[data-module="source"] { --pv-accent: var(--pv-mod-source-600); }
[data-module="contract"] { --pv-accent: var(--pv-mod-contract-600); }
[data-module="margin"] { --pv-accent: var(--pv-mod-margin-600); }
[data-module="strategy"] { --pv-accent: var(--pv-mod-strategy-600); }
[data-module="terms"] { --pv-accent: var(--pv-mod-terms-600); }
[data-module="advisor"] { --pv-accent: var(--pv-mod-advisor-600); }
[data-module="learn"] { --pv-accent: var(--pv-mod-learn-600); }
:focus-visible { outline: 2px solid var(--brand); outline-offset: 2px; }
[data-surface="dark"] :focus-visible { outline-color: var(--pv-signal); }

/* Fonts are served from this server (no external font services). Licence: SIL OFL, see fonts/.
   Space Grotesk 500/700 (word mark, titles), Inter variable (text, tabular figures). */
@font-face { font-family: "Inter"; src: url("fonts/Inter.bff0f6e3b9e2.ttf") format("truetype"); font-weight: 100 900; font-display: swap; }
@font-face { font-family: "Space Grotesk"; src: url("fonts/space-grotesk-500.ab4861869c91.woff2") format("woff2"); font-weight: 500; font-display: swap; }
@font-face { font-family: "Space Grotesk"; src: url("fonts/space-grotesk-700.f9e147a59a93.woff2") format("woff2"); font-weight: 700; font-display: swap; }

* { box-sizing: border-box; }
[hidden] { display: none !important; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0;
  font-family: var(--font);
  font-size: 15px;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  color: var(--ink);
  background: var(--bg);
}
a { color: var(--brand); }
h1, h2, h3, .hero-greeting, .brand-name, .tile-value, .sum-line strong { font-family: var(--font-title); letter-spacing: -.01em; }
h1 { font-size: 1.6rem; line-height: 1.25; margin: 0 0 .4rem; font-weight: 700; }
.greeting-note { margin: -.15rem 0 .35rem; color: var(--brand); font-weight: 550; }
input, select, textarea, button { font-family: inherit; font-size: inherit; }
h2 { font-size: 1.15rem; margin: 0 0 .75rem; }
h3 { font-size: 1rem; margin: 0 0 .5rem; }
p { margin: 0 0 .75rem; }
.muted { color: var(--muted); }
.small { font-size: .875rem; }
.num { font-variant-numeric: tabular-nums; text-align: right; white-space: nowrap; }

/* Prototype banner */
.proto-banner {
  background: var(--warn-bg); color: var(--warn); font-size: .85rem; text-align: center;
  padding: .35rem 1rem; border-bottom: 1px solid var(--warn-line);
}
.proto-banner a { color: inherit; font-weight: 600; }

/* Layout */
.wrap { max-width: 980px; margin: 0 auto; padding: 0 16px; }
.wrap-wide { max-width: 1180px; }
main { padding: 1.5rem 0 3rem; }
.topbar { background: var(--card); border-bottom: 1px solid var(--line); }
.topbar .wrap { display: flex; align-items: center; gap: .75rem; min-height: 64px; flex-wrap: wrap; }
.logo-mark {
  width: 38px; height: 38px; border-radius: var(--radius); background: var(--brand); color: var(--pv-on-accent);
  display: grid; place-items: center; font-weight: 700; letter-spacing: .02em; flex: none;
}
.brand-name { font-weight: 700; }
.brand-sub { font-size: .8rem; color: var(--muted); }
.topbar .spacer { flex: 1; }
.topbar .who { font-size: .875rem; color: var(--muted); text-align: right; }

.buyer .topbar { background: var(--navy); border-bottom: 0; color: var(--pv-text-dark); }
.buyer .topbar .brand-sub, .buyer .topbar .who { color: var(--pv-muted-dark); }
.buyer .logo-mark { background: var(--pv-paper-0); color: var(--navy); }
.tabs { display: flex; gap: .25rem; flex-wrap: wrap; margin: 0 0 1.25rem; border-bottom: 1px solid var(--line); }
.tabs a {
  padding: .6rem .9rem; text-decoration: none; color: var(--muted); border-bottom: 3px solid transparent;
  margin-bottom: -1px; font-weight: 550;
}
.tabs a[aria-current="page"] { color: var(--ink); border-bottom-color: var(--brand); }

/* Stepper */
.steps { display: flex; gap: .25rem; list-style: none; padding: 0; margin: 0 0 1.5rem; flex-wrap: wrap; }
.steps li { flex: 1 1 0; min-width: 110px; }
.steps a, .steps span {
  display: block; padding: .5rem .6rem; border-top: 4px solid var(--line); font-size: .85rem;
  color: var(--muted); text-decoration: none;
}
.steps .done a { border-top-color: var(--ok); color: var(--ink); }
.steps .current a { border-top-color: var(--brand); color: var(--ink); font-weight: 650; }

/* Cards */
.card {
  background: var(--card); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 1.25rem; margin-bottom: 1rem;
}
.grid { display: grid; gap: 1rem; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
.facts { display: grid; grid-template-columns: max-content 1fr; gap: .35rem 1rem; margin: 0; }
.facts dt { color: var(--muted); }
.facts dd { margin: 0; }
.deadline {
  display: inline-flex; align-items: center; gap: .5rem; background: var(--warn-bg); color: var(--warn);
  border-radius: 999px; padding: .3rem .85rem; font-weight: 600; font-size: .9rem;
}

/* Tasks on the overview */
.task { display: flex; gap: 1rem; align-items: center; padding: 1rem 0; border-top: 1px solid var(--line); }
.task:first-of-type { border-top: 0; }
.task .icon {
  width: 36px; height: 36px; border-radius: 50%; display: grid; place-items: center; flex: none;
  background: var(--bg); color: var(--muted); font-weight: 700;
}
.task.is-done .icon { background: var(--ok-bg); color: var(--ok); }
.task .body { flex: 1; }
.progress { height: 8px; background: var(--line); border-radius: 99px; overflow: hidden; margin-top: .35rem; }
.progress > span { display: block; height: 100%; background: var(--brand); }

/* Buttons and forms */
.btn {
  display: inline-block; border: 1px solid var(--brand); background: var(--brand); color: var(--pv-on-accent);
  padding: .6rem 1.1rem; border-radius: var(--radius); font: inherit; font-weight: 600; text-decoration: none;
  cursor: pointer;
}
.btn:hover { filter: brightness(1.08); }
.btn-secondary { background: var(--pv-paper-0); color: var(--brand); }
.btn-lg { padding: .8rem 1.5rem; font-size: 1.05rem; }
.btn-small { padding: .3rem .7rem; font-size: .85rem; }
.actions { display: flex; gap: .75rem; flex-wrap: wrap; align-items: center; margin-top: 1rem; }
label { font-weight: 550; }
input:not([type]), input[type=text], input[type=email], input[type=tel], input[type=number], input[type=password], input[type=date], input[type=datetime-local], input[type=time], input[type=url], input[type=search], select, textarea {
  font: inherit; padding: .55rem .7rem; border: 1px solid var(--pv-line-strong); border-radius: var(--radius); width: 100%;
  background: var(--pv-paper-0); color: var(--ink);
}
input:focus, select:focus, textarea:focus, .btn:focus-visible, a:focus-visible {
  outline: 3px solid color-mix(in srgb, var(--brand) 35%, transparent); outline-offset: 1px;
}
textarea { min-height: 90px; }
.field { margin-bottom: 1.1rem; }
.field .hint { font-size: .85rem; color: var(--muted); margin-top: .25rem; }
.radio-row { display: flex; gap: 1.25rem; flex-wrap: wrap; margin-top: .35rem; }
.radio-row label, .check label { font-weight: 400; }
.check { display: flex; gap: .6rem; align-items: flex-start; }
.check input { margin-top: .3rem; width: 18px; height: 18px; flex: none; }
.req { color: var(--bad); }
.tag {
  display: inline-block; font-size: .72rem; font-weight: 650; padding: .05rem .45rem; border-radius: 4px;
  vertical-align: middle; background: var(--bg); color: var(--muted); letter-spacing: .02em;
}
.tag-ko { background: var(--bad-bg); color: var(--bad); }
.upload {
  border: 2px dashed var(--pv-line-strong); border-radius: var(--radius); padding: 1.25rem; text-align: center;
  color: var(--muted); background: var(--pv-paper-50);
}

/* Notices */
.notice { border-radius: var(--radius); padding: .8rem 1rem; margin-bottom: 1rem; border: 1px solid; }
.notice-ok { background: var(--ok-bg); border-color: var(--ok-line); color: var(--ok); }
.notice-warn { background: var(--warn-bg); border-color: var(--warn-line); color: var(--warn); }
.notice-bad { background: var(--bad-bg); border-color: var(--bad-line); color: var(--bad); }
.notice ul { margin: .4rem 0 0; padding-left: 1.2rem; }

/* NDA */
.nda-text {
  max-height: 340px; overflow: auto; border: 1px solid var(--line); border-radius: var(--radius); padding: 1rem 1.25rem;
  background: var(--pv-paper-50); font-size: .925rem;
}

/* Tables */
.table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
table { width: 100%; border-collapse: collapse; font-size: .925rem; }
th, td { padding: .55rem .6rem; border-bottom: 1px solid var(--line); vertical-align: top; }
th { text-align: left; font-size: .8rem; color: var(--muted); font-weight: 600; background: var(--pv-paper-50); }
tr.lot th { background: var(--pv-line-light); color: var(--ink); font-size: .85rem; }
tfoot td { font-weight: 700; border-top: 2px solid var(--ink); border-bottom: 0; }
td input[type=number] { max-width: 120px; text-align: right; padding: .4rem .5rem; }

/* ==== Responsive data table «rt» (T26/T29, 02.10.2026): one component for the lists of all modules ====
   Goal: no sideways scrolling on desktop (from 1280 px), cards instead of a table on phones (up to 760 px).
   Markup:  <div class="table-wrap"><table class="rt"> … <td data-label="Lieferant"> … </table></div>
   - Cells and headers wrap, long words and e-mail addresses too (no text over the neighbouring column).
   - <span class="rt-cut" title="full text">: at most two lines, then «…» (rt-cut-1: one line).
   - td/th.rt-nowrap never wraps (dates, amounts); .rt-num right-aligned; .rt-shrink as narrow as its content.
   - table.rt-fixed: the same column widths in every table of the page (e.g. one table per month); widths per
     column with the classes rt-w-xs|s|m|l|xl on the th or on a <col> (6|9|11|14|18rem), the rest of the width goes to the
     columns without a class.
   - Phones: every row is a card. td.rt-title is its heading (shown first, no label), td.rt-actions holds buttons, every other td shows its data-label in
     front of the value, .rt-hide-sm is left out on phones and .rt-show-sm appears only there. The column heads
     are not shown there. td.rt-check (a selection checkbox) sits at the top right of the card. Rows with the
     hidden attribute stay hidden; min-widths of single columns do not apply on phones.
   Comparison matrices that must scroll sideways (many suppliers side by side): table.rt-matrix, see below.
   New tables in any module (MarginValor too) use this component instead of page-specific widths. */
table.rt { width: 100%; }
.rt th, .rt td { overflow-wrap: anywhere; hyphens: auto; }
.rt th { white-space: normal; hyphens: auto; }
.rt th .calc { white-space: nowrap; }
.rt .rt-nowrap { white-space: nowrap; overflow-wrap: normal; }
.rt .rt-num { text-align: right; }
.rt .rt-shrink { width: 1%; }
.rt .rt-show-sm { display: none; }
.rt-cut { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden;
  overflow-wrap: anywhere; }
.rt-cut-1 { -webkit-line-clamp: 1; line-clamp: 1; }
.rt .sub.rt-cut { display: -webkit-box; }
.rt td select, .rt td input:not([type=checkbox]):not([type=radio]) { max-width: 100%; min-width: 0; }
table.rt-fixed { table-layout: fixed; }
.rt-fixed th, .rt-fixed td { overflow: hidden; }
.rt .rt-w-xs { width: 6rem; } .rt .rt-w-s { width: 9rem; } .rt .rt-w-m { width: 11rem; }
.rt .rt-w-l { width: 14rem; } .rt .rt-w-xl { width: 18rem; }
@media (max-width: 760px) {
  .table-wrap:has(> table.rt) { overflow: visible; }
  table.rt, table.rt-fixed { display: block; table-layout: auto; }
  table.rt thead { display: none; }
  table.rt tbody, table.rt tfoot { display: block; }
  table.rt tr { display: flex; flex-direction: column; padding: .55rem .7rem; margin: 0 0 .55rem; border: 1px solid var(--line);
    border-radius: var(--radius); background: var(--card); }
  table.rt tr:last-child { margin-bottom: 0; }
  table.rt :is(td, tfoot th) { display: block; position: relative; border: 0; padding: .2rem 0 .2rem 7.6rem; min-height: 1.5rem;
    overflow: visible; text-align: left !important; width: auto !important; max-width: none; }  /* beats per-table widths */
  table.rt :is(td, tfoot th)::before { content: attr(data-label); position: absolute; left: 0; top: .25rem; width: 7.1rem;
    font-size: .78rem; font-weight: 400; color: var(--muted); line-height: 1.35; overflow-wrap: anywhere; }
  table.rt :is(td, tfoot th):not([data-label])::before { content: none; }
  table.rt :is(td, tfoot th):not([data-label]), table.rt td.rt-title { padding-left: 0; }
  table.rt tfoot th { background: none; font-size: .925rem; color: var(--ink); }
  table.rt :is(td, th):empty { display: none; }
  table.rt td.rt-title { order: -1; font-weight: 600; font-size: 1rem; padding-bottom: .35rem; }
  table.rt td.rt-title .small, table.rt td.rt-title .sub { font-weight: 400; font-size: .82rem; }
  table.rt td.rt-num { text-align: left; }
  table.rt .rt-nowrap { white-space: normal; }
  table.rt .rt-hide-sm { display: none; }
  table.rt .rt-show-sm { display: inline-block; }
  table.rt .rt-shrink { width: auto; }
  table.rt td[colspan] { padding-left: 0; }
  table.rt tr.lot { padding: .5rem 0 .15rem; border: 0; background: none; }
  table.rt tr.lot th { display: block; padding: 0; background: none; }
  table.rt tr.cv-subtotal { flex-direction: row; flex-wrap: wrap; justify-content: space-between; gap: .5rem; }
  table.rt tr.cv-subtotal td, table.rt tfoot td[colspan] { padding-left: 0; border: 0; }
  table.rt tr[hidden] { display: none; }
  table.rt :is(td, th) { min-width: 0; }
  table.rt tr:has(> td.rt-check) { position: relative; }
  table.rt tr:has(> td.rt-check) > td.rt-title { padding-right: 2rem; }
  table.rt td.rt-check { position: absolute; top: .55rem; right: .7rem; padding: 0; min-height: 0; }
}

/* ==== Comparison matrix «rt-matrix» (T26 polish, 02.10.2026): suppliers side by side ====
   For tables whose columns are the suppliers (Angebote, Bewertung, Preisvergleich, Rangliste) and for input grids
   (Preisblatt): with many suppliers sideways scrolling cannot be avoided, so it is made easy instead of hidden.
   Markup:  <div class="table-wrap rt-matrix-wrap" data-scroll-hint="{% translate '…' %}"><table class="rt-matrix"> …
   - The first cell of every row stays visible on the left while scrolling (position: sticky, opaque background,
     line on its right). Cells with .rt-fix stick too (e.g. «Leistung» next to a short «Pos.»; it covers the
     first column while scrolled). Group rows (tr.lot) scroll normally.
   - When the table is wider than its box, a small script in core/base.html sets .is-scrollable on the wrap: then
     the hint (data-scroll-hint, translated in the template) appears above the table and stays at the left edge.
   - No cards on phones (the comparison is the point); the fixed column is 8 to 10rem wide there.
   The page itself never scrolls sideways; only the table box does. */
.rt-matrix-wrap { position: relative; }
.rt-matrix-wrap.is-scrollable::before { content: attr(data-scroll-hint); display: block; position: sticky; left: 0;
  font-size: .78rem; color: var(--muted); padding: 0 0 .35rem; white-space: normal; }
table.rt-matrix > * > tr > :first-child, table.rt-matrix .rt-fix { position: sticky; left: 0; z-index: 1;
  background: var(--card, var(--pv-paper-0)); box-shadow: inset -1px 0 0 var(--line); }
table.rt-matrix > thead > tr > :first-child, table.rt-matrix > thead .rt-fix { background: var(--pv-paper-50); z-index: 2; }
table.rt-matrix > * > tr.lot > th { position: static; box-shadow: none; background: var(--pv-line-light); }
table.rt-matrix > * > tr > :first-child { max-width: 22rem; }
@media (max-width: 760px) {
  table.rt-matrix > * > tr > :first-child, table.rt-matrix .rt-fix { max-width: 10rem; min-width: 8rem; overflow-wrap: break-word;
    hyphens: auto; }
  table.rt-matrix .rt-fix input { min-width: 0; width: 100%; }
}

/* Evaluation */
.calc {
  display: inline-flex; align-items: center; gap: .2rem; font-size: .7rem; font-weight: 700;
  background: var(--calc-bg); color: var(--calc); padding: .05rem .4rem; border-radius: 4px;
  vertical-align: middle; letter-spacing: .02em; cursor: help; text-decoration: none;
}
.calc-val { border-bottom: 1px dotted var(--calc); }
.flag { font-size: .75rem; font-weight: 700; padding: .05rem .4rem; border-radius: 4px; white-space: nowrap; }
.flag-high { background: var(--bad-bg); color: var(--bad); }
.flag-low { background: var(--warn-bg); color: var(--warn); }
.flag-missing { background: var(--pv-line-light); color: var(--pv-muted-light); }
.best { background: var(--pv-signal-tint); }
td.cell-high { background: var(--pv-signal-tint); }
td.cell-low { background: color-mix(in srgb, var(--pv-note) 12%, var(--pv-paper-0)); }
td.cell-missing { background: var(--pv-paper-50); }
.sub { display: block; font-size: .78rem; color: var(--muted); font-weight: 400; }
.delta-down { color: var(--pv-signal-paper); font-weight: 600; }
.delta-up { color: var(--pv-text); }

.rank-row { display: grid; grid-template-columns: 48px 1fr; gap: 1rem; padding: 1.1rem 0; border-top: 1px solid var(--line); }
.rank-row:first-of-type { border-top: 0; }
.rank-no {
  width: 44px; height: 44px; border-radius: 50%; display: grid; place-items: center; font-weight: 800;
  font-size: 1.15rem; background: var(--bg); color: var(--muted);
}
.rank-1 .rank-no { background: var(--brand); color: var(--pv-on-accent); }
.rank-head { display: flex; justify-content: space-between; gap: 1rem; flex-wrap: wrap; align-items: baseline; }
.rank-score { font-size: 1.5rem; font-weight: 800; font-variant-numeric: tabular-nums; }
.stack { display: flex; height: 14px; border-radius: 4px; overflow: hidden; background: var(--line); margin: .5rem 0; }
.stack span { display: block; height: 100%; }
.legend { display: flex; flex-wrap: wrap; gap: .4rem 1rem; font-size: .8rem; color: var(--muted); }
.legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; margin-right: .3rem; }
.c-price { background: var(--navy); }
.c-references { background: var(--pv-signal-paper); }
.c-staff { background: var(--pv-signal-deep); }
.c-quality { background: var(--pv-signal); }
.c-sustainability { background: var(--pv-ink-600); }
.c-response { background: var(--pv-signal-2); }
.why { font-size: .9rem; margin: .25rem 0 0; padding-left: 1.1rem; }
details summary { cursor: pointer; color: var(--brand); font-weight: 600; }
details[open] summary { margin-bottom: .5rem; }
.formula { font-family: ui-monospace, Consolas, monospace; font-size: .85rem; background: var(--calc-bg); padding: .1rem .35rem; border-radius: 4px; }

/* Index */
.page-list { list-style: none; padding: 0; margin: 0; counter-reset: page; }
.page-list li { counter-increment: page; padding: .6rem 0; border-top: 1px solid var(--line); display: flex; gap: .75rem; }
.page-list li::before { content: counter(page); font-weight: 700; color: var(--muted); min-width: 1.5rem; }
.page-list li:first-child { border-top: 0; }

/* Mail preview */
.mail { max-width: 640px; margin: 0 auto; }
.mail-head { font-size: .875rem; color: var(--muted); border-bottom: 1px solid var(--line); padding-bottom: .75rem; margin-bottom: 1rem; }
.mail-head b { color: var(--ink); font-weight: 600; }

@media (max-width: 640px) {
  h1 { font-size: 1.3rem; }
  .card { padding: 1rem; }
  .facts { grid-template-columns: 1fr; gap: 0 1rem; }
  .facts dd { margin-bottom: .4rem; }
  .steps li { min-width: 30%; }
  .topbar .who { text-align: left; width: 100%; padding-bottom: .5rem; }
  .rank-row { grid-template-columns: 1fr; gap: .5rem; }
}

/* Score scale: 0 worst, 5 best */
.scale { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem .75rem; font-size: .8rem; margin: .25rem 0 1rem; }
.scale-title { font-weight: 650; color: var(--muted); }
.scale-steps { display: flex; list-style: none; margin: 0; padding: 0; border-radius: 6px; overflow: hidden; flex-wrap: wrap; }
.scale-steps li { padding: .2rem .55rem; color: var(--pv-text-light); }
.scale-steps b { font-variant-numeric: tabular-nums; margin-right: .2rem; }
.scale-0 { background: color-mix(in srgb, var(--pv-signal) 6%, var(--pv-paper-0)); }
.scale-1 { background: color-mix(in srgb, var(--pv-signal) 16%, var(--pv-paper-0)); }
.scale-2 { background: color-mix(in srgb, var(--pv-signal) 28%, var(--pv-paper-0)); }
.scale-3 { background: color-mix(in srgb, var(--pv-signal) 42%, var(--pv-paper-0)); }
.scale-4 { background: color-mix(in srgb, var(--pv-signal) 58%, var(--pv-paper-0)); }
.scale-5 { background: color-mix(in srgb, var(--pv-signal) 75%, var(--pv-paper-0)); }
.scale-ends { display: flex; gap: 1rem; color: var(--muted); }
.flag[title], .calc[title] { cursor: help; }
.explain { font-size: .875rem; background: var(--pv-paper-50); border: 1px solid var(--line); border-radius: var(--radius); padding: .75rem 1rem; margin: .75rem 0 0; }
.explain p:last-child, .explain ul:last-child { margin-bottom: 0; }
tr.row-missing td { background: var(--bad-bg); }
.c-co2 { background: var(--pv-ink-900); }
.c-ev_share { background: var(--pv-muted-dark); }
.c-turnover { background: var(--pv-line-dark); }

/* Analysis: one filter row, bar chart, scatter chart, suggestions */
.filter-row { display: flex; flex-wrap: wrap; gap: .75rem 1rem; align-items: flex-end; }
.filter-row .field { margin: 0; flex: 1 1 260px; }
.bars { display: grid; gap: .6rem; margin-top: .5rem; }
.bar-row { display: grid; grid-template-columns: minmax(140px, 240px) 1fr; gap: .75rem; align-items: center; }
.bar-name { font-weight: 550; }
.bar-track { position: relative; display: flex; align-items: center; gap: .5rem; min-height: 28px; outline-offset: 2px; padding-right: 8.5rem; }
.bar-empty { padding-right: 0; }
.bar { display: block; height: 18px; min-width: 2px; background: var(--pv-signal-paper); border-radius: 0 4px 4px 0; }
.bar-value { font-size: .875rem; white-space: nowrap; color: var(--ink); }
.bar-track:hover .bar, .bar-track:focus .bar { background: var(--pv-signal-deep); }
.flag-best { background: var(--pv-signal-tint); color: var(--pv-signal-paper); }
.scatter { width: 100%; height: auto; max-width: 760px; display: block; }
.scatter .grid { stroke: var(--pv-line-light); stroke-width: 1; }
.scatter .axis { stroke: var(--pv-line-strong); stroke-width: 1; }
.scatter .tick { font-size: 11px; fill: var(--muted); font-variant-numeric: tabular-nums; }
.scatter .axis-label { font-size: 12px; fill: var(--muted); font-weight: 600; }
.scatter .dot { fill: var(--pv-signal-paper); stroke: var(--pv-paper-0); stroke-width: 2; }
.scatter .hit { fill: transparent; }
.scatter .pt-label { font-size: 13px; fill: var(--ink); font-weight: 550; }
.scatter .pt:hover .dot, .scatter .pt:focus .dot { fill: var(--pv-signal-deep); }
.scatter .pt:focus { outline: none; }
.suggestion {
  display: flex; flex-direction: column; gap: .35rem; padding: 1rem; border: 1px solid var(--line);
  border-radius: var(--radius); text-decoration: none; color: var(--ink); background: var(--pv-paper-50); font-size: .9rem;
}
.suggestion strong { color: var(--brand); font-size: 1rem; }
.suggestion:hover { border-color: var(--brand); background: var(--pv-paper-0); }
@media (max-width: 640px) {
  .bar-row { grid-template-columns: 1fr; gap: .2rem; }
}

/* Rank colours in the price comparison (CI v2: Signal shades, no green/red for savings) */
td.rank-first, .sw.rank-first { background: color-mix(in srgb, var(--pv-signal) 48%, var(--pv-paper-0)); }
td.rank-second, .sw.rank-second { background: color-mix(in srgb, var(--pv-signal) 26%, var(--pv-paper-0)); }
td.rank-third, .sw.rank-third { background: color-mix(in srgb, var(--pv-signal) 10%, var(--pv-paper-0)); }
.sw { display: inline-block; width: 14px; height: 14px; border-radius: 3px; margin-right: .35rem; vertical-align: -2px; border: 1px solid var(--pv-line-strong); }
.status-chip { font-weight: 600; }
.status-chip.is-locked { color: var(--navy); }
.notice-lock { background: var(--pv-signal-tint); border-color: var(--pv-line-strong); color: var(--navy); }
.tag-buyer { background: var(--pv-signal-tint); color: var(--brand); }
.chip-stage { font-size: .7rem; font-weight: 700; padding: .05rem .4rem; border-radius: 4px; background: var(--pv-line-light); color: var(--pv-muted-light); margin-right: .35rem; }
.comment { display: block; font-size: .78rem; color: var(--muted); font-style: italic; margin-top: .2rem; text-align: left; max-width: 220px; margin-left: auto; }
.ref-card { border: 1px solid var(--line); border-radius: var(--radius); padding: .75rem 1rem; margin-bottom: .75rem; background: var(--pv-paper-50); }
.ref-card dl { margin: .25rem 0 0; }

/* Insight charts */
.bar-area { position: relative; flex: 1; display: flex; align-items: center; gap: .5rem; min-height: 22px; }
.bar-area .bar { flex: none; }
.bar-s2, .sw-s2 { background: var(--pv-signal); }
.sw-s1 { background: var(--pv-signal-paper); }
.threshold { position: absolute; top: -4px; bottom: -4px; width: 0; border-left: 2px dashed var(--pv-ink-900); }
.threshold-key { display: inline-block; width: 14px; border-top: 2px dashed var(--pv-ink-900); vertical-align: middle; }
.scatter .marker { stroke: var(--pv-muted-light); stroke-width: 1; }
.scatter .marker-cross { stroke: var(--pv-ink-900); }
.scatter .marker-label { font-size: 11px; fill: var(--muted); }
.flag-sim { background: var(--pv-signal-tint); color: var(--pv-signal-paper); }
.headline { font-size: 1.1rem; font-weight: 550; line-height: 1.45; }
.insight-card { display: flex; flex-direction: column; gap: .45rem; padding: 1rem; border: 1px solid var(--line);
  border-radius: var(--radius); text-decoration: none; color: var(--ink); background: var(--pv-paper-50); font-size: .9rem; }
.insight-card:hover { border-color: var(--brand); background: var(--pv-paper-0); }
.insight-card .num-badge { font-weight: 800; color: var(--brand); margin-right: .35rem; }
.insight-card strong { font-size: 1rem; }
.insight-card .result { font-weight: 550; }
.grid-3 { display: grid; gap: 1rem; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); }

/* Export buttons on every block */
.export { display: flex; gap: .5rem; justify-content: flex-end; margin-top: .75rem; }
.btn-export { font-size: .8rem; font-weight: 600; text-decoration: none; padding: .3rem .7rem; border: 1px solid var(--line);
  border-radius: 6px; color: var(--brand); background: var(--pv-paper-0); }
.btn-export:hover { border-color: var(--brand); }
.decision-form { margin-top: .6rem; padding-top: .6rem; border-top: 1px dashed var(--line); }
.btn-approve { background: var(--ok); border-color: var(--ok); }
.btn-reject { background: var(--pv-paper-0); color: var(--bad); border-color: var(--bad); }

/* ===== App shell (MVP) ===== */
.app-bar { background: var(--navy); border-bottom: 0; color: var(--pv-text-dark); }
.app-bar .brand-sub, .app-bar .who { color: var(--pv-muted-dark); }
.app-bar .logo-mark { background: var(--pv-paper-0); color: var(--navy); }
.brand-link { display: flex; align-items: center; gap: .75rem; color: inherit; text-decoration: none; }
.brand-link .brand-name, .brand-link .brand-sub { display: block; }
.user-menu { display: flex; align-items: center; gap: 1rem; }
.user-menu form { margin: 0; }
.bar-link { background: none; border: 1px solid rgba(255,255,255,.35); color: var(--pv-text-dark); font: inherit; font-size: .85rem;
  padding: .35rem .8rem; border-radius: 6px; cursor: pointer; text-decoration: none; }
.bar-link:hover { background: rgba(255,255,255,.1); }
.btn-block { width: 100%; }
.btn[disabled] { opacity: .5; cursor: not-allowed; }

/* Login */
.login-page { background: linear-gradient(160deg, var(--pv-signal-tint) 0%, var(--pv-paper-50) 55%); }
.login-wrap { max-width: 420px; margin: 8vh auto 0; }
.login-brand { display: flex; align-items: center; gap: 1rem; margin-bottom: 1.5rem; }
.logo-mark.logo-lg { width: 52px; height: 52px; font-size: 1.2rem; background: var(--navy); }
.login-title { font-size: 1.5rem; font-weight: 700; color: var(--ink); font-family: var(--font-title); }
.login-card { padding: 1.75rem; box-shadow: 0 10px 30px color-mix(in srgb, var(--pv-ink-900) 8%, transparent); }
.login-card h1 { margin-bottom: 1rem; }
.login-foot { text-align: center; margin-top: 1.25rem; }

/* Dashboard */
.hero { margin: .5rem 0 1.25rem; }
.hero-greeting { font-size: 2rem; margin-bottom: .2rem; }
.tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 1rem; margin-bottom: 1rem; }
.tile { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 1rem 1.25rem; }
.tile-value { display: block; font-size: 2rem; font-weight: 750; line-height: 1.1; }
.tile-label { color: var(--muted); font-size: .9rem; }
.empty { text-align: center; padding: 2rem 1rem; }
.plain-list { list-style: none; padding: 0; margin: 0; }
.plain-list li { padding: .5rem 0; border-top: 1px solid var(--line); }
.plain-list li:first-child { border-top: 0; }
@media (max-width: 640px) {
  .hero-greeting { font-size: 1.5rem; }
  .user-menu { width: 100%; justify-content: space-between; padding-bottom: .5rem; }
}
.login-page { min-height: 100vh; }
.field > label { display: block; margin-bottom: .3rem; }

/* ===== Event setup ===== */
.plain-fieldset { border: 0; padding: 0; margin: 0; min-width: 0; }
.wizard-steps li { min-width: 120px; }
.field-error { color: var(--bad); font-size: .85rem; margin-top: .25rem; }
.has-error input, .has-error select, .has-error textarea { border-color: var(--bad); }
.form-table td { vertical-align: top; }
.form-table input:not([type]), .form-table input[type=text], .form-table input[type=email], .form-table select { min-width: 9rem; }
.check-list > div, .check-list ul { display: grid; gap: .35rem; list-style: none; padding: 0; margin: 0; }
.check-list.columns > div, .check-list.columns ul { grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); }
.check-list label { font-weight: 400; display: flex; gap: .5rem; align-items: center; padding: .45rem .6rem;
  border: 1px solid var(--line); border-radius: var(--radius); background: var(--pv-paper-0); cursor: pointer; }
.check-list label:has(input:checked) { border-color: var(--brand); background: var(--pv-signal-tint); }
.check-list input { width: 18px; height: 18px; }
.checklist { list-style: none; padding: 0; margin: 0; }
.checklist li { padding: .45rem 0; border-top: 1px solid var(--line); }
.checklist li:first-child { border-top: 0; }
.checklist .check-icon { display: inline-grid; place-items: center; width: 1.4rem; height: 1.4rem; border-radius: 50%;
  margin-right: .5rem; font-weight: 700; font-size: .8rem; }
.checklist li.ok .check-icon { background: var(--ok-bg); color: var(--ok); }
.checklist li.open .check-icon { background: var(--bad-bg); color: var(--bad); }
.float-end { float: right; }
.round-line { list-style: none; padding: 0; margin: 0; display: grid; gap: .75rem; }
.round-line li { display: flex; gap: .9rem; align-items: flex-start; }
.round-no { width: 34px; height: 34px; border-radius: 50%; display: grid; place-items: center; font-weight: 800;
  background: var(--bg); color: var(--muted); flex: none; }
.round-line li.current .round-no { background: var(--brand); color: var(--pv-on-accent); }
.row-link { color: inherit; text-decoration: none; font-weight: 600; }
.row-link:hover { color: var(--brand); text-decoration: underline; }
.editor-block { border: 1px solid var(--line); border-radius: var(--radius); padding: 1rem; margin-bottom: 1rem; background: var(--pv-paper-50); }
.editor-head { display: flex; gap: 1rem; align-items: flex-start; flex-wrap: wrap; }
.danger-check { color: var(--bad); font-weight: 500; margin-top: 1.9rem; }
.center { text-align: center; }
.doc-row { display: flex; justify-content: space-between; align-items: center; gap: 1rem; }
.btn-link { background: none; border: 0; color: var(--brand); font: inherit; cursor: pointer; text-decoration: underline; padding: 0; }
.btn-link.danger { color: var(--bad); }
/* Supplier portal */
.tenant-logo { height: 38px; width: auto; }
.inline-input { display: flex; gap: .5rem; align-items: center; max-width: 320px; }
.success-card { text-align: center; padding: 2rem 1.25rem; }
.big-check { width: 56px; height: 56px; border-radius: 50%; display: grid; place-items: center; margin: 0 auto 1rem;
  background: var(--ok-bg); color: var(--ok); font-size: 1.6rem; font-weight: 800; }
.big-check-warn { background: var(--warn-bg); color: var(--warn); }
.portal-foot { text-align: center; margin-top: 2rem; }
/* Evaluation */
.round-switch { display: flex; gap: .5rem; align-items: center; margin: -.5rem 0 1rem; }
.round-switch select { width: auto; min-width: 0; max-width: 100%; flex: 0 1 auto; }
.compare-table td { min-width: 12rem; }
.cell-ko { background: var(--bad-bg); }
.insight-card.is-unavailable { opacity: .65; }
.seg-0 { background: var(--pv-ink-900); } .seg-1 { background: var(--pv-signal-deep); } .seg-2 { background: var(--pv-signal-paper); }
.seg-3 { background: var(--pv-ink-600); } .seg-4 { background: var(--pv-signal); } .seg-5 { background: var(--pv-signal-2); }
.seg-6 { background: var(--pv-muted-light); } .seg-7 { background: var(--pv-line-dark); } .seg-8 { background: var(--pv-muted-dark); } .seg-9 { background: var(--pv-line-light); }
.letter { border: 1px solid var(--line); border-radius: var(--radius); padding: .6rem .9rem; margin-bottom: .6rem; }
.letter summary { cursor: pointer; }
.letter-body { white-space: pre-wrap; font-family: inherit; font-size: .9rem; background: var(--pv-paper-50); padding: .75rem; border-radius: 6px; }
.award-form .lot-field { display: none; }
.award-form:has(input[name=modus][value=lose]:checked) .lot-field { display: block; }
.award-form:has(input[name=modus][value=lose]:checked) .total-field { display: none; }

/* App shell: menu on the left (desktop), collapsible on small screens */
.shell { display: flex; min-height: 100vh; }
.sidebar {
  width: 248px; flex: none; background: var(--navy); color: var(--pv-text-dark); display: flex; flex-direction: column;
  position: sticky; top: 0; height: 100vh; overflow-y: auto; padding: 1rem .75rem;
}
.side-brand { display: flex; gap: .65rem; align-items: center; color: var(--pv-text-dark); text-decoration: none; padding: .25rem .5rem 1rem; }
.side-brand .brand-sub { display: block; color: var(--pv-muted-dark); font-size: .78rem; }
.sidebar .logo-mark { background: var(--pv-paper-0); color: var(--navy); }
.side-nav { display: flex; flex-direction: column; gap: 2px; }
.side-nav a {
  display: flex; align-items: center; gap: .6rem; color: var(--pv-text-dark); text-decoration: none;
  padding: .5rem .65rem; border-radius: 6px; font-size: .95rem;
}
.side-nav a:hover { background: rgba(255,255,255,.07); color: var(--pv-text-dark); }
.side-nav a[aria-current="page"] { background: rgba(255,255,255,.12); color: var(--pv-text-dark); font-weight: 600; box-shadow: inset 3px 0 0 var(--pv-signal); }
.side-nav .ico { width: 1.1rem; text-align: center; opacity: .85; }
.side-section { margin-top: 1.25rem; padding-top: 1rem; border-top: 1px solid rgba(255,255,255,.12); }
.side-label { font-size: .72rem; text-transform: uppercase; letter-spacing: .06em; color: var(--pv-muted-dark); margin: 0 .5rem .25rem; }
.side-event { color: var(--pv-text-dark); font-weight: 600; font-size: .9rem; margin: 0 .5rem .5rem; line-height: 1.3; }
.side-sub a { font-size: .9rem; padding: .4rem .65rem .4rem 1rem; }
.side-foot { margin-top: auto; padding-top: 1rem; border-top: 1px solid rgba(255,255,255,.12); display: flex; flex-direction: column; gap: .35rem; }
.side-user { font-size: .85rem; color: var(--pv-text-dark); padding: 0 .5rem; }
.side-user .small { color: var(--pv-muted-dark); }
.side-link { background: none; border: 0; color: var(--pv-muted-dark); font: inherit; font-size: .88rem; text-align: left; padding: .35rem .5rem; cursor: pointer; text-decoration: none; }
.side-link:hover { color: var(--pv-text-dark); }
.shell-main { flex: 1; min-width: 0; }
.shell-main main { padding-top: 1.75rem; }
.mobile-bar { display: none; }
.page-head { align-items: center; margin-bottom: 1.25rem; }
.shell .tabs { display: none; }   /* event areas are in the menu on the left */

@media (max-width: 900px) {
  .shell { display: block; }
  .sidebar { position: fixed; z-index: 20; left: 0; top: 0; transform: translateX(-100%); transition: transform .2s; box-shadow: 0 0 24px rgba(0,0,0,.25); }
  .menu-open .sidebar { transform: none; }
  .mobile-bar { display: flex; gap: 1rem; align-items: center; background: var(--navy); color: var(--pv-text-dark); padding: .6rem 16px; }
  .menu-btn { background: none; border: 1px solid rgba(255,255,255,.35); color: var(--pv-text-dark); border-radius: 6px; padding: .3rem .7rem; font: inherit; }
  .shell .tabs { display: flex; }
}

/* Cockpit */
.tiles-4 { grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); }
.tile-link { text-decoration: none; color: inherit; transition: border-color .15s; }
.tile-link:hover { border-color: var(--brand); }
.grid-2 { grid-template-columns: repeat(auto-fit, minmax(360px, 1fr)); margin-bottom: 1rem; }
.grid-2 > .card { margin-bottom: 0; }
.todo-list, .deadline-list, .activity, .phase-bars { list-style: none; margin: 0; padding: 0; }
.todo-list li a {
  display: flex; align-items: center; gap: .75rem; padding: .6rem .25rem; border-bottom: 1px solid var(--line);
  text-decoration: none; color: var(--ink);
}
.todo-list li a:hover { background: var(--bg); }
.todo-list li a > span:first-child { flex: 1; }
.todo-list .go { color: var(--muted); font-size: 1.2rem; }
.badge { background: var(--brand); color: var(--pv-on-accent); border-radius: 99px; font-size: .78rem; font-weight: 700; padding: .05rem .5rem; }
.deadline-list li, .activity li { display: flex; gap: .85rem; align-items: flex-start; padding: .55rem 0; border-bottom: 1px solid var(--line); }
.deadline-list li:last-child, .activity li:last-child, .todo-list li:last-child a { border-bottom: 0; }
.date-badge {
  flex: none; width: 3rem; text-align: center; border: 1px solid var(--line); border-radius: 6px;
  font-size: .72rem; text-transform: uppercase; color: var(--muted); line-height: 1.1; padding: .3rem 0;
}
.date-badge strong { display: block; font-size: 1.15rem; color: var(--ink); }
.activity li > .small { flex: none; width: 5.5rem; padding-top: .1rem; }
.phase-bars li { display: grid; grid-template-columns: 11rem 1fr 2rem; gap: .75rem; align-items: center; padding: .4rem 0; }
.phase-label { font-size: .9rem; }
.phase-track { height: 10px; background: var(--bg); border-radius: 99px; overflow: hidden; }
.phase-track > span { display: block; height: 100%; background: var(--brand); border-radius: 99px; min-width: 0; }
.filter-chips { display: flex; gap: .4rem; flex-wrap: wrap; margin-bottom: 1rem; }
.filter-chips a { padding: .3rem .8rem; border: 1px solid var(--line); border-radius: 99px; background: var(--card); text-decoration: none; color: var(--ink); font-size: .88rem; }
.filter-chips a[aria-current="true"] { background: var(--brand); border-color: var(--brand); color: var(--pv-on-accent); }

/* Questionnaire shop: modules as tiles, cart on the right */
.shop { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 1.5rem; align-items: start; }
.shop-intro h2 { font-size: 1.35rem; }
.shop-tools { display: flex; gap: .75rem; flex-wrap: wrap; align-items: center; margin-bottom: 1rem; }
.shop-tools input[type=search] { flex: 1 1 260px; }
.shop-tools .filter-chips { margin: 0; }
.chip { padding: .35rem .85rem; border: 1px solid var(--line); border-radius: 99px; background: var(--card); font: inherit; font-size: .88rem; cursor: pointer; color: var(--ink); }
.chip[aria-pressed="true"] { background: var(--brand); border-color: var(--brand); color: var(--pv-on-accent); }
.module-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: .85rem; }
.module {
  border: 1.5px solid var(--line); border-radius: var(--radius); background: var(--card);
  transition: border-color .15s, box-shadow .15s, transform .15s; display: flex; flex-direction: column;
}
.module:hover { border-color: var(--pv-line-strong); box-shadow: 0 4px 14px color-mix(in srgb, var(--pv-ink-900) 8%, transparent); transform: translateY(-1px); }
.module.is-in { border-color: var(--brand); box-shadow: inset 0 0 0 1px var(--brand); background: color-mix(in srgb, var(--brand) 4%, var(--pv-paper-0)); }
.module-pick { display: grid; grid-template-columns: auto 1fr; gap: .25rem .75rem; padding: .9rem 1rem .6rem; cursor: pointer; font-weight: 400; flex: 1; }
.module-pick .module-check { position: absolute; opacity: 0; pointer-events: none; }
.module-icon { font-size: 1.6rem; line-height: 1; grid-row: span 2; }
.module-body { display: flex; flex-direction: column; gap: .2rem; }
.module-title { font-weight: 650; }
.module-teaser { font-size: .86rem; color: var(--muted); line-height: 1.35; }
.module-meta { display: flex; flex-wrap: wrap; gap: .3rem; margin-top: .35rem; }
.pill { font-size: .72rem; padding: .08rem .45rem; border-radius: 99px; background: var(--bg); color: var(--muted); border: 1px solid var(--line); white-space: nowrap; }
.pill-std { background: var(--brand); color: var(--pv-on-accent); border-color: var(--brand); }
.pill-rec { background: var(--warn-bg); color: var(--warn); border-color: var(--warn-line); }
.pill-ko { background: var(--bad-bg); color: var(--bad); border-color: var(--bad-line); }
.module-toggle { grid-column: 2; font-size: .85rem; font-weight: 650; color: var(--brand); margin-top: .35rem; }
.module-toggle .added, .module.is-in .module-toggle .add { display: none; }
.module.is-in .module-toggle .added { display: inline; }
.module-pick:focus-within { outline: 3px solid color-mix(in srgb, var(--brand) 35%, transparent); outline-offset: 2px; border-radius: var(--radius); }
.module-details { border-top: 1px solid var(--line); padding: .45rem 1rem; }
.module-details summary { font-size: .85rem; }
.q-pick { list-style: none; margin: .5rem 0 .25rem; padding: 0; display: flex; flex-direction: column; gap: .4rem; }
.q-pick label { display: flex; gap: .5rem; align-items: flex-start; font-weight: 400; font-size: .88rem; line-height: 1.35; }
.q-pick input { margin-top: .2rem; }
.cart {
  position: sticky; top: 1rem; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 1rem 1.1rem; box-shadow: 0 6px 20px color-mix(in srgb, var(--pv-ink-900) 6%, transparent);
}
.cart h3 { font-size: 1.05rem; }
.cart-sum { font-size: .9rem; color: var(--muted); }
.cart-sum strong { color: var(--ink); font-size: 1.05rem; }
.cart-list { list-style: none; margin: 0 0 .5rem; padding: 0; }
.cart-list li { display: grid; grid-template-columns: 1fr auto auto; gap: .5rem; align-items: center; padding: .4rem 0; border-bottom: 1px solid var(--line); font-size: .9rem; }
.cart-remove { border: 0; background: none; color: var(--muted); font-size: 1.1rem; cursor: pointer; line-height: 1; padding: 0 .2rem; }
.cart-remove:hover { color: var(--bad); }
.cart-check { margin-top: 1rem; padding-top: .75rem; border-top: 1px dashed var(--line); }
.cart-check h4 { font-size: .9rem; margin: 0 0 .35rem; }
.cart-check li.ok { color: var(--ok); }
.cart-check li.todo { color: var(--muted); }
@media (max-width: 1100px) { .shop { grid-template-columns: 1fr; } .cart { position: static; } }

/* Choice cards (radio buttons as cards) */
.choice-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: .6rem; margin-top: .35rem; }
.choice-card { display: flex; gap: .6rem; align-items: flex-start; border: 1.5px solid var(--line); border-radius: var(--radius); padding: .7rem .85rem; cursor: pointer; font-weight: 400; background: var(--card); }
.choice-card:has(input:checked) { border-color: var(--brand); box-shadow: inset 0 0 0 1px var(--brand); background: color-mix(in srgb, var(--brand) 4%, var(--pv-paper-0)); }
.choice-card input { margin-top: .25rem; }
.choice-card strong { display: block; }
.plain-fieldset legend.label { font-weight: 550; padding: 0; }
details.more { margin: .75rem 0; }

/* Drop zone */
.dropzone {
  border: 2px dashed var(--pv-line-strong); border-radius: var(--radius); background: var(--bg); padding: 1.5rem 1rem;
  text-align: center; transition: border-color .15s, background .15s; margin-bottom: 1rem;
}
.dropzone.is-over { border-color: var(--brand); background: color-mix(in srgb, var(--brand) 8%, var(--pv-paper-0)); }
.dropzone.is-busy { opacity: .7; }
.dz-icon { font-size: 2rem; color: var(--brand); line-height: 1; }
.dz-title { font-weight: 650; margin: .35rem 0; }
.dz-or { display: flex; gap: .5rem; justify-content: center; flex-wrap: wrap; }
.dz-list { list-style: none; padding: 0; margin: .5rem 0 0; text-align: left; font-size: .88rem; word-break: break-all; }
.doc-list { list-style: none; padding: 0; margin: 0; }
.doc-list li { display: flex; gap: .75rem; align-items: center; padding: .55rem 0; border-bottom: 1px solid var(--line); }
.doc-name { flex: 1; display: flex; flex-direction: column; word-break: break-word; }

/* Confirmation dialog */
.confirm-dialog { border: 0; border-radius: 14px; padding: 1.75rem 1.75rem 1.25rem; max-width: 460px; width: calc(100% - 32px); box-shadow: 0 24px 60px color-mix(in srgb, var(--pv-ink-900) 30%, transparent); }
.confirm-dialog::backdrop { background: color-mix(in srgb, var(--pv-ink-900) 45%, transparent); backdrop-filter: blur(2px); }
.confirm-dialog h2 { font-size: 1.25rem; margin-bottom: .4rem; }
.confirm-icon { width: 42px; height: 42px; border-radius: 50%; background: var(--warn-bg); color: var(--warn); display: grid; place-items: center; font-weight: 800; font-size: 1.3rem; margin-bottom: .75rem; }
.confirm-points { margin: 0 0 .5rem; padding-left: 1.2rem; }
.confirm-points li { margin: .15rem 0; }
.confirm-dialog .actions { justify-content: flex-end; }
.avatar { width: 40px; height: 40px; border-radius: 50%; background: var(--navy); color: var(--pv-text-dark); display: grid; place-items: center; font-weight: 700; font-size: .9rem; grid-row: span 2; text-transform: uppercase; }
.rights { list-style: none; margin: .35rem 0 0; padding: 0; font-size: .82rem; }
.rights li.yes { color: var(--ok); }
.rights li.no { color: var(--bad); }
.nda-upload { margin-top: .6rem; }

/* Schedule step */
.timeline-pick { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 1rem; align-items: start; }
.tl-step { border-left: 3px solid var(--line); padding-left: .85rem; }
.tl-step:first-child { display: flex; flex-direction: column; gap: .2rem; }
.tl-dot { width: 26px; height: 26px; border-radius: 50%; background: var(--brand); color: var(--pv-on-accent); display: grid; place-items: center; font-size: .8rem; font-weight: 700; }
.quick-picks { display: flex; gap: .35rem; flex-wrap: wrap; align-items: center; margin-top: -.25rem; }
.quick-picks .chip { font-size: .8rem; padding: .2rem .6rem; }
.sentence-field { margin-top: 1.25rem; padding: .9rem 1rem; background: var(--bg); border-radius: var(--radius); display: flex; flex-direction: column; gap: .3rem; }
.sentence-field select { width: auto; display: inline-block; padding: .25rem .5rem; margin: 0 .25rem; }
.lot-grid { grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); }
.lot-grid .module-pick { align-items: center; }
.custom-lots { display: flex; flex-direction: column; gap: .4rem; max-width: 420px; }

/* Criteria cards */
.crit-card { border: 1px solid var(--line); border-radius: var(--radius); background: var(--card); padding: .9rem 1rem; margin-bottom: .75rem; }
.crit-card.is-empty, .crit-card.is-removed { display: none; }
.crit-head { display: flex; gap: .5rem; align-items: center; }
.crit-head input:not([type]), .crit-head input[type=text] { font-weight: 650; font-size: 1.05rem; }
.crit-remove { border: 1px solid var(--line); background: var(--card); border-radius: 6px; padding: .35rem .55rem; cursor: pointer; }
.crit-remove:hover { border-color: var(--bad); }
.crit-row { display: flex; flex-wrap: wrap; gap: .4rem .75rem; align-items: center; margin-top: .7rem; }
.crit-label { font-size: .85rem; font-weight: 600; color: var(--muted); min-width: 11rem; }
.crit-row select { flex: 1 1 260px; }
.seg { display: flex; flex-wrap: wrap; gap: .35rem; }
.seg-opt { display: inline-flex; font-weight: 400; cursor: pointer; }
.seg-opt input { position: absolute; opacity: 0; pointer-events: none; }
.seg-opt span { padding: .35rem .75rem; border: 1px solid var(--line); border-radius: 99px; font-size: .88rem; background: var(--card); }
.seg-opt input:checked + span { background: var(--brand); border-color: var(--brand); color: var(--pv-on-accent); }
.seg-opt input:focus-visible + span { outline: 3px solid color-mix(in srgb, var(--brand) 35%, transparent); }
.crit-weight .weight-range { flex: 1 1 200px; accent-color: var(--brand); }
.weight-box { display: inline-flex; align-items: center; gap: .25rem; font-weight: 650; }
.weight-box input { width: 4.5rem; text-align: right; }
.sum-meter { height: 12px; border-radius: 99px; background: var(--bg); overflow: hidden; margin: .25rem 0 .5rem; }
.sum-meter > span { display: block; height: 100%; width: 0; transition: width .2s, background .2s; }
.sum-meter.is-ok > span { background: var(--ok); }
.sum-meter.is-under > span { background: var(--warn-strong); }
.sum-meter.is-over > span { background: var(--bad); width: 100% !important; }
.sum-line strong { font-size: 1.8rem; }
.ok-text { color: var(--ok); font-weight: 600; }
.warn-text { color: var(--warn); font-weight: 600; }
.bad-text { color: var(--bad); font-weight: 600; }
.info { cursor: help; color: var(--muted); }
.suggest-list li { padding: .2rem 0; }
.avatar-firm { border-radius: var(--radius); background: color-mix(in srgb, var(--brand) 14%, var(--pv-paper-0)); color: var(--brand); }

/* Compact cockpit with year Gantt */
.cockpit-head { margin-bottom: .75rem; }
.cockpit-head .hero-greeting { font-size: 1.6rem; margin: 0; }
.tiles-compact { margin-bottom: .75rem; }
.tiles-compact .tile { padding: .65rem 1rem; }
.tiles-compact .tile-value { font-size: 1.5rem; }
.card-tight { padding: .85rem 1.1rem; margin-bottom: .75rem; }
.card-tight h2 { font-size: 1rem; margin-bottom: .4rem; }
.cockpit-cols { margin-bottom: .75rem; }
.cockpit-cols > .card { margin-bottom: 0; }
.cockpit-cols .todo-list li a, .cockpit-cols .deadline-list li, .cockpit-cols .activity li { padding: .35rem 0; font-size: .9rem; }
.cockpit-cols .activity li > .small:first-child { width: 4.5rem; }
.gantt { font-size: .82rem; }
.gantt-row { display: grid; grid-template-columns: 15rem 1fr 6.5rem; gap: .75rem; align-items: center; height: 26px; }
.gantt-axis { height: 20px; color: var(--muted); font-size: .72rem; }
.gantt-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--ink); text-decoration: none; }
.gantt-name:hover { color: var(--brand); text-decoration: underline; }
.gantt-track { position: relative; height: 100%; }
.gantt-month { position: absolute; top: 2px; }
.gantt-grid { position: absolute; top: 0; bottom: 0; border-left: 1px solid var(--line); }
.gantt-bar { position: absolute; top: 7px; height: 12px; border-radius: 3px; }
.gantt-now { position: absolute; top: 0; bottom: 0; border-left: 2px solid var(--bad); z-index: 2; }
.gantt-today { position: absolute; top: 2px; transform: translateX(-50%); color: var(--bad); }
.gantt-vol { text-align: right; }
.g-setup { background: var(--pv-line-strong); }
.g-running { background: var(--pv-signal-paper); }  /* charts: Signal/Ink only, no module colours (CI v2) */
.g-planned { background: repeating-linear-gradient(45deg, var(--pv-signal), var(--pv-signal) 4px, var(--pv-signal-2) 4px, var(--pv-signal-2) 8px); }
.g-evaluation { background: var(--pv-muted-light); }
.g-award { background: var(--pv-ink-800); }
.gantt-legend { display: flex; gap: .85rem; flex-wrap: wrap; color: var(--muted); }
.gantt-legend i { display: inline-block; width: 12px; height: 8px; border-radius: 2px; margin-right: .3rem; vertical-align: middle; }
.gantt-note { margin: .4rem 0 0; }
@media (max-width: 800px) { .gantt-row { grid-template-columns: 8rem 1fr; } .gantt-vol { display: none; } }
.side-nav .side-label { margin: 1rem .5rem .25rem; }
.side-nav .side-label:first-child { margin-top: .25rem; }
.side-cta { color: var(--pv-text-dark) !important; }
.side-cta .ico { background: var(--pv-signal); color: var(--navy); border-radius: 4px; font-weight: 700; }
.phase-chip { font-size: .78rem; padding: .1rem .5rem; border-radius: 99px; background: var(--bg); border: 1px solid var(--line); white-space: nowrap; }
.ph-running { background: var(--pv-signal-tint); border-color: var(--pv-signal-2); }
.ph-evaluation { background: var(--warn-bg); border-color: var(--warn-line); }
.ph-award, .ph-done { background: var(--ok-bg); border-color: var(--ok-line); }
.lib-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: .5rem .75rem; }
.lib-item { border: 1px solid var(--line); border-radius: var(--radius); padding: .55rem .75rem; background: var(--card); }
.lib-item summary { display: flex; gap: .6rem; align-items: flex-start; list-style: none; cursor: pointer; color: var(--ink); font-weight: 400; }
.lib-item summary::-webkit-details-marker { display: none; }
.lib-item[open] { box-shadow: 0 4px 14px color-mix(in srgb, var(--pv-ink-900) 8%, transparent); }
.lib-icon { font-size: 1.3rem; }
.lib-list { margin: .25rem 0 .5rem; padding-left: 1.2rem; }
.lib-group h3 { color: var(--muted); font-size: .85rem; text-transform: uppercase; letter-spacing: .05em; }
@media print { .sidebar, .mobile-bar, .page-head .btn { display: none !important; } .shell { display: block; } }

/* Dashboard charts (blue shades of the suite theme, no external library) */
.dash-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(420px, 1fr)); gap: .75rem; margin-bottom: .75rem; }
.dash-grid > .card { margin-bottom: 0; }
.hbars, .cbars { list-style: none; margin: 0; padding: 0; }
.hbars li, .cbars li { display: grid; grid-template-columns: 11rem 1fr 6.5rem; gap: .6rem; align-items: center; padding: .28rem 0; font-size: .86rem; }
.hb-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hb-track { background: var(--bg); border-radius: 4px; height: 14px; overflow: hidden; display: block; }
.hb-bar { display: block; height: 100%; border-radius: 4px; background: var(--pv-signal-paper); min-width: 2px; }
.hb-2 { background: var(--pv-signal-deep); } .hb-3 { background: var(--pv-signal-paper); } .hb-4 { background: var(--pv-ink-800); } .hb-1 { background: var(--pv-signal); }
.hb-light { background: var(--pv-signal-2); } .hb-dark { background: var(--pv-signal-deep); }
.hb-val { text-align: right; font-variant-numeric: tabular-nums; }
.cb-pair { display: flex; flex-direction: column; gap: 3px; }
.cb-pair .hb-track { height: 9px; }
.legend-line .lg { display: inline-block; width: 12px; height: 8px; border-radius: 2px; margin: 0 .3rem 0 .6rem; vertical-align: middle; }
a.gantt-bar { cursor: pointer; transition: filter .1s, transform .1s; }
a.gantt-bar:hover { filter: brightness(1.12); transform: scaleY(1.25); z-index: 3; }
.gantt-tip {
  display: none; position: absolute; bottom: 150%; left: 50%; transform: translateX(-50%); z-index: 10;
  background: var(--navy); color: var(--pv-text-dark); font-size: .78rem; line-height: 1.35; padding: .45rem .6rem; border-radius: 6px;
  white-space: nowrap; box-shadow: 0 6px 18px rgba(0,0,0,.2); pointer-events: none;
}
a.gantt-bar:hover .gantt-tip, a.gantt-bar:focus .gantt-tip { display: block; }
.gantt-today { position: absolute; top: 0; transform: translateX(-50%); color: var(--bad); font-weight: 600; white-space: nowrap; }
.progress-steps { list-style: none; display: inline-flex; gap: 4px; margin: 0 .5rem 0 0; padding: 0; vertical-align: middle; }
.progress-steps li { cursor: help; }
.progress-steps li span { display: block; width: 22px; height: 8px; border-radius: 4px; background: var(--line); }
.progress-steps li.done span { background: var(--ok); }

/* Communication */
.mail-card { text-decoration: none; color: inherit; }
.mail-preview { max-height: calc(100vh - 2rem); overflow: auto; }
.mail-box { border: 1px solid var(--line); border-radius: 6px; padding: .75rem; background: var(--pv-paper-0); }
.mail-box pre { white-space: pre-wrap; font-family: inherit; font-size: .88rem; margin: 0; }
tr.is-selected td { background: color-mix(in srgb, var(--brand) 6%, var(--pv-paper-0)); }
.shop:has(.mail-preview) { grid-template-columns: minmax(0, 1fr) 420px; }
.switch-line { display: flex; gap: .5rem; align-items: center; font-weight: 400; cursor: pointer; }
.switch-line input { width: 18px; height: 18px; accent-color: var(--brand); }

/* Shop: denser tiles, star badge, per-question toggles */
.module-grid { grid-template-columns: repeat(auto-fill, minmax(215px, 1fr)); gap: .6rem; }
.module { position: relative; }
.module-pick { padding: .7rem .8rem .5rem; gap: .15rem .6rem; }
.module-icon { font-size: 1.3rem; }
.module-title { font-size: .93rem; line-height: 1.25; }
.module-teaser { font-size: .8rem; }
.module-toggle { font-size: .8rem; }
.module-details { padding: .35rem .8rem; }
.star-badge { position: absolute; top: -9px; right: -9px; width: 24px; height: 24px; border-radius: 50%; background: var(--warn-strong); color: var(--pv-paper-0); display: grid; place-items: center; font-size: .8rem; box-shadow: 0 2px 6px rgba(0,0,0,.2); z-index: 1; }
.q-pick li { display: flex; flex-direction: column; gap: .2rem; padding-bottom: .35rem; border-bottom: 1px dashed var(--line); }
.q-attrs { display: flex; gap: .3rem; margin-left: 1.5rem; }
.mini-toggle { display: inline-flex; cursor: pointer; font-weight: 400; }
.mini-toggle input { position: absolute; opacity: 0; pointer-events: none; }
.mini-toggle span { font-size: .72rem; padding: .05rem .5rem; border: 1px solid var(--line); border-radius: 99px; color: var(--muted); background: var(--card); }
.mini-toggle input:checked + span { background: var(--brand); border-color: var(--brand); color: var(--pv-on-accent); }
.mini-toggle.ko input:checked + span { background: var(--bad); border-color: var(--bad); }
tr.is-empty-row { display: none; }
.price-table select { min-width: 7rem; }
.module-grid { align-items: start; }
.logo-mark { border-radius: var(--radius); font-family: var(--font-title); }
.btn { border-radius: var(--radius); }
.sidebar .side-nav a[aria-current="page"] { box-shadow: inset 3px 0 0 var(--accent); }

.suggest-list .btn-link { text-align: left; }

/* Labels always above their choices */
.crit-row { flex-direction: column; align-items: stretch; gap: .35rem; }
.crit-row .crit-label { min-width: 0; }
.crit-row.crit-weight { flex-direction: row; align-items: center; flex-wrap: wrap; }
.crit-row.crit-weight .crit-label { flex-basis: 100%; }
.crit-help { margin: .5rem 0 0; }
/* Suggestions: clearly not yet taken over */
.suggest-cards { display: flex; flex-direction: column; gap: .4rem; }
.suggest-card { display: flex; justify-content: space-between; gap: .5rem; align-items: center; border: 1.5px dashed var(--pv-line-strong); border-radius: var(--radius); padding: .45rem .6rem; font-size: .88rem; background: var(--bg); }
.suggest-card .btn-small { white-space: nowrap; }
.preview-block h2 { font-size: 1.1rem; }
.preview-block h3 { margin-top: .75rem; }
.preview-questions { padding-left: 1.3rem; }
.preview-questions li { margin: .35rem 0; }
.preview-scroll { max-height: 260px; overflow: auto; }
.price-blank { display: inline-block; width: 90px; height: 1.3em; border-bottom: 1px solid var(--muted); }
.preview-cta { display: flex; gap: .75rem; align-items: center; flex-wrap: wrap; }
@media print { .no-print { display: none !important; } .card { break-inside: avoid; } }

/* Vertical timeline for the schedule */
.vtimeline { list-style: none; margin: 1rem 0 .5rem; padding: 0; position: relative; }
.vtimeline::before { content: ""; position: absolute; left: 14px; top: 8px; bottom: 8px; width: 2px; background: var(--line); }
.vtimeline li { position: relative; display: grid; grid-template-columns: 30px 1fr; gap: .9rem; padding-bottom: 1.1rem; }
.vt-dot { width: 30px; height: 30px; border-radius: 50%; background: var(--brand); color: var(--pv-on-accent); display: grid; place-items: center; font-weight: 700; font-size: .85rem; z-index: 1; }
.vt-body p { margin: .3rem 0 0; }
.vt-field { display: flex; gap: .6rem; align-items: center; flex-wrap: wrap; margin-top: .35rem; }
.vt-field input { max-width: 260px; }
.quick-picks { display: inline-flex; gap: .3rem; flex-wrap: nowrap; margin: 0; }
.quick-picks .chip { font-size: .8rem; padding: .25rem .65rem; white-space: nowrap; }
/* Longer pick lists (Stakeholder: colleagues of the company) wrap onto the next line instead of widening the page. */
.quick-picks.quick-picks-list { display: flex; flex-wrap: wrap; }
.module-meta .pill { white-space: normal; max-width: 100%; }
.module-body { min-width: 0; }

/* Shop groups instead of star badges; calm monochrome pictograms */
.star-badge { display: none; }
.group-head { font-size: .95rem; margin: 1.1rem 0 .5rem; display: flex; flex-direction: column; gap: .1rem; }
.group-head:first-of-type { margin-top: .25rem; }
.module-icon, .lib-icon { filter: grayscale(1) contrast(.9); opacity: .75; }
.own-q { margin-top: 1rem; border: 1px dashed var(--pv-line-strong); border-radius: var(--radius); padding: .6rem .8rem; }
.own-q summary { font-weight: 600; }
.own-q-form { display: flex; gap: .4rem; flex-wrap: wrap; align-items: center; margin-top: .5rem; }
.own-q-form input:not([type]), .own-q-form input[type=text] { flex: 1 1 260px; }
.own-q-form select { width: auto; }
.mini-toggle.is-disabled { opacity: .4; cursor: not-allowed; }

/* Price sheet: proposals as tiles, full-width table, currency */
.prop-strip { margin-bottom: 1rem; }
.prop-tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: .45rem; }
.prop-tile { display: flex; gap: .5rem; align-items: flex-start; text-align: left; border: 1.5px dashed var(--pv-line-strong); border-radius: var(--radius); background: var(--card); padding: .45rem .6rem; cursor: pointer; font-size: .86rem; color: var(--ink); }
.prop-tile:hover { border-color: var(--brand); border-style: solid; }
.prop-tile .prop-add { font-weight: 700; color: var(--brand); }
.prop-tile.is-taken { border-style: solid; border-color: var(--ok); background: var(--ok-bg); cursor: default; }
.prop-tile.is-taken .prop-add { color: var(--ok); }
.price-table { table-layout: auto; width: 100%; }
.price-table .c-code input { width: 4.2rem; }
.price-table .c-unit input { width: 8.5rem; }
.price-table .c-qty input { width: 6.5rem; }
.price-table .c-lot select { width: 9.5rem; }
.price-table .c-text input { min-width: 14rem; }
.currency-card { margin-top: 1.25rem; }
.currency-card select { width: auto; display: inline-block; padding: .2rem .4rem; }
.check-inline ul, .check-inline div { display: flex; gap: .8rem; flex-wrap: wrap; list-style: none; padding: 0; margin: .2rem 0; }
.check-inline label { font-weight: 400; }
.lot-cur td { padding: .2rem .8rem .2rem 0; }
.lot-cur select { width: auto; padding: .2rem .4rem; }

.pill-rec { background: var(--pv-signal-tint); color: var(--brand); border-color: var(--pv-signal-2); }
.module.is-blocked { opacity: .65; border-color: var(--bad-line); background: var(--bad-bg); }
.module.is-blocked .module-pick { cursor: not-allowed; }
.block-form { display: flex; gap: .35rem; align-items: center; }
.block-form input { width: 9rem; padding: .25rem .4rem; }

/* New supplier as a card with full address */
.new-sup { border: 1px solid var(--line); border-radius: var(--radius); padding: .75rem .9rem .25rem; margin: .6rem 0; background: var(--card); }
.new-sup.is-empty-row { display: none; }
.new-sup-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 0 .8rem; }
.plz-ort { display: grid; grid-template-columns: 6rem 1fr 4rem; gap: 0 .5rem; grid-column: span 2; }
@media (max-width: 700px) { .plz-ort { grid-column: auto; } }
.edit-link { font-size: .85rem; font-weight: 600; text-decoration: none; border: 1px solid var(--line); border-radius: 99px; padding: .2rem .7rem; }
.edit-link:hover { border-color: var(--brand); }

.final-check { margin-top: 1rem; border: 1px solid var(--line); border-radius: var(--radius); padding: .8rem 1rem; background: var(--bg); }
.ack-list li { display: flex; justify-content: space-between; gap: .75rem; padding: .3rem 0; }
.ack-list label, .ack-main { font-weight: 400; display: flex; gap: .5rem; align-items: flex-start; }
.ack-main { margin-top: .5rem; font-weight: 600; }
.final-check { border: 2px solid var(--brand); background: var(--pv-signal-tint); }
.final-check h3 { color: var(--brand); }

/* Library: tiles and side drawer */
.lib-tile { text-align: left; font: inherit; color: inherit; cursor: pointer; padding: 0; }
.lib-tile .module-pick { cursor: pointer; }
.drawer { margin: 0 0 0 auto; height: 100vh; max-height: 100vh; width: min(560px, 100vw); border: 0; padding: 0; box-shadow: -12px 0 40px color-mix(in srgb, var(--pv-ink-900) 25%, transparent); }
.drawer::backdrop { background: color-mix(in srgb, var(--pv-ink-900) 35%, transparent); }
.drawer-inner { padding: 1.5rem 1.6rem 2rem; position: relative; }
.drawer-close { position: absolute; top: .8rem; right: 1rem; border: 0; background: none; font-size: 1.6rem; cursor: pointer; color: var(--muted); }
.drawer h2 { font-size: 1.35rem; margin-right: 2rem; }
.drawer h3 { font-size: .95rem; margin-top: 1.1rem; }
.drawer-list { padding-left: 1.1rem; margin: .25rem 0; }
.drawer-list li { margin: .25rem 0; }
.drawer-table { width: 100%; font-size: .9rem; }
.drawer-table td { padding: .25rem 0; border-bottom: 1px solid var(--line); }
.side-badge { margin-left: auto; background: var(--accent); color: var(--navy); border-radius: 99px; font-size: .75rem; font-weight: 700; padding: 0 .45rem; }
.inbox-q { border: 1px solid var(--line); border-radius: var(--radius); padding: .75rem .9rem; margin-bottom: .6rem; background: var(--card); }
.inbox-q textarea { margin-top: .4rem; }

/* Collapsible menu chapters */
.side-group { margin-top: .35rem; }
.side-group summary { list-style: none; cursor: pointer; display: flex; align-items: center; gap: .5rem; padding: .5rem .65rem; border-radius: 6px;
  color: var(--pv-muted-dark); font-size: .78rem; text-transform: uppercase; letter-spacing: .06em; font-weight: 600; }
.side-group summary::-webkit-details-marker { display: none; }
.side-group summary::after { content: "›"; margin-left: auto; transition: transform .15s; font-size: 1rem; }
.side-group[open] summary::after { transform: rotate(90deg); }
.side-group summary:hover { color: var(--pv-text-dark); background: rgba(255,255,255,.05); }
.side-group > a { padding-left: 1rem; }
.side-group summary .side-badge { margin-left: .4rem; }
.code-card { max-width: 520px; margin: 2rem auto; }
.code-input { font-size: 1.8rem; letter-spacing: .5em; text-align: center; max-width: 16rem; font-family: var(--font-title); }

/* Supplier portal: next step, progress, chapters */
.next-card .next-top { display: flex; justify-content: space-between; gap: 1rem; align-items: center; flex-wrap: wrap; margin-bottom: .8rem; }
.next-card .next-top > div:first-child { flex: 1 1 260px; }
.big-progress { height: 14px; border-radius: 99px; background: var(--bg); overflow: hidden; margin: .35rem 0; }
.big-progress > span { display: block; height: 100%; background: var(--ok); border-radius: 99px; }
.countdown { text-align: center; border: 1px solid var(--line); border-radius: var(--radius); padding: .5rem 1rem; min-width: 8rem; }
.countdown strong { display: block; font-family: var(--font-title); font-size: 2rem; line-height: 1; }
.countdown span { font-size: .8rem; color: var(--muted); }
.q-chapter { border: 1px solid var(--line); border-radius: var(--radius); padding: .4rem .9rem .2rem; margin: .8rem 0; }
.q-chapter summary { cursor: pointer; padding: .4rem 0; display: flex; justify-content: space-between; gap: 1rem; font-weight: 650; }
.q-chapter.is-complete { border-color: var(--ok-line); }
.q-chapter.is-complete .q-count { color: var(--ok); }
.q-field.is-ko { border-left: 3px solid var(--bad); padding-left: .6rem; }
.seg.yesno .seg-opt span { min-width: 5.5rem; text-align: center; font-size: .95rem; padding: .45rem 1rem; }
.save-bar { position: sticky; bottom: 0; background: var(--card); padding: .75rem 0; border-top: 1px solid var(--line); z-index: 5; }
.save-bar #q-total { margin-right: auto; }
.code-card .label { display: block; margin-bottom: .3rem; }

/* No text overflow in tiles, anywhere */
.module, .module-body, .module-title, .module-teaser, .mail-card .small { overflow-wrap: anywhere; min-width: 0; }
.mail-card .module-body .small { color: var(--ink); font-size: .82rem; }
/* Traffic light and supplier dots */
.light { display: inline-block; width: 12px; height: 12px; border-radius: 50%; }
.light-green { background: var(--ok); } .light-orange { background: var(--warn-strong); } .light-red { background: var(--bad); } .light-grey { background: var(--pv-line-strong); }
.sup-dots { display: inline-flex; gap: 3px; margin-right: .35rem; vertical-align: middle; flex-wrap: wrap; max-width: 9rem; }
.dot { display: inline-block; width: 11px; height: 11px; border-radius: 50%; border: 1px solid rgba(0,0,0,.06); cursor: help; }
.dot-none { background: var(--pv-line-light); } .dot-sent { background: var(--pv-line-strong); } .dot-opened { background: var(--pv-signal); }
.dot-nda { background: var(--pv-signal-paper); } .dot-submitted { background: var(--ok); }
.dot-incomplete { background: var(--warn-strong); }
.legend-dots .dot { margin: 0 .15rem 0 .6rem; vertical-align: middle; }

.news-badge { display: inline-grid; place-items: center; min-width: 20px; height: 20px; padding: 0 6px; border-radius: 99px;
  background: var(--brand); color: var(--pv-on-accent); font-size: .72rem; font-weight: 700; vertical-align: middle; cursor: help; }
.inbox-group summary { align-items: center; flex-wrap: wrap; }

/* Document slots */
.doc-slots { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: .75rem; }
.doc-slot { border: 1px solid var(--line); border-radius: var(--radius); padding: .8rem .9rem; background: var(--card); display: flex; flex-direction: column; gap: .4rem; }
.doc-slot.is-done { border-color: var(--ok-line); }
.doc-slot-head { display: flex; justify-content: space-between; gap: .5rem; align-items: center; flex-wrap: wrap; }
.slot-drop { border: 1.5px dashed var(--pv-line-strong); border-radius: var(--radius); padding: .7rem; text-align: center; cursor: pointer; color: var(--brand); font-weight: 600; font-size: .88rem; background: var(--bg); margin-top: auto; }
.slot-drop.is-over, .slot-drop:hover { border-color: var(--brand); background: var(--pv-signal-tint); }
.doc-line { display: flex; gap: .4rem; align-items: center; margin: 0; overflow-wrap: anywhere; }
/* Equal tile heights in every tile grid */
.module-grid { align-items: stretch; }
.module { height: 100%; }
.prop-tile.is-taken { cursor: pointer; }
.prop-tile.is-taken:hover .prop-add::after { content: ' entfernen'; font-size: .72rem; }
.module-icon, .lib-icon { filter: none; opacity: 1; }
.notice-return { background: var(--pv-signal-tint); border-color: var(--pv-signal-2); display: flex; gap: 1rem; justify-content: space-between; flex-wrap: wrap; }

.avatar-photo { object-fit: cover; padding: 0; background: var(--bg); }
.avatar-sm { width: 30px; height: 30px; font-size: .72rem; grid-row: auto; flex: none; }
.side-user { display: flex; gap: .55rem; align-items: center; text-decoration: none; border-radius: 6px; padding: .35rem .5rem; }
.side-user:hover { background: rgba(255,255,255,.07); }
.sidebar .avatar { background: var(--accent); color: var(--navy); }
.profile-card { max-width: 640px; }
.profile-photo { display: grid; grid-template-columns: 72px 1fr; gap: .4rem 1rem; align-items: center; margin-bottom: 1rem; }
.profile-photo .avatar { width: 72px; height: 72px; font-size: 1.4rem; grid-row: span 3; }

/* Evaluation hub */
.eval-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: .8rem; }
.eval-card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: .9rem 1rem; display: flex; flex-direction: column; gap: .5rem; }
.eval-card.is-sealed { background: var(--bg); }
.eval-head { display: flex; justify-content: space-between; gap: .5rem; align-items: flex-start; }
.eval-title { font-weight: 650; text-decoration: none; color: var(--ink); overflow-wrap: anywhere; }
.eval-head p { margin: .1rem 0 0; }
.podium { list-style: none; margin: 0; padding: 0; }
.podium li { display: grid; grid-template-columns: 1.6rem 1fr auto; gap: .5rem; align-items: center; padding: .25rem 0; border-bottom: 1px solid var(--line); }
.podium-rank { width: 1.4rem; height: 1.4rem; border-radius: 50%; background: var(--bg); display: grid; place-items: center; font-size: .75rem; font-weight: 700; }
.podium li:first-child .podium-rank { background: var(--brand); color: var(--pv-on-accent); }
.podium-name { overflow-wrap: anywhere; }
.eval-actions { display: flex; gap: .35rem; flex-wrap: wrap; margin-top: auto; }

.avatar-symbol { background: var(--pv-signal-tint) !important; font-size: 1.3rem; }
.avatar-sm.avatar-symbol { font-size: 1rem; }
.symbol-pick { display: flex; flex-wrap: wrap; gap: .4rem; margin: .75rem 0; }
.symbol-opt input { position: absolute; opacity: 0; }
.symbol-opt span { display: grid; place-items: center; width: 44px; height: 44px; border-radius: 50%; border: 2px solid var(--line); font-size: 1.4rem; cursor: pointer; background: var(--card); }
.symbol-opt input:checked + span { border-color: var(--brand); box-shadow: 0 0 0 2px var(--pv-signal-tint); }

/* Decision room */
.verdict { display: grid; grid-template-columns: 1fr auto; gap: 1.5rem; align-items: center; border-radius: var(--radius); padding: 1.3rem 1.5rem; margin-bottom: 1.2rem; color: var(--pv-text-dark); background: linear-gradient(120deg, var(--navy), var(--brand)); }
.verdict-label { margin: 0; font-size: .8rem; text-transform: uppercase; letter-spacing: .07em; color: var(--pv-signal-2); }
.verdict-name { color: var(--pv-text-dark); font-size: 2rem; margin: .2rem 0 .35rem; }
.verdict-why { margin: 0; color: var(--pv-signal-tint); }
.verdict-tip { color: var(--pv-signal-2); margin: .5rem 0 0; }
.verdict-side { display: flex; flex-direction: column; align-items: flex-end; gap: .5rem; text-align: right; }
.verdict-side .btn { background: var(--pv-paper-0); color: var(--navy); border-color: var(--pv-text-dark); }
.verdict-amount { font-family: var(--font-title); font-size: 1.7rem; margin: 0; line-height: 1.1; }
.verdict-amount span { display: block; font-size: .78rem; color: var(--pv-signal-2); font-family: var(--font); }
.robust { padding: .2rem .7rem; border-radius: 99px; font-size: .8rem; font-weight: 700; background: rgba(255,255,255,.15); }
.robust-best { background: var(--pv-signal-paper); } .robust-ok { background: rgba(255,255,255,.2); } .robust-warn { background: var(--warn-strong); }
.section-title { display: flex; gap: .6rem; align-items: baseline; }
.scenario-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: .7rem; margin-bottom: 1rem; }
.scenario { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: .9rem 1rem; }
.scenario.is-reco { border: 2px solid var(--brand); }
.scenario-title { margin: 0; font-weight: 650; font-size: .9rem; color: var(--muted); }
.scenario-amount { font-family: var(--font-title); font-size: 1.45rem; margin: .2rem 0; }
.scenario-who { margin: 0 0 .4rem; overflow-wrap: anywhere; }
.scenario-facts { list-style: none; padding: 0; margin: 0 0 .4rem; }
.decision-cols { margin-bottom: 1rem; }
.action-list, .risk-list { list-style: none; margin: 0; padding: 0; }
.action-list li { display: grid; grid-template-columns: 1fr auto; gap: .3rem .75rem; align-items: center; padding: .55rem 0; border-bottom: 1px solid var(--line); }
.action-list .btn { grid-column: 2; }
.action-value { grid-column: 2; grid-row: 1; text-align: right; font-family: var(--font-title); }
.risk-list li { display: grid; grid-template-columns: 1.6rem 1fr; gap: .2rem .5rem; padding: .45rem 0; border-bottom: 1px solid var(--line); align-items: center; }
.risk-flags { grid-column: 2; display: flex; gap: .3rem; flex-wrap: wrap; }
@media (max-width: 700px) { .verdict { grid-template-columns: 1fr; } .verdict-side { align-items: flex-start; text-align: left; } }
.src-link { color: inherit; text-decoration: underline dotted; text-underline-offset: 3px; }
.src-link:hover { text-decoration-style: solid; }

/* Scenario builder */
.builder { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 1rem; align-items: start; }
.lot-lane { margin-bottom: 1rem; }
.lot-lane h3 { font-size: .95rem; margin-bottom: .4rem; }
.lane-tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: .5rem; }
.offer-tile { background: var(--card); border: 1.5px solid var(--line); border-radius: var(--radius); padding: .6rem .7rem; cursor: grab; display: flex; flex-direction: column; gap: .15rem; overflow-wrap: anywhere; }
.offer-tile:hover, .offer-tile:focus { border-color: var(--brand); outline: none; box-shadow: 0 4px 14px color-mix(in srgb, var(--pv-ink-900) 8%, transparent); }
.offer-tile.is-picked { border-color: var(--brand); box-shadow: inset 0 0 0 1px var(--brand); background: var(--pv-signal-tint); }
.offer-tile.is-incomplete { opacity: .6; }
.offer-tile.is-ko { border-color: var(--bad-line); }
.tile-amount { font-family: var(--font-title); font-size: 1.05rem; }
.tile-meta { font-size: .78rem; color: var(--muted); }
.tile-flags { display: flex; gap: .25rem; flex-wrap: wrap; }
.builder-cart { position: sticky; top: 1rem; }
.builder-cart.is-over { border-color: var(--brand); background: var(--pv-signal-tint); }
.slot { border: 1.5px dashed var(--pv-line-strong); border-radius: var(--radius); padding: .5rem .6rem; margin-bottom: .4rem; }
.slot.is-filled { border-style: solid; border-color: var(--brand); }
.slot-label { display: block; font-size: .75rem; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; }
.slot-body { display: flex; gap: .3rem; align-items: center; }
.slot-body .cart-remove { margin-left: auto; }
.builder-sum { border-top: 1px solid var(--line); margin-top: .6rem; padding-top: .6rem; }
@media (max-width: 1000px) { .builder { grid-template-columns: 1fr; } .builder-cart { position: static; } }
.pref-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: .6rem; }
.pref-card { border: 1px solid var(--line); border-radius: var(--radius); padding: .7rem .8rem; background: var(--card); overflow-wrap: anywhere; }
.pref-label { display: inline-block; margin: .3rem 0; padding: .1rem .6rem; border-radius: 99px; font-size: .8rem; font-weight: 700; background: var(--bg); }
.pref-low-high .pref-label { background: var(--ok-bg); color: var(--ok); }
.pref-high-high .pref-label { background: var(--pv-signal-tint); color: var(--brand); }
.pref-high-low .pref-label { background: var(--warn-bg); color: var(--warn); }
.pref-low-low .pref-label { background: var(--bg); color: var(--muted); }

.expert-note { border: 1.5px solid var(--pv-signal-2); background: var(--pv-signal-tint); border-radius: var(--radius); padding: .9rem 1.1rem; margin-bottom: 1.2rem; }
.expert-note.is-empty { background: var(--card); border-style: dashed; }
.note-verdict { font-size: 1.1rem; margin: .2rem 0 .4rem; color: var(--brand); }
.note-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: .5rem 1rem; }
.note-cols .label { margin: 0; }
.note-form { margin-top: .6rem; }
.qvalue { border: 1px solid var(--line); background: var(--card); border-radius: var(--radius); padding: .9rem 1.1rem; margin-bottom: 1.2rem; }
.qvalue.is-good { border-color: var(--ok-line); }
.qvalue-row { display: flex; gap: 1.2rem; align-items: center; flex-wrap: wrap; margin: .4rem 0 .6rem; }
.qvalue-row > div:not(.qv-vs) { display: flex; flex-direction: column; }
.qv-num { font-family: var(--font-title); font-size: 1.5rem; }
.qv-vs { font-size: 1.6rem; color: var(--muted); font-weight: 700; }
.verdict-doc { color: var(--pv-signal-tint); font-size: .85rem; font-weight: 600; }

.talk-points { padding-left: 1.2rem; margin: 0; }
.talk-points li { margin: .35rem 0; }
.tile-value small { font-size: .9rem; color: var(--muted); }

.hide-bar { display: flex; gap: .35rem; flex-wrap: wrap; align-items: center; margin-bottom: .8rem; }
.hide-toggle span { font-size: .8rem; padding: .15rem .6rem; }
.hide-toggle input:not(:checked) + span { text-decoration: line-through; opacity: .7; }

/* Triage (29.09.2026) */
.triage { border-bottom: 1px solid var(--line); padding-bottom: 1.1rem; margin-bottom: 1.2rem; }
.triage-cards .choice-card { padding: .9rem 1rem; }
.suggest-note { display: block; color: var(--brand); margin-top: .2rem; }
.triage-more { display: flex; flex-direction: column; gap: .6rem; margin-top: .9rem; }
.triage-more summary { cursor: pointer; color: var(--brand); font-weight: 600; }
.triage-box { margin-top: .5rem; padding: .8rem; border: 1px dashed var(--line); border-radius: var(--radius); }
.triage-box textarea { width: 100%; }
.triage-row { display: flex; gap: .6rem; align-items: center; flex-wrap: wrap; margin-top: .5rem; }
.skip-line { display: flex; gap: .5rem; align-items: flex-start; color: var(--muted); font-weight: 400; }
.mode-bar { display: flex; gap: .4rem; align-items: center; flex-wrap: wrap; margin: -.3rem 0 .8rem; }
.mode-chip { border: 1px solid var(--line); border-radius: 99px; padding: .1rem .6rem; background: var(--card); }
.mode-expert { border-color: var(--warn-line); }
.inline-form { display: inline; }
.linklike { background: none; border: 0; color: var(--brand); text-decoration: underline; cursor: pointer; padding: 0; font: inherit; }

/* Stakeholders (29.09.2026) */
.sh-score { text-align: center; border: 1px solid var(--line); border-radius: var(--radius); padding: .4rem .9rem; }
.sh-score strong { display: block; font-family: var(--font-title); font-size: 1.6rem; }
.sh-score span { font-size: .78rem; color: var(--muted); }
.sh-score.is-ok { border-color: var(--ok); color: var(--ok); }
.sh-add { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
.sh-add input[name=name], .sh-add input[name=email], .sh-add input[name=topic] { flex: 1 1 180px; }
.sh-list { display: flex; flex-direction: column; gap: .7rem; }
.sh-card { border: 1px solid var(--line); border-radius: var(--radius); padding: .8rem 1rem; background: var(--card); }
.sh-card.is-blocked { opacity: .6; }
.sh-head { display: flex; gap: .7rem; align-items: center; }
.sh-head .avatar { grid-row: auto; flex: none; }
.sh-who { flex: 1; display: flex; flex-direction: column; }
.sh-state { font-size: .8rem; font-weight: 600; border-radius: 99px; padding: .1rem .6rem; border: 1px solid var(--line); white-space: nowrap; }
.sh-approved { color: var(--ok); border-color: var(--ok); background: var(--ok-bg); }
.sh-stale, .sh-changes { color: var(--warn); border-color: var(--warn-line); background: var(--warn-bg); }
.sh-pending { color: var(--muted); }
.sh-actions, .sh-criteria, .sh-eval { display: flex; gap: .5rem; flex-wrap: wrap; align-items: center; margin-top: .55rem; }
.toggle-pill { border: 1px solid var(--line); background: var(--card); border-radius: 99px; padding: .1rem .6rem; font: inherit; cursor: pointer; color: var(--muted); }
.toggle-pill.on { border-color: var(--brand); color: var(--brand); }
.inline-details { display: inline; }
.inline-details summary { display: inline; list-style: none; }
.sh-reopen { display: flex; gap: .4rem; margin-top: .4rem; }
.sh-reopen input { flex: 1; }
.note-card { border-left: 3px solid var(--warn-line); padding: .4rem .8rem; margin: .6rem 0; }
.note-card.is-done { border-left-color: var(--ok); }
.note-target { font-weight: 600; margin: .1rem 0; }
.note-answer { display: flex; gap: .5rem; flex-wrap: wrap; }
.note-answer input { flex: 1 1 260px; }
.sh-settings { display: flex; gap: .8rem; flex-wrap: wrap; align-items: center; }
.sh-chip { text-decoration: none; color: inherit; }
.sh-chip.is-ok { border-color: var(--ok); color: var(--ok); }
.sh-teaser { display: flex; gap: .9rem; align-items: center; margin-top: 1rem; padding: .9rem 1rem; border: 1.5px dashed var(--brand); border-radius: var(--radius); text-decoration: none; color: inherit; }
.sh-teaser:hover { background: color-mix(in srgb, var(--brand) 5%, var(--pv-paper-0)); }
.sh-teaser > span:nth-child(2) { flex: 1; display: flex; flex-direction: column; gap: .15rem; }
.sh-teaser-icon { font-size: 1.6rem; }
/* Stakeholder portal */
.approve-bar { display: flex; gap: 1rem; align-items: center; justify-content: space-between; flex-wrap: wrap; position: sticky; top: .5rem; z-index: 5; border-color: var(--brand); }
.approve-bar > div { display: flex; flex-direction: column; }
.review-list { display: flex; flex-direction: column; }
.review-item { display: flex; gap: 1rem; justify-content: space-between; padding: .6rem 0; border-top: 1px solid var(--line); flex-wrap: wrap; }
.review-item:first-child { border-top: 0; }
.review-text { flex: 1 1 320px; }
.review-side { flex: 0 1 340px; text-align: right; }
.challenge summary { list-style: none; cursor: pointer; font-size: .85rem; }
.challenge summary::-webkit-details-marker { display: none; }
.ok-mark { color: var(--ok); margin-right: .5rem; }
.challenge form { display: flex; flex-direction: column; gap: .4rem; margin-top: .4rem; text-align: left; }
.note-mine { background: color-mix(in srgb, var(--pv-note) 16%, var(--pv-paper-0)); border-radius: var(--radius); padding: .25rem .5rem; margin-bottom: .3rem; text-align: left; }
.review-propose { display: flex; flex-direction: column; gap: .5rem; }
.rate-block h2 { margin: 0; }
.rate-answers { margin: .6rem 0; }
.answers-table td { vertical-align: top; font-size: .88rem; }
.rate-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: .7rem; margin-top: .6rem; }
.rate-cell { border: 1.5px solid var(--line); border-radius: var(--radius); padding: .6rem .7rem; display: flex; flex-direction: column; gap: .45rem; }
.rate-cell.is-rated { border-color: var(--brand); }
.rate-cell:has(input:checked) { border-color: var(--brand); }
.note-buttons { display: flex; gap: .3rem; }
.note-buttons label { flex: 1; }
.note-buttons input { position: absolute; opacity: 0; pointer-events: none; }
.note-buttons span { display: block; text-align: center; border: 1px solid var(--line); border-radius: var(--radius); padding: .35rem 0; font-weight: 700; cursor: pointer; }
.note-buttons input:checked + span { background: var(--brand); border-color: var(--brand); color: var(--pv-on-accent); }
.note-buttons input:focus-visible + span { outline: 2px solid var(--accent); }
.sticky-save { position: sticky; bottom: .5rem; display: flex; gap: .7rem; align-items: center; flex-wrap: wrap; justify-content: flex-end; border-color: var(--brand); }
.sticky-save > div { flex: 1; }

/* Demand requests (29.09.2026) */
.dsteps { display: flex; gap: .4rem; flex-wrap: wrap; list-style: none; padding: 0; margin: .8rem 0; }
.dsteps li { border: 1px solid var(--line); border-radius: 99px; padding: .2rem .8rem; font-size: .85rem; color: var(--muted); cursor: pointer; background: var(--card); }
.dsteps li.current { border-color: var(--brand); color: var(--pv-on-accent); background: var(--brand); }
.dsteps li.done { border-color: var(--brand); color: var(--brand); }
.dstep-title { font-family: var(--font-title); font-size: 1.35rem; font-weight: 700; margin-bottom: .6rem; }
.kind-cards { grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); margin-bottom: 1rem; }
.kind-card > span { display: flex; flex-direction: column; gap: .25rem; }
.kind-icon { font-size: 1.6rem; }
.dstep-nav { justify-content: space-between; }
.demand-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: .8rem; }
.demand-tile { display: flex; flex-direction: column; gap: .35rem; text-decoration: none; color: inherit; transition: border-color .15s; }
.demand-tile:hover { border-color: var(--brand); }
.demand-top { display: flex; gap: .5rem; align-items: center; }
.demand-top .small { flex: 1; }
.demand-status { font-size: .78rem; font-weight: 700; border-radius: 99px; padding: .1rem .6rem; background: var(--bg); border: 1px solid var(--line); white-space: nowrap; }
.st-new { background: var(--warn-bg); border-color: var(--warn-line); color: var(--warn); }
.st-review { background: var(--pv-signal-tint); border-color: var(--accent); color: var(--brand); }
.st-tender { background: var(--ok-bg); border-color: var(--ok); color: var(--ok); }
.demand-facts { display: grid; grid-template-columns: minmax(130px, auto) 1fr; gap: .35rem 1rem; margin: 0; }
.demand-facts dt { color: var(--muted); font-size: .88rem; }
.demand-facts dd { margin: 0; }
.demand-progress { margin: .6rem 0 1rem; }
.thread { display: flex; flex-direction: column; gap: .5rem; margin-bottom: .7rem; max-height: 420px; overflow: auto; }
.msg { border: 1px solid var(--line); border-radius: var(--radius); padding: .4rem .7rem; max-width: 90%; }
.msg p { margin: .2rem 0 0; }
.msg-purchasing { align-self: flex-end; background: color-mix(in srgb, var(--brand) 6%, var(--pv-paper-0)); border-color: var(--accent); }
.thread-form { display: flex; gap: .5rem; align-items: flex-end; }
.thread-form textarea { flex: 1; }
.decide-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: .8rem; }
.decide-option { display: flex; flex-direction: column; gap: .45rem; border: 1.5px solid var(--line); border-radius: var(--radius); padding: .8rem 1rem; }
.decide-main { border-color: var(--brand); }
.plain-list { list-style: none; padding: 0; margin: .3rem 0; }
.cc-box { margin-top: .8rem; }

.steps .done span { border-top-color: var(--ok); color: var(--ink); }
.steps .current span { border-top-color: var(--brand); color: var(--ink); font-weight: 650; }

/* ===== ProcureValor suite: landing pages, e-mail code login, module menu ===== */
.landing { min-height: 100vh; display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr); background: var(--bg); }
.landing-hero { background: var(--navy); color: var(--pv-text-dark); padding: 56px 56px 40px; display: flex; flex-direction: column; }
.landing-hero .logo-mark { background: var(--pv-paper-0); color: var(--navy); }
.landing-brand { display: flex; align-items: center; gap: .9rem; }
.landing-brand .name { font-family: var(--font-title); font-size: 1.35rem; font-weight: 700; }
.landing-brand .by { font-size: .8rem; color: var(--pv-muted-dark); }
.landing-claim { margin: auto 0; max-width: 560px; padding: 48px 0; }
.landing-claim h1 { font-size: 2.4rem; line-height: 1.15; margin: 0 0 1rem; color: var(--pv-text-dark); font-weight: 500; }
.landing-claim .lead { color: var(--pv-muted-dark); font-size: 1.05rem; margin-bottom: 2rem; }
.landing-points { list-style: none; margin: 0; padding: 0; display: grid; gap: .9rem; }
.landing-points li { display: grid; grid-template-columns: 28px 1fr; gap: .6rem; color: var(--pv-text-dark); }
.landing-points li::before { content: "✓"; width: 24px; height: 24px; border-radius: 50%; background: color-mix(in srgb, var(--pv-signal) 18%, transparent);
  color: var(--accent); display: grid; place-items: center; font-size: .8rem; font-weight: 700; }
.landing-suite { border-top: 1px solid rgba(255,255,255,.12); padding-top: 1.25rem; font-size: .85rem; color: var(--pv-muted-dark); }
.landing-suite a { color: var(--pv-text-dark); }
.landing-suite .chips { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: .5rem; }
.landing-suite .chip { border: 1px solid rgba(255,255,255,.2); border-radius: 999px; padding: .2rem .7rem; color: var(--pv-text-dark); background: transparent; cursor: default; font-size: .85rem; }
.landing-login { display: flex; align-items: center; justify-content: center; padding: 40px 24px; }
.landing-login .login-card { width: 100%; max-width: 400px; }
.landing-foot { font-size: .8rem; color: var(--muted); text-align: center; margin-top: 1rem; }
.code-input { font-size: 1.8rem; letter-spacing: .5em; text-align: center; font-variant-numeric: tabular-nums; }
.test-code { background: var(--warn-bg); color: var(--warn); border-radius: var(--radius); padding: .6rem .8rem; font-size: .9rem; }
@media (max-width: 860px) {
  .landing { grid-template-columns: 1fr; }
  .landing-hero { padding: 28px 16px; }
  .landing-claim { padding: 28px 0; }
  .landing-claim h1 { font-size: 1.8rem; }
}
.demo-banner { background: var(--warn-bg); color: var(--warn); font-size: .85rem; padding: .4rem 1rem; border-bottom: 1px solid var(--warn-line); }
.side-module > summary { font-family: var(--font-title); font-weight: 700; letter-spacing: .01em; }
.side-module > summary .mod-mark { display: inline-grid; place-items: center; width: 22px; height: 22px; border-radius: 5px;
  background: color-mix(in srgb, var(--pv-signal) 20%, transparent); color: var(--accent); font-size: .65rem; font-weight: 700; margin-right: .5rem; }
.side-module .side-sublabel { font-size: .7rem; text-transform: uppercase; letter-spacing: .06em; color: var(--pv-muted-dark); margin: .6rem 0 .2rem .75rem; }
.suite-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 1rem; }
.suite-tile { display: flex; flex-direction: column; gap: .75rem; text-decoration: none; color: inherit; }
.suite-tile:hover { box-shadow: 0 8px 24px color-mix(in srgb, var(--pv-ink-900) 8%, transparent); }
.suite-tile .head { display: flex; gap: .75rem; align-items: center; }
.suite-tile .facts { display: flex; flex-wrap: wrap; gap: .75rem 1.5rem; margin-top: auto; align-items: flex-end; }
.suite-tile .fact .v { font-family: var(--font-title); font-size: 1.15rem; font-weight: 700; white-space: nowrap; }
.suite-tile .fact .l { font-size: .75rem; color: var(--muted); }
.suite-flow { display: flex; gap: .5rem; align-items: center; flex-wrap: wrap; font-size: .9rem; color: var(--muted); margin: .25rem 0 1.25rem; }
.suite-flow .arrow { color: var(--brand); }
.side-module .side-group { margin-left: .6rem; }
.side-module .side-group summary { font-size: .85rem; }

/* ===== SpendValor ===== */
.spend-head .spend-crumb { margin: 0 0 .15rem; }
.spend-head .spend-crumb a { text-decoration: none; }
.spend-tenant-switch { display: flex; align-items: center; gap: .5rem; }
.spend-tenant-switch select { width: auto; min-width: 14rem; }
.spend-table th.num, .spend-table td.num { width: 1%; }
.spend-table tfoot th { background: var(--pv-paper-50); color: var(--ink); font-size: .9rem; }
.spend-table .tag { margin-left: .25rem; }
.spend-bars li { grid-template-columns: minmax(8rem, 13rem) 1fr 7.5rem; }
.spend-bars a.hb-label { color: var(--ink); text-decoration: none; }
.spend-bars a.hb-label:hover { color: var(--brand); text-decoration: underline; }
.spend-source { font-size: .8rem; color: var(--muted); margin: .75rem 0 0; }
.spend-filter { margin-bottom: .5rem; }
.spend-filter .spend-sort { flex: 0 1 240px; }
.spend-pager { display: flex; gap: .75rem; align-items: center; justify-content: space-between; margin-top: .75rem; }
.spend-cockpit-links { margin-bottom: 0; }
.side-module .spend-tabs > a { font-size: .85rem; padding: .28rem .65rem .28rem 1.6rem; }
.side-note { font-size: .8rem; color: var(--pv-muted-dark); margin: .3rem .65rem .5rem 1rem; }
/* Cockpit page: the iframe fills the whole main area */
.spend-cockpit-page .shell-main { display: flex; flex-direction: column; height: 100vh; height: 100dvh; }
.spend-cockpit-page main.spend-cockpit { flex: 1; min-height: 0; padding: 0; display: flex; }
.spend-cockpit-frame { flex: 1; width: 100%; height: 100%; border: 0; display: block; background: var(--pv-paper-0); }
@media (max-width: 900px) {
  .spend-bars li { grid-template-columns: minmax(6rem, 9rem) 1fr 6.5rem; }
  .spend-tenant-switch select { min-width: 0; }
}

/* ===== ContractValor ===== */
.cv-head .cv-crumb { margin: 0 0 .15rem; }
.cv-head .cv-crumb a { text-decoration: none; }
.cv-head h1 .cv-status { font-family: var(--font); font-size: .75rem; vertical-align: middle; margin-left: .35rem; }
.cv-head-actions { display: flex; gap: .75rem; align-items: center; flex-wrap: wrap; }
.cv-tenant-switch { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; max-width: 100%; min-width: 0; }
.cv-tenant-switch select { width: auto; min-width: 14rem; max-width: 100%; }
.cv-tiles { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.cv-tiles .tile-label .calc { margin-left: .2rem; }
.tile-value.cv-amount { font-size: 1.15rem; line-height: 1.35; margin: .15rem 0; }
.cv-deadlines, .cv-timeline, .cv-history { list-style: none; margin: 0; padding: 0; }
.cv-deadlines li, .cv-timeline li { display: grid; grid-template-columns: 14px 6.8rem 1fr; gap: .6rem; align-items: start;
  padding: .45rem 0; border-top: 1px solid var(--line); font-size: .9rem; }
.cv-deadlines li:first-child, .cv-timeline li:first-child, .cv-history li:first-child { border-top: 0; }
.cv-deadlines .light, .cv-timeline .light { margin-top: .35rem; }
.cv-date { font-variant-numeric: tabular-nums; font-weight: 600; white-space: nowrap; }
.cv-what { min-width: 0; overflow-wrap: anywhere; }
.cv-history li { display: grid; grid-template-columns: 8.5rem 1fr; gap: .6rem; padding: .4rem 0; border-top: 1px solid var(--line); font-size: .88rem; }
.cv-history .cv-date { font-weight: 500; color: var(--muted); }
.cv-source { font-size: .8rem; color: var(--muted); margin: .75rem 0 0; }
.cv-filter { margin-bottom: .5rem; }
.cv-filter .field { flex: 1 1 170px; }
.cv-filter .cv-f-q { flex: 2 1 240px; }
.cv-table td, .cv-table th { vertical-align: middle; }
.cv-table .nowrap, .nowrap { white-space: nowrap; }
.cv-table .light { vertical-align: -1px; }
.cv-items tr.cv-subtotal td { background: var(--pv-paper-50); font-size: .85rem; color: var(--muted); }
.cv-items tfoot td { font-family: var(--font-title); }
.cv-pager { display: flex; gap: .75rem; align-items: center; justify-content: space-between; margin-top: .75rem; }
.cv-facts { font-size: .92rem; }
.cv-facts dd .calc { margin-left: .25rem; }
.cv-facts-2 { grid-template-columns: max-content 1fr max-content 1fr; }
.cv-terminate { margin-top: .9rem; border-top: 1px solid var(--line); padding-top: .75rem; }
.cv-terminate textarea { min-height: 60px; }
.cv-docs { list-style: none; margin: 0 0 1rem; padding: 0; }
.cv-docs > li { padding: .55rem 0; border-top: 1px solid var(--line); }
.cv-docs > li:first-child { border-top: 0; }
.cv-doc-head { display: flex; gap: .6rem; align-items: baseline; flex-wrap: wrap; }
.cv-doc-head a { font-weight: 600; }
.cv-preview { margin-top: .4rem; }
.cv-preview summary { font-size: .85rem; }
.cv-preview iframe { width: 100%; height: 70vh; min-height: 420px; border: 1px solid var(--line); border-radius: var(--radius); background: var(--pv-paper-0); }
.cv-doc-form { border-top: 1px solid var(--line); padding-top: .9rem; }
.cv-doc-form .field { margin-bottom: .6rem; }
.cv-error { color: var(--bad); font-size: .82rem; margin-top: .2rem; }
.cv-form .card h3 { margin-top: .5rem; color: var(--muted); font-size: .9rem; text-transform: uppercase; letter-spacing: .05em; }
.cv-edit-table { min-width: 1480px; }
#rabatte .cv-edit-table { min-width: 900px; }
.cv-edit-table td { padding: .3rem .25rem; }
.cv-edit-table input, .cv-edit-table select { padding: .35rem .45rem; font-size: .88rem; min-width: 0; }
.cv-edit-table td.w-xs { width: 4.5rem; } .cv-edit-table td.w-s { width: 6.5rem; }
.cv-edit-table td.w-m { width: 9rem; } .cv-edit-table td.w-l { min-width: 15rem; }
.cv-edit-table td.w-u { width: 9rem; }
.cv-edit-table input[type=checkbox] { width: 18px; height: 18px; }
.cv-month h2 { text-transform: none; }
.cv-kind { font-size: .75rem; }
.cv-kind-notice { background: var(--warn-bg); color: var(--warn); }
.cv-kind-renewal { background: var(--pv-signal-tint); color: var(--brand); }
.cv-kind-index { background: var(--pv-line-light); color: var(--pv-muted-light); }
.cv-columns { margin-top: 1rem; }
.cv-award .cv-mark { display: inline-grid; place-items: center; width: 24px; height: 24px; border-radius: 5px; background: var(--navy);
  color: var(--accent); font-size: .65rem; font-weight: 700; margin-right: .5rem; vertical-align: 2px; font-family: var(--font); }
.cv-links { margin: 0 0 .25rem; padding-left: 1.1rem; }
.cv-links li { margin: .2rem 0; }
/* ContractValor «Volumen & Ausschöpfung» */
.cv-vol-status { display: inline-flex; align-items: center; gap: .4rem; font-size: .9rem; font-weight: 600; }
.cv-bar { position: relative; height: 10px; background: var(--pv-line-light); border-radius: 5px; margin: .6rem 0 .3rem; }
.cv-bar > span { display: block; height: 100%; border-radius: 5px; background: var(--brand); max-width: 100%; }
.cv-bar > span.over { background: var(--bad); }
.cv-bar > i { position: absolute; top: -4px; bottom: -4px; width: 2px; background: var(--ink); }
.cv-bar-legend { display: flex; justify-content: space-between; gap: 1rem; font-size: .8rem; color: var(--muted); flex-wrap: wrap; }
.cv-risks { list-style: none; margin: .6rem 0 0; padding: 0; }
.cv-risks li { display: grid; grid-template-columns: 14px 1fr; gap: .6rem; padding: .45rem 0; border-top: 1px solid var(--line); font-size: .9rem; }
.cv-risks li:first-child { border-top: 0; }
.cv-risks .light { margin-top: .3rem; }
.cv-calloff-form { border-top: 1px solid var(--line); padding-top: .8rem; margin-top: .8rem; }
.cv-calloff-form .grid { grid-template-columns: repeat(auto-fit, minmax(min(150px, 100%), 1fr)); }
.cv-spend-ind { border-top: 1px dashed var(--line); margin-top: .9rem; padding-top: .7rem; }
tr.cv-excluded td { color: var(--muted); }
@media (max-width: 900px) {
  .cv-facts-2 { grid-template-columns: max-content 1fr; }
  .cv-tenant-switch select { min-width: 0; }
  .cv-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .cv-deadlines li, .cv-timeline li { grid-template-columns: 14px 6rem 1fr; }
}

/* ===== Suite: shared supplier master, links between the modules (suite/links.py) ===== */
.visually-hidden { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.pv-head .pv-crumb { margin: 0 0 .15rem; }
.pv-head .pv-crumb a { text-decoration: none; }
.pv-head h1 .pv-status { font-family: var(--font); font-size: .75rem; vertical-align: middle; }
.pv-head-actions, .pv-actions-bar { display: flex; gap: .6rem; align-items: center; flex-wrap: wrap; }
.pv-actions-bar { margin: -.5rem 0 1rem; }
.pv-facts { grid-template-columns: max-content 1fr max-content 1fr; font-size: .92rem; }
.pv-edit { margin-top: .9rem; border-top: 1px solid var(--line); padding-top: .75rem; }
.pv-edit > summary { cursor: pointer; font-weight: 600; color: var(--brand); }
.pv-form-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 0 1rem; margin-top: .75rem; }
.pv-block { margin-top: 1rem; border-top: 1px dashed var(--line); padding-top: .75rem; }
.pv-block-row { display: flex; gap: .5rem; align-items: center; max-width: 520px; margin-top: .3rem; }
.pv-module h2 { display: flex; align-items: center; }
.pv-module h2 .muted { margin-left: .4rem; }
.pv-years { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: .5rem .9rem; margin: .25rem 0 .6rem; }
.pv-years > div { display: flex; flex-direction: column; }
.pv-amount { font-family: var(--font-title); font-size: 1.15rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.pv-sub { font-size: .8rem; color: var(--muted); text-transform: uppercase; letter-spacing: .05em; margin: .75rem 0 .1rem; }
.pv-terms { margin: .6rem 0 0; color: var(--muted); }
.pv-source { font-size: .8rem; color: var(--muted); margin: .6rem 0 0; }
.pv-table td, .pv-table th { vertical-align: middle; }
.sup-filter { margin-bottom: .5rem; }
.sup-filter .field { flex: 1 1 180px; }
.sup-filter .sup-f-q { flex: 3 1 300px; }
.sup-table td { vertical-align: middle; }
.sup-table .pill { margin-left: .35rem; }
/* Setup wizard, step «Lieferanten»: suggestions from SpendValor and ContractValor */
.pv-suggest { border: 1px solid var(--line); border-left: 3px solid var(--brand); border-radius: var(--radius); padding: .9rem 1rem;
  margin-bottom: 1.25rem; background: var(--pv-paper-50); }
.pv-suggest h3 { margin: 0; font-size: 1rem; }
.pv-takeover { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: .75rem; margin: .75rem 0; }
.pv-take { display: flex; flex-direction: column; gap: .3rem; align-items: flex-start; background: var(--pv-paper-0); border: 1px solid var(--line);
  border-radius: var(--radius); padding: .7rem .85rem; }
.pv-take strong { font-family: var(--font-title); font-size: 1.05rem; }
.pv-take-source { grid-column: 1 / -1; margin: 0; }
.pv-suggest-table { background: var(--pv-paper-0); }
.pv-suggest-table td { padding: .45rem .5rem; }
.pv-suggest-table tr.is-in td { background: color-mix(in srgb, var(--brand) 5%, var(--pv-paper-0)); }
.pv-suggest-table tr.is-blocked td { opacity: .65; }
.pv-suggest-table label.module-title { font-weight: 600; cursor: pointer; }
.pv-pick-col { width: 2.2rem; }
.pv-pick-col input { width: 18px; height: 18px; }
.pv-email { max-width: 16rem; padding: .35rem .5rem; font-size: .88rem; }
.pv-email.has-error { border-color: var(--bad); }
.pv-more-label { margin: 0 0 .4rem; text-transform: uppercase; letter-spacing: .05em; font-size: .75rem; }
/* Tender page: «Im Kontext» */
.pv-context-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: .75rem 1.5rem; margin-top: .4rem; }
.pv-context-item { display: flex; flex-direction: column; gap: .2rem; }
.pv-context-list { list-style: none; padding: 0; margin: .3rem 0 .4rem; }
.pv-context-list li { padding: .3rem 0; border-top: 1px solid var(--line); }
.pv-context-list li:first-child { border-top: 0; }
/* New tender from SpendValor / ContractValor */
.pv-origin p { margin: 0; }
.pv-origin-check { margin-top: .5rem; }
@media (max-width: 900px) {
  .pv-facts { grid-template-columns: max-content 1fr; }
}
.pv-suggest-table .pv-name-col { min-width: 15rem; }
/* T26 polish 02.10.2026: suggestions as rt table; words are not split (min-content = longest word), so the
   contract and contact columns keep a readable width at 1280 px. */
.pv-suggest-table.rt th, .pv-suggest-table.rt td { overflow-wrap: break-word; }
.pv-suggest-table.rt .pv-name-col { min-width: 12rem; }
.pv-suggest-table.rt .pv-email { min-width: 11rem; }
.pv-file-link { margin-left: .35rem; white-space: nowrap; }
/* Phone: selectors with long supplier names and the date quick picks stay within the screen. */
@media (max-width: 640px) {
  .round-switch { min-width: 0; max-width: 100%; flex-wrap: wrap; }
  .round-switch select { max-width: 100%; }
  .quick-picks { flex-wrap: wrap; }
  .shop > * { min-width: 0; }
  .shop:has(.mail-preview) { grid-template-columns: minmax(0, 1fr); }
  .dash-grid { grid-template-columns: minmax(0, 1fr); }
  .hbars li, .cbars li { grid-template-columns: minmax(0, 7rem) minmax(0, 1fr) auto; }
}

/* Supplier price sheet on a phone: one card per position, the price field always visible (no sideways scrolling). */
@media (max-width: 640px) {
  #price-table thead { display: none; }
  #price-table, #price-table tbody, #price-table tfoot { display: block; width: 100%; }
  #price-table tr.lot { display: block; }
  #price-table tr.lot th { display: block; }
  #price-table tbody tr:not(.lot) {
    display: grid; grid-template-columns: 2.6rem auto 1fr; gap: .15rem .4rem; padding: .6rem 0; border-bottom: 1px solid var(--line);
  }
  #price-table tbody td { display: block; border: 0; padding: 0; text-align: left; }
  #price-table .pc-code { grid-column: 1; grid-row: 1 / span 5; font-weight: 600; }
  #price-table .pc-text, #price-table .pc-prev, #price-table .pc-price, #price-table .pc-line { grid-column: 2 / 4; }
  #price-table .pc-qty { grid-column: 2; }
  #price-table .pc-unit { grid-column: 3; }
  #price-table .pc-qty, #price-table .pc-unit, #price-table .pc-prev, #price-table .pc-line { font-size: .85rem; color: var(--muted); }
  #price-table .pc-prev::before { content: attr(data-label) ': '; }
  #price-table .pc-price input { width: 100%; }
  #price-table .pc-line:not(:empty)::before { content: '= '; }
  #price-table tfoot tr.pc-total { display: flex; justify-content: space-between; gap: .5rem; padding: .6rem 0; }
  #price-table tfoot td { display: block; border: 0; padding: 0; }
}

/* Suite menu: module headings in product spelling, consistent sizes inside the modules */
.side-module { margin-top: .5rem; }
.side-module > summary { text-transform: none; letter-spacing: 0; font-size: .92rem; color: var(--pv-text-dark); padding: .55rem .65rem; }
.side-module > a, .side-module .side-group > a { font-size: .88rem; padding-top: .38rem; padding-bottom: .38rem; }
.side-module .side-group summary { font-size: .72rem; padding: .4rem .65rem .4rem 1rem; }
/* Suite start page lists */
.suite-lists { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 1rem; margin-top: 1rem; }
.suite-lists .card-head { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; margin-bottom: .5rem; }
.suite-lists h2 { margin: 0; font-size: 1.02rem; }
.suite-list { list-style: none; margin: 0; padding: 0; }
.suite-list li { display: grid; grid-template-columns: 12px 88px minmax(0, 1fr); gap: .75rem; align-items: start; padding: .6rem 0; border-top: 1px solid var(--line); }
.suite-list li:first-child { border-top: 0; }
.suite-list .light { margin-top: .35rem; }
.suite-list .when { font-variant-numeric: tabular-nums; font-weight: 600; font-size: .9rem; }
.light-blue { background: var(--brand); }
.suite-bars { list-style: none; margin: 0; padding: 0; display: grid; gap: .55rem; }
.suite-bars li { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr) 6.5rem; gap: .75rem; align-items: center; font-size: .9rem; }
.suite-bars .name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.suite-bars .bar { height: 8px; background: var(--pv-line-light); border-radius: 4px; overflow: hidden; }
.suite-bars .bar span { display: block; height: 100%; background: var(--brand); border-radius: 4px; }
.source-line { margin: .75rem 0 0; }

/* ==== E2E-Feinschliff (Browser-Durchgang 01.10.2026) ==== */
/* Hidden helper texts in tables are positioned against their table, not the page (no sideways page scroll on phones). */
.table-wrap { position: relative; }
/* SourceValor cockpit «Letzte Aktivitäten»: only the time column is narrow, the text takes the rest. */
.activity li > .small + .small { flex: 1 1 auto; width: auto; min-width: 0; }
/* Line of an offer opened from ContractValor («Offertzeile»): highlighted. */
tr:target > td { background: color-mix(in srgb, var(--pv-note) 16%, var(--pv-paper-0)); }
/* Two-column cards fit on a 390 px phone. */
.grid-2 { grid-template-columns: repeat(auto-fit, minmax(min(360px, 100%), 1fr)); }
/* Contract list fits 1440 px: amount headers may wrap («Gesamtwert (Laufzeit)» / «berechnet»). */
.cv-table th.num { white-space: normal; }
.cv-table th .calc { white-space: nowrap; }
.cv-table th, .cv-table td { padding-left: .45rem; padding-right: .45rem; }
/* SpendValor cockpit: note when a menu tab is not available in the loaded cockpit. */
.cockpit-tab-note { margin: 0; border-radius: 0; border-left: 0; border-right: 0; }
/* Choice cards (Art der Ausschreibung, NDA) keep the usual distance to the next field. */
.field.plain-fieldset { margin-bottom: 1.1rem; }
/* Fristenkalender: the same columns in every month via the shared table component (table.rt.rt-fixed). */
/* «Neuer Vertrag» (T24/T33): step 1 upload, step 2 preview left and the short form right (split view). */
.cv-intake-start { max-width: 760px; }
.cv-intake-alt { margin: .9rem 0 0; }
.cv-intake { display: grid; grid-template-columns: minmax(0, 3fr) minmax(320px, 2fr); gap: 1rem; align-items: start; }
.cv-intake-solo { grid-template-columns: minmax(0, 760px); }
.cv-intake > .card { margin-bottom: 0; }
.cv-intake-preview { position: sticky; top: 1rem; }
.cv-intake-preview .filter-chips { margin: 0 0 .6rem; }
.cv-intake-frame { width: 100%; height: 74vh; min-height: 420px; border: 1px solid var(--line); border-radius: var(--radius);
  background: var(--pv-paper-0); }
.cv-intake-img { display: block; max-width: 100%; max-height: 74vh; margin: 0 auto; border: 1px solid var(--line);
  border-radius: var(--radius); background: var(--pv-paper-0); }
.cv-intake-nopreview { padding: 2.5rem 1rem; text-align: center; border: 1px dashed var(--line); border-radius: var(--radius); }
.cv-intake-file { margin: .45rem 0 0; overflow-wrap: anywhere; }
.cv-intake-form h2 { margin-top: 0; }
.cv-intake-more { margin: .25rem 0 1rem; }
.cv-intake-more summary { cursor: pointer; font-weight: 600; margin-bottom: .6rem; }
.cv-intake-docs { border: 1px solid var(--line); border-radius: var(--radius); padding: .5rem .75rem .65rem; margin: 0 0 1rem; }
.cv-intake-docs legend { font-weight: 600; font-size: .9rem; padding: 0 .3rem; }
.cv-intake-doc { display: grid; grid-template-columns: minmax(0, 1fr) 9.5rem; gap: .5rem; align-items: center; padding: .25rem 0; }
.cv-intake-doc-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: .9rem; }
.cv-intake-extra { border-top: 1px solid var(--line); margin-top: 1rem; padding-top: .8rem; display: grid; gap: .6rem; }
.cv-intake-add input[type=file] { display: block; margin-top: .25rem; max-width: 100%; }
@media (max-width: 1000px) {
  .cv-intake { grid-template-columns: minmax(0, 1fr); }
  .cv-intake-preview { position: static; }
  .cv-intake-frame { height: 55vh; min-height: 320px; }
}
.cv-list-table .cv-w-tcv { width: 10rem; } .cv-list-table .cv-w-year { width: 7.5rem; }
.rt .sub .rt-nowrap, .rt .sub.rt-nowrap { white-space: nowrap; }
.cv-month .rt .tag + .calc { margin-top: .15rem; }

/* Demo polish 01.10.2026: award summary on the tender page after the award */
.award-summary { border-left: 4px solid var(--ok); }
.award-summary .award-winners li { padding: .3rem 0; }
.award-summary .award-contracts-head { font-size: 1rem; margin: 1rem 0 .4rem; }

/* Demo polish 01.10.2026: supplier/round table of a tender fits 1440 px (compact rounds, one-line e-mail) */
.event-sup-table .sup-name { min-width: 10rem; }
.event-sup-table .sup-contact { max-width: 15rem; }
.event-sup-table .mail-trunc { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.event-sup-table .round-col { width: 1%; text-align: center; white-space: nowrap; }
.event-sup-table .round-col .flag-low { white-space: normal; display: inline-block; max-width: 7.5rem; line-height: 1.25; }
.event-sup-table td .btn { white-space: nowrap; }

/* Demo polish 01.10.2026: tender history with repeated actions collapsed */
.history-group summary { cursor: pointer; }
.history-group .history-entries { margin: .35rem 0 .2rem 1.1rem; border-left: 2px solid var(--line); padding-left: .7rem; }
.history-group .history-entries li { padding: .15rem 0; border: 0; }
.history-older { margin-top: .5rem; }
.history-older > summary { cursor: pointer; color: var(--muted); }
.event-sup-table .progress-steps + .small { display: block; white-space: nowrap; }
/* T26 polish 02.10.2026: the supplier table of a tender uses the rt component (fits 1280 px, cards on phones):
   progress text wraps, the e-mail address is cut with «…», the round flags break between words only. */
.event-sup-table.rt .mail-trunc { width: 0; min-width: 100%; }  /* one line with «…», full address in the title */
.event-sup-table.rt .progress-steps + .small { white-space: normal; }
.event-sup-table.rt .round-col { overflow-wrap: normal; }
.event-sup-table.rt .sup-contact { width: 14rem; max-width: none; }

/* Demo polish 01.10.2026: below 600 px the tender areas are a drop-down instead of ~14 tabs */
.tabs-select { display: none; }
@media (max-width: 600px) {
  .shell .tabs.event-tabs, .tabs.event-tabs { display: none; }
  .tabs-select { display: flex; flex-direction: column; gap: .25rem; margin: .75rem 0 1rem; }
  .tabs-select select { width: 100%; }
}

/* Date and time picker (flatpickr, themed; core/static/core/datepicker.js) */
.flatpickr-input.form-control, input.flatpickr-input[readonly] { cursor: pointer; background: var(--pv-paper-0); }
.flatpickr-calendar { font-family: inherit; border-radius: 14px; border: 1px solid var(--pv-line-strong);
  box-shadow: 0 18px 40px color-mix(in srgb, var(--pv-ink-900) 16%, transparent), 0 2px 6px color-mix(in srgb, var(--pv-ink-900) 8%, transparent); width: 316px; padding: 6px 4px 0; }
.flatpickr-calendar.arrowTop::before, .flatpickr-calendar.arrowTop::after,
.flatpickr-calendar.arrowBottom::before, .flatpickr-calendar.arrowBottom::after { display: none; }
.flatpickr-months { padding: 4px 6px 6px; }
.flatpickr-months .flatpickr-month { height: 40px; color: var(--ink); }
.flatpickr-current-month { font-size: 1rem; font-weight: 650; padding-top: 9px; }
.flatpickr-current-month .numInputWrapper { width: 5ch; }
.flatpickr-months .flatpickr-prev-month, .flatpickr-months .flatpickr-next-month { top: 8px; padding: 8px; border-radius: 8px; }
.flatpickr-months .flatpickr-prev-month:hover, .flatpickr-months .flatpickr-next-month:hover { background: var(--pv-line-light); }
.flatpickr-months .flatpickr-prev-month:hover svg, .flatpickr-months .flatpickr-next-month:hover svg { fill: var(--brand); }
span.flatpickr-weekday { color: var(--pv-muted-light); font-weight: 600; font-size: .75rem; text-transform: uppercase; letter-spacing: .04em; }
.flatpickr-day { border-radius: 10px; color: var(--ink); max-width: 40px; height: 38px; line-height: 38px; font-weight: 500; }
.flatpickr-day:hover, .flatpickr-day:focus { background: var(--pv-line-light); border-color: transparent; }
.flatpickr-day.today { border-color: var(--brand); color: var(--brand); font-weight: 650; }
.flatpickr-day.today:hover { background: var(--pv-line-light); color: var(--brand); }
.flatpickr-day.selected, .flatpickr-day.selected:hover, .flatpickr-day.selected:focus { background: var(--brand); border-color: var(--brand); color: var(--pv-on-accent); }
.flatpickr-day.prevMonthDay, .flatpickr-day.nextMonthDay { color: var(--pv-line-strong); }
.flatpickr-day.flatpickr-disabled, .flatpickr-day.flatpickr-disabled:hover { color: var(--pv-line-strong); background: none; }
.flatpickr-time { border-top: 1px solid var(--pv-line-light) !important; margin-top: 4px; height: 46px; max-height: 46px; line-height: 46px; }
.flatpickr-time input { font-size: 1.15rem; font-weight: 600; color: var(--ink); border-radius: 8px; }
.flatpickr-time input:hover, .flatpickr-time input:focus { background: var(--pv-line-light); }
.flatpickr-time .flatpickr-time-separator { font-weight: 600; }
.fp-footer { display: flex; gap: .4rem; justify-content: flex-end; padding: 8px 8px 10px; border-top: 1px solid var(--pv-line-light); }
.fp-btn { border: 0; background: none; font: inherit; font-size: .9rem; padding: .35rem .7rem; border-radius: 8px; cursor: pointer; color: var(--brand); }
.fp-btn:hover { background: var(--pv-line-light); }
.fp-btn.fp-today { margin-right: auto; }
.fp-btn.fp-done { background: var(--brand); color: var(--pv-on-accent); font-weight: 600; }
.fp-btn.fp-done:hover { filter: brightness(1.08); background: var(--brand); }

/* ==== Module identity (Paket 1, 01.10.2026): pictograms, module colours, module bar ==== */
/* One colour per module (CI v2 tokens: 600 on white, 50 tint, 300 on the dark menu). The page sets --mod via the
   body class (mod-spend|source|contract|margin|suite); the accent (--brand) follows data-module on <html>. */
:root {
  --mod-spend: var(--pv-mod-spend-600);    --mod-spend-tint: var(--pv-mod-spend-50);    --mod-spend-light: var(--pv-mod-spend-300);
  --mod-source: var(--pv-mod-source-600);   --mod-source-tint: var(--pv-mod-source-50);   --mod-source-light: var(--pv-mod-source-300);
  --mod-contract: var(--pv-mod-contract-600); --mod-contract-tint: var(--pv-mod-contract-50); --mod-contract-light: var(--pv-mod-contract-300);
  --mod-margin: var(--pv-mod-margin-600);   --mod-margin-tint: var(--pv-mod-margin-50);   --mod-margin-light: var(--pv-mod-margin-300);
  --mod-advisor: var(--pv-mod-advisor-600); --mod-advisor-tint: var(--pv-mod-advisor-50); --mod-advisor-light: var(--pv-mod-advisor-300);
  --mod: var(--brand); --mod-tint: var(--calc-bg); --mod-light: var(--accent);
}
.mod-suite { --mod: var(--pv-mod-procure-600); --mod-tint: var(--pv-mod-procure-50); --mod-light: var(--pv-mod-procure-300); }
.mod-spend { --mod: var(--mod-spend); --mod-tint: var(--mod-spend-tint); --mod-light: var(--mod-spend-light); }
.mod-source { --mod: var(--mod-source); --mod-tint: var(--mod-source-tint); --mod-light: var(--mod-source-light); }
.mod-contract { --mod: var(--mod-contract); --mod-tint: var(--mod-contract-tint); --mod-light: var(--mod-contract-light); }
.mod-margin { --mod: var(--mod-margin); --mod-tint: var(--mod-margin-tint); --mod-light: var(--mod-margin-light); }
.mod-advisor { --mod: var(--mod-advisor); --mod-tint: var(--mod-advisor-tint); --mod-light: var(--mod-advisor-light); }

.pv-icon { display: block; flex: none; }
.mod-mark { display: inline-grid; place-items: center; width: 26px; height: 26px; border-radius: 7px; flex: none;
  background: var(--mod-tint); color: var(--mod); }
.mod-mark-text { font-family: var(--font-title); font-size: .62rem; font-weight: 700; letter-spacing: .03em;
  background: var(--mod); color: var(--pv-on-accent); }
.logo-icon { color: var(--navy); }
.logo-icon .pv-icon { stroke-width: 1.8; }
.logo-mark.logo-lg.logo-icon { color: var(--pv-paper-0); }

/* Module bar on top of the content: pictogram + module name, then the breadcrumb (Modul › Bereich › Objekt) */
.module-bar { background: var(--card); border-bottom: 1px solid var(--line); box-shadow: inset 0 3px 0 var(--mod); }
.module-bar-in { display: flex; align-items: center; min-height: 46px; padding-top: 3px; min-width: 0; }
.mb-module { display: inline-flex; align-items: center; gap: .55rem; color: var(--mod); text-decoration: none; flex: none;
  font-family: var(--font-title); font-weight: 700; font-size: .98rem; letter-spacing: -.005em; }
.mb-module:hover .mb-name { text-decoration: underline; text-underline-offset: 3px; }
.mb-crumbs { list-style: none; margin: 0; padding: 0; display: flex; align-items: center; min-width: 0; font-size: .88rem;
  color: var(--muted); }
.mb-crumbs li { display: flex; align-items: center; min-width: 0; white-space: nowrap; }
.mb-crumbs li::before { content: "›"; margin: 0 .55rem; color: var(--pv-line-strong); font-size: 1rem; line-height: 1; }
.mb-crumbs a, .mb-crumbs span { overflow: hidden; text-overflow: ellipsis; }
.mb-crumbs a { color: var(--muted); text-decoration: none; max-width: 22rem; }
.mb-crumbs a:hover { color: var(--mod); text-decoration: underline; text-underline-offset: 3px; }
.mb-crumbs [aria-current] { color: var(--ink); font-weight: 600; }
.mb-plain { color: var(--pv-muted-light); }
/* The breadcrumb lives in the module bar; the small crumbs above the page titles stay only on phones. */
@media (min-width: 901px) {
  .shell .cv-crumb, .shell .spend-crumb, .shell .pv-crumb { display: none; }
}

/* Menu: the module of the page carries its colour (left bar, pictogram); the others stay calm */
.sidebar { overflow-x: hidden; }
.side-module > summary { gap: .55rem; }
.side-module > summary .mod-mark { width: 26px; height: 26px; margin-right: 0; background: rgba(255,255,255,.06);
  color: var(--pv-muted-dark); transition: color .15s, background .15s; }
.side-module > summary:hover .mod-mark { color: var(--pv-text-dark); }
.side-module.is-current { box-shadow: inset 2px 0 0 var(--mod-light); border-radius: 0 6px 6px 0; }
.side-module.is-current > summary .mod-mark { color: var(--mod-light); background: rgba(255,255,255,.1); }
.sidebar .side-nav a[aria-current="page"] { box-shadow: inset 3px 0 0 var(--mod-light); }

/* Menu foot: team and administration next to each other, the user never wider than the menu */
.side-foot-links { display: flex; flex-direction: column; }
.side-foot .side-link[aria-current="page"] { color: var(--pv-text-dark); font-weight: 600; }
.side-user { min-width: 0; }
.side-user-text { display: flex; flex-direction: column; min-width: 0; line-height: 1.3; }
.side-user-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Phones: the module bar becomes the title of the dark bar on top */
.mobile-mod { display: flex; align-items: center; gap: .5rem; min-width: 0; color: var(--pv-text-dark); font-family: var(--font-title);
  font-weight: 700; }
.mobile-mod .mod-mark { width: 26px; height: 26px; background: rgba(255,255,255,.1); color: var(--mod-light); }
.mobile-mod .mod-mark-text { background: var(--pv-paper-0); color: var(--navy); }
.mobile-mod-name { flex: none; }
.mobile-mod-here { font-family: var(--font); font-weight: 400; color: var(--pv-muted-dark); font-size: .9rem; min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@media (max-width: 900px) {
  .module-bar { display: none; }
  .mobile-bar { box-shadow: inset 0 -3px 0 var(--mod-light); min-width: 0; }
  .menu-btn { flex: none; }
}
@media print { .module-bar { display: none !important; } }

/* Suite start page: each module tile in its colour */
.suite-tile { border-top: 3px solid var(--mod); }
.suite-tile .head strong { font-family: var(--font-title); font-size: 1.05rem; color: var(--mod); }
.tile-mark { display: inline-grid; place-items: center; width: 46px; height: 46px; border-radius: 11px; flex: none;
  background: var(--mod-tint); color: var(--mod); }
.suite-tile.is-locked { border-top-color: var(--line); }
.suite-tile.is-locked .tile-mark { background: var(--pv-line-light); color: var(--pv-muted-light); }
.suite-tile.is-locked .head strong { color: var(--ink); }
/* A module named inside a card heading (supplier file, contract, tender context) */
.mod-mark-inline { width: 24px; height: 24px; border-radius: 6px; margin-right: .5rem; vertical-align: -6px; display: inline-grid; }
.tile-label .mod-mark-inline { width: 20px; height: 20px; border-radius: 5px; margin-right: .35rem; vertical-align: -5px; }
.landing-suite .chip-mod { display: inline-flex; align-items: center; gap: .4rem; }
.landing-suite .chip-mod .pv-icon { color: var(--mod-light); }
/* Sealing per tender (T09, 01.10.2026): provisional flag and sealing state pill */
.pill-provisional { background: var(--warn-bg); color: var(--warn); border-color: var(--warn-line); vertical-align: middle; }
.pill-sealed { vertical-align: middle; }
.pill-open { background: var(--warn-bg); color: var(--warn); border-color: var(--warn-line); vertical-align: middle; }

/* ===== MarginValor (Stufe 0, 01.10.2026): split view of the findings, claim steps, printable derivation ===== */
.mv-stage { font-size: .82rem; padding: .4rem .75rem; margin: 0 0 .75rem; }
.mv-split { display: grid; grid-template-columns: minmax(260px, 2fr) minmax(0, 3fr); gap: .75rem; align-items: start; }
.mv-split > .card { margin-bottom: 0; }
.mv-filter { margin-bottom: .5rem; color: var(--muted); }
.mv-filter a[aria-current] { color: var(--ink); font-weight: 650; text-decoration: none; }
.mv-items { list-style: none; margin: 0; padding: 0; max-height: 72vh; overflow: auto; }
.mv-items li { border-top: 1px solid var(--line); }
.mv-items li:first-child { border-top: 0; }
.mv-items a { display: grid; grid-template-columns: 1fr auto; gap: .2rem .6rem; padding: .55rem .5rem; color: inherit;
  text-decoration: none; border-radius: 6px; }
.mv-items a:hover { background: var(--mod-tint); }
.mv-items li.is-selected a { background: var(--mod-tint); box-shadow: inset 3px 0 0 var(--mod); }
.mv-item-head { grid-column: 1 / -1; display: flex; gap: .3rem; flex-wrap: wrap; align-items: center; font-size: .75rem; }
.mv-item-title { font-size: .88rem; min-width: 0; overflow-wrap: anywhere; }
.mv-item-amount { font-variant-numeric: tabular-nums; font-weight: 650; white-space: nowrap; font-size: .88rem; }
.mv-detail h2 { font-size: 1.1rem; margin: .1rem 0 .3rem; }
.mv-detail h3 { font-size: .8rem; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); margin: 1rem 0 .3rem; }
.mv-amount { font-family: var(--font-title); font-size: 1.6rem; font-weight: 700; margin: .2rem 0; color: var(--mod); }
.mv-formula code { background: var(--mod-tint); padding: .2rem .45rem; border-radius: 5px; font-size: .88rem; white-space: normal; }
.mv-decide { border-top: 1px solid var(--line); margin-top: .9rem; padding-top: .7rem; }
.mv-decide textarea { min-height: 54px; }
.mv-doc { border: 1px solid var(--line); border-radius: var(--radius); padding: .6rem .8rem; margin-bottom: .6rem; background: var(--pv-paper-50); }
.mv-doc h3 { margin: 0; text-transform: none; letter-spacing: 0; color: var(--ink); font-size: .95rem; }
.mv-lines tr.mv-hl td { background: var(--mod-tint); }
.mv-recovery .rank-head { align-items: center; }
.mv-steps .done span { border-top-color: var(--ok); color: var(--ink); }
.mv-steps .current span { border-top-color: var(--mod); color: var(--ink); font-weight: 650; }
.mv-inline-form { margin-bottom: .75rem; }
.mv-mail { white-space: pre-wrap; font-family: var(--font); font-size: .88rem; background: var(--pv-paper-50); border: 1px solid var(--line);
  border-radius: var(--radius); padding: .7rem .9rem; margin: 0; max-height: 26rem; overflow: auto; }
.mv-qr { width: 100%; max-width: 640px; height: auto; border: 1px solid var(--line); border-radius: 6px; background: var(--pv-paper-0); }
.mv-tiles .tile-value.cv-amount { font-size: 1.05rem; }
/* «Offene Claims» on the overview: the claim number (MV-2026-0001) is wider than a date, its column fits it. */
.cv-deadlines.mv-claim-list li { grid-template-columns: 14px max-content minmax(0, 1fr); }
@media (max-width: 900px) { .mv-split { grid-template-columns: minmax(0, 1fr); } .mv-items { max-height: none; } }
/* Derivation sheet: on screen inside a card, printed alone («Als PDF drucken») */
.mv-sheet-head { display: flex; justify-content: space-between; gap: 2rem; flex-wrap: wrap; border-bottom: 3px solid var(--mod);
  padding-bottom: .6rem; margin-bottom: .8rem; }
.mv-sheet-head h1 { margin: .1rem 0; }
.mv-sheet-kicker { text-transform: uppercase; letter-spacing: .06em; color: var(--mod); font-size: .75rem; margin: 0; }
.mv-sheet-facts { display: grid; grid-template-columns: max-content 1fr; gap: .2rem .8rem; margin: 0; font-size: .9rem; }
.mv-sheet-facts dt { color: var(--muted); } .mv-sheet-facts dd { margin: 0; }
.mv-sheet table { width: 100%; font-size: .88rem; }
.mv-sheet .num { text-align: right; white-space: nowrap; }
/* The derivation sheet stays a document table (also the e-mail attachment, printed on A4), not the rt cards; on a phone
   screen its cells wrap instead of pushing the page sideways. */
.mv-sheet th, .mv-sheet td { overflow-wrap: anywhere; }
@media screen and (max-width: 760px) { .mv-sheet .num { white-space: normal; } .mv-sheet th, .mv-sheet td { padding-left: .3rem; padding-right: .3rem; } }
.mv-sheet tfoot td { font-weight: 700; }
.mv-sheet-item { break-inside: avoid; margin-top: 1rem; }
.mv-sheet-item h2 { font-size: 1rem; margin: 0 0 .2rem; }
.mv-sheet-foot { margin-top: 1.2rem; font-size: .8rem; color: var(--muted); }
@media print {
  .mv-print-page .demo-banner, .mv-print-page .notice, .mv-print-page .confirm-dialog { display: none !important; }
  .mv-print-page main, .mv-print-page .wrap { padding: 0 !important; margin: 0 !important; max-width: none !important; }
  .mv-sheet-card { border: 0 !important; box-shadow: none !important; padding: 0 !important; }
  .mv-sheet { font-size: 10.5pt; color: var(--pv-ink-900); }
  @page { size: A4; margin: 16mm 14mm; }
}

/* Scores per person (C03) and comments for purchasing (C02), 01.10.2026 */
.score-entries { list-style: none; margin: .25rem 0 0; padding: 0; }
.score-entries li { margin: .1rem 0; }

/* Module switch at the right end of the module bar (T40): the other licensed modules, pictogram + name */
.mb-switch { list-style: none; margin: 0 0 0 auto; padding: 0 0 0 1rem; display: flex; gap: .25rem; flex: none; }
.mb-switch a { display: inline-flex; align-items: center; gap: .4rem; padding: .25rem .5rem; border-radius: 7px;
  color: var(--muted); text-decoration: none; font-size: .82rem; }
.mb-switch a:hover, .mb-switch a:focus-visible { color: var(--mod); background: var(--mod-tint); }
.mb-switch .mod-mark { width: 22px; height: 22px; border-radius: 6px; }
@media (max-width: 1100px) { .mb-switch-name { display: none; } }

/* Suite dashboard on one screen (T14, 02.10.2026): from 901 px wide everything relevant fits 1440×900 without
   scrolling – one-line tagline, compact tiles, list rows on one line (date, object, detail). */
@media (min-width: 901px) {
  .page-dashboard .page-head { margin-bottom: .75rem; }
  .page-dashboard .suite-tiles { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: .75rem; }
  .page-dashboard .suite-tile { padding: .85rem 1rem; gap: .5rem; }
  .page-dashboard .tile-title { min-width: 0; }
  .page-dashboard .tile-tagline { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .page-dashboard .suite-tile .facts { gap: .4rem 1.25rem; }
  .page-dashboard .suite-lists { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: .75rem; margin-top: .75rem; }
  .page-dashboard .suite-lists .card { padding: .85rem 1rem; }
  .page-dashboard .suite-list li { grid-template-columns: 12px 5.5rem minmax(0, 1fr); gap: .6rem; padding: .4rem 0;
    font-size: .88rem; }
  .page-dashboard .suite-list li > span { min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .page-dashboard .suite-list br { display: none; }
  .page-dashboard .suite-list .when .small { display: none; }
  .page-dashboard .suite-list li > span:last-child .small::before { content: " · "; }
  .page-dashboard .suite-list .light { margin-top: .3rem; }
  .page-dashboard .source-line { margin: .4rem 0 0; font-size: .75rem; }
}

/* ==== CI v2 (Markensystem_CI.md, 02.10.2026): image mark A «Kern & Ring» and word marks (T01) ==== */
/* Ring and core in the text colour of the surface (--pv-mark-fg: ink-900 on light, text-dark on the dark menu),
   the dot in the brand colour (600 on light, 300 on dark; tokens.css). Word mark: prefix in the text colour,
   «Valor» in the brand colour (suite = Signal), no dot. */
.pv-mark { display: block; flex: none; color: var(--pv-mark-fg); }
.pv-word { font-family: var(--font-title); font-weight: 700; letter-spacing: -.01em; white-space: nowrap; }
.logo-mark.logo-pv, .sidebar .logo-mark.logo-pv, .landing-hero .logo-mark.logo-pv, .app-bar .logo-mark.logo-pv {
  width: auto; height: auto; background: none; border-radius: 0; color: var(--pv-mark-fg); }
.module-bar .mod-mark, .mobile-mod .mod-mark, .side-module > summary .mod-mark { background: none; }
.mb-module { color: var(--ink); }
.module-bar .pv-mark { color: var(--pv-mark-fg); }
.side-module > summary .mod-mark { color: var(--pv-muted-dark); }
.side-module > summary:hover .mod-mark, .side-module.is-current > summary .mod-mark,
.mobile-mod .mod-mark { color: var(--pv-text-dark); }
.side-module > summary .pv-word { font-weight: 500; }
.side-module.is-current > summary .pv-word { font-weight: 700; }
.suite-tile .head strong { color: var(--ink); }
.tile-mark { color: var(--pv-mark-fg); }
.suite-tile.is-locked .tile-mark .pv-mark { color: var(--pv-muted-light); }
.landing-suite .chip-mod .pv-mark { color: var(--pv-text-dark); }
.login-title .pv-word { font-size: inherit; }
/* Menu bar (E2): ink-800, dark surface tokens */
.sidebar, .mobile-bar { background: var(--pv-nav-bg); }

/* ==== Commercial register (Zefix, 02.10.2026): search in the forms, hits, source tag, SHAB publications ==== */
.zefix-box { margin: .4rem 0 .9rem; padding: .7rem .8rem; border: 1px solid var(--pv-line-light); border-radius: 8px; background: var(--pv-paper-50); }
.zefix-row { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; margin: .3rem 0; }
.zefix-row input[type="search"] { flex: 1 1 16rem; min-width: 0; }
.zefix-hits { list-style: none; margin: .5rem 0 0; padding: 0; }
.zefix-hit { display: flex; gap: .75rem; justify-content: space-between; align-items: center; padding: .45rem 0; border-top: 1px solid var(--pv-line-light); }
.zefix-hit:first-child { border-top: 0; }
.zefix-what { display: flex; flex-direction: column; gap: .1rem; min-width: 0; overflow-wrap: anywhere; }
.zefix-act { flex: 0 0 auto; margin: 0; }
.zefix-dup { color: var(--warn); }
.zefix-pubs { list-style: none; margin: .3rem 0 0; padding: 0; }
.zefix-pubs > li { padding: .45rem 0; border-top: 1px solid var(--pv-line-light); overflow-wrap: anywhere; }
.zefix-pubs details summary { cursor: pointer; font-size: .875rem; }
.pv-src { font-size: .7rem; font-weight: 700; padding: .02rem .35rem; border-radius: 4px; background: var(--pv-line-light); color: var(--pv-muted-light); cursor: help; }
@media (max-width: 600px) { .zefix-hit { flex-direction: column; align-items: stretch; } }
