/* Cadastre — the app's own parts, and the widget.
   Header, card, tabs, bar, gutter, one left edge: os-app.css. ⛔ Do not redraw them.

   Scope is `.osApp.osCad` — the app root, which the pane always carries — so
   the app draws the same on the Work OS home and in a thread. The widget rules
   at the end keep the thread scope on purpose: the widget lives IN the
   conversation, not in the pane.

   ⚡ Clay, through tokens only. The world's tokens (--cream, --cream2,
   --clay-mint, --clay-peach, --lav, --lift…) are declared by work-clay.css;
   every use carries a token fallback so the same sheet still draws on a
   surface the skin has not reached. ⛔ No hex, no prefers-color-scheme block,
   no font import — one design, and dark is closed.

   Three things here exist in no other app and are why this sheet exists:
     the OBJECT PLATE (.osCadPlate / .osCadPlateSvg) — the boundary drawn small;
     the TIMELINE (.osCadTl / .osCadTlSvg) — two channels, two shapes, one axis;
     the LENS CHIPS (.osCadLenses / .osCadLens) — five views, one object. */

/* ⛔ The crumb is one word and never two lines (measured on Registry at 390). */
.osApp.osCad .rhTop .crumb{white-space:nowrap;flex:none}
/* the subject line takes programmatic focus when an object opens so a screen
   reader announces it; it is not a control and draws no ring for that */
.osApp.osCad .rhName:focus{outline:none}

/* ── the search: one field, one verb ───────────────────────────────────── */
.osApp.osCad .osCadQ{display:flex;align-items:center;gap:9px;flex:1 1 auto;min-width:0;position:relative}
.osApp.osCad .osAppBar{padding:16px 18px 6px}
.osApp.osCad .osAppBar input{
  padding:12px 18px;font:500 15px/1.4 var(--body);
  background:var(--cream,var(--surf));box-shadow:var(--lift,none)}
.osApp.osCad .osAppBar input:focus{
  background:var(--cream,var(--surf2));border-color:var(--violet,var(--line2));
  box-shadow:var(--lift,none),0 0 0 3px var(--fill-2,transparent)}
.osApp.osCad .osAppBar .go{padding:11px 20px;font-weight:700;box-shadow:var(--clay,none)}
/* type-ahead under the field while an object is open */
.osApp.osCad .osCadSug{
  position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:5;
  border:0;border-radius:var(--r-s,12px);background:var(--panel,var(--surf));
  box-shadow:var(--lift-2,var(--lift));padding:6px;max-height:50vh;overflow:auto;
  display:flex;flex-direction:column;gap:4px}
.osApp.osCad .osCadSug .row.osCadHit{box-shadow:none;background:transparent}
.osApp.osCad .osCadSug .row.osCadHit:hover{background:var(--surf);transform:none}

/* ── the welcome: the empty state says what the cadastre is FOR ────────── */
.osApp.osCad .osCadWelcome{
  display:flex;flex-direction:column;align-items:center;text-align:center;
  padding:26px 20px 22px;gap:8px}
.osApp.osCad .osCadWelcome img{width:84px;height:84px;display:block;margin-bottom:4px}
.osApp.osCad .osCadWelcome h2{
  margin:4px 0 0;font:800 21px/1.2 var(--disp,var(--osDisp));color:var(--ink);letter-spacing:-.01em}
.osApp.osCad .osCadWelcome p{margin:0;max-width:52ch;font:400 13.5px/1.6 var(--body);color:var(--muted)}
.osApp.osCad .osCadWelcome .hint{margin-top:6px;font:400 11.5px var(--osMono);color:var(--muted)}

/* ── results: the shared list, the kind as a pill on the right ─────────── */
.osApp.osCad .osAppList .row.osCadHit{
  padding:11px 14px 11px 16px;background:var(--cream,transparent);
  border:0;box-shadow:var(--lift,none);border-radius:var(--r-s,12px);min-height:44px}
.osApp.osCad .osAppList .row.osCadHit:hover{background:var(--cream2,var(--surf));transform:translateY(-1px)}
.osApp.osCad .osAppList .row.osCadHit:focus-visible{outline:2px solid var(--violet);outline-offset:2px}
.osApp.osCad .osCadHitTx{min-width:0;display:block}
.osApp.osCad .osCadHit .t{font:700 14px/1.35 var(--disp,var(--osDisp))}
.osApp.osCad .osCadHit .s{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.osApp.osCad .osCadKind{
  flex:none;padding:4px 11px;border-radius:999px;font:700 11px/1.3 var(--body);letter-spacing:.02em;
  background:var(--lav2,var(--surf2));color:var(--ink)}
.osApp.osCad .osCadHit.addr .osCadKind{background:var(--surf2);color:var(--muted)}
.osApp.osCad .osCadCaveat{margin:12px 0 0;max-width:68ch;font:400 11.5px/1.55 var(--body);color:var(--muted)}
.osApp.osCad .osAppEmpty+.osCadCaveat{margin:0 auto;text-align:center;padding-bottom:10px}

/* ── the front page: five clay tiles, then the freshness strip ─────────── */
.osApp.osCad .osCadHero{
  display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;margin:8px 0 12px}
.osApp.osCad .osCadTile{
  border:0;border-radius:var(--r-s,12px);padding:14px 16px 13px;min-width:0;
  background:var(--cream2,var(--surf));box-shadow:var(--lift,none)}
.osApp.osCad .osCadTile.mid{background:var(--surf)}
.osApp.osCad .osCadTile .lab{
  font:700 9.5px/1 var(--body);letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin:0 0 8px}
.osApp.osCad .osCadTile .big{
  font:800 18px/1.25 var(--disp,var(--osDisp));color:var(--ink);letter-spacing:-.01em;overflow-wrap:anywhere}
.osApp.osCad .osCadTile .big .abs{font:600 13px/1.35 var(--body);color:var(--amber)}
.osApp.osCad .osCadTile .big .abs.ok{color:var(--mint)}
.osApp.osCad .osCadTile .sub{margin-top:6px;font:400 11px/1.45 var(--osMono);color:var(--muted);overflow-wrap:anywhere}
/* ⛔ THE FRESHNESS SENTENCE SITS UNDER THE NUMBERS IT QUALIFIES. It is the
   point of this app: the whole Latvian corpus is a frozen bootstrap and no
   dataset has ever been imported from the source. Amber text on cream, the
   verdict word in bold — word AND colour, never colour alone. */
.osApp.osCad .osCadFresh{
  display:flex;gap:12px;align-items:baseline;flex-wrap:wrap;
  margin:0 0 6px;padding:11px 15px;border-radius:var(--r-s,12px);
  background:var(--clay-peach,var(--surf));color:var(--ink);font:400 12.5px/1.5 var(--body)}
.osApp.osCad .osCadFresh b{flex:none;font:700 11px/1.5 var(--osMono);letter-spacing:.04em;text-transform:uppercase;color:var(--amber)}
.osApp.osCad .osCadFresh[data-verdict="fresh"]{background:var(--clay-mint,var(--surf))}
.osApp.osCad .osCadFresh[data-verdict="fresh"] b{color:var(--mint)}

/* ── the object: the plate beside the tiles ────────────────────────────── */
.osApp.osCad .osCadTop{display:grid;grid-template-columns:232px minmax(0,1fr);gap:16px;align-items:stretch;margin:4px 0 14px}
.osApp.osCad .osCadTiles{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;min-width:0}
.osApp.osCad .osCadTiles .osCadTile{display:flex;flex-direction:column;justify-content:center}
.osApp.osCad .osCadTiles .osCadTile .big{font-size:16px}

/* ═══ THE OBJECT PLATE ═══════════════════════════════════════════════════
   The boundary on a cream plate: land in clay mint, a forest gets a hatch
   over the same fill (a second channel, not a second colour), the edge in
   ink, the centroid a dot, north and a measured scale in the corners.
   Absence is a hatched frame with its reason written in it. */
.osApp.osCad .osCadPlate{
  border-radius:var(--r-s,12px);background:var(--cream,var(--panel));box-shadow:var(--lift,none);
  padding:6px;display:flex;align-items:center;justify-content:center;min-height:180px}
.osApp.osCad .osCadPlate.lg{min-height:0;padding:12px;max-width:620px;margin:0 0 14px}
.osApp.osCad .osCadPlateSvg{display:block;width:100%;height:auto;max-height:100%;overflow:visible}
/* ⛔ …except the absent plate, whose reason is prose and must stay inside its
   own frame rather than painting across the tiles beside it. */
.osApp.osCad .osCadPlateSvg.absent{overflow:hidden}
.osApp.osCad .osCadPlateSvg .land{fill:var(--clay-mint,var(--surf2));stroke:none}
.osApp.osCad .osCadPlateSvg.building .land{fill:var(--lav,var(--surf2))}
.osApp.osCad .osCadPlateSvg .edge{fill:none;stroke:var(--ink);stroke-width:1.6;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.osApp.osCad .osCadPlateSvg .cen{fill:var(--violet);stroke:var(--cream,var(--panel));stroke-width:1}
.osApp.osCad .osCadPlateSvg .north path{fill:var(--ink)}
.osApp.osCad .osCadPlateSvg .north text,.osApp.osCad .osCadPlateSvg .scale text{
  font:600 9px var(--osMono);fill:var(--muted)}
.osApp.osCad .osCadPlateSvg .scale line{stroke:var(--ink);stroke-width:1.2}
.osApp.osCad .osCadPlateSvg.absent .t1{font:700 12px var(--disp,var(--osDisp));fill:var(--ink)}
.osApp.osCad .osCadPlateSvg.absent .t2{font:400 8.5px var(--osMono);fill:var(--muted)}
.osApp.osCad .osCadGeoMeta{max-width:480px}

/* ═══ THE LENS CHIPS ═════════════════════════════════════════════════════
   Five pictures of one object. A row of pills, the chosen one filled; each
   chip is a 44px target with a glyph and a word, and a count where the lens
   has rows. The row scrolls at a narrow width — it never clips (os-app.css
   tabs rule, same reason). */
.osApp.osCad .osCadLenses{
  display:flex;gap:6px;padding:2px 0 14px;overflow-x:auto;scrollbar-width:thin}
.osApp.osCad .osCadLens{
  flex:0 0 auto;display:inline-flex;align-items:center;gap:7px;min-height:44px;padding:0 15px 0 12px;
  border:1px solid var(--line);border-radius:var(--r-pill,999px);background:var(--cream,var(--surf));
  color:var(--muted);font:600 12.5px/1 var(--body);cursor:pointer;box-shadow:var(--lift,none);
  transition:background .16s,color .16s,transform .16s cubic-bezier(.2,.8,.2,1)}
.osApp.osCad .osCadLens .g{display:inline-flex;width:16px;height:16px}
.osApp.osCad .osCadLens .g svg{width:16px;height:16px}
.osApp.osCad .osCadLens .n{
  font:700 10.5px/1 var(--osMono);padding:3px 7px;border-radius:999px;background:var(--surf2);color:var(--ink)}
.osApp.osCad .osCadLens:hover{color:var(--ink);border-color:var(--line2);transform:translateY(-1px)}
.osApp.osCad .osCadLens.on{
  background:var(--fill);color:var(--onfill);border-color:transparent;box-shadow:var(--clay,none)}
.osApp.osCad .osCadLens.on .n{background:var(--onfill);color:var(--ink)}
.osApp.osCad .osCadLens:focus-visible{outline:2px solid var(--violet);outline-offset:2px}
.osApp.osCad .osCadLens.on:focus-visible{outline-color:var(--ink)}

/* ── inside a lens ─────────────────────────────────────────────────────── */
.osApp.osCad .osAppRow{grid-template-columns:minmax(0,1fr) minmax(0,1.4fr)}
.osApp.osCad .osAppRow .k{overflow:visible;text-overflow:unset;white-space:normal;line-height:1.35}
.osApp.osCad .osAppRow .v{text-align:right;white-space:normal;overflow-wrap:anywhere;line-height:1.35}
.osApp.osCad .osAppRow .v .abs{color:var(--amber);font:500 12px var(--body)}
.osApp.osCad .osCadLink{
  border:0;background:none;padding:0;font:inherit;color:var(--violet);text-decoration:underline;
  text-underline-offset:2px;cursor:pointer;min-height:24px}
.osApp.osCad .osCadLink:focus-visible{outline:2px solid var(--violet);outline-offset:2px;border-radius:4px}
.osApp.osCad .osCadCap{margin:-4px 0 10px;font:400 12px/1.5 var(--body);color:var(--muted);max-width:64ch}
/* tenure — a category chip, never a name slot */
.osApp.osCad .osCadChips{display:flex;flex-wrap:wrap;gap:6px}
.osApp.osCad .osCadChip{
  display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;
  background:var(--lav2,var(--surf2));color:var(--ink);font:600 12px/1.3 var(--body)}
.osApp.osCad .osCadChip .sh{font:500 10.5px var(--osMono);color:var(--muted)}
.osApp.osCad .osCadTile .osCadChip{font-size:11.5px;padding:4px 9px;margin:2px 3px 0 0}

/* the long lists — premise groups, buildings, neighbours — full width, as a
   grid of compact rows that fills the card instead of one endless column */
.osApp.osCad .osCadLists{border-top:1px solid var(--line);margin-top:14px;padding-top:14px}
.osApp.osCad .osCadLists section+section{margin-top:18px}
.osApp.osCad .osCadLists .osAppList{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:6px}
.osApp.osCad .osCadLists .row.osCadHit{padding:8px 12px 8px 14px}
.osApp.osCad .osCadLists .osCadHit .t{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.osApp.osCad .osCadLists .osCadKind{font-size:10px;padding:3px 8px}

/* worth — two sections side by side, two headings, never one column */
.osApp.osCad .osCadTwo{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px}
.osApp.osCad .osCadTwo section{min-width:0}
.osApp.osCad .osCadLensBody h3{
  margin:0 0 8px;font:700 9.5px/1 var(--body);letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.osApp.osCad .osCadTable{display:flex;flex-direction:column}
.osApp.osCad .osCadTr{
  display:grid;grid-template-columns:6.4em minmax(0,1fr) auto;gap:12px;padding:7px 0;
  font:400 12.5px/1.35 var(--osMono);color:var(--ink);border-bottom:1px solid var(--line)}
.osApp.osCad .osCadTr.h{font:700 9.5px/1 var(--body);letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.osApp.osCad .osCadTr .r{text-align:right;white-space:nowrap}
.osApp.osCad .osCadTr i{font-style:normal;color:var(--muted);font-size:11px}
.osApp.osCad .osCadWorth .osCadTr .r{color:var(--violet)}
.osApp.osCad .osCadPaid .osCadTr .r{color:var(--amber)}

/* ═══ THE TIMELINE ═══════════════════════════════════════════════════════
   One dated axis; a row per (channel, currency). Valuations are violet
   squares on stems, transactions amber circles on stems — shape and colour
   both differ. Year grid lines are drawn for EVERY year of the span so a
   year with nothing on it is visibly empty. Text sizes are in viewBox
   units and scale with the drawing. */
.osApp.osCad .osCadTl{
  border-radius:var(--r-s,12px);background:var(--cream,var(--panel));box-shadow:var(--lift,none);
  padding:10px 8px 4px;margin:0 0 10px;overflow-x:auto}
/* ⚠ the 640-unit viewBox below ~560px shrinks its 10px labels under 9px;
   the drawing keeps a floor and the container scrolls — legible beats whole */
.osApp.osCad .osCadTlSvg{display:block;width:100%;min-width:560px;height:auto}
.osApp.osCad .osCadTlSvg .yr{stroke:var(--line);stroke-width:1;stroke-dasharray:2 3}
.osApp.osCad .osCadTlSvg .yr.major{stroke:var(--line2);stroke-dasharray:none}
.osApp.osCad .osCadTlSvg .yl{font:600 10px var(--osMono);fill:var(--muted)}
.osApp.osCad .osCadTlSvg .base{stroke:var(--line2);stroke-width:1}
.osApp.osCad .osCadTlSvg .rl{font:700 11px var(--body);fill:var(--ink)}
.osApp.osCad .osCadTlSvg .rs{font:500 9.5px var(--osMono);fill:var(--muted)}
.osApp.osCad .osCadTlSvg .stem{stroke-width:1.4}
.osApp.osCad .osCadTlSvg .vl{font:600 9.5px var(--osMono);fill:var(--ink)}
.osApp.osCad .osCadTlSvg .mk.val .stem{stroke:var(--violet)}
.osApp.osCad .osCadTlSvg .mk.val .dot{fill:var(--violet);stroke:var(--cream,var(--panel));stroke-width:1.2}
.osApp.osCad .osCadTlSvg .mk.tx .stem{stroke:var(--amber)}
.osApp.osCad .osCadTlSvg .mk.tx .dot{fill:var(--amber);stroke:var(--cream,var(--panel));stroke-width:1.2}
.osApp.osCad .osCadLegend{
  display:flex;flex-wrap:wrap;gap:14px;align-items:center;margin:0 0 10px;
  font:500 11.5px/1.4 var(--body);color:var(--muted)}
.osApp.osCad .osCadLegend i{display:inline-block;width:9px;height:9px;margin-right:6px;vertical-align:-1px}
.osApp.osCad .osCadLegend .val i{background:var(--violet)}
.osApp.osCad .osCadLegend .tx i{background:var(--amber);border-radius:50%}
.osApp.osCad .osCadLegend .c{font:500 11px var(--osMono)}
/* the event list under the drawing — the same two shapes, as a mark */
.osApp.osCad .osCadEvs{display:flex;flex-direction:column}
.osApp.osCad .osCadEv{
  display:grid;grid-template-columns:6.4em 10em minmax(0,1fr) auto;gap:12px;align-items:center;
  padding:7px 0;border-bottom:1px solid var(--line);font:400 12.5px/1.35 var(--osMono);color:var(--ink)}
.osApp.osCad .osCadEv .ch{display:inline-flex;align-items:center;gap:7px;font:600 12px var(--body)}
.osApp.osCad .osCadEv .ch i{display:inline-block;width:9px;height:9px;flex:none}
.osApp.osCad .osCadEv.valuation .ch i{background:var(--violet)}
.osApp.osCad .osCadEv.transaction .ch i{background:var(--amber);border-radius:50%}
.osApp.osCad .osCadEv .k{color:var(--muted);font-size:11.5px;overflow-wrap:anywhere}
.osApp.osCad .osCadEv .v{text-align:right;white-space:nowrap;font-weight:600}
.osApp.osCad .osCadEv.valuation .v{color:var(--violet)}
.osApp.osCad .osCadEv.transaction .v{color:var(--amber)}

/* ── "About this data" — under the card, folded, the four dataset rows verbatim */
.osApp.osCad .osCadAbout{margin:14px 19px 0;color:var(--muted)}
.osApp.osCad .osCadAbout summary{
  cursor:pointer;list-style:none;display:inline-flex;align-items:center;gap:7px;min-height:24px;
  font:700 10px/1 var(--body);letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.osApp.osCad .osCadAbout summary::-webkit-details-marker{display:none}
.osApp.osCad .osCadAbout summary::before{content:'›';font-size:13px;transition:transform .15s}
.osApp.osCad .osCadAbout[open] summary::before{transform:rotate(90deg)}
.osApp.osCad .osCadAbout summary:hover{color:var(--ink)}
.osApp.osCad .osCadAbout summary:focus-visible{outline:2px solid var(--violet);outline-offset:3px;border-radius:4px}
.osApp.osCad .osCadAbout p{margin:9px 0 0;max-width:72ch;font:400 12px/1.6 var(--body)}
.osApp.osCad .osCadAbout p b{color:var(--amber);font-weight:700}
.osApp.osCad .osCadAbout p.h{margin-top:14px;font:700 9.5px/1 var(--body);letter-spacing:.14em;text-transform:uppercase}
.osApp.osCad .osCadDs{margin:6px 0 0;overflow-x:auto;display:flex;flex-direction:column;min-width:0}
.osApp.osCad .osCadDsR{
  display:grid;grid-template-columns:5.5em minmax(12em,1.6fr) 5em 8.5em 5em 5.5em 5.5em;gap:10px;min-width:640px;
  padding:6px 0;border-bottom:1px solid var(--line);font:400 11.5px/1.35 var(--osMono);color:var(--ink)}
.osApp.osCad .osCadDsR.h{font:700 9px/1 var(--body);letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.osApp.osCad .osCadDsR .nil{color:var(--amber);font-weight:600}
.osApp.osCad .osCadDsR .bad{color:var(--amber);font-weight:600}

/* ═══ RESTRICTIONS — use case 1 ══════════════════════════════════════════
   The whole picture in one strip (the count, then where it sits), then one
   section per family of the register's kind ids, kinds inside as headed
   groups, every instance a three-column row: registered · quantity in the
   register's unit · the object it sits on. A family that is not a legal
   restriction (a valuation overlay, a cadastre note) carries its sentence
   directly under its heading — word, never colour alone. */
.osApp.osCad .osCadRes{min-width:0}
.osApp.osCad .osCadResStrip{
  display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin:0 0 14px;padding:12px 16px;
  border-radius:var(--r-s,12px);background:var(--cream2,var(--surf));box-shadow:var(--lift,none)}
.osApp.osCad .osCadResStrip .n{font:800 26px/1 var(--disp,var(--osDisp));color:var(--ink);letter-spacing:-.02em}
.osApp.osCad .osCadResStrip .s{font:500 12px/1.5 var(--body);color:var(--muted)}
.osApp.osCad .osCadResFam{margin:0 0 16px;padding:0 0 4px}
.osApp.osCad .osCadResFam h4{
  display:flex;align-items:center;gap:10px;margin:0 0 6px;padding:8px 0 6px;border-bottom:1px solid var(--line2);
  font:800 13.5px/1.3 var(--disp,var(--osDisp));color:var(--ink);letter-spacing:-.005em}
.osApp.osCad .osCadResFam h4 .n{
  font:700 10.5px/1 var(--osMono);padding:4px 8px;border-radius:999px;background:var(--lav2,var(--surf2));color:var(--ink)}
.osApp.osCad .osCadResFam[data-nature="valuation"] h4 .n{background:var(--surf2);color:var(--muted)}
.osApp.osCad .osCadResFam[data-nature="note"] h4 .n{background:var(--clay-peach,var(--surf2))}
.osApp.osCad .osCadResNature{margin:0 0 8px;font:400 11.5px/1.5 var(--body);color:var(--muted);max-width:68ch}
.osApp.osCad .osCadResKind{margin:0 0 8px;padding:8px 12px 6px;border-radius:var(--r-s,12px);background:var(--cream,var(--surf))}
.osApp.osCad .osCadResKindH{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin:0 0 4px}
.osApp.osCad .osCadResKindH .t{font:700 12.5px/1.4 var(--body);color:var(--ink);max-width:70ch}
.osApp.osCad .osCadResKindH .c{font:700 10.5px/1 var(--osMono);padding:3px 7px;border-radius:999px;background:var(--surf2);color:var(--ink)}
.osApp.osCad .osCadResKindH .id{margin-left:auto;font:500 10.5px var(--osMono);color:var(--faint,var(--muted))}
.osApp.osCad .osCadResRows{display:flex;flex-direction:column}
.osApp.osCad .osCadResRow{
  display:grid;grid-template-columns:9.5em 8em minmax(0,1fr);gap:12px;padding:5px 0;
  font:400 12px/1.4 var(--osMono);color:var(--ink);border-top:1px solid var(--line)}
.osApp.osCad .osCadResRow:first-child{border-top:0}
.osApp.osCad .osCadResRow .q{white-space:nowrap}
.osApp.osCad .osCadResRow .o{color:var(--muted);overflow-wrap:anywhere}
.osApp.osCad .osCadResRow .o .osCadLink{font:inherit}
@media (max-width:640px){
  .osApp.osCad .osCadResRow{grid-template-columns:8em minmax(0,1fr);grid-template-areas:"d q" "o o";row-gap:2px}
  .osApp.osCad .osCadResRow .d{grid-area:d}.osApp.osCad .osCadResRow .q{grid-area:q}.osApp.osCad .osCadResRow .o{grid-area:o}
  .osApp.osCad .osCadResKindH .id{margin-left:0}
}

/* ── narrow columns: the plate stacks above the tiles; tables scroll ────── */
@media (max-width:1100px){
  .osApp.osCad .osCadHero{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (max-width:900px){
  .osApp.osCad .osCadTop{grid-template-columns:1fr}
  .osApp.osCad .osCadPlate{min-height:0;max-width:320px}
  .osApp.osCad .osCadTwo{grid-template-columns:1fr}
  .osApp.osCad .osCadHero{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:640px){
  .osApp.osCad .osAppBar{padding:14px 14px 4px}
  .osApp.osCad .osAppBar input{padding:11px 14px;font-size:14px}
  .osApp.osCad .osAppBar .go{padding:10px 14px}
  .osApp.osCad .osCadWelcome{padding:20px 8px 16px}
  .osApp.osCad .osCadWelcome img{width:68px;height:68px}
  .osApp.osCad .osCadTiles{grid-template-columns:1fr 1fr}
  .osApp.osCad .osCadAbout{margin:12px 4px 0}
  /* two lines, not three: date · channel · amount, then the kind beneath */
  .osApp.osCad .osCadEv{grid-template-columns:6.4em minmax(0,1fr) auto;grid-template-areas:"d ch v" "k k k";row-gap:2px}
  .osApp.osCad .osCadEv .d{grid-area:d}.osApp.osCad .osCadEv .ch{grid-area:ch}
  .osApp.osCad .osCadEv .v{grid-area:v}.osApp.osCad .osCadEv .k{grid-area:k}
}
@media (max-width:420px){
  .osApp.osCad .osCadHero{gap:9px}
  .osApp.osCad .osCadTile{padding:12px 13px 11px}
  .osApp.osCad .osCadTile .big{font-size:16px}
  .osApp.osCad .osCadTiles{grid-template-columns:1fr}
  .osApp.osCad .osCadLens{padding:0 12px 0 10px}
}
@media (prefers-reduced-motion:reduce){
  .osApp.osCad .osCadLens,.osApp.osCad .osAppList .row.osCadHit,.osApp.osCad .osCadAbout summary::before{transition:none}
  .osApp.osCad .osCadLens:hover,.osApp.osCad .osAppList .row.osCadHit:hover{transform:none}
}

/* ── widget: the site-card material, the plate where the screenshots go ──
   These live in the THREAD, so the thread scope is the right one. */
body.os.inthread .osSite.osCad{grid-template-columns:minmax(150px,2fr) minmax(0,3fr)}
body.os.inthread .osSite.osCad .osCadWPlate{
  grid-column:1;align-self:stretch;display:flex;align-items:center;justify-content:center;
  padding:14px 6px 14px 14px}
body.os.inthread .osSite.osCad .osCadWPlate .osCadPlateSvg{
  display:block;width:100%;height:auto;max-height:190px;border-radius:12px;
  background:var(--cream,var(--panel));box-shadow:var(--lift,none);padding:6px;box-sizing:border-box}
body.os.inthread .osSite.osCad .osCadPlateSvg .land{fill:var(--clay-mint,var(--surf2))}
body.os.inthread .osSite.osCad .osCadPlateSvg.building .land{fill:var(--lav,var(--surf2))}
body.os.inthread .osSite.osCad .osCadPlateSvg .edge{fill:none;stroke:var(--ink);stroke-width:1.6;vector-effect:non-scaling-stroke}
body.os.inthread .osSite.osCad .osCadPlateSvg .cen{fill:var(--violet)}
body.os.inthread .osSite.osCad .osCadPlateSvg .north path{fill:var(--ink)}
body.os.inthread .osSite.osCad .osCadPlateSvg .north text,body.os.inthread .osSite.osCad .osCadPlateSvg .scale text{font:600 9px var(--osMono);fill:var(--muted)}
body.os.inthread .osSite.osCad .osCadPlateSvg .scale line{stroke:var(--ink);stroke-width:1.2}
body.os.inthread .osSite.osCad .osCadPlateSvg.absent .t1{font:700 12px var(--disp,var(--osDisp));fill:var(--ink)}
body.os.inthread .osSite.osCad .osCadPlateSvg.absent .t2{font:400 8.5px var(--osMono);fill:var(--muted)}
/* ⛔ its OWN class, not the company card's `.osCoHead`: work-clay.css grids
   that name at the same specificity as any rule here and loads last, so the
   id line landed in a second column beside a title two words wide
   (measured 2026-09-08). A shared name is a shared fate. */
body.os.inthread .osSite.osCad .osCadWHead{
  display:block;font:500 14px/1.35 var(--osDisp);color:var(--ink);letter-spacing:-.01em;margin-bottom:9px}
body.os.inthread .osSite.osCad .osCadWHead .id{display:block;margin-top:3px;font:400 11px var(--osMono);color:var(--muted)}
body.os.inthread .osSite.osCad .osMark{grid-template-columns:20px minmax(0,1fr) auto}
body.os.inthread .osSite.osCad .osMark .tick{font:700 12px var(--osMono);color:var(--muted);text-align:center}
body.os.inthread .osSite.osCad .osMark.ok .tick{color:var(--mint)}
body.os.inthread .osSite.osCad .osMark .k{white-space:normal;overflow-wrap:anywhere}
body.os.inthread .osSite.osCad .osMark .v{white-space:nowrap}
body.os.inthread .osCadMark{display:none}
@media (max-width:760px){
  body.os.inthread .osSite.osCad{grid-template-columns:1fr}
  body.os.inthread .osSite.osCad .osCadWPlate{grid-column:1;padding:12px 12px 0;max-width:260px}
}

/* the explication line under a land use or a building element — the register's
   own breakdown, as words with figures, never a chart nobody asked for */
.osApp.osCad .osCadExpl{
  display:flex;flex-wrap:wrap;gap:0 8px;align-items:baseline;
  font:400 11.5px/1.7 var(--osMono);color:var(--muted)}
.osApp.osCad .osCadExpl .sep{color:var(--faint,var(--line2))}

/* ═══ THE COUNTRY MAP — the first thing the pane draws ══════════════════════
   Owner, 2026-09-11: "its too simpel now, not even showing map at first view,
   that sux". The map leads; the counters sit under it.
   ⛔ Sized in `aspect-ratio`, not a fixed height: the pane is a column inside a
      workspace and a hard pixel height either crops Latvia or leaves a band of
      empty ground at a narrow width. */
.osCadMapWrap { margin: 0 0 18px; }
.osCadMapHead { display: flex; align-items: baseline; justify-content: space-between;
  gap: 12px; margin: 0 0 8px; flex-wrap: wrap; }
.osCadMapTitle { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
.osCadMapTitle b { font-size: 15px; letter-spacing: -0.01em; }
.osCadMapTitle span { font-size: 12px; opacity: 0.62; font-variant-numeric: tabular-nums; }
.osCadMapPick select { font: inherit; font-size: 12px; padding: 4px 8px; border-radius: 8px;
  border: 1px solid color-mix(in srgb, canvastext 16%, transparent);
  background: color-mix(in srgb, canvas 90%, canvastext 4%); color: inherit; max-width: 16rem; }
.osCadMapPick select:disabled { opacity: 0.55; }

.osCadMapBox { aspect-ratio: 16 / 10; width: 100%; border-radius: 14px; overflow: hidden;
  background: color-mix(in srgb, canvas 88%, canvastext 6%);
  border: 1px solid color-mix(in srgb, canvastext 10%, transparent); position: relative; }
.osCadMapSvg { display: block; width: 100%; height: 100%; }
/* ⛔ The tiles sit behind everything and are deliberately quiet: they are
   CONTEXT for the data, and a full-strength photograph competes with the
   colour that carries the meaning. */
.osCadMapTiles { opacity: 0.5; }
.osCadMapShape { stroke: color-mix(in srgb, canvas 70%, transparent); stroke-width: 0.6;
  cursor: pointer; transition: fill-opacity 0.12s ease; fill-opacity: 0.85; }
.osCadMapShape:hover { fill-opacity: 1; }
.osCadMapShape:focus-visible { outline: none; stroke: canvastext; stroke-width: 2; }
.osCadMapShape.on { stroke: canvastext; stroke-width: 1.8; fill-opacity: 1; }
/* ⚠ An unmeasured area is TRANSPARENT with a dashed edge, so the ground shows
   through and it reads as "nothing published here" rather than as a value. */
.osCadMapShape[fill="transparent"] { stroke-dasharray: 3 2;
  stroke: color-mix(in srgb, canvastext 34%, transparent); }
.osCadMapDot { fill: #5d3aa8; fill-opacity: 0.75; stroke: canvas; stroke-width: 0.8; }
.osCadMapEmpty { display: grid; place-items: center; height: 100%; font-size: 13px; opacity: 0.6; }

.osCadMapFoot { display: flex; align-items: center; justify-content: space-between;
  gap: 12px; margin: 8px 0 0; flex-wrap: wrap; }
.osCadMapLegend { display: flex; gap: 10px; flex-wrap: wrap; font-size: 11px;
  font-variant-numeric: tabular-nums; opacity: 0.8; }
.osCadLegStep { display: inline-flex; align-items: center; gap: 5px; }
.osCadLegStep i { width: 12px; height: 12px; border-radius: 3px; display: block;
  border: 1px solid color-mix(in srgb, canvastext 12%, transparent); }
.osCadLegStep.un i { background: transparent; border-style: dashed;
  border-color: color-mix(in srgb, canvastext 34%, transparent); }
.osCadMapUn { font-size: 11px; opacity: 0.62; }

.osCadMapSel { display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin: 10px 0 0; padding: 9px 12px; border-radius: 10px;
  background: color-mix(in srgb, canvas 84%, canvastext 7%); font-size: 13px; }
.osCadMapSel b { letter-spacing: -0.01em; }
.osCadMapSel span { font-variant-numeric: tabular-nums; opacity: 0.78; }
.osCadMapSel button { margin-left: auto; font: inherit; font-size: 12px; cursor: pointer;
  padding: 4px 10px; border-radius: 999px; border: 1px solid color-mix(in srgb, canvastext 18%, transparent);
  background: transparent; color: inherit; }
.osCadMapSel button:hover { background: color-mix(in srgb, canvastext 8%, transparent); }

/* The welcome block is a caption now, not a hero — the map is the hero. */
.osCadWelcome.sm { padding: 4px 0 12px; text-align: left; }
.osCadWelcome.sm h2 { font-size: 16px; margin: 0 0 4px; }
.osCadWelcome.sm p { font-size: 13px; margin: 0 0 4px; max-width: 60ch; }

.vh { position: absolute; width: 1px; height: 1px; overflow: hidden;
  clip-path: inset(50%); white-space: nowrap; }

@media (prefers-reduced-motion: reduce) {
  .osCadMapShape { transition: none; }
}

/* ⛔ WHOSE NUMBER IS THIS? A figure we computed and one the authority published
   colour the same map, so the tag is not decoration — it is the only thing
   telling a reader which they are looking at. */
.osCadMapKind { font-size: 10px; letter-spacing: 0.04em; text-transform: uppercase;
  padding: 2px 7px; border-radius: 999px; opacity: 0.9;
  background: color-mix(in srgb, canvastext 10%, transparent); }
.osCadMapKind[data-kind="computed"] { background: color-mix(in srgb, #b8860b 22%, transparent); }
.osCadMapN, .osCadMapLbl { font-size: 11px; opacity: 0.66; font-variant-numeric: tabular-nums; }
.osCadMapPick select optgroup { font-style: normal; font-weight: 600; }
