/* ERA — brand override on Broadsheet. Studentska lista carmine takes the accent role
   ("accents only"); Open Sans replaces the serif for heading and body. The ramp sits on
   the system's OKLCH lightness scale. Then: shell, page utilities, map and Leaflet theming.
   Rule of thumb: a declaration block that repeats three or more times in the design, or
   needs a pseudo-class / animation / z-index, lives here; everything else stays inline. */
:root{
  --font-heading:"Open Sans",system-ui,sans-serif;
  --font-body:"Open Sans",system-ui,sans-serif;
  --color-accent:#a81a32;
  --color-accent-100:#fbeef0;
  --color-accent-200:#f6d6db;
  --color-accent-300:#edb0b9;
  --color-accent-400:#dc7a8a;
  --color-accent-500:#c1445a;
  --color-accent-600:#a81a32;
  --color-accent-700:#86142a;
  --color-accent-800:#601020;
  --color-accent-900:#3d0c16;
  --era-yellow:#edbb00;
  --era-yellow-100:#fdf6dc;
  --era-yellow-800:#6b5400;
  --era-green:#2e7d4f;
  --era-green-100:#e3f2e8;
  --era-green-800:#1d5234;
}
body{margin:0;text-wrap:pretty}
a{color:var(--color-accent-700)}
a:hover{color:var(--color-accent-900)}
@keyframes era-pulse{0%,100%{opacity:1}50%{opacity:.35}}

/* — shell — */
.era-root{min-height:100vh;background:var(--color-bg);color:var(--color-text);font-family:var(--font-body);font-size:15px;line-height:1.55}
.masthead{display:flex;align-items:center;gap:var(--space-4);padding:var(--space-3) clamp(20px,4vw,56px);flex-wrap:wrap}
.masthead-brand{display:flex;align-items:center;gap:var(--space-2);text-decoration:none;color:inherit;margin-right:auto}
.masthead-brand:hover{color:inherit}
.masthead-brand .brand-name{font-family:var(--font-heading);font-weight:600;font-size:20px;letter-spacing:-0.01em}
.masthead-brand .brand-sub{font-weight:400;color:var(--color-neutral-700);font-size:15px}
.masthead-nav{display:flex;gap:var(--space-4);font-size:14px;flex-wrap:wrap}
.masthead-nav a{color:inherit;text-decoration:none}
.masthead-nav a.active{color:var(--color-accent-700);text-decoration:underline;text-underline-offset:5px}
.masthead-user{display:flex;align-items:center;gap:var(--space-2);font-size:13px}
.masthead-user .who{color:var(--color-neutral-800)}
.conn{display:inline-flex;align-items:center;gap:6px;color:var(--color-neutral-800)}
.conn-dot{width:9px;height:9px;border-radius:50%;background:var(--color-accent)}
.conn-dot.on{background:var(--era-green);animation:era-pulse 2s infinite}
.role{text-transform:uppercase;letter-spacing:.06em;font-size:11px}
.datestrip{padding:0 clamp(20px,4vw,56px)}
.datestrip .rule-double{height:5px;border-top:2px solid var(--color-text);border-bottom:1px solid var(--color-text)}
.datestrip .items{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px 28px;padding:12px 0;font-size:12.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-neutral-800);font-feature-settings:'pnum' 1}
.datestrip .items span{white-space:nowrap}
.datestrip .rule{border-top:1px solid var(--color-text)}

/* — pages — */
.page{padding:var(--space-6) clamp(20px,4vw,56px) var(--space-8)}
.page-narrow{padding:var(--space-8) clamp(20px,4vw,56px);max-width:520px}
.page-narrow.wider{max-width:560px}
.page-head{display:flex;justify-content:space-between;align-items:baseline;gap:var(--space-3);flex-wrap:wrap;margin-bottom:var(--space-4)}
.page-head h1{font-size:32px;margin:0}
.h1-sub{font-weight:400;font-size:18px;color:var(--color-neutral-700)}
.stats{display:flex;gap:var(--space-4);font-size:13px;color:var(--color-neutral-800);font-feature-settings:'tnum' 1}
.kicker{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-neutral-800)}
.kicker-accent{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-accent-700)}
.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--space-4) var(--space-6);margin-bottom:var(--space-6)}
.kpi{font-family:var(--font-heading);font-weight:600;font-size:44px;line-height:1.05;letter-spacing:-.02em;font-feature-settings:'tnum' 1}
.kpi .of{font-size:20px;color:var(--color-neutral-600)}
.big-pct{font-family:var(--font-heading);font-weight:600;font-size:40px;line-height:1;color:var(--color-accent);font-feature-settings:'tnum' 1}
.tnum{font-feature-settings:'tnum' 1}
.mono{font-family:ui-monospace,monospace}
.muted{color:var(--color-neutral-800)}
.small-muted{font-size:12px;color:var(--color-neutral-700)}
.note{font-size:13px;color:var(--color-neutral-800)}
.lead{max-width:62ch;color:var(--color-neutral-800)}
.swatch{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:8px;vertical-align:middle}
.toolbar{display:flex;gap:var(--space-2);flex-wrap:wrap;align-items:center;margin-bottom:var(--space-4)}
.actions{display:flex;gap:var(--space-2);flex-wrap:wrap}
.nowrap{white-space:nowrap}
.tag-ok{background:var(--era-green-100);color:var(--era-green-800)}
.tag-warn{background:var(--era-yellow-100);color:var(--era-yellow-800)}
.tag-bad{background:var(--color-accent-100);color:var(--color-accent-800)}
.row-anomaly{background:var(--color-accent-100);box-shadow:inset 3px 0 0 var(--color-accent)}
.row-dim{opacity:.5}
.row-revoked{opacity:.7}
.table-compact{font-size:12px;table-layout:auto;width:100%}
.table-compact th,.table-compact td{padding:5px 5px;white-space:nowrap}
.table-comfy{font-size:13.5px;table-layout:auto;width:100%}
.table-comfy th,.table-comfy td{padding:10px 8px;white-space:nowrap}
.table .num{text-align:right;font-feature-settings:'tnum' 1}
.table-tight th,.table-tight td{padding:5px 6px}
.btn-sm{padding:3px 10px;font-size:12px;white-space:nowrap}
.btn-xs{padding:2px 8px}
.btn-link{padding:0;font-weight:400;font-size:inherit}
.btn-status{padding:0;display:inline-flex;align-items:center;gap:6px;font-weight:400;font-size:inherit}
.thumb{display:block;width:14px;height:18px;background:var(--color-neutral-400);border-radius:1px;flex:none}
.input-num{max-width:110px;text-align:right;display:inline-block}
.af-input{padding:3px 8px;font-size:12px;width:100%;min-width:0;box-sizing:border-box}
.live-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--era-green);margin-right:6px}
.live-dot.on{animation:era-pulse 2s infinite}
.error-text{color:var(--color-accent-700);font-size:14px;margin:0}
.form-col{display:flex;flex-direction:column;gap:var(--space-3)}
.logo-placeholder{display:grid;place-items:center;width:60px;height:60px;border-radius:var(--radius-md);background:var(--color-neutral-200);font-size:10px;color:var(--color-neutral-700)}
.new-obs{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--space-2) var(--space-3);align-items:end;padding:var(--space-4);background:var(--color-neutral-100);border-radius:var(--radius-md);margin-bottom:var(--space-4)}
.doc-frame{aspect-ratio:3/4;background:var(--color-neutral-300);border-radius:var(--radius-md);display:grid;place-items:center;padding:var(--space-4)}
.doc-sheet{width:78%;height:86%;background:var(--color-neutral-100);box-shadow:var(--shadow-md);padding:24px;display:flex;flex-direction:column;gap:10px}
.doc-sheet .ln{height:6px;background:var(--color-neutral-300)}
.doc-sheet .ln-dark{height:10px;background:var(--color-neutral-400)}
.doc-sheet .ln-rule{height:1px;background:var(--color-neutral-400);margin:8px 0}

/* — dashboard — */
.dash-grid{display:grid;grid-template-columns:minmax(0,2fr) minmax(280px,1fr);gap:var(--space-6);align-items:stretch}
.dash-grid .dash-map{min-height:640px;order:1}
.dash-grid .dash-list{order:2}
.dash-grid.numbers{grid-template-columns:minmax(0,1fr)}
.dash-grid.numbers .dash-map{min-height:520px;order:2}
.dash-grid.numbers .dash-list{order:1;max-width:760px}
@media (max-width:900px){.dash-grid{grid-template-columns:minmax(0,1fr)}.dash-grid .dash-map{min-height:520px}}
.map-wrap{position:relative;height:100%;min-height:420px}
.era-map{position:absolute;inset:0;width:100%;height:100%;border-radius:var(--radius-md);overflow:hidden;background:var(--color-bg)}
.map-panel{position:absolute;top:var(--space-3);right:var(--space-3);width:min(320px,calc(100% - 30px));max-height:calc(100% - 30px);overflow:auto;background:var(--color-bg);box-shadow:var(--shadow-lg);border-radius:var(--radius-lg);padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-2);z-index:1001}
.map-panel .head{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.map-panel .title{font-family:var(--font-heading);font-weight:600;font-size:20px;line-height:1.15}
.map-panel .close{padding:2px 8px;font-size:18px;line-height:1}
.ranked{display:flex;flex-direction:column;gap:var(--space-3)}
.ranked-row{display:grid;grid-template-columns:28px minmax(0,1fr) auto;gap:4px var(--space-2);align-items:center}
.ranked-row .rank{font-family:var(--font-heading);font-weight:600;color:var(--color-neutral-600);font-feature-settings:'tnum' 1}
.ranked-row .name{font-size:14px;line-height:1.3;display:flex;align-items:center;min-width:0}
.ranked-row .pct{font-family:var(--font-heading);font-weight:600;font-size:17px;font-feature-settings:'tnum' 1}
.ranked-row .bar{height:6px;background:var(--color-neutral-200);border-radius:1px;overflow:hidden}
.ranked-row .bar>div{height:100%;transition:width .6s}
.ranked-row .meta{font-size:12px;color:var(--color-neutral-700);font-feature-settings:'tnum' 1}
.aside-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px var(--space-2);align-items:center}
.aside-row .name{font-size:14px;display:flex;align-items:center;gap:0;min-width:0}
.aside-row .votes{font-family:var(--font-heading);font-weight:600;font-feature-settings:'tnum' 1}
.aside-row .meta{font-size:12px;color:var(--color-neutral-700);font-feature-settings:'tnum' 1}

/* — a failed API call (dismissible, per circuit) and real protocol photos in Verifikacija — */
.api-notice{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin:var(--space-3) clamp(20px,4vw,56px) 0;padding:8px 12px;background:var(--era-yellow-100);color:var(--era-yellow-800);border-radius:var(--radius-md);font-size:13px}
.doc-frame .doc-photo{width:100%;height:100%;object-fit:contain;border-radius:var(--radius-sm);box-shadow:var(--shadow-md)}

/* — Blazor's unhandled-error banner (shown by the framework by setting display:block) — */
#blazor-error-ui{display:none;position:fixed;left:0;right:0;bottom:0;z-index:2000;padding:.6rem 1.25rem .7rem;background:var(--era-yellow-100);color:var(--color-text);box-shadow:var(--shadow-lg);font-size:14px}
#blazor-error-ui .dismiss{cursor:pointer;position:absolute;right:.75rem;top:.5rem}
#blazor-error-ui .reload{margin-left:.5rem}

/* — Leaflet theming (ported from the design's map/serbia-map.html) — */
.leaflet-container{font-family:"Open Sans",sans-serif}
.leaflet-tile-pane{filter:grayscale(.55) contrast(.92) brightness(1.04)}
.cl{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:50%;
  background:var(--f);border:1.5px solid #a81a32;color:var(--c);cursor:pointer;
  box-shadow:0 3px 10px rgba(45,43,43,.16);transition:transform .15s}
.cl:hover{transform:scale(1.06)}
.cl b{font-weight:600;font-size:15px;line-height:1;font-feature-settings:"tnum" 1}
.cl small{font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;opacity:.85;margin-top:3px;white-space:nowrap}
.leaflet-control-attribution{font-size:10px;background:rgba(243,242,242,.85)}
.leaflet-control-zoom a{font-family:serif;color:#201e1d}
.leaflet-control-zoom a:hover{color:#a81a32}
.leaflet-popup-content-wrapper{border-radius:2px;background:#f3f2f2;color:#201e1d;box-shadow:0 12px 32px rgba(45,43,43,.22)}
.leaflet-popup-content{margin:12px 14px;font-size:13px;line-height:1.45}
.leaflet-popup-tip{background:#f3f2f2}

/* — contributions: badge, the contributions panel in Verifikacija, the results columns, the Lite entry points — */
.cred{white-space:nowrap}
.cred-num{font-weight:600;padding:1px 6px;border-radius:var(--radius-sm)}
.contrib-panel h3{font-size:18px;margin:var(--space-4) 0 var(--space-2)}
.contrib-card{display:flex;flex-direction:column;gap:8px;margin-bottom:var(--space-3);padding:12px 14px}
.contrib-card.primary{box-shadow:inset 3px 0 0 var(--era-green)}
.contrib-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.mini-nums{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:13px;color:var(--color-neutral-700)}
.mini-nums strong{color:var(--color-text);font-feature-settings:'tnum' 1}
.mini-nums strong.diff{color:var(--color-accent)}
.cred-details summary{cursor:pointer;font-size:13px;color:var(--color-neutral-800)}
.cred-details ul{margin:6px 0 0;padding-left:0;list-style:none;font-size:13px;display:flex;flex-direction:column;gap:2px}
.cred-details .pts{display:inline-block;min-width:34px;font-weight:600;font-feature-settings:'tnum' 1}
.cred-details .pts.plus{color:var(--era-green)}
.cred-details .pts.minus{color:var(--color-accent)}
.thumb-strip{display:flex;gap:6px;flex-wrap:wrap}
.thumb-btn{padding:0;border:1px solid var(--color-divider);border-radius:var(--radius-sm);background:var(--color-neutral-100);width:56px;height:72px;overflow:hidden;cursor:pointer}
.thumb-btn img{width:100%;height:100%;object-fit:cover;display:block}
.masthead-cta{padding:6px 14px;white-space:nowrap}
.cta-strip{display:flex;justify-content:space-between;align-items:center;gap:var(--space-4);flex-wrap:wrap;background:var(--color-surface);border-radius:var(--radius-md);padding:var(--space-4) var(--space-6);margin-bottom:var(--space-4)}
.cta-strip .title{font-size:20px;font-weight:600;margin:2px 0 4px}
.cta-strip .actions{display:flex;gap:8px;flex-wrap:wrap}
/* the countdown to the scheduled opening of production (OpeningCountdown.razor) */
.countdown-strip{display:flex;justify-content:space-between;align-items:center;gap:var(--space-3) var(--space-5);flex-wrap:wrap;background:var(--color-accent-100);box-shadow:inset 4px 0 0 var(--color-accent);border-radius:var(--radius-md);padding:var(--space-3) var(--space-5);margin-bottom:var(--space-4)}
.countdown-strip .text{min-width:0;flex:1 1 260px}
.countdown-strip .title{font-size:19px;font-weight:600;margin:2px 0 2px}
.countdown-strip .note{margin-top:2px}
.countdown-strip .clock{font-family:var(--font-heading);font-weight:600;font-size:40px;line-height:1;letter-spacing:.02em;color:var(--color-accent-700);font-feature-settings:'tnum' 1;white-space:nowrap}
.countdown-strip.compact{margin:12px 0 0;padding:10px 14px}
.countdown-strip.compact .title{font-size:16px}
.countdown-strip.compact .clock{font-size:28px}
@media (max-width:640px){.countdown-strip{padding:12px 14px}.countdown-strip .title{font-size:17px}.countdown-strip .clock{font-size:30px}}
/* — responsive shell: wide tables scroll inside their own strip, the masthead collapses on phones — */
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}
.table-scroll>.table{min-width:100%}
@media (max-width:900px){
  .page{padding-left:clamp(16px,3vw,32px);padding-right:clamp(16px,3vw,32px)}
  .api-notice{margin-left:clamp(16px,3vw,32px);margin-right:clamp(16px,3vw,32px)}
}
@media (max-width:640px){
  .masthead{padding:10px 16px 6px;gap:6px 10px}
  .masthead-brand .brand-name{font-size:18px}
  .masthead-brand .brand-sub{display:none}
  .masthead-nav{order:3;flex-basis:100%;flex-wrap:nowrap;overflow-x:auto;gap:var(--space-4);font-size:14px;padding:2px 0 6px;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .masthead-nav::-webkit-scrollbar{display:none}
  .masthead-nav a{white-space:nowrap}
  .masthead-user{order:2;flex-basis:100%;flex-wrap:wrap;gap:6px 10px;font-size:12px}
  .masthead-user .who{font-size:12px}
  .masthead-user .conn{font-size:0;gap:0} /* the dot alone; its colour says connected or not */
  .masthead-cta{padding:5px 12px;font-size:13px}
  .engine{gap:4px}
  .engine-btn{padding:3px 8px;font-size:11px}
  .datestrip{padding:0 16px}
  .datestrip .items{display:none}
  .page{padding:var(--space-4) 16px var(--space-6)}
  .page-narrow{padding:var(--space-5) 16px var(--space-6)}
  .page-head{margin-bottom:var(--space-3)}
  .page-head h1{font-size:26px}
  .h1-sub{font-size:15px}
  .lead{font-size:14px}
  .stats{flex-wrap:wrap;gap:var(--space-2) var(--space-3)}
  .kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-3) var(--space-4)}
  .kpi{font-size:30px}
  .dash-grid .dash-map{min-height:380px}
  .cta-strip{padding:var(--space-3) var(--space-4)}
  .cta-strip .title{font-size:17px}
  .toolbar{gap:var(--space-2)}
  .toolbar .input{flex:1 1 100%;max-width:none !important}
  .new-obs{grid-template-columns:1fr}
  .table-compact th,.table-compact td{padding:4px 4px}
  .btn{min-height:40px}
  .btn-sm,.btn-xs,.engine-btn{min-height:0}
}

/* — the engine switch in the masthead (mode tag for everyone, buttons for admins) and the confirmation dialog — */
.engine{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}
.engine-tag{white-space:nowrap}
.engine-btn{padding:4px 10px;font-size:12px;white-space:nowrap}
.engine-btn.on{box-shadow:inset 0 0 0 2px var(--color-accent-800)}
.engine-btn[aria-pressed="true"]::before{content:"● ";font-size:9px;vertical-align:middle}
.engine-error{font-size:12px;flex-basis:100%}
.dialog-backdrop{z-index:3000}
.dialog-body p{margin:0 0 8px}
.dialog-body p:last-child{margin-bottom:0}

/* — the station finder above the dashboard map — */
.map-finder{display:flex;gap:var(--space-2);flex-wrap:wrap;margin-bottom:var(--space-2)}
.map-finder .input{flex:1 1 240px;min-width:0;text-overflow:ellipsis}
@media (max-width:640px){.map-finder .input{flex-basis:100%}}

/* the whole Obrazac RG-2/NP of a contribution, on the verification page */
.rg2-details summary{cursor:pointer;font-size:13px;color:var(--color-neutral-800)}
.rg2-details dl{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 12px;margin:8px 0 0;font-size:13px}
.rg2-details dt{color:var(--color-neutral-800)}
.rg2-details dd{margin:0;text-align:right;font-feature-settings:'tnum' 1}
.rg2-details .rg2-n{display:inline-block;min-width:38px;font-weight:600;font-feature-settings:'tnum' 1}
.rg2-details .note.warn{color:var(--era-yellow-800);margin:6px 0 0}

/* the lists' logos (see ListMark.razor); the swatch stays for lists without one */
.list-logo{width:60px;height:60px;flex:0 0 60px;object-fit:contain;vertical-align:middle;margin-right:10px;border-radius:6px;background:#fff;box-shadow:0 0 0 1px var(--color-neutral-200)}
.list-logo.lg{margin-right:0}
.list-logo.sm{width:22px;height:22px;flex-basis:22px;margin-right:6px;border-radius:3px} /* the compact map panel */
.list-logo-cell{display:flex;align-items:center;gap:8px}

/* Posete: who is on the site right now — the map of locations and the table of sessions (side by side from 1100 px) */
.visitors-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-4)}
.visitors-map{height:420px;border-radius:var(--radius-md);overflow:hidden;background:var(--color-neutral-100);box-shadow:var(--shadow-sm)}
.vis-dot{display:inline-block;width:9px;height:9px;border-radius:50%;vertical-align:middle}
.vis-dot.on{background:var(--era-green)}
.vis-dot.off{background:var(--color-neutral-400)}
.copy-ip{margin-left:4px;padding:0 5px;font-size:12px;line-height:1.4;vertical-align:baseline;color:var(--color-neutral-700)}
.copy-ip:hover{color:var(--color-accent-700)}
@media (max-width:640px){.visitors-map{height:300px}}

@media (min-width:1100px){
  .visitors-grid{grid-template-columns:minmax(360px,2fr) minmax(0,3fr);align-items:start}
  .visitors-map{height:560px}
  /* viewport-fit: the map and the table share the page height; the table scrolls on its own under a sticky header */
  .page-fit .visitors-grid{flex:1 1 auto;min-height:360px;align-items:stretch;grid-template-rows:minmax(0,1fr)}
  .page-fit .visitors-map{height:auto;min-height:0}
  .page-fit .visitors-scroll{overflow:auto;min-height:0;border-radius:var(--radius-md)}
  .page-fit .visitors-scroll thead th{position:sticky;top:0;background:var(--color-bg);z-index:1}
}

/* — viewport-fit pages (desktop): every page with a table or a list ends with the window instead of scrolling. The shell
   becomes a column of the window's height, the page takes what the masthead and strip leave, the heading, toolbar and
   notes keep their height, and the segment marked .fit-scroll (a table, a list, a form column) takes the rest and scrolls
   inside its own box under a sticky header; .fit-grid / .fit-col carry the height down through a two-column layout and
   .fit-figure lets the protocol photo grow. Below 901 px nothing of this applies: phones keep one flowing page with
   wide tables scrolling sideways inside .table-scroll. A very short window scrolls a little rather than squeezing a
   segment under its floor. — */
.results-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-6);align-items:start}
.verify-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-6);align-items:start}
@media (min-width:901px){
  .results-grid{grid-template-columns:minmax(0,1fr) minmax(260px,320px)}
  .verify-grid{grid-template-columns:minmax(0,1fr) minmax(360px,1fr)}
  .era-root:has(.page-fit){height:100vh;height:100dvh;display:flex;flex-direction:column}
  .page-fit{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;padding-bottom:var(--space-4)}
  .page-fit .fit-scroll{flex:1 1 auto;min-height:240px;overflow:auto}
  .page-fit .fit-scroll thead{position:sticky;top:0;z-index:1}
  .page-fit .fit-scroll thead th{background:var(--color-bg)}
  .page-fit .fit-col{min-height:0;display:flex;flex-direction:column}
  .page-fit .fit-grid{flex:1 1 auto;min-height:320px;grid-template-rows:minmax(0,1fr);align-items:stretch}
  .page-fit .fit-grid>.fit-scroll,.page-fit .fit-grid>.fit-col{min-height:0}
  .page-fit .fit-figure .doc-frame{flex:1 1 auto;min-height:0;aspect-ratio:auto}
  .page-fit .dash-grid{flex:1 1 auto;min-height:360px;grid-template-rows:minmax(0,1fr)}
  .page-fit .dash-grid .dash-map{min-height:0;display:flex;flex-direction:column}
  .page-fit .map-wrap{flex:1 1 auto;height:auto;min-height:0}
  .page-fit .dash-grid .dash-list{min-height:0;display:flex;flex-direction:column}
  .page-fit .ranked{flex:1 1 auto;min-height:0;overflow-y:auto;padding-right:6px;scrollbar-gutter:stable}
}
