/* Koondjooks 9 plokk A2: kujunduskeele komponendid.

   Allikas: eskiisid/conbrix-lehed-9-eskiis.html (Virgo kinnitanud 28.09).
   REEGEL: siin EI OLE ühtegi värvikoodi — iga värv tuleb brand.css-i
   tokenist (var(--…)). Test test_k9_kujundus kontrollib seda.

   Komponendid: vastusekast (.ans) · tint-rida ja chip (.imp, .chip, .tag)
   · tõlgenduskast (.interp) · tõlgenduskaart (.ic) · graafik (.k9c) ·
   ühtne ⓘ (.ipop) · tabelivaade (.astable) · segmendikaart (.seg) ·
   kalender (.cal) · etappide riba (.stages) · tasandid (.lvl). */

/* ---- lehe raam ------------------------------------------------------ */
.k9 { color: var(--ink); }
.k9 h1.k9-h1 { font-family: var(--cbx-font-heading); font-size: 1.75rem; font-weight: 600; margin: 0 0 6px; color: var(--ink); }
.k9 .sm { font-size: 0.75rem; color: var(--ink-3); }
.k9 .sec { font-family: var(--cbx-font-heading); font-size: 0.8125rem; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-3); margin: 18px 0 6px; }
.k9 .card { background: var(--card); border: 1px solid var(--line); border-radius: 8px; padding: 12px 14px; margin-bottom: 0; }
.k9 .card h4 { font-family: var(--cbx-font-heading); font-size: 1rem; font-weight: 600; margin: 0 0 4px; }
.k9 .grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.k9 .grid3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.k9 .grid5 { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 8px; }
.k9 .stack { display: flex; flex-direction: column; gap: 12px; }
@media (max-width: 900px) { .k9 .grid2, .k9 .grid3, .k9 .grid5 { grid-template-columns: 1fr; } }
.k9 .newsline { font-size: 0.75rem; color: var(--ink-3); margin: -2px 0 8px; }
.k9 .newsline a { color: var(--steel); }

/* ---- tasandid Peamine · Detailne · Süvitsi ----------------------------- */
.lvl { display: flex; gap: 4px; margin: 8px 0 10px; flex-wrap: wrap; }
.lvl a, .lvl span { font-size: 0.7812rem; font-weight: 600; padding: 4px 12px; border-radius: 999px; border: 1px solid var(--line); color: var(--ink-2); text-decoration: none; background: var(--card); }
.lvl a.on, .lvl span.on { background: var(--ink); color: var(--paper); border-color: var(--ink); }
.tase-k9 > summary { list-style: none; cursor: pointer; }
.tase-k9 > summary::-webkit-details-marker { display: none; }

/* ---- vastusekast -------------------------------------------------------- */
.ans { border-radius: 10px; padding: 12px 16px 12px 18px; position: relative; display: grid; grid-template-columns: auto 1fr auto; gap: 6px 18px; align-items: center; margin: 4px 0 10px; }
.ans::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 6px; border-radius: 10px 0 0 10px; }
.ans.good { background: var(--good-soft); color: var(--good-t); } .ans.good::before { background: var(--good); }
.ans.bad { background: var(--bad-soft); color: var(--bad-t); } .ans.bad::before { background: var(--bad); }
.ans.neu { background: var(--neu-soft); color: var(--neu-t); } .ans.neu::before { background: var(--neu); }
.ans .q { grid-column: 1 / -1; font-size: 0.75rem; letter-spacing: .1em; text-transform: uppercase; font-weight: 600; opacity: .85; }
.ans .n { font-family: var(--cbx-font-heading); font-size: 2.75rem; font-weight: 700; line-height: 1; white-space: nowrap; }
.ans .n small { font-size: 1.125rem; font-weight: 600; margin-left: 6px; }
.ans .txt { font-size: 0.875rem; }
.ans .txt b { font-family: var(--cbx-font-heading); font-size: 1.1875rem; font-weight: 600; display: block; }
.ans .meta { font-size: 0.75rem; text-align: right; opacity: .85; }
@media (max-width: 700px) { .ans { grid-template-columns: 1fr; } .ans .meta { text-align: left; } .ans .n { font-size: 2.25rem; } }

/* ---- tõlgenduskast graafiku all ---------------------------------------- */
/* VESTLUS HOTFIX H6: ONE interpretation component on every page — a white
   card with a soft shadow and a hairline (never the page's own tone), a 4 px
   edge by direction (pressure / risk = heat-3, neutral = heat-2, favourable
   = green), the mark "ConBRIX-i tõlgendus" as the header, the first
   sentence bold 17 px in ink, the period / evidence line small, the ask row
   as the footer (A17 / „Küsi selle kohta") */
.interp { margin-top: 10px; border-radius: 8px; padding: 10px 14px 10px 16px; font-size: 0.8125rem; position: relative; line-height: 1.4; background: var(--card); border: 1px solid var(--line); box-shadow: var(--cbx-shadow-sm); color: var(--ink); }
.interp::before { content: ""; position: absolute; left: -1px; top: -1px; bottom: -1px; width: 4px; border-radius: 8px 0 0 8px; background: var(--heat-2); }
.interp b { display: block; font-family: var(--cbx-font-heading); font-size: 1.0625rem; font-weight: 600; color: var(--ink); line-height: 1.3; }
.interp span { color: var(--ink-2); font-size: 0.75rem; }
.interp.good::before { background: var(--good); }
.interp.bad::before { background: var(--heat-3); }
.interp.neu::before { background: var(--heat-2); }

/* ---- tõlgenduskaart (Detailne) ------------------------------------------ */
.ic { border-radius: 8px; padding: 10px 12px 10px 14px; position: relative; }
.ic::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; border-radius: 8px 0 0 8px; }
.ic.good { background: var(--good-soft); } .ic.good::before { background: var(--good); } .ic.good .s { color: var(--good-t); }
.ic.bad { background: var(--bad-soft); } .ic.bad::before { background: var(--bad); } .ic.bad .s { color: var(--bad-t); }
.ic.neu { background: var(--neu-soft); } .ic.neu::before { background: var(--neu); } .ic.neu .s { color: var(--neu-t); }
.ic h5 { font-family: var(--cbx-font-heading); font-size: 0.875rem; font-weight: 600; margin: 0 0 2px; color: var(--ink); }
.ic .s { font-family: var(--cbx-font-heading); font-size: 1.0625rem; font-weight: 600; line-height: 1.2; }
.ic .e { font-size: 0.75rem; color: var(--ink-2); margin-top: 4px; }
.ic .chip { margin-top: 6px; }

/* ---- tint-read, chip, tag ---------------------------------------------- */
table.imp { width: 100%; border-collapse: separate; border-spacing: 0 4px; font-size: 0.8438rem; }
table.imp th { font-size: 0.75rem; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-3); font-weight: 600; text-align: left; padding: 0 10px 2px; }
table.imp td { padding: 7px 10px; vertical-align: middle; }
table.imp tr.good td { background: var(--good-soft); color: var(--good-t); }
table.imp tr.bad td { background: var(--bad-soft); color: var(--bad-t); }
table.imp tr.neu td { background: var(--neu-soft); color: var(--neu-t); }
table.imp tr td:first-child { border-left: 4px solid; border-radius: 5px 0 0 5px; font-weight: 600; color: var(--ink); }
table.imp tr.good td:first-child { border-color: var(--good); }
table.imp tr.bad td:first-child { border-color: var(--bad); }
table.imp tr.neu td:first-child { border-color: var(--neu); }
table.imp tr td:last-child { border-radius: 0 5px 5px 0; }
table.imp .num { font-variant-numeric: tabular-nums; font-weight: 600; white-space: nowrap; }
table.imp .src { color: var(--ink-3); font-size: 0.75rem; white-space: nowrap; }
.chip { display: inline-block; font-size: 0.75rem; font-weight: 600; padding: 2px 9px; border-radius: 999px; color: var(--card); white-space: nowrap; letter-spacing: .02em; background: var(--neu-c); }
.chip.good { background: var(--good-c); } .chip.bad { background: var(--bad-c); } .chip.neu { background: var(--neu-c); }
.tag { display: inline-block; font-size: 0.75rem; font-weight: 600; padding: 2px 8px; border-radius: 999px; white-space: nowrap; }
.tag.good { background: var(--good-soft); color: var(--good-t); }
.tag.bad { background: var(--bad-soft); color: var(--bad-t); }
.tag.neu { background: var(--neu-soft); color: var(--neu-t); }
.tag.none { background: transparent; color: var(--ink-3); border: 1px dashed var(--line); }

/* ---- ühtne ⓘ ------------------------------------------------------------ */
.ipop { display: inline-block; position: relative; vertical-align: baseline; }
.ipop > summary { list-style: none; cursor: pointer; color: var(--steel); font-weight: 600; display: inline; }
.ipop > summary::-webkit-details-marker { display: none; }
.ipop[open] > .ipop-body { position: absolute; z-index: 20; right: 0; top: 1.4em; min-width: 240px; max-width: 320px; background: var(--card); color: var(--ink); border: 1px solid var(--line); border-radius: 6px; padding: 8px 10px; font-size: 0.75rem; box-shadow: var(--cbx-shadow-md); text-align: left; }
.ipop dl { margin: 0; display: grid; grid-template-columns: auto 1fr; gap: 2px 8px; }
.ipop dt { color: var(--ink-3); font-weight: 600; }
.ipop dd { margin: 0; }
/* 390 px: the open popup sits at the bottom of the screen, full width less the gutter. */
@media (max-width: 700px) { .ipop[open] > .ipop-body { position: fixed; left: 16px; right: 16px; top: auto; bottom: 16px; min-width: 0; max-width: none; max-height: 60vh; overflow: auto; } }

/* ---- graafik ----------------------------------------------------------- */
.k9c { background: var(--card); border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px 8px; margin-top: 10px; }
.k9c h4 { font-family: var(--cbx-font-heading); font-size: 0.9375rem; font-weight: 600; margin: 0 0 2px; }
.k9c .sub { font-size: 0.75rem; color: var(--ink-3); }
.k9c .tools { float: right; font-size: 0.75rem; font-weight: 600; display: flex; gap: 10px; align-items: baseline; }
.k9c svg { width: 100%; height: auto; display: block; font-family: var(--cbx-font-body); }
.k9c .k9lg { display: flex; gap: 14px; font-size: 0.75rem; color: var(--ink-2); margin-top: 4px; flex-wrap: wrap; }
.k9c .k9lg i { display: inline-block; width: 14px; height: 3px; vertical-align: middle; margin-right: 5px; border-radius: 2px; }
.k9c .k9lg i.dash { height: 0; border-top: 2px dashed var(--s-market); background: transparent; }
.k9c .k9lg i.dot { height: 0; border-top: 2px dotted var(--analog); background: transparent; }
.k9c .k9lg i.band { height: 10px; background: var(--s-market); opacity: .2; }
/* PARTNERKONTO 48K §B (1.34.12): the one mark of months 25–48 */
.k9c .k9lg .k35-trend, .k35-trend { color: var(--ink-3, var(--ink-2)); font-style: italic; white-space: nowrap; }
.k9c .readout { font-size: 0.75rem; color: var(--ink-2); min-height: 1.2em; margin-top: 2px; }
.k9c svg .gr { stroke: var(--line); stroke-width: 1; }
.k9c svg .ax { stroke: var(--ink-3); stroke-width: 1; }
.k9c svg .tx { font-size: calc(0.75rem * var(--svg-k, 1)); fill: var(--ink-3); }
.k9c svg .tv { font-size: calc(0.75rem * var(--svg-k, 1)); fill: var(--ink); font-weight: 600; }
.k9c svg .fc { fill: var(--fc); }
.k9c svg .fc2 { fill: var(--fc); opacity: .55; }
.k9c svg .ph-up { fill: var(--ph-up); opacity: .55; }
.k9c svg .ph-down { fill: var(--ph-down); opacity: .55; }
/* ROLLIDE_HOIVE A10 (1.29.0): the six phase steps behind a cycle-type chart,
   the transition mark on the top edge, the legend swatches */
.k9c svg .ph-r1 { fill: var(--ph-r1); opacity: .8; } .k9c svg .ph-r2 { fill: var(--ph-r2); opacity: .7; } .k9c svg .ph-r3 { fill: var(--ph-r3); opacity: .6; }
.k9c svg .ph-f1 { fill: var(--ph-f1); opacity: .8; } .k9c svg .ph-f2 { fill: var(--ph-f2); opacity: .7; } .k9c svg .ph-f3 { fill: var(--ph-f3); opacity: .6; }
.k9c svg .trmark { fill: var(--ink-2); } .k9c svg .trmark.unc { opacity: .4; }
.sw.ph-r1, .stages .cells i.s6-r1, .stages .lgd i.s6-r1 { background: var(--ph-r1); opacity: 1; box-shadow: inset 0 0 0 1px var(--good); }
.sw.ph-r2, .stages .cells i.s6-r2, .stages .lgd i.s6-r2 { background: var(--ph-r2); opacity: 1; }
.sw.ph-r3, .stages .cells i.s6-r3, .stages .lgd i.s6-r3 { background: var(--ph-r3); opacity: 1; }
.sw.ph-f1, .stages .cells i.s6-f1, .stages .lgd i.s6-f1 { background: var(--ph-f1); opacity: 1; box-shadow: inset 0 0 0 1px var(--bad); }
.sw.ph-f2, .stages .cells i.s6-f2, .stages .lgd i.s6-f2 { background: var(--ph-f2); opacity: 1; }
.sw.ph-f3, .stages .cells i.s6-f3, .stages .lgd i.s6-f3 { background: var(--ph-f3); opacity: 1; }
.k9c .k9lg i.sw.ph-r1, .k9c .k9lg i.sw.ph-r2, .k9c .k9lg i.sw.ph-r3, .k9c .k9lg i.sw.ph-f1, .k9c .k9lg i.sw.ph-f2, .k9c .k9lg i.sw.ph-f3 { height: 10px; }
.stages .cells i.unc { opacity: .35; }
.stages .cells i.tr::before { content: ""; position: absolute; left: 50%; top: -5px; margin-left: -3px; border-left: 3px solid transparent; border-right: 3px solid transparent; border-top: 4px solid var(--ink); }
.cal .tag.unc { opacity: .55; }
.cal .tag .tr-mark { font-style: normal; margin-left: 2px; }
.cal .tag .unc-mark { font-style: normal; font-size: 0.7em; margin-left: 2px; opacity: .8; }
.cal .tag.s6-r1, .cal .tag.s6-r2, .cal .tag.s6-r3 { background: var(--ph-r2); color: var(--good-t); }
.cal .tag.s6-r1 { background: var(--ph-r1); } .cal .tag.s6-r3 { background: var(--ph-r3); }
.cal .tag.s6-f1, .cal .tag.s6-f2, .cal .tag.s6-f3 { background: var(--ph-f2); color: var(--bad-t); }
.cal .tag.s6-f1 { background: var(--ph-f1); } .cal .tag.s6-f3 { background: var(--ph-f3); }
.emp-today { grid-template-columns: repeat(3, minmax(0, 1fr)); }
/* EELARVEPROFIIL (1.30.0): the building budget profile page.
   PAIK (1.31.0): the six input cells on one line, one height, a help row
   reserved under every cell. */
/* VESTLUS HOTFIX H5: the input form as three rows — four fields (the label
   above, the hint small under), the contract sum wider, the button on the
   left; the month field looks like the number fields; at 390 px one column */
.bp-form { display: grid; gap: 8px 14px; }
.bp-form .bp-row { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px 14px; align-items: start; }
.bp-form label { display: grid; grid-template-rows: 1.2rem 34px auto; gap: 3px; font-size: 0.8125rem; min-width: 0; }
.bp-form label.bp-sum { grid-column: span 2; }
.bp-form label > span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bp-form small { color: var(--ink-3); font-size: 0.75rem; line-height: 1.2; }
.bp-form .bp-tip { cursor: help; color: var(--steel); font-weight: 600; }
.bp-form input, .bp-form select { padding: 5px 8px; border: 1px solid var(--line); border-radius: 6px; font: inherit; height: 34px; box-sizing: border-box; width: 100%; background: var(--card); color: var(--ink); }
.bp-form input[type="month"] { appearance: none; -webkit-appearance: none; }
.bp-form .bp-derived input { border-style: dashed; }
.bp-form .bp-submit { display: flex; gap: 10px; align-items: center; justify-content: flex-start; }
.bp-form .bp-submit button { height: 34px; margin: 0; }
@media (max-width: 480px) { .bp-form .bp-row { grid-template-columns: 1fr; } .bp-form label.bp-sum { grid-column: auto; } }
.bp-header { font-family: var(--cbx-font-heading); font-size: 0.8125rem; letter-spacing: .04em; color: var(--ink-2); margin: 12px 0 2px; }
.bp-chart svg { width: 100%; height: auto; display: block; font-family: var(--cbx-font-body); }
.bp-chart .yl-grid { stroke: var(--line); stroke-width: 1; }
.bp-chart .yl-ax { font-size: 11px; fill: var(--ink-3); }
.bp-chart .yl-zero { stroke: var(--ink-3); stroke-width: 1; }
.bp-chart .bp-ph { opacity: .45; }
.bp-chart .bp-phlbl { font-weight: 600; fill: var(--ink-2); }
.bp-chart .bp-mark { font-weight: 600; fill: var(--ink); paint-order: stroke; stroke: var(--card); stroke-width: 3px; stroke-linejoin: round; }
.bp-chart .bp-endlbl { font-weight: 600; paint-order: stroke; stroke: var(--card); stroke-width: 3px; stroke-linejoin: round; }
.bp-chart .bp-peak { stroke: var(--ink-2); stroke-width: 1; stroke-dasharray: 3 3; }
.bp-legend-text { color: var(--ink-3); }
.bp-partners { margin-top: 8px; }
.bp-partners-title { font-size: 0.75rem; letter-spacing: .06em; color: var(--ink-3); margin-bottom: 4px; }
.bp-partners .stages { grid-template-columns: 180px 1fr; }
.bp-boxes { margin-top: 10px; }
.bp-window { font-size: 0.8125rem; margin: 4px 0; }
.bp-window b { color: var(--ink-2); font-weight: 600; }
.bp-total { margin-top: 8px; font-size: 0.8125rem; border-top: 1px solid var(--line); padding-top: 6px; }
.bp-toggle { display: flex; gap: 6px; align-items: center; font-size: 0.8125rem; margin: 4px 0 8px; }
.bp-toggle input { position: absolute; opacity: 0; width: 0; height: 0; }
.bp-toggle label { border: 1px solid var(--line); border-radius: 999px; padding: 2px 10px; cursor: pointer; }
.bp-toggle input:checked + label { background: var(--ink); color: var(--card); border-color: var(--ink); }
.bp-toggle .bp-t0 { margin-left: auto; }
.bp-evs .bp-bars-wrap { display: none; }
.bp-evs:has(#bp-view-bars:checked) .bp-bars-wrap { display: block; }
.bp-evs:has(#bp-view-bars:checked) .bp-table-wrap { display: none; }
.bp-table { border-collapse: collapse; font-size: 0.8125rem; width: 100%; }
.bp-table th, .bp-table td { padding: 4px 8px; border-bottom: 1px solid var(--line); text-align: right; white-space: nowrap; }
.bp-table th:first-child, .bp-table td:first-child { text-align: left; }
.bp-table td.heat-1, .sw.heat-1 { background: var(--heat-1); }
.bp-table td.heat-2, .sw.heat-2 { background: var(--heat-2); }
.bp-table td.heat-3, .sw.heat-3 { background: var(--heat-3); color: var(--ink); }
.bp-table td.win { box-shadow: inset 0 0 0 2px var(--ink); }
.bp-table tr.total td { font-weight: 700; border-top: 2px solid var(--ink-3); }
.bp-mix { display: inline-flex; width: 36px; height: 8px; margin-right: 6px; vertical-align: middle; border-radius: 2px; overflow: hidden; }
.bp-mix i { display: block; height: 100%; }
/* PAIK (1.31.0): the legend with names, the interpretation cells, the price
   section's cards, the A7 boxes, the sources folded at the end; the edge
   colours are the heat steps (--heat-1..3), red for the greatest pressure. */
.k9c .k9lg.bp-legend { display: flex; flex-wrap: wrap; gap: 4px 14px; white-space: normal; overflow: visible; }
.bp-cells { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-top: 10px; }
.bp-cell, .bp-card, .bp-box { background: var(--card); border: 1px solid var(--line); border-left: 5px solid var(--neu); border-radius: 8px; padding: 10px 12px; font-size: 0.8125rem; line-height: 1.35; min-width: 0; }
.bp-cell.heat-1, .bp-card.heat-1 { border-left-color: var(--heat-2); }
.bp-cell.heat-2, .bp-card.heat-2, .bp-box.heat-2 { border-left-color: var(--heat-3); }
.bp-cell.heat-3, .bp-card.heat-3, .bp-box.heat-3 { border-left-color: var(--bad); }
.bp-box.steel { border-left-color: var(--steel); }
.bp-cell .ttl, .bp-card .ttl, .bp-box .ttl { font-size: 0.6875rem; letter-spacing: .06em; text-transform: uppercase; color: var(--ink-2); font-weight: 600; margin-bottom: 4px; }
.bp-cell .ttl .cbx-mark { margin-right: 4px; }
.bp-nums { display: flex; gap: 14px; flex-wrap: wrap; align-items: flex-end; }
.bp-nums b { font-family: var(--cbx-font-heading); font-size: 1.5rem; font-weight: 700; display: block; line-height: 1.1; color: var(--ink); }
.bp-nums small { color: var(--ink-3); font-size: 0.75rem; }
.bp-cell .sub, .bp-card .sub { color: var(--ink-3); font-size: 0.75rem; margin-top: 4px; }
.bp-grp { display: flex; gap: 6px; align-items: center; margin: 3px 0; }
.bp-grp .sw, .bp-card .ttl .sw { display: inline-block; width: 10px; height: 10px; border-radius: 2px; flex: none; margin-right: 0; vertical-align: -1px; }
.bp-card .ttl .sw { margin-right: 6px; }
.bp-grp span { color: var(--ink-2); }
.bp-cell ul { margin: 0; padding-left: 1.1em; }
.bp-cell li { margin: 2px 0; }
.bp-cell li:first-child { font-weight: 600; color: var(--ink); }
.bp-cards { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-top: 6px; }
.bp-card .row { color: var(--ink-2); }
.bp-card .big, .bp-box .big { font-family: var(--cbx-font-heading); font-size: 1.75rem; font-weight: 700; line-height: 1.1; margin-top: 4px; color: var(--ink); }
.bp-card .big small, .bp-box .big small { font-size: 0.875rem; font-weight: 600; color: var(--ink-2); }
.bp-total-big { margin: 12px 0 4px; font-size: 0.875rem; }
.bp-total-big b { font-family: var(--cbx-font-heading); font-size: 1.375rem; font-weight: 700; color: var(--ink); }
.bp-total-big span { color: var(--ink-2); font-size: 0.8125rem; }
.bp-evidence { margin-top: 8px; display: flex; gap: 12px; align-items: baseline; flex-wrap: wrap; }
.bp-evidence .ask-link { margin: 0; padding: 0; font-weight: 600; color: var(--steel); background: none; border: 0; cursor: pointer; }
.bp-key { margin-left: 6px; font-weight: 400; font-size: 0.875rem; }
.bp-key[open] > .ipop-body { right: auto; left: 0; }
.bp-unknown { color: var(--ink-3); }
.bp-boxes4 { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-top: 10px; }
/* VESTLUS HOTFIX H8: the four cards in the H6 look — white card, soft shadow,
   the edge by heat (largest heat-3, second heat-2), the number bold, the
   evidence classes as pills; at 390 px two rows */
.bp-boxes4 .bp-box { box-shadow: var(--cbx-shadow-sm); border-left-width: 4px; }
.bp-boxes4 .bp-box.heat-3 { border-left-color: var(--heat-3); }
.bp-boxes4 .bp-box.heat-2 { border-left-color: var(--heat-2); }
.bp-boxes4 .bp-box.neu { border-left-color: var(--heat-2); }
.bp-boxes4 .bp-box .pills { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px; }
.bp-boxes4 .bp-box .pill { display: inline-block; font-size: 0.6875rem; font-weight: 600; padding: 1px 8px; border-radius: 999px; border: 1px solid var(--line); background: var(--heat-1); color: var(--ink); }
.bp-boxes4 .bp-box .pill.e1 { background: var(--good-soft); color: var(--good-t); border-color: var(--good-soft); }
@media (max-width: 480px) { .bp-boxes4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* H8: the top-five rows of the EVS table — the rank mark, the impact cell's
   heat by rank, the row in bold; the other rows plain */
.bp-table tr.top td { font-weight: 600; }
.bp-table .bp-rank { display: inline-block; min-width: 18px; height: 18px; line-height: 18px; text-align: center; border-radius: 999px; font-size: 0.6875rem; font-weight: 700; margin-right: 6px; border: 1px solid var(--line); color: var(--ink); }
.bp-table .bp-rank.heat-1 { background: var(--heat-1); } .bp-table .bp-rank.heat-2 { background: var(--heat-2); } .bp-table .bp-rank.heat-3 { background: var(--heat-3); }
/* H9: the cost windows and the partner's decline line on the period chart */
.bp-chart .bp-win { opacity: .28; }
.bp-chart .bp-win.second { opacity: .18; }
.bp-chart .bp-winlbl { font-weight: 600; fill: var(--ink); paint-order: stroke; stroke: var(--card); stroke-width: 3px; stroke-linejoin: round; }
.bp-chart .bp-pfall { stroke: var(--ink-2); stroke-width: 1; }
.bp-chart .bp-bar.in-win { stroke: var(--ink); stroke-width: 1; }
.bp-chart .bp-pfalllbl { fill: var(--ink-2); paint-order: stroke; stroke: var(--card); stroke-width: 3px; stroke-linejoin: round; }
.k9c .k9lg i.dash.res { border-top-color: currentColor; }
.bp-box .txt { color: var(--ink-2); margin-top: 4px; }
.bp-table tr.total td.imp.heat-1 { background: var(--heat-1); }
.bp-table tr.total td.imp.heat-2 { background: var(--heat-2); }
.bp-table tr.total td.imp.heat-3 { background: var(--heat-3); }
.bp-sources { margin-top: 14px; font-size: 0.8125rem; }
.bp-sources > summary { cursor: pointer; color: var(--ink-2); font-weight: 600; }
.bp-sources ul { margin: 6px 0 0; padding-left: 1.2em; }
@media (max-width: 640px) {
  .bp-form { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .bp-form .bp-submit { grid-column: 1 / -1; }
  .bp-cells, .bp-cards { grid-template-columns: 1fr; }
  .bp-boxes4 { grid-template-columns: 1fr 1fr; }
  .bp-partners .stages { grid-template-columns: 110px 1fr; }
  .bp-boxes { grid-template-columns: 1fr; }
}
.emp-today .me .lbl, .emp-today .me strong { font-weight: 700; color: var(--ink); }
.k9c svg .analog-frame { fill: none; stroke: var(--steel); stroke-width: 1.5; stroke-dasharray: 3 3; }
.k9c svg .analog-area { fill: var(--steel-soft); opacity: .8; }
.k9c svg .analog-path { fill: none; stroke: var(--analog); stroke-width: 2; stroke-dasharray: 3 3; }
.k9c svg .today { stroke: var(--ink-3); stroke-width: 1; stroke-dasharray: 5 4; }
.k9c svg .ln { fill: none; stroke-width: 2; }
.k9c svg .ln.thick { stroke-width: 3; }
.k9c svg .ln.fcl { stroke-dasharray: 7 5; }
.k9c svg .ln.uncal { opacity: .45; }
.k9c svg .band { opacity: .12; }
.k9c svg .band.uncal { opacity: .06; }
.k9c svg .rng { stroke-width: 1.5; opacity: .6; }
.k9c svg .pt.uncal, .k9c svg .rng.uncal { opacity: .4; }
.k9c svg .bar-good { fill: var(--good); } .k9c svg .bar-bad { fill: var(--bad); } .k9c svg .bar-neu { fill: var(--neu); }
.k9c svg .hoverline { stroke: var(--ink-2); stroke-width: 1; }
.k9c svg .c-market { stroke: var(--s-market); fill: var(--s-market); }
.k9c svg .c-group { stroke: var(--s-group); fill: var(--s-group); }
.k9c svg .c-own { stroke: var(--s-own); fill: var(--s-own); }
.k9c svg .c-partner { stroke: var(--s-partner); fill: var(--s-partner); }
.k9c svg .c-projekteerija { stroke: var(--r-projekteerija); fill: var(--r-projekteerija); }
.k9c svg .c-arendaja { stroke: var(--r-arendaja); fill: var(--r-arendaja); }
.k9c svg .c-ehitaja { stroke: var(--r-ehitaja); fill: var(--r-ehitaja); }
.k9c svg .c-alltoovotja { stroke: var(--r-alltoovotja); fill: var(--r-alltoovotja); }
.k9c svg .c-tarnija { stroke: var(--r-tarnija); fill: var(--r-tarnija); }
.k9c svg .c-ink { stroke: var(--ink-2); fill: var(--ink-2); }
.k9c svg path.ln { fill: none; }
/* SISENDHINNAD (app 1.28.0): the three input lines — materials blue (market),
   labour orange (group), machinery steel; the darker reference line (100 =
   the pace of the general price level); the client-visible reading key. */
/* SISENDHINNAD A3: the news block carries a LABEL ("Uudised"), not a
   question — the K6 question headings keep their class. */
.k9 .sec-label { font-family: var(--cbx-font-heading); font-size: 1.1875rem; font-weight: 600; color: var(--ink); margin: 18px 0 6px; }
.k9c svg .c-steel { stroke: var(--steel); fill: var(--steel); }
.sw.c-steel { background: var(--steel); }
.k9c svg .base { stroke: var(--ink-2); stroke-width: 1.2; stroke-dasharray: 2 3; }
.k9c svg .baselbl { fill: var(--ink-2); }
.k9c .k9-subline { margin: 2px 0 4px; }
.k9c.ip svg .band { opacity: .14; }
.ip-today { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); padding: 8px 0; margin: 10px 0 0; font-size: 0.8125rem; }
.ip-today > div { padding: 0 12px; border-right: 1px solid var(--line); min-width: 0; }
.ip-today > div:last-child { border-right: 0; }
.ip-today .lbl { color: var(--ink-2); }
.ip-boxes { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 10px; }
.ip-box { background: var(--card); border: 1px solid var(--line); border-radius: 8px; padding: 10px 14px; font-size: 0.8125rem; line-height: 1.4; }
.ip-box .ttl { font-size: 0.6875rem; color: var(--ink-2); font-weight: 600; letter-spacing: 0.04em; margin-bottom: 4px; }
.ip-boxes .interp { margin-top: 0; }
.ip-boxes .interp .ip-weights { display: block; color: var(--ink-2); font-size: 0.75rem; margin-top: 4px; }
@media (max-width: 700px) {
  .ip-today, .emp-today { grid-template-columns: 1fr 1fr; }
  .ip-today > div { padding: 2px 8px; border-right: 0; }
  .ip-boxes { grid-template-columns: 1fr; }
}
.k9c svg .endlabel { font-size: calc(0.75rem * var(--svg-k, 1)); font-weight: 700; stroke: none; }
.k9c svg .hollow { fill: var(--card); stroke-width: 2; }
.k9lg .sw { display: inline-block; width: 14px; height: 3px; vertical-align: middle; margin-right: 5px; border-radius: 2px; }
.sw.c-market { background: var(--s-market); } .sw.c-group { background: var(--s-group); } .sw.c-own { background: var(--s-own); } .sw.c-partner { background: var(--s-partner); }
.sw.c-projekteerija { background: var(--r-projekteerija); } .sw.c-arendaja { background: var(--r-arendaja); }
.sw.c-ehitaja { background: var(--r-ehitaja); } .sw.c-alltoovotja { background: var(--r-alltoovotja); }
.sw.c-tarnija { background: var(--r-tarnija); } .sw.c-ink { background: var(--ink-2); }
.sw.good { background: var(--good); } .sw.bad { background: var(--bad); } .sw.neu { background: var(--neu); }

/* ---- tabelivaade (▤ arvudena) ---------------------------------------- */
.astable { display: inline; }
.astable > summary { list-style: none; cursor: pointer; color: var(--steel); }
.astable > summary::-webkit-details-marker { display: none; }
.astable[open] > .astable-body { display: block; }
.astable-body { overflow-x: auto; margin-top: 6px; max-height: 360px; overflow-y: auto; }
.astable-body table { border-collapse: collapse; font-size: 0.75rem; min-width: 100%; }
.astable-body th, .astable-body td { padding: 3px 8px; border-bottom: 1px solid var(--line); text-align: right; white-space: nowrap; color: var(--ink); }
.astable-body th:first-child, .astable-body td:first-child { text-align: left; }
.astable-body tr.fcrow td { color: var(--ink-2); }
.astable-body tr.uncal td { color: var(--ink-3); }

/* ---- segmendikaart ------------------------------------------------------ */
.seg { background: var(--card); border: 1px solid var(--line); border-radius: 8px; padding: 10px 10px 8px; font-size: 0.75rem; }
.seg.me { border-color: var(--s-market); box-shadow: 0 0 0 1px var(--s-market) inset; }
.seg h5 { font-family: var(--cbx-font-heading); font-size: 0.9375rem; font-weight: 600; margin: 0 0 6px; display: flex; align-items: center; gap: 6px; }
.seg h5 i { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
.seg h5 i.c-projekteerija { background: var(--r-projekteerija); } .seg h5 i.c-arendaja { background: var(--r-arendaja); }
.seg h5 i.c-ehitaja { background: var(--r-ehitaja); } .seg h5 i.c-alltoovotja { background: var(--r-alltoovotja); }
.seg h5 i.c-tarnija { background: var(--r-tarnija); }
.seg .me-tag { margin-left: auto; font-size: 0.75rem; background: var(--s-market); color: var(--card); border-radius: 999px; padding: 1px 7px; font-family: var(--cbx-font-body); }
.seg .hd { display: grid; grid-template-columns: 1fr 1fr; font-size: 0.75rem; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-3); font-weight: 600; margin-bottom: 4px; }
.seg .r { margin-top: 6px; }
.seg .r .l { font-size: 0.75rem; color: var(--ink-2); margin-bottom: 2px; }
.seg .r .v { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; }
.seg .tag { font-size: 0.75rem; padding: 2px 6px; display: block; text-align: center; white-space: normal; line-height: 1.2; }

/* ---- kalender P1–P4 ---------------------------------------------------- */
table.cal { width: 100%; border-collapse: collapse; font-size: 0.75rem; table-layout: fixed; }
table.cal th { text-align: left; padding: 6px 8px; font-weight: 600; font-size: 0.75rem; color: var(--ink-3); text-transform: uppercase; letter-spacing: .06em; border-bottom: 1px solid var(--line); vertical-align: top; }
table.cal th:first-child { width: 17%; }
table.cal th b { display: block; color: var(--s-market); font-size: 0.8125rem; text-transform: none; letter-spacing: 0; }
table.cal td { padding: 6px 8px; border-bottom: 1px solid var(--line); vertical-align: middle; }
table.cal td:first-child { font-weight: 600; white-space: normal; }
table.cal tr.me td { background: var(--steel-soft); }
table.cal .tag { white-space: normal; display: inline-block; line-height: 1.2; }
table.cal .pq { font-size: 0.75rem; color: var(--steel); background: var(--steel-soft); border-radius: 6px; padding: 6px 8px; line-height: 1.3; font-weight: 500; }
.cal-wrap { overflow-x: auto; }

/* ---- äritsükli etapid (lahtrite riba) ---------------------------------- */
.stages { display: grid; grid-template-columns: 130px 1fr; gap: 4px 8px; font-size: 0.75rem; align-items: center; overflow-x: auto; }
.stages .cells { display: grid; gap: 2px; position: relative; }
.stages .cells i { height: 16px; border-radius: 2px; display: block; background: var(--neu-soft); }
.stages .cells i.s-naljane { background: var(--bad); opacity: .75; }
.stages .cells i.s-taituv { background: var(--good); opacity: .6; }
.stages .cells i.s-tipus { background: var(--good-t); opacity: .9; }
.stages .cells i.s-jahtuv { background: var(--neu); opacity: .8; }
.stages .cells i.p { background-image: repeating-linear-gradient(135deg, var(--card) 0 2px, transparent 2px 6px); }
.stages .cells i.u { opacity: .3; }
.stages .cells i.today { box-shadow: -3px 0 0 0 var(--ink); }
.stages .me { font-weight: 700; }
.stages .ax { grid-column: 2; display: flex; justify-content: space-between; font-size: 0.75rem; color: var(--ink-3); }
.stages .lgd { grid-column: 1 / -1; display: flex; gap: 12px; flex-wrap: wrap; font-size: 0.75rem; color: var(--ink-2); margin-top: 4px; }
.stages .lgd i { display: inline-block; width: 12px; height: 12px; border-radius: 2px; vertical-align: -2px; margin-right: 4px; }
.stages-wrap { overflow-x: auto; }
.stages-wrap .stages { min-width: 560px; }

/* ---- päis + KPI --------------------------------------------------------- */
.hdr { display: grid; grid-template-columns: 44px 1fr auto auto auto; gap: 14px; align-items: center; }
.hdr .mk { width: 44px; height: 44px; border-radius: 8px; background: var(--s-market); color: var(--card); display: grid; place-items: center; font-family: var(--cbx-font-heading); font-weight: 700; font-size: 1.125rem; }
.hdr .nm { font-family: var(--cbx-font-heading); font-size: 1.1875rem; font-weight: 600; }
.hdr .sub { font-size: 0.75rem; color: var(--ink-3); }
.kpi .k { font-size: 0.75rem; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-3); font-weight: 600; }
.kpi .v { font-family: var(--cbx-font-heading); font-size: 1.375rem; font-weight: 600; }
.kpi .s { font-size: 0.75rem; color: var(--ink-3); }
@media (max-width: 900px) { .hdr { grid-template-columns: 44px 1fr; } .hdr .kpi { grid-column: span 1; } }

/* ---- partner: sina vs partner ------------------------------------------ */
.dumb { width: 100%; border-collapse: collapse; font-size: 0.7812rem; table-layout: fixed; }
.dumb th { font-size: 0.75rem; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-3); font-weight: 600; text-align: left; padding: 4px 8px; border-bottom: 1px solid var(--line); }
.dumb td { padding: 6px 8px; border-bottom: 1px solid var(--line); vertical-align: middle; }
.dumb td:nth-child(1) { width: 22%; font-weight: 600; }
.dumb td:nth-child(2) { width: 34%; }
.dumb td:nth-child(3), .dumb td:nth-child(4) { width: 10%; font-variant-numeric: tabular-nums; }
.dumb td:nth-child(5) { width: 24%; }
.dumb .grp td { background: var(--paper); font-size: 0.75rem; letter-spacing: .08em; text-transform: uppercase; font-weight: 600; color: var(--ink-3); }
.dumb svg { width: 100%; height: 26px; display: block; }
.dumb svg .rg { fill: var(--line); }
.dumb svg .me { fill: var(--s-market); }
.dumb svg .pa { fill: var(--s-group); }
.dumb .tag { white-space: normal; display: inline-block; line-height: 1.2; }
.dumb-wrap { overflow-x: auto; }
.dumb-wrap .dumb { min-width: 640px; }

/* ---- vestlusveerg (koondjooks 9 B4) ------------------------------------ */
.vestlus .vestlus-kpi { font-size: 0.75rem; color: var(--ink-3); margin: 2px 0 6px; }
.vestlus .vestlus-form textarea { min-height: 120px; height: 120px; border: 1px solid var(--line); border-radius: 6px; background: var(--card); color: var(--ink); padding: 6px 8px; font: inherit; font-size: 0.8125rem; }
.vestlus .vestlus-row { display: flex; gap: 6px; align-items: center; margin-top: 6px; }
.vestlus .vestlus-mic { width: 34px; height: 34px; border-radius: 50%; display: grid; place-items: center; margin-left: auto; background: var(--steel-soft); color: var(--steel); border: 1px solid var(--line); }
/* Jooks 10 plokk A: the microphone states — listening = red ring + seconds. */
.vestlus .vestlus-mic { width: auto; min-width: 34px; padding: 0 8px; border-radius: 17px; gap: 4px; grid-auto-flow: column; }
.vestlus .vestlus-mic-label:empty { display: none; }
.vestlus .vestlus-mic-label { font-size: 0.75rem; font-variant-numeric: tabular-nums; }
.vestlus .vestlus-mic[data-mode="listening"] { background: var(--bad-soft); color: var(--bad-t); border-color: var(--bad); box-shadow: 0 0 0 3px var(--bad-soft); }
.vestlus .vestlus-mic[data-mode="counting"] { background: var(--good-soft); color: var(--good-t); border-color: var(--good); }
.vestlus .vestlus-edit { margin: 0; padding: .2rem .7rem; }
.vestlus .vestlus-read, .vestlus .vestlus-read-all { font-size: 0.75rem; margin: 2px 8px 0 0; }
.vestlus .vestlus-consent { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.vestlus .vestlus-consent[hidden], .vestlus [data-vestlus-edit][hidden] { display: none; }
.vestlus .vestlus-consent button { margin: 0; padding: .15rem .7rem; }
.vestlus .vestlus-row { flex-wrap: wrap; }
.vestlus .vestlus-row > button { white-space: nowrap; flex: 0 0 auto; }
@media (max-width: 700px) {
  .vestlus .vestlus-mic { min-width: 56px; height: 56px; border-radius: 28px; font-size: 1.375rem; }
  .vestlus .vestlus-mic-label { font-size: 0.8125rem; }
}
.vestlus .vestlus-arch { margin-top: 12px; border-top: 1px solid var(--line); padding-top: 8px; font-size: 0.75rem; }
.vestlus .vestlus-arch b { display: block; margin-bottom: 4px; }

/* ---- jalus -------------------------------------------------------------- */
footer.site .footer-links a { color: var(--steel); }

/* narrow screens: tables scroll inside their own box, never the page */
.tbl-wrap { overflow-x: auto; max-width: 100%; }
.k9, .k9 .k9c, .k9 .card { min-width: 0; max-width: 100%; }
@media (max-width: 700px) { table.imp td, table.imp th { padding: 5px 6px; } .ipop[open] > .ipop-body { right: auto; left: -120px; max-width: 260px; } }

/* Jooks 11 A1: thumbs and the "mõtlen" state (no percent, up to ~8 s). */
.vestlus .vestlus-fb { display: inline-flex; gap: 4px; margin-left: 6px; }
.vestlus .vestlus-fb button { font-size: 0.875rem; opacity: .55; padding: 0 2px; }
.vestlus .vestlus-fb button[aria-pressed="true"] { opacity: 1; }
.vestlus .vestlus-thinking::after { content: ""; display: inline-block; width: 1.4em; text-align: left; animation: vestlus-dots 1.2s steps(4, end) infinite; }
@keyframes vestlus-dots { 0% { content: ""; } 25% { content: "."; } 50% { content: ".."; } 75% { content: "..."; } }
@media (prefers-reduced-motion: reduce) { .vestlus .vestlus-thinking::after { animation: none; content: "…"; } }


/* ==== Koondjooks 12 B0 — läbivad ======================================== */

/* Three columns of the SAME width on every page and every level:
   menu 220 px · content (never widened by its children) · chat 340 px.
   Before: a wide table (stages, partner) or a chart grew the `1fr` column
   through its min-content, the menu shrank and Detailne/Rollid looked
   stretched (TEEKOND 4d, 5, 6b). */
.layout > .sidenav { flex: 0 0 220px; width: 220px; min-width: 220px; max-width: 220px; box-sizing: border-box; overflow-wrap: anywhere; }
.layout > .with-vestlus { flex: 1 1 0; min-width: 0; }
.with-vestlus.has-vestlus { grid-template-columns: minmax(0, 1fr) 340px; }
.with-vestlus.has-vestlus > main { max-width: none; width: 100%; min-width: 0; box-sizing: border-box; }
.k9 .k9c svg { max-width: 100%; }
@media (max-width: 1100px) { .with-vestlus.has-vestlus { grid-template-columns: minmax(0, 1fr); } }

/* No automatic hyphenation anywhere (TEEKOND 1). `manual` = a word breaks
   ONLY at a soft hyphen written into it — the one allowed word is
   majandus&shy;tsükli (i18n). `none` would forbid that one too. */
html, body, .k9, .k9 * { hyphens: manual; -webkit-hyphens: manual; }

/* Charts: thin, elegant lines (1,5 px; TEEKOND 4b, 5, 6b). */
.k9c svg .ln { stroke-width: 1.5; }
.k9c svg .ln.thick { stroke-width: 1.5; }
.k9c svg .analog-path { stroke-width: 1.5; }
.k9c svg circle.pt { r: 3.5px; }
.k9c { cursor: crosshair; }
.k9c .analyse { display: none; margin-top: 6px; font-size: 0.7812rem; padding: 3px 12px; border-radius: 999px; border: 1px solid var(--steel); background: var(--steel-soft); color: var(--steel); cursor: pointer; }
.k9c .analyse.on { display: inline-block; }

/* ⓘ: closes on outside click / Esc (k9.js); fits without a scrollbar. */
.ipop[open] > .ipop-body { width: max-content; max-width: min(420px, 90vw); min-width: 200px; overflow: visible; max-height: none; }
@media (max-width: 700px) { .ipop[open] > .ipop-body { max-height: none; overflow: visible; } }

/* ConBRIX's own forecast / computation: a small mark + label (TEEKOND 5b). */
.cbx-own { display: inline-flex; align-items: center; gap: 5px; font-size: 0.75rem; font-weight: 600; color: var(--steel); letter-spacing: .02em; }
.cbx-own svg { width: 13px; height: 13px; }

/* Loading: the ConBRIX logo turns (partner search, chat, "tõlgendus valmib"). */
.cbx-spin { display: inline-flex; align-items: center; gap: 6px; font-size: 0.7812rem; color: var(--ink-2); }
.cbx-spin svg { width: 18px; height: 18px; color: var(--steel); animation: cbx-turn 1.1s linear infinite; }
@keyframes cbx-turn { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .cbx-spin svg { animation: none; } }
.pending-note { font-size: 0.75rem; color: var(--ink-3); }

/* Chat input: taller, round, send button inside the box, mic beside it. */
.vestlus .vestlus-inputbox { position: relative; display: flex; align-items: flex-end; gap: 8px; }
.vestlus .vestlus-inputbox textarea { flex: 1; min-height: 88px; height: 88px; border: 1px solid var(--line); border-radius: 18px; padding: 12px 52px 12px 14px; font-size: 0.875rem; background: var(--card); color: var(--ink); box-shadow: var(--cbx-shadow-sm); resize: none; }
.vestlus .vestlus-inputbox textarea:focus { outline: none; border-color: var(--steel); box-shadow: 0 0 0 3px var(--steel-soft); }
.vestlus .vestlus-send { position: absolute; right: 58px; bottom: 10px; width: 36px; height: 36px; border-radius: 50%; border: 0; margin: 0; padding: 0; background: var(--steel); color: var(--card); display: grid; place-items: center; font-size: 1.0625rem; cursor: pointer; }
.vestlus .vestlus-inputbox .vestlus-mic { flex: 0 0 auto; }
@media (max-width: 700px) { .vestlus .vestlus-inputbox textarea { min-height: 96px; font-size: 1rem; } .vestlus .vestlus-send { width: 44px; height: 44px; right: 70px; } }
.vestlus .vestlus-council { font-size: 0.75rem; color: var(--ink-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block; margin-top: 2px; }

/* Koondjooks 12 (3a): both plan cards end with their button at the same
   height, whatever the length of the text above it. */
.price-cards > .card { display: flex; flex-direction: column; }
.price-cards > .card > :last-child { margin-top: auto; }

/* Koondjooks 12 (1b): the news boxes on Turuülevaade Peamine. */
.news-boxes .news-box { display: flex; flex-direction: column; gap: 6px; }
.news-boxes .news-title { font-family: var(--cbx-font-heading); font-weight: 600; font-size: 0.9375rem; color: var(--ink); text-decoration: none; }
.news-boxes .news-title:hover { text-decoration: underline; }
.news-boxes .news-interp { margin-top: auto; padding-top: 6px; border-top: 1px solid var(--line); font-size: 0.8125rem; color: var(--ink-2); display: flex; flex-direction: column; gap: 4px; }

/* Koondjooks 12 (4a): the answer box figure one step smaller. */
.ans .n { font-size: 2.25rem; }
.ans .n small { font-size: 1rem; }
@media (max-width: 700px) { .ans .n { font-size: 1.875rem; } }

/* Koondjooks 12 (4c): "Olulisemad muutujad" without the heavy background —
   the tint stays only on the first cell's left bar (T2a). */
table.imp tr.good td, table.imp tr.bad td, table.imp tr.neu td { background: transparent; color: var(--ink); }
table.imp tr td { border-bottom: 1px solid var(--line); }

/* Koondjooks 12 (4b): the similar-period label may take two lines. */
.k9c svg text.tv.wrap2 { font-size: calc(0.75rem * var(--svg-k, 1)); }

/* Koondjooks 12 (4c): the 24-month column of the segment cards sits on the
   light forecast background (today vs +24 k at a glance). */
.seg .hd span:last-child { background: var(--fc); border-radius: 4px; padding: 0 4px; }
.seg .r .v > :last-child { box-shadow: 0 0 0 3px var(--fc); }

/* Koondjooks 12 (5d): five states, five fills from the effect colours +
   neutral; the trend arrow sits inside every forecast cell. */
.stages .cells i, .stages .lgd i { position: relative; }
.stages .cells i.s-naljane, .stages .lgd i.s-naljane { background: var(--bad); opacity: .85; }
.stages .cells i.s-jahtuv, .stages .lgd i.s-jahtuv { background: var(--bad-soft); opacity: 1; box-shadow: inset 0 0 0 1px var(--bad); }
.stages .cells i.s-taituv, .stages .lgd i.s-taituv { background: var(--good-soft); opacity: 1; box-shadow: inset 0 0 0 1px var(--good); }
.stages .cells i.s-tipus, .stages .lgd i.s-tipus { background: var(--good); opacity: .9; }
.stages .cells i.s-teadmata, .stages .lgd i.s-teadmata { background: var(--neu-soft); opacity: 1; }
.stages .cells i[data-t]::after { content: attr(data-t); position: absolute; inset: 0; display: grid; place-items: center; font-size: 0.75rem; font-weight: 700; color: var(--ink); font-style: normal; line-height: 1; }
.stages .trend-now { margin-left: 6px; font-weight: 600; color: var(--ink-2); font-size: 0.75rem; }

/* Koondjooks 12 (6a): the header answer + two "Mida jälgida" boxes. */
.watch-row .ans { height: 100%; box-sizing: border-box; margin: 4px 0; grid-template-columns: 1fr; }
.watch-row .ans .n { font-size: 1.875rem; }
.watch-row .ans .meta { text-align: left; }

/* Koondjooks 12 (7d): partner blocks as separate cards with a clear gap;
   the interpretation large, the facts smaller. */
.partner-block { margin-top: 16px; }
.partner-block > h4 { margin: 0 0 8px; }
.partner-impact p { font-family: var(--cbx-font-heading); font-size: 1.125rem; line-height: 1.4; font-weight: 500; color: var(--ink); margin: 6px 0 10px; }
.partner-facts table.imp { font-size: 0.75rem; }

/* Koondjooks 12 (4g): the personalised questions are long — they wrap
   inside the chat column instead of widening the page. */
.vestlus .vestlus-chips .chip { white-space: normal; text-align: left; max-width: 100%; line-height: 1.3; border-radius: 12px; padding: 6px 10px; }

/* Koondjooks 12 (2e, 7a): the search buttons stay in the form for Enter
   and for screen readers, but are not shown. */
.visually-hidden { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0 0 0 0) !important; white-space: nowrap !important; border: 0 !important; }

/* ==== Koondjooks 13 L1 — loetavus ========================================
   Reading text (interpretations, answer boxes, news sentences, the chat,
   table values) is AS LARGE AS THE MENU (1rem = 16 px at "tavaline");
   legends, sources, axis labels may be smaller but never under 12 px
   (0.75rem). The whole scale follows the reader's "Teksti suurus" setting
   (html[data-ts]: 100 / 112.5 / 125 %). */
html { font-size: 100%; }
html[data-ts="suurem"] { font-size: 112.5%; }
html[data-ts="suurim"] { font-size: 125%; }
.sidenav a, .sidenav span { font-size: 1rem; }
.ans .txt, .ans .txt b { font-size: 1.0625rem; }
.ans .q { font-size: 0.8125rem; }
.interp b, .ic .s { font-size: 1.0625rem; }
.interp span, .ic .e { font-size: 0.875rem; }
.news-boxes .news-title, .news-boxes .news-interp, .news-interp span { font-size: 1rem; }
table.imp, table.imp td { font-size: 1rem; }
table.imp th, .k9 .sm, .k9c .sub, .k9c .k9lg, .k9c .readout { font-size: 0.8125rem; }
.k9c .readout { font-size: 0.875rem; color: var(--ink); min-height: 1.4em; }
.vestlus, .vestlus-turn p, .vestlus-turns, .vestlus .vestlus-inputbox textarea { font-size: 1rem; }
.vestlus .vestlus-council { font-size: 0.75rem; }
.partner-impact p { font-size: 1.1875rem; }
.seg, .seg .r .l { font-size: 0.875rem; }
.seg .tag, table.cal, table.cal .tag { font-size: 0.8125rem; }
/* SVG text: k9.js sets --svg-k = 1 / (rendered width / viewBox width), so
   chart text is the same size on screen as HTML text of that rem. */

/* L1: the "Teksti suurus" control in the header. */
.ts-switch { display: inline-flex; gap: 2px; align-items: center; }
.ts-switch button { margin: 0; padding: .1rem .45rem; background: transparent; color: var(--hdr-ink); border: 1px solid var(--hdr-line); border-radius: 6px; line-height: 1.2; cursor: pointer; }
.ts-switch button[aria-pressed="true"] { background: var(--hdr-press); }
.ts-switch button:nth-child(1) { font-size: 0.8125rem; }
.ts-switch button:nth-child(2) { font-size: 0.9375rem; }
.ts-switch button:nth-child(3) { font-size: 1.0625rem; }

/* ==== Koondjooks 13 L3 — chat column 420 px at 1920 ====================== */
.with-vestlus.has-vestlus { grid-template-columns: minmax(0, 1fr) 420px; }
@media (max-width: 1100px) { .with-vestlus.has-vestlus { grid-template-columns: minmax(0, 1fr); } }
.vestlus-turn ol, .vestlus-turn ul { margin: .3rem 0 .3rem 1.2rem; padding: 0; }
.vestlus-turn li { margin: .15rem 0; }

/* ==== Koondjooks 13 L4 — värv indikaatoris, tõlgendus neutraalne ========
   Intensity classes i1/i2/i3 (nõrk · keskmine · tugev) on chips and tags;
   the colour is on the INDICATOR (chip, tag, bar), the interpretation text
   sits on a neutral card — green-tinted only when it names a possibility
   or a favourable direction. */
.chip.bad.i1, .tag.bad.i1 { background: var(--r1-bg); color: var(--r1-t); }
.chip.bad.i2, .tag.bad.i2 { background: var(--r2-bg); color: var(--r2-t); }
.chip.bad.i3, .tag.bad.i3 { background: var(--r3-bg); color: var(--r3-t); }
.chip.warn.i1, .tag.warn.i1 { background: var(--y1-bg); color: var(--y1-t); }
.chip.warn.i2, .tag.warn.i2 { background: var(--y2-bg); color: var(--y2-t); }
.chip.warn.i3, .tag.warn.i3 { background: var(--y3-bg); color: var(--y3-t); }
.chip.good.i1, .tag.good.i1 { background: var(--g1-bg); color: var(--g1-t); }
.chip.good.i2, .tag.good.i2 { background: var(--g2-bg); color: var(--g2-t); }
.chip.good.i3, .tag.good.i3 { background: var(--g3-bg); color: var(--g3-t); }
.chip.neu.i1, .chip.neu.i2, .chip.neu.i3 { background: var(--neu-soft); color: var(--neu-t); }
table.imp tr.bad.i1 td:first-child { border-color: var(--r1-bg); }
table.imp tr.bad.i2 td:first-child { border-color: var(--r3-bg); }
table.imp tr.bad.i3 td:first-child { border-color: var(--bad); }
table.imp tr.good.i1 td:first-child { border-color: var(--g1-bg); }
table.imp tr.good.i2 td:first-child { border-color: var(--g3-bg); }
table.imp tr.good.i3 td:first-child { border-color: var(--good); }

/* 6v1: the company header — ONE indicator card (colour) + ONE neutral
   interpretation card. */
.hdr2 { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr); gap: 12px; margin: 6px 0 10px; }
@media (max-width: 900px) { .hdr2 { grid-template-columns: 1fr; } }
.hdr2 .ind { background: var(--card); border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; }
.hdr2 .ind .row { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 6px 0; border-bottom: 1px solid var(--line); }
.hdr2 .ind .row:last-child { border-bottom: 0; }
.hdr2 .ind .lbl { font-size: 1rem; color: var(--ink); }
.hdr2 .ind .val { font-family: var(--cbx-font-heading); font-size: 1.25rem; font-weight: 700; padding: 2px 10px; border-radius: 999px; white-space: nowrap; }
.hdr2 .txt { background: var(--card); border: 1px solid var(--line); border-radius: 10px; padding: 12px 16px; font-size: 1rem; color: var(--ink); }
.hdr2 .txt.pos { background: var(--g1-bg); }
.hdr2 .txt p { margin: 0 0 .5rem; }
.hdr2 .txt p b { font-family: var(--cbx-font-heading); font-weight: 600; }

/* Koondjooks 13 L7: the registration form — one column, two short rows. */
.reg-form { max-width: 640px; }
.reg-form .reg-row { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 12px; align-items: end; }
@media (max-width: 700px) { .reg-form .reg-row { grid-template-columns: 1fr; } }
.reg-form input, .reg-form select { width: 100%; box-sizing: border-box; }

/* Koondjooks 13 M6 (7d): the possibility to weigh under "mõju sinu
   lepingule" — neutral, a little greener (brand.md v1.1: a possibility is
   shown on the green side, never as an order). */
.partner-facts .consider, .partner-block .ic .consider { margin-top: 4px; font-size: .875rem; color: var(--g2-t); }
.partner-facts tr.grp td { background: var(--paper, transparent); padding-top: 10px; }

/* Koondjooks 13 (7p1): the dumbbell — the partner's role group p25–p75
   as a bar, the partner (and you) as dots. Tokens only. */
.dumbbell { position: relative; display: block; height: 12px; margin: 6px 0 2px; min-width: 120px; }
.dumbbell::before { content: ""; position: absolute; left: 0; right: 0; top: 5px; height: 2px; background: var(--line); }
.dumbbell .rng { position: absolute; top: 3px; height: 6px; border-radius: 3px; background: var(--s-market); opacity: .35; }
.dumbbell .dot { position: absolute; top: 1px; width: 10px; height: 10px; margin-left: -5px; border-radius: 50%; }
.dumbbell .dot.theirs { background: var(--s-partner); }
.dumbbell .dot.mine { background: var(--s-own); }

/* Koondjooks 14 K5: a role line before 2019 is the sector's course. */
.k9c svg .ln.bc { stroke-dasharray: 2 4; opacity: .45; }

/* =====================================================================
   Koondjooks 15 A0 — the frame. Three columns in PIXELS, one block in the
   middle; what is left over is margin. Widths px, heights and type rem.
     full   >= 1760: menu 240 · 16 · content 960 · 16 · chat 508 = 1740
     rail   1500–1759: menu = icon rail 64 · 16 · 960 · 16 · chat 420 = 1476
            (koondjooks 17 P1, U2 a — the chat stays beside, narrower)
     drawer 1024–1499: rail + the chat behind a "Vestlus" tab (drawer 508)
     phone  < 1024: one column, hamburger, chat = full-screen sheet
   (The KASK's 1720 / 1536 do not fit a 1740 / 1564 px block plus the
   17 px scrollbar; the breakpoints are where the block really fits.)
   ===================================================================== */
:root { --col-menu: 240px; --col-rail: 64px; --col-main: 960px; --col-chat: 508px;
        --col-gap: 16px; --col-block: 1740px; --pagebar-h: 56px; }
header.site { padding-left: max(16px, calc((100% - var(--col-block)) / 2));
              padding-right: max(16px, calc((100% - var(--col-block)) / 2)); }
footer.site { padding-left: max(16px, calc((100% - var(--col-block)) / 2)); }
body .layout { max-width: var(--col-block); margin: 0 auto; display: flex;
               gap: var(--col-gap); width: 100%; box-sizing: border-box; align-items: flex-start; }
body .layout > .sidenav { display: flex; flex: 0 0 var(--col-menu); width: var(--col-menu);
                          min-width: var(--col-menu); max-width: var(--col-menu);
                          position: sticky; top: 0; align-self: flex-start; }
body .layout > .with-vestlus { flex: 0 0 auto; min-width: 0; }
body .with-vestlus.has-vestlus { display: grid; gap: var(--col-gap); align-items: start;
                                 grid-template-columns: var(--col-main) var(--col-chat); }
body .with-vestlus:not(.has-vestlus) { width: calc(var(--col-main) + var(--col-gap) + var(--col-chat)); }
body .with-vestlus > main { width: var(--col-main); max-width: var(--col-main); min-width: 0;
                            box-sizing: border-box; padding: 0 0 1.2rem; margin: 0; }
/* a page without the chat (konto): the same 960 content column */
body .with-vestlus:not(.has-vestlus) > main, body .with-vestlus:not(.has-vestlus) > main.narrow { width: var(--col-main); max-width: var(--col-main); }
/* 50/50 (V0 "Laienda"): content 720 · chat 748 */
html[data-chat-layout="wide"] body .with-vestlus.has-vestlus { grid-template-columns: 720px 748px; }
html[data-chat-layout="wide"] body .with-vestlus.has-vestlus > main { width: 720px; max-width: 720px; }

/* R3: the chart is 900 px wide on every page and level (content 960 −
   card padding); a narrower column scales it down, never up. */
.k9c { box-sizing: border-box; }
.k9c svg[data-k9chart] { width: 900px; max-width: 100%; height: auto; display: block; }

/* menu entries carry an icon; the name is hidden on the rail */
.sidenav .nav-ico { display: inline-grid; place-items: center; width: 24px; height: 24px;
                    flex: 0 0 24px; margin-right: 10px; vertical-align: middle; }
.sidenav .nav-ico svg { width: 20px; height: 20px; }
.sidenav > a, .sidenav > .sidenav-hall { display: flex; align-items: center; }
/* OTSUSERAAMID LEHT 1 Ü4: a menu group (details/summary, no script) */
.sidenav .sidenav-group { display: block; }
.sidenav .sidenav-group > summary { display: flex; align-items: center; cursor: pointer; list-style: none;
                                   padding: .5rem .7rem; border-radius: var(--cbx-radius-sm, 6px); color: var(--cbx-ink); }
.sidenav .sidenav-group > summary::-webkit-details-marker { display: none; }
.sidenav .sidenav-group > summary:hover { background: var(--cbx-steel-100); }
.sidenav .sidenav-group > a { display: flex; align-items: center; padding: .4rem .7rem .4rem 2.5rem; font-size: .95rem; }

@media (max-width: 1759px) {
  body .layout > .sidenav { flex-basis: var(--col-rail); width: var(--col-rail);
    min-width: var(--col-rail); max-width: var(--col-rail); padding: 1rem 8px; overflow: visible; z-index: 30; }
  body .layout > .sidenav .nav-label, body .layout > .sidenav .sidenav-account,
  body .layout > .sidenav .sidenav-cta { display: none; }
  body .layout > .sidenav > a, body .layout > .sidenav > .sidenav-hall { justify-content: center; padding: .55rem 0; }
  body .layout > .sidenav .nav-ico { margin-right: 0; }
  body .layout > .sidenav .sidenav-group > summary { justify-content: center; padding: .55rem 0; }
  body .layout > .sidenav .sidenav-group > a { display: none; }
  body .layout > .sidenav.rail-open .sidenav-group > summary { justify-content: flex-start; padding: .55rem .7rem; }
  body .layout > .sidenav.rail-open .sidenav-group[open] > a { display: flex; }
  /* Koondjooks 18 K2: the cursor does NOT widen the rail (the widening
     slid out from under the cursor and came back: the flicker, and the
     names wrapped letter by letter on the way). Hover / keyboard focus
     shows only a one-line label beside the icon; the full 240 px menu
     opens on a click of the rail's button, as a layer over the page. */
  /* flex-basis and min-width too: the rail is a flex item, and with only
     `width` set it stayed 64 px wide while the names were shown — the
     narrow column of letters in Virgo's picture. */
  body .layout > .sidenav.rail-open {
    flex-basis: var(--col-menu); width: var(--col-menu); min-width: var(--col-menu); max-width: var(--col-menu);
    margin-right: calc(var(--col-rail) - var(--col-menu));
    box-shadow: 0 8px 24px var(--k15-shadow); background: var(--card); overflow-wrap: normal; }
  body .layout > .sidenav.rail-open .nav-label { display: inline; white-space: nowrap; }
  body .layout > .sidenav.rail-open .sidenav-account { display: flex; }
  body .layout > .sidenav.rail-open > a,
  body .layout > .sidenav.rail-open > .sidenav-hall { justify-content: flex-start; padding: .55rem .7rem; }
  body .layout > .sidenav.rail-open .nav-ico { margin-right: 10px; }
  body .layout { max-width: calc(var(--col-rail) + var(--col-gap) + var(--col-main) + var(--col-gap) + var(--col-chat)); }
}

/* drawer: the chat leaves the row; a vertical tab brings it over the page */
.vestlus-tab { display: none; }
@media (max-width: 1499px) {
  body .layout { max-width: calc(var(--col-rail) + var(--col-gap) + var(--col-main)); }
  body .with-vestlus.has-vestlus, html[data-chat-layout="wide"] body .with-vestlus.has-vestlus { grid-template-columns: var(--col-main); }
  body .with-vestlus:not(.has-vestlus) { width: var(--col-main); }
  html[data-chat-layout="wide"] body .with-vestlus.has-vestlus > main { width: var(--col-main); max-width: var(--col-main); }
  body .vestlus { position: fixed; top: 0; right: 0; height: 100vh; width: var(--col-chat); max-width: 100vw;
                  transform: translateX(105%); transition: transform .2s ease; z-index: 60;
                  background: var(--card); box-shadow: -8px 0 24px var(--k15-shadow); border-left: 0; padding: 0; }
  body .vestlus.vestlus-open { transform: none; }
  .vestlus-tab { display: block; position: fixed; right: 0; top: 40%; z-index: 55; writing-mode: vertical-rl;
                 transform: rotate(180deg); padding: 14px 8px; border-radius: 0 8px 8px 0; margin: 0;
                 background: var(--k15-tab); color: var(--card); border: 0; font-weight: 600; }
  .vestlus-tab[data-waiting="1"]::after { content: "●"; color: var(--y3-bg); margin-top: 6px; }
}
@media (prefers-reduced-motion: reduce) { body .vestlus { transition: none; } }

/* phone: one column, hamburger menu, chat as a full-screen sheet */
@media (max-width: 1023px) {
  body .layout { display: block; max-width: none; padding: 0 16px; }
  body .layout > .sidenav { display: none; }
  .menu-toggle { display: inline-block; }
  /* Koondjooks 20 V12: the drawer opens UNDER the header (top = the
     header's height, measured by k9.js into --header-h) — the rest of
     the drawer's rules are in the koondjooks 20 block below. */
  .menu-toggle-box:checked ~ .layout > .sidenav { display: flex; position: fixed; top: var(--header-h, 56px); left: 0; bottom: 0;
    width: var(--col-menu); max-width: 80vw; z-index: 70; background: var(--card); }
  .menu-toggle-box:checked ~ .layout > .sidenav .nav-label, .menu-toggle-box:checked ~ .layout > .sidenav .sidenav-account { display: flex; }
  body .with-vestlus.has-vestlus, html[data-chat-layout="wide"] body .with-vestlus.has-vestlus { display: block; }
  body .with-vestlus, body .with-vestlus:not(.has-vestlus) { width: 100%; }
  body .with-vestlus > main, body .with-vestlus:not(.has-vestlus) > main,
  body .with-vestlus:not(.has-vestlus) > main.narrow,
  html[data-chat-layout="wide"] body .with-vestlus.has-vestlus > main { width: 100%; max-width: 100%; }
  body .vestlus { width: 100vw; transform: translateY(105%); }
  body .vestlus.vestlus-open { transform: none; }
  .vestlus-tab { writing-mode: horizontal-tb; transform: none; top: auto; bottom: 16px; right: 16px;
                 border-radius: 24px; padding: 12px 18px; min-height: 44px; }
}

/* ---- Koondjooks 15 A1: the chat column in four zones ------------------- */
body .vestlus { position: sticky; top: 0; height: 100vh; box-sizing: border-box; padding: 0 0 0 12px;
                border-left: 1px solid var(--line); display: flex; flex-direction: column; min-height: 0; }
body .vestlus .vestlus-body { display: flex; flex-direction: column; height: 100%; min-height: 0; }
.vestlus .vz-head { flex: 0 0 auto; min-height: 48px; display: flex; gap: 8px; align-items: center;
                    justify-content: space-between; border-bottom: 1px solid var(--line); padding: 6px 0; }
.vestlus .vz-head .vestlus-title { margin: 0; font-size: 1rem; }
.vestlus .vz-head .vestlus-kpi { margin: 0; font-size: 0.75rem; color: var(--ink-3); }
.vestlus .vz-head-r { display: flex; gap: 4px; flex-wrap: nowrap; }
.vestlus .vz-btn { margin: 0; padding: .25rem .55rem; font-size: 0.8125rem; background: transparent;
                   color: var(--ink); border: 1px solid var(--line); border-radius: 6px; white-space: nowrap; }
.vestlus .vz-close { display: none; }
@media (max-width: 1499px) { .vestlus .vz-close { display: inline-block; } .vestlus [data-vestlus-wide] { display: none; } }
.vestlus .vz-low { color: var(--y1-t); font-weight: 600; }
.vestlus .vz-msgs { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 10px 2px; }
.vestlus .vz-msgs .vestlus-turns { max-height: none; overflow: visible; margin: 0; }
.vestlus .vestlus-turn { border-bottom: 0; padding: 6px 0; }
.vestlus .vz-sys { text-align: center; color: var(--ink-3); font-size: 0.8125rem; margin: 6px 0; list-style: none; }
.vestlus .vestlus-user { display: flex; justify-content: flex-end; }
.vestlus .vz-bubble { max-width: 85%; background: var(--steel-soft, var(--paper)); border-radius: 14px 14px 4px 14px;
                      padding: 8px 12px; font-size: 1rem; }
.vestlus .vz-bubble p { margin: 0; }
.vestlus .vz-thumb svg { width: 120px; height: 60px; display: block; margin-bottom: 4px; }
.vestlus .vz-card { background: var(--card); border: 1px solid var(--line); border-left: 4px solid var(--s-partner);
                    border-radius: 8px; padding: 10px 12px; font-size: 1rem; line-height: 1.5; }
.vestlus .vz-card p { margin: 0 0 .45rem; }
.vestlus .vz-card p:last-child { margin-bottom: 0; }
.vestlus .vz-card ol, .vestlus .vz-card ul { margin: 0 0 .45rem 1.1rem; padding: 0; }
.vestlus .vz-card .vz-ask { color: var(--ink-2); }
.vestlus .vz-card.vz-refused { border-left-color: var(--y3-bg); background: var(--y1-bg); color: var(--y1-t); }
.vestlus .vz-num { border-bottom: 1px dotted var(--ink-3); cursor: help; position: relative; }
.vestlus .vz-num[data-src]:hover::after, .vestlus .vz-num[data-src]:focus::after {
  content: attr(data-src); position: absolute; left: 0; top: 1.4em; z-index: 5; white-space: nowrap;
  background: var(--card); border: 1px solid var(--line); border-radius: 6px; padding: 4px 8px;
  font-size: 0.75rem; color: var(--ink-2); }
.vestlus .vz-foot { display: flex; gap: 10px; align-items: center; font-size: 0.8125rem; margin-top: 4px; color: var(--ink-3); }
.vestlus .vz-foot .ipop { display: inline-block; }
.vestlus .vz-thinking { color: var(--ink-3); display: flex; align-items: center; gap: 6px; }
.vestlus .vz-next { flex: 0 0 auto; min-height: 44px; display: flex; flex-wrap: nowrap; overflow-x: auto;
                    gap: 6px; align-items: center; margin: 0; padding: 4px 0; }
.vestlus .vz-next .chip { white-space: nowrap; flex: 0 0 auto; max-width: none; }
.vestlus .vz-input { flex: 0 0 auto; min-height: 96px; padding: 6px 0 10px; border-top: 1px solid var(--line); }
.vestlus .vz-input .vestlus-inputbox textarea { min-height: 44px; height: 44px; max-height: 8rem; resize: none; }
.vestlus .vz-status { min-height: 20px; margin-top: 4px; gap: 8px; }
.vestlus .vz-bigmic { display: none; flex-direction: column; align-items: center; gap: 4px; margin-bottom: 6px; }
.vestlus .vz-bigmic-btn { width: 72px; height: 72px; border-radius: 50%; font-size: 1.75rem; margin: 0; }
html[data-chat-layout="wide"] .vestlus .vz-bigmic:not(:empty) { display: flex; }
html[data-chat-layout="wide"] .vestlus.vz-typing .vz-bigmic { display: none; }
@media (max-width: 1023px) { .vestlus .vz-bigmic { display: flex; } .vestlus.vz-typing .vz-bigmic { display: none; }
  .vestlus .vestlus-send, .vestlus .vestlus-mic { min-width: 44px; min-height: 44px; } }
.vestlus .vz-hist { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 8px 0; }
.vestlus .vz-hist-bar { display: flex; gap: 6px; align-items: center; margin-bottom: 8px; flex-wrap: wrap; }
.vestlus .vz-hist-bar input, .vestlus .vz-hist-bar select { margin: 0; flex: 1 1 120px; }
.vestlus .vz-hist-card { display: grid; gap: 2px; border: 1px solid var(--line); border-radius: 8px;
                         padding: 8px 10px; margin-bottom: 6px; background: var(--card); }
.vestlus .vz-hist-card .linklike { justify-self: end; }
.k9c.vz-flash { outline: 3px solid var(--s-partner); outline-offset: 4px; transition: outline-color .3s; }
.ask-link { font-size: 0.8125rem; margin-left: 8px; }

/* ---- Koondjooks 15 R4: the page bar (sticky, 56 px) ----------------------- */
.pagebar { position: sticky; top: 0; z-index: 20; min-height: var(--pagebar-h); display: flex; align-items: center;
           gap: 16px; background: var(--bg); border-bottom: 1px solid var(--line); margin: 0 0 12px; padding: 6px 0; }
.pagebar .k9-h1 { margin: 0; font-size: 1.375rem; }
.pagebar .lvl { margin: 0; }
.pagebar .pagebar-chip { margin-left: auto; font-size: 0.875rem; color: var(--ink-2); border: 1px solid var(--line);
                         border-radius: 14px; padding: 4px 10px; background: var(--card); white-space: nowrap;
                         overflow: hidden; text-overflow: ellipsis; max-width: 45%; }
/* R5: a card still being made keeps its size — a skeleton with the turning logo */
.pending-note { min-height: 72px; display: flex; align-items: center; justify-content: center; gap: 8px;
                background: var(--paper); border: 1px dashed var(--line); border-radius: 8px; color: var(--ink-3); }
.k9c.k9c-skel { min-height: 360px; display: flex; align-items: center; justify-content: center; background: var(--paper); }

/* Koondjooks 15: the drawer / sheet rules again AFTER the column rules
   (same specificity — the later one wins, and the column is sticky only
   when it sits in the row). */
@media (max-width: 1499px) {
  body .vestlus { position: fixed; top: 0; right: 0; height: 100vh; width: var(--col-chat); max-width: 100vw;
                  padding: 0 12px; border-left: 0; box-sizing: border-box; }
}
@media (max-width: 1023px) {
  body .vestlus { width: 100vw; left: 0; right: auto; }
}

.vestlus .vestlus-turns { list-style: none; padding: 0; }
/* the column in the row: the window minus the site header, so the input
   is on screen before the page scrolls */
@media (min-width: 1500px) { body .vestlus { height: calc(100vh - 48px); } }

/* ==== Koondjooks 16 — third look at the koondjooks 15 screens ============ */

/* F1 the chip row: a chip is at most two lines (the text is <= 90
   characters, full question in `title`); the row scrolls sideways and its
   right edge fades so the scroll shows. Three chips share the row. */
.vestlus .vz-next { gap: 6px; padding: 6px 28px 6px 0; scrollbar-width: thin;
  -webkit-mask-image: linear-gradient(to right, var(--ink) calc(100% - 36px), transparent);
          mask-image: linear-gradient(to right, var(--ink) calc(100% - 36px), transparent); }
.vestlus .vz-next[data-end="1"] { -webkit-mask-image: none; mask-image: none; }
.vestlus .vz-next:empty { display: none; }
.vestlus .vz-next .chip, .vestlus .vestlus-chips .chip {
  flex: 1 0 calc((100% - 12px) / 3); max-width: calc((100% - 6px) / 2); min-width: 140px;
  white-space: normal; text-align: left; line-height: 1.3; font-size: 0.8125rem; font-weight: 600;
  display: block; overflow: hidden; margin: 0; padding: 6px 10px; border-radius: 12px; }
/* the two-line cut lives on the text, not on the button (a button's own
   padding would show the third line) */
.vestlus .vz-next .chip .chip-t { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  overflow: hidden; max-height: 2.6em; }
.vestlus .vz-next { align-items: stretch; min-height: 0; }

/* F2 the empty chat: one lead line and three question cards */
.vestlus .vz-start { display: flex; flex-direction: column; gap: 8px; padding: 10px 0 4px; }
.vestlus .vz-start[hidden] { display: none; }
.vestlus .vz-start-lead { margin: 0 0 2px; color: var(--ink-2); font-size: 0.875rem; }
.vestlus .vz-start-card { margin: 0; text-align: left; cursor: pointer; background: var(--card); color: var(--ink);
  border: 1px solid var(--line); border-left: 4px solid var(--s-partner); border-radius: 8px;
  padding: 10px 12px; font-size: 0.9375rem; font-weight: 500; line-height: 1.4; box-shadow: var(--cbx-shadow-sm); }
.vestlus .vz-start-card:hover, .vestlus .vz-start-card:focus-visible { border-color: var(--steel); background: var(--steel-soft); }

/* F3 "Varasemad": an empty list says so; while the list is open only
   "← Tagasi" — the chips and the input step aside */
.vestlus .vz-hist-empty { margin: 24px 8px; text-align: center; color: var(--ink-3); font-size: 0.875rem; }
.vestlus.vz-histmode .vz-next, .vestlus.vz-histmode .vz-input { display: none; }
.vestlus .vz-hist-card b { font-weight: 600; }

/* F8 one form language: selects, text fields and small buttons in the
   content follow the design, not the browser defaults */
body select:not([multiple]):not([size]), .cbx-select {
  -webkit-appearance: none; appearance: none; font: inherit; color: var(--ink);
  background-color: var(--card); border: 1px solid var(--line); border-radius: 6px;
  padding: 6px 30px 6px 10px; min-height: 34px; cursor: pointer;
  background-image: linear-gradient(45deg, transparent 50%, var(--ink-3) 50%),
                    linear-gradient(135deg, var(--ink-3) 50%, transparent 50%);
  background-position: calc(100% - 15px) 55%, calc(100% - 10px) 55%;
  background-size: 5px 5px, 5px 5px; background-repeat: no-repeat; }
body input[type=text]:not(.hall-input), body input[type=email], body input[type=password],
body input[type=search], body input[type=number], body input[type=tel], .cbx-input {
  font: inherit; color: var(--ink); background: var(--card);
  border: 1px solid var(--line); border-radius: 6px; padding: 6px 10px; min-height: 34px; }
body select:not([multiple]):not([size]):focus, body input:focus-visible, .cbx-select:focus, .cbx-input:focus {
  outline: none; border-color: var(--steel); box-shadow: 0 0 0 3px var(--steel-soft); }
body input[type=checkbox], body input[type=radio] { accent-color: var(--steel); }
.cbx-btn-sm { margin: 0 0 0 6px; padding: 4px 10px; font-size: 0.8125rem; background: transparent;
  color: var(--steel); border: 1px solid var(--steel); border-radius: 6px; cursor: pointer; }
.cbx-btn-sm:hover { background: var(--steel-soft); }

/* F4 "Küsi selle kohta →" on its own line, bottom right, like "▤ arvudena" */
.interp .ask-row { display: flex; justify-content: flex-end; margin-top: 8px; }
.interp .ask-row .ask-link { margin: 0; padding: 0; font-size: 0.8125rem; font-weight: 600; color: var(--steel);
  background: none; border: 0; cursor: pointer; }
.interp .ask-row .ask-link:hover { text-decoration: underline; }

/* F9 the chart's warning: inside the chart card, neutral, with an ⓘ */
.k9-warn { display: flex; gap: 8px; align-items: flex-start; margin-top: 8px; padding: 8px 12px;
  background: var(--paper); border: 1px solid var(--line); border-radius: 6px;
  font-size: 0.8125rem; color: var(--ink-2); line-height: 1.4; }
.k9-warn-i { color: var(--steel); font-weight: 700; flex: 0 0 auto; }

/* F6 one microphone per mode: the big one in 50/50 (in the row) and on a
   phone, the small one in the ordinary column and in the drawer */
.vestlus .vz-bigmic-btn[data-mode="listening"] { background: var(--bad-soft); color: var(--bad-t); box-shadow: 0 0 0 4px var(--bad-soft); }
.vestlus .vz-bigmic-btn[data-mode="counting"] { background: var(--good-soft); color: var(--good-t); }
@media (min-width: 1760px) {
  html[data-chat-layout="wide"] .vestlus:not(.vz-typing) .vestlus-inputbox .vestlus-mic { display: none; }
  html[data-chat-layout="wide"] .vestlus:not(.vz-typing) .vestlus-inputbox .vestlus-send { right: 10px; }
}
@media (min-width: 1024px) and (max-width: 1759px) {
  html[data-chat-layout="wide"] .vestlus .vz-bigmic { display: none; }
}
@media (max-width: 1023px) {
  .vestlus:not(.vz-typing) .vestlus-inputbox .vestlus-mic { display: none; }
  .vestlus:not(.vz-typing) .vestlus-inputbox .vestlus-send { right: 10px; }
}

/* F11 the drawer is a temporary layer: the page darkens 40 %, the drawer
   carries shadow-3, a click on the dark closes it (vestlus.js) */
@media (max-width: 1499px) {
  html.vz-drawer-open body::before { content: ""; position: fixed; inset: 0; z-index: 58; background: var(--k16-scrim); }
  body .vestlus.vestlus-open { box-shadow: var(--shadow-3); }
}

/* F5 the phone page bar: row 1 page name + company chip (name only; the
   role on hover / focus / tap), row 2 the level buttons in one scrolling
   line. The floating "Vestlus" stays bottom right, 16 px in, and the page
   ends with room for it so it never covers an answer box. */
@media (max-width: 1023px) {
  .pagebar { flex-wrap: wrap; gap: 8px 12px; padding: 8px 0; }
  .pagebar .k9-h1 { order: 1; flex: 1 1 auto; min-width: 0; font-size: 1.25rem; }
  .pagebar .pagebar-chip { order: 2; margin-left: auto; max-width: 50%; }
  .pagebar .pagebar-chip .pc-role { display: none; }
  .pagebar .pagebar-chip:hover .pc-role, .pagebar .pagebar-chip:focus .pc-role { display: inline; }
  .pagebar .pagebar-chip:hover, .pagebar .pagebar-chip:focus { max-width: 100%; }
  .pagebar .lvl { order: 3; flex: 0 0 100%; display: flex; flex-direction: row; flex-wrap: nowrap;
                  overflow-x: auto; gap: 6px; white-space: nowrap; }
  .pagebar .lvl a { flex: 0 0 auto; }
  body .with-vestlus > main { padding-bottom: 88px; }
  .vestlus-tab { right: 16px; bottom: 16px; }
}

/* F5/F11: a closed drawer or sheet is not there at all (no focus, not in a
   full-page capture); it hides after its slide-out */
@media (max-width: 1499px) {
  body .vestlus { visibility: hidden; transition: transform .2s ease, visibility 0s linear .2s; }
  body .vestlus.vestlus-open { visibility: visible; transition: transform .2s ease; }
}
/* F5: the floating "Vestlus" docks in the page bar while an answer box is
   under its bottom-right place (vestlus.js measures) */
@media (max-width: 1023px) {
  .vestlus-tab[data-docked="1"] { bottom: auto; min-height: 32px; padding: 6px 14px; z-index: 25; }
}

/* F3 the history cards: flush, the continue link in the design's size */
.vestlus .vz-hist-list { list-style: none; margin: 0; padding: 0; }
.vestlus .vz-hist-card .linklike { font-size: 0.875rem; font-weight: 600; color: var(--steel);
  text-decoration: none; margin: 0; padding: 0; }
.vestlus .vz-hist-card .linklike:hover { text-decoration: underline; }
/* F5: an open sheet keeps its four zones (an old phone rule in conbic.css
   turned the open body into a block, so the input fell off the screen) */
body .vestlus.vestlus-open .vestlus-body { display: flex; }
/* F8: every button in the chat column speaks the page's type */
.vestlus button, .vestlus input, .vestlus select, .vestlus textarea { font-family: inherit; }

/* ---- Koondjooks 17 P1 (otsustekaart 12 U2 a): in the rail mode the chat
   stays BESIDE the content at 420 px (125 % zoom on a 1920 screen = 1536
   CSS px is this mode); the drawer starts below 1500 px. 50/50 is a
   full-width mode only. */
@media (max-width: 1759px) {
  :root { --col-chat: 420px; }
  html[data-chat-layout="wide"] body .with-vestlus.has-vestlus { grid-template-columns: var(--col-main) var(--col-chat); }
  html[data-chat-layout="wide"] body .with-vestlus.has-vestlus > main { width: var(--col-main); max-width: var(--col-main); }
  .vestlus [data-vestlus-wide] { display: none; }
  html[data-chat-layout="wide"] .vestlus .vz-bigmic { display: none; }
  html[data-chat-layout="wide"] .vestlus .vestlus-inputbox .vestlus-mic { display: inline-grid; }
}
@media (max-width: 1499px) {
  :root { --col-chat: 508px; }
}

/* ==== Koondjooks 17 A3 — the chat (V1–V5) ============================== */
/* V2: the start cards under a small "Küsi näiteks"; the chip row is empty
   (hidden) until the first answer */
.vestlus .vz-start-head { margin: 0 0 2px; font-size: 0.75rem; color: var(--ink-3);
  text-transform: uppercase; letter-spacing: .04em; }
.vestlus .vz-start-lead { display: none; }
/* V4: the engine's bold details */
.vestlus .vz-card .vz-bold { font-weight: 700; color: var(--ink); }
.vestlus .vz-card .cbx-mark { margin: 0 0 6px; }
.vestlus .vz-retry { margin-top: 8px; }
/* V5: send and microphone BESIDE the box, never over the text; the box is
   5 rows, grows to 10, the reader may drag it (min 3 rows) */
.vestlus .vz-inputrow { display: flex; align-items: flex-end; gap: 8px; }
.vestlus .vz-inputrow textarea { flex: 1 1 auto; min-width: 0; height: auto;
  min-height: calc(3 * 1.45em + 20px); max-height: calc(10 * 1.45em + 20px);
  line-height: 1.45; padding: 10px 12px; resize: vertical; border-radius: 12px; }
.vestlus .vz-input .vz-inputrow textarea { height: calc(5 * 1.45em + 20px); min-height: calc(3 * 1.45em + 20px);
  max-height: calc(10 * 1.45em + 20px); resize: vertical; }
.vestlus .vz-inputbtns { display: flex; flex-direction: column; gap: 6px; flex: 0 0 auto; }
.vestlus .vz-inputrow .vestlus-send { position: static; right: auto; bottom: auto; }
.vestlus .vz-inputrow .vestlus-mic { margin-left: 0; }
@media (max-width: 1023px) {
  .vestlus .vz-inputbtns .vestlus-send, .vestlus .vz-inputbtns .vestlus-mic { width: 44px; min-width: 44px; height: 44px; min-height: 44px; }
}
.vestlus .vz-voice-info { display: inline-block; margin-left: 4px; }
.vestlus .vz-voice-info[hidden] { display: none; }

/* ==== Koondjooks 17 A1 / A2 / A3b ====================================== */
/* T9 the ConBRIX mark (brand.md v1.2): glyph + "ConBRIX-i prognoos /
   tõlgendus / analüüs" wherever the figure or the words are ours */
.cbx-mark { display: inline-flex; align-items: center; gap: 5px; font-family: var(--cbx-font-heading);
  font-size: 0.75rem; font-weight: 600; color: var(--steel); letter-spacing: .02em; white-space: nowrap;
  vertical-align: middle; }
.cbx-mark svg { width: 16px; height: 11px; flex: 0 0 auto; }
.k9c > .cbx-mark { display: flex; margin: 2px 0 6px; }
.interp > .cbx-mark { display: flex; margin-bottom: 2px; opacity: .9; }

/* T1 the answer box: at most three lines — number · headline · one cycle
   line · the small number with the mark and the ⓘ */
.ans.ans17 { grid-template-columns: auto 1fr; grid-template-rows: auto auto; row-gap: 4px; }
.ans.ans17 .n { grid-row: 1 / span 2; }
.ans.ans17 .txt { display: flex; flex-direction: column; gap: 2px; }
.ans.ans17 .txt .ans-head { font-size: 1.1875rem; }
.ans.ans17 .ans-cycle { font-size: 0.875rem; font-weight: 600; }
.ans.ans17 .meta { grid-column: 2; display: flex; align-items: center; gap: 10px; font-size: 0.8125rem; }
.ans.ans17 .ans-small { font-weight: 600; }
.ipop .ipop-body dd.more { margin: 0 0 4px; }

/* T3 the readout: fixed cells on ONE line under the chart */
.k9c .readout.ro17 { display: flex; flex-wrap: nowrap; gap: 0; overflow: hidden; white-space: nowrap;
  font-size: 0.8125rem; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
  margin-top: 6px; padding: 4px 0; min-height: 1.6em; }
.k9c .readout.ro17 .ro-c { flex: 1 1 0; min-width: 0; padding: 0 8px; overflow: hidden; text-overflow: ellipsis;
  border-left: 1px solid var(--line); }
.k9c .readout.ro17 .ro-c:first-child { border-left: 0; padding-left: 0; flex: 0 0 auto; color: var(--ink-2); }
.k9c .readout.ro17 .ro-c i { font-style: normal; color: var(--ink-3); margin-right: 5px; }
.k9c .readout.ro17 .ro-c b { font-weight: 700; color: var(--ink); }
.k9c .readout.ro17 .ro-me i, .k9c .readout.ro17 .ro-me b { color: var(--steel); }
.k9c .k9lg { flex-wrap: nowrap; overflow-x: auto; white-space: nowrap; scrollbar-width: thin; }

/* T4 the calendar's "Äritsükkel" row */
.cal .cyc-row td:first-child { font-weight: 600; white-space: nowrap; }
.cal .cyc-row td:first-child .cbx-mark { display: flex; margin-top: 2px; }

/* T5 "Mida jälgida": question (small grey) · our pick (bold name + chip) ·
   "Jälgi:" once, then the indicators (plain name + chip) */
.ind.ind17 .ind-head { display: flex; align-items: center; gap: 8px; margin-bottom: 2px; }
.ind.ind17 .ind-q { margin: 0 0 6px; font-size: 0.75rem; color: var(--ink-3); }
.ind.ind17 .ind-pick .lbl b { font-weight: 700; color: var(--ink); }
.ind.ind17 .ind-watch-lbl { margin: 8px 0 2px; font-size: 0.75rem; color: var(--ink-3); }
.ind.ind17 .ind-watch .lbl { font-weight: 400; }

/* T6 partner table: bold only on the indicator's name */
table.imp.p17 td, table.imp.p17 tr td:first-child, table.imp.p17 .num { font-weight: 400; }
table.imp.p17 td .p17-name { font-weight: 700; }
.imp.p17 tr.grp17 td { font-size: 0.75rem; color: var(--ink-3); font-weight: 400; padding-top: 10px;
  text-transform: none; background: transparent; }

/* T7 the news card: a stripe on the left in the tone of the effect
   (brand.md v1.1 intensity 1) and the small word of what it touches */
.news17 { position: relative; padding-left: 18px; }
.news17::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 4px;
  border-radius: 6px 0 0 6px; background: var(--neu); }
.news17.tone-good::before { background: var(--good); }
.news17.tone-bad::before { background: var(--bad); }
.news17 .news-touch { font-weight: 600; color: var(--ink-2); }
.news17 .news-interp .cbx-mark { display: flex; margin-bottom: 2px; }
@media (max-width: 700px) {
  .ans.ans17 { grid-template-columns: minmax(0, 1fr); }
  .ans.ans17 .n { grid-row: auto; white-space: normal; font-size: 2.25rem; }
  .ans.ans17 .meta { grid-column: 1; flex-wrap: wrap; }
  .ans.ans17 .txt { min-width: 0; }
}

/* =====================================================================
   Koondjooks 18 (app-1.23.2) — tokens only, no new colours or sizes.
   ===================================================================== */

/* ---- K2: the icon rail (1024–1759 px) --------------------------------- */
.rail-toggle { display: none; }
@media (min-width: 1024px) and (max-width: 1759px) {
  .rail-toggle { display: flex; align-items: center; justify-content: center; width: 100%; height: 40px;
                 margin: 0 0 6px; padding: 0; border: 0; border-radius: var(--cbx-radius-sm);
                 background: transparent; color: var(--ink); cursor: pointer; }
  .rail-toggle:hover, .rail-toggle:focus-visible { background: var(--cbx-steel-100); }
  .rail-toggle svg { width: 20px; height: 20px; }
  body .layout > .sidenav.rail-open .rail-toggle { justify-content: flex-start; padding: 0 .7rem; }
  body .layout > .sidenav > a, body .layout > .sidenav > .sidenav-hall { position: relative; }
  /* the label beside the icon: one line, outside the rail, never a layout change */
  body .layout > .sidenav:not(.rail-open) > a:hover .nav-label,
  body .layout > .sidenav:not(.rail-open) > a:focus-visible .nav-label,
  body .layout > .sidenav:not(.rail-open) > .sidenav-hall:hover .nav-label {
    display: block; position: absolute; left: calc(100% + 8px); top: 50%; transform: translateY(-50%);
    white-space: nowrap; overflow-wrap: normal; pointer-events: none; z-index: 80;
    background: var(--ink); color: var(--paper); padding: 4px 10px; border-radius: 6px;
    font-size: 0.8125rem; font-weight: 600; box-shadow: 0 2px 8px var(--k15-shadow); }
  body .layout > .sidenav, body .layout > .sidenav * { transition: none; }
}

/* ---- K4: layers and controls paint ground and text from the tokens ---- */
.menu-toggle-box:checked ~ .layout > .sidenav { background: var(--card); color: var(--ink); }
.menu-toggle-box:checked ~ .layout > .sidenav a, .menu-toggle-box:checked ~ .layout > .sidenav .muted { color: var(--ink); }
.menu-toggle-box:checked ~ .layout > .sidenav a.active { background: var(--cbx-steel-700); color: var(--card); }
body .vestlus { background: var(--bg); color: var(--ink); }
.ipop-body { background: var(--card); color: var(--ink); }
.k9 details.card, .k9 .card { color: var(--ink); }

/* ---- K5: the comparison table — one table, plain weight, short units,
   the state as a chip in the tone the row's stripe carries -------------- */
table.imp.cmp18 { table-layout: fixed; }
table.imp.cmp18 col.c-name { width: 46%; } table.imp.cmp18 col.c-then,
table.imp.cmp18 col.c-now { width: 16%; } table.imp.cmp18 col.c-chg { width: 22%; }
table.imp.cmp18 tr td:first-child, table.imp.cmp18 .num { font-weight: 400; }
table.imp.cmp18 td.num, table.imp.cmp18 th.num { text-align: right; }
table.imp.cmp18 .st18 { margin-left: 8px; vertical-align: 1px; }
table.imp.cmp18 tbody.more18[hidden] { display: none; }
.fold18 { display: inline-flex; align-items: center; gap: 6px; margin: 6px 0 0; padding: 2px 0; border: 0;
          background: none; color: var(--steel); font: inherit; font-size: 0.8125rem; cursor: pointer; }
.fold18::before { content: "▸"; display: inline-block; }
.fold18[aria-expanded="true"]::before { content: "▾"; }
.k9 details.card > summary { cursor: pointer; }
.units18 { margin: 4px 0 0; }
/* the same plain weight wherever a table cell is a figure with its unit */
table.imp .u18 { font-weight: 400; }

/* ---- K6: a section heading is the reader's question — sentence case,
   the heading face, the reading size; the eyebrow style stays only where
   a component asks for one --------------------------------------------- */
.k9 .sec.q18 { font-size: 1.1875rem; letter-spacing: 0; text-transform: none; color: var(--ink);
               margin: 22px 0 6px; line-height: 1.25; }
.k9 .sec-sub { font-size: 0.8125rem; color: var(--ink-3); margin: -2px 0 8px; }
.k9 .tbl-h18 { font-family: var(--cbx-font-heading); font-size: 1rem; font-weight: 600; color: var(--ink);
               margin: 8px 0 2px; }
.k9 .news-empty18 { color: var(--ink-2); }
.k9 .k9src { margin: 4px 0 0; }

/* ---- K7: the year on the x axis — "2026" wide, "’26" narrow ------------ */
.k9c svg tspan.ys, .stages .ax .ys { display: none; }
@media (max-width: 1023px) {
  .k9c svg tspan.yl, .stages .ax .yl { display: none; }
  .k9c svg tspan.ys, .stages .ax .ys { display: inline; }
}
.k9c svg text.xt[data-thin] { visibility: hidden; }

/* ---- K3: the chat's privacy note for a client — a small plain link ----- */
.vestlus .vz-llm-link { font-size: 0.75rem; color: var(--ink-3); text-decoration: underline; }

/* =====================================================================
   Koondjooks 19 (app-1.25.0) — the language switch "ET | EN" in the header
   ===================================================================== */
form.lang-switch { display: inline-flex; align-items: center; gap: 4px; margin: 0; white-space: nowrap; }
form.lang-switch button { margin: 0; padding: .1rem .4rem; background: transparent; color: var(--hdr-ink);
                          border: 1px solid transparent; border-radius: var(--cbx-radius-sm);
                          font-size: 0.8125rem; font-weight: 600; cursor: pointer; }
form.lang-switch button[aria-pressed="true"] { border-color: var(--hdr-line); background: var(--hdr-press); }
form.lang-switch .lang-sep { color: var(--hdr-line); }
form.lang-switch.el-lang button { color: var(--cbx-ink); }
form.lang-switch.el-lang button[aria-pressed="true"] { border-color: var(--line); background: var(--steel-soft); }
form.lang-switch.el-lang .lang-sep { color: var(--ink-3); }

/* =====================================================================
   Koondjooks 20 (app-1.25.1) — the phone. Tokens only.
   ===================================================================== */

/* ---- V9: the site header is ALWAYS the full width of the viewport ----
   (Virgo's Samsung picture: the dark block covered ~360 px, white to the
   right of it. The header is a flex item of the body, so it is as wide as
   the layout viewport — and anything wider than that (an element that
   overflows to the right at a narrow width and a large text size) shows
   as white beside it once the phone zooms out.) The header never follows
   its content's width; the viewport never scrolls sideways on a phone
   layout; the 1024–1059 window — where the rail block (64 · 16 · 960 =
   1040 px) did not fit and the page was 16 px wider than the screen — now
   lets the content column give way. */
header.site { position: relative; width: 100%; min-width: 100%; max-width: 100%; box-sizing: border-box; left: 0; right: 0; }
header.site nav { min-width: 0; }
/* A phone browser widens its layout viewport to the widest content and
   zooms out to show it — `overflow-x: hidden` on the root does not stop
   that (measured: a 1024 px page with a 51 px overflow became a 1075 px
   viewport, the header stayed 1024). The content column is clipped at its
   own edge instead (`clip`: no scroll container, the sticky bars keep
   working), so the document is never wider than the header. */
@media (max-width: 1023.98px) { html { overflow-x: hidden; } body .layout { overflow-x: clip; } }
@media (pointer: coarse) { html[data-viewport="fixed"] { overflow-x: hidden; } html[data-viewport="fixed"] body .layout { overflow-x: clip; } }
/* the segment cards' two tags: a long single word (125 % text) wrapped
   inside the tag instead of pushing the grid past the card */
.seg .r .v { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
.seg .tag { overflow-wrap: anywhere; }
@media (min-width: 1024px) and (max-width: 1059.98px) {
  body .layout { max-width: 100%; }
  body .layout > .with-vestlus { flex: 1 1 0; min-width: 0; }
  body .with-vestlus.has-vestlus, html[data-chat-layout="wide"] body .with-vestlus.has-vestlus { grid-template-columns: minmax(0, 1fr); }
  body .with-vestlus:not(.has-vestlus) { width: auto; }
  body .with-vestlus > main, body .with-vestlus:not(.has-vestlus) > main, body .with-vestlus:not(.has-vestlus) > main.narrow,
  html[data-chat-layout="wide"] body .with-vestlus.has-vestlus > main { width: 100%; max-width: var(--col-main); }
}

/* ---- V10: the company card — three identical figure tiles ------------
   label (small caps) · value (large) · source line (grey, ONE line, cut
   with an ellipsis rather than wrapped; the full source name in `title`)
   in a grid of equal columns: beside the name on a wide screen, a full
   row of three (>= 600 px) under it in a narrow window, three tiles one
   under the other (< 600 px) at phone width, all the same height. The
   name line wraps naturally; the business-line select and "muuda" stay
   on one line (the caption moves above them at phone width). */
.hdr { grid-template-columns: 44px minmax(0, 1fr) auto; }
.hdr > div { min-width: 0; }
.hdr .sub { overflow-wrap: anywhere; }
.hdr .stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; align-items: stretch; min-width: 0; }
.hdr .stat { min-width: 0; }
.hdr .stat .v { white-space: nowrap; }
.hdr .stat .s { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.hdr .hdr-form { display: flex; flex-wrap: nowrap; align-items: center; gap: 6px; margin: 0; min-width: 0; }
.hdr .hdr-form-l { flex: 0 0 auto; }
.hdr .hdr-form-row { display: inline-flex; align-items: center; gap: 6px; min-width: 0; }
.hdr .hdr-form select { min-width: 0; }
.hdr .hdr-form .cbx-btn-sm { margin: 0; flex: 0 0 auto; }
@media (max-width: 900px) {
  .hdr { grid-template-columns: 44px minmax(0, 1fr); }
  .hdr .stats { grid-column: 1 / -1; }
}
@media (max-width: 599.98px) {
  .hdr .stats { grid-template-columns: 1fr; grid-auto-rows: 1fr; gap: 8px; }
  .hdr .stat { border-top: 1px solid var(--line); padding-top: 6px; }
  .hdr .hdr-form { flex-wrap: wrap; gap: 2px 6px; }
  .hdr .hdr-form-l { flex: 1 1 100%; }
  .hdr .hdr-form-row { flex: 1 1 100%; display: flex; }
  .hdr .hdr-form select { flex: 1 1 auto; width: auto; }
}
/* the "Mida jälgida?" chips never leave the card: the name may wrap, the
   chip is cut before it crosses the card's edge, and at phone width the
   chip sits UNDER the indicator's name on its own line */
.hdr2 .ind .row { flex-wrap: wrap; }
.hdr2 .ind .row .lbl { min-width: 0; flex: 1 1 auto; overflow-wrap: anywhere; }
.hdr2 .ind .row .val { flex: 0 1 auto; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
@media (max-width: 599.98px) {
  .hdr2 .ind .row { flex-direction: column; align-items: flex-start; gap: 4px; }
  .hdr2 .ind .row .val { white-space: normal; line-height: 1.25; }
}

/* ---- V11: the news card is never wider than the screen -------------- */
.news-boxes .news-box, .el-news-card { min-width: 0; max-width: 100%; overflow-wrap: anywhere; box-sizing: border-box; }
.news-boxes .news-title, .news-boxes .news-interp, .el-news-card .el-uudis-title, .el-news-card .news-interp { min-width: 0; overflow-wrap: anywhere; }
.k9 .grid3.news-boxes { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 900px) { .k9 .grid3.news-boxes { grid-template-columns: minmax(0, 1fr); } }
/* the chart answers a touch as it answers the cursor: a finger moving
   sideways on it moves the reading line, the page still scrolls up/down */
.k9c svg[data-k9chart] { touch-action: pan-y; }

/* ---- V11: touch targets in the fixed 1024 px view ---------------------
   On a phone the 1024 px layout is shown at about 0.4 scale, so a 44 px
   control is 18 px under the finger. k9.js measures the scale once
   (--touch-k = 1 / visualViewport.scale) and ONLY these controls grow:
   the menu buttons, the level tabs, "Vestlus", the language switch, the
   chat's chips and the menu entries — >= 44 px on screen after the
   scale. A fine pointer (a laptop) never sees this block. */
@media (pointer: coarse) {
  html[data-viewport="fixed"] { --tk: var(--touch-k, 2.5); }
  html[data-viewport="fixed"] .menu-toggle { display: inline-flex; align-items: center; justify-content: center; min-width: calc(44px * var(--tk)); min-height: calc(44px * var(--tk)); font-size: calc(1.3rem * var(--tk)); margin-right: 0; }
  html[data-viewport="fixed"] .rail-toggle { height: auto; min-height: calc(44px * var(--tk)); }
  html[data-viewport="fixed"] .rail-toggle svg { width: calc(20px * var(--tk)); height: calc(20px * var(--tk)); }
  html[data-viewport="fixed"] .rail-toggle .rail-close-t { font-size: calc(0.875rem * var(--tk)); }
  html[data-viewport="fixed"] .pagebar .lvl a, html[data-viewport="fixed"] .pagebar .lvl span { display: inline-flex; align-items: center; min-height: calc(44px * var(--tk)); padding: 0 calc(12px * var(--tk)); font-size: calc(0.7812rem * var(--tk)); }
  html[data-viewport="fixed"] .pagebar { min-height: calc(44px * var(--tk)); }
  /* the grown tabs take their own row (the phone page bar's F5 order:
     name + chip, then the tabs in one scrolling line) — a nowrap row of
     three 110 px tabs overflowed the 944 px column and widened the page */
  html[data-viewport="fixed"] .pagebar { flex-wrap: wrap; gap: 8px 12px; }
  html[data-viewport="fixed"] .pagebar .k9-h1 { order: 1; flex: 1 1 auto; min-width: 0; }
  html[data-viewport="fixed"] .pagebar .pagebar-chip { order: 2; margin-left: auto; max-width: 50%; }
  html[data-viewport="fixed"] .pagebar .lvl { order: 3; flex: 0 0 100%; display: flex; flex-wrap: nowrap; overflow-x: auto; gap: 6px; white-space: nowrap; }
  html[data-viewport="fixed"] .pagebar .lvl a { flex: 0 0 auto; }
  html[data-viewport="fixed"] .vestlus-tab { min-width: calc(44px * var(--tk)); min-height: calc(44px * var(--tk)); font-size: calc(1rem * var(--tk)); }
  html[data-viewport="fixed"] form.lang-switch button { min-width: calc(44px * var(--tk)); min-height: calc(44px * var(--tk)); font-size: calc(0.8125rem * var(--tk)); }
  html[data-viewport="fixed"] .vestlus .vz-next .chip, html[data-viewport="fixed"] .vestlus .vestlus-chips .chip,
  html[data-viewport="fixed"] .vestlus .vz-start-card { min-height: calc(44px * var(--tk)); font-size: calc(0.8125rem * var(--tk)); }
  html[data-viewport="fixed"] .vestlus .vz-next .chip .chip-t { max-height: none; -webkit-line-clamp: 3; }
  html[data-viewport="fixed"] body .layout > .sidenav > a, html[data-viewport="fixed"] body .layout > .sidenav > .sidenav-hall,
  html[data-viewport="fixed"] body .layout > .sidenav .menu-close { min-height: calc(44px * var(--tk)); }
  html[data-viewport="fixed"] body .layout > .sidenav.rail-open > a, html[data-viewport="fixed"] body .layout > .sidenav.rail-open > .sidenav-hall,
  html[data-viewport="fixed"] body .layout > .sidenav.rail-open .sidenav-account { font-size: calc(1rem * var(--tk)); }
  html[data-viewport="fixed"] .sidenav .nav-ico { width: calc(24px * var(--tk)); height: calc(24px * var(--tk)); flex-basis: calc(24px * var(--tk)); }
  html[data-viewport="fixed"] .sidenav .nav-ico svg { width: calc(20px * var(--tk)); height: calc(20px * var(--tk)); }
}

/* ---- V12: the menu drawer ----------------------------------------------
   One state, two forms: the phone drawer (< 1024 px) is the checkbox —
   so it opens and closes without a script — and the icon rail's layer
   (1024–1759 px, koondjooks 18 K2) is `rail-open`; k9.js drives both
   through the same controller and marks <html class="menu-open">.
   (a) the drawer starts UNDER the header (top = --header-h, measured by
       k9.js; 56 px without it), the header stays visible and above the
       scrim, the ☰ turns into a ✕ — the same control closes;
   (b) the drawer's own "✕ Sulge" at its top; Esc, a click on the scrim or
       anywhere outside, a menu choice and the browser's back button
       close it (k9.js);
   (c) a scrim behind the drawer; the drawer is never wider than the
       screen and never above the header;
   (d) "Vestlus" in the menu wherever the chat is a drawer or a sheet
       (< 1500 px) — the same as the page's "Vestlus" tab;
   (e) every entry is >= 44 px tall. */
.menu-ico-close, .menu-close-t { display: none; }
.menu-toggle .menu-ico { line-height: 1; }
.menu-toggle .menu-ico-open { display: inline-block; }
.menu-toggle .menu-ico-close { display: none; }      /* one glyph at a time */
html.menu-open .menu-toggle .menu-ico-open, .menu-toggle-box:checked ~ header.site .menu-toggle .menu-ico-open { display: none; }
html.menu-open .menu-toggle .menu-ico-close, .menu-toggle-box:checked ~ header.site .menu-toggle .menu-ico-close { display: inline-block; }
.menu-toggle { min-width: 44px; min-height: 44px; display: none; align-items: center; justify-content: center; margin: 0 .2rem 0 -.4rem; }
@media (max-width: 1199.98px) { .menu-toggle { display: inline-flex; } }
.menu-toggle:focus-visible { outline: 2px solid var(--cbx-paper); outline-offset: 2px; }
body .layout > .sidenav.rail-open .rail-toggle .menu-ico-open { display: none; }
body .layout > .sidenav.rail-open .rail-toggle .menu-ico-close { display: inline-block; }
body .layout > .sidenav.rail-open .rail-toggle .rail-close-t { display: inline; margin-left: 8px; font-weight: 600; font-size: 0.875rem; }
/* the header's height without the script (k9.js measures the real one
   into the same variable, inline on <html>, which wins): one row of the
   header is ~3.1rem; below 480 px it wraps into two rows (conbic.css) */
:root { --header-h: 3.1rem; }
@media (max-width: 480px) { :root { --header-h: 5.7rem; } }
/* the scrim: fixed, from the header's lower edge down, under the drawer */
.menu-scrim { display: none; position: fixed; left: 0; right: 0; bottom: 0; top: var(--header-h, 56px); z-index: 69; background: var(--k16-scrim); cursor: default; margin: 0; }
.menu-toggle-box:checked ~ .menu-scrim, html.menu-open .menu-scrim { display: block; }
/* the header stays above the scrim while the menu is open (not otherwise:
   the chat sheet slides over the header when the menu is closed) */
.menu-toggle-box:checked ~ header.site, html.menu-open header.site { z-index: 71; }
/* the drawer's own close, top right of the drawer */
.menu-close { display: none; }
.menu-toggle-box:checked ~ .layout > .sidenav .menu-close { display: inline-flex; align-items: center; gap: 6px; align-self: flex-end;
  min-height: 44px; min-width: 44px; padding: 0 .7rem; margin: 0 0 4px; color: var(--ink); font-weight: 600; font-size: 0.875rem;
  cursor: pointer; border-radius: var(--cbx-radius-sm); }
.menu-toggle-box:checked ~ .layout > .sidenav .menu-close .menu-close-t { display: inline; }
.menu-close:hover, .menu-close:focus-visible { background: var(--cbx-steel-100); }
/* the drawer below the hamburger width (1200 px): under the header, the
   screen's height, its own scroll, never wider than the screen, the full
   entries with their names, each >= 44 px */
@media (max-width: 1199.98px) {
  /* align-self: stretch — the column's `align-self: flex-start` (koondjooks
     15) would otherwise make this fixed box (top + bottom set) shrink to
     its content instead of reaching the bottom of the screen */
  .menu-toggle-box:checked ~ .layout > .sidenav { display: flex; flex-direction: column; position: fixed; top: var(--header-h, 56px); left: 0; bottom: 0;
    width: var(--col-menu); min-width: 0; max-width: min(var(--col-menu), 100vw); height: auto; max-height: none; z-index: 70; margin: 0; flex: none;
    align-self: stretch; justify-content: flex-start;
    overflow-y: auto; overflow-x: hidden; padding: 8px 8px 16px; box-shadow: var(--shadow-3); background: var(--card); overflow-wrap: normal; }
  .menu-toggle-box:checked ~ .layout > .sidenav .nav-label { display: inline; white-space: normal; }
  .menu-toggle-box:checked ~ .layout > .sidenav .sidenav-account { display: flex; }
  .menu-toggle-box:checked ~ .layout > .sidenav .sidenav-cta { display: block; }
  .menu-toggle-box:checked ~ .layout > .sidenav .rail-toggle { display: none; }
  .menu-toggle-box:checked ~ .layout > .sidenav > a, .menu-toggle-box:checked ~ .layout > .sidenav > .sidenav-hall {
    display: flex; justify-content: flex-start; align-items: center; min-height: 44px; padding: .55rem .7rem; }
  .menu-toggle-box:checked ~ .layout > .sidenav .nav-ico { margin-right: 10px; }
}
/* the rail's layer: the same entry height, and ABOVE the scrim (the rail's
   own z-index 30 of koondjooks 15 would leave it under the scrim, its
   entries unclickable) */
body .layout > .sidenav.rail-open { z-index: 70; }
body .layout > .sidenav.rail-open > a, body .layout > .sidenav.rail-open > .sidenav-hall { min-height: 44px; }
/* (d) "Vestlus" in the menu only where the chat is behind a tab */
.sidenav .sidenav-vestlus { display: none; }
@media (max-width: 1499.98px) { .sidenav .sidenav-vestlus { display: flex; } }

/* ---- LISA L1 (koondjooks 20 V13): the market page's news in three
   equal columns, compact cards of one height per row ------------------- */
.k9 .grid3.news-boxes.news-cols { grid-template-columns: repeat(3, minmax(0, 1fr)); align-items: stretch; }
.news-cols .news-box { gap: 4px; padding-top: 10px; padding-bottom: 10px; }
.news-cols .news-meta { font-size: 0.75rem; color: var(--ink-3); line-height: 1.3; }
.news-cols .news-title { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;
  line-clamp: 2; overflow: hidden; line-height: 1.3; }
.news-cols .news-interp > span:last-child { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3;
  line-clamp: 3; overflow: hidden; line-height: 1.4; }
@media (max-width: 899.98px) { .k9 .grid3.news-boxes.news-cols { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 699.98px) { .k9 .grid3.news-boxes.news-cols { grid-template-columns: minmax(0, 1fr); } }

/* EELARVEPROFIIL 1.30.2: the EVS names line under the A2 chart wraps */
.k9c .k9lg.bp-legend-text { display: block; white-space: normal; overflow: visible; }

/* ROLLID KORREKTUUR (app 1.33.0): the one basket component (_korv.html) —
   horizon columns, the parts as rows with the edge by rank (heat-3/2/1),
   one legend row, the interpretation box with a heat-3 edge; the merged
   one-row chart legend (phase swatches · line swatches) and its separator.
   Tokens only; one column under 640 px. */
.korv-head { margin: 2px 0 6px; }
.korv-cols { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-top: 6px; }
.korv-cols.n1 { grid-template-columns: minmax(0, 1fr); }
.korv-cols.n3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.korv-col { border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px; min-width: 0; background: var(--card); }
.korv-col.main { border-color: var(--steel); background: var(--neu-soft); }
.korv-col .hk { font-size: 0.6875rem; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-3); font-weight: 600; }
.korv-col .hv { font-family: var(--cbx-font-heading); font-size: 2rem; font-weight: 700; line-height: 1.05; margin-top: 2px; color: var(--ink); }
.korv-col .hv small { font-family: var(--cbx-font-body); font-size: 0.8125rem; font-weight: 600; color: var(--ink-2); margin-left: 6px; }
.korv-col .hs { font-size: 0.75rem; color: var(--ink-2); margin-top: 2px; }
.korv-parts { display: flex; flex-direction: column; gap: 5px; margin-top: 10px; }
.korv-part { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 10px; align-items: baseline; padding: 5px 8px; border-radius: 6px; border-left: 5px solid var(--line); background: var(--card); font-size: 0.8125rem; min-width: 0; }
.korv-part.heat-3 { border-left-color: var(--heat-3); }
.korv-part.heat-2 { border-left-color: var(--heat-2); }
.korv-part.heat-1 { border-left-color: var(--heat-1); }
.korv-part .pn { font-weight: 600; min-width: 0; }
.korv-part .pn small { display: block; font-weight: 400; color: var(--ink-3); font-size: 0.6875rem; }
.korv-part .pp { color: var(--ink-2); font-family: var(--cbx-font-heading); font-size: 0.9375rem; white-space: nowrap; }
.korv-part .pm { font-family: var(--cbx-font-heading); font-size: 1.0625rem; font-weight: 700; min-width: 64px; text-align: right; white-space: nowrap; }
.korv-part .pm small { display: block; font-family: var(--cbx-font-body); font-size: 0.6875rem; font-weight: 400; color: var(--ink-3); }
.k9c .k9lg.korv-legend i.sw { height: 10px; }
.interp.korv-interp { margin-top: 10px; }
.interp.korv-interp::before { background: var(--heat-3); }
.interp.korv-interp .korv-largest { font-size: 0.75rem; color: var(--ink-2); margin-left: 4px; }
.interp.korv-interp b { color: var(--ink); margin-top: 4px; }
.korv-points { margin: 4px 0 0; padding-left: 1.1em; font-size: 0.8125rem; color: var(--ink); }
.korv-points li { margin: 2px 0; }
.korv-foot { margin-top: 8px; display: flex; gap: 12px; align-items: baseline; flex-wrap: wrap; }
.k9c .k9lg i.sep { width: 1px; height: 12px; background: var(--line); margin: 0 4px; vertical-align: middle; }
/* the merged legend and the basket legend wrap instead of scrolling (the
   general .k9lg rule keeps one scrolling line) */
.k9c .k9lg.one-row, .k9c .k9lg.korv-legend { flex-wrap: wrap; gap: 4px 12px; white-space: normal; overflow: visible; }
@media (max-width: 640px) {
  .korv-cols, .korv-cols.n3 { grid-template-columns: 1fr; }
  .korv-col .hv { font-size: 1.75rem; }
}

/* KORREKTUUR 2 (app 1.34.0): „seisuga" beside the chart title; the 100 line
   emphasised on an index axis; the today row in rows of full names (3 per row,
   2 per row for four lines, one per row on a phone); the interpretation box
   names its line; the one legend row; the input-price interpretation full
   width; the partner page — the figure tiles in a grid, the comparison table
   that fits its width (cards on a phone), the factors in three tiers with a
   timeline; the sources block. Tokens only. */
.k9c h4 .asof { font-weight: 400; font-size: 0.75rem; letter-spacing: 0; text-transform: none; color: var(--ink-3); margin-left: 6px; white-space: nowrap; }
.k9c svg .gr.base { stroke: var(--ink-3); stroke-width: 1.4; }
.k9c .readout.ro17 { flex-wrap: wrap; white-space: normal; overflow: visible; row-gap: 2px; }
.k9c .readout.ro17 .ro-c { flex: 1 1 30%; min-width: 0; overflow: visible; text-overflow: clip; white-space: normal; border-left: 1px solid var(--line); }
.k9c .readout.ro17 .ro-c.ro-p { flex: 1 1 100%; border-left: 0; padding-left: 0; }
.k9c .readout.ro17.n4 .ro-c { flex-basis: 45%; }
.k9c .readout.ro17.n4 .ro-c.ro-p { flex-basis: 100%; }
.interp .interp-who { display: block; font-size: 0.75rem; letter-spacing: .02em; color: var(--ink-3); margin: 2px 0; }
/* the employment today row: the label + five roles = two rows of three */
.ip-today.emp-today { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ip-boxes.one { grid-template-columns: 1fr; }
.segments-link { margin: 14px 0 0; }
.segments-link a { color: var(--steel); font-weight: 600; text-decoration: none; }
/* partner header tiles (p 14): the ettevote `stats` grid carries the same three tiles */
.hdr .stats .kpi .v { font-size: 1.25rem; }
/* comparison table (p 13): fixed columns, the range text under the bar, cards on a phone */
table.imp.p29 { table-layout: fixed; width: 100%; }
table.imp.p29 th:nth-child(1) { width: 30%; } table.imp.p29 th:nth-child(2) { width: 15%; }
table.imp.p29 th:nth-child(3) { width: 25%; } table.imp.p29 th:nth-child(4) { width: 30%; }
table.imp.p29 td { white-space: normal; vertical-align: top; overflow-wrap: anywhere; }
table.imp.p29 .num { white-space: normal; }
table.imp.p29 .dumbbell { min-width: 0; margin: 6px 0 0; }
table.imp.p29 .rng-lbl { display: block; font-size: 0.6875rem; color: var(--ink-3); line-height: 1.25; }
table.imp.p29 td.meaning .onset { display: block; margin-top: 3px; }
table.imp.p29 td.meaning .tag { white-space: normal; }
/* factors in three tiers (p 16) */
.pf29-crit { margin: 0 0 8px; padding: 8px 12px; border-left: 5px solid var(--heat-3); background: var(--heat-1); border-radius: 6px; font-size: 0.8125rem; display: flex; flex-wrap: wrap; gap: 4px 14px; align-items: baseline; }
.pf29-crit b { font-family: var(--cbx-font-heading); font-size: 0.9375rem; }
.pf29-crit .pf29-thesis { flex: 1 1 320px; min-width: 0; }
table.imp.pf29 tr.tier-kriitiline td:first-child { border-color: var(--heat-3); }
table.imp.pf29 tr.tier-oluline td:first-child { border-color: var(--heat-2); }
table.imp.pf29 tr.tier-soodne td:first-child { border-color: var(--good); }
table.imp.pf29 .tag.tier.bad { background: var(--heat-3); color: var(--ink); }
table.imp.pf29 .tag.tier.neu { background: var(--heat-2); color: var(--ink); }
table.imp.pf29 .tl { display: grid; grid-template-columns: 1fr 1fr 2fr; gap: 2px; height: 10px; max-width: 220px; min-width: 120px; }
table.imp.pf29 .tl i { display: block; border-radius: 2px; background: var(--neu-soft); opacity: .5; }
table.imp.pf29 .tl i.kriitiline { background: var(--heat-3); } table.imp.pf29 .tl i.oluline { background: var(--heat-2); } table.imp.pf29 .tl i.soodne { background: var(--good); }
table.imp.pf29 .tl i.peak { opacity: 1; }
table.imp.pf29 .tl-lbl { display: grid; grid-template-columns: 1fr 1fr 2fr auto; font-size: 0.6875rem; color: var(--ink-3); max-width: 220px; margin-top: 2px; }
table.imp.pf29 td.meaning b { display: block; }
table.imp.pf29 td { vertical-align: top; }
@media (max-width: 640px) {
  .k9c .readout.ro17 .ro-c, .k9c .readout.ro17.n4 .ro-c { flex-basis: 100%; border-left: 0; padding-left: 0; }
  .ip-today, .emp-today { grid-template-columns: 1fr; }
  .ip-today > div { border-right: 0; border-bottom: 1px solid var(--line); padding: 4px 0; }
  .ip-today > div:last-child { border-bottom: 0; }
  table.imp.p29, table.imp.p29 tbody { display: block; }
  table.imp.p29 tr.p29-head { display: none; }
  table.imp.p29 tr { display: grid; grid-template-columns: 1fr 1fr; gap: 2px 10px; border: 1px solid var(--line); border-radius: 6px; padding: 6px 8px; margin: 6px 0; }
  table.imp.p29 tr td { display: block; border: 0; border-radius: 0; padding: 2px 0; background: transparent; }
  table.imp.p29 tr td:first-child, table.imp.p29 tr td.meaning { grid-column: 1 / -1; }
  table.imp.p29 td[data-l]::before { content: attr(data-l); display: block; font-size: 0.6875rem; letter-spacing: .06em; text-transform: uppercase; color: var(--ink-3); }
  table.imp.p29 tr.grp17 { display: block; border: 0; padding: 8px 0 0; margin: 0; }
  table.imp.pf29 .tl, table.imp.pf29 .tl-lbl { max-width: none; }
}

/* ANDMEKALENDER A1 (app 1.34.9): the „Uued andmed" bar on Turuülevaade and
   the „uuenes" mark on an updated card — tokens only (K9 A1). */
.k9 .uued { margin: 4px 0 14px; }
.k9 .uued-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px; }
.k9 .uued-card { display: flex; flex-direction: column; gap: 4px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--card); color: var(--ink); text-decoration: none; }
.k9 .uued-card:hover .uued-title { text-decoration: underline; }
.k9 .uued-stamp { font-size: .75rem; font-weight: 700; letter-spacing: .06em; color: var(--steel); }
.k9 .uued-title { font-family: var(--cbx-font-heading); font-size: .9375rem; font-weight: 600; line-height: 1.2; }
.k9 .uued-value { font-size: 1.25rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.k9 .uued-change { font-size: .875rem; font-weight: 500; color: var(--ink-2); }
.k9 .uued-sentence { font-size: .8125rem; line-height: 1.4; color: var(--ink-2); }
.k9 .uued-src { font-size: .75rem; color: var(--ink-3); }
.k9 .uuenes { display: inline-block; margin-left: 6px; font-size: .75rem; font-weight: 600; letter-spacing: .02em; color: var(--steel); white-space: nowrap; }
@media (max-width: 1100px) { .k9 .uued-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 600px) { .k9 .uued-grid { grid-template-columns: 1fr; } }
