/* Layout: full-height tool — genplan map on the left (pan/zoom), working panel on the right; stacks map-over-panel on phones. */
:root{
  --bg:#eef1ec; --surface:#ffffff; --surface-2:#f6f8f4; --ink:#1b2220; --muted:#5f6a64; --line:#d8ded6;
  --accent:#b02a55; --accent-soft:#f6e3ea; --accent-ink:#ffffff; --mapbg:#dfe5da;
  --ok:#2b9450; --warn:#d99a12; --no:#8b9097; --focus:#b02a55;
  --f-display:"Unbounded","Golos Text",system-ui,sans-serif;
  --f-ui:"Golos Text",system-ui,-apple-system,"Segoe UI",sans-serif;
  --f-num:"JetBrains Mono",ui-monospace,"SFMono-Regular",Menlo,monospace;
  --r:10px;
  /* map palette */
  --m-ground:#dde8c6; --m-grass:#cddbb0; --m-forest:#93bf7f; --m-crown:#7fb06c; --m-crown-2:#a8cf93; --m-field:#efe2b0; --m-field-2:#e2d196;
  --m-water:#5fa8d8; --m-bank:#c9e3f1; --m-water-ink:#2f6f9c; --m-terr:#f6f8ee; --m-halo:#fffdf0; --m-edge:#c8913a; --m-road:#e6d9bb; --m-road-edge:#cdbb94;
  --m-plot:#b4d48e; --m-plot-1:#a8cd83; --m-plot-2:#bedb9a; --m-plot-3:#c9dfa0; --m-plot-corp:#c4c7c9; --m-plot-ink:#2b3a20; --m-plot-ink-2:#2b3a20;
  --m-hw:#8f9399; --m-hw-line:#ffffff; --m-rail:#6b5b4e; --m-label:#4d5b44; --hl-band:#f2c3d2; --m-dirt:#c9b48f;
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){
  --bg:#121614; --surface:#1a1f1d; --surface-2:#202624; --ink:#e7ece9; --muted:#9aa6a0; --line:#2d3532;
  --accent:#e45c86; --accent-soft:#3a2129; --accent-ink:#1a0d12; --mapbg:#0d100f;
  --ok:#47be70; --warn:#f0b43a; --no:#7d848b; --focus:#e45c86;
  --m-ground:#1a2316; --m-grass:#212c1c; --m-forest:#16301b; --m-crown:#1d3d22; --m-crown-2:#244a29; --m-field:#37321f; --m-field-2:#403a25;
  --m-water:#2f6c96; --m-bank:#1d3340; --m-water-ink:#7fb8de; --m-terr:#20291c; --m-halo:#4a4a2c; --m-edge:#d9b25e; --m-road:#4a4231; --m-road-edge:#5a503b;
  --m-plot:#4a6e3e; --m-plot-1:#43653a; --m-plot-2:#527845; --m-plot-3:#5a7f4b; --m-plot-corp:#4a4f52; --m-plot-ink:#e9f2dc; --m-plot-ink-2:#e9f2dc;
  --m-hw:#3b3f44; --m-hw-line:#c9cdd2; --m-rail:#a59584; --m-label:#a3b394; --hl-band:#6b2e43; --m-dirt:#6e6046; color-scheme:dark }}
:root[data-theme="dark"]{
  --bg:#121614; --surface:#1a1f1d; --surface-2:#202624; --ink:#e7ece9; --muted:#9aa6a0; --line:#2d3532;
  --accent:#e45c86; --accent-soft:#3a2129; --accent-ink:#1a0d12; --mapbg:#0d100f;
  --ok:#47be70; --warn:#f0b43a; --no:#7d848b; --focus:#e45c86;
  --m-ground:#1a2316; --m-grass:#212c1c; --m-forest:#16301b; --m-crown:#1d3d22; --m-crown-2:#244a29; --m-field:#37321f; --m-field-2:#403a25;
  --m-water:#2f6c96; --m-bank:#1d3340; --m-water-ink:#7fb8de; --m-terr:#20291c; --m-halo:#4a4a2c; --m-edge:#d9b25e; --m-road:#4a4231; --m-road-edge:#5a503b;
  --m-plot:#4a6e3e; --m-plot-1:#43653a; --m-plot-2:#527845; --m-plot-3:#5a7f4b; --m-plot-corp:#4a4f52; --m-plot-ink:#e9f2dc; --m-plot-ink-2:#e9f2dc;
  --m-hw:#3b3f44; --m-hw-line:#c9cdd2; --m-rail:#a59584; --m-label:#a3b394; --hl-band:#6b2e43; --m-dirt:#6e6046; color-scheme:dark }

html,body{height:100%}
body{background:var(--bg);color:var(--ink);font-family:var(--f-ui);font-size:14px;line-height:1.45}
*{box-sizing:border-box}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--focus);outline-offset:2px}

.app{height:100%;display:flex;flex-direction:column}
.top{display:flex;align-items:center;gap:16px;padding-block:10px;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));border-bottom:1px solid var(--line);background:var(--surface)}
.brand{display:flex;align-items:baseline;gap:10px;min-width:0}
.logo{font-family:var(--f-display);font-weight:700;font-size:20px;letter-spacing:-.01em;color:var(--accent)}
.sub{color:var(--muted);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.top .sp{flex:1}
.switch{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted);cursor:pointer;user-select:none}
.switch input{appearance:none;width:34px;height:20px;border-radius:20px;background:var(--line);position:relative;cursor:pointer;transition:background .15s}
.switch input::after{content:"";position:absolute;top:3px;left:3px;width:14px;height:14px;border-radius:50%;background:var(--surface);transition:left .15s}
.switch input:checked{background:var(--accent)}
.switch input:checked::after{left:17px}

.body{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) 380px}
.mapwrap{position:relative;overflow:hidden;overflow:clip;background:var(--m-ground);touch-action:none;cursor:grab}
.mapwrap.drawing{cursor:crosshair}
.mapwrap.dragging{cursor:grabbing}
.stage{position:absolute;left:0;top:0;width:1904px;height:2395px;transform-origin:0 0}
/* слой видеокарты под карту — только пока её тащат или приближают: постоянный огромный слой на слабых Android переполнял
   память видеокарты, и части экрана (шапка, меню, кнопки) временно не прорисовывались */
.dragging .stage{will-change:transform}
.stage img{display:none;position:absolute;inset:0;width:1904px;height:2395px;max-width:none;user-select:none;-webkit-user-drag:none}
.stage.raster img{display:block}
.stage.raster #gBase{display:none}
.stage svg{position:absolute;inset:0;width:1904px;height:2395px;overflow:visible}

/* base map */
.b-forest{fill:url(#patForest)}
.b-bg{fill:url(#patGrass)}
.b-field{fill:url(#patField)}
.pg-base{fill:var(--m-ground)}.pg-dot{fill:var(--m-grass)}
.pf-base{fill:var(--m-forest)}.pf-c1{fill:var(--m-crown)}.pf-c2{fill:var(--m-crown-2)}
.pd-base{fill:var(--m-field)}.pd-row{fill:var(--m-field-2)}
.b-hole{fill:url(#patGrass)}
.b-terr{fill:var(--m-terr)}
.b-bld{fill:var(--m-bld,#8d8a80);stroke:#5d5a52;stroke-width:.6;opacity:.85;pointer-events:none}
.b-halo{fill:var(--m-halo);stroke:var(--m-halo);stroke-linejoin:round;pointer-events:none}.b-halo1{stroke-width:80;opacity:.45}.b-halo2{stroke-width:30;opacity:.85}
.b-edge{fill:none;stroke:var(--m-edge);stroke-width:2.2px;vector-effect:non-scaling-stroke;stroke-linejoin:round;pointer-events:none}
.raster .b-halo,.raster .b-edge{display:none}
.b-road{fill:var(--m-road);stroke:var(--m-road-edge);stroke-width:2}
.st-ex,.st-pr{display:none}
.st-pr{fill:none;stroke:var(--m-road-edge);stroke-width:2.5;stroke-dasharray:6 8;stroke-linecap:round}
.mapwrap.goodshow #gStHit{display:inline}
.mapwrap.goodshow:not(.goodedit) .st-hit{stroke:transparent;pointer-events:none}
.mapwrap.goodshow:not(.goodedit) .st-hit.st-good{stroke:rgba(46,157,79,.45);stroke-width:30}
.mapwrap.goodedit .st-hit{stroke:color-mix(in srgb,var(--accent) 14%,transparent);stroke-width:14}
.mapwrap.goodedit .st-hit.st-good{stroke:rgba(46,157,79,.6);stroke-width:30}
#gStHit{display:none}
.roadedit #gStHit{display:inline}
.st-hit{fill:none;stroke:transparent;stroke-width:24;stroke-linecap:round;cursor:pointer;pointer-events:stroke}
@media (hover:hover){.st-hit:hover{stroke:color-mix(in srgb,var(--accent) 35%,transparent)}}
.stage.raster #gStreets{display:none}
.b-bank{fill:none;stroke:var(--m-bank);stroke-width:26;stroke-linecap:round;stroke-linejoin:round}
.b-river{fill:none;stroke:var(--m-water);stroke-width:12;stroke-linecap:round;stroke-linejoin:round}
.b-hw-edge{fill:none;stroke:var(--m-road-edge);stroke-width:24}
.b-hw{fill:none;stroke:var(--m-hw);stroke-width:19}
.b-hw-line{fill:none;stroke:var(--m-hw-line);stroke-width:1.4;stroke-dasharray:14 12}
.b-rail-bed{fill:none;stroke:var(--m-road);stroke-width:16}
.b-rail{fill:none;stroke:var(--m-rail);stroke-width:12;stroke-dasharray:2.5 7}
.b-rail2{fill:none;stroke:var(--m-rail);stroke-width:2.2}
.b-q{stroke:none;opacity:.55}
.b-q1{fill:#c9a400}.b-q2{fill:#3c9a3c}.b-q3{fill:#1a9bb0}
.b-label.water{fill:var(--m-water-ink)}
.b-label.hw{fill:var(--m-label);font-style:normal;font-size:24px;letter-spacing:.06em}
.b-label{fill:var(--m-label);paint-order:stroke;stroke:color-mix(in srgb,var(--m-ground) 80%,transparent);stroke-width:5px;font-family:var(--f-ui);font-size:30px;font-style:italic;letter-spacing:.02em}
.b-label.big{font-size:34px;font-style:normal;font-weight:600;letter-spacing:.08em;text-transform:uppercase;opacity:.75}
.b-pt circle{fill:var(--surface);stroke:var(--ink);stroke-width:3}
.b-pt text{fill:var(--ink);font:600 15px var(--f-ui);text-anchor:middle;dominant-baseline:central}

/* plots */
.gpl:not(.pm) .plot.v1:not(.sel):not(.hov){fill:var(--m-plot-1)}
.gpl:not(.pm) .plot.v2:not(.sel):not(.hov){fill:var(--m-plot-2)}
.gpl:not(.pm) .plot.v3:not(.sel):not(.hov){fill:var(--m-plot-3)}
.plot{fill:var(--m-plot);stroke:var(--m-terr);stroke-width:1.8px;vector-effect:non-scaling-stroke;stroke-linejoin:round;cursor:pointer}
.plot.d-corp{fill:var(--m-plot-corp)}
.raster .plot{fill:transparent;stroke:transparent}
/* groups: drawn under the plots; a thick accent stroke becomes the outer border,
   a lighter inner stroke bridges the gaps, so neighbouring plots of one owner read as one shape */
.grp-o{fill:var(--accent);stroke:var(--accent);stroke-width:var(--hlw,10px);stroke-linejoin:round}
.grp-i polygon{stroke-width:4.5px;stroke-linejoin:round}
#gSel,#gHover{pointer-events:none}
#gHover .grp-o{fill:color-mix(in srgb,var(--accent) 75%,transparent);stroke:color-mix(in srgb,var(--accent) 75%,transparent)}
.plot.hov{fill:color-mix(in srgb,var(--hl-band) 55%,var(--m-plot-2))}
.plot.sel{fill:var(--hl-band)}
.pm .plot.hov{fill:color-mix(in srgb,var(--accent) 18%,var(--m-terr))}
.plot.s-paid.hov,.plot.s-paid.sel{fill:var(--ok)}
.plot.s-pledged.hov,.plot.s-pledged.sel{fill:var(--warn)}
.raster .plot.hov,.raster .plot.sel{fill:color-mix(in srgb,var(--accent) 30%,transparent)}
.raster .grp-i{fill:transparent;stroke:color-mix(in srgb,var(--accent) 30%,transparent)}
.plot.pick{fill:color-mix(in srgb,var(--accent) 45%,var(--m-plot))}
.pm .plot{fill:color-mix(in srgb,var(--m-plot) 62%,var(--m-terr))}
.pm .plot.scope:not(.s-paid):not(.s-pledged):not(.s-refused){fill:var(--m-plot)}
.plot.s-paid{fill:var(--ok)}
.plot.s-pledged{fill:var(--warn)}
.plot.s-refused{fill:color-mix(in srgb,var(--no) 75%,var(--m-terr))}
.plabels{pointer-events:none;font-family:var(--f-ui);text-anchor:middle;dominant-baseline:central}
.plabels text{fill:var(--m-plot-ink);font-weight:600;font-variant-numeric:tabular-nums}
.plabels text.ldk{fill:var(--m-plot-ink-2)}   /* не .dk: общее правило .dk{font-size:13.5px} (страница взносов) увеличивало эти номера */
.plabels tspan.ar{font-size:.7em;font-weight:400;opacity:.85}
.stage.z-lo .plabels{display:none}
.stage:not(.z-hi) .plabels tspan.ar{display:none}
.raster .plabels{display:none}
.shape-line-u{fill:none;stroke:#fff;stroke-opacity:.6;stroke-linecap:round;stroke-linejoin:round}
.shape-line{fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:.88}
.shape-area{stroke-width:4;fill-opacity:.28;stroke-opacity:.95;stroke-dasharray:14 8}
.draft{fill:none;stroke:var(--accent);stroke-width:6;stroke-dasharray:12 8}
.draft-pt{fill:var(--surface);stroke:var(--accent);stroke-width:4}
.draft.route{stroke-dasharray:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:.85}

.mapctl{position:absolute;right:calc(12px + env(safe-area-inset-right,0px));top:12px;display:flex;flex-direction:column;gap:6px}
.mapctl button{width:38px;height:38px;border-radius:8px;border:1px solid var(--line);background:var(--surface);font-size:18px;font-weight:600;cursor:pointer;display:grid;place-items:center;box-shadow:0 1px 3px rgb(0 0 0 / .12)}
@media (hover:hover){.mapctl button:hover{border-color:var(--accent);color:var(--accent)}}
.legend{position:absolute;left:calc(12px + env(safe-area-inset-left,0px));bottom:12px;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:8px 10px;display:flex;flex-wrap:wrap;gap:6px 14px;font-size:12px;max-width:calc(100% - 24px);box-shadow:0 1px 3px rgb(0 0 0 / .1)}
.legend b{font-weight:600;width:100%;font-size:12px}
.lg{display:flex;align-items:center;gap:6px;color:var(--muted)}
.dot{width:12px;height:12px;border-radius:3px;flex:none}
.d-paid{background:var(--ok)}.d-pledged{background:var(--warn)}.d-refused{background:var(--no)}.d-none{background:transparent;border:1.5px solid var(--muted)}
.drawbar{position:absolute;left:50%;top:12px;transform:translateX(-50%);background:var(--ink);color:var(--bg);border-radius:10px;padding:8px 8px 8px 14px;display:flex;align-items:center;gap:8px;font-size:13px;box-shadow:0 4px 14px rgb(0 0 0 / .25);max-width:calc(100% - 80px);flex-wrap:wrap;z-index:6}   /* выше компаса и указателей городов (.dk-html, z-index 2) */
.drawbar button{border:0;border-radius:7px;padding:6px 10px;cursor:pointer;background:color-mix(in srgb,var(--bg) 18%,transparent);color:var(--bg);font-weight:500}
.drawbar button.primary{background:var(--accent);color:var(--accent-ink)}
.tip{position:fixed;pointer-events:none;z-index:20;background:var(--ink);color:var(--bg);padding:7px 10px;border-radius:8px;font-size:12.5px;line-height:1.35;max-width:240px;box-shadow:0 4px 14px rgb(0 0 0 / .25)}
.tip .n{font-family:var(--f-num);font-size:13px}
.tip .m{opacity:.75}

.panel{border-left:1px solid var(--line);background:var(--surface);overflow-y:auto;min-width:0;padding-block:16px 32px;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
.panel>*+*{margin-top:16px}
h2{font-family:var(--f-display);font-weight:500;font-size:17px;line-height:1.25;margin:0;text-wrap:balance}
h3{font-size:11.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin:0;font-weight:600}
.muted{color:var(--muted)}
.small{font-size:12.5px}
.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.stack{display:flex;flex-direction:column;gap:8px}
.back{border:0;background:none;padding:0;color:var(--muted);cursor:pointer;font-size:13px}
@media (hover:hover){.back:hover{color:var(--accent)}}
.btn{border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:7px 12px;cursor:pointer;font-weight:500;font-size:13px}
@media (hover:hover){.btn:hover{border-color:var(--accent);color:var(--accent)}}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
@media (hover:hover){.btn.primary:hover{filter:brightness(1.08);color:var(--accent-ink)}}
.btn.danger{color:#c0392b;border-color:color-mix(in srgb,#c0392b 40%,var(--line))}
.btn.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}
.btn:disabled{opacity:.5;cursor:default}
.search{display:flex;gap:8px}
.search input{flex:1;min-width:0}
input[type=text],input[type=number],input[type=search],input[type=password],input[type=tel],select,textarea{border:1px solid var(--line);background:var(--surface-2);border-radius:8px;padding:7px 10px;width:100%}
textarea{resize:vertical;min-height:64px}
label.f{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted);min-width:0}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px}

.tasks{display:flex;flex-direction:column;gap:10px}
.task{border:1px solid var(--line);border-radius:var(--r);padding:12px;cursor:pointer;background:var(--surface);text-align:left;display:flex;flex-direction:column;gap:8px;width:100%}
@media (hover:hover){.task:hover{border-color:var(--accent)}}
.task .t{font-weight:600;font-size:14.5px}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{font-size:11.5px;border-radius:20px;padding:2px 8px;background:var(--surface-2);border:1px solid var(--line);color:var(--muted);white-space:nowrap}
.chip.st-collecting{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,var(--line))}
.chip.st-in_progress{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 45%,var(--line))}
.chip.st-done{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 45%,var(--line))}
.legend-in{display:flex;flex-direction:column;gap:6px;font-size:13px}
.legend-in .lg{color:var(--ink)}
.sw-ex{width:22px;height:6px;border-radius:3px;background:var(--m-dirt);flex:none}
.sw-pr{width:22px;height:0;border-top:2.5px dashed var(--m-road-edge);flex:none}
.pchip{cursor:pointer;font-family:var(--f-num);font-size:12px;color:var(--ink)}
.pchip.on{border-color:var(--accent);color:var(--accent)}
@media (hover:hover){.pchip:hover{border-color:var(--accent);color:var(--accent)}}
.pchip.on{background:var(--accent-soft)}
.linkbtn{border:0;background:none;padding:0;font:600 15px var(--f-ui);color:var(--accent);cursor:pointer;text-align:left}
@media (hover:hover){.linkbtn:hover{text-decoration:underline}}
.ownerbox{display:flex;flex-direction:column;gap:8px;border:1px solid var(--line);border-radius:var(--r);padding:12px}
.swatch{width:10px;height:10px;border-radius:50%;display:inline-block;margin-right:6px;vertical-align:0}
.bar{height:8px;border-radius:8px;background:var(--surface-2);border:1px solid var(--line);overflow:hidden;display:flex}
.bar i{display:block;height:100%}
.bar .p{background:var(--ok)}.bar .q{background:var(--warn)}
.num{font-family:var(--f-num);font-variant-numeric:tabular-nums}
.money{font-variant-numeric:tabular-nums;white-space:nowrap}
.money .pdt{display:block;text-align:right;font-size:11px;line-height:1.2;color:var(--muted,#8a8a8a)}
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.stat{background:var(--surface-2);border-radius:8px;padding:8px 10px}
.stat .v{font-weight:600;font-size:15px;font-variant-numeric:tabular-nums}
.stat .k{font-size:11.5px;color:var(--muted)}
.list{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.li{display:flex;align-items:center;gap:10px;padding:8px 10px;border-top:1px solid var(--line);background:var(--surface)}
.li:first-child{border-top:0}
.li.click{cursor:pointer}
@media (hover:hover){.li.click:hover{background:var(--surface-2)}}
.li .grow{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pn{font-family:var(--f-num);font-weight:500;min-width:44px}
.seg{display:flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.seg button{border:0;background:var(--surface);padding:6px 9px;font-size:12px;cursor:pointer;border-left:1px solid var(--line)}
.seg button:first-child{border-left:0}
.seg.seg-fill>button{flex:1 1 0;min-width:0;padding-block:9px;font-size:13.5px;white-space:normal;line-height:1.25}   /* «Идея / Что-то не работает» — пополам на всю ширину (владелец 04.11) */
.seg button.on.v-paid{background:var(--ok);color:#fff}
.seg button.on.v-pledged{background:var(--warn);color:#1b1404}
.seg button.on.v-refused{background:var(--no);color:#fff}
.seg button.on.v-none{background:var(--surface-2);font-weight:600}
.big{font-family:var(--f-display);font-size:30px;font-weight:700;line-height:1;color:var(--accent)}
.note{background:var(--surface-2);border-radius:8px;padding:10px 12px;font-size:12.5px;color:var(--muted)}
.empty{border:1px dashed var(--line);border-radius:var(--r);padding:16px;color:var(--muted);text-align:center;font-size:13px}
.colors{display:flex;gap:6px}
.colors button{width:24px;height:24px;border-radius:50%;border:2px solid transparent;cursor:pointer;padding:0}
.colors button.on{border-color:var(--ink)}
.toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);background:var(--ink);color:var(--bg);padding:8px 14px;border-radius:8px;font-size:13px;z-index:30;pointer-events:none;box-shadow:0 4px 14px rgb(0 0 0 / .25)}

@media (max-width:820px){
  .body{display:flex;flex-direction:column;overflow-y:auto}
  .mapwrap{height:60vh;height:60dvh;flex:none}
  .panel{border-left:0;border-top:1px solid var(--line);overflow:visible}
  .sub{display:none}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
html{-webkit-text-size-adjust:100%}
body{margin:0}
[hidden]{display:none!important}
.acct{display:flex;align-items:center;gap:10px}
.who{display:flex;align-items:center;gap:8px;font-size:13px;max-width:180px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.who img{width:26px;height:26px;border-radius:50%}
.modal{position:fixed;inset:0;background:rgb(0 0 0 / .45);display:grid;place-items:center;z-index:40;padding:16px}
.modal-card{background:var(--surface);border-radius:14px;padding:20px;max-width:380px;width:100%;display:flex;flex-direction:column;gap:14px;box-shadow:0 10px 40px rgb(0 0 0 / .3)}
.check{display:flex;gap:8px;align-items:flex-start;font-size:13px;cursor:pointer}
.check input{margin-top:2px}
.claim{border:1px solid var(--line);border-radius:var(--r);padding:10px 12px;display:flex;flex-direction:column;gap:6px}
.audit-row{font-size:12.5px;padding:8px 10px;border-top:1px solid var(--line)}
.audit-row:first-child{border-top:0}
a.btn{text-decoration:none;display:inline-block}
@media (max-width:820px){.who span{display:none}}
a.btn{color:var(--ink)}
.plot.vt-yes{fill:var(--ok)}
.plot.vt-no{fill:#c8553d}
.dv-yes{background:var(--ok)}.dv-no{background:#c8553d}.dv-none{background:transparent;border:1.5px solid var(--muted)}
.seg2{display:flex;gap:6px;flex-wrap:wrap}
.exp{display:grid;grid-template-columns:auto 1fr auto;gap:4px 10px;align-items:center;padding:8px 10px;border-top:1px solid var(--line);font-size:13px}
.exp:first-child{border-top:0}
.exp img{width:44px;height:44px;object-fit:cover;border-radius:6px;cursor:zoom-in}
.thumb{max-width:100%;border-radius:8px;display:block}
.tabs{display:flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;width:max-content;max-width:100%}
.tabs button{border:0;background:var(--surface);padding:6px 12px;font-size:13px;cursor:pointer;border-left:1px solid var(--line)}
.tabs button:first-child{border-left:0}
.tabs button.on{background:var(--accent-soft);color:var(--accent);font-weight:600}
.debt{color:#c8553d}
.pin{cursor:pointer}
.pin-i{transform:scale(var(--ps,1))}
.pin path{fill:#e0592a;stroke:#fff;stroke-width:2}
.pin.st-work path{fill:var(--warn)}
.pin.on path{fill:var(--accent)}
.pin text{fill:#fff;font:700 15px var(--f-ui);text-anchor:middle;dominant-baseline:central;pointer-events:none}
details summary{cursor:pointer;color:var(--accent)}
@media (max-width:480px){.stats{grid-template-columns:1fr 1fr}.stat .k{overflow-wrap:anywhere}}
.me-dot{fill:#2f80ed;stroke:#fff;stroke-width:3px;vector-effect:non-scaling-stroke}
.me-acc{fill:color-mix(in srgb,#2f80ed 18%,transparent);stroke:#2f80ed;stroke-width:1px;vector-effect:non-scaling-stroke}
.mapctl button.on{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}
.plot.pick{fill:var(--hl-band)!important}
@media (max-width:480px){.logo{font-size:17px}}
.newsi{padding:10px 12px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:4px}
.newsi:first-child{border-top:0}
/* полный список новостей: раскладка только видимых (сотни длинных текстов считались целиком — ~300 мс на слабом телефоне) */
/* (content-visibility здесь не используем: в Safari ломает возврат на место после «Назад») */
.newsi.pin-n{background:color-mix(in srgb,var(--accent) 6%,var(--surface))}
.ntext{white-space:pre-wrap;font-size:13.5px;text-align:justify;-webkit-hyphens:auto;hyphens:auto}   /* новости, пояснения голосований — по ширине, как описание сбора (владелец 03.11) */
.ntext.clamp{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;cursor:pointer}
.admmenu{border:1px solid var(--line);border-radius:var(--r);padding:10px 12px}
.admmenu summary{font-weight:600;color:var(--ink)}
.admgrid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
.admgrid .btn{text-align:center}
.rtab{width:100%;border-collapse:collapse;font-size:12.5px;font-variant-numeric:tabular-nums}
.rtab td{padding:6px 4px;border-bottom:1px solid var(--line);vertical-align:top}
.rtab thead td{font-size:11px;color:var(--muted)}
.rtab td.r{text-align:right;white-space:nowrap}
.rtab td:first-child{min-width:7.5em}
.tscroll{overflow-x:auto;max-width:100%}
.rtab tr.tot td{font-weight:700;border-bottom:0}
.report{display:flex;flex-direction:column;gap:12px}
.ficon{font:700 10px var(--f-ui);background:var(--accent-soft);color:var(--accent);border-radius:6px;padding:8px 6px;letter-spacing:.04em}
.exp a{color:var(--ink);font-weight:500}
@media print{
  body.printing .top, body.printing .mapwrap, body.printing .noprint, body.printing .tip, body.printing .toast{display:none!important}
  body.printing .body{display:block}
  body.printing .panel{border:0;overflow:visible;padding:0;max-width:none}
  body.printing{background:#fff;color:#000}
}
.layersmenu{position:absolute;right:calc(58px + env(safe-area-inset-right,0px));top:12px;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:8px;box-shadow:0 4px 14px rgb(0 0 0 / .15);z-index:5;max-width:260px}
.zone polygon{fill:color-mix(in srgb,var(--zc) 38%,transparent);stroke:var(--zc);stroke-width:3px;vector-effect:non-scaling-stroke}
.heat{fill:url(#heatGrad)}
.heat.old{opacity:.35}
html{-webkit-tap-highlight-color:transparent}
@media (pointer:coarse){button:active,.btn:active,label.switch:active{filter:brightness(.92)}}   /* вместо системной вспышки — лёгкое затемнение под пальцем */   /* Chrome на телефоне при нажатии мигал квадратом вокруг кнопок шапки и объектов карты; у кнопок свои состояния нажатия */
.obj{cursor:pointer}
.gate-mk circle{fill:#fff;stroke:var(--accent);stroke-width:1.5px}.gate-mk path{fill:none;stroke:var(--accent);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.gate-mk{pointer-events:none}.gate-i{transform:scale(var(--okd,1))}   /* размер на экране — как у точек объектов (≈ 3–6 px), а не растёт с приближением */.gate-all circle{fill:#fff;opacity:.9}.stage.z-lo .gate-all{display:none}
/* на телефоне Chrome при нажатии подсвечивает прямоугольник вокруг элемента — у опоры с сектором камеры это большой квадрат на всю область (владелец 03.11); выбор и так виден */
.mapwrap,.mapwrap svg,.mapwrap svg *{-webkit-tap-highlight-color:transparent}
.obj-i{transform:scale(var(--oki,1))}
.obj-d{transform:scale(var(--okd,1))}
.obj .core{fill:var(--surface);stroke:var(--m-label);stroke-width:1.5px;vector-effect:non-scaling-stroke}
.obj .obj-hit{fill:transparent;stroke:none}
.obj.st-broken .core{stroke:#d0402c;stroke-width:2.5px;fill:#fde3dc}
.obj.st-planned .core{stroke-dasharray:2 2;fill:transparent}
.obj text{font-size:10px;text-anchor:middle;dominant-baseline:central;pointer-events:none}
.paybox .qr{width:180px;max-width:100%;align-self:center;background:#fff;padding:6px;border-radius:8px}
.paybox .qr svg{width:100%;height:auto;display:block}
.sel{user-select:all;-webkit-user-select:all;font-variant-numeric:tabular-nums}
label.check.li{padding:10px 12px}
.markmenu{position:absolute;z-index:6;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:10px;display:flex;flex-direction:column;gap:6px;min-width:180px;box-shadow:0 6px 18px rgb(0 0 0 / .2)}
.btn.armed,.linkbtn.armed{background:#c0392b!important;color:#fff!important;border-color:#c0392b!important}
@media (max-width:820px){
  input,select,textarea{font-size:16px}
  .btn{min-height:40px;padding:9px 14px}
  .seg button{padding:10px 10px}
  body{font-size:15px}
}
.net{fill:none;stroke:var(--lc);stroke-width:3.5px;vector-effect:non-scaling-stroke;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}
.net.planned{stroke-dasharray:8 6}
.net.on{stroke-width:6px}
.net-power10{stroke-width:4.5px}
.draft-net{stroke-dasharray:4 4;opacity:.8}
.net-hit{fill:none;stroke:transparent;stroke-width:18px;vector-effect:non-scaling-stroke;cursor:pointer;pointer-events:stroke}
.obj.on .core{stroke:var(--accent);stroke-width:3px}
.otypes{display:flex;flex-wrap:wrap;gap:6px}
.otypes .btn{font-size:12.5px;padding:6px 9px}
.nav{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;min-width:0}
.nav::-webkit-scrollbar{display:none}
.nav button{border:0;background:none;padding:8px 12px;border-radius:8px;font-weight:500;color:var(--muted);cursor:pointer;white-space:nowrap}
@media (hover:hover){.nav button:hover{color:var(--ink);background:var(--surface-2)}}
.nav button.on{color:var(--accent);background:var(--accent-soft)}
.nav .cnt{font-size:11px;background:var(--accent);color:var(--accent-ink);border-radius:10px;padding:1px 6px;margin-left:2px}
/* карта на страницах не убирается (display:none), а прячется с сохранением раскладки: возврат к карте не пересчитывает заново ~5000 её узлов */
.app.page .mapwrap{content-visibility:hidden;visibility:hidden;position:absolute;width:0;height:0;min-height:0;border:0;padding:0;margin:0}
.app.page .body{grid-template-columns:minmax(0,1fr);overflow-y:auto}
.app.page .panel{border-left:0;width:100%;max-width:860px;margin:0 auto;overflow:visible;padding-block:24px 40px}
.app.page{background:var(--bg)}
.hero{background:linear-gradient(135deg,color-mix(in srgb,var(--m-plot) 60%,var(--surface)),color-mix(in srgb,var(--m-forest) 70%,var(--surface)));border-radius:14px;padding:22px 20px;display:flex;flex-direction:column;gap:8px}
.hero-t{font-family:var(--f-display);font-size:28px;font-weight:700;color:var(--m-plot-ink);line-height:1.1}
.small-hero .hero-t{font-size:22px}
.hero-s{color:var(--m-plot-ink);opacity:.85}
.asec{display:flex;flex-direction:column;gap:6px}
.atext{white-space:pre-wrap;line-height:1.55}
.atext a{color:var(--accent)}
.fchips{display:flex;flex-wrap:wrap;gap:6px}
.fchips .chip{cursor:pointer;font-size:13px;padding:5px 11px;color:var(--ink)}
.fchips .chip.on{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}
.chip.radio input{display:none}
.chip.radio:has(input:checked){background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}
.adgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px}
.adcard{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--surface);cursor:pointer;text-align:left;padding:0}
@media (hover:hover){.adcard:hover{border-color:var(--accent)}}
.adcard img,.adph{width:100%;aspect-ratio:4/3;object-fit:cover;display:grid;place-items:center;font-weight:600}
.adb{display:flex;flex-direction:column;gap:3px;padding:10px 12px}
.adk{font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}
.adp{font-weight:700;font-variant-numeric:tabular-nums}
.adp.big2{font-size:22px}
.adphotos{display:flex;gap:8px;overflow-x:auto}
.adphotos img{height:180px;border-radius:10px;display:block}
.phx{position:relative}.phx img{height:90px}
.phx button{position:absolute;top:4px;right:4px;border:0;border-radius:50%;width:24px;height:24px;background:rgb(0 0 0 / .6);color:#fff;cursor:pointer}
.partners{display:flex;flex-direction:column;gap:10px}
.pblock{border:1px dashed var(--line);border-radius:12px;padding:12px 14px;display:flex;flex-direction:column;gap:8px;background:var(--surface-2);position:relative}
.plabel{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.pin2{display:flex;gap:12px;align-items:center}
.pin2 img{width:56px;height:56px;object-fit:contain;border-radius:8px;background:#fff}
.pmeta{font-size:11px;color:var(--muted)}
.sfoot{margin-top:24px;padding-top:14px;border-top:1px solid var(--line);font-size:12px;color:var(--muted);display:flex;flex-wrap:wrap;gap:6px 14px}
.sfoot a{color:var(--muted)}
@media (max-width:820px){
  .top{flex-wrap:wrap;row-gap:4px}
  .nav{order:5;width:100%;flex:1 0 100%}
  .app.page .panel{padding-block:16px 32px}
}
.adph{aspect-ratio:16/7!important;font-size:13px}
@media (max-width:520px){.adgrid{grid-template-columns:1fr 1fr;gap:8px}.adb{padding:8px 10px}.adb b{font-size:13.5px}}
.obj.dot .glow{fill:#ffd23f;opacity:.35;stroke:none}
.obj.dot.st-broken .core{fill:#d0402c;stroke:#fff}
.obj.dot.st-broken .glow{fill:#d0402c;opacity:.25}
.stage.z-lo .obj.dot .glow{display:none}
.net{stroke-width:2.5px}
.obj.dot .core{stroke:#fff;stroke-width:1.2px}
.obj .pin-c{fill:#3d3a35}
/* куда светит фонарь / смотрит камера: сектор под точкой — при наведении и у выбранного объекта */
.obj .aims{display:none;pointer-events:none}
.obj:hover .aims,.obj.on .aims{display:inline}
.stage.z-lo .obj:not(.on):hover .aims{display:none}   /* издалека сектор только у выбранного */
/* издалека простые опоры ЛЭП (без фонаря и камер) не показываем — их много, они закрывают карту; при приближении, у выбранной и пока правят карту (полоса снизу) — видны */
.mapwrap:not(:has(#drawbar:not([hidden]))) .stage.z-lo .obj.t-pole:not(.on):not(.st-broken){display:none}   /* неисправные видны всегда */
.obj .aim{stroke-width:1.2px;vector-effect:non-scaling-stroke}
.obj .aim-light{fill:rgba(255,205,40,.38);stroke:rgba(224,168,0,.55);stroke-width:.8px;vector-effect:non-scaling-stroke}
.aimed .btn.small{min-width:36px}
.obj .aim-cam{fill:rgba(0,145,181,.18);stroke:#0091b5;stroke-dasharray:4 3}
.obj.dot.st-broken .core{fill:#d0402c!important;stroke:#fff;stroke-width:2px}
.obj.dot.st-planned .core{fill:#fff!important;stroke:#555;stroke-dasharray:2 1.5}
.odot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px;vertical-align:0;border:1px solid rgb(0 0 0 / .15)}
.odot.big{width:14px;height:14px}
.olegend{display:flex;flex-direction:column;gap:4px;border-top:1px solid var(--line);padding-top:8px;font-size:12px;color:var(--muted)}
.olegend i{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px}
.olegend b{display:inline-block;width:14px;height:3px;margin-right:6px;vertical-align:3px}
/* issued address: house number on the map, full address in the card */
.plabels tspan.hs{fill:color-mix(in srgb,var(--accent) 75%,var(--m-plot-ink));font-weight:700}
.addr{font-weight:600;margin:2px 0 6px}

/* ---------- urgent alerts ---------- */
.alertbar{background:#fff3cd;border-bottom:1px solid #f0d77b;color:#4a3800}
.alertbar .al{display:flex;gap:10px;align-items:flex-start;padding:8px 16px;max-width:1400px}
.alertbar .al+.al{border-top:1px solid #f0d77b}
.al-i{flex:none;width:22px;height:22px;border-radius:50%;background:#e0a100;color:#fff;font-weight:800;display:grid;place-items:center;font-size:14px;margin-top:1px}
.al-t{flex:1;min-width:0;font-size:14px;line-height:1.35}.al-t span{opacity:.9}.al-u{display:block;font-size:12px;opacity:.7}
.al-x{flex:none;border:0;background:none;font-size:22px;line-height:1;color:inherit;opacity:.6;padding:0 4px;min-width:32px;min-height:32px}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .alertbar{background:#3a2f0b;border-color:#5a4a14;color:#ffe8a3}}
/* ---------- calendar ---------- */
.cal{border:1px solid var(--line);border-radius:12px;padding:10px;margin:10px 0}
.cal-h{font-weight:700;text-transform:capitalize;margin-bottom:6px}
.cal-g{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;text-align:center;font-size:13px}
.cal-g b{font-weight:500;color:var(--muted);font-size:11px;padding:2px 0}
.cal-g .cd{position:relative;padding:7px 0 9px;border-radius:8px}
.cal-g .cd.now{background:var(--accent-soft);font-weight:700}
.cal-g .cd.has{cursor:pointer;font-weight:600}
.cal-g .cd i{position:absolute;left:50%;bottom:3px;width:6px;height:6px;margin-left:-3px;border-radius:50%}
.evday{padding:8px 0}.evd{font-weight:700;text-transform:capitalize;margin-bottom:4px}
.ev{display:flex;gap:10px;align-items:flex-start;padding:6px 0}.evk{flex:none;width:10px;height:10px;border-radius:50%;margin-top:6px}
/* ---------- tables, dues, history ---------- */
.tbl{width:100%;border-collapse:collapse;font-size:14px;margin:8px 0}
.tbl th{font-weight:600;color:var(--muted);font-size:12px;text-align:left;padding:4px 6px;border-bottom:1px solid var(--line)}
.tbl td{padding:6px;border-bottom:1px solid var(--line);vertical-align:top}
.tbl .r{text-align:right;white-space:nowrap}
.okc{color:var(--ok);font-weight:600}.note.okn{border-color:var(--ok)}
.paidin{width:90px;text-align:right}
.tl{border-left:2px solid var(--line);margin:12px 0 12px 10px;padding-left:14px}
.tli{position:relative;display:flex;gap:10px;padding:6px 0}
.tlk{position:absolute;left:-27px;top:6px;width:24px;height:24px;border-radius:50%;background:var(--bg,#fff);border:1px solid var(--line);display:grid;place-items:center;font-size:12px}
.row.wrap{flex-wrap:wrap}
/* ---------- courier ---------- */
.courier .big{font-size:26px;font-weight:800;line-height:1.2;margin:4px 0}
.route{fill:none;stroke:#e5322d;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1 12;opacity:.95}
.route-start{fill:#e5322d;stroke:#fff;stroke-width:3}
@media print{.top,.nav,.mapwrap,.alertbar,#bk,#hPrint{display:none!important}.app,.app.page{display:block}.panel{position:static;overflow:visible;max-height:none;width:auto}}
/* header: the logo never wraps, the menu scrolls sideways with a soft edge */
.brand{flex:none}.logo{white-space:nowrap}
.nav{mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent);-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent);padding-right:24px}
.cal-h,.evd{text-transform:none}.cal-h::first-letter,.evd::first-letter{text-transform:uppercase}
.tbl input.paidin{width:90px;min-width:0;padding:4px 6px}
.tbl{display:block;overflow-x:auto}
/* ---------- mobile & touch audit ---------- */
input[type=date],input[type=time],input[type=month],input[type=datetime-local],input[type=tel],input[type=email],input[type=url]{border:1px solid var(--line);background:var(--surface-2);border-radius:8px;padding:7px 10px;width:100%;font:inherit;color:inherit;min-height:36px}
input[type=file]{font:inherit;font-size:13px;max-width:100%;color:var(--muted)}
input[type=file]::file-selector-button{border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:8px 12px;margin-right:8px;font:inherit;font-weight:500;color:var(--ink);cursor:pointer}
@media (pointer:coarse){
  .linkbtn{min-height:36px;padding-block:8px}
  .back{min-height:40px;padding:8px 0;font-size:14px}
  label.check{min-height:40px;align-items:center}
  label.check input[type=checkbox],label.check input[type=radio]{width:20px;height:20px;flex:none}
  .chip.pchip,.pchip{min-height:34px;padding:6px 12px}
  .tbl .linkbtn{min-height:32px}
  .al-x{min-width:40px;min-height:40px}
}
@media (max-width:820px){
  .top{padding-block:6px;gap:8px}
  .nav button{padding:6px 10px;font-size:14px}
  .switch{gap:5px;font-size:12px}.switch .sw-l{display:none}            /* на телефоне — короткая подпись «Правка» */
  .switch input{width:40px;height:24px}.switch input::after{width:18px;height:18px}.switch input:checked::after{left:19px}
  .alertbar .al{padding:6px 12px;gap:8px}
  .al-t{font-size:13px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
  .al-t.open{display:block}
  .al-u{display:inline;margin-left:6px}
  .al-i{width:18px;height:18px;font-size:12px}
  .courier .big{font-size:22px}
}

/* ================= calendar: schedule board ================= */
.ctoday{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:16px 0 12px}
.ctoday>div{background:var(--surface-2);border-radius:12px;padding:12px 14px;min-width:0}
.ctoday>div.has{background:var(--accent-soft)}
.ctoday span{display:block;font-size:12.5px;color:var(--muted)}
.ctoday b{display:block;margin-top:2px;font-weight:600;overflow:hidden;text-overflow:ellipsis}
.cweek{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;margin-bottom:6px}
.cwd{border:0;background:none;border-radius:10px;padding:6px 0 8px;display:flex;flex-direction:column;align-items:center;gap:1px;color:var(--ink);cursor:pointer;font:inherit}
.cwd span{font-size:11.5px;color:var(--muted)}
.cwd b{font-family:var(--f-display);font-weight:600;font-size:17px;line-height:1.2}
.cwd i{display:flex;gap:3px;height:6px}.cwd em{width:6px;height:6px;border-radius:50%}
.cwd.now{background:var(--ink);color:var(--surface)}.cwd.now span{color:inherit;opacity:.7}
.cwd.sel:not(.now){background:var(--surface-2)}
.cday-pop{background:var(--surface-2);border-radius:10px;padding:10px 12px;margin-bottom:10px;font-size:14px;display:grid;gap:4px}
.cchips{display:flex;gap:6px;flex-wrap:wrap;margin:12px 0}
.cchips button{border:1px solid var(--line);background:var(--surface);border-radius:20px;padding:6px 13px;font:inherit;font-size:13px;color:var(--ink);cursor:pointer}
.cchips button.on{background:var(--ink);border-color:var(--ink);color:var(--surface)}
.cchips.small-chips{margin:0}.cchips.small-chips button{padding:4px 10px;font-size:12.5px}
.chd{font-family:var(--f-display);font-size:13px;font-weight:600;color:var(--muted);margin-bottom:6px}
.croutine{border:1px dashed var(--line);border-radius:12px;padding:12px 14px;margin:6px 0 4px}
.crt{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;padding:4px 0;font-size:14px}
.crt span:not(.ckd){color:var(--muted);font-size:13px}
.ckd{display:inline-block;width:9px;height:9px;border-radius:50%;flex:none;margin-right:6px}
.crt .ckd{margin-right:0}
.csch{border-top:2px solid var(--ink);margin-top:14px}
.cmh{font-family:var(--f-display);font-size:13px;font-weight:600;color:var(--muted);padding:16px 0 4px}
.cmh::first-letter{text-transform:uppercase}
.crow{display:grid;grid-template-columns:58px 72px minmax(0,1fr) auto;gap:12px;align-items:start;padding:12px 0;border-bottom:1px solid var(--line);scroll-margin-top:80px}
.crow.old{opacity:.6}
.cdt{display:flex;flex-direction:column;align-items:center;border-radius:10px;background:var(--surface-2);padding:6px 0}
.cdt.now{background:var(--ink);color:var(--surface)}
.cdt b{font-family:var(--f-display);font-size:19px;line-height:1.15}.cdt span{font-size:11.5px;opacity:.75}
.ctm{font-weight:600;padding-top:8px;font-variant-numeric:tabular-nums}.ctm.any{font-weight:400;font-size:13px;color:var(--muted)}
.ctt{padding-top:6px;min-width:0}.ctt b{font-weight:600}.ctt>div:not(.cact){font-size:13.5px;color:var(--muted);margin-top:1px}
.cact{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-top:6px}
.cgo{border:1px solid var(--line);background:var(--surface);border-radius:20px;padding:4px 12px;font:inherit;font-size:13px;font-weight:600;color:var(--ink);cursor:pointer}
.cgo.on{background:var(--ok);border-color:var(--ok);color:#fff}
.clink{border:0;background:none;padding:0;font:inherit;font-size:13px;color:var(--accent);cursor:pointer}
.ctag{--kc:#888;margin-top:8px;font-size:12px;font-weight:600;border-radius:6px;padding:3px 8px;white-space:nowrap;color:var(--kc);background:color-mix(in srgb,var(--kc) 13%,transparent)}
.cpast{margin-top:12px}.cpast summary{cursor:pointer;color:var(--muted);font-size:14px;padding:8px 0}
.csub{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:22px 0 4px;padding-top:16px;border-top:1px solid var(--line)}
.csub .small{flex:1;min-width:200px}
@media (max-width:600px){
  .crow{grid-template-columns:52px minmax(0,1fr);gap:4px 12px}
  .crow .ctm{grid-column:2;grid-row:1;padding-top:4px;font-size:13px}
  .crow .ctt{grid-column:2;grid-row:2;padding-top:0}
  .crow .ctag{grid-column:2;grid-row:3;justify-self:start;margin-top:4px}
  .crow .cdt{grid-row:1/4}
  .ctoday{grid-template-columns:1fr}
}

/* ================= dues: summary first ================= */
.dsum{border-radius:12px;padding:12px 16px;margin:16px 0 4px;font-size:15px}
.dsum.is-debt{background:var(--accent-soft)}.dsum.is-clear{background:color-mix(in srgb,var(--ok) 12%,var(--surface))}
.dsum b{font-family:var(--f-display);color:var(--accent)}
.dfund{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 12px;width:100%;text-align:left;border:1px solid var(--line);border-radius:12px;padding:12px 16px;margin:4px 0 8px;background:var(--surface);color:var(--ink);font-size:15px;cursor:pointer}
.dfund u{color:var(--accent);text-underline-offset:3px}.dfund b{font-family:var(--f-display);color:var(--accent)}.dfund small{flex-basis:100%;color:var(--muted);font-size:13px}
.dstate{border-radius:16px;padding:18px 20px;margin:14px 0;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:14px 18px;align-items:start}
.dstate.is-debt{background:var(--accent-soft)}
.dstate.is-clear{background:color-mix(in srgb,var(--ok) 12%,var(--surface))}
.dstate.is-none{background:var(--surface-2)}
.dk{font-size:13.5px;color:var(--muted)}
.dv{font-family:var(--f-display);font-size:30px;font-weight:700;line-height:1.15;margin:2px 0 4px;letter-spacing:-.01em}
.dstate.is-debt .dv{color:var(--accent)}.dstate.is-clear .dv{color:var(--ok)}.dstate.is-none .dv{font-size:22px;color:var(--muted)}
.dwhy{font-size:14px}
.dyears{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px}
.dy{border:0;background:var(--surface);border-radius:7px;padding:4px 9px;font:inherit;font-size:13px;cursor:pointer;font-variant-numeric:tabular-nums}
.dy.ok{color:var(--ok)}.dy.no{color:var(--accent);font-weight:600}.dy.part{color:#9c6b00;font-weight:600}
.dbtns{display:flex;flex-direction:column;gap:8px;align-items:stretch;min-width:140px}
.dbtns .linkbtn{align-self:center}
.btn.p{background:var(--accent);border-color:var(--accent);color:#fff}
.dwhere{border:1px solid var(--line);border-radius:14px;padding:14px 16px;margin:18px 0}
.dw2{display:flex;gap:22px;flex-wrap:wrap;margin-bottom:8px;font-size:14px;color:var(--muted)}.dw2 b{color:var(--ink)}
.dwr{display:grid;grid-template-columns:minmax(0,1.2fr) 1fr auto;gap:10px;align-items:center;font-size:13.5px;padding:3px 0}
.dwr span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dwr i{height:8px;border-radius:4px;background:color-mix(in srgb,var(--accent) 55%,var(--surface))}
.dadm{border-top:1px solid var(--line);margin-top:24px;padding-top:18px}
.dring-wrap{display:grid;grid-template-columns:150px minmax(0,1fr);gap:22px;align-items:center;margin-top:10px}
.dring{--p:0;width:150px;height:150px;border-radius:50%;background:conic-gradient(var(--ok) calc(var(--p)*1%),var(--line) 0);display:grid;place-items:center}
.dring>div{width:114px;height:114px;border-radius:50%;background:var(--surface);display:grid;place-items:center;text-align:center;align-content:center}
.dring b{font-family:var(--f-display);font-size:26px;line-height:1}.dring span{font-size:12px;color:var(--muted);margin-top:4px}
.dnums b{font-family:var(--f-display);font-size:20px}.dnums>div:first-child span{color:var(--muted);margin-left:6px}
.dleg{display:flex;gap:14px;flex-wrap:wrap;font-size:13px;color:var(--muted);margin:8px 0 12px}
.dleg i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.dleg i.ok{background:var(--ok)}.dleg i.part{background:var(--warn)}.dleg i.no{background:var(--line)}
.dbtns2{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.ddl{display:grid;gap:2px}
.ddr{display:grid;grid-template-columns:52px minmax(0,1fr) auto;gap:12px;align-items:baseline;border:0;background:none;text-align:left;font:inherit;color:var(--ink);padding:8px 4px;border-bottom:1px solid var(--line);cursor:pointer}
.ddr b{font-family:var(--f-display);font-weight:600}
.ddr span{color:var(--muted);font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ddr em{font-style:normal;font-weight:600;color:var(--accent)}
@media (hover:hover){.ddr:hover{background:var(--surface-2)}}
.dcheck{margin-top:22px;border-top:1px solid var(--line);padding-top:10px}
.dcheck summary{cursor:pointer;color:var(--muted);font-size:14px;padding:6px 0}
@media (max-width:600px){
  .dstate{grid-template-columns:1fr;padding:16px}
  .dbtns{flex-direction:row;flex-wrap:wrap;min-width:0}
  .dbtns .btn{flex:1 1 auto}
  .dv{font-size:26px}
  .dring-wrap{grid-template-columns:1fr;justify-items:center;text-align:center}
  .dleg,.dbtns2{justify-content:center}
}
.tnum{font-variant-numeric:tabular-nums}
@media (max-width:600px){.cchips:not(.small-chips){flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin-inline:-16px;padding-inline:16px}.cchips::-webkit-scrollbar{display:none}.cchips button{flex:none}}


/* ================= season photo heroes ================= */
.ph-hero{position:relative;overflow:hidden;padding:0;min-height:220px;justify-content:flex-end;background:color-mix(in srgb,var(--m-forest) 55%,var(--surface))}
.ph-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.ph-shade{position:absolute;inset:0;background:linear-gradient(180deg,rgb(10 20 14 / 0) 20%,rgb(10 20 14 / .62) 100%)}
.ph-hero .hero-in{position:relative;padding:22px 22px 20px;display:flex;flex-direction:column;gap:8px;max-width:600px}
.ph-hero .hero-t,.ph-hero .hero-s{color:#fff;text-shadow:0 1px 10px rgb(0 0 0 / .35)}
.ph-hero .hero-s{font-size:15px;opacity:.95}
.ph-credit{position:absolute;right:10px;top:8px;font-size:11px;color:#fff;opacity:.8;text-decoration:none;background:rgb(0 0 0 / .28);padding:2px 7px;border-radius:10px}
.app.page .ph-hero{min-height:280px;margin-bottom:10px}
@media (max-width:820px){.ph-hero{min-height:200px}.app.page .ph-hero{min-height:220px}}
.phset{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:12px}
.phset figure{margin:0;display:flex;flex-direction:column;gap:6px}
.phset img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:10px;background:var(--surface-2)}
.phset figcaption{font-size:13px;display:flex;justify-content:space-between;align-items:baseline;gap:6px}
.phset figcaption b{font-weight:600}.phset figcaption span{color:var(--muted);font-size:12px}
.phset label.btn,.phset .linkbtn{width:100%;justify-content:center;text-align:center;box-sizing:border-box}

@media (pointer:coarse){.clink{min-height:34px;padding:6px 0}}

/* ---------- walking distance, legend, watercolour ---------- */
.walk-r{fill:none;stroke:#2f80ed;stroke-width:3;stroke-dasharray:14 10;vector-effect:non-scaling-stroke;opacity:.8}
.walk-r.near{fill:color-mix(in srgb,#2f80ed 6%,transparent);stroke-dasharray:none}
.walk-t{font-family:var(--f-ui);font-size:30px;font-weight:700;fill:#1d5fa8;text-anchor:middle;paint-order:stroke;stroke:#fff;stroke-width:6px}
.walk-n{font-family:var(--f-ui);font-size:26px;font-weight:600;fill:#1b2220;text-anchor:middle;paint-order:stroke;stroke:#fff;stroke-width:6px}
.mlegend{border-top:1px solid var(--line);padding-top:6px}.mlegend summary{cursor:pointer;font-size:13px;padding:4px 0}
.olegend em{display:inline-block;width:16px;height:11px;border-radius:3px;margin-right:6px;vertical-align:-1px}
.lg-plot{background:var(--m-plot);border:1px solid #fff}.lg-road{background:var(--m-road)}.lg-forest{background:var(--m-forest)}.lg-field{background:var(--m-field)}
.lg-water{background:var(--m-water);height:4px!important;vertical-align:2px!important}.lg-rail{background:repeating-linear-gradient(90deg,var(--m-rail) 0 3px,transparent 3px 6px);height:4px!important;vertical-align:2px!important}.lg-hw{background:var(--m-hw);height:6px!important;vertical-align:1px!important}
/* watercolour: soft, uneven edges on the surroundings and a paper tint */
.stage.paint #gBase{filter:url(#wcolor)}
.stage.paint #gPlots{filter:url(#wsoft)}
.stage.paint #ov{background:#f7f3e8}
/* ---------- where we are, passport, photo chronicle, street profile ---------- */
.where{width:100%;height:auto;display:block;margin:6px 0}
.wh-bg{fill:color-mix(in srgb,var(--m-ground) 70%,var(--surface))}
.wh-river{fill:none;stroke:var(--m-water);stroke-width:4;stroke-linecap:round;opacity:.7}
.wh-line{stroke:var(--muted);stroke-width:1.5;stroke-dasharray:4 5}.wh-arrow{stroke:var(--muted);stroke-width:1.5;stroke-dasharray:4 5;marker-end:none}
.wh-town{fill:var(--surface);stroke:var(--ink);stroke-width:2}.wh-me{fill:var(--accent)}.wh-me-h{fill:color-mix(in srgb,var(--accent) 22%,transparent)}
.wh-t{font:600 15px var(--f-ui);fill:var(--ink)}.wh-d{font:400 13px var(--f-ui);fill:var(--muted)}
.wh-mt{font:700 15px var(--f-display);fill:var(--accent);paint-order:stroke;stroke:var(--wh-bg,#e6efd8);stroke-width:5px;stroke-linejoin:round}.wh-far{font:600 13px var(--f-ui);fill:var(--muted);text-anchor:end}.wh-note{font:11px var(--f-ui);fill:var(--muted)}
.pass{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;margin:8px 0}
.pass div{background:var(--surface-2);border-radius:12px;padding:12px 14px;display:flex;flex-direction:column}
.pass b{font-family:var(--f-display);font-size:20px;line-height:1.2}.pass span{font-size:12.5px;color:var(--muted)}
.phup{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:10px 0 14px}.phup input[type=text]{flex:1;min-width:180px}.phup select{width:auto}
.phgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.phgrid figure{margin:0;display:flex;flex-direction:column;gap:6px}
.phgrid img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:12px;background:var(--surface-2);display:block}
.phgrid figcaption{display:flex;flex-direction:column;gap:2px;font-size:14px}
.profile{width:100%;height:auto;display:block;margin:4px 0 8px}
.pr-ground{stroke:var(--m-terr);stroke-width:2}.pr-road{fill:#8f9399}.pr-shoulder{fill:var(--m-road);stroke:var(--m-road-edge)}.pr-ditch{fill:color-mix(in srgb,var(--m-water) 30%,transparent);stroke:var(--m-water-ink);stroke-width:1.5}
.pr-t{font:15px var(--f-ui);fill:var(--muted);text-anchor:middle}.pr-m{font:600 16px var(--f-ui);fill:var(--ink);text-anchor:middle}
.pr-dim{stroke:var(--muted);stroke-width:1;fill:none}.pr-tot{font:600 15px var(--f-ui);fill:var(--muted);text-anchor:middle;paint-order:stroke;stroke:var(--surface);stroke-width:5px}
/* ---------- audit round 4: pay page, dues waiting, compact alerts ---------- */
.dy.wait{color:var(--warn,#9c6b00);font-style:italic}
.rtab td.cpyc{width:40px;text-align:right;padding-left:4px}.rtab .cpy{border:1px solid var(--line);background:var(--surface);color:var(--accent);border-radius:8px;width:36px;height:36px;font-size:17px;cursor:pointer}.rtab .cpy.done{color:var(--ok);border-color:var(--ok)}
.al-u{display:inline;font-size:12px;opacity:.75;font-weight:600;white-space:nowrap}
.al-more{flex:none;white-space:nowrap}
.btn.p{color:var(--accent-ink)}
@media (max-width:820px){
  .alertbar .al{align-items:center}
  .alertbar .al-t{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px}
  .alertbar .al-t.open{white-space:normal}
  .prow{width:100%}.prow .btn{flex:1;min-height:44px}
}
/* ---------- phone tab bar ---------- */
.tabbar{display:none}
@media (max-width:820px){
  .tabbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:40;background:var(--surface,#fff);border-top:1px solid var(--line);padding:2px 4px calc(2px + env(safe-area-inset-bottom))}
  .tabbar button{flex:1;min-height:52px;border:0;background:none;color:var(--muted);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:11px;font-weight:500;border-radius:10px}
  .tabbar button.on{color:var(--accent)}
  .tabsheet{position:fixed;right:8px;bottom:calc(62px + env(safe-area-inset-bottom));z-index:41;background:var(--surface,#fff);border:1px solid var(--line);border-radius:14px;box-shadow:0 10px 30px rgba(0,0,0,.18);padding:6px;display:flex;flex-direction:column;min-width:200px}
  .tabsheet button{border:0;background:none;text-align:left;padding:12px 14px;min-height:44px;font-size:15px;border-radius:8px;color:var(--ink)}
  .tabsheet button.on{color:var(--accent);background:var(--accent-soft)}
  header.top .nav{display:none}
  .app .body{padding-bottom:calc(58px + env(safe-area-inset-bottom))}
}
@media print{.tabbar,.tabsheet{display:none!important}}
.dsum.is-wait,.dstate.is-wait{background:color-mix(in srgb,#e0a100 14%,var(--surface))}
.dstate.is-wait .dv{color:#9c6b00;font-size:26px}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .dstate.is-wait .dv{color:#f0c35a}}
:root[data-theme="dark"] .dstate.is-wait .dv{color:#f0c35a}
.rtab td{vertical-align:middle}
@media (max-width:820px){.toast{bottom:calc(70px + env(safe-area-inset-bottom,0px));z-index:45;max-width:calc(100vw - 32px)}}
/* ---------- шторка со списком (sheet.js): снизу на телефоне, справа на компьютере ---------- */
.shroot{position:fixed;inset:0;z-index:90;--vvh:100vh;--kb:0px}
.sh-bg{position:absolute;inset:0;background:rgb(0 0 0 / .42);opacity:0;touch-action:none;overscroll-behavior:contain}
.shroot.open .sh-bg{opacity:1}
.sh{position:absolute;left:0;right:0;bottom:var(--kb);max-height:calc(var(--vvh) * .92);max-height:min(92dvh,calc(var(--vvh) * .92));display:flex;flex-direction:column;background:var(--surface);color:var(--ink);
  border-radius:16px 16px 0 0;box-shadow:0 -8px 30px rgb(0 0 0 / .22);transform:translateY(105%);outline:none;padding-left:env(safe-area-inset-left,0px);padding-right:env(safe-area-inset-right,0px)}
.shroot.open .sh{transform:none}
.shroot.anim .sh{transition:transform .22s cubic-bezier(.2,.8,.3,1)}.shroot.anim .sh-bg{transition:opacity .22s}
.sh-top{flex:none;touch-action:none;cursor:grab;user-select:none;-webkit-user-select:none}
.sh-grab{display:flex;justify-content:center;padding:8px 0 2px}.sh-grab span{width:40px;height:5px;border-radius:3px;background:var(--line)}
.sh-h{display:flex;align-items:center;gap:8px;padding:0 6px 6px 16px;border-bottom:1px solid var(--line);zoom:var(--fz,1)}
.sh-h h2{flex:1;margin:0;font:600 17px/1.3 var(--f-display);min-width:0;overflow-wrap:anywhere}
.sh-x{flex:none;width:44px;height:44px;border:0;background:none;color:var(--muted);font-size:20px;border-radius:10px;cursor:pointer}
@media (hover:hover){.sh-x:hover{background:var(--surface-2);color:var(--ink)}}
.sh-b{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding:12px 16px 16px;zoom:var(--fz,1)}
.sh-b>*+*{margin-top:12px}
.sh-f{flex:none;border-top:1px solid var(--line);padding:10px 16px calc(10px + env(safe-area-inset-bottom,0px));background:var(--surface);zoom:var(--fz,1)}
.sh-b:last-child{padding-bottom:calc(16px + env(safe-area-inset-bottom,0px))}
.shroot:has(.sh-f:not([hidden])) .sh-b{padding-bottom:16px}
@media (min-width:821px){
  .sh{left:auto;top:0;bottom:0;width:min(440px,100vw);max-height:none;border-radius:14px 0 0 14px;box-shadow:-8px 0 30px rgb(0 0 0 / .18);transform:translateX(105%)}
  .sh-top{cursor:default}.sh-grab{display:none}.sh-h{padding:12px 8px 10px 20px}.sh-b{padding:14px 20px 20px}
}
@media (prefers-reduced-motion:reduce){.shroot.anim .sh,.shroot.anim .sh-bg{transition:none}}
@media print{.shroot{display:none!important}}
.sh-lock .tohome,.sh-lock .installbar{visibility:hidden}
/* строка-сводка на странице, открывает шторку */
.sumline{display:flex;align-items:center;gap:10px;width:100%;min-height:48px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);color:var(--ink);text-align:left;cursor:pointer;font:inherit}
.sumline .sl-i{flex:none;width:22px;text-align:center}.sumline .sl-t{flex:1;min-width:0;overflow-wrap:anywhere}
.sumline .sl-t b{font-weight:600}.sumline .sl-t .muted{font-weight:400}
.sumline .sl-go{flex:none;color:var(--muted);font-size:20px;line-height:1}
@media (hover:hover){.sumline:hover{border-color:var(--accent)}}
.sumline+.bar,.sumline+.small{margin-top:6px}
.sh-filt{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.sh-more{width:100%}
.print-only{display:none}
/* ---------- телефон: вкладки, окна, подсказки, мелкий текст ---------- */
/* вкладки-переключатели листаются вбок, подписи в одну строку */
.seg{max-width:100%;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;flex-wrap:nowrap}
.seg::-webkit-scrollbar{display:none}
.seg button{flex:none;white-space:nowrap}
.seg i{font-style:normal;opacity:.7;margin-left:2px}
/* окна (вход) — над нижним меню, последняя кнопка доступна над панелью и клавиатурой */
div.modal{z-index:95;padding-bottom:max(24px,calc(16px + env(safe-area-inset-bottom,0px)))}
/* всплывающая подсказка: короткая — в одну строку, над нижним меню; при открытой шторке — сверху */
.toast{width:max-content;max-width:calc(100vw - 32px);text-align:center;z-index:97}
.sh-lock .toast{bottom:auto;top:calc(12px + env(safe-area-inset-top,0px))}
/* заголовки окон и ссылки рядом с подзаголовком */
.pdcard h3{font:600 17px/1.3 var(--f-display);text-transform:none;letter-spacing:0;color:var(--ink)}
.row:has(> h3) > .linkbtn{font-size:13px;font-weight:500}
/* ряды кнопок на узком экране — сетка в две колонки, последняя нечётная — на всю ширину */
@media (max-width:600px){
  .row.btns{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  /* длинная надпись переносится на вторую строку, а не обрезается многоточием */
  .row.btns>*{white-space:normal;min-width:0;text-align:center;justify-content:center;overflow-wrap:anywhere;line-height:1.2}
  .row.btns>:last-child:nth-child(odd){grid-column:1/-1}
  /* календарь: в клетках — только точки событий, названия — в списке под календарём */
  button.cmc{flex-direction:row;flex-wrap:wrap;align-content:flex-start;gap:3px}
  button.cmc b{flex-basis:100%}
  button.cmc em{font-size:0;width:8px;height:8px;padding:0;border:0;border-radius:50%;background:var(--kc);display:block;flex:none;overflow:hidden}
  button.cmc i{font-size:0;line-height:8px}button.cmc i::before{content:"+";font-size:12px;line-height:8px}
  /* легенда карты: сворачивается, вне сбора не показывается */
  .legend.lg-off{display:none}
  .legend .lg-t{cursor:pointer}.legend .lg-t::after{content:" ▾";color:var(--muted)}
  .legend:not(.open) .lg{display:none}.legend:not(.open) .lg-t{width:auto}.legend.open .lg-t::after{content:" ▴"}
}
/* касание пальцем: кнопки-фишки и ссылки-кнопки не меньше 40 px */
@media (pointer:coarse){button.chip.chip,label.chip.chip,a.chip.chip,.pchip.pchip,.linkbtn.linkbtn,.who.who{min-height:40px}button.chip.chip,a.chip.chip{display:inline-flex;align-items:center}}
/* мелкий текст — не меньше 12 px */
.mapwrap .osmattr{font-size:12px}
.nav .cnt,.top .who-c{font-size:12px}
.panel .helpimgs figcaption{font-size:max(12px,.85em)}
@media (max-width:600px){.mapwrap .dk-dir{font-size:12px}}
/* «Режим правки» на телефоне — одна кнопка «✎ Правка», нажата — залита цветом */
@media (max-width:820px){
  header.top .switch{flex-direction:row;gap:0;min-height:40px;padding:0 8px;flex:none;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink);font-size:13px;font-weight:500}
  header.top .switch input{position:absolute;width:1px;height:1px;opacity:0;margin:0;pointer-events:none}
  header.top .switch .sw-s{display:inline;font-size:12.5px;line-height:1;white-space:nowrap}
  header.top .switch .sw-s::before{content:"✎ "}
  header.top .switch:has(input:checked){background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
  header.top .switch:has(input:focus-visible){outline:2px solid var(--focus);outline-offset:2px}
}
@media (max-width:380px){header.top{gap:4px}}
@media (max-width:359px){header.top .switch .sw-s{display:inline;font-size:0}header.top .switch .sw-s::before{content:"✎";font-size:15px}}
@media (max-width:600px){.row.btns>.btn{padding-inline:8px;font-size:14px}}
.mback{display:none}
@media (max-width:820px){.mback{display:inline-flex}}
/* задача: строка «На карте» раскрывается на месте */
.mapsum>summary{color:var(--ink);font-size:15px;cursor:pointer;min-height:48px;display:flex;align-items:center;gap:6px;padding:8px 12px;border:1px solid var(--line);border-radius:var(--r);list-style:none}
.mapsum>summary::-webkit-details-marker{display:none}
.mapsum>summary::after{content:"▾";margin-left:auto;color:var(--muted)}.mapsum[open]>summary::after{content:"▴"}
.mapsum>summary b{font-weight:600}
/* настройки: свёрнутые группы */
.setsec{border:1px solid var(--line);border-radius:var(--r);background:var(--surface)}
.setsec>summary{cursor:pointer;min-height:48px;display:flex;align-items:center;padding:10px 14px;font-weight:600;font-size:15px;list-style:none}
.setsec>summary::-webkit-details-marker{display:none}
.setsec>summary::after{content:"▾";margin-left:auto;color:var(--muted)}.setsec[open]>summary::after{content:"▴"}
.setsec>.setbody{padding:0 14px 14px}
.panel .setsec+.setsec{margin-top:8px}
/* пользователи: колонки строк совпадают */
@media (min-width:601px){div.urow{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr) 10.5em 8em 5em 7.5em 16px}}
.urow .uph{white-space:nowrap;font-variant-numeric:tabular-nums}
.urow .ui{overflow:hidden}
@media (max-width:600px){.urow .uph{display:none}}
@media print{.print-only{display:block!important}.sumline{display:none!important}}
/* ---------- login through the bot ---------- */
#botLogin .btn.big{display:block;text-align:center;padding:12px 16px;font-size:16px;text-decoration:none}
.loginqr{display:flex;gap:12px;align-items:center}
.loginqr svg{width:132px;height:132px;flex:none;background:#fff;border-radius:8px}
#botLogin a:not(.btn){color:var(--accent)}
#phoneLogin .btn.big{display:block;width:100%;text-align:center;padding:12px 16px;font-size:16px;text-decoration:none}
.callbox{display:flex;flex-direction:column;gap:8px}
.phfield{display:flex;align-items:stretch}
.phfield .phpre{display:flex;align-items:center;padding:0 10px;border:1px solid var(--line);border-right:0;border-radius:10px 0 0 10px;background:var(--surface-2);font-weight:600;color:var(--ink)}
.phfield input{flex:1;border-top-left-radius:0!important;border-bottom-left-radius:0!important;min-width:0}
#tgOpen{font-size:13px;color:var(--muted);font-weight:500}
.bcodes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;margin:8px 0}
.bcodes code{font-size:15px;background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:4px 8px;text-align:center;letter-spacing:.05em}
button.who{display:inline-flex;align-items:center;gap:6px;color:var(--ink);font-weight:600}
.pchecks{display:flex;flex-direction:column;gap:4px}
.uperms{border-top:1px solid var(--line);padding-top:6px;display:flex;flex-direction:column;gap:6px}
#dUAdd>summary{list-style:none;display:inline-flex;width:auto}#dUAdd>summary::-webkit-details-marker{display:none}
details.ownerbox{display:block}details.ownerbox>*+*{margin-top:8px}details.ownerbox>summary{cursor:pointer}
.tsteps{display:flex;flex-direction:column;gap:14px;margin-top:4px}
.tstep{display:grid;grid-template-columns:26px 1fr;gap:10px;align-items:start}
.tstep .tnum{width:26px;height:26px;border-radius:50%;background:var(--accent);color:#fff;display:grid;place-items:center;font-weight:600;font-size:14px}
.tqr svg{width:168px;height:168px;display:block;background:#fff;border-radius:8px;padding:4px;border:1px solid var(--line)}
.tkey{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.tkey code{font-size:15px;letter-spacing:.04em;padding:6px 10px;background:var(--surface-2);border:1px solid var(--line);border-radius:8px;word-break:normal;overflow-wrap:normal;white-space:normal}
.tcode{display:flex;gap:8px;max-width:340px}
.tcode input{flex:1;min-width:0;font-size:20px;letter-spacing:.3em;text-align:center;font-variant-numeric:tabular-nums}
.tsteps a:not(.btn){color:var(--accent)}

/* спутниковая подложка */
#gSat,#gSatHi{display:none}
.stage.sat #gSat,.stage.sat #gSatHi{display:inline}
.stage.sat #gBase>*:not(defs){display:none}
.stage.sat #gStreets{display:none}
.stage.sat .plot{stroke:rgba(255,255,255,.85)}
.stage.sat .plot:not(.sel):not(.hov):not(.s-paid):not(.s-pledged):not(.s-refused):not(.pick):not(.vt-yes):not(.vt-no){fill:rgba(255,255,255,.04)}
.stage.sat .plot.hov{fill:rgba(255,255,255,.28)}
.stage.sat .plot.sel{fill:color-mix(in srgb,var(--hl-band) 55%,transparent)}
.stage.sat .plot.s-paid{fill:color-mix(in srgb,var(--ok) 55%,transparent)}
.stage.sat .plot.s-pledged{fill:color-mix(in srgb,var(--warn) 55%,transparent)}
.stage.sat .plabels text{fill:#fff;paint-order:stroke;stroke:rgba(0,0,0,.65);stroke-width:3px}
.stage.sat #gBld{display:none}
.satattr{position:absolute;right:6px;bottom:4px;font-size:10px;color:#fff;background:rgba(0,0,0,.45);padding:1px 5px;border-radius:4px;pointer-events:none;display:none}
.mapwrap:has(.stage.sat) .satattr{display:block}
.wh-road{fill:none;stroke:color-mix(in srgb,var(--accent) 70%,var(--ink));stroke-width:2.6;stroke-linejoin:round;stroke-linecap:round;opacity:.75}
.wh-road.far{stroke-dasharray:6 5;opacity:.55}
.wh-far{text-anchor:start}
/* телефон: кнопки-фильтры и чипы не меньше 38 px по высоте — по ним удобно попадать пальцем */
@media (pointer: coarse){button.chip,.fchips .chip,.cchips button,.seg button,.tabs button{min-height:38px}.linkbtn.small{padding:6px 2px}}

/* размер текста: увеличиваем панель с текстом (карта и шапка не меняются) */
.panel{zoom:var(--fz,1)}
.fz-big .tabbar,.fz-big .sheet{zoom:var(--fz,1)}
.fzbtn{border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:10px;height:36px;min-width:42px;padding:0 8px;font:600 15px var(--f-ui);cursor:pointer;flex:none}
.fzbtn[data-k="1"]{font-size:17px}.fzbtn[data-k="2"]{font-size:19px;border-color:var(--accent);color:var(--accent)}

.pst-sale{background:color-mix(in srgb,#f0a500 22%,var(--surface));border-color:#e0a000}
.pst-abandoned{background:color-mix(in srgb,#888 18%,var(--surface))}
.pst-debt{background:color-mix(in srgb,var(--no,#c8553d) 16%,var(--surface));border-color:var(--no,#c8553d)}
.utilbox{display:flex;flex-wrap:wrap;gap:4px 12px}

/* сводка */
.sbars{width:100%;height:auto;max-height:240px;display:block}.sb-in{fill:var(--ok)}.sb-out{fill:color-mix(in srgb,var(--no,#c8553d) 80%,transparent)}.sb-m{font:11px var(--f-ui);fill:var(--muted);text-anchor:middle}
.sumlg{display:inline-block;width:10px;height:10px;border-radius:2px;vertical-align:-1px}.sumlg.sb-in{background:var(--ok)}.sumlg.sb-out{background:color-mix(in srgb,var(--no,#c8553d) 80%,transparent)}
.sbar{display:flex;height:14px;border-radius:7px;overflow:hidden;background:var(--line)}.sbar .s-full{background:var(--ok)}.sbar .s-part{background:var(--warn)}.sbar .s-none{background:#d9826f}
tr.click{cursor:pointer}@media (hover:hover){tr.click:hover td{background:var(--surface-2)}}
/* телефон: шапка в одну строку — «Aa», переключатель правки и вход ужимаются */
@media (max-width:600px){.top{gap:8px}.fzbtn{height:34px;min-width:34px;padding:0 6px;font-size:13px}.fzbtn[data-k="1"]{font-size:14px}.fzbtn[data-k="2"]{font-size:15px}.acct{flex:none}.top .acct .btn{padding-inline:10px}}
@media (max-width:380px){.logo{font-size:15px}}

/* окрестности (OpenStreetMap) */
.e-grass{fill:var(--m-grass)}.e-allot{fill:color-mix(in srgb,var(--m-plot) 45%,var(--m-ground))}
.e-res{fill:color-mix(in srgb,var(--m-terr) 70%,var(--m-ground))}.e-ind{fill:color-mix(in srgb,var(--m-road) 55%,var(--m-ground))}.e-cem{fill:color-mix(in srgb,var(--m-forest) 40%,var(--m-ground))}
.e-water{fill:var(--m-water)}.e-stream{fill:none;stroke:var(--m-water);stroke-width:4;stroke-linecap:round;stroke-linejoin:round}
.e-r3{fill:none;stroke:color-mix(in srgb,var(--m-road) 80%,var(--m-ground));stroke-width:5;stroke-linecap:round;stroke-linejoin:round}
.e-r2c{fill:none;stroke:var(--m-road-edge);stroke-width:12;stroke-linecap:round;stroke-linejoin:round}.e-r2{fill:none;stroke:var(--m-road);stroke-width:9;stroke-linecap:round;stroke-linejoin:round}
.e-bld{fill:color-mix(in srgb,var(--m-road-edge) 70%,var(--m-terr));stroke:color-mix(in srgb,var(--m-road-edge) 80%,#000);stroke-width:.8}
.b-hw-edge,.b-hw{stroke-linecap:round;stroke-linejoin:round}
.b-label.place{font-style:normal;font-size:calc(52px * var(--lz,1));font-weight:600;letter-spacing:.04em;opacity:.8}.b-label.small{font-size:24px;font-style:normal}
.fade{pointer-events:none}.fade-s0{stop-color:var(--m-ground);stop-opacity:1}.fade-s1{stop-color:var(--m-ground);stop-opacity:0}
.stage .b-label.big{font-size:calc(34px * var(--lz,1))}
.osmattr{position:absolute;right:6px;bottom:4px;font-size:10px;color:var(--muted);background:color-mix(in srgb,var(--surface) 75%,transparent);padding:1px 5px;border-radius:4px;pointer-events:none}
.mapwrap:has(.stage.sat) .osmattr,.mapwrap:has(.stage.raster) .osmattr{display:none}
.sw-s{display:none}@media (max-width:820px){.switch .sw-s{display:inline}.switch .sw-l{display:none}}
/* «добавить на экран» */
.installbar{position:fixed;left:12px;right:12px;bottom:calc(76px + env(safe-area-inset-bottom,0px));z-index:60;background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:0 8px 24px rgba(0,0,0,.18);padding:12px 14px;display:flex;gap:12px;align-items:center}
.installbar img{width:40px;height:40px;border-radius:10px;flex:none}.installbar .t{flex:1;font-size:14px;line-height:1.35}.installbar .t b{display:block}
.installbar .x{border:0;background:none;font-size:22px;color:var(--muted);padding:4px 6px;cursor:pointer}
@media (min-width:821px){.installbar{left:auto;right:calc(16px + env(safe-area-inset-right,0px));bottom:calc(16px + env(safe-area-inset-bottom,0px));max-width:380px}}
/* компас: в какую сторону смотрит телефон */
.me-cone{fill:color-mix(in srgb,#2f80ed 30%,transparent);stroke:none}
@media (max-width:430px){.top{gap:6px}.logo{font-size:15.5px}.switch .sw-s{font-size:11px}.top .acct .btn{padding-inline:8px;font-size:13px}}
@media (max-width:430px){.switch{flex-direction:column;gap:1px}.switch .sw-s{font-size:10px;line-height:1}.switch input{width:36px;height:21px}.switch input::after{width:15px;height:15px}.switch input:checked::after{left:18px}}
@media (max-width:359px){.switch .sw-s{display:none}.logo{font-size:14px}}
@media (max-width:359px){.top{padding-left:10px;padding-right:10px;gap:5px}.fzbtn{min-width:30px;padding:0 4px}.top .acct .btn{padding-inline:6px}}
/* фон «Где мы» */
.wb-wood{fill:color-mix(in srgb,var(--m-forest) 55%,var(--m-ground));stroke:none}
.wb-urban{fill:color-mix(in srgb,#c9a98a 45%,var(--surface));stroke:color-mix(in srgb,#a07c5a 40%,transparent);stroke-width:.6}
.wb-water{fill:var(--m-water);opacity:.75}.wb-river{fill:none;stroke:var(--m-water);stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;opacity:.8}
.wb-rail{fill:none;stroke:color-mix(in srgb,var(--ink) 35%,transparent);stroke-width:1;stroke-dasharray:3 3}
.wb-hw{fill:none;stroke:color-mix(in srgb,#e0a100 70%,var(--surface));stroke-width:2.2;stroke-linecap:round;opacity:.8}
.wh-town{fill:var(--surface);stroke:var(--ink);stroke-width:2.4}
.wh-t,.wh-d{paint-order:stroke;stroke:color-mix(in srgb,var(--surface) 85%,transparent);stroke-width:4px;stroke-linejoin:round}

/* меню под именем */
.acct{position:relative}
button.who{display:flex;align-items:center;gap:6px;border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:10px;height:36px;padding:0 10px;font:500 14px var(--f-ui);cursor:pointer;max-width:220px}
button.who img{width:24px;height:24px;border-radius:50%}.who-n{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.who-c{font-size:11px;color:var(--muted)}
.memenu{position:absolute;right:0;top:calc(100% + 6px);z-index:80;min-width:240px;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:0 10px 30px rgba(0,0,0,.16);padding:6px;display:flex;flex-direction:column}
.memenu[hidden]{display:none}
.memenu .mm-h{font:600 13px var(--f-ui);color:var(--muted);padding:8px 10px 6px;border-bottom:1px solid var(--line);margin-bottom:4px}
.memenu button{text-align:left;border:0;background:none;color:var(--ink);font:15px var(--f-ui);padding:10px;border-radius:8px;cursor:pointer;min-height:40px}
@media (hover:hover){.memenu button:hover{background:var(--surface-2)}}.memenu .mm-out{color:var(--accent);border-top:1px solid var(--line);border-radius:0 0 8px 8px;margin-top:4px}
@media (max-width:820px){.who-n,.who-c{display:none}button.who{padding:0 8px}}
.aboutnav{display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 6px}.aboutnav:empty{display:none}
.mapctl .zidea{background:var(--accent);color:#fff;border-color:var(--accent)}
@media (hover:hover){.mapctl .zidea:hover{color:#fff;filter:brightness(1.1)}}
.shape-pin{stroke:#fff;stroke-width:1.5;fill-opacity:.95}
.ptpl{margin:4px 0}.ptpl .chip{cursor:pointer;border:1px solid var(--line)}.ptpl .chip.on{background:var(--accent);color:#fff;border-color:var(--accent)}
.ptpl{flex-wrap:wrap;overflow:visible}
.mypay{border:1px solid var(--line);border-radius:14px;padding:12px 14px;display:flex;flex-direction:column;gap:8px;background:var(--surface)}
.mypay.due{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,var(--surface))}
.mypay .btn{align-self:flex-start}
/* календарь: три месяца сеткой */
.cmonths{display:grid;gap:14px;margin:6px 0 4px}
.cmh2{font-family:var(--f-display);font-weight:600;font-size:16px;margin:0 0 6px}
.cmh2::first-letter{text-transform:uppercase}
.cgrid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:3px}
.cwh{font-size:11px;color:var(--muted);text-align:center;padding:0 0 2px}.cwh.we{color:var(--accent)}
.cmc{min-height:56px;min-width:0;border:0;background:var(--surface-2);border-radius:8px;padding:3px 3px 4px;display:flex;flex-direction:column;align-items:stretch;gap:2px;text-align:left;font:inherit;color:var(--ink);cursor:pointer;overflow:hidden}
.cmc b{font-size:12px;font-weight:600;line-height:1.2;padding-left:1px}
.cmc.we b{color:var(--accent)}
.cmc em{font-style:normal;font-size:10.5px;line-height:1.15;background:color-mix(in srgb,var(--kc) 16%,var(--surface));border-left:2px solid var(--kc);border-radius:3px;padding:1px 2px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word;hyphens:auto}
.cmc i{font-style:normal;font-size:10.5px;color:var(--muted);padding-left:2px}
.cmc.now{box-shadow:inset 0 0 0 2px var(--ink)}
.cmc.past{opacity:.5}
.cmc.sel{box-shadow:inset 0 0 0 2px var(--accent)}
.cmc.blank{background:none;cursor:default}
@media (hover:hover){.cmc:not(.blank):hover{background:color-mix(in srgb,var(--accent) 8%,var(--surface-2))}}
.cday-pop .click{cursor:pointer}@media (hover:hover){.cday-pop .click:hover{color:var(--accent)}}
.cmon .cday-pop{margin-top:6px}
@media (min-width:900px){.cmc{min-height:70px}.cmc em{font-size:10.5px}.cmc b{font-size:13px}}
.contract{border:1px solid var(--line);border-radius:14px;padding:12px 14px;background:var(--surface)}
.warnnote{border-color:var(--warn,#c77700);background:color-mix(in srgb,var(--warn,#c77700) 8%,var(--surface))}
/* типографика: таблицы, мелкие ссылки, списки выездов */
.rtab td:first-child{min-width:42%}
.rtab .linkbtn{font-size:13px;font-weight:600;line-height:1.3}
.linkbtn.small{font-size:13.5px;font-weight:600}
@media (max-width:520px){.exp:has(> .row .btn.primary){grid-template-columns:1fr!important}.exp>.row:has(.btn.primary){justify-content:flex-start}}
.panel .chips + p{margin-top:8px}
.whoami{display:grid;gap:8px;margin-top:8px}
.whoopt{display:flex;gap:12px;align-items:flex-start;text-align:left;border:1px solid var(--line);background:var(--surface);border-radius:14px;padding:12px 14px;font:inherit;color:var(--ink);cursor:pointer;width:100%}
.whoopt b{display:block;font-size:15px;margin-bottom:2px}.whoopt .wi{font-size:24px;line-height:1}
.whoopt.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,var(--surface))}
@media (hover:hover){.whoopt:hover{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,var(--surface))}}
/* «Услуги» */
.mtabs{margin-bottom:10px}
.prov{border:1px solid var(--line);border-radius:14px;padding:12px 14px;display:flex;flex-direction:column;gap:8px;background:var(--surface);margin:8px 0}
.prov.off{opacity:.75;border-style:dashed}
.pvn{font-size:16px}.pvph{width:56px;height:56px;object-fit:cover;border-radius:10px;flex:none;margin-right:10px}
.rec{background:color-mix(in srgb,var(--ok,#2b9450) 14%,var(--surface));color:var(--ink);border-radius:999px;padding:3px 9px;font-size:13px;font-weight:600;white-space:nowrap}
.offers{display:grid;gap:8px}
.offer{display:grid;grid-template-columns:auto 1fr;gap:10px;align-items:start;border-top:1px solid var(--line);padding-top:8px}
.offer img{width:72px;height:72px;object-fit:cover;border-radius:8px}
.offer:not(:has(img)){grid-template-columns:1fr}
.actbars{display:grid;grid-template-columns:repeat(12,1fr);gap:3px;height:70px;align-items:end;margin:6px 0}
.actbars span{display:flex;flex-direction:column;justify-content:flex-end;height:100%;align-items:center;gap:2px}
.actbars i{display:block;width:100%;background:var(--ok,#2b9450);border-radius:3px 3px 0 0;min-height:1px}
.actbars b{font-size:10px;color:var(--muted);font-weight:500}
.wh-f0{stop-color:var(--wh-fade,#e7efd7);stop-opacity:0}.wh-f1{stop-color:var(--wh-fade,#e7efd7);stop-opacity:1}
.where{--wh-fade:color-mix(in srgb,var(--m-ground) 70%,var(--surface))}
/* «О посёлке» */
.acards{display:grid;gap:10px}
@media (min-width:900px){.acards{grid-template-columns:1fr 1fr}.acards .acard:has(.aphones){grid-column:1/-1}}
.acard{border:1px solid var(--line);border-radius:14px;padding:14px 16px;background:var(--surface)}
.acard h2{display:flex;align-items:center;gap:8px;font-size:18px;margin:0}.aic{font-size:18px}
.aphones{display:grid;gap:0}
.aph{display:grid;gap:4px;padding:10px 0;border-top:1px solid var(--line)}.aph:first-child{border-top:0;padding-top:4px}
.aph b{font-size:14px}
.aph div,.ahw div{line-height:1.6}
a.tel{display:inline-block;white-space:nowrap;font-weight:600;color:var(--accent);text-decoration:none;border:1px solid color-mix(in srgb,var(--accent) 35%,var(--line));border-radius:999px;padding:1px 10px;margin:1px 2px 1px 0;background:color-mix(in srgb,var(--accent) 5%,var(--surface))}
@media (hover:hover){a.tel:hover{background:color-mix(in srgb,var(--accent) 12%,var(--surface))}}
.ahow{display:grid;gap:10px}.ahw{display:grid;grid-template-columns:28px 1fr;gap:8px;align-items:start}.ahi{font-size:20px;line-height:1.3}
.acard .atext a,.aph a:not(.tel),.ahw a{color:var(--accent)}
.acards + .acard,.acard + .acard{margin-top:10px}
.whlist{display:grid;gap:0;margin:2px 0 4px;font-size:14px}.whlist>div:not(.whme){display:flex;justify-content:space-between;padding:6px 0;border-top:1px solid var(--line)}
.whme{display:flex;align-items:center;gap:8px;font-weight:600;padding:4px 0 6px}.whdot{width:12px;height:12px;border-radius:50%;background:var(--accent);display:inline-block}
@media (max-width:599px){.wh-t{font-size:16px}}
.grp-d path{fill:none;stroke:color-mix(in srgb,var(--accent) 80%,#fff);stroke-width:1.6px;stroke-dasharray:6 5;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.modli{align-items:flex-start}.modli>span{display:flex;flex-direction:column;gap:2px}.modli>span .small{line-height:1.35}.modli input{margin-top:3px}
.ppin{stroke-width:1.5;fill:var(--accent)}

/* ---------- украшения карты (decor.js): сезоны только в светлой теме, тёмная тема остаётся как есть ---------- */
@media (prefers-color-scheme: light){:root:not([data-theme="dark"]) .mapwrap.dk-winter{--m-ground:#d9e5ee;--m-grass:#c6d6e2;--m-forest:#3e6b58;--m-crown:#2f5c49;--m-crown-2:#e9f2f7;--m-field:#e8eff4;--m-field-2:#d0dce6;--m-water:#6aa6d0;--m-bank:#c4dbea;--m-water-ink:#245f88;--m-terr:#f7fafc;--m-halo:#ffffff;--m-road:#ffffff;--m-road-edge:#9fb3c3;--m-edge:#b02a55;--m-plot:#b3c9db;--m-plot-1:#a8c1d6;--m-plot-2:#bfd2e1;--m-plot-3:#cadae7;--m-plot-ink:#1f3344;--m-plot-ink-2:#1f3344;--m-label:#34536d;--m-bld:#ffffff;--m-dirt:#cbd7df}}
:root[data-theme="light"] .mapwrap.dk-winter{--m-ground:#d9e5ee;--m-grass:#c6d6e2;--m-forest:#3e6b58;--m-crown:#2f5c49;--m-crown-2:#e9f2f7;--m-field:#e8eff4;--m-field-2:#d0dce6;--m-water:#6aa6d0;--m-bank:#c4dbea;--m-water-ink:#245f88;--m-terr:#f7fafc;--m-halo:#ffffff;--m-road:#ffffff;--m-road-edge:#9fb3c3;--m-edge:#b02a55;--m-plot:#b3c9db;--m-plot-1:#a8c1d6;--m-plot-2:#bfd2e1;--m-plot-3:#cadae7;--m-plot-ink:#1f3344;--m-plot-ink-2:#1f3344;--m-label:#34536d;--m-bld:#ffffff;--m-dirt:#cbd7df}
@media (prefers-color-scheme: light){:root:not([data-theme="dark"]) .mapwrap.dk-spring{--m-ground:#e4f0cb;--m-grass:#cbe4a2;--m-forest:#acd38e;--m-crown:#c4e49c;--m-crown-2:#eef3c8;--m-field:#d9c9a2;--m-field-2:#c9b68a;--m-plot:#c6e39e;--m-plot-1:#bddd92;--m-plot-2:#d0e8ab;--m-plot-3:#d8ecb6;--m-terr:#f8fbef}}
:root[data-theme="light"] .mapwrap.dk-spring{--m-ground:#e4f0cb;--m-grass:#cbe4a2;--m-forest:#acd38e;--m-crown:#c4e49c;--m-crown-2:#eef3c8;--m-field:#d9c9a2;--m-field-2:#c9b68a;--m-plot:#c6e39e;--m-plot-1:#bddd92;--m-plot-2:#d0e8ab;--m-plot-3:#d8ecb6;--m-terr:#f8fbef}
@media (prefers-color-scheme: light){:root:not([data-theme="dark"]) .mapwrap.dk-summer{--m-ground:#d5e8b4;--m-grass:#c1dc96;--m-forest:#79b064;--m-crown:#5f9c4f;--m-crown-2:#96cd78;--m-field:#f1df9c;--m-field-2:#e3cb78;--m-plot:#a9d47f;--m-plot-1:#9ccc72;--m-plot-2:#b6dc8c;--m-plot-3:#c2e29a}}
:root[data-theme="light"] .mapwrap.dk-summer{--m-ground:#d5e8b4;--m-grass:#c1dc96;--m-forest:#79b064;--m-crown:#5f9c4f;--m-crown-2:#96cd78;--m-field:#f1df9c;--m-field-2:#e3cb78;--m-plot:#a9d47f;--m-plot-1:#9ccc72;--m-plot-2:#b6dc8c;--m-plot-3:#c2e29a}
@media (prefers-color-scheme: light){:root:not([data-theme="dark"]) .mapwrap.dk-autumn{--m-ground:#e6e0b9;--m-grass:#d8cd96;--m-forest:#b9ab6a;--m-crown:#dcae55;--m-crown-2:#a9b46e;--m-field:#ead293;--m-field-2:#d8b770;--m-plot:#cfd496;--m-plot-1:#c5cc86;--m-plot-2:#dadca3;--m-plot-3:#e2dfaa;--m-terr:#f7f3e2;--m-halo:#fff7df;--m-label:#6b5a35;--m-road:#e8d6b0}}
:root[data-theme="light"] .mapwrap.dk-autumn{--m-ground:#e6e0b9;--m-grass:#d8cd96;--m-forest:#b9ab6a;--m-crown:#dcae55;--m-crown-2:#a9b46e;--m-field:#ead293;--m-field-2:#d8b770;--m-plot:#cfd496;--m-plot-1:#c5cc86;--m-plot-2:#dadca3;--m-plot-3:#e2dfaa;--m-terr:#f7f3e2;--m-halo:#fff7df;--m-label:#6b5a35;--m-road:#e8d6b0}
@media (prefers-color-scheme: light){:root:not([data-theme="dark"]) .mapwrap.dk-winter .b-bld{stroke:#6c7a84}}
:root[data-theme="light"] .mapwrap.dk-winter .b-bld{stroke:#6c7a84}
.dk-dusk{display:none;pointer-events:none}
.dk-eve .dk-dusk{display:block;fill:#141d45;opacity:.3}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) .dk-eve .dk-dusk{opacity:.35}}
:root[data-theme="dark"] .dk-eve .dk-dusk{opacity:.35}
.dk-eve .b-bld{fill:#ffd27a!important;stroke:#ffb347;stroke-width:3;opacity:1}
.dk-lamp-i{transform:scale(var(--oki,1))}
.dk-lamp .h{fill:url(#dkLampG)}
.dk-lamp .c{fill:#fff1c2}
.dk-poi-i{transform:scale(var(--lz,1))}
.dk-poi .bg{fill:#fffdf4;stroke:var(--m-label);stroke-width:2.5}
.dk-poi .ic{fill:none;stroke:var(--m-label);stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}
.dk-poi text{font:600 24px var(--f-ui);fill:var(--m-label);paint-order:stroke;stroke:color-mix(in srgb,var(--m-ground) 85%,transparent);stroke-width:6px}
.dk-pf .b-label.small{display:none}
.dk-live{pointer-events:none}.dk-live.task{pointer-events:auto;cursor:pointer}
.dk-live-i{transform:scale(var(--oki,1))}
.dk-live .hit{fill:transparent}
.dk-live .p{fill:none;stroke:var(--accent);stroke-width:3;transform-origin:0 0;transform:scale(1.5);opacity:.5}   /* без анимации: пульсация заставляла телефон выносить в отдельные слои всё, что поверх карты (шапка, меню, кнопки), и не хватало видеопамяти — куски экрана не прорисовывались */
.dk-live .p2{display:none}   /* 8 раз (~20 с) и замирает: постоянная анимация тормозит карту на слабых телефонах */
.dragging .dk-live .p,.dragging .dk-fall::before{animation-play-state:paused}
.dk-live.iss .p{stroke:#d0402c}
.dk-live .c{fill:var(--accent);stroke:#fff;stroke-width:3}
.dk-live text{font:600 13px var(--f-ui);fill:var(--ink);paint-order:stroke;stroke:var(--surface);stroke-width:4px}
@keyframes dkPulse{0%{transform:scale(.6);opacity:.9}100%{transform:scale(3.2);opacity:0}}
.dk-html{position:absolute;inset:0;pointer-events:none;z-index:2;display:none}
.dk-on .dk-html{display:block}
.dk-vig{position:absolute;inset:0;background:radial-gradient(ellipse at 50% 50%,transparent 58%,rgb(92 70 34 / .14) 82%,rgb(92 70 34 / .3) 100%)}
.dk-eve .dk-vig{background:radial-gradient(ellipse at 50% 50%,transparent 58%,rgb(10 16 40 / .25) 85%,rgb(10 16 40 / .45) 100%)}
.dk-rib{position:absolute;left:50%;top:14px;transform:translateX(-50%);z-index:1;font:700 14px/1 var(--f-display);letter-spacing:.14em;text-transform:uppercase;color:#fff;
  background:var(--accent);padding:9px 26px 8px;box-shadow:0 3px 10px rgb(0 0 0 / .18);white-space:nowrap;text-align:center}
.dk-rib::before,.dk-rib::after{content:"";position:absolute;top:6px;border:15px solid color-mix(in srgb,var(--accent) 75%,#000);z-index:-1}
.dk-rib::before{left:-20px;border-left-color:transparent}.dk-rib::after{right:-20px;border-right-color:transparent}
.dk-rib small{display:block;font:500 10px/1.2 var(--f-ui);letter-spacing:.08em;text-transform:none;opacity:.85;margin-top:4px}
.dk-on .stage .b-label.big{display:none}
.dk-rose{position:absolute;left:calc(14px + env(safe-area-inset-left,0px));bottom:16px;width:72px;height:72px;opacity:.9}
.dk-rose .r0{fill:color-mix(in srgb,var(--surface) 85%,transparent);stroke:#8a6d3b;stroke-width:1.5}.dk-rose .r1{fill:none;stroke:#8a6d3b;stroke-width:.7;stroke-dasharray:2 3}
.dk-rose .r2{fill:#e9dcc0;stroke:#8a6d3b;stroke-width:1}.dk-rose .r3{fill:#8a6d3b}.dk-rose .r4{fill:var(--accent)}.dk-rose .r5{font:700 11px var(--f-ui);fill:#fff}
.dk-dir{position:absolute;transform:translate(-50%,-50%);display:flex;align-items:center;gap:3px;background:color-mix(in srgb,var(--surface) 55%,transparent);
  border-radius:999px;padding:2px 7px 2px 4px;font:500 11.5px/1 var(--f-ui);color:color-mix(in srgb,var(--ink) 70%,transparent);white-space:nowrap;opacity:.85}
.dk-dir i{font-style:normal;font-size:12px;color:var(--m-label)}
.dk-dir span{color:var(--muted)}
.dk-wx{position:absolute;left:calc(12px + env(safe-area-inset-left,0px));top:12px;display:flex;align-items:center;gap:8px;background:color-mix(in srgb,var(--surface) 94%,transparent);
  border-radius:12px;padding:6px 12px 6px 8px;box-shadow:0 2px 10px rgb(0 0 0 / .12);font:600 15px/1.15 var(--f-ui);color:var(--ink)}
.dk-wx svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}
.dk-wx small{display:block;font-weight:500;font-size:11.5px;color:var(--muted)}
.dk-fall{position:absolute;inset:0;overflow:hidden;opacity:.9}
.dk-fall::before{content:"";position:absolute;left:0;right:0;top:-190px;bottom:0}
.dk-fall.snow::before{background-image:radial-gradient(2.6px 2.6px at 20px 30px,#fff 60%,transparent 70%),radial-gradient(1.8px 1.8px at 70px 90px,#fff 60%,transparent 70%),
  radial-gradient(3px 3px at 130px 50px,#fff 60%,transparent 70%),radial-gradient(2px 2px at 170px 140px,#fff 60%,transparent 70%),
  radial-gradient(2.4px 2.4px at 40px 160px,#fff 60%,transparent 70%),radial-gradient(1.6px 1.6px at 110px 120px,#fff 60%,transparent 70%);
  background-size:190px 190px;animation:dkSnow 14s linear infinite}
/* дождь — отдельные капли, как снежинки (раньше косые линии через всю карту принимали за «бегущие полосы» — владелец 03.11) */
.dk-fall.rain{opacity:.75}.dk-fall.rain::before{top:-160px;background-image:radial-gradient(1.2px 4.5px at 18px 22px,rgb(60 100 150 / .55) 60%,transparent 75%),radial-gradient(1px 4px at 66px 96px,rgb(60 100 150 / .5) 60%,transparent 75%),
  radial-gradient(1.3px 5px at 120px 40px,rgb(60 100 150 / .55) 60%,transparent 75%),radial-gradient(1px 3.5px at 150px 130px,rgb(60 100 150 / .45) 60%,transparent 75%),
  radial-gradient(1.2px 4.5px at 40px 140px,rgb(60 100 150 / .5) 60%,transparent 75%),radial-gradient(1px 4px at 98px 70px,rgb(60 100 150 / .45) 60%,transparent 75%);
  background-size:160px 160px;animation:dkRain 1.6s linear infinite}
@keyframes dkSnow{to{transform:translate3d(0,190px,0)}}
@keyframes dkRain{to{transform:translate3d(0,160px,0)}}
.mapwrap:has(#drawbar:not([hidden])) .dk-rib,.mapwrap:has(#drawbar:not([hidden])) .dk-wx,.mapwrap:has(#drawbar:not([hidden])) :is(.dk-rose,.dk-dir){display:none}   /* рисуем или отмечаем место — компас и «Кашира 46 км» не лезут под подсказку и кнопки */
/* пока рисуют путь, легенда не закрывает кнопки панели («Сохранить» внизу на телефоне) */
.mapwrap:has(#drawbar:not([hidden])) .legend{display:none}
.mapwrap:has(.stage.sat) .dk-vig{display:none}
.mapwrap:not(.dk-home) :is(.dk-rib,.dk-rose,.dk-dir,.dk-vig){display:none}
.mapwrap:not(.dk-home) .stage .b-label.big{display:block}
@media (max-width:600px){.dk-rib{display:none}.dk-on .stage .b-label.big{display:block}.dk-rose{width:50px;height:50px;left:10px;bottom:10px}
  .dk-wx{left:10px;top:10px;padding:5px 9px 5px 7px;font-size:13px;gap:6px}.dk-wx svg{width:20px;height:20px}.dk-wx small{font-size:10.5px}
  .dk-dir{font-size:10.5px;padding:2px 6px 2px 3px}.dk-live text{display:none}}
@media (prefers-reduced-motion:reduce){.dk-live .p,.dk-fall::before{animation:none}}
@media print{.dk-html{display:none!important}}

/* ---------- мобильный аудит 30.10 ---------- */
/* iPhone не приближает страницу при вводе: на сенсорных экранах поля не меньше 16px (раньше часть полей была 12–15px) */
@media (pointer:coarse){
  input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file]),select,textarea{font-size:16px!important}
  .mapctl button{width:42px;height:42px}
  #fzBtn{min-width:40px;min-height:40px}
  .switch{min-height:40px}
  a.tel{display:inline-flex;align-items:center;min-height:40px}
  .aph a:not(.tel){display:inline-block;padding-block:8px}
  .drawbar button{min-height:40px}
  .installbar .x{min-width:44px;min-height:44px}
  .colors button{width:34px;height:34px}
  /* долгое нажатие на карту не выделяет текст и не открывает меню «Сохранить картинку» */
  .mapwrap{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}
}
/* длинная ссылка или слово в новости не растягивают страницу вбок */
.panel{overflow-wrap:break-word}
/* окно входа прокручивается, если не помещается (маленький экран, альбомная ориентация, открытая клавиатура) */
.modal{overflow-y:auto;place-items:start center;padding:max(16px,env(safe-area-inset-top,0px)) max(16px,env(safe-area-inset-right,0px)) max(16px,env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px))}
.modal-card{margin:auto}
/* меню слоёв и меню отметок не обрезаются на маленькой карте — прокручиваются */
.layersmenu,.markmenu{max-height:calc(100% - 24px);overflow-y:auto;overscroll-behavior:contain;touch-action:pan-y}
/* плашка «К посёлку», когда посёлок ушёл с экрана */
.tohome{position:absolute;left:50%;bottom:calc(14px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);z-index:4;border:1px solid var(--line);background:var(--surface);color:var(--ink);
  border-radius:999px;padding:9px 16px;min-height:40px;font:600 14px/1 var(--f-ui);box-shadow:0 4px 14px rgb(0 0 0 / .18);cursor:pointer}
.app.page .tohome{display:none}
/* телефон боком (широкий, но низкий экран): карта и панель рядом, шапка компактнее, кнопки карты в две колонки */
@media (max-height:500px) and (min-width:821px){
  .top{padding-block:4px;gap:10px}.logo{font-size:17px}
  .nav button{padding:6px 10px;font-size:14px}
  .body{grid-template-columns:minmax(0,1fr) 340px}
  .mapctl{max-height:calc(100% - 20px);flex-wrap:wrap-reverse;align-content:flex-start;top:10px}
  .btn{min-height:40px}
}
@media (max-height:500px) and (max-width:820px){.mapwrap{height:50dvh}}
/* легенда сбора не заезжает под кнопки карты справа */
@media (max-width:820px){.legend{max-width:calc(100% - 82px)}}
@media (max-height:500px){.dk-rib{display:none}.dk-on .stage .b-label.big{display:block}}
/* короткая карточка участка снизу карты (телефон) */
.psheet{position:absolute;left:calc(8px + env(safe-area-inset-left,0px));right:calc(8px + env(safe-area-inset-right,0px));bottom:8px;z-index:6;background:var(--surface);border:1px solid var(--line);border-radius:14px;
  box-shadow:0 6px 22px rgb(0 0 0 / .2);padding:10px 12px 12px;display:flex;flex-direction:column;gap:4px;font-size:14px}
.psheet .ps-h{display:flex;align-items:center;gap:4px;font-size:16px}.psheet .ps-h b{font-weight:600}
.psheet .ps-x{margin-left:auto;border:0;background:none;font-size:24px;line-height:1;color:var(--muted);min-width:40px;min-height:40px;cursor:pointer}
.psheet .ps-b{display:flex;gap:8px;margin-top:6px}.psheet .ps-b .btn{flex:1}
.mapwrap.has-sheet .tohome,.mapwrap.has-sheet .legend{display:none}
.app.page .psheet{display:none}
.b-entr{fill:var(--m-road)}.b-entr-e{fill:none;stroke:var(--m-road-edge);stroke-width:2}
.psheet .ps-more{margin-left:auto;padding:8px 12px;min-height:40px;font-size:14px}.psheet .ps-more+.ps-x{margin-left:0}
/* кнопка, пока её действие выполняется (защита от двойного нажатия) */
button[aria-busy="true"],.btn[aria-busy="true"],form[aria-busy="true"] button[type=submit],form[aria-busy="true"] button:not([type=button]).primary{opacity:.6;cursor:progress}
.modal{overscroll-behavior:contain}
/* отметки жителей: отключения и дороги */
.live{gap:8px}
.livebox{border:1px solid color-mix(in srgb,var(--warn) 45%,var(--line));background:color-mix(in srgb,var(--warn) 10%,var(--surface));border-radius:12px;padding:10px 12px;display:flex;flex-direction:column;gap:6px}
.livebox .lb-t{font-size:15px}
.liveq{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.liveq .chip{cursor:pointer;border:1px solid var(--line);background:var(--surface);min-height:34px}
.out-pl{fill:color-mix(in srgb,#30343a 38%,transparent);stroke:#30343a;stroke-width:1.5;vector-effect:non-scaling-stroke}
.out-pl.out-net{fill:color-mix(in srgb,#2f6fd0 25%,transparent);stroke:#2f6fd0}
.out-ic{text-anchor:middle;dominant-baseline:central;pointer-events:none}.stage.z-lo .out-ic{display:none}
.olegend .lg-gate{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;background:#fff;border:1.5px solid var(--accent);color:var(--accent);font:700 11px/1 var(--f-ui);margin-right:6px;font-style:normal;vertical-align:-2px}
.olegend .lg-out{background:color-mix(in srgb,#30343a 38%,transparent);border:1.5px solid #30343a}
.road-mk{fill:none;stroke:var(--rc);stroke-width:9;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:14 10;opacity:.85}
.road-ic-i{transform:scale(var(--oki,1))}.road-ic text{fill:#fff;font:700 13px var(--f-ui);text-anchor:middle}.road-ic circle{stroke:#fff;stroke-width:2.5}
.roadmark #gStHit{display:inline}
.roadmark .st-hit{stroke:color-mix(in srgb,var(--accent) 12%,transparent);stroke-linecap:butt}
.mapwrap.roadmark .tohome{display:none}
.seg button.on:not([class*="v-"]){background:var(--accent-soft);color:var(--accent);font-weight:600}
/* слой «Владельцы в базе»: цвета, которых нет ни в одном сезоне карты (фиолетовый и оранжевый) */
.own-pl{stroke:none}
.own-pl.own-reg{fill:color-mix(in srgb,#7b3fd6 16%,transparent)}
.own-pl.own-known{fill:color-mix(in srgb,#f07a12 12%,transparent)}
.own-bd.own-reg{fill:#7b3fd6;stroke:#fff;stroke-width:.6px}.own-bd.own-known{fill:#f07a12;stroke:#fff;stroke-width:.5px}
.own-ck{fill:none;stroke:#fff;stroke-linecap:round;stroke-linejoin:round}
.ownleg{display:flex;flex-direction:column;gap:3px}.ownleg i{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:6px;vertical-align:-1px}
.ownleg i{border-radius:50%}.ownleg i.own-reg{background:#7b3fd6}.ownleg i.own-known{background:#f07a12;width:8px;height:8px;margin:0 8px 0 2px}
.ownnote{color:var(--muted)}
summary.btn{display:inline-block;list-style:none}summary.btn::-webkit-details-marker{display:none}
/* карточка участка на телефоне: кнопки статуса сбора — отдельной строкой, чтобы название сбора не сжималось в столбик */
@media (max-width:520px){.li > .seg[data-t]{flex:1 1 100%}}
/* полоса прокрутки правой колонки: тонкая и почти невидимая, проявляется при наведении */
@media (hover:hover) and (min-width:821px){
  .panel{scrollbar-width:thin;scrollbar-color:transparent transparent;scrollbar-gutter:stable}
  .panel:hover{scrollbar-color:color-mix(in srgb,var(--muted) 45%,transparent) transparent}
  .panel::-webkit-scrollbar{width:8px}.panel::-webkit-scrollbar-thumb{background:transparent;border-radius:8px}
  .panel:hover::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--muted) 45%,transparent)}
}
.mvis summary{cursor:pointer;color:var(--muted)}
.grpbox{border:1px solid var(--line);border-radius:10px;padding:8px 12px}.grpbox>summary{cursor:pointer}

/* читаемость (аудит 30.10): крупнее мелкий служебный текст, контрастнее статусы и долги */
h3{font-size:13px;letter-spacing:.04em}
.chip{font-size:12.5px}
.stat .k{font-size:12.5px}
.rtab thead td{font-size:12px}
.cwh{font-size:12px}
@media (max-width:430px){.switch .sw-s{font-size:11px}}
@media (max-width:820px){.tabbar button{font-size:12px}}
.chip.st-in_progress{color:#8a5a00}.chip.st-done{color:#1f7a3f}
.debt,.v.money.debt,td.r.debt{color:#b4432c}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .chip.st-in_progress{color:#f0b23a}:root:not([data-theme="light"]) .chip.st-done{color:#5fcf8a}:root:not([data-theme="light"]) .debt{color:#ff8a70}}
:root[data-theme="dark"] .chip.st-in_progress{color:#f0b23a}:root[data-theme="dark"] .chip.st-done{color:#5fcf8a}:root[data-theme="dark"] .debt{color:#ff8a70}
[data-mtask] > .grow{flex:1 1 14em}
.rtab td:first-child{overflow-wrap:normal;word-break:normal;min-width:7em}
.mapwrap:has(.stage:not(.z-lo)) .dk-dir{display:none}   /* приблизили карту — указатели городов не закрывают номера участков */

/* минимальный экранный размер подписей карты (--lt, --pz считаются в apply() по масштабу) */
.stage .b-label:not(.place):not(.big):not(.hw):not(.small){font-size:calc(30px * min(var(--lt,1), 1.6))}
.stage .b-label.hw:not(.place){font-size:calc(24px * var(--lt,1))}
.stage .b-label.small:not(.place){font-size:calc(24px * var(--lt,1))}
.stage .dk-poi-i{transform:scale(max(var(--lz,1), var(--lt,1)))}
.stage:not(.z-lo) .plabels text{transform-box:fill-box;transform-origin:center;transform:scale(var(--pz,1))}
.updbar{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(76px + env(safe-area-inset-bottom,0px));z-index:60;display:flex;gap:10px;align-items:center;background:var(--surface);border:1px solid var(--accent);border-radius:12px;padding:8px 10px 8px 14px;box-shadow:0 4px 16px rgb(0 0 0 / .2);font-size:14px;max-width:calc(100% - 32px)}
@media (min-width:821px){.updbar{bottom:20px}}
.lightbox{position:fixed;inset:0;z-index:100;background:rgb(0 0 0 / .86);display:grid;place-items:center;padding:16px;cursor:zoom-out}
.lightbox img{max-width:100%;max-height:calc(100dvh - 96px);max-height:calc(100vh - 96px);object-fit:contain;border-radius:6px;background:#fff;cursor:zoom-in}
@supports (height:100dvh){.lightbox img{max-height:calc(100dvh - 96px)}}
/* нажали на фото — во всю ширину, листать вниз (длинный чек); ещё раз — обратно целиком */
.lightbox.zoom{display:block;overflow:auto;overscroll-behavior:contain;padding:64px 12px 56px}
.lightbox.zoom img{max-height:none;width:min(100%,900px);display:block;margin:0 auto;cursor:zoom-out}
.lb-hint{position:absolute;top:22px;left:16px;right:72px;color:#fff;font-size:13px;opacity:.85;pointer-events:none}
.lightbox.zoom .lb-x,.lightbox.zoom .lb-open,.lightbox.zoom .lb-hint{position:fixed}
.lb-x{position:absolute;top:12px;right:12px;width:44px;height:44px;border-radius:50%;border:0;background:rgb(255 255 255 / .92);font-size:20px;cursor:pointer}
.lb-open{position:absolute;bottom:14px;left:50%;transform:translateX(-50%);color:#fff;font-size:14px;text-decoration:underline}
.teambox{display:flex;flex-direction:column;gap:6px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2)}
.draft-line{fill:none;stroke:var(--accent);stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:14 8;vector-effect:non-scaling-stroke}
.addon .addec summary{cursor:pointer;color:var(--accent)}
.own-bdg{transform:translate(var(--cx),var(--cy)) translate(var(--hx),var(--hy)) scale(var(--k))}
.stage:not(.z-lo) .own-bdg{transform:translate(var(--cx),var(--cy)) scale(var(--pz,1)) translate(var(--hx),var(--hy)) scale(var(--k))}
.own-bdg .own-bd.own-reg{stroke-width:.8px}.own-bdg .own-bd.own-known{stroke-width:.9px}
.plabels .hsbadge{transform:translate(var(--cx),var(--cy)) translate(var(--hx),var(--hy)) scale(var(--k))}
.stage:not(.z-lo) .plabels .hsbadge{transform:translate(var(--cx),var(--cy)) scale(var(--pz,1)) translate(var(--hx),var(--hy)) scale(var(--k))}
.plabels .hsbadge circle{fill:var(--accent);stroke:#fff;stroke-width:.7}
.plabels .hsbadge path{fill:none;stroke:#fff;stroke-width:.8;stroke-linecap:round;stroke-linejoin:round}
.dk-live-n{font:700 11px var(--f-ui);fill:#fff;text-anchor:middle;pointer-events:none}
.plot.s-paid.own-pd{fill:color-mix(in srgb,var(--ok) 55%,var(--m-plot))}
/* метка сбора: меньше и спокойнее — маленькая точка, волна короткая и всего 3 раза */
.dk-live.task .dk-live-i{transform:scale(calc(var(--oki,1) * .7))}
.dk-live .p{stroke-width:2}
@keyframes dkPulse2{0%{transform:scale(.7);opacity:.7}100%{transform:scale(1.9);opacity:0}}

/* посещаемость в настройках */
.stats3{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.st-chart{display:flex;align-items:flex-end;gap:2px;height:110px;padding:6px 0;border-bottom:1px solid var(--line)}
.st-col{flex:1;height:100%;display:flex;align-items:flex-end;min-width:2px}
.st-bar{width:100%;background:color-mix(in srgb,var(--accent) 30%,transparent);border-radius:3px 3px 0 0;display:flex;align-items:flex-end;overflow:hidden;min-height:1px}
.st-res{width:100%;background:var(--accent)}
.st-key{display:inline-block;width:10px;height:10px;border-radius:2px;background:color-mix(in srgb,var(--accent) 30%,transparent);vertical-align:-1px}
.st-key-r{background:var(--accent)}
.st-row{display:flex;gap:8px;padding:3px 0;border-bottom:1px dashed var(--line)}

/* справка */
.helpt{border:1px solid var(--line);border-radius:12px;padding:0;margin:6px 0;background:var(--surface,#fff)}
.helpt>summary{cursor:pointer;padding:12px 14px;font-weight:600;line-height:1.35;list-style-position:inside}
.helpt[open]>summary{border-bottom:1px solid var(--line)}
.helpb{padding:10px 14px 14px;line-height:1.55}
.helpb ol,.helpb ul{padding-left:1.3em;margin:6px 0}.helpb li{margin:4px 0}.helpb p{margin:6px 0}
.helpb .hint{font-size:.92em;color:var(--muted);background:var(--accent-soft,#f6eef0);border-radius:8px;padding:8px 10px}
.helpimgs{display:flex;flex-wrap:wrap;gap:12px;margin:10px 0}
.helpimgs figure{margin:0;flex:1 1 220px;max-width:300px}
.helpimgs img{width:100%;border-radius:12px;border:1px solid var(--line);box-shadow:0 2px 10px rgba(0,0,0,.08);display:block}
.helpimgs figcaption{font-size:.85em;color:var(--muted);margin-top:4px;text-align:center}
#hQ{margin:8px 0}
.filebtn{position:relative;cursor:pointer;justify-content:center;border-style:dashed;padding:14px 12px;font-weight:600;width:100%}
.chg{margin:4px 0 10px;padding-left:20px}.chg li{margin:4px 0}

/* телефоны: падающий снег/дождь — постоянный анимированный слой поверх карты; на слабых видеокартах из-за него
   «пропадали» куски экрана. На сенсорных экранах не показываем */
@media (pointer:coarse){.dk-fall::before{animation:none!important;display:none}}

/* персональные данные: окно согласия и тексты */
.pdmodal{position:fixed;inset:0;background:rgb(0 0 0 / .6);display:flex;align-items:center;justify-content:center;padding:16px;z-index:200}
.pdcard{background:var(--surface,#fff);color:var(--ink,#222);border-radius:14px;padding:16px;max-width:520px;width:100%;max-height:calc(100vh - 32px);overflow:auto;display:flex;flex-direction:column;gap:8px;box-shadow:0 10px 40px rgba(0,0,0,.3)}
.pdcard h3{margin:0}
.pdtext{font-size:14px;line-height:1.5}.pdtext ol{padding-left:20px}

/* «Пользователи»: одна строка на человека, раскрытие по нажатию */
.urow{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr) auto auto auto 16px;gap:8px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--line);cursor:pointer}
.urow:hover,.urow.on{background:var(--surface2,rgb(0 0 0 / .03))}
.urow .un{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.urow .up{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.urow .ui{white-space:nowrap;letter-spacing:1px}.urow .uc{color:var(--muted,#888)}
.ufilt{flex-wrap:wrap;margin:6px 0}.ufilt .chip b{font-weight:600;opacity:.7;margin-left:2px}
@media (max-width:600px){.urow{grid-template-columns:minmax(0,1fr) auto 16px;grid-template-areas:"n i c" "p s c";row-gap:2px}
  .urow .un{grid-area:n}.urow .up{grid-area:p}.urow .ur{display:none}.urow .ui{grid-area:i}.urow .us{grid-area:s;text-align:right}.urow .uc{grid-area:c}}
#uSort{width:auto;min-width:0;padding:4px 8px}
.urow.on + .ucard{background:var(--surface2,rgb(0 0 0 / .03));padding:10px 14px;border-bottom:1px solid var(--line)}

/* «Сообщения» */
.mthr.unread b{font-weight:700}.dot-new{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--accent);vertical-align:middle}
.mitems{display:flex;flex-direction:column;gap:8px;margin:8px 0}
.mitem{max-width:88%;padding:8px 10px;border-radius:12px;background:var(--surface2,rgb(0 0 0 / .04));border:1px solid var(--line)}
.mitem.mine{align-self:flex-end;background:color-mix(in srgb,var(--accent) 10%,var(--surface,#fff))}
.mitem .thumb{max-width:180px;margin-top:4px}
/* w1 */
.rrchip{position:fixed;top:calc(8px + env(safe-area-inset-top,0px));left:50%;transform:translateX(-50%);z-index:60;border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:999px;padding:6px 14px;font:inherit;font-size:13px;box-shadow:0 2px 10px rgb(0 0 0 / .18);cursor:pointer}
.adbox{display:flex;flex-direction:column;gap:8px;margin-top:8px;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2)}
.adhow{display:flex;flex-direction:column;gap:6px}
.adopt{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface);cursor:pointer;min-height:44px;line-height:1.35}
.adopt input{margin-top:2px;width:20px;height:20px;flex:none;accent-color:var(--accent)}
.adopt.on{border-color:var(--accent);background:var(--accent-soft)}
.adopt.off{opacity:.55;cursor:default}
.adcalc{font-weight:500}
/* «Есть обновления» — внизу, над нижней панелью, не закрывает шапку */
.rrchip{top:auto;bottom:calc(16px + env(safe-area-inset-bottom,0px));max-width:calc(100vw - 32px);white-space:normal;text-align:center;min-height:40px}
@media (max-width:820px){.rrchip{bottom:calc(72px + env(safe-area-inset-bottom,0px))}}
/* панель рисования на телефоне — внизу карты, не закрывает место, куда нажимают */
@media (max-width:820px){.drawbar{top:auto;bottom:10px;left:8px;transform:none;max-width:calc(100% - 76px);padding:6px 6px 6px 10px;font-size:14px;gap:6px}}
.draft-pt{fill:var(--accent);stroke:#fff}

/* ---------- «Управление» (web/admin.js): дела, разделы, поиск, карточка участка ---------- */
.admbtn{display:inline-flex;align-items:center;gap:6px;height:36px;padding:0 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink);font:600 14px var(--f-ui);cursor:pointer;flex:none;white-space:nowrap}
.admbtn[hidden]{display:none}
.admbtn.on{border-color:var(--accent);color:var(--accent)}
.admbtn .cnt{font-size:12px;background:var(--accent);color:var(--accent-ink);border-radius:10px;padding:1px 7px;line-height:1.4}
.admbtn .cnt[hidden]{display:none}
.memenu .mm-adm{font-weight:600}.memenu .mm-adm .cnt{font-size:12px;background:var(--accent);color:var(--accent-ink);border-radius:10px;padding:1px 7px;margin-left:4px}.memenu .cnt[hidden]{display:none}
.who .adm-dot{width:9px;height:9px;border-radius:50%;background:var(--accent);flex:none}.who .adm-dot[hidden]{display:none}
@media (max-width:820px){.admbtn .ab-l{display:none}.admbtn{padding:0 8px;gap:4px;height:36px}}
@media (max-width:430px){.admbtn{height:34px;padding:0 6px}.admbtn svg{width:18px;height:18px}.admbtn .cnt{padding:0 5px;font-size:11.5px}
}
.app.page .panel:has(.adm-wide){max-width:1200px}   /* «Управление»: шире страниц для чтения (860), но не во весь широкий монитор — владелец 03.11 */

.adm{display:flex;flex-direction:column;gap:12px;min-width:0}
.adm-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.adm-head h2{flex:1;font-weight:600;font-size:19px}
.adm-head .back{flex-basis:100%;text-align:left;align-self:flex-start;width:auto}
.adm-edit{display:none;min-height:36px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink);font:600 13px var(--f-ui);padding:0 10px;cursor:pointer;white-space:nowrap}
.adm-edit[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.adm-badge{background:var(--accent);color:var(--accent-ink);border-radius:12px;padding:2px 10px;font-weight:600;font-size:13px;white-space:nowrap}
.adm-search input[type=search]{height:46px;border-radius:10px;padding:0 14px;background:var(--surface);font-size:15px}
.adm-search label.f>span{font-size:13px}
.adm-resbox:empty{display:none}
.adm-rlist{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:var(--surface)}
.adm-res{display:flex;align-items:center;gap:10px;width:100%;min-height:48px;padding:8px 12px;border:0;border-top:1px solid var(--line);background:none;color:var(--ink);text-align:left;font:inherit;cursor:pointer}
.adm-res:first-child{border-top:0}.adm-res:hover{background:var(--surface-2)}
.adm-res .ar-n{font-weight:600;white-space:nowrap}.adm-res .grow{flex:1;min-width:0;font-size:13.5px;color:var(--muted);overflow-wrap:anywhere}
.al-go{color:var(--muted);font-size:20px;line-height:1;flex:none}
.adm-nav{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.adm-tile{display:flex;flex-direction:column;justify-content:center;gap:2px;min-height:58px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink);text-align:left;font:inherit;cursor:pointer;min-width:0}
.adm-tile .at-n{font-weight:600;font-size:15px}.adm-tile .at-s{font-size:12.5px;line-height:1.25;color:var(--muted);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow-wrap:anywhere}
.adm-tile.on{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.adm-tile.on .at-s{color:inherit;opacity:.9}
@media (min-width:600px) and (max-width:1099px){.adm-nav{grid-template-columns:repeat(6,minmax(0,1fr))}}
.adm-st{margin-top:2px}
.adm-sec{display:flex;flex-direction:column;gap:12px;min-width:0}
.adm-chips{display:flex;flex-wrap:wrap;gap:6px}
.adm-chip{height:36px;border-radius:18px;border:1px solid var(--line);background:var(--surface);color:var(--ink);padding:0 12px;font:inherit;font-size:14px;cursor:pointer;white-space:nowrap}
.adm-chip b{font-weight:600;color:var(--muted)}
.adm-chip.on{background:var(--ink);border-color:var(--ink);color:var(--surface)}.adm-chip.on b{color:inherit}
.adm-list{display:flex;flex-direction:column;gap:10px}
/* длинный список дел на телефоне: раскладываются только видимые карточки (117 карточек — ~90 мс раскладки на слабом телефоне) */

.adm-card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:14px;display:flex;gap:12px;min-width:0}
.adm-cb{flex:1;min-width:0;display:flex;flex-direction:column;gap:8px}
.adm-ck{width:22px;height:22px;margin:2px 0 0;accent-color:var(--accent);flex:none;cursor:pointer}
.adm-ch{display:flex;justify-content:space-between;align-items:center;gap:8px}
.adm-tag{font-size:11.5px;font-weight:600;letter-spacing:.03em;text-transform:uppercase;border-radius:6px;padding:2px 8px;color:var(--muted);background:var(--surface-2)}
.adm-tag.t-claim{color:var(--accent);background:var(--accent-soft)}
.adm-tag.t-pay{color:color-mix(in srgb,var(--ok) 75%,var(--ink));background:color-mix(in srgb,var(--ok) 14%,var(--surface))}
.adm-tag.t-addon{color:color-mix(in srgb,#2f6fb0 80%,var(--ink));background:color-mix(in srgb,#2f6fb0 13%,var(--surface))}
.adm-tag.t-issue{color:color-mix(in srgb,var(--warn) 60%,var(--ink));background:color-mix(in srgb,var(--warn) 18%,var(--surface))}
.adm-age{font-size:13px;color:var(--muted);white-space:nowrap}
.adm-tt{display:flex;justify-content:space-between;gap:8px;align-items:baseline;font-weight:600;font-size:16px;line-height:1.3;overflow-wrap:anywhere}
.adm-sum{font-family:var(--f-num);font-weight:500;white-space:nowrap}
.adm-sub{font-size:14px;color:var(--muted);overflow-wrap:anywhere}
.adm-more{font-size:13.5px;color:var(--muted);white-space:pre-wrap;overflow-wrap:anywhere}
.adm-warn{font-size:14px;background:color-mix(in srgb,var(--warn) 16%,var(--surface));border-radius:8px;padding:8px 10px;color:color-mix(in srgb,var(--warn) 45%,var(--ink))}
.adm-ph img{width:64px;height:64px;object-fit:cover;border-radius:8px;border:1px solid var(--line);display:block}
.adm-ph.big img{width:auto;height:auto;max-width:100%;max-height:260px}
.adm-acts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.adm-acts .btn{min-height:44px;border-radius:10px;font-size:14px;padding:6px 10px;overflow-wrap:anywhere}
.adm-acts .btn.primary{font-weight:600}
.adm-rej{background:var(--surface-2);border-radius:10px;padding:10px}
.adm-rej .btn{min-height:44px}
.adm .adbox,.admp .adbox{margin-top:0}
.adm-done{display:flex;flex-direction:column;gap:4px;align-items:center;text-align:center;padding:32px 16px;border:1px dashed var(--line);border-radius:12px;background:var(--surface)}
.adm-done b{font-family:var(--f-display);font-weight:500;font-size:17px}.adm-done span{color:var(--muted);font-size:14px}
.adm-bulk{position:sticky;bottom:10px;z-index:5;display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--ink);color:var(--surface);border-radius:12px;padding:10px 12px;box-shadow:0 8px 24px rgba(0,0,0,.18)}
.adm-bulk .ab-t{flex:1 1 auto;min-width:0;font-weight:600;font-family:var(--f-ui)}.adm-bulk .btn{min-height:44px;border-radius:10px;font-size:14px;flex:0 1 auto}
.ab-x{flex:none;width:44px;height:44px;border-radius:10px;border:1px solid color-mix(in srgb,currentColor 35%,transparent);background:none;color:inherit;font-size:16px;cursor:pointer}
.adm-tbar .ab-x{width:36px;height:36px;color:var(--muted);border-color:var(--line)}
.adm-bulk .btn.armed{flex-basis:100%;order:3}
@media (max-width:420px){.adm-bulk{display:grid;grid-template-columns:minmax(0,1fr) 44px;gap:8px 10px}.adm-bulk .btn{grid-column:1/-1;order:3}.adm-bulk .btn.armed{order:3}}
.adm-box{display:flex;flex-direction:column;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:14px;min-width:0}
.adm-bh{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.adm-bh .btn{min-height:40px}
.adm-plist{display:flex;flex-direction:column;gap:8px}
.adm-pr{border:1px solid var(--line);border-radius:10px;padding:10px;display:flex;flex-direction:column;gap:6px}
.adm-prh{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.adm-prh b{flex:1}
.adm-prh .btn{min-height:36px}
.adm-person{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 0;border-top:1px solid var(--line);min-width:0}
.adm-person:first-of-type{border-top:0}
.adm-person .grow{flex:1 1 200px;min-width:0;overflow-wrap:anywhere}
.adm-person .btn{min-height:40px}
.adm-pa{display:flex;gap:6px;flex-wrap:wrap}
.adm-rel{font-size:12px;color:var(--muted);background:var(--surface-2);border:1px solid var(--line);border-radius:10px;padding:1px 7px;white-space:nowrap}
.adm-links{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--surface)}
.adm-link{display:flex;align-items:center;gap:10px;width:100%;min-height:54px;padding:8px 14px;border:0;border-top:1px solid var(--line);background:none;color:var(--ink);text-align:left;font:inherit;cursor:pointer;text-decoration:none;flex-wrap:wrap}
.adm-link:first-child{border-top:0}.adm-link:hover{background:var(--surface-2)}
.adm-link .al-t{font-weight:600;font-size:15px}.adm-link .al-s{flex:1;min-width:0;font-size:13px;color:var(--muted)}
.adm-links:not(:has(.adm-link)){display:none}
.adm-bad{color:#c0392b;font-weight:600}.adm-warnt{color:color-mix(in srgb,var(--warn) 60%,var(--ink));font-weight:600}
.adm-pfind .row{gap:8px;flex-wrap:nowrap}.adm-pfind input{height:44px;font-size:15px}.adm-pfind .btn{min-height:44px;flex:none}
.adm-pchip{cursor:pointer;font-size:13px;padding:4px 10px;color:var(--ink)}
.adm-dl{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 14px;margin:0;font-size:14px}
.adm-dl dt{color:var(--muted)}.adm-dl dd{margin:0;overflow-wrap:anywhere}
.adm-hist{display:flex;flex-direction:column;gap:4px;font-size:14px}
.adm-line .sl-t b{font-weight:600}
.admp{display:flex;flex-direction:column;gap:12px;min-width:0}
.admp-h{display:flex;flex-direction:column;gap:6px}
.admp-h h2{font-weight:600;font-size:20px}
.admp .adm-card{padding:0;border:0}
.admp .list .li.click,.adm .list .li.click{min-height:44px}
/* компьютер: разделы слева, дела посередине, подробности справа */
.adm-wide .adm-grid{display:grid;grid-template-columns:210px minmax(0,1fr);gap:20px;align-items:start}
.adm-wide .adm-nav{display:flex;flex-direction:column;gap:2px;position:sticky;top:12px}
.adm-wide .adm-tile{min-height:42px;border:0;background:none;border-radius:8px;flex-direction:row;align-items:center;justify-content:space-between;padding:8px 12px}
.adm-wide .adm-tile:hover{background:var(--surface)}
.adm-wide .adm-tile.on{background:var(--accent-soft);color:var(--accent)}
.adm-wide .adm-tile .at-n{font-size:14.5px;display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%}
.adm-wide .at-c{background:var(--accent);color:var(--accent-ink);border-radius:10px;padding:0 7px;font-size:12px;font-weight:600}
.adm-navnote{padding:10px 12px}
.adm-body{display:flex;flex-direction:column;gap:12px;min-width:0}
.adm-tasks3{display:grid;grid-template-columns:minmax(0,1fr) minmax(320px,400px);gap:20px;align-items:start}
.adm-mid{display:flex;flex-direction:column;gap:10px;min-width:0}
.adm-tbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.adm-tbar .adm-chips{flex:1}
.adm-nsel{font-weight:600;font-size:14px}
.adm-tab{width:100%;border-collapse:separate;border-spacing:0;background:var(--surface);border:1px solid var(--line);border-radius:12px;overflow:hidden;font-size:14px}
.adm-tab th{text-align:left;font-size:12px;font-weight:600;color:var(--muted);padding:8px 10px;border-bottom:1px solid var(--line);background:var(--surface-2)}
.adm-tab td{padding:9px 10px;border-top:1px solid var(--line);vertical-align:top}
.adm-tab tbody tr:first-child td{border-top:0}
.adm-row{cursor:pointer}.adm-row:hover td{background:var(--surface-2)}
.adm-row.on td{background:var(--accent-soft)}
.adm-row:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}
.adm-tab .c-ck{width:34px}.adm-tab .c-ck .adm-ck{margin:0}
.adm-tab .c-t{white-space:nowrap;font-weight:600;color:var(--muted)}
.adm-tab .c-s{white-space:nowrap;font-family:var(--f-num);text-align:right}
.adm-tab .c-a{white-space:nowrap;color:var(--muted);text-align:right}
.adm-rt{font-weight:600;overflow-wrap:anywhere}.adm-rs{font-size:13px;color:var(--muted);overflow-wrap:anywhere}
.adm-side{position:sticky;top:12px;max-height:calc(100dvh - 120px);overflow:auto;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:16px}
.adm-det{display:flex;flex-direction:column;gap:10px}
.adm-dt{font:600 17px/1.3 var(--f-ui);text-transform:none;letter-spacing:0;color:var(--ink);overflow-wrap:anywhere}
.adm-det .adm-acts{display:flex;flex-wrap:wrap}.adm-det .adm-acts .btn{flex:1 1 auto}
.adm-empty{color:var(--muted);font-size:14px}
.adm-mp{border-top:1px solid var(--line);padding-top:12px;display:flex;flex-direction:column;gap:10px}
.adm-mph{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.adm-mph .btn{min-height:36px}
.adm-mini{width:100%;height:auto;aspect-ratio:1.4;background:var(--m-ground);border-radius:10px;border:1px solid var(--line)}
.adm-mini polygon{fill:var(--m-plot);stroke:var(--m-plot-ink);stroke-opacity:.35;stroke-width:1.5}
.adm-mini polygon.on{fill:var(--accent);stroke:var(--accent)}
.adm-mini text{font:600 13px var(--f-ui);fill:var(--m-plot-ink);text-anchor:middle;dominant-baseline:middle;opacity:.7}
.adm-mini text.on{fill:var(--accent-ink);opacity:1;font-size:16px}
.adm-acts>.btn:last-child:nth-child(odd){grid-column:1/-1}
.admp>.back,.adm-head .back{align-self:flex-start;text-align:left}
/* телефон: в шапке нет места и для «Управления», и для «✎ Правка» — переключатель правки переезжает в «Управление» (шапка — в одну строку) */
/* на телефоне у администратора «Правка карты» — значок ✎ в шапке рядом с «Управлением» (владелец 03.11; раньше кнопка была в «Управлении») */
@media (max-width:820px){.top:has(#admBtn:not([hidden])) #admSwitch{padding:0;min-width:40px;justify-content:center}
  .top:has(#admBtn:not([hidden])) #admSwitch .sw-s{font-size:0}.top:has(#admBtn:not([hidden])) #admSwitch .sw-s::before{content:"✎";font-size:17px}
  /* у администратора в шапке на кнопку больше — чуть мельче логотип и промежутки, чтобы всё влезло в одну строку */
  .top:has(#admBtn:not([hidden])):has(#admSwitch:not([hidden])){gap:5px}
  .top:has(#admBtn:not([hidden])) .fzbtn,.top:has(#admBtn:not([hidden])) #admSwitch{min-width:36px}
  /* сообщение внизу — над панелью «Подтвердить выбранные», а не поверх неё */
  body:has(.adm-bulk) .toast{bottom:var(--adm-lift,150px)}}
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
/* «На карте» в сборе: строка-кнопка и подсветка выбранного куска */
.shrow{display:flex;align-items:center;gap:10px;flex:1;min-width:0;background:none;border:0;padding:0;text-align:left;font:inherit;color:inherit;cursor:pointer;min-height:40px}
.li.on{background:var(--accent-soft)}
/* выбранный кусок: тёмно-синяя сердцевина в толстой белой обводке (синего нет среди цветов сборов; белое отделяет и от светлой, и от тёмной карты, и от спутника),
   остальные отметки сбора — бледнее, у линии точки начала и конца и подпись «N · 1,6 км» одного размера при любом масштабе */
#gShapes{transition:opacity .2s}
#gShapes.shdim{opacity:.25}
.shfocus{fill:none;stroke:#0b2a66;stroke-width:var(--sw,8px);stroke-linecap:round;stroke-linejoin:round;animation:shpulse 1.1s ease-in-out 3}
.shfocus-halo{fill:none;stroke:#fff;stroke-width:calc(var(--sw,8px) * 2);stroke-linecap:round;stroke-linejoin:round;opacity:.95}
polygon.shfocus{fill:rgba(11,42,102,.22)}
circle.shfocus{fill:rgba(11,42,102,.3);stroke-width:calc(var(--sw,8px) * .6)}
circle.shfocus-halo{fill:none;stroke-width:calc(var(--sw,8px) * 1.4)}
.shfocus-end{fill:#fff;stroke:#0b2a66}
.shfocus-end.start{fill:#0b2a66;stroke:#fff}
.shfocus-lbl rect{fill:#0b2a66;stroke:#fff}
.shfocus-lbl text{fill:#fff;font-weight:700;font-family:inherit;letter-spacing:.01em}
@keyframes shpulse{50%{stroke-width:calc(var(--sw,8px) * 1.5)}}
@media (prefers-reduced-motion:reduce){.shfocus{animation:none}#gShapes{transition:none}}
.shrow .grow{white-space:normal}
.shnote{color:var(--muted)}
.shbtns{display:flex;gap:6px;flex-shrink:0}
/* кнопки куска — под текстом строки, на любой ширине (панель на компьютере узкая: справа они сжимали текст до буквы в строке) */
.li:has(.shbtns){flex-wrap:wrap;row-gap:4px}.li:has(.shbtns) .shrow{flex-basis:100%}.shbtns{margin-left:auto}
.dnote{font-weight:600}

/* «Есть обновления» не ложится на полосу «Подтвердить N чеков» */
body:has(.adm-bulk) .rrchip{bottom:calc(150px + env(safe-area-inset-bottom,0px))}
@media (max-width:820px){body:has(.adm-bulk) .rrchip{bottom:calc(210px + env(safe-area-inset-bottom,0px))}}
/* шапка на компьютере: что не влезло — в «Ещё ▾» */
.nav.fitted{mask-image:none;-webkit-mask-image:none;padding-right:0;overflow:visible}
.navmore{flex:none}
.navpop{position:fixed;z-index:70;min-width:200px;background:var(--surface);border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 30px rgb(0 0 0 / .15);padding:6px;display:flex;flex-direction:column}
.navpop button{text-align:left;background:none;border:0;border-radius:8px;padding:10px 12px;font:inherit;color:var(--ink);cursor:pointer;min-height:40px}
.navpop button:hover,.navpop button.on{background:var(--accent-soft)}
/* узкий компьютер (821–1279): в шапке короче подписи, чтобы разделам оставалось место */
@media (min-width:821px) and (max-width:1279px){.admbtn .ab-l{display:none}#admSwitch .sw-l{display:none}#admSwitch .sw-s{display:inline}}
@media (min-width:821px) and (max-width:1023px){#admSwitch .sw-s{display:none}.who .who-n{display:none}}
@media (max-width:520px){.drawbar .dhint{display:none}}   /* на телефоне панель короче — меньше закрывает карту */
.toast{pointer-events:none}   /* подсказка не перехватывает нажатия на кнопки под ней */
.shfocus-ring{fill:rgb(11 42 102 / .14);stroke:#0b2a66;stroke-width:calc(var(--sw,8px) * .35);stroke-dasharray:calc(var(--sw,8px) * 1) calc(var(--sw,8px) * .7)}
#gIssues.shdim{opacity:.35}
.shtidy{gap:8px;flex-wrap:wrap;align-items:center;margin-top:8px}
.shtidy-box{margin-top:8px}
/* список тем справки («Если вы ведёте сбор»): строки с разделителями, а не сплошной текст ссылками */
.hlinks{list-style:none;margin:0;padding:0}
.hlinks li+li{border-top:1px solid var(--line)}
.hlinks button{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;min-height:44px;padding:8px 14px;background:none;border:0;font:inherit;color:var(--ink);text-align:left;cursor:pointer}
.hlinks button::after{content:"›";color:var(--muted,#8a948e);font-size:18px}
.hlinks button:hover{background:color-mix(in srgb,var(--accent) 6%,transparent)}
@media (min-width:821px){.mback:first-child+*{margin-top:0}}   /* скрытая «← Назад» не сдвигает начало страницы на компьютере (Барахолка ↔ Услуги не прыгают) */
.mapsum>summary .ms-t{flex:1;min-width:0}.mapsum>summary .ms-t b{white-space:nowrap}   /* «На карте · 23 отметки · путь…» — одним абзацем, а не столбиками */
/* ---------- страница сбора: коротко — прогресс, «Ваше участие», строки-разделы; длинное — в шторках ---------- */
.ttop{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:36px}
.ttop .tact{flex:none;min-height:36px;border-radius:18px;padding:0 14px}
.panel .ttop+.ttitle,.panel .ttop+.note{margin-top:8px}
.ttitle{font-size:20px}
.panel .ttitle+.chips{margin-top:8px}
.panel .tdesc{margin:8px 0 0;white-space:pre-wrap;text-align:justify;-webkit-hyphens:auto;hyphens:auto}   /* описание сбора — по ширине, с переносами (владелец 03.11) */
.tdesc.clamp{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.panel .tdesc-more{margin-top:2px}
.tprog{border:1px solid var(--line);border-radius:14px;padding:12px 14px;background:var(--surface);display:flex;flex-direction:column;gap:8px}
.tp-h{display:flex;align-items:baseline;justify-content:space-between;gap:8px;flex-wrap:wrap}
.tp-h b{font:600 21px/1.2 var(--f-ui)}
.tp-pc{font-weight:600;color:var(--ok);font-variant-numeric:tabular-nums}
.panel .tprog+.tpay-add{margin-top:6px}
.tpay-add{font-size:14px}
.tteam{color:var(--muted)}.tteam b{color:var(--ink);font-weight:600}
.tdecide{display:flex;align-items:center;gap:12px;width:100%;min-height:56px;padding:10px 12px;border:1px solid var(--accent);border-radius:14px;background:var(--accent-soft);color:var(--ink);text-align:left;cursor:pointer;font:inherit}
.tdecide .td-n{flex:none;min-width:28px;height:28px;border-radius:14px;padding:0 8px;display:inline-flex;align-items:center;justify-content:center;background:var(--accent);color:var(--accent-ink);font-weight:700;font-size:14px}
.tdecide .sl-t{flex:1;min-width:0;display:flex;flex-direction:column}
.tdecide .sl-s{font-size:12.5px;color:var(--muted)}
.tdecide .sl-go{flex:none;color:var(--accent);font-size:20px;line-height:1}
@media (hover:hover){.tdecide:hover{filter:brightness(.98)}}
.tsecs{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--surface)}
.tsecs>.sumline{border:0;border-radius:0;min-height:58px}
.tsecs>.sumline+.sumline{border-top:1px solid var(--line)}
.tsecs .sl-i{color:var(--accent);display:flex;align-items:center;justify-content:center}
@media (hover:hover){.tsecs>.sumline:hover{background:var(--surface-2)}}
.sumline.sl2 .sl-t{display:flex;flex-direction:column;white-space:normal;line-height:1.3}
.sumline.sl2 .sl-s{font-size:12.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tfocus{color:var(--muted)}
.panel .tsecs+.tfocus{margin-top:8px}
.tpoll{border:1px solid var(--line);border-radius:14px;padding:2px 0 0}
.tpoll .ownerbox{border:0}
.tact-list .sumline{min-height:52px}
.tact-list .sumline:disabled{cursor:default;background:var(--surface-2)}.tact-list .sumline:disabled b{color:var(--muted)}
.sh-b .sh-sec{margin-top:18px}
.adlist{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.adrow{display:flex;align-items:flex-start;gap:8px;padding:8px 10px;background:var(--surface)}
.adrow+.adrow{border-top:1px solid var(--line)}
.adrow details{flex:1;min-width:0}
.adrow summary{list-style:none;cursor:pointer;display:flex;flex-direction:column;min-height:40px;justify-content:center;line-height:1.3}
.adrow summary::-webkit-details-marker{display:none}
.adrow summary b{font-weight:600;overflow-wrap:anywhere}
.adrow .adshow{flex:none;width:40px;height:40px;padding:0;display:inline-flex;align-items:center;justify-content:center;color:var(--accent)}
.adrej>summary{cursor:pointer;color:var(--muted);font-size:13.5px;min-height:40px;display:flex;align-items:center}
.adrej[open]>summary{margin-bottom:6px}
@media (pointer:coarse){.ttop .tact,.tpay-add,.tdesc-more,.tteam .linkbtn,.tfocus .linkbtn{min-height:44px}.tpay-add,.tdesc-more{display:inline-flex;align-items:center}.adrow .adshow{width:44px;height:44px}.adrow summary{min-height:44px}.adrej>summary{min-height:44px}}
/* на компьютере «На карте» и «Дополнения» — панель справа без затемнения: карта слева живая (подсветка, правка, предпросмотр) */
@media (min-width:821px){
  .shroot.modeless{pointer-events:none}
  .shroot.modeless .sh-bg{display:none}
  .shroot.modeless .sh{pointer-events:auto;width:min(400px,100vw);box-shadow:-6px 0 22px rgb(0 0 0 / .14)}
}
.tpoll>.row{padding:0 14px 14px}
/* «Управление»: чек компактно — строка суммы, строка подробностей, кнопки в ряд, «Сбор ›» ссылкой справа */
.adm-rc{padding:12px 14px}
.adm-rc .adm-cb{gap:6px}
.adm-rct{font-size:15.5px;line-height:1.3;overflow-wrap:anywhere}.adm-rct b{font-weight:600}
.adm-rc .adm-sub{font-size:13.5px}
.adm-racts{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.adm-racts .btn{min-height:44px;border-radius:10px;font-size:14px;padding:6px 10px}
.adm-racts .btn.primary{font-weight:600}
.adm-racts .adm-go{margin-left:auto;min-height:44px;padding:0 4px;white-space:nowrap}
.adrow summary{color:var(--ink)}
@media (pointer:coarse){.tpoll .tabs button{min-height:44px}}
/* «Путь по улицам · ≈ 4,3 км · 15 частей» — части пути сбора раскрываются по нажатию */
.shgroup{border:1px solid var(--line);border-radius:12px;margin-top:8px;background:var(--surface,#fff)}
.shgroup>summary{display:flex;align-items:center;gap:10px;min-height:48px;padding:6px 12px;cursor:pointer;list-style:none}
.shgroup>summary::-webkit-details-marker{display:none}
.shgroup>summary{color:var(--ink)}.shgroup>summary .grow{flex:1;min-width:0}.shgroup>summary::after{content:"▾";color:var(--muted);margin-left:auto}.shgroup[open]>summary::after{content:"▴"}
.shgroup>.list{border:0;border-top:1px solid var(--line);border-radius:0 0 12px 12px;margin:0}
/* ссылки-кнопки внутри строки текста («помощники по сбору: 1», ссылки в предупреждении «Пересекается на карте»):
   палец попадает за счёт отступов, но строка не раздвигается до 44 px */
@media (pointer:coarse){.tteam .linkbtn.linkbtn,.warnnote .linkbtn.linkbtn{min-height:0;display:inline;padding-block:10px;margin-block:-10px;line-height:inherit}}
/* черновик пути (новый кусок или «Изменить»): тёмно-синий с белой обводкой — как выделенный кусок, не путается с цветом сбора */
.draft.route{stroke:#0b2a66;stroke-opacity:1;stroke-width:6}
.draft-halo{fill:none;stroke:#fff;stroke-width:12;stroke-linecap:round;stroke-linejoin:round;opacity:.95}
#gDraft .draft-pt{fill:#0b2a66;stroke:#fff}
/* «Изменить»: прежний кусок — серый пунктир («было»); точки черновика можно перетаскивать */
.draft-old{fill:none;stroke:#5f6a64;stroke-width:5;stroke-dasharray:10 8;stroke-linecap:round;stroke-linejoin:round;opacity:.85}
#gDraft circle.draft-pt[data-wi]{pointer-events:all;cursor:grab}
.adrow.on{background:color-mix(in srgb,#0b2a66 8%,var(--surface))}.adrow.on .adshow{border-color:#0b2a66;color:#0b2a66}
/* крупный шрифт («Aa» 115–130 %) на телефоне: реквизиты столбиком — «Счёт» строкой выше, номер и «⧉» под ним, кнопка не уезжает за край;
   сообщения о проблемах — текст в две строки, а не «Проблема …» */
@media (max-width:600px){
  .fz-big .paybox .rtab,.fz-big .paybox .rtab tbody{display:block}
  .fz-big .paybox .rtab tr{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:8px;border-bottom:1px solid var(--line);padding:6px 0}
  .fz-big .paybox .rtab td{border:0;padding:0 2px;min-width:0!important}
  .fz-big .paybox .rtab td:first-child{grid-column:1/-1;color:var(--muted)}
  .fz-big .paybox .rtab td.sel{overflow-wrap:anywhere}
  .fz-big .paybox .rtab td.cpyc{width:auto;grid-column:2;grid-row:2}
  .fz-big :is([data-iss],[data-miss])>.grow{white-space:normal;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2}
}
/* «Управление» → «Дела» на ноутбуке (до 1280 px): средняя колонка узкая — таблица становится карточками,
   «Что» во всю ширину (а не 60 px с именами по буквам), тип и «когда» строкой выше, сумма справа */
@media (max-width:1279px){
  .adm-tab,.adm-tab tbody{display:block}
  .adm-tab thead{display:none}
  .adm-tab tr{display:grid;grid-template-columns:34px minmax(0,1fr) auto;grid-template-areas:"ck t a" "ck w s";align-items:start}
  .adm-tab tbody tr+tr{border-top:1px solid var(--line)}
  .adm-tab td{border-top:0;padding:6px 10px 0}
  .adm-tab td.c-ck{grid-area:ck}.adm-tab td.c-t{grid-area:t;font-size:12.5px}.adm-tab td.c-a{grid-area:a;font-size:12.5px}
  .adm-tab td.c-w{grid-area:w;padding-bottom:9px}.adm-tab td.c-s{grid-area:s;padding-bottom:9px}
  .adm-row:hover{background:var(--surface-2)}.adm-row.on{background:var(--accent-soft)}.adm-row:hover td,.adm-row.on td{background:none}   /* выделена вся карточка, а не клетки */
}
/* быстрые правки rq11: подпись красной «+» на карте, «Это мой участок», легенда отметок, журнал по дням, группы меню профиля */
/* подпись — под кнопкой, в столбце кнопок: не закрывает середину карты (там найденный участок) и не путается с «+» приближения */
/* 03.11: подпись слева от «+» одной строкой — пару раз мигнёт при открытии карты и спрячется (подсказка остаётся в title) */
.mapctl .zidea{position:relative;margin-top:6px}
.mapctl .zcap{position:absolute;top:50%;right:calc(100% + 8px);transform:translateY(-50%);white-space:nowrap;pointer-events:none;
  font:600 12px/1.2 var(--f-ui);color:var(--accent);background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:4px 8px;box-shadow:0 1px 4px rgb(0 0 0 / .15);
  opacity:0;visibility:hidden}
.mapctl .zcap.blink{visibility:visible;animation:zcapBlink 4.2s ease-in-out forwards}
@keyframes zcapBlink{0%{opacity:0}8%{opacity:1}22%{opacity:.25}34%{opacity:1}48%{opacity:.25}60%{opacity:1}88%{opacity:1}100%{opacity:0;visibility:hidden}}
@media (prefers-reduced-motion:reduce){.mapctl .zcap.blink{animation:zcapFade 4s linear forwards}@keyframes zcapFade{0%,85%{opacity:1}100%{opacity:0;visibility:hidden}}}
.mapwrap:has(#drawbar:not([hidden])) .zcap{display:none}
.myplot{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}
.dlegend{display:flex;flex-wrap:wrap;gap:4px 14px;color:var(--muted)}
.dlegend span{display:inline-flex;align-items:center;gap:6px}
.dlegend .dot{display:inline-block}
.aud-day{font:600 13px var(--f-ui);color:var(--ink);background:var(--surface-2);padding:6px 10px;border-top:1px solid var(--line)}
.aud-day:first-child{border-top:0}
.aud-day+.audit-row{border-top:0}
.memenu{max-height:calc(100dvh - 90px);overflow:auto}
.memenu .mm-g{font:600 11.5px var(--f-ui);color:var(--muted);text-transform:uppercase;letter-spacing:.04em;padding:10px 10px 2px;border-top:1px solid var(--line);margin-top:4px}
.memenu .mm-h+.mm-g{border-top:0;margin-top:0;padding-top:4px}
.savehint{margin-bottom:-4px}
/* шапка на ноутбуке (1366): все разделы и «Справка» помещаются без «Ещё ▾» — чуть плотнее кнопки, у переключателя короткая подпись */
@media (min-width:821px) and (max-width:1440px){
  .top{gap:10px}.nav button{padding-inline:8px}
  #admSwitch .sw-l{display:none}#admSwitch .sw-s{display:inline}#admSwitch .sw-s::before{content:"✎ "}
}

/* «Убрать, где никто не платил»: строки с галочками */
.paypicks{list-style:none;margin:6px 0;padding:0;display:flex;flex-direction:column;gap:2px}
.paypicks li{display:flex;align-items:flex-start;gap:8px;padding:6px 6px;border-radius:8px}
.paypicks li.on{background:#fff3bf}
.paypicks label{display:flex;gap:8px;align-items:flex-start;flex:1;min-width:0;cursor:pointer}
.paypicks input{width:20px;height:20px;margin:1px 0 0;flex:none}
.paypicks .linkbtn{flex:none;min-height:28px}
.tidylist{margin:6px 0;padding-left:18px}.tidylist li{margin:3px 0}.tidylist .linkbtn,.paypicks .linkbtn{white-space:nowrap}
/* главная: «Мне нужно сделать» и «Скоро» */
.todo{display:flex;flex-direction:column;gap:8px}
.todo-h{margin:0;font:600 19px/1.25 var(--f-display)}
.todo-l{display:flex;flex-direction:column;gap:8px}
.todo-i{display:flex;align-items:center;gap:12px;width:100%;min-height:56px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.todo-i.tone-pay,.todo-i.tone-warn{border-color:color-mix(in srgb,var(--warn) 60%,var(--line))}
@media (hover:hover){.todo-i:hover{border-color:var(--accent)}}
.todo-ic{flex:none;width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-weight:700;background:var(--surface-2);color:var(--ink)}
.tone-pay .todo-ic{background:color-mix(in srgb,var(--warn) 18%,var(--surface));color:color-mix(in srgb,var(--warn) 70%,var(--ink))}
.tone-warn .todo-ic{background:var(--accent-soft);color:var(--accent)}
.tone-info .todo-ic{background:color-mix(in srgb,#0b2a66 12%,var(--surface));color:color-mix(in srgb,#0b2a66 70%,var(--ink))}
.tone-ok .todo-ic{background:color-mix(in srgb,var(--ok) 15%,var(--surface));color:var(--ok)}
.todo-t{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;overflow-wrap:anywhere}
.todo-t b{font-weight:600}
.todo-act{flex:none;pointer-events:none}
.todo-go{flex:none;color:var(--muted);font-size:20px;line-height:1}
.todo-none{padding:10px 12px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);color:var(--ok);font-weight:600}
.soon{display:flex;flex-direction:column;gap:6px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface)}
.soon h3{margin:0}
.soon-i{display:flex;gap:10px;font-size:14px}.soon-i b{flex:none;width:52px}
/* «Мои платежи» */
.pchips{display:flex;flex-wrap:wrap;gap:6px}
.pchips .chip{min-height:36px;padding:4px 12px;border:1px solid var(--line);border-radius:18px;background:var(--surface);color:var(--ink);font:inherit;cursor:pointer}
.pchips .chip.on{background:var(--ink);color:var(--surface);border-color:var(--ink)}
.paysum{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding:12px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);text-align:center}
.paysum b{display:block;font-size:18px;font-weight:700;overflow-wrap:anywhere}.paysum span{font-size:12px;color:var(--muted)}
.paysum b.debt{color:var(--accent)}.paysum b.wait{color:color-mix(in srgb,var(--warn) 75%,var(--ink))}.paysum b.ok{color:var(--ok)}
.paysec{margin-top:6px;font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.paysec.warn{color:color-mix(in srgb,var(--warn) 75%,var(--ink))}
.paycard{display:flex;flex-direction:column;gap:8px;padding:10px 12px;border:1px solid color-mix(in srgb,var(--warn) 60%,var(--line));border-radius:var(--r);background:var(--surface)}
.paycard .row{flex-wrap:wrap;gap:8px}
.mact summary{cursor:pointer;padding:6px 0}
/* «Ещё» на телефоне — по группам; «Контакты правления» */
.tabsheet{max-height:calc(100vh - 140px);overflow-y:auto}
.tabsheet .ts-g{padding:10px 14px 2px;font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.tabsheet .ts-g:first-child{padding-top:4px}
.brow{align-items:center;gap:10px}.brow .btn{flex:none}
/* страница сбора: плитки для команды */
.tteamtools{display:flex;flex-direction:column;gap:8px}
.ttools{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.ttool{display:flex;align-items:center;gap:8px;min-height:48px;padding:8px 12px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);color:var(--ink);font:inherit;font-weight:600;text-align:left;cursor:pointer;overflow-wrap:anywhere}
.ttool span{flex:none;width:22px;text-align:center;color:var(--accent);font-size:17px}
@media (hover:hover){.ttool:hover{border-color:var(--accent)}}

/* компьютер: место под полосу прокрутки занято всегда — страница не «прыгает», когда полоса появляется (Управление, разделы) */
@media (min-width:821px){.app.page .body,.panel{scrollbar-gutter:stable}html{scrollbar-gutter:stable}}
/* «Сообщить о проблеме»: вид проблемы — кнопками, маленькая карта места в форме */
.ikinds{border:0;margin:0;padding:0}.ikinds legend{padding:0;margin-bottom:6px;font-weight:600}
.ichips{display:flex;flex-wrap:wrap;gap:8px}
.ichip{position:relative;cursor:pointer}
.ichip input{position:absolute;opacity:0;width:1px;height:1px}
.ichip span{display:inline-flex;align-items:center;min-height:40px;padding:6px 14px;border:1px solid var(--line);border-radius:20px;background:var(--surface);font-size:15px}
.ichip input:checked+span{background:var(--ink);color:var(--surface);border-color:var(--ink)}
.ichip input:focus-visible+span{outline:2px solid var(--focus);outline-offset:2px}
.isMini{display:block;width:100%;height:auto;aspect-ratio:16/10;border:1px solid var(--line);border-radius:var(--r);background:var(--mapbg);margin:4px 0}
.isMini .im-p{fill:color-mix(in srgb,var(--surface) 70%,var(--mapbg));stroke:var(--line);stroke-width:1.2}
.isMini .im-t{font:600 11px var(--f-ui);fill:var(--muted);text-anchor:middle}
.isMini .im-pin{fill:var(--accent);stroke:#fff;stroke-width:3}
/* компьютер: панель шире — в ней теперь больше (главная, сборы), карта всё равно занимает большую часть */
@media (min-width:1280px) and (min-height:501px){.body{grid-template-columns:minmax(0,1fr) clamp(380px,30vw,500px)}}
/* календарь: «Списком / Сеткой» и список по дням */
.cviews{display:inline-flex;border:1px solid var(--line);border-radius:10px;overflow:hidden;align-self:flex-start}
.cviews button{border:0;background:var(--surface);color:var(--ink);font:inherit;padding:8px 14px;min-height:40px;cursor:pointer}
.cviews button.on{background:var(--ink);color:var(--surface)}
.clist{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--r);background:var(--surface)}
.cli{display:flex;gap:12px;padding:9px 12px;border-top:1px solid var(--line)}.cli:first-child{border-top:0}
.cli.now{background:var(--accent-soft)}
.cli-d{flex:none;width:58px;display:flex;flex-direction:column}.cli-d span{font-size:11px;font-weight:700;color:var(--accent);text-transform:uppercase}
.cli-x{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}
.cli-e{display:flex;gap:8px;align-items:flex-start;overflow-wrap:anywhere}.cli-e .ckd{flex:none;margin-top:6px}
.cli-e.click{cursor:pointer}
.cli-r{display:block;font-size:12px;color:var(--muted)}
.newsi.hl,.cli-e.hl{animation:shareHl 2.4s ease-out}
@keyframes shareHl{0%,40%{background:var(--accent-soft)}100%{background:transparent}}
.soon-i.click{cursor:pointer}
/* галочки «Убрать, где никто не платил» — в цвет сайта */
.paypicks input[type=checkbox]{accent-color:var(--accent)}
/* список календаря: «Поделиться» и «Изменить» — отдельной строкой под событием */
.cli-e .clink{display:inline-block;margin:2px 10px 0 0}
.cli-e > span{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:6px}
.cli-e > span > b{flex:0 1 auto}.cli-e .cli-r{flex-basis:100%}
.nowrap{white-space:nowrap}
.tdesc a,.ntext a{color:var(--accent);text-decoration:underline;overflow-wrap:anywhere}
#dArch{margin-top:10px}#dArch>summary{list-style:none;display:inline-flex}#dArch>summary::-webkit-details-marker{display:none}
/* «Кому написать»: названия сборов и пояснения переносятся, а не обрезаются */
.brow .grow { white-space: normal; overflow: visible; }
.brow .grow b { overflow-wrap: anywhere; }
/* вложенные пояснения в строках списков переносятся (раньше обрезались без многоточия: «подтвердит казначей или о») */
.li .grow > div, .li .grow > .small { white-space: normal; }
/* «Кем вы приходитесь участку»: на узком экране четыре варианта делят ширину поровну и не вылезают за край */
#cRel button { flex: 1 1 0; min-width: 0; padding-left: 4px; padding-right: 4px; white-space: normal; line-height: 1.2; }
/* телефон: на коротких страницах («Сообщения», «Кому написать», переписка) белая панель доходит до нижнего меню, без серой полосы */
@media (max-width:820px){ .app.page .body { background: var(--surface); } }
/* пустая подпись к «📎 Фото или PDF» не сдвигает кнопку «Отправить» */
.filebtn + span:empty { display: none; }
/* «Голосования посёлка» */
.vp-card{display:flex;flex-direction:column;gap:8px}
.vp-q{margin:0;font-size:18px;text-transform:none;letter-spacing:0;color:var(--ink)}
.vp-opts{display:flex;flex-direction:column;gap:8px}
.vp-opt{display:grid;grid-template-columns:minmax(0,1fr) minmax(70px,30%) auto;align-items:center;gap:10px}
.vp-pick{justify-content:flex-start;text-align:left;white-space:normal;min-height:44px}
.vp-pick.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--surface));color:var(--accent);font-weight:700}
.vp-name{overflow-wrap:anywhere}.vp-opt.mine .vp-name{font-weight:700;color:var(--accent)}
.vp-bar{height:8px;border-radius:4px;background:color-mix(in srgb,var(--ink) 10%,transparent);overflow:hidden}
.vp-bar i{display:block;height:100%;background:var(--accent);border-radius:4px}
.vp-n{white-space:nowrap;color:var(--muted)}
.vp-adm{flex-wrap:wrap;gap:8px;align-items:center}
.vp-old>summary{cursor:pointer;font-weight:600;margin:6px 0}
@media (max-width:480px){.vp-opt{grid-template-columns:minmax(0,1fr) auto}.vp-opt .vp-bar{grid-column:1/-1;grid-row:2}}
.vp-form input:disabled{opacity:.55;cursor:not-allowed}
@media (max-width:430px){.top:has(#admBtn:not([hidden])):has(#admSwitch:not([hidden])) .logo{font-size:14px}}
@media (max-width:379px){.top:has(#admBtn:not([hidden])):has(#admSwitch:not([hidden])) .logo{font-size:12.5px}.top:has(#admBtn:not([hidden])):has(#admSwitch:not([hidden])){gap:4px;padding-left:10px;padding-right:10px}}
@media (max-width:339px){.top:has(#admBtn:not([hidden])):has(#admSwitch:not([hidden])) .logo{font-size:11px}.top:has(#admBtn:not([hidden])) .fzbtn,.top:has(#admBtn:not([hidden])) #admSwitch{min-width:32px}}
/* люди участка в карточке на карте (администратору) */
.pl-ppl .pl-meta,.ownerbox .pl-meta{font-size:13px;color:var(--muted);line-height:1.45;margin-top:2px}
.pl-sub{margin:14px 0 4px;font-size:11.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.pl-card{margin:8px 0 2px;font-size:12px;color:var(--muted)}
.pl-row{padding:5px 0}
.pl-name{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-weight:600}
.pl-rel{font-size:11.5px;font-weight:500;border-radius:20px;padding:1px 8px;background:var(--surface-2);border:1px solid var(--line);color:var(--muted);white-space:nowrap}
.ownerbox .pl-adm{display:inline-block;margin-top:12px}
.ownerbox .pl-ppl>.pl-meta:first-child{margin-top:-6px}
