/* THE ACCENT: one colour for the whole dashboard, the Sonocount teal, defined here and nowhere else (a page does not set its own). `--accent` is for what is drawn
   in the colour: a link, a selected mark, a focus ring, the accent of a check box or a slider. White on the logo teal is 4.71:1 (`--accent-fill`). The text teal is the same hue a little darker, so that it
   is 4.6:1 on the light panel's cards (the logo teal is 4.43:1 there). On the dark panel the teal is lighter, of the same hue: 8.5:1 on the panel's background. `--accent-fill` is the colour of a filled control (a selected tab, a primary button, a mode
   on): its text is white in both themes (4.71:1), so the fill does not get lighter in the dark theme. */
:root{--accent:#0e7c8e;--accent-fill:#0E7F91}
/* ONE HOVER (docs/design/ask_and_data_dock.md, "One hover for the whole dashboard"): every control reacts under the pointer and on keyboard focus,
   in one of three looks by its kind. Not filled: the tint `--rs-hover-bg` behind it, its text or icon (and its border, if it has one) in the accent.
   Filled (a primary button, the open tab): brighter. A link: underlined. A disabled control has no hover. The tint follows the theme's accent. */
:root{--rs-hover-bg:color-mix(in srgb,var(--accent) 12%,transparent)}
/* THE CARD STANDARD of the panel (docs/guides/dashboard-parts.md, "Cards"): the three numbers a page may change in one place.
   --rs-card-gap: the space between two cards. --rs-card-pad: the padding inside a card (a closed card is 14 + 16 + 14 = 44px high with the default).
   --rs-panel-bottom: the room under the last card at the end of the panel. */
:root{--rs-card-gap:12px;--rs-card-pad:14px;--rs-panel-bottom:28px}
html[data-rs-theme=dark],#sb[data-theme=dark]{--accent:#42c2d7}
/* the theme's tokens for every part of the page (the boxes, the windows, the popup), the same values as the panel's (#sb, below) */
:root{--bg:#fff;--ink:#16181d;--mut:#6b7280;--line:#e6e8ec;--card:#f7f8fa}
html[data-rs-theme=dark]{--bg:#14171c;--ink:#e9ecf1;--mut:#8b93a1;--line:#272b33;--card:#1c2026}
/* the edge of a closed card and of a card that opens something ("Cards: the panel standard"): a thin line of 3:1 or more on the card and on the panel */
:root{--rs-card-edge:color-mix(in srgb,var(--line) 70%,var(--mut))}      /* the light edge that Kaveh tested and chose (variant F) */
html[data-rs-theme=dark],#sb[data-theme=dark]{--rs-card-edge:color-mix(in srgb,var(--line) 45%,var(--mut))}
/* roadstyle's map dashboard: the look of its controls, panels and windows (docs/design/dashboard_module.md) */
.rs-zoom{position:absolute;bottom:10px;left:140px;z-index:2;background:var(--rs-tb-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  padding:2px 6px;border-radius:4px;font:11px/1.5 monospace;color:var(--rs-tb-ink);pointer-events:none}
/* the base-map button is a MAP CONTROL in the top-right column (zoom, 2D/3D, Street View), so it
   has their size and moves with #map when a host insets it; its menu opens to the button's left.
   The placement rules outrank a host page's old `.bm-icon{right:..}` workarounds, which were for
   the button's former home on <body> and would now only misplace it. */
.maplibregl-ctrl.bm-ctrl{position:relative;overflow:visible}
.maplibregl-ctrl .bm-icon{font:16px/1 system-ui,sans-serif;color:#5b616b;cursor:pointer;
  position:static !important;top:auto !important;right:auto !important;bottom:auto !important;left:auto !important}
.maplibregl-ctrl .bm-icon:hover{background:var(--rs-hover-bg);color:var(--accent)}
.maplibregl-ctrl .bm-menu{position:absolute !important;top:0 !important;right:36px !important;bottom:auto !important;left:auto !important;
  z-index:3;background:#fff;border-radius:8px;border:1px solid rgba(0,0,0,.06);box-shadow:0 4px 16px rgba(0,0,0,.14);
  font:13px system-ui,sans-serif;display:none;overflow:hidden;padding:4px;text-align:left}
.bm-menu.open{display:block}
.bm-menu div{padding:6px 12px;cursor:pointer;white-space:nowrap;border-radius:5px}
.bm-menu div:hover{background:var(--rs-hover-bg);color:var(--accent)}
.bm-menu div.on{font-weight:700;color:var(--accent)}
/* non-panel: the map's own colour-by + filter cards share one anchored top-left stack, clear of
   the native zoom controls (top-right) and the scale bar (bottom-left). Panel mode docks them. */
.rs-tl{position:absolute;top:10px;left:10px;z-index:2;display:flex;flex-direction:column;
  gap:8px;align-items:flex-start;max-height:calc(100% - 20px)}
.rs-tl .co-ctrl,.rs-tl .tn-ctrl,.rs-tl .vw-ctrl{position:static;max-height:none}
.flt-sw{display:inline-block;width:16px;height:5px;border-radius:2px;margin:0 2px 0 5px;
  vertical-align:middle;border:1px solid rgba(0,0,0,.15)}
.rs-rule{margin-top:4px;padding-top:4px;border-top:1px solid #ddd}   /* the first row of a group in a box (_check's rule) */
.rs-find{background:#fff;border-radius:8px;box-shadow:0 2px 10px rgba(0,0,0,.10);border:1px solid rgba(0,0,0,.06);
  font:13px system-ui,sans-serif;color:#334155;width:230px;box-sizing:border-box}
.rs-find .rs-side-q-res:empty{display:none}
/* panel mode: a full-height side panel; the map (and every right-anchored control) shifts left.
   --rs-side is set on <body> so host-page controls can offset themselves the same way. */
body.rs-panel{--rs-side:320px}
body.rs-panel #map{right:320px}
.rs-side{position:absolute;top:0;right:0;bottom:0;width:320px;z-index:3;background:#fff;
  border-left:1px solid #e4e4e4;box-shadow:-2px 0 10px rgba(0,0,0,.07);
  display:flex;flex-direction:column;font:13px/1.6 system-ui,sans-serif;color:#222}
.rs-side-hd{padding:11px 14px;border-bottom:1px solid #ececec;display:flex;
  justify-content:space-between;align-items:center;color:#666;font-weight:700;
  font-size:11px;letter-spacing:.6px;text-transform:uppercase}
.rs-side-x,.rs-side-min{cursor:pointer;color:#999;font:700 16px/1 sans-serif;padding:0 3px}
.rs-side-min{display:inline-flex;align-items:center}
.rs-side-x:hover,.rs-side-min:hover{background:var(--rs-hover-bg);color:var(--accent)}
.rs-side-q{padding:9px 14px;border-bottom:1px solid #ececec}
.rs-side-q input{width:100%;box-sizing:border-box;padding:6px 9px;border:1px solid #ddd;
  border-radius:7px;font:12.5px system-ui,sans-serif;outline:none}
.rs-side-q input:focus{border-color:#7c4dff}
.rs-side-q-res{max-height:200px;overflow:auto}
.rs-qrow{padding:4px 2px;border-bottom:1px solid var(--line);cursor:pointer;display:flex;
  justify-content:space-between;gap:10px;font-variant-numeric:tabular-nums}
.rs-qrow:hover{background:var(--rs-hover-bg);color:var(--accent)}
.rs-qrow b{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rs-qrow span{color:var(--mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:58%}
.rs-qmore{color:var(--mut);padding:5px 2px;font-size:12px}
/* a slot for host-page controls (filters, toggles) pinned above the record */
.rs-side-tools{padding:9px 14px;border-bottom:1px solid #ececec;display:none}
.rs-side-tools:not(:empty){display:block}
.rs-side-bd{flex:1;overflow:auto;padding:12px 14px}
.rs-host .rs-side-host{flex:1;overflow:auto}
.rs-side-hd2{border-top:1px solid #ececec}
/* the map's own controls, docked: static block cards instead of floating boxes */
.rs-side-ctl{flex:0 1 auto;min-height:0;max-height:55%;overflow:auto}
.rs-side .co-ctrl,.rs-side .tn-ctrl,.rs-side .vw-ctrl,.rs-side .co-lg{position:static;box-shadow:none;border-radius:0;
  max-height:none;background:#fff;border-bottom:1px solid #f0f0f0;padding:8px 14px}
/* hidden panel: the map takes the page back; the reopen button lives in the map's own
   top-right control stack (below 2D/3D), so no extra positioning is needed */
body.rs-side-hidden .rs-side{display:none}
body.rs-side-hidden #map{right:0}
body.rs-side-hidden{--rs-side:0px}
.rs-name{font-size:17px;font-weight:700;margin:0 0 10px;line-height:1.3}
/* the rows of a road's fields: in the panel (#sb) they take its theme's colours, elsewhere the light ones */
.rs-kv{display:flex;justify-content:space-between;gap:12px;padding:4px 0;
  border-bottom:1px solid var(--line,#f3f3f3);font-variant-numeric:tabular-nums}
.rs-kv:last-child{border-bottom:0}
.rs-kv span{color:var(--mut,#8a8a8a);flex:0 0 auto}
.rs-kv b{font-weight:600;text-align:right;word-break:break-all;min-width:0}
.co-ctrl,.tn-ctrl,.vw-ctrl{position:absolute;top:10px;right:10px;z-index:2;background:#fff;border-radius:8px;
box-shadow:0 2px 10px rgba(0,0,0,.10);border:1px solid rgba(0,0,0,.06);padding:6px 10px;
font:11px system-ui,sans-serif;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--mut,#6b7280)}
.tn-ctrl input{vertical-align:middle;width:120px;margin:0 6px 0 0}
.tn-row{display:flex;align-items:center;gap:6px;margin:3px 0}
.co-ctrl select,.tn-ctrl select,.vw-ctrl select{font:13px system-ui,sans-serif;font-weight:600;text-transform:none;letter-spacing:0;
  border:0;background:transparent;cursor:pointer;outline:none;color:#334155;margin-left:3px}
.co-lg{position:absolute;left:10px;bottom:24px;z-index:2;background:var(--rs-box-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
border-radius:8px;box-shadow:0 2px 10px rgba(0,0,0,.10);border:1px solid var(--rs-tb-border);
padding:8px 11px;font:12px system-ui,sans-serif;color:var(--rs-tb-ink)}
.co-lg .lg-title{font-weight:600;margin-bottom:5px;color:#334155}
.co-lg .lg-row{display:flex;align-items:center;gap:7px;white-space:nowrap;padding:1px 0}
.co-lg .lg-sw{width:14px;height:8px;border-radius:2px;display:inline-block;flex:none}
.co-lg .lg-sw.circle{width:10px;height:10px;margin:0 2px;border-radius:50%}
.co-lg .lg-sw.line{height:3px}
.co-lg .lg-bar{height:10px;width:150px;border-radius:3px;margin:3px 0}
.co-lg .lg-ends{display:flex;justify-content:space-between;color:var(--mut,#6b7280);font-size:11px}
.co-lg .co-lg-hd{cursor:pointer;user-select:none;padding-bottom:5px;
  font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--mut,#6b7280)}
.co-lg.collapsed .co-lg-body{display:none}
.co-lg.collapsed{padding-bottom:8px}
.ov-ctrl{position:absolute;bottom:88px;right:calc(10px + var(--rs-side,0px));z-index:2;   /* above the base-map button */
background:#fff;border-radius:8px;
box-shadow:0 2px 10px rgba(0,0,0,.10);border:1px solid rgba(0,0,0,.06);font:13px system-ui,sans-serif;color:#334155}
.ov-ctrl .ov-hd{padding:8px 11px 6px;font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--mut,#6b7280)}
.ov-ctrl .ov-body{padding:0 11px 8px;display:flex;flex-direction:column;gap:3px}
.ov-ctrl label{display:flex;align-items:center;gap:6px;white-space:nowrap;cursor:pointer}
/* box_layout "stack": the Layers box in the top-left stack under Roads, folded like it */
.rs-tl .ov-ctrl{position:static;max-height:none;overflow:auto;min-height:0}
.ov-ctrl.collapsed .ov-body{display:none}
.rs-tl .ov-ctrl .ov-hd{cursor:pointer;user-select:none}
.ov-ctrl label:hover{background:var(--rs-hover-bg);color:var(--accent)}
.ov-ctrl .ov-sw{width:12px;height:12px;border-radius:3px;display:inline-block;flex:none}
/* text: soft slate, never black - popups, the map's own buttons, the scale and attribution */
.maplibregl-ctrl-group button{color:#334155}
.maplibregl-ctrl-scale{color:#475569}
.maplibregl-ctrl.maplibregl-ctrl-attrib,.maplibregl-ctrl-attrib-inner,.maplibregl-ctrl.maplibregl-ctrl-attrib a{color:#475569}
/* Street View window (street_view="window"): floats over the map, drag by the bar, resize by the corner */
.rs-svw{position:absolute;right:calc(56px + var(--rs-side,0px));bottom:40px;width:380px;height:260px;
  min-width:220px;min-height:150px;z-index:4;display:flex;flex-direction:column;overflow:hidden;
  resize:both;background:#fff;border-radius:8px;box-shadow:0 4px 18px rgba(0,0,0,.3);
  font:12px/1.4 system-ui,-apple-system,sans-serif}
.rs-svw[hidden],.rs-svw [hidden]{display:none!important}
.rs-svw-bar{display:flex;align-items:center;gap:6px;padding:5px 6px 5px 10px;background:#23262d;color:#fff;
  cursor:move;user-select:none;touch-action:none}
.rs-svw-t{flex:1;font-weight:600;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.rs-svw-bar button{border:0;background:none;color:#fff;font:14px/1 system-ui;cursor:pointer;padding:2px 5px}
.rs-svw-bar button:disabled{opacity:.3;cursor:default}
.rs-svw iframe,.rs-svw-pano,.rs-svw-alt{flex:1;min-height:0;position:relative;width:100%;border:0;background:#eee}
.rs-svw-mode,.rs-svw-prov{display:inline-flex;border:1px solid #555;border-radius:4px;overflow:hidden;cursor:default}
.rs-svw-bar .rs-svw-mode button,.rs-svw-bar .rs-svw-prov button{font:11px/1 system-ui;padding:3px 7px;color:#cbd5e1}
.rs-svw-msg{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  padding:14px;text-align:center;color:#666;background:#f4f4f4}
.rs-svw-msg code{background:#e6e6e6;padding:1px 4px;border-radius:3px;color:#333}
.rs-svw.rs-drag iframe,.rs-svw.rs-drag .rs-svw-pano,.rs-svw.rs-drag .rs-svw-alt,.rs-svw.rs-drag gmp-map-3d{pointer-events:none}
.rs-g3d gmp-map-3d{flex:1;width:100%}
.rs-svw-bar a.rs-g3d-src{color:#9aa3ad;font-size:10px;text-decoration:none;white-space:nowrap}
.rs-g3d-warn{color:#fbbf24;font-size:11px;white-space:nowrap}
.maplibregl-ctrl-group button.rs-on{background:#dfe9ff}
.rs-svm{pointer-events:none}
html.rs-phone .rs-svw{   /* a phone (the template's phone width): a window is a bottom sheet */left:0!important;right:0!important;top:auto!important;bottom:0!important;
  width:auto!important;height:45%!important;border-radius:14px 14px 0 0;resize:none}
.rs-svw-bar{flex-wrap:wrap}   /* the buttons and the credit of a window do not fit in one row: the second row, and the note of the 3D window has a row of its own */
.rs-svw-t{flex:1 0 auto;max-width:100%}   /* the name of the road keeps its room: a crowded header wraps, it does not cut the name or the provider tabs */
.rs-svw-prov{flex:0 0 auto}
.rs-svw-step{display:inline-flex;flex:0 0 auto}   /* the two arrows wrap together */
.rs-svw-bar{position:relative}
.rs-svw-bar button.rs-svw-x{position:absolute;top:6px;right:8px}   /* the close button stays at the top right when the header wraps (by its class: the tooltip code takes the `title` away on hover) */
html.rs-phone .rs-svw-bar a.rs-g3d-src{display:none}   /* its credit is in the bar's attribution box on a phone: the header is one row */
html.rs-phone .rs-g3d-note{order:9;flex:1 0 100%}
/* the phone form of a template (template.js; `rs-phone` and `rs-tpl-*` are on <html> from the first paint). A sidebar template shows its
   panel as a bottom sheet; the map is the full width. */
.rs-grip{display:none}
html.rs-phone:not(.rs-tpl-map) #map{right:0!important}
html.rs-phone:not(.rs-tpl-map) body{--rs-side:0px!important}
html.rs-phone:not(.rs-tpl-map) :is(#sb-hide,#sb-show){display:none!important}
html.rs-phone{--rs-sheet-h:40dvh;--rs-grip-h:44px}
html.rs-phone.rs-sheet-0{--rs-sheet-h:0px}
html.rs-phone.rs-sheet-2{--rs-sheet-h:calc(100dvh - var(--rs-top,52px) - var(--rs-grip-h))}
html.rs-phone.rs-tpl-dashboard #sb{top:auto;left:0;right:0;bottom:0;width:auto;height:var(--rs-sheet-h);
  border-left:0;border-top:1px solid var(--line);z-index:5;transition:height .15s}
html.rs-phone.rs-sheet-0 #sb{display:none}
html.rs-phone.rs-tpl-dashboard .rs-grip{display:flex;align-items:center;justify-content:center;
  position:fixed;left:0;right:0;bottom:var(--rs-sheet-h);height:var(--rs-grip-h);z-index:6;box-sizing:border-box;touch-action:none;
  background:var(--rs-box-bg);color:var(--rs-tb-ink);border-radius:12px 12px 0 0;box-shadow:0 -2px 8px rgba(0,0,0,.15);transition:bottom .15s}
.rs-grip i{width:44px;height:5px;border-radius:3px;background:currentColor;opacity:.35}
/* the button of the grip: a down arrow (the sheet goes one height down), an up arrow when the sheet is closed */
.rs-grip-btn{position:absolute;right:8px;top:6px;width:32px;height:32px;padding:0;border:0;border-radius:6px;background:none;color:inherit;display:flex;align-items:center;justify-content:center;cursor:pointer}
html.rs-sheet-0 .rs-grip-btn svg{transform:rotate(180deg)}
/* a greyed tool */
.maplibregl-ctrl button:disabled{opacity:.4;cursor:not-allowed}
/* ---- the overlay layout and the bar (overlay.js, toolbar.js; docs/design/dashboard_templates.md, 3.1 to 3.3) ---- */
html.rs-overlay #map{position:absolute!important;inset:0!important;left:0!important;right:0!important;width:auto!important}
html.rs-overlay #sb,html.rs-overlay .rs-side{z-index:5;box-shadow:0 0 12px rgba(0,0,0,.2)}
html.rs-overlay #sb{background:var(--bg,#fff);bottom:0}
html.rs-overlay,html.rs-overlay body{overflow:hidden}
/* the chevron that brings a hidden right panel back: a small square at the top right, not a tool of the bar */
#rs-show-right{position:fixed;top:10px;right:10px;z-index:6;width:32px;height:32px;display:none}
#rs-show-right .maplibregl-ctrl{margin:0;float:none}
#rs-show-right button{width:32px;height:32px}
.bm-menu{background:var(--rs-pop-bg)!important;color:var(--rs-pop-ink)!important}
#rs-toolbar[data-held]{visibility:hidden}
#rs-toolbar{position:fixed;z-index:8;box-sizing:border-box;display:flex;align-items:center;gap:4px;padding:8px;
  border:1px solid var(--rs-tb-border);border-radius:10px;font:11px/1.2 system-ui,sans-serif}
#rs-toolbar .maplibregl-ctrl{margin:0!important;float:none!important}
#rs-toolbar .maplibregl-ctrl-group{display:flex;background:none;box-shadow:none;border-radius:0;gap:4px}
#rs-toolbar button{width:32px;height:32px;background:none;border:0;border-radius:6px;font:700 13px/32px system-ui,sans-serif;color:var(--rs-tb-ink);padding:0;cursor:pointer}
#rs-toolbar button svg,#rs-toolbar button .maplibregl-ctrl-icon{filter:none}
html[data-rs-theme=dark] #rs-toolbar .maplibregl-ctrl-icon{filter:invert(.85)}
#rs-toolbar button.on,#rs-toolbar button.rs-on{background:var(--rs-tb-on)}
#rs-toolbar button:disabled{opacity:.4;cursor:not-allowed}
/* the fold button (toolbar.js): a folded bar shows only this button; on a bar along the top or the bottom its arrow points to the side */
html.rs-tb-folded #rs-toolbar>.rs-tb-row{display:none}
#rs-toolbar.rs-tb-top .rs-tb-fold svg,#rs-toolbar.rs-tb-bottom .rs-tb-fold svg{transform:rotate(-90deg)}
html.rs-tb-folded #rs-toolbar .rs-tb-fold svg{transform:none}
#rs-toolbar .maplibregl-ctrl-group button+button{border:0}
#rs-toolbar button:is(:hover,:focus-visible):not(:disabled){background:var(--rs-hover-bg);color:var(--accent)}
.rs-tb-row,.rs-tb-scroll{display:contents}
/* a bar that is too short for its tools wraps to a second column (a third, and so on), toward the map; the first column is at the edge. No `overflow`: a box opens outside the bar.
   The margins of 64 px (the corner box at the bottom) shrink in a tiny window: the bar is never lower than two tools (86 px) and keeps above the corner box (the `top` rule). */
#rs-toolbar.rs-tb-right,#rs-toolbar.rs-tb-left{flex-direction:column;flex-wrap:wrap;align-content:flex-start;width:auto;padding-inline:5px;top:max(51px,min(50%,calc(100% - 87px)));transform:translateY(-50%);max-height:max(86px,calc(100% - 128px))}
#rs-toolbar.rs-tb-right{flex-wrap:wrap-reverse}
#rs-toolbar.rs-tb-right .maplibregl-ctrl-group,#rs-toolbar.rs-tb-left .maplibregl-ctrl-group{flex-direction:column}
#rs-toolbar.rs-tb-right{right:8px}
#rs-toolbar.rs-tb-left{left:8px}
#rs-toolbar.rs-tb-top,#rs-toolbar.rs-tb-bottom{flex-direction:row;flex-wrap:wrap;justify-content:center;min-height:44px;left:50%;transform:translateX(-50%);width:max-content;max-width:calc(100% - 16px)}   /* no overflow rule: a box opens outside the bar, and a scroll would clip it */
#rs-toolbar.rs-tb-top{top:8px}
#rs-toolbar.rs-tb-bottom{bottom:8px}
/* the boxes of a button open toward the center of the map */
#rs-toolbar .bm-ctrl,#rs-toolbar .rs-attr-ctrl{position:relative!important;overflow:visible}
#rs-toolbar .bm-menu{position:absolute!important;z-index:9}
#rs-toolbar.rs-tb-right .bm-menu{top:0!important;bottom:auto!important;left:auto!important;right:calc(100% + 12px + var(--rs-tb-in,0px))!important}
#rs-toolbar.rs-tb-left .bm-menu{top:0!important;bottom:auto!important;right:auto!important;left:calc(100% + 12px + var(--rs-tb-in,0px))!important}
#rs-toolbar.rs-tb-top .bm-menu{top:calc(100% + 12px + var(--rs-tb-in,0px))!important;bottom:auto!important;left:0!important;right:auto!important}
#rs-toolbar.rs-tb-bottom .bm-menu{bottom:calc(100% + 12px + var(--rs-tb-in,0px))!important;top:auto!important;left:0!important;right:auto!important}
html.rs-has-toolbar .maplibregl-ctrl-top-right,html.rs-has-toolbar .maplibregl-ctrl-bottom-right{display:none!important}
#rs-attr-box{position:absolute;z-index:9}
#rs-attr-box[hidden]{display:none}
#rs-attr-box a{color:inherit}
#rs-toolbar.rs-tb-right #rs-attr-box{right:calc(100% + 12px + var(--rs-tb-in,0px));bottom:0}
#rs-toolbar.rs-tb-left #rs-attr-box{left:calc(100% + 12px + var(--rs-tb-in,0px));bottom:0}
#rs-toolbar.rs-tb-top #rs-attr-box{top:calc(100% + 12px + var(--rs-tb-in,0px));right:0}
#rs-toolbar.rs-tb-bottom #rs-attr-box{bottom:calc(100% + 12px + var(--rs-tb-in,0px));right:0}
#rs-toolbar .bm-menu.open{display:block}
/* every pop-up of the bar takes the bar's own look: one rule set (the bar, the boxes, the scale box) */
#rs-toolbar .bm-menu,#rs-attr-box,#rs-color-box,#rs-nav-box,#rs-roads-box,.rs-pop{background:var(--rs-box-bg)!important;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid var(--rs-tb-border)!important;border-radius:10px!important;color:var(--rs-tb-ink)!important}
/* the chevrons of the panels (show and hide) take the bar's look too */
#rs-show-right button,#sb-show,#sb-hide,html.rs-overlay .rs-side-min{background:var(--rs-tb-bg)!important;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid var(--rs-tb-border)!important;border-radius:10px!important;color:var(--rs-tb-ink)!important;box-shadow:none!important}
html.rs-overlay .rs-side-min{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;box-sizing:border-box;padding:0!important;font-size:16px;cursor:pointer}
/* the scale box */
#rs-scalebox{position:fixed;left:8px;bottom:8px;height:28px;box-sizing:border-box;z-index:7;display:flex;align-items:center;padding:0 8px;gap:6px;
  user-select:none;-webkit-user-select:none;pointer-events:none;font:11px/1 system-ui,sans-serif}
#rs-scalebox .maplibregl-ctrl-scale{flex:none;width:auto;max-width:80px;margin:0!important;background:none!important;color:var(--rs-tb-ink)!important;border-color:var(--rs-tb-ink)!important;padding:0 2px;text-align:left}
#rs-scalebox .rs-scale-slot{flex:none;width:90px;overflow:hidden}
/* the credits in the corner box: a small round button with the italic i; its list opens upward, toward the middle of the window */
#rs-scalebox .rs-attr-ctrl{pointer-events:auto;position:relative!important;overflow:visible;flex:none;float:none;margin:0;width:22px;height:22px;background:none!important;border:0;box-shadow:none!important;border-radius:0}
#rs-scalebox .rs-attr-ctrl button{width:22px;height:22px;padding:0;border:0;background:none;color:var(--rs-tb-ink);border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center}
#rs-scalebox .rs-attr-ctrl button:is(:hover,:focus-visible){background:var(--rs-hover-bg);color:var(--accent)}
#rs-scalebox .rs-attr-ctrl button svg{width:16px;height:16px}
html:not(.rs-panel-left) #rs-scalebox .rs-attr-ctrl{order:-1}
#rs-scalebox #rs-attr-box{position:absolute;top:auto;bottom:calc(100% + 8px);left:auto;right:-8px;width:264px}
html:not(.rs-panel-left) #rs-scalebox #rs-attr-box{left:-8px;right:auto}
#rs-scalebox .rs-zoom,#rs-scalebox .rs-zoom-slot{position:static!important;flex:none;width:46px!important;margin:0;padding:0;background:none!important;color:var(--rs-tb-ink)!important;font:11px/1 system-ui,sans-serif;font-variant-numeric:tabular-nums;text-align:right!important;border-radius:0}
html.rs-theme-in-bar #sb-th{display:none!important}
html.rs-phone #rs-scalebox{display:none}
/* thin overlay scrollbars for every scrollable box: 6 px, a rounded thumb in the theme's text color at 30 %, no track, no arrows */
html.rs-overlay *{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--rs-tb-ink) 30%,transparent) transparent}
html.rs-overlay ::-webkit-scrollbar{width:6px;height:6px;background:transparent}
html.rs-overlay ::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--rs-tb-ink) 30%,transparent);border-radius:3px}
html.rs-overlay ::-webkit-scrollbar-track,html.rs-overlay ::-webkit-scrollbar-corner{background:transparent}
html.rs-overlay ::-webkit-scrollbar-button{display:none}
/* ---- the base-map box (basemapbox.js): radio rows with a swatch, then "On top" ---- */
.bm-menu.rs-bm-box{display:none;width:200px!important;padding:8px;gap:2px;border-radius:8px;max-height:calc(100dvh - 24px);overflow-y:auto}
.bm-menu.rs-bm-box.open{display:grid}
.rs-bm-h{font:700 10px/1.2 system-ui,sans-serif;text-transform:uppercase;letter-spacing:.05em;opacity:.65;margin:2px 4px 4px}
.bm-menu.rs-bm-box div{padding:0!important}
.bm-menu.rs-bm-box .rs-bm-h{padding:2px 4px!important}
.rs-bm-row{display:flex;align-items:center;gap:8px;padding:4px;border-radius:6px;cursor:pointer;font:12px/1.3 system-ui,sans-serif}
.rs-bm-row[hidden]{display:none}   /* a row the page cannot use (One-way arrows on a page without arrows) */
.rs-bm-row:hover{background:var(--rs-hover-bg);color:var(--accent)}
.rs-bm-sw{box-sizing:border-box;width:32px;height:20px;border-radius:3px;border:1px solid rgba(0,0,0,.2);flex:none}
.rs-bm-box hr{border:0;border-top:1px solid var(--rs-tb-border,rgba(0,0,0,.12));margin:4px 0;width:100%}
.rs-bm-row input:disabled+.rs-bm-n{opacity:.45}
.rs-bm-row.rs-bm-off{opacity:.45;cursor:not-allowed}
.rs-bm-box .rs-bm-opacity{font:12px/1.3 system-ui,sans-serif;padding:0 4px 4px 29px}   /* the Opacity slider under the 3D buildings row: in line with the row's name */
.rs-bm-box .rs-bm-opacity[hidden]{display:none}
.rs-g3d-note{color:#fbbf24;font-size:10.5px;line-height:1.2;flex:1;min-width:0}
.rs-g3d-note[hidden]{display:none}
.rs-svw-bar button.rs-g3d-follow{font:11px/1 system-ui;padding:3px 7px;border-radius:4px;color:#cbd5e1;background:none;border:1px solid rgba(255,255,255,.45);white-space:nowrap}
.rs-g3d-showwrap{position:relative}
.rs-g3d-showwrap[hidden]{display:none}
.rs-svw-bar button.rs-g3d-show{font:11px/1 system-ui;padding:3px 7px;border-radius:4px;color:#cbd5e1;background:none;border:1px solid rgba(255,255,255,.45);white-space:nowrap}
.rs-g3d-menu{position:absolute;top:calc(100% + 6px);right:0;z-index:5;min-width:140px;background:#23262d;color:#fff;border:1px solid rgba(255,255,255,.2);border-radius:6px;padding:6px 8px;font:12px/1.8 system-ui;box-shadow:0 4px 14px rgba(0,0,0,.4)}
.rs-g3d-menu[hidden]{display:none}
.rs-g3d-menu label{display:block;white-space:nowrap;cursor:pointer}
/* ---- the tool `legend` (colorbox.js): "Colour by" as radio rows, then the legend in two columns; the look of the base-map box ---- */
#rs-toolbar .rs-color-ctrl,#rs-toolbar .rs-nav-ctrl,#rs-toolbar .rs-roads-ctrl{position:relative!important;overflow:visible}
#rs-color-box{position:absolute;z-index:9}
#rs-color-box[hidden]{display:none}
#rs-toolbar.rs-tb-right #rs-color-box{right:calc(100% + 12px + var(--rs-tb-in,0px));top:0}
#rs-toolbar.rs-tb-left #rs-color-box{left:calc(100% + 12px + var(--rs-tb-in,0px));top:0}
#rs-toolbar.rs-tb-top #rs-color-box{top:calc(100% + 12px + var(--rs-tb-in,0px));right:0}
#rs-toolbar.rs-tb-bottom #rs-color-box{bottom:calc(100% + 12px + var(--rs-tb-in,0px));right:0}
#rs-color-box hr{border:0;border-top:1px solid var(--rs-tb-border);margin:8px 0 6px}
/* ---- the box of the tool `roads` (roadsbox.js): a row for each road class ---- */
#rs-roads-box{position:absolute;z-index:9}
#rs-roads-box[hidden]{display:none}
#rs-toolbar.rs-tb-right #rs-roads-box{right:calc(100% + 12px + var(--rs-tb-in,0px));top:0}
#rs-toolbar.rs-tb-left #rs-roads-box{left:calc(100% + 12px + var(--rs-tb-in,0px));top:0}
#rs-toolbar.rs-tb-top #rs-roads-box{top:calc(100% + 12px + var(--rs-tb-in,0px));right:0}
#rs-toolbar.rs-tb-bottom #rs-roads-box{bottom:calc(100% + 12px + var(--rs-tb-in,0px));right:0}
#rs-roads-box hr{border:0;border-top:1px solid var(--rs-tb-border);margin:8px 0 6px}
.rs-rd-bar{display:flex;gap:6px;margin:2px 0 6px}
.rs-rd-row{display:grid;grid-template-columns:18px 14px 1fr auto;gap:8px;align-items:center;margin:0;padding:2px 2px;cursor:pointer;font:12px/1.3 system-ui,sans-serif}
.rs-rd-row i{width:14px;height:8px;border-radius:2px;display:block}
.rs-rd-row span,.rs-rd-row button{text-align:left;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rs-rd-row b{font-weight:400;opacity:.65;font-variant-numeric:tabular-nums;font-size:11px}
.rs-rd-row input{margin:0;accent-color:var(--accent)}
#rs-toolbar #rs-roads-box button{width:auto;height:auto;min-width:0;border:0;background:none;color:inherit;font:12px/1.3 system-ui,sans-serif;cursor:pointer;padding:0;border-radius:6px}
#rs-toolbar #rs-roads-box button:is(:hover,:focus-visible){background:var(--rs-hover-bg);color:var(--accent)}      /* over the box's own `#rs-toolbar #rs-roads-box button` */
.rs-rd-row.rs-rd-plain{grid-template-columns:18px 1fr}
#rs-toolbar #rs-roads-box .rs-rd-bar button{padding:4px 12px;border:1px solid var(--rs-tb-border)}
/* ---- the box of the tool `navigate` (navbox.js): zoom, turn and tilt ---- */
#rs-nav-box{position:absolute;z-index:9}
#rs-nav-box[hidden]{display:none}
#rs-toolbar.rs-tb-right #rs-nav-box{right:calc(100% + 12px + var(--rs-tb-in,0px));top:0}
#rs-toolbar.rs-tb-left #rs-nav-box{left:calc(100% + 12px + var(--rs-tb-in,0px));top:0}
#rs-toolbar.rs-tb-top #rs-nav-box{top:calc(100% + 12px + var(--rs-tb-in,0px));right:0}
#rs-toolbar.rs-tb-bottom #rs-nav-box{bottom:calc(100% + 12px + var(--rs-tb-in,0px));right:0}
.rs-nb-row{display:grid;grid-template-columns:40px 1fr 36px;gap:6px;align-items:center;margin:7px 0}
.rs-nb-row span{opacity:.8} .rs-nb-row b{font-weight:600;text-align:right;font-variant-numeric:tabular-nums}
.rs-nb-row input[type=range]{width:100%;margin:0;accent-color:var(--accent)}
.rs-nb-zoom{display:grid;grid-template-columns:22px 1fr 22px;gap:4px;align-items:center}
#rs-nav-box button{width:22px;height:22px;padding:0;border:1px solid var(--rs-tb-border);border-radius:6px;background:none;color:inherit;font:600 14px/1 system-ui,sans-serif;cursor:pointer}
#rs-nav-box button:is(:hover,:focus-visible){background:var(--rs-hover-bg);color:var(--accent)}
#rs-nav-box .rs-nb-hint{font-size:11px;opacity:.7;margin-top:8px}
#rs-nav-box .rs-nb-reset{width:100%;height:auto;padding:5px 8px;margin-top:4px;font:12px system-ui,sans-serif}
.rs-cb-opts{display:grid;gap:1px}
.rs-cb-opt{display:block;width:100%;padding:6px 8px;border:0;border-radius:6px;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}
#rs-toolbar .rs-cb-opt{width:100%;height:auto;padding:5px 10px;border-radius:6px;font:12px/1.3 system-ui,sans-serif;color:var(--rs-tb-ink);text-align:left}
.rs-cb-opt:is(:hover,:focus-visible),.rs-cb-opt.on:is(:hover,:focus-visible){background:var(--rs-hover-bg);color:var(--accent)}
.rs-cb-opt.on{background:var(--rs-tb-on);font-weight:600}
.rs-cb-lg{display:grid;grid-template-columns:1fr 1fr;gap:3px 12px;padding:0 4px}
.rs-cb-lg .lg-title{grid-column:1/-1;font-weight:600;margin-bottom:2px}
.rs-cb-lg:has(.lg-n){grid-template-columns:1fr;gap:5px 0}                 /* a legend with counts: one column, the counts in a line */
.rs-cb-lg .lg-t{font-variant-numeric:tabular-nums}
.rs-cb-lg .lg-n{margin-left:auto;padding-left:10px;font-weight:400;font-size:11px;opacity:.6;font-variant-numeric:tabular-nums}
.rs-cb-lg .lg-row{display:flex;align-items:flex-start;gap:7px;min-width:0;line-height:1.25}      /* a long label wraps inside its column and never leaves the box */
.rs-cb-lg .lg-sw{width:16px;height:10px;margin-top:2px;border-radius:3px;display:inline-block;flex:none;box-shadow:inset 0 0 0 1px rgba(128,128,128,.35)}
.rs-cb-layers .lg-sw{box-shadow:inset 0 0 0 1px rgba(128,128,128,.55)}      /* a map layer's colour can be white or near white (land, paved): the border shows it */
.rs-cb-layers .lg-off{opacity:.45}
.rs-bm-layers[hidden]{display:none}
.rs-cb-lg .lg-sw.circle{width:11px;height:11px;margin:0 2.5px;border-radius:50%}
.rs-cb-lg .lg-sw.line{height:4px;border-radius:2px;box-shadow:none}
.rs-cb-lg .lg-bar{grid-column:1/-1;height:10px;border-radius:5px;margin:4px 0 2px}
.rs-cb-lg .lg-ends{grid-column:1/-1;display:flex;justify-content:space-between;opacity:.7;font-size:11px}
html.rs-has-toolbar :is(.co-ctrl,.co-lg,.tn-ctrl,.vw-ctrl){display:none!important}
/* every box of the bar (the base-map box, the colour box, the attribution): the same padding, shadow, font and text side; the base-map and colour boxes the same width */
#rs-toolbar .bm-menu,#rs-attr-box,#rs-color-box,#rs-nav-box,#rs-roads-box{box-sizing:border-box;padding:8px;box-shadow:0 2px 10px rgba(0,0,0,.2);font:12px/1.3 system-ui,sans-serif;text-align:left;max-height:calc(100dvh - 24px);overflow-y:auto}
#rs-toolbar .bm-menu.rs-bm-box,#rs-color-box,#rs-attr-box,#rs-nav-box,#rs-roads-box{width:264px!important}
/* ---- one background for everything that floats over the map: the bar's (--rs-tb-bg in popup.css), with the same blur, border and text color ---- */
.rs-zoom,.rs-find,.co-ctrl,.tn-ctrl,.vw-ctrl,.co-lg,.ov-ctrl,.maplibregl-ctrl .bm-menu,html.rs-overlay #sb,html.rs-overlay .rs-side,
html.rs-phone.rs-tpl-dashboard .rs-grip,html.rs-phone.rs-tpl-dashboard #sb{
  background:var(--rs-tb-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-color:var(--rs-tb-border);color:var(--rs-tb-ink)}
/* a phone: the bar at the top or the bottom takes a second row when its tools do not fit in one (each tool stays 32 px) */
html.rs-phone #rs-toolbar.rs-tb-top,html.rs-phone #rs-toolbar.rs-tb-bottom{height:auto;flex-wrap:wrap;justify-content:center;overflow:visible;left:8px;right:8px;width:auto;max-width:none;transform:none}
html.rs-phone #rs-toolbar.rs-tb-top .maplibregl-ctrl-group,html.rs-phone #rs-toolbar.rs-tb-bottom .maplibregl-ctrl-group{flex-direction:row}
/* a phone, the bar along the top: ONE row. The tools move sideways under a finger (no scrollbar), a soft fade at an edge shows that there are more, and the
   bar folds to one small button. A box opens under the bar as a fixed box: a scrolling row would clip a box that is its child. */
html.rs-phone #rs-toolbar.rs-tb-top{flex-wrap:nowrap;justify-content:flex-start}
html.rs-phone #rs-toolbar.rs-tb-top .rs-tb-row{display:block;position:relative;flex:1;min-width:0}
html.rs-phone #rs-toolbar.rs-tb-top .rs-tb-scroll{display:flex;gap:4px;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;overscroll-behavior-x:contain;touch-action:pan-x}
html.rs-phone #rs-toolbar.rs-tb-top .rs-tb-scroll::-webkit-scrollbar{display:none}
html.rs-phone #rs-toolbar.rs-tb-top .rs-tb-scroll>*{flex:none}
/* a tool of one button shrinks from 32 px to 26 px before the row scrolls (a phone of 390 px shows every tool of a bar of ten at once), and the row has 4 px at each
   end, so that the first and the last tool are whole when the row is at its end */
html.rs-phone #rs-toolbar.rs-tb-top .rs-tb-scroll{padding-inline:4px;scroll-padding-inline:4px}
html.rs-phone #rs-toolbar.rs-tb-top .rs-tb-scroll>:not(:has(button~button)){flex:0 1 32px;min-width:26px}
html.rs-phone #rs-toolbar.rs-tb-top .rs-tb-scroll>:not(:has(button~button))>button,html.rs-phone #rs-toolbar.rs-tb-top .rs-tb-scroll>:not(:has(button~button))>.maplibregl-ctrl-group>button{width:100%}
html.rs-phone #rs-toolbar.rs-tb-top .maplibregl-ctrl{transform:none}   /* MapLibre gives each control a transform; it would make the control the frame of its fixed box */
html.rs-phone #rs-toolbar.rs-tb-top .rs-tb-scroll>:first-child{margin-left:auto}
html.rs-phone #rs-toolbar.rs-tb-top .rs-tb-scroll>:last-child{margin-right:auto}
.rs-tb-fade{display:none;position:absolute;top:0;bottom:0;width:26px;pointer-events:none}
html.rs-phone #rs-toolbar.rs-tb-top .rs-more-l .rs-tb-fade-l{display:block;left:0;background:linear-gradient(to right,var(--rs-tb-bg),transparent)}
html.rs-phone #rs-toolbar.rs-tb-top .rs-more-r .rs-tb-fade-r{display:block;right:0;background:linear-gradient(to left,var(--rs-tb-bg),transparent)}
html.rs-phone.rs-tb-folded #rs-toolbar.rs-tb-top{right:auto}
html.rs-phone.rs-tb-folded #rs-toolbar.rs-tb-top .rs-tb-row{display:none}
html.rs-phone #rs-toolbar.rs-tb-top :is(.bm-menu,#rs-attr-box,#rs-color-box,#rs-nav-box,#rs-roads-box,#rs-settings-box){position:fixed!important;top:var(--rs-top,60px)!important;left:12px!important;right:12px!important;bottom:auto!important;width:auto!important;max-height:calc(100dvh - var(--rs-top,60px) - 12px)}
/* ---- the attribution box (toolbar.js): one row for each credit, the link icon at the right ---- */
#rs-attr-box[hidden]{display:none}
.rs-attr-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 10px;border-radius:6px;color:inherit;text-decoration:none;font:12px/1.3 system-ui,sans-serif}
a.rs-attr-row{cursor:pointer}
a.rs-attr-row:hover{background:var(--rs-hover-bg);color:var(--accent)}
.rs-attr-out{display:inline-flex;opacity:.55;flex:none}
a.rs-attr-row:hover .rs-attr-out{opacity:1}
/* The bar's background and blur are on a layer behind it, not on the bar: a box inside a bar that has a blur cannot blur the map behind the box
   (the bar would be its backdrop root), and it looked more transparent than the bar. */
#rs-toolbar{border:1px solid var(--rs-tb-border)!important;border-radius:10px!important;color:var(--rs-tb-ink)!important}
#rs-toolbar::before{content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;background:var(--rs-tb-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
/* the corner box (the scale, the zoom number, the credits) is of the first level, with the bar: the same border, radius, colour and blur, in the same two places: the border and the radius on the
   box, the colour and the blur on a layer behind it (a box inside this one, the credits list, is not nested in a blurred element, which a browser would not blur behind) */
#rs-scalebox{background:none!important;border:1px solid var(--rs-tb-border)!important;border-radius:10px!important;color:var(--rs-tb-ink)!important}
#rs-scalebox::before{content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;pointer-events:none;background:var(--rs-tb-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
/* ---- the card of a sidebar (templates/*.html): the layer between the translucent panel and its text ---- */
.sb-card{display:contents}
html.rs-overlay #sb,html.rs-phone.rs-tpl-dashboard #sb{padding:8px;overflow:hidden}
html.rs-overlay #sb .sb-card,html.rs-phone.rs-tpl-dashboard #sb .sb-card{display:block;box-sizing:border-box;height:100%;overflow:auto;padding:14px 15px;border-radius:8px;background:var(--rs-card-bg)}
/* the zoom read-out inside the scale box has no layer of its own (the box has the background and the blur) */
#rs-scalebox .rs-zoom{-webkit-backdrop-filter:none!important;backdrop-filter:none!important;border:0!important;box-shadow:none!important}
/* ---- the select list of the panels (selectbox.js): a button, and a list in the look of the boxes ---- */
.rs-sel{position:relative}
.rs-sel-native{display:none!important}
#sb .rs-sel-btn,.rs-side .rs-sel-btn,.rs-sel-btn{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;box-sizing:border-box;padding:6px 9px;
  border:0;border-radius:12px;background:var(--card,transparent);color:inherit;font:13px system-ui,sans-serif;text-align:left;cursor:pointer}
/* a select box on a card has the card's colour: a thin line shows that it is a field (as a text field), not a line of text */
#sb :is(.sb-sec[data-rs-card],.rs-sec-box) .rs-sel-btn{border:1px solid var(--line);padding:5px 8px}      /* a section's card and a page's card (also in a frame) */
.rs-sel-btn:hover:not(:disabled){background:var(--rs-hover-bg);color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}
.rs-sel-btn:focus-visible,.rs-sel-btn[aria-expanded=true]{outline:0;box-shadow:inset 0 0 0 1px var(--accent),0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}
.rs-sel-btn:disabled{opacity:.5;cursor:not-allowed}
.rs-sel-btn svg{flex:none;opacity:.6}
.rs-sel-t{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* ---- a colour picker (colorpick.js, docs/guides/dashboard-parts.md "A colour picker"): a swatch button, and a box in the look of the select list ---- */
.rs-cp{position:relative;display:inline-flex}
.rs-cp-native{display:none!important}
:is(#sb,.rs-frame,.rs-side,body) .rs-cp-btn{display:inline-flex;align-items:center;justify-content:center;width:44px;height:28px;padding:3px;border:1px solid var(--line);border-radius:8px;background:var(--card);cursor:pointer}
:is(#sb,.rs-frame,.rs-side,body) .rs-cp-btn:is(:hover,:focus-visible):not(:disabled){border-color:var(--accent);background:var(--rs-hover-bg)}
.rs-cp-btn[aria-expanded=true]{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}
.rs-cp-btn:disabled{opacity:.45;cursor:not-allowed}
.rs-cp-btn .rs-cp-sw{width:100%;height:100%;border-radius:5px}
.rs-cp-sw{display:block;box-sizing:border-box;border:1px solid color-mix(in srgb,var(--ink) 18%,transparent)}
.rs-cp-box{position:fixed;z-index:60;box-sizing:border-box;width:236px;padding:10px;border-radius:14px;background:var(--rs-card-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  box-shadow:0 6px 22px rgba(0,0,0,.3);color:var(--rs-tb-ink);font:12px system-ui,sans-serif;display:flex;flex-direction:column;gap:9px}
.rs-cp-sv{position:relative;height:132px;border-radius:9px;cursor:crosshair;touch-action:none;outline:none}
.rs-cp-sv:focus-visible,.rs-cp-hue:focus-visible{box-shadow:0 0 0 2px var(--accent)}
.rs-cp-dot{position:absolute;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px rgba(0,0,0,.45);pointer-events:none}
.rs-cp-row{display:flex;align-items:center;gap:8px}
.rs-cp-hue{position:relative;flex:1;height:12px;border-radius:6px;cursor:pointer;touch-action:none;outline:none;
  background:linear-gradient(to right,#f00,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00)}
.rs-cp-hue i{position:absolute;top:50%;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px rgba(0,0,0,.45);pointer-events:none}
.rs-cp-pair{display:inline-flex;border-radius:7px;overflow:hidden;flex:none}
.rs-cp-pair .rs-cp-sw{width:20px;height:24px;border-radius:0;padding:0;cursor:default}
.rs-cp-pair .rs-cp-old{border-radius:7px 0 0 7px;cursor:pointer}
.rs-cp-pair .rs-cp-new{border-radius:0 7px 7px 0;border-left:0}
.rs-cp-box .rs-cp-eye{flex:none;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid var(--line);border-radius:7px;background:var(--card);color:var(--rs-tb-ink);cursor:pointer}
.rs-cp-box .rs-cp-eye:is(:hover,:focus-visible){border-color:var(--accent);color:var(--accent);background:var(--rs-hover-bg)}
.rs-cp-hexl{display:flex;align-items:center;gap:8px;flex:1;color:var(--mut);font-weight:600;text-transform:uppercase;letter-spacing:.04em;font-size:10.5px}
.rs-cp-box .rs-cp-hex{flex:1;min-width:0;box-sizing:border-box;padding:5px 8px;border:1px solid var(--line);border-radius:7px;background:var(--card);color:var(--ink);
  font:13px ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:lowercase;outline:none}
.rs-cp-box .rs-cp-hex:focus{border-color:var(--accent)}
.rs-cp-recent{display:flex;flex-wrap:wrap;gap:6px;padding-top:2px;border-top:1px solid var(--line)}
.rs-cp-recent{padding-top:9px}
.rs-cp-recent .rs-cp-sw{width:22px;height:22px;padding:0;border-radius:6px;cursor:pointer}
.rs-cp-recent .rs-cp-sw:is(:hover,:focus-visible){outline:2px solid var(--accent);outline-offset:1px}
html.rs-phone .rs-cp-btn{height:44px;width:56px}
.rs-sel-list{position:fixed;z-index:60;box-sizing:border-box;overflow-y:auto;padding:5px;border-radius:14px;background:var(--rs-card-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  border:0;box-shadow:0 6px 22px rgba(0,0,0,.3);color:var(--rs-tb-ink);font:13px system-ui,sans-serif}
.rs-sel-opt{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 11px;border-radius:10px;cursor:pointer}
.rs-sel-opt.on{background:var(--rs-tb-hover)}
.rs-sel-opt.sel{font-weight:600}
.rs-sel-opt svg{flex:none;color:var(--accent)}
/* ---- the controls of the panels, in the theme (a dark panel has dark controls) ---- */
#sb,.rs-side{color-scheme:light}
#sb[data-theme=dark],html[data-rs-theme=dark] .rs-side{color-scheme:dark}
/* the page itself declares the dark theme too: a page in a frame (the live parts of the docs, a host's iframe) on a dark site otherwise gets a white
   backdrop from the browser, which shows at the round corners and beside the panel (the frame's and the page's colour schemes did not match) */
html[data-rs-theme=dark]{color-scheme:dark}
:is(#sb,.rs-side) :is(input:not([type]),input[type=text],input[type=search],input[type=number],input[type=url],textarea){
  box-sizing:border-box;padding:7px 11px;border:0;border-radius:12px;background:var(--card,var(--rs-card-bg));color:var(--ink,var(--rs-tb-ink));font:13px system-ui,sans-serif}
:is(#sb,.rs-side) :is(input,textarea)::placeholder{color:var(--mut,var(--rs-tb-ink));opacity:.6}
:is(#sb,.rs-side) :is(input:not([type]),input[type=text],input[type=search],input[type=number],input[type=url],textarea):focus{outline:0;box-shadow:inset 0 0 0 1px var(--accent),0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}
:is(#sb,.rs-side) :is(input[type=checkbox],input[type=radio],input[type=range]){accent-color:var(--accent)}
:is(#sb,.rs-side) :is(input[type=checkbox],input[type=radio]){width:16px;height:16px;margin:0}
:is(#sb,.rs-side) button:not(:where(.rs-frame *,#rs-dock *)){border-radius:10px}   /* a part's buttons keep the 6 px of :where(.rs-frame, #rs-dock) */
/* ---- the Street View and Google 3D windows: the style of the boxes (the second level of transparency: --rs-box-bg, like the popup and the tooltip) ---- */
.rs-svw{border-radius:14px;border:0;background:var(--rs-box-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);box-shadow:0 8px 28px rgba(0,0,0,.35);color:var(--rs-tb-ink)}
.rs-svw-bar{background:var(--rs-card-bg);color:var(--rs-tb-ink);padding:6px 44px 6px 14px;gap:6px}
.rs-svw-t{font-weight:600}
.rs-svw-bar button{border:0;background:none;color:var(--rs-tb-ink);min-width:28px;height:28px;padding:0 8px;border-radius:10px;font:13px/1 system-ui;cursor:pointer}
.rs-svw-bar button:is(:hover,:focus-visible):not(:disabled){background:var(--rs-hover-bg);color:var(--accent)}
.rs-svw-mode,.rs-svw-prov{display:inline-flex;border:0;border-radius:10px;overflow:hidden;background:var(--rs-tb-hover)}
.rs-svw-bar .rs-svw-mode button,.rs-svw-bar .rs-svw-prov button{height:24px;font:11px/1 system-ui;padding:0 9px;color:var(--rs-tb-ink);border-radius:0}
.rs-svw-bar .rs-svw-mode button.on,.rs-svw-bar .rs-svw-prov button.on,.rs-svw-bar button.rs-svw-cov.on{background:var(--accent-fill);color:#fff}
.rs-svw-bar button.rs-svw-cov{display:inline-flex;align-items:center;justify-content:center;width:28px;padding:0}   /* an icon button, as the arrows */
.rs-svw-bar button.rs-svw-cov svg{display:block;flex:none}
.rs-svw-bar button.rs-g3d-follow,.rs-svw-bar button.rs-g3d-show{border:0;background:var(--rs-tb-hover);color:var(--rs-tb-ink);border-radius:10px;height:24px;padding:0 10px;font:11px/1 system-ui}
.rs-svw-bar button.rs-g3d-follow.on{background:var(--accent-fill);color:#fff;border-color:var(--accent-fill)}
.rs-svw-bar button:is(.rs-g3d-follow,.rs-g3d-show):not(.on):is(:hover,:focus-visible){background:var(--rs-hover-bg);color:var(--accent)}
.rs-svw-bar button.rs-g3d-follow.on:is(:hover,:focus-visible){filter:brightness(1.1)}
.rs-svw-bar a.rs-g3d-src{color:var(--rs-tb-ink);opacity:.6}
.rs-g3d-warn{color:#d97706}
.rs-svw-msg{background:var(--rs-card-bg);color:var(--rs-tb-ink)}
.rs-svw-msg code{background:var(--rs-tb-hover);color:inherit;border-radius:6px;padding:1px 6px}
.rs-svw-msg a{color:var(--accent)}
.rs-g3d-menu{background:var(--rs-card-bg);color:var(--rs-tb-ink);border:0;border-radius:12px;box-shadow:0 6px 22px rgba(0,0,0,.3);padding:6px 10px}
.rs-svw iframe,.rs-svw-pano,.rs-svw-alt{background:var(--rs-card-bg)}
/* ---- the scroll protocol of a panel (docs/design/dashboard_templates.md): the header (title, theme and hide buttons) stays; only the body scrolls; the
   body does not hand its scroll to the map; a line under the header shows when the body is scrolled (panelscroll.js); the scrollbar is thin ---- */
html #sb{padding:0;overflow:hidden}
html .sb-card{display:flex;flex-direction:column;height:100%;min-height:0;box-sizing:border-box}
html .sb-top{flex:none;margin:0;padding:14px 15px 10px;position:relative;z-index:1;transition:box-shadow .15s}
html :is(.sb-top,.rs-phead).scrolled{box-shadow:0 1px 0 var(--line,var(--rs-tb-border)),0 8px 10px -8px rgba(0,0,0,.35)}
/* the dark theme: a black shadow at 35 % does not show on the dark panel (Kaveh: "the fading part in light theme is much more better than dark theme"). So the title row is
   a little lighter while the body is scrolled (a raised surface is lighter in a dark theme), with a lighter line and a deeper shadow */
html[data-rs-theme=dark] :is(.sb-top,.rs-phead).scrolled{background:color-mix(in srgb,var(--ink) 7%,transparent);box-shadow:0 1px 0 color-mix(in srgb,var(--ink) 16%,transparent),0 10px 16px -6px rgba(0,0,0,.95)}
/* an editor frame's head row (rs-frame-head, the tool row of Ask) has side margins and its own line: when its body is scrolled it gets only a shadow
   under that line, not the lighter band and the second line of the title row above (the band floated over the answers in the dark theme, 2026-11-07) */
html #sb .rs-frame-head.scrolled{background:none;box-shadow:0 8px 10px -8px rgba(0,0,0,.35)}
html[data-rs-theme=dark] #sb .rs-frame-head.scrolled{background:none;box-shadow:0 10px 16px -6px rgba(0,0,0,.95)}
html .sb-body{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;padding:0 15px calc(var(--rs-panel-bottom) + var(--rs-fold-room,0px))}      /* --rs-fold-room: sections.js, _fdKeep */
html.rs-overlay #sb .sb-card,html.rs-phone.rs-tpl-dashboard #sb .sb-card{display:flex;flex-direction:column;overflow:hidden;padding:0;border-radius:14px}
/* ---- the side of the panel (placement.js: <html class="rs-panel-left">) ---- */
html.rs-panel-left #sb,html.rs-panel-left .rs-side{left:0;right:auto}
html.rs-panel-left #sb{border-left:0;border-right:1px solid var(--line,var(--rs-tb-border))}
html.rs-panel-left #sb-show,html.rs-panel-left #rs-show-right{left:10px;right:auto}
html.rs-panel-left :is(#sb-hide,#sb-show,.rs-side-min) svg,html.rs-panel-left #rs-show-right svg{transform:scaleX(-1)}
html.rs-panel-left:not(.rs-overlay):not(.rs-phone) #map{left:var(--rs-panel-w,400px)!important;right:0!important}
html.rs-panel-left:not(.rs-overlay):not(.rs-phone):has(#sb.hidden) #map{left:0!important}
/* the boxes of a page with no toolbar (Layers) stand on the map, not over the docked panel at the left (the back button of an editor frame) */
html.rs-panel-left:not(.rs-overlay):not(.rs-phone) .rs-tl{left:calc(10px + var(--rs-panel-w,400px))}
html.rs-panel-left:not(.rs-overlay):not(.rs-phone):has(#sb.hidden) .rs-tl{left:10px}
/* the compass: our needle (tools.js) instead of MapLibre's picture, which is pale on a translucent bar */
/* the icon fills its button and is centered in it (MapLibre's own box is 29 px high and sat at the top of a 32 px button) */
.maplibregl-ctrl-compass{position:relative}
.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:none!important;position:absolute;inset:0;width:auto;height:auto;display:flex!important;align-items:center;justify-content:center}
.maplibregl-ctrl-compass .maplibregl-ctrl-icon svg{margin:0!important}
#rs-toolbar .maplibregl-ctrl-compass .maplibregl-ctrl-icon{filter:none!important}
/* ---- the settings box (settings.js) ---- */
#rs-toolbar .rs-set-ctrl{position:relative!important;overflow:visible}
#rs-settings-box{position:absolute;z-index:9}
#rs-settings-box[hidden]{display:none}
#rs-toolbar.rs-tb-right #rs-settings-box{right:calc(100% + 12px + var(--rs-tb-in,0px));bottom:0}
#rs-toolbar.rs-tb-left #rs-settings-box{left:calc(100% + 12px + var(--rs-tb-in,0px));bottom:0}
#rs-toolbar.rs-tb-top #rs-settings-box{top:calc(100% + 12px + var(--rs-tb-in,0px));right:0}
#rs-toolbar.rs-tb-bottom #rs-settings-box{bottom:calc(100% + 12px + var(--rs-tb-in,0px));right:0}
#rs-toolbar .bm-menu,#rs-settings-box{--rs-set-x:0}
#rs-settings-box{box-sizing:border-box;padding:8px;box-shadow:0 2px 10px rgba(0,0,0,.2);font:12px/1.3 system-ui,sans-serif;text-align:left;max-height:calc(100dvh - 24px);overflow-y:auto;width:264px!important;
  background:var(--rs-box-bg)!important;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid var(--rs-tb-border)!important;border-radius:10px!important;color:var(--rs-tb-ink)!important}
#rs-settings-box hr{border:0;border-top:1px solid var(--rs-tb-border);margin:8px 0 6px}
.rs-set-h{font:700 10px/1.2 system-ui,sans-serif;text-transform:uppercase;letter-spacing:.05em;opacity:.65;margin:6px 8px 6px}
.rs-set-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:3px 8px}
.rs-set-l{opacity:.85}
.rs-set-seg{display:inline-flex;border-radius:10px;background:var(--rs-tb-hover);padding:2px;gap:2px}
#rs-toolbar .rs-set-seg button,#rs-settings-box button{width:auto;height:auto;min-width:0;padding:4px 9px;border:0;border-radius:8px;background:none;color:inherit;font:11px/1.2 system-ui,sans-serif;cursor:pointer}
#rs-settings-box .rs-set-seg button.on{background:var(--rs-tb-on)}
#rs-settings-box .rs-set-seg button.on:is(:hover,:focus-visible){background:var(--rs-hover-bg);color:var(--accent)}
#rs-settings-box button:is(:hover,:focus-visible):not(:disabled){background:var(--rs-hover-bg);color:var(--accent)}
#rs-settings-box button:disabled{opacity:.4;cursor:not-allowed}
.rs-set-slide{display:grid;grid-template-columns:1fr auto;gap:2px 8px;align-items:center;padding:3px 8px}
.rs-set-slide span{grid-column:1;grid-row:1}
.rs-set-slide input{grid-column:1/-1;grid-row:2;width:100%;margin:0;accent-color:var(--accent)}
.rs-set-slide b{grid-column:2;grid-row:1;font-weight:600;font-size:11px}      /* the value is in the row of the label: two rows for a slider, not three */
.rs-set-key{padding:2px 8px 6px}
.rs-set-key input{width:100%;box-sizing:border-box;margin:4px 0;padding:6px 10px;border:0;border-radius:10px;background:var(--rs-tb-hover);color:inherit;font:12px system-ui,sans-serif}
.rs-set-key input:focus{outline:0;box-shadow:inset 0 0 0 1px var(--accent)}
.rs-set-btns{display:flex;gap:4px}
.rs-set-note{font-size:11px;opacity:.75;padding:2px 8px 4px}
.rs-set-key .rs-set-note{padding:4px 0 0}
html.rs-phone .rs-set-layout,html.rs-phone .rs-set-layout+hr{display:none}
/* ---- the explanation of a button (tip.js): a box of the page's look, instead of the browser's own ---- */
#rs-tip{position:fixed;z-index:80;box-sizing:border-box;width:max-content;max-width:220px;padding:5px 9px;border-radius:8px;background:var(--rs-box-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  border:1px solid var(--rs-tb-border);color:var(--rs-tb-ink);box-shadow:0 2px 8px rgba(0,0,0,.18);font:500 12px/1.35 system-ui,sans-serif;pointer-events:none}
#rs-tip[hidden]{display:none}
/* the person can hide the scale and the zoom number (settings.js: "Scale and zoom") */
html.rs-hide-scale #rs-scalebox .rs-scale-slot,html.rs-hide-scale #rs-scalebox .rs-zoom-slot,html.rs-hide-scale .maplibregl-ctrl-scale,html.rs-hide-scale .rs-zoom{display:none!important}
/* the view switch of the Google 3D window: the same look as the Street View mode switch (Imagery or Map) */
.rs-g3d-view button:disabled{opacity:.45;cursor:default}
/* ---- the shape of the panel in the overlay layout: the same panel (full height, its translucent frame, its card), with the corners on the map side
   curved. The frame's curve is concentric with the card's: card 14 px + the frame's 8 px = 22 px ---- */
html:not(.rs-phone).rs-overlay #sb{border-radius:22px 0 0 22px}
html:not(.rs-phone).rs-overlay.rs-panel-left #sb{border-radius:0 22px 22px 0}
/* "card": the panel is its card only: a floating card with an 8 px margin and rounded corners, no full-height frame (settings: Panel look) */
html:not(.rs-phone).rs-overlay.rs-panel-card #sb{top:8px;bottom:8px;right:8px;left:auto;height:auto;border-radius:0;background:none;-webkit-backdrop-filter:none;backdrop-filter:none;border:0;box-shadow:none;overflow:visible}
html:not(.rs-phone).rs-overlay.rs-panel-card.rs-panel-left #sb{left:8px;right:auto}
html:not(.rs-phone).rs-overlay.rs-panel-card #sb .sb-card{border-radius:14px;background:var(--rs-card-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);box-shadow:0 6px 24px rgba(0,0,0,.28)}
/* MapLibre turns the whole compass icon with the map: the ring must not turn, so the page cancels it and turns the needle only (tools.js) */
.maplibregl-ctrl-compass .maplibregl-ctrl-icon{transform:none!important}

/* ---- the panel's sections (sections.js), the standard (docs/guides/dashboard-parts.md, "Cards"): every section is a block as wide
   as the cards with --rs-card-gap above and below (the margins of two blocks, and of a card inside a block, collapse to this one number). A section
   without a label is that block only: the page's own HTML, no padding, no background, no title. ---- */
.sb-sec{display:block;margin:var(--rs-card-gap) 0}
.sb-sec[hidden]{display:none}
/* a section with a label is ONE CARD (`data-rs-card`): the look of `.rs-sec-box` (below), the title row, and the body in the same box. `background: false`
   (`no-bg`) has the same padding and title row with no colour behind. A closed card (`fold: true`) is the title row only. The title row has `#sb button` over
   it (specificity 1,0,1), so its rules start with `#sb` to win: without it the title of a card that folds was drawn as a boxed button. */
.sb-sec[data-rs-card]{padding:var(--rs-card-pad);border-radius:12px;background:var(--card);color:var(--ink)}
.sb-sec[data-rs-card=no-bg]{background:transparent}
/* the title row: the title, the chevron (a card that folds), then a "?" (rs.help.button) at the end, in the same place in every card */
#sb .sb-sec .rs-sec-hd{display:flex;align-items:center;gap:8px;width:100%;min-height:16px;margin:0 0 10px;padding:0;color:var(--ink);font:600 12px/16px system-ui,sans-serif;text-transform:uppercase;letter-spacing:.06em}
#sb .sb-sec .rs-sec-title{flex:1;min-width:0;margin:0;padding:0;border:0;border-radius:0;background:none;color:inherit;font:inherit;letter-spacing:inherit;text-transform:inherit;text-align:left}
#sb .sb-sec[data-rs-fold] > .rs-sec-hd{cursor:pointer}
#sb .sb-sec[data-rs-fold] > .rs-sec-hd:hover{color:var(--accent)}
#sb .sb-sec .rs-sec-title:hover{border:0;color:inherit;background:none}      /* a card's title row is not a control of its own: the card rules below give its hover */
#sb .sb-sec .rs-sec-title:focus-visible{outline:2px solid var(--accent);outline-offset:1px;border-radius:4px}
#sb .sb-sec.folded .rs-sec-hd{margin-bottom:0}
.sb-sec .rs-sec-hd > svg{flex:none;transition:transform .15s}
.sb-sec.folded .rs-sec-hd > svg{transform:rotate(-90deg)}
.sb-sec.folded .rs-sec-body{display:none}
/* the open card of the cards that fold: an accent ring and an accent title, so that it shows in a long panel. A ring inside the card, not a border:
   the card keeps its width and its height (the card standard). The full accent: 3:1 on the card in both themes (a lighter mix is 2.4:1 in the light theme) */
#sb .sb-sec[data-rs-fold]:not(.folded){box-shadow:inset 0 0 0 1.5px var(--accent)}
#sb .sb-sec[data-rs-fold]:not(.folded) > .rs-sec-hd{color:var(--accent)}
#sb .sb-sec .rs-sec-note{margin:-6px 0 10px;color:var(--mut);font:12.5px/1.4 system-ui,sans-serif}
#sb .sb-sec .rs-sec-note:empty{display:none}
#sb .sb-sec.folded > .rs-sec-note{margin:4px 0 0}
#sb .sb-sec[data-rs-open]{cursor:pointer}
/* a card that opens something has the thin edge of every closed card. Its background is the only choice: none (the default), with the light accent
   tint under the pointer, or `background: true`, the tint (the Ask card: it stands out). The edge is inside the card, so the size does not change. */
#sb .sb-sec[data-rs-open]{box-shadow:inset 0 0 0 1px var(--rs-card-edge)}
#sb .sb-sec[data-rs-open][data-rs-card=no-bg]:hover{background:color-mix(in srgb,var(--card) 92%,var(--accent))}
/* the tint and an accent edge: with the tint only, the card did not look like a card to press, on a phone most of all (no pointer, no hover; Kaveh, 2026-11-06) */
#sb .sb-sec[data-rs-open][data-rs-card=bg]{background:color-mix(in srgb,var(--card) 88%,var(--accent));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 55%,var(--rs-card-edge))}
#sb .sb-sec[data-rs-open][data-rs-card=bg]:hover{background:color-mix(in srgb,var(--card) 82%,var(--accent))}
/* a closed card that folds has the thin edge; open, it has the accent ring in its place */
#sb .sb-sec[data-rs-fold].folded{box-shadow:inset 0 0 0 1px var(--rs-card-edge)}
#sb .sb-sec[data-rs-open]:hover > .rs-sec-hd{color:var(--accent)}
#sb .sb-sec[data-rs-open]:has(> .rs-sec-hd > .rs-sec-title:disabled){cursor:default}
#sb .sb-sec[data-rs-open] > .rs-sec-hd{margin-bottom:0}
#sb .sb-sec[data-rs-open] > .rs-sec-note{margin:4px 0 0}
#sb .sb-sec[data-rs-open] > .rs-sec-body:empty{display:none}
/* a "?" in a title row keeps the row 16px high, so a closed card stays 44px. In a card of the page's HTML (`.rs-card-title`) it is at the right end too. */
#sb :is(.rs-sec-hd,.rs-card-title) .rs-help-btn{margin:-3px 0;flex:none}
#sb .rs-card-title .rs-help-btn{float:right;margin-left:8px}
/* the button of the panel's title row that folds or unfolds every section that folds */
#rs-fold-all[hidden]{display:none}
/* margin-left:auto puts it at the right, beside the hide-panel button: the row is space-between, and with three items it went to the middle */
#sb #rs-fold-all{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;margin:0 6px 0 auto;background:none;border:1px solid var(--line);border-radius:8px;color:var(--mut);cursor:pointer;flex:none}
#sb #rs-fold-all:hover{background:var(--rs-hover-bg);color:var(--accent);border-color:var(--accent)}
/* the kit for the HTML that a page adds to the panel: the panel's tokens (--ink, --mut, --line, --card, --accent) change with the theme, so a section that
   uses them follows the light and the dark theme. Plain text, links, tables and rules already do. */
.sb-sec{color:var(--ink)}
.sb-sec :is(p,li,small,.sb-note){color:var(--ink);font-size:13px;line-height:1.5;margin:6px 0}
.sb-sec .sb-note{color:color-mix(in srgb,var(--ink) 72%,var(--card));font-size:12px}      /* readable small print in both themes (--mut on --card is 3.9:1 in the light theme) */
.sb-sec a{color:var(--accent)}
.sb-sec :is(hr){border:0;border-top:1px solid var(--line);margin:10px 0}
.sb-sec table{width:100%;border-collapse:collapse;font-size:12px}
.sb-sec :is(td,th){padding:4px 6px;border-bottom:1px solid var(--line);text-align:left;color:var(--ink)}
.sb-sec th{color:var(--mut);font-weight:600}
/* a card (the standard, docs/guides/dashboard-parts.md, "Cards"): 12px corners, --rs-card-pad inside, --rs-card-gap between two cards (the vertical margins of two cards collapse
   to this one number). Its title is the first row inside it, `.rs-card-title`: the same row as the title of a card that folds. */
/* a box anywhere in the panel and in an editor frame (frame.js), not only in a section; the first card of a frame's body has no margin above it
   (the body has its padding). In a card (or in a box) it has the card's colour, so it gets the card's thin edge in its place */
.sb-card .rs-sec-box,.sb-sec details,.rs-frame .rs-sec-box{background:var(--card);color:var(--ink);border-radius:12px;padding:var(--rs-card-pad);margin:var(--rs-card-gap) 0}
.rs-frame-body > .rs-sec-box:first-child{margin-top:0}
:is(.sb-card,.rs-frame) :is([data-rs-card],.rs-sec-box) .rs-sec-box{background:transparent;box-shadow:inset 0 0 0 1px var(--rs-card-edge)}
:is(.sb-sec,.rs-frame) .rs-card-title{min-height:16px;margin:0 0 10px;font:600 12px/16px system-ui,sans-serif;text-transform:uppercase;letter-spacing:.06em;color:var(--ink)}
.sb-sec summary{cursor:pointer;font-weight:600}

/* ---- the scrollbar of the panel is at its outer edge (decided 2026-10-29): a left panel has it at the left, a right panel at the right. A scroll box with
   `direction: rtl` puts its scrollbar at the left; the content keeps its own direction. Not on a phone: the sheet has no side. ---- */
html.rs-panel-left:not(.rs-phone) :is(.sb-body,.rs-pbody){direction:rtl}
html.rs-panel-left:not(.rs-phone) :is(.sb-body,.rs-pbody) > *{direction:ltr}
/* the body keeps its scrollbar space on the left, and the rows above and under it do not scroll: they move by the same space (--rs-gutter, panelscroll.js),
   so all start at the same edge (Kaveh: the Ask head row and the answers did not) */
html.rs-panel-left:not(.rs-phone) #sb .sb-top{padding-left:calc(15px + var(--rs-gutter,0px))}
html.rs-panel-left:not(.rs-phone) #sb .rs-frame-head{margin-left:calc(15px + var(--rs-gutter,0px))}
html.rs-panel-left:not(.rs-phone) #sb .rs-frame-bar{margin-left:calc(15px + var(--rs-gutter,0px))}

/* ---- the panel's scrollbar (decided 2026-10-29): the thumb shows only while the pointer is over the panel or the body scrolls (panelscroll.js sets
   .rs-scrolling). A host panel with its own scroll boxes (the level editor's tabs) gives them the class `rs-pbody` and `data-head`, the selector of their header (class `rs-phead`); the space stays reserved, so nothing jumps. The thumb is the text color at 47 % in the light theme and 40 % in the dark theme: 3:1 against the
   panel, the least that a part of an interface needs. A soft fade at the bottom edge shows that more is below (panelscroll.js sets data-more), and the same
   fade at the top edge shows that more is above (data-above). The line under the header stays: it is the edge of the header, the fade is the body's. ---- */
#sb :is(.sb-body,.rs-pbody){scrollbar-gutter:stable;scrollbar-width:thin;scrollbar-color:transparent transparent}
html #sb{--rs-thumb:47%}
html #sb[data-theme=dark]{--rs-thumb:40%}
#sb :is(.sb-body,.rs-pbody):hover,#sb :is(.sb-body,.rs-pbody).rs-scrolling{scrollbar-color:color-mix(in srgb,var(--ink) var(--rs-thumb),transparent) transparent}
#sb :is(.sb-body,.rs-pbody)[data-more]{-webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 38px),transparent);mask-image:linear-gradient(to bottom,#000 calc(100% - 38px),transparent)}
#sb :is(.sb-body,.rs-pbody)[data-above]{-webkit-mask-image:linear-gradient(to bottom,transparent,#000 38px);mask-image:linear-gradient(to bottom,transparent,#000 38px)}
#sb :is(.sb-body,.rs-pbody)[data-above][data-more]{-webkit-mask-image:linear-gradient(to bottom,transparent,#000 38px,#000 calc(100% - 38px),transparent);mask-image:linear-gradient(to bottom,transparent,#000 38px,#000 calc(100% - 38px),transparent)}
/* ---- The panel's shell (position, tokens, the title row, the hide and show buttons): the rules that the sidebar of a template needs, and that a host
   page with its own panel (#sb with .sb-top, #sb-hide and #sb-show) needs too. They are at the end, as they were in the template's own style. ---- */
#sb{position:fixed;top:0;right:0;bottom:0;width:var(--rs-panel-w,400px);box-sizing:border-box;overflow:auto;
  padding:14px 15px;font:13px/1.5 system-ui,-apple-system,sans-serif;
  --bg:#fff;--ink:#16181d;--mut:#6b7280;--line:#e6e8ec;--card:#f7f8fa;
  background:var(--bg);color:var(--ink);border-left:1px solid var(--line)}
#sb[data-theme=dark]{--bg:#14171c;--ink:#e9ecf1;--mut:#8b93a1;--line:#272b33;--card:#1c2026}
.sb-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.sb-top h2{margin:0;font-size:15px}
#sb-th,#sb-hide{background:none;border:1px solid var(--line);border-radius:8px;color:var(--mut);
  cursor:pointer;font-size:13px;width:28px;height:28px;line-height:1;display:inline-flex;align-items:center;justify-content:center;padding:0}
#sb-hide{margin-left:6px}
#sb #sb-th,#sb #sb-hide{padding:0}      /* over "#sb button": the icon needs the room */
#sb-th:hover{background:var(--rs-hover-bg);color:var(--accent);border-color:var(--accent)}
/* the hide and show buttons have their look with !important (over `#sb button`), so their hover has it too */
:is(#rs-show-right button,#sb-show,#sb-hide,html.rs-overlay .rs-side-min):is(:hover,:focus-visible){background:color-mix(in srgb,var(--accent) 12%,var(--rs-tb-bg))!important;color:var(--accent)!important;border-color:var(--accent)!important}
#sb.hidden{display:none}
#sb-show{position:fixed;top:10px;right:10px;z-index:3;display:none;background:#fff;color:#333;
  border:1px solid #ccc;border-radius:8px;width:32px;height:32px;cursor:pointer;padding:0;
  align-items:center;justify-content:center;box-shadow:0 1px 4px rgba(0,0,0,.2)}

/* THE HELP WINDOW (help.js): the page's words in roadstyle's look - the card token, the blur and the border of the other floating windows */
#rs-help{position:fixed;inset:0;z-index:4000;display:flex;align-items:center;justify-content:center}
#rs-help[hidden]{display:none}
#rs-help .rs-help-box{position:relative;max-width:480px;max-height:calc(100dvh - 32px);overflow-y:auto;box-sizing:border-box;margin:16px;background:var(--rs-card-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  color:var(--rs-tb-ink);border:1px solid var(--rs-tb-border);border-radius:12px;padding:18px 20px;font:13px/1.5 system-ui,sans-serif;box-shadow:0 8px 24px rgba(0,0,0,.25)}
#rs-help .rs-help-ttl{font-size:16px;font-weight:700;margin-bottom:4px}
#rs-help .rs-help-intro{margin:4px 0 12px}
#rs-help .rs-help-terms{display:grid;grid-template-columns:120px 1fr;margin:0;border-top:1px solid var(--rs-tb-border)}
#rs-help .rs-help-terms dt,#rs-help .rs-help-terms dd{margin:0;padding:8px 0;border-bottom:1px solid var(--rs-tb-border);font-size:12.5px}
#rs-help .rs-help-terms dt{font-weight:700;padding-right:10px}
#rs-help .rs-help-note{margin-top:12px;padding:8px 10px;background:color-mix(in srgb,#38a3dc 14%,transparent);border-radius:8px;font-size:12px}
#rs-help a{color:inherit;font-weight:600;text-decoration:underline}
#rs-help .rs-help-x{position:absolute;top:8px;right:10px;border:0;background:none;font-size:20px;color:inherit;cursor:pointer;border-radius:6px}
#rs-help .rs-help-x:is(:hover,:focus-visible){background:var(--rs-hover-bg);color:var(--accent)}
:is(#sb,body) .rs-help-btn{width:22px;height:22px;padding:0;border:0;background:none;color:inherit;opacity:.7;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;margin-left:6px;border-radius:50%;cursor:pointer}
:is(#sb,body) .rs-help-btn:is(:hover,:focus-visible){opacity:1;border:0;background:var(--rs-hover-bg);color:var(--accent)}      /* (the panel's own `#sb button` rules are as specific: the id of the panel is in both) */
/* the icon keeps its 16px in every box: a card's chart rule (`.sb-sec .rs-sec-box svg`, a chart as wide as the card) is less specific */
:is(#sb,body) .rs-help-btn svg{width:16px;height:16px;display:block;flex:none}
/* a phone: the help window is a sheet at the bottom of the screen, as the panel and the other windows are */
html.rs-phone #rs-help{align-items:flex-end}
html.rs-phone #rs-help .rs-help-box{margin:0;width:100%;max-width:none;max-height:85dvh;border-radius:14px 14px 0 0;border-bottom:0}
html.rs-phone #rs-help .rs-help-terms{grid-template-columns:92px 1fr}


/* THE HOVER BOX (hover.js): the popup's look - the box token, the blur and the border - and it never takes the pointer */
#rs-hover{position:fixed;z-index:3000;max-width:280px;pointer-events:none;background:var(--rs-box-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid var(--rs-tb-border);
  color:var(--rs-tb-ink);padding:6px 9px;border-radius:8px;font:11.5px/1.45 system-ui,sans-serif;box-shadow:0 2px 10px rgba(0,0,0,.2)}
#rs-hover[hidden]{display:none}

/* ---- EVERY SCROLL AREA OF THE DASHBOARD (panelscroll.js, _PS_AREAS: the same list): the panel body's rules - a thin scrollbar that shows only while the
   pointer is over the area or while it scrolls (rs-scrolling), and no scroll handed on to the map or to the panel body. The areas: a page's `rs-scroll`,
   the query part's list, the help window, the panel's own select list, the boxes of the toolbox, the docked read-out. An area inside a box (`rs-scroll`,
   the query's list) also has a fade at its bottom edge while there is more below (data-more), and at its top edge while there is more above (data-above);
   a whole box has none, because the fade would take its border too. An area with a table has no top fade: the table's header row stays at the top. The height of a `rs-scroll` is `--rs-scroll-h` (the page can set it). ---- */
:is(.rs-scroll,.rs-q-list,#rs-help .rs-help-box,.rs-sel-list,#rs-toolbar .bm-menu,#rs-attr-box,#rs-color-box,#rs-nav-box,#rs-roads-box,#rs-settings-box,.rs-side-bd,.rs-side-ctl,.rs-side-q-res,.rs-menu,.rs-color-box,.rs-search-list,.rs-ask-exlist){overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:transparent transparent}
:is(.rs-scroll,.rs-q-list,#rs-help .rs-help-box,.rs-sel-list,#rs-toolbar .bm-menu,#rs-attr-box,#rs-color-box,#rs-nav-box,#rs-roads-box,#rs-settings-box,.rs-side-bd,.rs-side-ctl,.rs-side-q-res,.rs-menu,.rs-color-box,.rs-search-list,.rs-ask-exlist):is(:hover,.rs-scrolling){scrollbar-color:color-mix(in srgb,var(--ink) var(--rs-thumb,47%),transparent) transparent}
.rs-scroll{overflow:auto;max-height:var(--rs-scroll-h,min(520px,60dvh))}
:is(.rs-scroll,.rs-q-list)[data-more]{-webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(to bottom,#000 calc(100% - 28px),transparent)}
:is(.rs-scroll,.rs-q-list)[data-above]:not(:has(th)){-webkit-mask-image:linear-gradient(to bottom,transparent,#000 28px);mask-image:linear-gradient(to bottom,transparent,#000 28px)}
:is(.rs-scroll,.rs-q-list)[data-above][data-more]:not(:has(th)){-webkit-mask-image:linear-gradient(to bottom,transparent,#000 28px,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(to bottom,transparent,#000 28px,#000 calc(100% - 28px),transparent)}
/* a table in it: the header row stays, the numbers line up, the first column is text. A column that sorts has `data-sort="asc"` or `"desc"` on its th. */
#sb .rs-table{border-collapse:collapse;width:100%;font-size:11.5px;font-variant-numeric:tabular-nums}
#sb .rs-table th{position:sticky;top:0;z-index:2;text-align:right;padding:4px;border-bottom:1px solid var(--line);color:var(--mut);background:var(--card);cursor:pointer;white-space:nowrap;font-size:10.5px;font-weight:700}
#sb .rs-table td{text-align:right;padding:3px 4px;border-bottom:1px solid var(--line);white-space:nowrap}
#sb .rs-table th:first-child,#sb .rs-table td:first-child{text-align:left}
#sb .rs-table tbody tr{cursor:pointer}
#sb .rs-table tbody tr:hover{background:var(--rs-hover-bg)}
#sb .rs-table th[data-sort]{color:var(--accent)}
#sb .rs-table th[data-sort=asc]::after{content:" \25B2";font-size:8px}
#sb .rs-table th[data-sort=desc]::after{content:" \25BC";font-size:8px}

/* ---- TABS AND THE TWO-WAY SWITCH (tabs.js): the selected one is in --accent-fill / --accent (the dashboard's one accent, above); the rest are the panel's muted ink ---- */
#sb .rs-tabs{display:flex;flex-wrap:wrap;gap:2px;padding-bottom:10px;margin-bottom:12px;border-bottom:1px solid var(--line)}
#sb .rs-tab{padding:7px 9px;border:1px solid transparent;border-radius:8px;background:none;color:var(--mut);font:600 12px system-ui,sans-serif;cursor:pointer;user-select:none}
#sb .rs-tab:hover{background:var(--rs-hover-bg);color:var(--accent);border-color:transparent}
#sb .rs-tab.on,#sb .rs-tab.on:hover{color:#fff;background:var(--accent-fill);border-color:var(--accent-fill)}
#sb .rs-tab.on:is(:hover,:focus-visible){filter:brightness(1.1)}
#sb .rs-seg{display:flex;padding:2px;margin-bottom:12px;border-radius:10px;background:color-mix(in srgb,var(--mut) 25%,transparent)}
#sb .rs-seg button{flex:1;padding:6px 8px;border:0;border-radius:8px;background:none;color:color-mix(in srgb,var(--ink) 70%,var(--mut));font:600 11.5px system-ui,sans-serif;cursor:pointer}
#sb .rs-seg button:hover{background:var(--rs-hover-bg);color:var(--accent);border:0}
#sb .rs-seg button.on,#sb .rs-seg button.on:hover{background:var(--card);color:var(--accent);box-shadow:0 1px 3px rgba(0,0,0,.12)}
#sb .rs-seg button.on:is(:hover,:focus-visible){background:color-mix(in srgb,var(--accent) 12%,var(--card))}
#sb .rs-tab:focus-visible,#sb .rs-seg button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
/* THE DAY PICKER (days.js): a label as the card titles have, then a row. The field looks like a form field (a border, the page's background, the
   calendar icon and a "v"), so that a person sees that it opens something; the arrows and "Latest" are soft buttons beside it. */
:is(#sb,body) .rs-day-label{margin:0 0 6px;color:var(--mut);font:600 12px/16px system-ui,sans-serif;text-transform:uppercase;letter-spacing:.06em}
:is(#sb,body) .rs-day-row{display:flex;align-items:center;gap:6px}
:is(#sb,body) .rs-day button{height:34px;box-sizing:border-box;margin:0;border-radius:10px;color:var(--ink);font:13px/1 system-ui,sans-serif;cursor:pointer}
:is(#sb,body) .rs-day :is(.rs-day-step,.rs-day-last){flex:none;padding:0 12px;border:0;background:var(--card)}
:is(#sb,body) .rs-day .rs-day-step{width:34px;padding:0;font-size:16px}
:is(#sb,body) .rs-day :is(.rs-day-step,.rs-day-last):hover:not(:disabled){border:0;background:var(--rs-hover-bg);color:var(--accent)}
:is(#sb,body) .rs-day button:disabled{opacity:.4;cursor:default}
:is(#sb,body) .rs-day .rs-day-field{flex:1 1 0;min-width:0;display:flex;align-items:center;gap:8px;padding:0 10px 0 12px;
  border:1px solid color-mix(in srgb,var(--ink) 35%,var(--bg));background:var(--bg);font-weight:600;text-align:left;transition:background .12s,box-shadow .12s,border-color .12s}
:is(#sb,body) .rs-day .rs-day-field:is(:hover:not(:disabled),[aria-expanded=true]){border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--bg));
  color:var(--ink);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}   /* the hover: a teal border, fill and ring, seen on a white panel too */
:is(#sb,body) .rs-day :is(button,.rs-day-cd):focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.rs-day-field .rs-day-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rs-day-field svg{flex:none;display:block;color:var(--accent)}   /* the calendar and the "v" in the accent: the colour of what a click opens */
.rs-day.rs-day-busy .rs-day-field{animation:rs-day-pulse .9s ease-in-out infinite}
@keyframes rs-day-pulse{0%,100%{opacity:1}50%{opacity:.5}}
:is(#sb,body) .rs-day-note{margin:6px 0 0;color:var(--mut);font-size:12px}
.rs-day-cal{position:fixed;z-index:3500;width:284px;box-sizing:border-box;padding:12px;border-radius:12px;background:var(--rs-card-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  color:var(--rs-tb-ink);border:1px solid var(--rs-tb-border);box-shadow:0 8px 24px rgba(0,0,0,.25);font:13px system-ui,sans-serif}
.rs-day-cal[hidden]{display:none}
.rs-day-cal .rs-day-ch{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.rs-day-cal .rs-day-ch b{font-size:14px}
.rs-day-cal button{margin:0;padding:0;border:0;border-radius:8px;background:none;color:inherit;font:inherit;cursor:pointer}
.rs-day-cal .rs-day-ch button{width:30px;height:30px;font-size:18px;background:color-mix(in srgb,currentColor 8%,transparent)}
.rs-day-cal button:disabled{opacity:.35;cursor:default}
.rs-day-cal .rs-day-cg{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.rs-day-cal .rs-day-cw{padding:4px 0;font-size:10.5px;font-weight:700;text-align:center;opacity:.7}
.rs-day-cal .rs-day-cd{height:32px}
.rs-day-cal .rs-day-cd:not(:disabled){font-weight:600;background:color-mix(in srgb,var(--accent) 14%,transparent)}
.rs-day-cal .rs-day-cd:not(:disabled):hover{background:color-mix(in srgb,var(--accent) 28%,transparent);color:var(--accent)}      /* a day with data has the tint already: a stronger one */
.rs-day-cal .rs-day-cd.on,.rs-day-cal .rs-day-cd.on:hover{background:var(--accent-fill);color:#fff}
.rs-day-cal .rs-day-cd.on:hover{filter:brightness(1.1)}
.rs-day-cal button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
#sb [data-pane][hidden]{display:none}

/* ---- CARDS, NUMBER TILES, A CAPTION AND A CALLOUT in the panel (the box itself is `.rs-sec-box`, above): a card has a title and, right after it, its short muted description ---- */
:is(.sb-card,.rs-frame) .rs-sec-box h3{font-size:12px;font-weight:700;margin:0 0 3px;color:var(--ink)}
:is(.sb-card,.rs-frame) .rs-sec-box h3 + p{color:var(--mut);font-size:11.5px;line-height:1.45;margin:0 0 7px}
/* a chart in a card is as wide as the card; the icon of a button in the card (the arrow of a select box, a "?") keeps its own size */
:is(.sb-card,.rs-frame) .rs-sec-box svg:not(button *){width:100%;height:auto;display:block;overflow:hidden}
#sb .rs-kpis{display:grid;grid-template-columns:repeat(var(--rs-kpi-cols,3),1fr);gap:8px;margin:0 0 12px}
#sb .rs-kpi{padding:9px 11px;border:1px solid var(--line);border-radius:8px;background:var(--card)}
#sb .rs-kpi-title{font-size:9.5px;font-weight:700;color:var(--mut);text-transform:uppercase}
#sb .rs-kpi-val{font-size:17px;font-weight:600;line-height:1.25;font-variant-numeric:tabular-nums;color:var(--ink)}
#sb .rs-kpi-val.rs-c{color:var(--rs-kpi-c)}
/* the page's colour of a number (rs.kpi's color) in the dark theme: mixed with the light text colour, so that any colour stays readable */
html[data-rs-theme=dark] #sb .rs-kpi-val.rs-c{color:color-mix(in srgb,var(--rs-kpi-c) 60%,var(--ink))}
#sb .rs-kpi-sub{font-size:10px;color:var(--mut)}
#sb .rs-cap{margin:2px 0 6px;font-size:10.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--mut)}
/* a callout: the answer in one box with round corners, a light tint of its colour and a round mark at the start (decided 2026-11-06: the bar at the left was
   the only part with that look). The colour is `--rs-callout` (the page's), a status colour (err, warn, ok) or `--accent`. The mark is "i", or
   ✕ ! ✓ for a status, or the page's own `--rs-mark`: a status is not shown by its colour only. */
#sb .rs-callout{--rs-st:var(--rs-callout,var(--accent));position:relative;margin:0 0 12px;padding:8px 11px 8px 38px;border-radius:10px;
  background:color-mix(in srgb,var(--rs-st) 11%,var(--card));color:var(--ink);font-size:12.5px;line-height:1.5}
#sb .rs-callout::before{content:var(--rs-mark,"i");position:absolute;left:11px;top:9px;width:18px;height:18px;border-radius:50%;background:var(--rs-st);
  color:var(--card);font:700 11px/18px system-ui,sans-serif;text-align:center}
#sb .rs-callout.err{--rs-mark:"✕"} #sb .rs-callout.warn{--rs-mark:"!"} #sb .rs-callout.ok{--rs-mark:"✓"}

/* ---- STATUS COLOURS: an error, a warning and a good result, each with a light and a dark value that is readable on --card and --bg. A callout, a chip
   and a count take one with the class err, warn or ok: the callout's tint and mark, the chip's and the count's tint and text. ---- */
html{--rs-err:#b91c1c;--rs-warn:#b45309;--rs-ok:#15803d}
html[data-rs-theme=dark],#sb[data-theme=dark]{--rs-err:#fca5a5;--rs-warn:#fbbf24;--rs-ok:#4ade80}
#sb :is(.rs-callout,.rs-chip,.rs-count).err{--rs-st:var(--rs-err)}
#sb :is(.rs-callout,.rs-chip,.rs-count).warn{--rs-st:var(--rs-warn)}
#sb :is(.rs-callout,.rs-chip,.rs-count).ok{--rs-st:var(--rs-ok)}
#sb :is(.rs-chip,.rs-count):is(.err,.warn,.ok){background:color-mix(in srgb,var(--rs-st) 16%,transparent);color:color-mix(in srgb,var(--rs-st) 80%,var(--ink))}
/* a count after the words of a tab (`<span class="rs-count">3</span>`): a small pill. In the selected tab it is on the card colour, so it stays readable
   on the filled tab. A page gives it err, warn or ok only when the count needs attention (a red 0 is noise). */
#sb .rs-count{display:inline-block;min-width:16px;margin-left:5px;padding:0 5px;border-radius:999px;background:color-mix(in srgb,var(--mut) 20%,transparent);
  color:var(--ink);font:600 10.5px/16px system-ui,sans-serif;text-align:center;font-variant-numeric:tabular-nums}
#sb .rs-tab.on .rs-count{background:var(--card);color:var(--ink)}
#sb .rs-tab.on .rs-count:is(.err,.warn,.ok){background:var(--card);color:color-mix(in srgb,var(--rs-st) 80%,var(--ink))}
/* a link button (`<button class="rs-link">`): an action in a line of text or a title row ("clear", "default"), in the accent colour and with no box. Its
   rules start with #sb or .rs-frame to win over the panel's `#sb button` (a host page with a frame has no template). */
:is(#sb,.rs-frame) button.rs-link{padding:0;border:0;border-radius:0;background:none;color:var(--accent);font:inherit;text-transform:none;letter-spacing:0;cursor:pointer}
:is(#sb,.rs-frame) button.rs-link:is(:hover,:focus-visible):not(:disabled){border:0;background:none;color:var(--accent);text-decoration:underline}
:is(#sb,.rs-frame) button.rs-link:disabled{color:var(--mut);cursor:default}
/* a slider: the accent colour (the rule of the panel's inputs) and, on a phone, a 44 px row for a finger */
html.rs-phone #sb input[type=range]{min-height:44px}

/* ---- CHART COLOURS: the colours that a page's charts share, with a light and a dark value (use them with `rs.svg`, which takes `var(--x)` in `fill` and `stroke`).
   For text and lines the panel's own tokens do the same: --ink, --mut, --line, --card. ---- */
html{--rs-chart-band:#e0f2fe;--rs-chart-band-line:#bae6fd;--rs-chart-grid:#eef2f6;--rs-chart-miss:#e2e8f0}
html[data-rs-theme=dark]{--rs-chart-band:rgba(90,169,248,.20);--rs-chart-band-line:rgba(90,169,248,.45);--rs-chart-grid:#272b33;--rs-chart-miss:#3a404a}
/* the 8 colours of the series of a chart (chart.js), in a fixed order: the dashboard's teal first (one series has it), then the reference palette of the
   dataviz method; checked with its validator for colour vision deficiency in both themes (all checks pass; adjacent CVD ΔE 14.5 light). In the light
   theme slots 4 and 5 are under 3:1 on white: a chart has its table, and a pie its legend. (Kaveh, 2026-11-06: "better style and color") */
html{--rs-chart-1:#008a9e;--rs-chart-2:#eb6834;--rs-chart-3:#2a78d6;--rs-chart-4:#eda100;--rs-chart-5:#e87ba4;--rs-chart-6:#008300;--rs-chart-7:#6250d6;--rs-chart-8:#e34948}
html[data-rs-theme=dark]{--rs-chart-1:#159cb1;--rs-chart-2:#d95926;--rs-chart-3:#3987e5;--rs-chart-4:#c98500;--rs-chart-5:#d55181;--rs-chart-6:#008300;--rs-chart-7:#9085e9;--rs-chart-8:#e66767}
.rs-chart{position:relative;min-height:120px;display:flex;flex-direction:column;font:11px system-ui,sans-serif;color:var(--ink);overflow:auto;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--ink) 47%,transparent) transparent}      /* a chart taller than its box: a scrollbar that shows */
.rs-chart svg{flex:none}
.rs-chart:not(.rs-chart-scrolls){overflow:hidden}      /* (chart.js: only a drawing taller than its box scrolls) */
.rs-chart.rs-chart-small{overflow:hidden;min-height:0}
/* a small pie (Ask's card): the pie at the left at its full height, its legend at its right (Kaveh: "just need to shift left and add legend there") */
.rs-chart-small .rs-chart-legend{min-height:0}
.rs-chart.rs-chart-small.rs-chart-side{grid-template-columns:0 auto auto 1fr}
.rs-chart svg{display:block;overflow:visible;font-family:system-ui,sans-serif;font-variant-numeric:tabular-nums}
.rs-chart-legend{flex:none;display:flex;flex-wrap:wrap;gap:4px 12px;min-height:20px;color:var(--ink);font-size:11.5px}
.rs-chart-legend span{display:inline-flex;align-items:center;gap:5px}
.rs-chart-legend i{width:10px;height:10px;border-radius:2px;display:inline-block}
.rs-chart-foot{color:var(--mut);font-size:11px;min-height:16px}
.rs-chart-foot:empty{display:none}
html.rs-phone .rs-chart[data-more]{-webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(to bottom,#000 calc(100% - 28px),transparent)}
.rs-chart-hd{flex:none;display:flex;align-items:baseline;gap:8px;min-height:22px;flex-wrap:wrap}
.rs-chart-hd b{font:600 12.5px system-ui,sans-serif;color:var(--ink)}
.rs-chart-hd span{font-size:11px;color:var(--mut)}
.rs-chart svg .rs-mk{transition:opacity .12s,fill-opacity .12s;fill-opacity:.85}
.rs-chart svg .rs-mk.on{fill-opacity:1}      /* a little see-through; the mark under the pointer in its full colour */
.rs-chart svg.rs-chart-dim .rs-mk:not(.on){opacity:.35}
.rs-chart-none{color:var(--mut);margin:12px 0}
/* a pie with its legend beside it (chart.js puts it there when the pie is larger so): the pie and the legend in the middle of the box */
.rs-chart.rs-chart-side{display:grid;grid-template-columns:1fr auto auto 1fr;align-content:start}
.rs-chart-side>*{grid-column:1/-1}
.rs-chart-side>svg{grid-area:2/2}
.rs-chart-side>.rs-chart-legend{grid-area:2/3;flex-direction:column;flex-wrap:nowrap;align-self:center;margin-left:16px}

/* ---- INPUTS, CHIPS AND A DOT in the panel: a text box looks like the panel's select and query box; a chip is a small rounded label (`.accent` tints it with --accent);
   a dot is a colour mark before a word. A plain <button> and `button.sb-primary` are styled by the template; a page needs no class for them. ---- */
#sb :is(input[type=text],input[type=search],input[type=number],input:not([type]),textarea){width:100%;box-sizing:border-box;padding:6px 8px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--ink);font:inherit;outline:none}
#sb :is(input,textarea):focus{border-color:var(--accent)}
#sb :is(input,textarea)::placeholder{color:var(--mut)}
/* an option row (docs/guides/dashboard-parts.md, "Option rows"): a <label class="rs-opt"> with a checkbox or a radio, a title (<b>) and a note (<small>), and
   an optional button at its end. `rs-opts` is a list of them, `rs-opts rs-opts-row` puts them side by side as chips. The edge is the card's light edge; the
   pointer (or the key focus) gives the hover tint and the accent edge; a checked row has the accent tint and the accent edge (ONE HOVER above). */
:is(#sb,.rs-side) .rs-opts{display:grid;gap:6px}
:is(#sb,.rs-side) .rs-opts.rs-opts-row{grid-auto-flow:column;grid-auto-columns:minmax(0,1fr)}
:is(#sb,.rs-side) .rs-opt{display:flex;align-items:flex-start;gap:10px;margin:0;padding:9px 10px;border-radius:10px;box-shadow:inset 0 0 0 1px var(--rs-card-edge);color:var(--ink);font:13px/1.35 system-ui,sans-serif;cursor:pointer}
:is(#sb,.rs-side) .rs-opts-row .rs-opt{align-items:center;justify-content:center;gap:7px;padding:9px 6px;font-weight:500}
:is(#sb,.rs-side) .rs-opt[hidden]{display:none}
:is(#sb,.rs-side) .rs-opt>input{flex:none;margin:2px 0 0}
:is(#sb,.rs-side) .rs-opts-row .rs-opt>input{margin:0}
:is(#sb,.rs-side) .rs-opt>span{display:flex;flex:1;flex-direction:column;gap:2px;min-width:0}
:is(#sb,.rs-side) .rs-opts-row .rs-opt>span{flex:none}
:is(#sb,.rs-side) .rs-opt b{font-weight:600}
:is(#sb,.rs-side) .rs-opt small{color:var(--mut);font-size:12px;line-height:1.35}
:is(#sb,.rs-side) .rs-opt>button{flex:none;align-self:center}
:is(#sb,.rs-side) .rs-opt:is(:hover,:focus-within){background:var(--rs-hover-bg);box-shadow:inset 0 0 0 1px var(--accent)}
:is(#sb,.rs-side) .rs-opt:has(>input:checked){background:color-mix(in srgb,var(--card) 88%,var(--accent));box-shadow:inset 0 0 0 1.5px var(--accent)}
:is(#sb,.rs-side) .rs-opt:has(>input:checked):is(:hover,:focus-within){background:color-mix(in srgb,var(--card) 80%,var(--accent))}
:is(#sb,.rs-side) .rs-opt:has(>input:disabled){opacity:.55;cursor:not-allowed}
#sb .rs-chip{display:inline-block;padding:2px 8px;border-radius:10px;background:color-mix(in srgb,var(--mut) 18%,transparent);color:var(--ink);font-size:11px;font-weight:600;line-height:1.35}
#sb .rs-chip.accent{background:color-mix(in srgb,var(--accent) 16%,transparent);color:color-mix(in srgb,var(--accent) 70%,var(--ink))}   /* the accent on its own tint: mixed with the text colour, readable in both themes */
#sb .rs-dot{display:inline-block;width:8px;height:8px;margin-right:5px;border-radius:50%;background:var(--mut)}

/* ---- STREET VIEW DOCKED (street_view="dock", streetview.js): a side of the page. The window takes the right part of the screen with a divider, the map takes the rest;
   on a phone the window is the lower part. The overlay's `#map{inset:0}` gives way to the window's share (`--rs-sv-w`). ---- */
html.rs-sv-docked.rs-overlay #map{right:var(--rs-sv-w,42%)!important;width:auto!important}
.rs-svw.rs-svw-dock{position:fixed;top:0;right:0;bottom:0;left:auto!important;width:var(--rs-sv-w,42%)!important;height:auto!important;max-width:none;border-radius:0;resize:none;
  box-shadow:none;border-left:1px solid var(--rs-tb-border);-webkit-backdrop-filter:none;backdrop-filter:none;background:var(--rs-card-bg)}
.rs-svw-drag{position:fixed;top:0;bottom:0;right:calc(var(--rs-sv-w,42%) - 5px);width:10px;cursor:col-resize;z-index:61;touch-action:none}
.rs-svw.rs-dragging iframe,.rs-svw.rs-dragging .rs-svw-pano,.rs-svw.rs-dragging .rs-svw-alt{pointer-events:none}
.rs-svw-drag:hover{background:color-mix(in srgb,var(--rs-tb-ink) 18%,transparent)}
.rs-svw-drag[hidden]{display:none}
html.rs-phone.rs-sv-docked.rs-overlay #map{right:0!important;bottom:45%!important;height:auto!important}
html.rs-phone .rs-svw.rs-svw-dock{top:auto!important;left:0!important;right:0!important;bottom:0!important;width:100%!important;height:45%!important}
/* The editor frame (frame.js, docs/guides/dashboard-parts.md): an editor that uses the whole panel. The title line goes into .sb-top (before the host's hide
   button); the head row (the tab row, the editor's own row) stays, only the body scrolls (rs-pbody), and the bar is a flex item under the body, at the bottom
   edge of the panel. The bar has no background of its own: nothing scrolls under it, so it has the color of the panel. An empty head row or bar does not show.
   The colors are the theme's tokens. */
.rs-frame-title{display:flex;align-items:center;gap:10px;min-width:0;flex:1}
.rs-frame-title .t{font-size:15px;font-weight:650;letter-spacing:-.01em;white-space:nowrap}
.rs-frame-back{flex:none;height:28px;padding:0 10px;border:1px solid var(--line);border-radius:8px;background:none;color:var(--mut);font:600 12.5px system-ui,sans-serif;cursor:pointer;white-space:nowrap}
.rs-frame-back:is(:hover,:focus-visible){background:var(--rs-hover-bg);color:var(--accent);border-color:var(--accent)}
/* the base look of a plain button and a field in roadstyle's parts (a frame: Ask, Edit design, an editor; the bottom dock), on every page: a roadstyle
   page has the same rules for all of #sb in its template, but a host page (duckOSM Studio, duckosm edit) has no template. :where() gives them no
   weight, so the part's own rules win. */
:where(.rs-frame, #rs-dock) button{padding:5px 11px;border:1px solid var(--line);border-radius:6px;background:var(--card);color:var(--ink);cursor:pointer;font:inherit}
:where(.rs-frame, #rs-dock) button:is(:hover,:focus-visible):not(:disabled){border-color:var(--accent);color:var(--accent);background:var(--rs-hover-bg)}
:where(#sb, .rs-frame, #rs-dock) button:disabled{opacity:.5;cursor:not-allowed}      /* also the panel's own buttons: no weight, so a part's own disabled look wins */
:where(.rs-frame, #rs-dock) :is(input:not([type=checkbox],[type=radio],[type=range],[type=color]),textarea){box-sizing:border-box;padding:6px 8px;border:1px solid var(--line);border-radius:5px;background:var(--bg);color:var(--ink);font:inherit;outline:none}
:where(.rs-frame) :is(input[type=password],input[type=text]){width:100%}
:where(.rs-frame, #rs-dock) :is(input,textarea):focus{border-color:var(--accent)}
.rs-frame{position:relative;flex:1;min-height:0;display:flex;flex-direction:column;color:var(--ink);font:13px/1.45 system-ui,-apple-system,"Segoe UI",sans-serif}
.rs-frame [hidden]{display:none!important}
#sb .rs-frame-head{flex:none;margin:0 15px;padding-bottom:8px;border-bottom:1px solid var(--line)}
#sb .rs-frame-head:empty{display:none}
#sb .rs-frame-head .rs-tabs{padding:0;margin:0;border:0}
#sb .rs-panel-tabs{flex:none;padding:0 15px 10px;margin:0}   /* Ask as a tab (askPanel tab:): the row under the panel's title, outside the cards and the frame */
.rs-frame-body{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;padding:12px 15px 24px}
/* the bar's line is inset as the head row's line (Kaveh: the full-width line above Examples, "make it better and shorter"); Ask has no line: its
   question box has its own edge */
.rs-frame-bar{flex:none;margin:0 15px;padding:8px 0 10px;border-top:1px solid var(--line);font-size:12.5px}
.rs-frame-bar:has(> .rs-ask-comp){border-top:0}
.rs-frame-bar:empty{display:none}
html.rs-phone .rs-frame-back,html.rs-phone .rs-frame .rs-tab{min-height:44px}
/* on a phone the tab row is one row that scrolls sideways (frame.js scrolls the selected tab into view): the body keeps its room */
html.rs-phone #sb .rs-frame-head .rs-tabs{flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none}
html.rs-phone #sb .rs-frame-head .rs-tab{flex:none}
/* The design panel (design/design_panel.js, docs/guides/design-panel.md): its content in the editor frame. */
#sb{--rs-dz-soft:color-mix(in srgb,var(--accent) 12%,transparent)}
.rs-dz-title .dname{font-size:12px;color:var(--mut);margin-left:auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.rs-dz-bar .line{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.rs-dz-bar b{font-weight:600}
.rs-dz-bar .st{margin:2px 0 0;min-height:1.3em;color:var(--mut);line-height:1.3}
.rs-dz-bar #design-notice{min-height:0;color:var(--ink)}
.rs-dz-bar #design-notice:empty{display:none}
.rs-dz .why,.rs-dz .small{font-size:12px;color:var(--mut);line-height:1.4;margin:0 0 8px}
.rs-dz .small{color:var(--ink)}
.rs-dz .muted,.rs-dz .col small{color:var(--mut)}
.rs-dz .row{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}
.rs-dz .row button{flex:1 1 0;white-space:nowrap}
.rs-dz button.sm{height:28px;padding:0 9px;font-size:12px}
.rs-dz button.danger{border-color:var(--rs-err);color:var(--rs-err)}
.rs-dz .drow2{display:grid;grid-template-columns:1fr auto;align-items:center;gap:8px;margin:0 0 6px;font-size:13px}
.rs-dz .drow2>span:first-child{min-width:0;overflow-wrap:anywhere}
.rs-dz .drow2.cls,.rs-dz .rhead{grid-template-columns:1fr 52px 52px}
.rs-dz .drow2.two{grid-template-columns:1fr 70px 70px}
.rs-dz .drow2.rng{grid-template-columns:1fr minmax(90px,140px) 3.6em}
.rs-dz .drow2.rng output{text-align:right;font-variant-numeric:tabular-nums;color:var(--mut);font-size:12px}
.rs-dz .drow2:has(input[type=text]){grid-template-columns:4em 1fr}
.rs-dz .rhead{display:grid;gap:8px;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--mut);margin-bottom:4px}
.rs-dz .rhead span{text-align:center}
.rs-dz .rs-cp,.rs-dz .rs-cp-btn{width:100%}      /* a colour of the design panel fills its column */
.rs-dz input[type=color]{width:100%;min-width:44px;height:30px;padding:1px 2px;border:1px solid var(--line);border-radius:6px;background:var(--bg);cursor:pointer}
/* a colour box of a panel has the hover of a button: the accent border and the tint */
:is(#sb,.rs-side,.rs-frame,#rs-dock) input[type=color]:is(:hover,:focus-visible):not(:disabled){border-color:var(--accent);background:var(--rs-hover-bg);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 22%,transparent)}
.rs-dz input[type=number],.rs-dz input[type=text],.rs-dz input[type=search]{height:32px;min-width:0;width:100%;box-sizing:border-box}
.rs-dz .drow2 .rs-sel,.rs-dz .drow2>select{width:auto;max-width:11em}
.rs-dz .optrow{display:flex;gap:10px;align-items:flex-start;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--bg);cursor:pointer;margin-bottom:6px}
.rs-dz .optrow:has(input:checked){border-color:var(--accent-fill);background:var(--rs-dz-soft)}
.rs-dz .optrow input{margin:2px 0 0;accent-color:var(--accent-fill);flex:none}
.rs-dz .optrow .t{display:flex;flex-direction:column;gap:2px}
.rs-dz .optrow small{color:var(--mut);font-size:12px;line-height:1.35}
.rs-dz .themes{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.rs-dz .theme{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:10px;text-align:left;border:1px solid var(--line);border-radius:12px;background:var(--bg);color:var(--ink);font:inherit;cursor:pointer;height:auto;min-width:0}
.rs-dz .theme:hover{border-color:var(--accent-fill)}
.rs-dz .theme[aria-checked=true],.rs-dz .theme.mine[aria-current=true]{border-color:var(--accent-fill);background:var(--rs-dz-soft);box-shadow:inset 3px 0 0 var(--accent-fill)}
.rs-dz .theme small,.rs-dz .themes .kind small{color:var(--mut);font-size:12px;line-height:1.35}
.rs-dz .themes .kind{grid-column:1/-1;display:flex;flex-direction:column;gap:2px;margin-top:6px}
.rs-dz .themes .kind:first-child{margin-top:0}
.rs-dz .theme.mine{cursor:default}
.rs-dz .theme.mine .acts{display:flex;flex-wrap:wrap;gap:4px;margin-top:2px}
.rs-dz .sw5{display:flex;width:100%;height:14px;border-radius:4px;overflow:hidden;border:1px solid var(--line)}
.rs-dz .sw5 i{flex:1}
.rs-dz .sw5 i.none{background:repeating-conic-gradient(#c8c8c8 0 25%,#ffffff 0 50%) 0 0/8px 8px}
.rs-dz .yours{font-size:10.5px;font-weight:600;padding:0 6px;border-radius:999px;border:1px solid var(--accent-fill);color:var(--accent);background:var(--card);vertical-align:1px}
.rs-dz #theme-search{margin-bottom:6px}
.rs-dz .chips{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:4px}
.rs-dz .chip{height:28px;padding:0 10px;border:1px solid var(--line);border-radius:999px;background:var(--bg);color:var(--ink);font:inherit;font-size:12.5px;cursor:pointer}
.rs-dz .chip[aria-pressed=true]{background:var(--accent-fill);border-color:var(--accent-fill);color:#fff}
.rs-dz #mine-list{margin:8px 0}
.rs-dz .cols{display:grid;grid-template-columns:1fr 1fr;gap:4px 8px;font-size:12.5px}
.rs-dz .cols .col{display:flex;align-items:center;gap:6px;min-width:0;overflow-wrap:anywhere}
.rs-dz .cols.two .col{justify-content:space-between}
.rs-dz .cols.two input[type=number]{width:56px}
.rs-dz .fix-group{margin:12px 0 4px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--mut)}
.rs-dz .fix-group:first-child{margin-top:0}
.rs-dz .bad{color:var(--rs-err)}
html.rs-phone .rs-dz .row button,html.rs-phone .rs-dz .chip{min-height:44px}
/* the preview under a transparent ground: the map container has the color of the base map, the checkerboard goes over that color */
.rs-checker{background-image:repeating-conic-gradient(#d4d4d4 0 25%,#ffffff 0 50%);background-size:24px 24px}
/* ONE HOVER, the rest: keyboard focus has a ring as well as the hover look; a link is underlined under the pointer */
:is(#sb,#rs-toolbar,#rs-help,.rs-help-box,#rs-scalebox,.rs-day-cal,.rs-svw) :is(button,select,summary,a[href]):focus-visible{outline:2px solid var(--accent);outline-offset:1px}
:is(#sb,#rs-help,.rs-help-box,.rs-svw) a[href]{text-decoration:none}
.sb-card a[href]{color:var(--accent)}      /* a link in the panel has the accent (a page's own link rule is more specific and wins); before, it had the browser's blue */
:is(#sb,#rs-help,.rs-help-box,.rs-svw) a[href]:is(:hover,:focus-visible){text-decoration:underline}
:is(#sb,#rs-help,.rs-help-box) summary{border-radius:6px;cursor:pointer}
:is(#sb,#rs-help,.rs-help-box) summary:is(:hover,:focus-visible){background:var(--rs-hover-bg);color:var(--accent)}
/* ---- THE BOTTOM DOCK (dock.js, docs/guides/dashboard-layout.md): a wide area under the map. html.rs-dock-has while it has a content, rs-dock-open or
   rs-dock-shut, and --rs-dock-h its height on a desktop (0 on a phone). The map, the panel, the bar along the bottom and the corner box end above it;
   with the card look the map goes on under it, and the dock is the panel's glass. Only its top corners are round. ---- */
html{--rs-dock-h:0px}
html.rs-dock-has:not(.rs-phone):not(.rs-panel-card) #map{bottom:var(--rs-dock-h)!important;height:auto!important}
html.rs-dock-has:not(.rs-phone).rs-overlay #sb{bottom:var(--rs-dock-h)}
html.rs-dock-has:not(.rs-phone).rs-overlay.rs-panel-card #sb{bottom:calc(var(--rs-dock-h) + 8px)}
html.rs-dock-has:not(.rs-phone) #rs-toolbar.rs-tb-bottom{bottom:calc(var(--rs-dock-h) + 8px)}
/* a bar at a side: the rule of the bar above (centred, at most the free height, wraps to a second column), in the part above the dock */
html.rs-dock-has:not(.rs-phone) #rs-toolbar:is(.rs-tb-right,.rs-tb-left){top:max(51px,min(calc((100% - var(--rs-dock-h)) / 2),calc(100% - var(--rs-dock-h) - 87px)));max-height:max(86px,calc(100% - var(--rs-dock-h) - 128px))}
html.rs-dock-has:not(.rs-phone) #rs-scalebox{bottom:calc(var(--rs-dock-h) + 8px)}
html.rs-dock-open:not(.rs-phone) #rs-scalebox{display:none}      /* the credits: back when the dock closes; on a phone they are in the bar */
#rs-dock{position:fixed;left:0;right:0;bottom:0;z-index:7;height:var(--rs-dock-h);display:flex;flex-direction:column;box-sizing:border-box;
  background:var(--bg);color:var(--ink);border-top:1px solid var(--line);border-radius:14px 14px 0 0;box-shadow:0 -4px 18px rgba(0,0,0,.16);font:13px/1.4 system-ui,sans-serif}
html:not(.rs-dock-has) #rs-dock,html:not(.rs-dock-has) #rs-dock-pill{display:none}
html.rs-panel-card:not(.rs-phone) #rs-dock{background:var(--rs-card-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
/* the boxes in the dock (the table, the chart, the list of the tables, the road card): with the card look the map shows through them too (Kaveh,
   2026-11-06: "background of table, chart need more transparent"); the fixed header row and first column stay nearly solid, else the rows that scroll
   under them show through their text. With the frame look and on a phone they are solid. */
#rs-dock{--rs-dk-box:var(--bg);--rs-dk-solid:var(--bg);--rs-dk-head:var(--card)}
html.rs-panel-card:not(.rs-phone) #rs-dock{--rs-dk-box:color-mix(in srgb,var(--bg) 35%,transparent);--rs-dk-solid:color-mix(in srgb,var(--bg) 88%,transparent);--rs-dk-head:color-mix(in srgb,var(--card) 88%,transparent)}
/* the grip: no colour of its own; under the pointer or while it is dragged, the dock's top edge is the accent (an inset shadow follows the round corners) */
.rs-dock-grip{position:absolute;top:-4px;left:14px;right:14px;height:8px;cursor:row-resize;touch-action:none;z-index:1}
#rs-dock:has(.rs-dock-grip:hover),#rs-dock:has(.rs-dock-grip.on){box-shadow:inset 0 2px 0 0 var(--accent),0 -4px 18px rgba(0,0,0,.16)}
.rs-dock-hd{display:flex;align-items:center;gap:10px;height:32px;flex:0 0 32px;padding:0 8px 0 14px;border-bottom:1px solid var(--line);min-width:0}
html.rs-dock-shut .rs-dock-hd{border-bottom:0;cursor:pointer}
.rs-dock-title{font-weight:650;white-space:nowrap}
.rs-dock-tabs{display:flex;gap:2px}
#rs-dock .rs-dock-tabs[hidden],.rs-dock-title[hidden],#rs-dock .rs-dock-x[hidden]{display:none}
.rs-dock-note{color:var(--mut);font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rs-dock-sp{flex:1}
.rs-dock-acts{display:flex;gap:6px;align-items:center}
html.rs-dock-shut .rs-dock-acts{display:none}
/* a phone: the actions go to a row of their own under the title (the title row was wider than the screen); the row scrolls sideways */
html.rs-phone .rs-dock-hd{flex-wrap:wrap;height:auto;flex:0 0 auto;min-height:32px;row-gap:4px;padding-bottom:4px}
html.rs-phone .rs-dock-hd > :not(.rs-dock-acts){flex:none}
html.rs-phone .rs-dock-hd > .rs-dock-sp{flex:1 1 0}
html.rs-phone .rs-dock-hd > .rs-dock-note{flex:0 1 auto;min-width:0}
html.rs-phone .rs-dock-acts{order:9;flex:1 0 100%;min-width:0;overflow-x:auto;scrollbar-width:thin}
html.rs-phone .rs-dock-acts > *{flex:none}
.rs-dock-body{flex:1;min-height:0;display:flex;flex-direction:column;padding:8px 14px 10px;gap:6px}
html.rs-dock-shut .rs-dock-body{display:none}
html.rs-dock-shut .rs-dock-arrow svg{transform:rotate(180deg)}
/* the controls: the panel's look (the template gives it only inside #sb) */
#rs-dock button{font:inherit;font-size:12px;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:6px;padding:3px 10px;cursor:pointer}
#rs-dock button.sb-primary{background:var(--accent-fill);border-color:var(--accent-fill);color:#fff;font-weight:600}
#rs-dock :is(.rs-dock-arrow,.rs-dock-x){border:0;background:none;color:var(--mut);padding:4px 6px;display:inline-flex;align-items:center}
#rs-dock .rs-tab{border:1px solid transparent;background:none;color:var(--mut);font-weight:600;padding:3px 10px;border-radius:7px}
#rs-dock .rs-tab.on{background:var(--accent-fill);border-color:var(--accent-fill);color:#fff}
#rs-dock button:is(:hover,:focus-visible):not(:disabled):not(.sb-primary):not(.rs-tab.on){background:var(--rs-hover-bg);color:var(--accent);border-color:var(--accent)}
#rs-dock :is(.rs-dock-arrow,.rs-dock-x,.rs-tab):is(:hover,:focus-visible):not(.on){border-color:transparent}
#rs-dock :is(button.sb-primary,.rs-tab.on):is(:hover,:focus-visible):not(:disabled){filter:brightness(1.1)}
#rs-dock :is(button,select,summary,a[href],th):focus-visible{outline:2px solid var(--accent);outline-offset:1px}
#rs-dock input,#rs-dock select,#rs-dock textarea{font:inherit;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:6px}
/* the dock's table: as wide as its columns, the height of the dock, both scrollbars always visible, the header row and the first column in view */
#rs-dock .rs-dock-table{flex:1;min-height:0;max-height:none;align-self:flex-start;max-width:100%;box-sizing:border-box;overflow:auto;border:1px solid var(--line);border-radius:8px;background:var(--rs-dk-box);
  scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--ink) var(--rs-thumb,47%),transparent) transparent;-webkit-mask-image:none;mask-image:none}
#rs-dock .rs-dock-table table{table-layout:fixed;width:max-content;border-collapse:separate;border-spacing:0;font:12.5px/1.35 system-ui,sans-serif;font-variant-numeric:tabular-nums}
#rs-dock .rs-dock-table :is(th,td){white-space:nowrap;max-width:320px;overflow:hidden;text-overflow:ellipsis;padding:5px 14px;text-align:left;border-bottom:1px solid var(--line);height:15px}
#rs-dock .rs-dock-table th{position:sticky;top:0;z-index:2;background:var(--rs-dk-head);font-weight:600;vertical-align:bottom;cursor:pointer;user-select:none}
#rs-dock .rs-dock-table th small{display:block;font:500 10px/1.2 system-ui,sans-serif;color:var(--mut);letter-spacing:.03em}
#rs-dock .rs-dock-table .n{text-align:right}
#rs-dock .rs-dock-table tbody tr:nth-child(even){--rs-row:color-mix(in srgb,var(--ink) 4%,transparent)}
#rs-dock .rs-dock-table td{background:var(--rs-row,transparent)}
#rs-dock .rs-dock-table :is(td,th):first-child{position:sticky;left:0;z-index:1;box-shadow:inset -1px 0 var(--line)}
/* the first column stays in view over the cells that scroll under it: the tint of its row over a nearly solid layer */
#rs-dock .rs-dock-table td:first-child{background:linear-gradient(var(--rs-row,transparent),var(--rs-row,transparent)),var(--rs-dk-solid)}
#rs-dock .rs-dock-table th:first-child{z-index:3;background:var(--rs-dk-head)}
#rs-dock .rs-dock-table tr.rs-dock-id{cursor:pointer}
#rs-dock .rs-dock-table tbody tr:hover{--rs-row:color-mix(in srgb,var(--ink) 7%,transparent)}
#rs-dock .rs-dock-table thead th:is(:hover,:focus-visible){background:color-mix(in srgb,var(--accent) 12%,var(--rs-dk-head));color:var(--accent)}
#rs-dock .rs-dock-table tbody tr.rs-dock-id:hover{--rs-row:color-mix(in srgb,var(--accent) 14%,transparent)}
#rs-dock .rs-dock-table tbody tr.rs-dock-id:hover td{color:var(--accent)}
#rs-dock .rs-dock-table thead th:is(:hover,:focus-visible) small{color:var(--accent)}
#rs-dock .rs-dock-table tr.on{--rs-row:color-mix(in srgb,var(--accent) 24%,transparent)}
#rs-dock .rs-dock-table tbody tr.on td:first-child{box-shadow:inset 3px 0 var(--accent),inset -1px 0 var(--line)}      /* the selected row: the tint and a bar, as rs-row */
#rs-dock .rs-dock-table tbody tr.rs-dock-id:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
#rs-dock .rs-dock-table tr.rs-dock-pad td{padding:0;border:0;background:none}
#rs-dock .rs-dock-null{color:var(--mut);font-style:italic}
#rs-dock .rs-dock-table th[data-sort] span{color:var(--accent)}
#rs-dock .rs-dock-table th[data-sort=asc] span::after{content:" \25B2";font-size:8px;vertical-align:1px}
#rs-dock .rs-dock-table th[data-sort=desc] span::after{content:" \25BC";font-size:8px;vertical-align:1px}
/* a phone: a bottom sheet (40 % or full), one sheet at a time (windows.js); a closed dock is a round button above the panel's sheet */
html.rs-phone #rs-dock{left:0;right:0;height:40dvh;z-index:30}
html.rs-phone.rs-dock-full #rs-dock{height:calc(100dvh - 64px)}
html.rs-phone.rs-dock-shut #rs-dock{display:none}
html.rs-phone .rs-dock-grip{position:static;height:44px;flex:0 0 22px;margin:-11px 0;cursor:pointer;display:flex;justify-content:center;align-items:center;z-index:2}
html.rs-phone .rs-dock-grip::before{content:"";width:40px;height:4px;border-radius:2px;background:var(--mut);opacity:.6}
html.rs-phone #rs-dock .rs-dock-table{max-width:100%}
#rs-dock-pill{position:fixed;right:12px;bottom:calc(40dvh + 8px);z-index:29;display:none;border-radius:999px;padding:6px 12px;font:600 12px system-ui,sans-serif;background:var(--accent-fill);color:#fff;border:0;box-shadow:0 2px 8px rgba(0,0,0,.25);cursor:pointer;max-width:60vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#rs-dock-pill:is(:hover,:focus-visible){filter:brightness(1.1)}
html.rs-phone.rs-dock-shut #rs-dock-pill{display:block}
html.rs-phone.rs-dock-shut.rs-sheet-0 #rs-dock-pill{bottom:56px}
html.rs-phone.rs-dock-shut.rs-sheet-2 #rs-dock-pill{display:none}
/* ---- THE DATA DOCK (data/data_dock.js, docs/guides/data-dock.md): in the bottom dock, the SQL line over the table and the road card beside it ---- */
#rs-dock .rs-dd{flex:1;min-height:0;display:flex;flex-direction:column;gap:6px}
.rs-dd-acts{display:flex;gap:12px;align-items:center}      /* the groups: their edge is the card edge, clear in the dark theme too (Kaveh) */
/* a group is one joined control, as Table | Chart: one edge round it and a thin line between its buttons; a button that is on (Tables open, Light
   on) is filled */
#rs-dock .rs-dd-grp{display:inline-flex;flex:none;border:1px solid var(--rs-card-edge);border-radius:8px;overflow:hidden}
#rs-dock .rs-dd-grp > button{border:0;border-radius:0;padding:3px 10px}
#rs-dock .rs-dd-grp > button + button{border-left:1px solid var(--rs-card-edge)}
#rs-dock .rs-dd-grp > button.on{background:var(--accent-fill);color:#fff}
#rs-dock .rs-dd-acts button.on{background:var(--accent-fill);border-color:var(--accent-fill);color:#fff}
#rs-dock .rs-dd-grp label.rs-dd-light{flex:none;margin:0;padding:0 10px;font-size:12px;white-space:nowrap;border-right:1px solid var(--rs-card-edge)}      /* the map switch: the first part of the map group, On or Off */
#rs-dock .rs-dd-grp label.rs-dd-light span{min-width:2em}      /* On and Off take the same room: Colour and Focus do not move */
.rs-dd-count{min-width:16px;height:16px;padding:0 4px;box-sizing:border-box;border-radius:999px;background:var(--accent-fill);color:#fff;font:600 10.5px/16px system-ui,sans-serif;text-align:center;display:inline-block}
.rs-dd-count[hidden]{display:none}
.rs-dd-q{display:flex;gap:8px;align-items:flex-start}
#rs-dock .rs-dd-line{flex:1;min-width:0;text-align:left;cursor:text;background:var(--card);border-radius:8px;padding:6px 10px;font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#rs-dock .rs-dd-line.empty{color:var(--mut)}
.rs-dd-edit{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.rs-dd-edit-hint{font-size:11px;color:var(--mut);padding-left:4px}
.rs-dd-ta{flex:1;min-width:0;width:100%;box-sizing:border-box;resize:none;border:1px solid var(--accent)!important;border-radius:8px;padding:6px 10px;font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace!important;outline:2px solid color-mix(in srgb,var(--accent) 25%,transparent)}
#rs-dock .rs-dd-run{border-radius:8px;padding:6px 16px;white-space:nowrap}
#rs-dock .rs-dd-qb{flex:none;border-radius:8px;padding:6px 12px;white-space:nowrap}      /* Tables (before the SQL line) and CSV (after Run) */
#rs-dock .rs-dd-qb.rs-dd-ib{display:inline-flex;align-items:center;padding:6px 9px}      /* the icons: the tables (a database) and the download */
#rs-dock .rs-dd-qb.on{background:var(--accent-fill);border-color:var(--accent-fill);color:#fff}
.rs-dd-err{color:var(--rs-err);font-size:12px;white-space:pre-wrap}
.rs-dd-err:empty{display:none}
/* the list of the tables: in the place of the table while it is open; a search field, a group for each schema, a card for each table */
.rs-dd-tables{flex:1;min-height:0;display:flex;flex-direction:column;border:1px solid var(--line);border-radius:8px;background:var(--rs-dk-box);overflow:hidden}
.rs-dd-tables[hidden],.rs-dd-split[hidden],.rs-dd-tgroup[hidden],.rs-dd-tcard[hidden]{display:none!important}
.rs-dd-thead{display:flex;align-items:center;gap:10px;padding:8px 10px;border-bottom:1px solid var(--line);background:var(--rs-dk-head)}
#rs-dock .rs-dd-tfind{flex:1;min-width:0;padding:5px 10px;border-radius:7px;font-size:12.5px}
#rs-dock .rs-dd-tfind:focus{outline:2px solid color-mix(in srgb,var(--accent) 30%,transparent);border-color:var(--accent)}
.rs-dd-tcount{flex:1;color:var(--mut);font-size:12px}
#rs-dock .rs-dd-tclose{border:0;background:none;color:var(--mut);padding:2px 8px}
.rs-dd-tbody{flex:1;min-height:0;overflow:auto;padding:4px 10px 10px;scrollbar-width:thin}
.rs-dd-tgroup{margin-top:8px}
.rs-dd-tg-h{display:flex;align-items:baseline;gap:8px;margin:0 0 6px;font-size:12px;color:var(--mut)}
.rs-dd-tg-h b{font:600 11px system-ui,sans-serif;letter-spacing:.06em;text-transform:uppercase;color:var(--ink)}
.rs-dd-tg-own{color:var(--accent);font-weight:600}
.rs-dd-tgrid{display:grid;grid-template-columns:1fr;gap:5px}      /* one card under the other in the side column */
#rs-dock .rs-dd-tcard{display:flex;flex-direction:column;gap:2px;min-width:0;text-align:left;padding:7px 10px;border:1px solid var(--line);border-radius:8px;background:color-mix(in srgb,var(--card) 55%,transparent);cursor:pointer}
#rs-dock .rs-dd-tcard:is(:hover,:focus-visible){border-color:var(--accent);background:var(--rs-hover-bg);color:inherit}
.rs-dd-tc-top{display:flex;align-items:baseline;gap:8px;min-width:0}
.rs-dd-tc-name{flex:1;min-width:0;font:600 12.5px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#rs-dock .rs-dd-tcard:is(:hover,:focus-visible) .rs-dd-tc-name{color:var(--accent)}
.rs-dd-tc-rows{flex:none;font-size:11px;color:var(--mut);font-variant-numeric:tabular-nums}
.rs-dd-tc-about{font-size:11.5px;color:var(--mut);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rs-dd-tgrid{align-items:start}
.rs-dd-split{flex:1;min-height:0;display:flex;gap:10px}
#rs-dock .rs-dd-split .rs-dock-table{flex:1 1 0;min-width:0;min-height:0;align-self:stretch;max-width:none}      /* (#rs-dock: over the table's own align-self: flex-start, which gave it the height of its rows: no scroll) */
.rs-dd-side{flex:0 0 300px;box-sizing:border-box;min-height:0;display:flex;flex-direction:column}
.rs-dd-side[hidden],.rs-dd-card[hidden]{display:none!important}
.rs-dd-side-hint{margin:auto 0;padding:0 20px;text-align:center;color:var(--mut);font-size:12px}
.rs-dd-side-hint[hidden]{display:none}
.rs-dd-side.empty{border:1px dashed var(--line);border-radius:8px}
html.rs-phone .rs-dd-side.empty{display:none}
.rs-dd-chart:not([hidden])~.rs-dd-side.empty{display:none}      /* the Chart view: the chart takes the width of an empty side column (the Table view keeps it) */
.rs-dd-card{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:8px;border:1px solid var(--line);border-radius:8px;background:var(--rs-dk-box);padding:10px 12px;font:12px/1.4 system-ui,sans-serif;scrollbar-width:thin}
.rs-dd-rc-hd{display:flex;align-items:flex-start;gap:8px}
.rs-dd-rc-name{flex:1;min-width:0;font:600 14px/1.3 system-ui,sans-serif;color:var(--ink);overflow-wrap:anywhere}
#rs-dock .rs-dd-rc-x{flex:none;border:0;background:none;color:var(--mut);padding:0 4px;font-size:12px;line-height:20px}
.rs-dd-rc-chips{display:flex;flex-wrap:wrap;gap:4px}
.rs-dd-rc-chip{padding:1px 8px;border-radius:999px;background:color-mix(in srgb,var(--ink) 7%,transparent);color:var(--ink);font-size:11.5px;white-space:nowrap}
.rs-dd-rc-chip.strong{background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent);font-weight:600}
.rs-dd-rc-rows{display:grid;grid-template-columns:auto 1fr;gap:3px 12px;margin:0;padding-top:6px;border-top:1px solid var(--line)}
.rs-dd-rc-rows dt{color:var(--mut);white-space:nowrap}
.rs-dd-rc-rows dd{margin:0;text-align:right;color:var(--ink);font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rs-dd-rc-foot{display:flex;align-items:center;gap:6px;padding-top:6px;border-top:1px solid var(--line)}
.rs-dd-rc-parts{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:11.5px;color:var(--mut)}      /* the parts of an object (a turn): a swatch of the role's colour and the role */
.rs-dd-rc-part{display:inline-flex;align-items:center;gap:5px}
.rs-dd-rc-part .rs-dd-sw{width:14px;height:8px}
.rs-dd-rc-sec{display:flex;flex-direction:column;gap:3px;padding-top:6px;border-top:1px solid var(--line)}      /* a section of a kind's card: a small title and rows */
.rs-dd-rc-sec .rs-dd-rc-rows{padding-top:0;border-top:0}
.rs-dd-rc-sec-t{font:600 11px/1.3 system-ui,sans-serif;color:var(--mut);text-transform:uppercase;letter-spacing:.04em}
.rs-dd-rc-note{margin:0;font-size:12px;color:var(--mut)}
.rs-dd-rc-note.err{color:var(--rs-err);white-space:pre-wrap}
.rs-dd-rc-act{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;padding-top:6px;border-top:1px solid var(--line)}      /* the one action of a kind's card: a line and a button */
.rs-dd-rc-act-t{flex:1;min-width:0;color:var(--mut);font-size:12px}
#rs-dock .rs-dd-rc-act button{padding:2px 10px;font-size:11.5px}
.rs-dd-rc-act .rs-dd-rc-note{flex-basis:100%}
.rs-dd-rc-id{flex:1;min-width:0;color:var(--mut);font:11px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#rs-dock .rs-dd-rc-foot button{padding:2px 8px;font-size:11.5px}
.rs-dd-card[hidden]{display:none}
html.rs-phone .rs-dd-split{flex-direction:column}
html.rs-phone .rs-dd-side{flex:0 0 auto;max-height:55%}
/* a phone's Chart view: the dock has no height for the settings, the chart and a side card together (they overlapped); the side card (the road or
   the list of tables) takes the place of the chart while it shows, and its ✕ gives the chart back: one thing at a time, as the phone's sheets */
html.rs-phone .rs-dd-chart:has(~ .rs-dd-side:not(.empty)){display:none}
html.rs-phone .rs-dd-chart:not([hidden]) ~ .rs-dd-side:not(.empty){flex:1 1 0;max-height:none}
html.rs-phone .rs-dd-q{flex-wrap:wrap}
/* the lists of Colour and Focus: a box in the look of the toolbox's boxes, under its button */
.rs-dd-menu{position:fixed;z-index:31;min-width:300px;max-width:min(420px,calc(100vw - 16px));max-height:50dvh;overflow:auto;box-sizing:border-box;padding:6px;border:1px solid var(--rs-tb-border,var(--line));border-radius:10px;
  background:var(--rs-box-bg,var(--bg));-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:var(--ink);font:12px/1.35 system-ui,sans-serif;box-shadow:0 6px 24px rgba(0,0,0,.22)}
.rs-dd-menu[hidden]{display:none}
.rs-dd-menu button{font:inherit;color:inherit;background:none;border:0;border-radius:6px;padding:3px 8px;cursor:pointer}
.rs-dd-menu button:is(:hover,:focus-visible):not(:disabled){background:var(--rs-hover-bg);color:var(--accent)}
.rs-dd-menu button:disabled{opacity:.45;cursor:default}
.rs-dd-menu-add{display:block;width:100%;text-align:left;font-weight:600!important;color:var(--accent)!important}
.rs-dd-menu-row{display:flex;align-items:center;gap:6px;padding:4px 6px;border-radius:6px;cursor:pointer}
.rs-dd-menu-row:hover{background:var(--rs-hover-bg)}
.rs-dd-menu-row.off{opacity:.6}
.rs-dd-menu-row input{margin:0;accent-color:var(--accent)}
.rs-dd-menu-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rs-dd-menu-row small{color:var(--mut);font-variant-numeric:tabular-nums}
.rs-dd-sw{width:12px;height:4px;border-radius:2px;display:inline-block}
.rs-dd-seg{display:inline-flex;border:1px solid var(--line);border-radius:999px;overflow:hidden}
.rs-dd-menu .rs-dd-seg button{border-radius:0;padding:1px 7px}
.rs-dd-menu .rs-dd-seg button.on{background:var(--accent-fill);color:#fff}
.rs-dd-menu-empty{margin:4px 8px;color:var(--mut)}
/* ---- ASK (ask/ask_panel.js, docs/guides/ask.md): an editor frame in the panel. The head row is the tool row, the body the conversation (one card for
   each question, an outline with no fill), the bar the question box: one box with the text and a round send button inside it ---- */
#sb .rs-ask-top{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--mut)}
.rs-ask-who{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#sb .rs-ask-top > button:not(.rs-help-btn){font-size:12px;padding:3px 10px}
#sb .rs-ask-top button.rs-ask-keyb.on{background:var(--accent-fill);border-color:var(--accent-fill);color:#fff}
#sb .rs-ask-top button.rs-ask-keyb.on:is(:hover,:focus-visible){filter:brightness(1.1);background:var(--accent-fill);color:#fff}
.rs-ask-ex{display:flex;flex-direction:column;align-items:stretch;gap:6px;padding:0 0 4px}
.rs-ask-hint{color:var(--mut);font-size:12px;margin:0 0 4px}
.rs-ask-grp{margin:6px 0 0;font:600 11px/1.2 system-ui,sans-serif;letter-spacing:.06em;text-transform:uppercase;color:var(--mut)}
.rs-ask-grp:first-child{margin-top:0}
.rs-ask-need{display:flex;flex-direction:column;align-items:flex-start;gap:6px;margin:0 0 6px;font-size:12.5px}
.rs-ask-need:empty{display:none}
.rs-ask-need p{margin:0}
/* an example question: a row of the panel's button look, the full width, its text at the left (Kaveh, 2026-11-06: the grey pills, "i dont like
   this style and color"; a pill is also the look of a tag that does not click) */
#sb .rs-ask button.rs-ask-q{display:block;width:100%;box-sizing:border-box;padding:7px 11px;border:1px solid var(--line);border-radius:8px;
  background:var(--card);color:var(--ink);text-align:left;white-space:normal;font:13px/1.4 system-ui,sans-serif;cursor:pointer}
#sb .rs-ask button.rs-ask-q:is(:hover,:focus-visible){border-color:var(--accent);color:var(--accent);background:var(--rs-hover-bg)}
.rs-ask-turn{margin:0 0 10px;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:transparent}
.rs-ask-turn-hd{display:flex;align-items:flex-start;gap:8px}
.rs-ask-turn .q{flex:1;min-width:0;margin:0 0 6px;font-weight:600;overflow-wrap:anywhere}
#sb .rs-ask-x{flex:none;border:0;background:none;color:var(--mut);font-size:12px;padding:2px 6px;border-radius:6px}
.rs-ask-turn .step,.rs-ask-turn .rs-ask-by{color:var(--mut);font-size:12px;margin:2px 0}
/* the sign that Ask works: a turning ring before the step line ("Asking Groq …") while the question runs */
.rs-ask-turn .step::before{content:"";display:inline-block;width:9px;height:9px;margin-right:7px;vertical-align:-1px;border:2px solid var(--accent);border-right-color:transparent;border-radius:50%;animation:rs-spin .8s linear infinite}
@media (prefers-reduced-motion:reduce){.rs-ask-turn .step::before{animation-duration:3s}}
.rs-ask-key [hidden]{display:none!important}   /* Save key and Clear show only when they can act */
.rs-ask-order{margin:4px 0 0;padding-left:20px;font-size:13px}
.rs-ask-turn .a{margin:4px 0 6px;overflow-wrap:anywhere}
.rs-ask-turn .a p{margin:0 0 6px}
.rs-ask-turn .a ul{margin:0 0 4px;padding-left:18px}
.rs-ask-turn .a li{margin:2px 0}
.rs-ask-turn .a code{font:12px ui-monospace,Menlo,monospace;background:var(--card);border:1px solid var(--line);border-radius:4px;padding:0 3px}
#sb .rs-ask-more{border:0;background:none;padding:0 0 4px;color:var(--accent);font-size:12px}
.rs-ask-turn .rs-ask-err{color:var(--rs-err);margin:0 0 6px;font-size:12.5px}
.rs-ask-map{display:flex;align-items:center;flex-wrap:wrap;gap:4px 8px;font-size:12px;margin:4px 0}
.rs-ask-map-k{font:600 10px/1 system-ui,sans-serif;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);border:1px solid var(--accent);border-radius:999px;padding:3px 6px}
.rs-ask-map-to{color:var(--mut);font-size:11.5px;margin-left:auto}
.rs-ask-foot{display:flex;align-items:flex-start;gap:8px;justify-content:space-between;margin-top:4px}
.rs-ask-turn details{font-size:12px;color:var(--mut);flex:1;min-width:0}
.rs-ask-turn details code{display:block;white-space:pre-wrap;overflow-wrap:anywhere;font:11px/1.45 ui-monospace,Menlo,monospace;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:6px 8px;margin:4px 0}
.rs-ask-turn .rs-ask-failed{margin:2px 0 0 12px}
.rs-ask-acts{flex:none;display:flex;gap:6px}
#sb .rs-ask-show{font-size:12px;padding:2px 10px}
/* the key form: in place of the conversation, with its own way back to the chat */
.rs-ask-key{display:flex;flex-direction:column;gap:8px;border:1px solid var(--line);border-radius:12px;padding:10px 12px}
.rs-ask-keyhd{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}
.rs-ask-keyhd b{font-size:13px}
#sb .rs-ask-krow{margin:0}
#sb .rs-ask-krow > span{display:block;margin-bottom:3px}
.rs-ask-key > a{font-size:12px}
.rs-ask-btns{display:flex;justify-content:flex-end;gap:6px}
.rs-ask-keynote{font-size:11.5px;color:var(--mut);margin:0}
#sb .rs-ask-key .rs-q{font:13px system-ui,-apple-system,"Segoe UI",sans-serif;text-transform:none;letter-spacing:0}   /* not the 11 px of the template's label around it */
/* the bar: "Examples ▴" (after the first question; its list opens over the chat, above the box) and the question box */
.rs-ask-exbar{position:relative;display:flex;margin-bottom:6px}
#sb .rs-ask-exb{border:0;background:none;padding:2px 6px;font:500 12px system-ui,sans-serif;color:var(--mut);display:inline-flex;align-items:center;gap:4px;border-radius:6px}
.rs-ask-exb[aria-expanded=false] svg{transform:rotate(180deg)}
/* the list is as high as the free space above the question box at most (ask_panel.js sets max-height from the frame's body) and scrolls inside */
.rs-ask-exlist{position:absolute;left:0;right:0;bottom:calc(100% + 4px);z-index:5;display:flex;flex-direction:column;align-items:stretch;gap:6px;padding:10px;
  box-sizing:border-box;overflow-y:auto;background:var(--bg);border:1px solid var(--line);border-radius:12px;box-shadow:0 6px 20px rgba(0,0,0,.18)}
.rs-ask-exlist > *{flex:none}
.rs-ask-comp{display:flex;align-items:flex-end;gap:6px;padding:5px 5px 5px 12px;border:1px solid var(--line);border-radius:14px;background:var(--card)}
.rs-ask-comp:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}
#sb .rs-ask-comp textarea{flex:1;min-width:0;border:0!important;background:transparent!important;box-shadow:none!important;outline:none;resize:none;
  padding:6px 0!important;margin:0;font:13px/20px system-ui,-apple-system,sans-serif;color:var(--ink);height:32px;max-height:132px;overflow-y:auto}
#sb .rs-ask-comp .rs-ask-send{flex:none;width:32px;height:32px;padding:0;border:0;border-radius:50%;display:grid;place-items:center;background:var(--accent-fill)!important;color:#fff!important}
#sb .rs-ask-comp .rs-ask-send:is(:hover,:focus-visible):not(:disabled){filter:brightness(1.1)}
#sb .rs-ask-comp .rs-ask-send.stop{background:var(--ink)!important;color:var(--bg)!important}
/* the data dock's chart view: the row of Kind, X, Y and SVG over the chart; the chart fills the dock */
#rs-dock .rs-dd-view{display:inline-flex;border:1px solid var(--rs-card-edge);border-radius:8px;overflow:hidden}
#rs-dock .rs-dd-view button{border:0;border-radius:0;padding:3px 10px}
#rs-dock .rs-dd-view button.on{background:var(--accent-fill);color:#fff}
.rs-dd-chart{flex:1 1 0;min-width:0;min-height:0;display:flex;flex-direction:column;gap:10px}
/* three cards in the Chart view: the settings, the chart and the road (Kaveh, 2026-11-06: "divide this to 3 parts not two"); flat cards, no fill */
.rs-dd-chartrow,.rs-dd-cmain{border:1px solid color-mix(in srgb,var(--line) 70%,transparent);border-radius:8px;background:transparent;padding:8px 12px}
/* the side card of the Chart view (the road, or the list of tables) is flat as the two chart cards (Kaveh, 2026-11-06: "this card is not like"
   the others); the Table view keeps the fill of its table */
.rs-dd-chart:not([hidden])~.rs-dd-side :is(.rs-dd-card,.rs-dd-tables){border-color:color-mix(in srgb,var(--line) 70%,transparent);background:transparent}
.rs-dd-chart[hidden],#rs-dock .rs-dock-table[hidden]{display:none}
.rs-dd-chartrow{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center;font-size:12px}
.rs-dd-cl{display:inline-flex;gap:6px;align-items:center;color:var(--mut);font-size:12px}
.rs-dd-cl .rs-sel{width:170px}
#rs-dock .rs-dd-cl .rs-sel-btn{padding:4px 9px;border:1px solid var(--line);border-radius:7px;background:var(--rs-dk-solid);color:var(--ink);font-size:12.5px}
#rs-dock .rs-dd-cl .rs-sel-btn:hover:not(:disabled){background:var(--rs-hover-bg);color:var(--accent);border-color:var(--accent)}
.rs-dd-kinds{display:inline-flex;padding:2px;gap:2px;border:1px solid var(--line);border-radius:8px;background:var(--rs-dk-solid)}
#rs-dock .rs-dd-kind{display:grid;place-items:center;width:30px;height:26px;padding:0;border:0;border-radius:6px;background:none;color:var(--mut)}
#rs-dock .rs-dd-kind:is(:hover,:focus-visible):not(.on){background:var(--rs-hover-bg);color:var(--accent)}
#rs-dock .rs-dd-kind.on{background:var(--accent-fill);color:#fff}
.rs-dd-sp{flex:1}
.rs-dd-chartel{flex:1;min-height:0}
.rs-dd-cmain{position:relative;flex:1 1 0;min-width:0;min-height:0;display:flex;flex-direction:column}
#rs-dock .rs-dd-svg{position:absolute;top:6px;right:8px;z-index:1;padding:2px 8px;font-size:11.5px;opacity:.75}
#rs-dock .rs-dd-svg:is(:hover,:focus-visible){opacity:1}
/* a computer: the kinds, X and Y are a column at the chart's left, and the chart has the height of the box under its title line (Kaveh,
   2026-11-06: "this part can be vertical"); a phone keeps them in a row over the chart */
html:not(.rs-phone) .rs-dd-chart{flex-direction:row}
html:not(.rs-phone) .rs-dd-chartrow{flex:none;width:180px;flex-direction:column;flex-wrap:nowrap;align-items:stretch;gap:6px;min-height:0;overflow:hidden auto;
  direction:rtl;scrollbar-width:thin}      /* a short dock: the column scrolls, its thin scrollbar at the left (Kaveh), as the left panel's */
html:not(.rs-phone) .rs-dd-chartrow > *{direction:ltr}
html:not(.rs-phone) .rs-dd-chartrow .rs-dd-kinds{display:flex;box-sizing:border-box;width:100%}   /* the kinds share the column's width: no sideways scroll (Kaveh: "it got scroll!") */
html:not(.rs-phone) #rs-dock .rs-dd-chartrow .rs-dd-kind{flex:1 1 0;width:auto;min-width:0}
html:not(.rs-phone) .rs-dd-chartrow .rs-dd-cl{display:grid;grid-template-columns:12px minmax(0,1fr)}
html:not(.rs-phone) .rs-dd-chartrow .rs-dd-cl .rs-sel{width:auto;min-width:0}

/* a chart answer of Ask: a small copy of its chart in the card (the chart is in the data dock) */
#sb .rs-ask-chart{height:140px;margin:8px 0 4px;padding:0;background:none;border:0}      /* no box: the chart sits on the card (Kaveh, 2026-11-06) */
/* the look of roadstyle's own classes in the panel: the query field (.rs-q, also Ask's fields), the filled button (.sb-primary), the parts query
   and road_card. They were in the dashboard template only, so a host page (duckOSM Studio, duckosm edit) did not have them. They are classes,
   so a host's own elements do not change; the template keeps only its rules for the elements (#sb button, select, label). At the end of
   the file, where the template's rules were, so each wins as before. */
#sb .rs-q{width:100%;box-sizing:border-box;padding:6px 8px;border:1px solid var(--line);border-radius:5px;background:var(--bg);color:var(--ink);outline:none}
#sb .rs-q:focus{border-color:var(--accent)}
#sb .rs-q{font:12px ui-monospace,SFMono-Regular,Menlo,monospace}
.sb-actions{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:8px}
#sb button.sb-primary{background:var(--accent-fill);border-color:var(--accent-fill);color:#fff;font-weight:600}
#sb button.sb-primary:is(:hover,:focus-visible):not(:disabled){filter:brightness(1.1);color:#fff;background:var(--accent-fill)}
#sb .rs-q-col{width:28px;height:28px;padding:1px;border:1px solid var(--line);border-radius:6px;
  vertical-align:middle;cursor:pointer;background:var(--bg)}
#sb .rs-q-count{color:var(--mut);font-size:12px;margin:10px 0 2px;font-variant-numeric:tabular-nums}
#sb .rs-q-list{max-height:230px;overflow:auto}
#sb .rs-q-list div{padding:4px 0;border-bottom:1px solid var(--line)}
#sb .rs-q-list a{color:var(--accent);text-decoration:none}
#sb .rs-q-list a:hover{text-decoration:underline}
#sb .rs-road-card{background:var(--card);border:1px solid var(--line);border-radius:6px;padding:8px 10px;
  margin-top:6px;min-height:38px;color:var(--ink)}
#sb .rs-road-card-none{color:var(--mut)}
#sb .rs-road-card b{color:var(--ink)}
#sb .rs-road-card-ov{color:var(--mut)}
/* the panel's own controls: a label, a select box and a plain button. They were in the dashboard template only, so a host page with its own panel
   (duckOSM Studio, duckosm edit) got the browser's buttons. At the end of the file, where the template's rules were, so each wins as before. */
#sb label{display:block;margin:11px 0 3px;font-weight:600;font-size:11px;color:var(--mut);
  text-transform:uppercase;letter-spacing:.04em}
#sb select{width:100%;box-sizing:border-box;padding:6px 8px;border:1px solid var(--line);
  border-radius:5px;background:var(--bg);color:var(--ink);font:inherit;outline:none}
#sb select:focus{border-color:var(--accent)}
#sb button{padding:5px 11px;border:1px solid var(--line);border-radius:6px;
  background:var(--card);color:var(--ink);cursor:pointer;font:inherit}
#sb button:is(:hover,:focus-visible):not(:disabled){border-color:var(--accent);color:var(--accent);background:var(--rs-hover-bg)}
#sb button:disabled{opacity:.5;cursor:default}
#sb button.sb-primary:disabled{filter:saturate(.6)}

/* ==== DASHBOARD PARTS 2 (docs/design/dashboard_parts_2.md): the controls that a page drew itself before. Each is a class with the theme's tokens;
   the parts with behaviour have a function on `rs` (days.js range, hours.js, fields.js, search.js, drop.js, notice.js, menu.js, more.js). ==== */
/* the "not saved" dot, and the fill of a button that deletes (white text on it: 6.5:1); the status colours --rs-err, --rs-warn and --rs-ok are defined above */
:root{--rs-unsaved:#d97706;--rs-danger-fill:#b91c1c}
/* the accent as text on an accent tint (a pressed button, a selected row, the row under the pointer in a list): mixed with the text colour, 4.5:1 or more in both themes */
:root{--rs-accent-text:color-mix(in srgb,var(--accent) 72%,var(--ink))}
html[data-rs-theme=dark],#sb[data-theme=dark]{--rs-unsaved:#fbbf24}
/* the label above a field and its value at the right: the look of the day picker's label */
:is(#sb,body) .rs-slider-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin:0 0 6px}
:is(#sb,body) :is(.rs-slider-l,.rs-num-l,.rs-color-l){color:var(--mut);font:600 12px/16px system-ui,sans-serif;text-transform:uppercase;letter-spacing:.06em}
:is(#sb,body) :is(.rs-num-l,.rs-color-l){display:block;margin:0 0 6px}
:is(#sb,body) .rs-slider-v{color:var(--ink);font:600 13px system-ui,sans-serif;font-variant-numeric:tabular-nums;white-space:nowrap}
/* 1. the date range and the week or month: the day picker's field (.rs-day); the days of the range are tinted, its two ends are filled */
.rs-day-cal .rs-day-cd.in{background:color-mix(in srgb,var(--accent) 26%,transparent)}
.rs-day-cal .rs-day-cd.hov:not(.on){box-shadow:inset 0 0 0 1.5px var(--accent);color:var(--accent)}
.rs-range-cal .rs-day-cd:disabled{background:none}
.rs-range-mg{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}
.rs-range-mg .rs-day-cd{height:40px}
.rs-range-hint{margin-top:8px;font-size:12px;opacity:.75;text-align:center}
/* 2. the hour picker: the day picker's field (.rs-day), with a clock; a click opens a list of the hours in the look of the menu, with a tick at
   the chosen hour. A range: "From" and "To", each a field with its list, and the number of hours at the end */
.rs-menu.rs-hours-list{max-height:min(236px,calc(100dvh - 16px));min-width:120px}
.rs-hours-list .rs-menu-item{justify-content:space-between;font-variant-numeric:tabular-nums}
.rs-hours-list .rs-menu-item.on{font-weight:600;color:var(--rs-accent-text)}
.rs-hours-list .rs-menu-item svg{width:14px;height:14px;opacity:1}
:is(#sb,body) .rs-hours-tag{flex:none;color:var(--mut);font:600 12px system-ui,sans-serif}
:is(#sb,body) .rs-hours .rs-hours-field{font-variant-numeric:tabular-nums}
:is(#sb,body) .rs-hours-n{flex:none;min-width:30px;color:var(--mut);font:600 12.5px system-ui,sans-serif;font-variant-numeric:tabular-nums;text-align:right}
/* 3. the slider: the browser's range input on a thin track; the fill is the chosen part. Two handles: two inputs on one track */
:is(#sb,body) .rs-slider-track{position:relative;height:24px}
:is(#sb,body) .rs-slider-track::before,.rs-slider-fill{content:"";position:absolute;top:10px;height:4px;border-radius:2px}
:is(#sb,body) .rs-slider-track::before{left:0;right:0;background:color-mix(in srgb,var(--mut) 30%,transparent)}
.rs-slider-fill{background:var(--accent-fill)}
:is(#sb,body) .rs-slider input[type=range]{position:absolute;inset:0;width:100%;height:24px;margin:0;background:none;-webkit-appearance:none;appearance:none;pointer-events:none}
:is(#sb,body) .rs-slider input[type=range]:focus{outline:0}
.rs-slider input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:var(--bg);border:2px solid var(--accent-fill);box-shadow:0 1px 3px rgba(0,0,0,.25);cursor:grab;pointer-events:auto}
.rs-slider input[type=range]::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--bg);border:2px solid var(--accent-fill);box-shadow:0 1px 3px rgba(0,0,0,.25);cursor:grab;pointer-events:auto}
.rs-slider input[type=range]::-moz-range-track{background:none}
.rs-slider input[type=range]:hover::-webkit-slider-thumb{box-shadow:0 0 0 6px var(--rs-hover-bg)}
.rs-slider input[type=range]:hover::-moz-range-thumb{box-shadow:0 0 0 6px var(--rs-hover-bg)}
.rs-slider input[type=range]:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 35%,transparent)}
.rs-slider input[type=range]:focus-visible::-moz-range-thumb{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 35%,transparent)}
/* 4. the number field: one box with "−", the number, the unit and "+" */
:is(#sb,body) .rs-num-box{display:inline-flex;align-items:center;height:34px;box-sizing:border-box;border:1px solid color-mix(in srgb,var(--ink) 35%,var(--bg));border-radius:10px;background:var(--bg);overflow:hidden}
:is(#sb,body) .rs-num-box:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}
:is(#sb,body) .rs-num-box input[type=number]{width:64px;height:100%;padding:0 4px;border:0;border-radius:0;background:none;box-shadow:none;color:var(--ink);font:600 13px system-ui,sans-serif;text-align:right;font-variant-numeric:tabular-nums;-moz-appearance:textfield;appearance:textfield}
:is(#sb,body) .rs-num-box input::-webkit-inner-spin-button,:is(#sb,body) .rs-num-box input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
:is(#sb,body) .rs-num-u{padding:0 4px 0 2px;color:var(--mut);font-size:12.5px}
:is(#sb,body) .rs-num-st{width:32px;height:100%;margin:0;padding:0;border:0;border-radius:0;background:var(--card);color:var(--ink);font:500 17px/1 system-ui,sans-serif;cursor:pointer}
:is(#sb,body) .rs-num-st:hover:not(:disabled){border:0;background:var(--rs-hover-bg);color:var(--accent)}
:is(#sb,body) .rs-num-off .rs-num-box{opacity:.55}
:is(#sb,body) .rs-num-off .rs-num-box:hover{border-color:color-mix(in srgb,var(--ink) 35%,var(--bg))}
:is(#sb,body) .rs-num-st:disabled{opacity:.35;cursor:default}
/* 5. the colour picker: a field with the swatch and its hex; a box with the palette, a hex field and the system's colour window */
:is(#sb,body) .rs-color-btn{display:inline-flex;align-items:center;gap:8px;height:34px;box-sizing:border-box;margin:0;padding:0 10px 0 6px;border:1px solid color-mix(in srgb,var(--ink) 35%,var(--bg));
  border-radius:10px;background:var(--bg);color:var(--ink);font:600 12.5px ui-monospace,SFMono-Regular,Menlo,monospace;cursor:pointer}
:is(#sb,body) .rs-color-btn:is(:hover,[aria-expanded=true]){border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--bg));color:var(--ink);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}
:is(#sb,body) .rs-color-btn:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.rs-color-btn svg{color:var(--accent)}
.rs-color-sw{width:22px;height:22px;border-radius:6px;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ink) 25%,transparent)}
/* the boxes that open under a control (the menu, the colour box, the search list): the look of the select list (.rs-sel-list) */
:is(.rs-menu,.rs-color-box,.rs-search-list){position:fixed;z-index:3500;box-sizing:border-box;max-height:min(360px,calc(100dvh - 16px));overflow-y:auto;padding:5px;border-radius:14px;
  background:var(--rs-card-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid var(--rs-tb-border);box-shadow:0 6px 22px rgba(0,0,0,.3);color:var(--rs-tb-ink);font:13px system-ui,sans-serif}
:is(.rs-menu,.rs-color-box,.rs-search-list)[hidden]{display:none}
.rs-color-box{width:196px;padding:10px}
.rs-color-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.rs-color-c{height:34px;margin:0;padding:0;border:0;border-radius:8px;cursor:pointer;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}
.rs-color-c:is(:hover,:focus-visible){outline:2px solid var(--accent);outline-offset:2px;filter:brightness(1.1)}      /* a swatch is filled: brighter */
.rs-color-c.on{box-shadow:inset 0 0 0 2px var(--rs-card-bg),0 0 0 2px var(--rs-tb-ink)}
.rs-color-row{display:flex;gap:6px;margin-top:10px}
.rs-color-in{flex:1;min-width:0;box-sizing:border-box;height:32px;padding:0 8px;border:1px solid var(--rs-tb-border);border-radius:8px;background:var(--rs-tb-hover);color:inherit;font:12.5px ui-monospace,SFMono-Regular,Menlo,monospace;outline:0}
.rs-color-in:focus{border-color:var(--accent)}
.rs-color-in.bad{border-color:var(--rs-err)}
.rs-color-more{display:inline-flex;align-items:center;padding:0 10px;border:0;border-radius:8px;color:inherit;font:inherit;background:var(--rs-tb-hover);font-size:12px;cursor:pointer;white-space:nowrap}
.rs-color-more:is(:hover,:focus-visible){background:var(--rs-hover-bg);color:var(--accent)}
/* 6. the on/off switch: a check box with role=switch; the label at its right */
:is(#sb,body) label.rs-switch{display:flex;align-items:center;gap:10px;margin:6px 0;color:var(--ink);font:13px/1.35 system-ui,sans-serif;text-transform:none;letter-spacing:0;cursor:pointer}
:is(#sb,body) .rs-switch input{flex:none;position:relative;width:34px;height:20px;margin:0;border-radius:10px;background:color-mix(in srgb,var(--mut) 55%,transparent);-webkit-appearance:none;appearance:none;cursor:pointer;transition:background .15s}
:is(#sb,body) .rs-switch input::before{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.3);transition:transform .15s}
:is(#sb,body) .rs-switch input:checked{background:var(--accent-fill)}
:is(#sb,body) .rs-switch input:checked::before{transform:translateX(14px)}
:is(#sb,body) .rs-switch:hover input:not(:disabled){box-shadow:0 0 0 4px var(--rs-hover-bg)}
:is(#sb,body) .rs-switch:hover{color:var(--accent)}
:is(#sb,body) .rs-switch input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
:is(#sb,body) .rs-switch:has(input:disabled){opacity:.5;cursor:default}
/* 7. the search field: the magnifier, the text, the clear button and a button at the end, in one field; the list under it */
:is(#sb,body) .rs-search-box{display:flex;align-items:center;height:36px;box-sizing:border-box;border:1px solid color-mix(in srgb,var(--ink) 35%,var(--bg));border-radius:10px;background:var(--bg);overflow:hidden}
:is(#sb,body) .rs-search-box:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}
:is(#sb,body) .rs-search-i{display:flex;padding:0 4px 0 10px;color:var(--mut)}
:is(#sb,body) .rs-search-busy .rs-search-i svg{visibility:hidden}
:is(#sb,body) .rs-search-busy .rs-search-i{position:relative}
:is(#sb,body) .rs-search-busy .rs-search-i::after{content:"";position:absolute;left:10px;top:0;width:11px;height:11px;border:2px solid var(--accent);border-right-color:transparent;border-radius:50%;animation:rs-spin .7s linear infinite}
:is(#sb,body) .rs-search-box input[type=search]{flex:1;min-width:0;height:100%;padding:0 6px;border:0;border-radius:0;background:none;box-shadow:none;color:var(--ink);font:13px system-ui,sans-serif;outline:0}
:is(#sb,body) .rs-search-box input::-webkit-search-cancel-button{-webkit-appearance:none}
:is(#sb,body) .rs-search-x{width:28px;height:28px;margin:0 2px;padding:0;border:0;border-radius:50%;background:none;color:var(--mut);font:18px/1 system-ui,sans-serif;cursor:pointer}
:is(#sb,body) .rs-search-x:is(:hover,:focus-visible){border:0;background:var(--rs-hover-bg);color:var(--accent)}
:is(#sb,body) .rs-search-box > .rs-search-end{flex:none;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;margin:0 2px;padding:0;border:0;border-radius:50%;background:none;color:var(--mut);cursor:pointer}
:is(#sb,body) .rs-search-box > .rs-search-end svg{width:16px;height:16px}
:is(#sb,body) .rs-search-box > .rs-search-end:is(:hover,:focus-visible){border:0;background:var(--rs-hover-bg);color:var(--accent)}
:is(#sb,body) .rs-search-go{align-self:stretch;margin:0;padding:0 14px;border:0;border-left:1px solid var(--line);border-radius:0;background:var(--accent-fill);color:#fff;font:600 13px system-ui,sans-serif;cursor:pointer}
:is(#sb,body) .rs-search-go:is(:hover,:focus-visible){border-color:var(--line);background:var(--accent-fill);color:#fff;filter:brightness(1.1)}
.rs-search-opt{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:8px 11px;border-radius:10px;cursor:pointer}
.rs-search-opt b{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rs-search-opt span{opacity:.7;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:0 1 auto}
.rs-search-opt:hover,.rs-search-opt.on{background:var(--rs-hover-bg);color:var(--rs-accent-text)}
.rs-search-note{padding:8px 11px;opacity:.75}
/* 8. the file drop zone: a dashed box; a file over it fills it with the accent; then a row with the file's name, its size and "×" */
:is(#sb,body) .rs-drop-zone{display:flex;flex-direction:column;align-items:center;gap:4px;width:100%;box-sizing:border-box;margin:0;padding:18px 12px;
  border:1.5px dashed color-mix(in srgb,var(--ink) 35%,var(--bg));border-radius:12px;background:var(--bg);color:var(--ink);font:13px/1.4 system-ui,sans-serif;text-align:center;cursor:pointer}
:is(#sb,body) .rs-drop-zone svg{color:var(--accent)}
:is(#sb,body) .rs-drop-zone u{color:var(--accent);text-decoration:none;font-weight:600}
:is(#sb,body) .rs-drop-zone:is(:hover,:focus-visible),:is(#sb,body) .rs-drop-over .rs-drop-zone{border-color:var(--accent);background:var(--rs-hover-bg);color:var(--ink)}
:is(#sb,body) .rs-drop-zone:hover u{text-decoration:underline}
:is(#sb,body) .rs-drop-zone:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
:is(#sb,body) .rs-drop-h{color:var(--mut);font-size:12px}
:is(#sb,body) .rs-drop-has .rs-drop-zone{flex-direction:row;justify-content:center;padding:8px 12px}
:is(#sb,body) .rs-drop-has .rs-drop-zone :is(svg,.rs-drop-h){display:none}
:is(#sb,body) .rs-drop-files{margin-top:6px}
:is(#sb,body) .rs-drop-file{display:flex;align-items:center;gap:8px;padding:6px 6px 6px 10px;border-radius:10px;background:var(--card);color:var(--ink)}
:is(#sb,body) .rs-drop-file svg{flex:none;color:var(--accent)}
:is(#sb,body) .rs-drop-file b{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
:is(#sb,body) .rs-drop-file span{color:var(--mut);font-size:12px;white-space:nowrap}
:is(#sb,body) .rs-drop-x{width:28px;height:28px;margin:0;padding:0;border:0;border-radius:50%;background:none;color:var(--mut);font:18px/1 system-ui,sans-serif;cursor:pointer}
:is(#sb,body) .rs-drop-x:is(:hover,:focus-visible){border:0;background:var(--rs-hover-bg);color:var(--accent)}
/* 9. the progress bar (a label, the value, a bar; with no value a part of the bar moves) and the busy state of a button (a turning ring) */
:is(#sb,body) .rs-progress-head{display:flex;justify-content:space-between;gap:8px;margin:0 0 5px;color:var(--ink);font:12.5px system-ui,sans-serif}
:is(#sb,body) .rs-progress-v{color:var(--mut);font-variant-numeric:tabular-nums}
:is(#sb,body) .rs-progress-bar{position:relative;height:6px;border-radius:3px;background:color-mix(in srgb,var(--mut) 25%,transparent);overflow:hidden}
.rs-progress-fill{height:100%;border-radius:3px;background:var(--accent-fill);transition:width .25s}
.rs-progress-wait .rs-progress-fill{position:absolute;width:35%;animation:rs-progress-move 1.2s ease-in-out infinite}
@keyframes rs-progress-move{0%{left:-35%}100%{left:100%}}
@keyframes rs-spin{to{transform:rotate(360deg)}}
.rs-busy::before,.rs-spinner,.rs-mapbusy-pill::before{content:"";display:inline-block;width:11px;height:11px;margin-right:7px;vertical-align:-1px;box-sizing:border-box;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:rs-spin .7s linear infinite}
.rs-spinner{margin:0}
:is(#sb,body) button.rs-busy:disabled{opacity:.8;cursor:progress}
/* 9b. the veil of a busy map (rs.mapBusy): over the free part of the map (the script sets left, top, width and height), the pointer goes through it */
#rs-mapbusy{position:fixed;z-index:8;display:flex;align-items:center;justify-content:center;pointer-events:none;background:color-mix(in srgb,var(--bg) 40%,transparent)}
#rs-mapbusy[hidden]{display:none}
.rs-mapbusy-pill{display:inline-flex;align-items:center;gap:10px;max-width:calc(100% - 24px);padding:8px 16px;border-radius:99px;background:var(--rs-pop-bg);color:var(--rs-pop-ink);font:13px/1.3 system-ui,sans-serif;box-shadow:0 6px 22px rgba(0,0,0,.28)}
.rs-mapbusy-pill::before{flex:none;width:18px;height:18px;margin:0;vertical-align:baseline;border-width:3px;border-color:var(--accent);border-right-color:transparent}
@media (prefers-reduced-motion:reduce){.rs-mapbusy-pill::before{animation-duration:3s}}
/* 10. the toast: a box over the map at the bottom (at the top of a phone, over the sheet), with an icon in the colour of its kind; a status line is
   the same look in a card: <div class="rs-status warn">...</div> */
#rs-toasts{position:fixed;z-index:4500;left:50%;bottom:16px;transform:translateX(-50%);display:flex;flex-direction:column-reverse;gap:8px;width:max-content;max-width:min(440px,calc(100vw - 32px));pointer-events:none}
.rs-toast,:is(#sb,body) .rs-status{display:flex;align-items:flex-start;gap:9px;box-sizing:border-box;padding:9px 10px 9px 15px;border-radius:12px;box-shadow:inset 4px 0 0 var(--rs-k);font:13px/1.45 system-ui,sans-serif}      /* the edge in the kind's colour: a shadow, not a border */
.rs-toast{--rs-k:var(--accent);pointer-events:auto;background:var(--rs-pop-bg);color:var(--rs-pop-ink);box-shadow:inset 4px 0 0 var(--rs-k),0 6px 22px rgba(0,0,0,.28);animation:rs-toast-in .18s ease-out}
.rs-toast.out{opacity:0;transform:translateY(6px);transition:opacity .2s,transform .2s}
@keyframes rs-toast-in{from{opacity:0;transform:translateY(8px)}}
:is(#sb,body) .rs-status{--rs-k:var(--accent);margin:0 0 10px;padding:7px 10px 7px 13px;background:var(--card);color:var(--ink);border-radius:0 8px 8px 0;font-size:12.5px}
/* the kind of a toast or a status line: its colour (the edge and the icon) and, for a status line, its icon (a mask in the colour) */
:is(#sb,body) .rs-status{--rs-ki:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round'%3E%3Ccircle cx='8' cy='8' r='6.5'/%3E%3Cpath d='M8 7.2v4M8 4.8v.1'/%3E%3C/svg%3E")}
.rs-toast.ok,:is(#sb,body) .rs-status.ok{--rs-k:var(--rs-ok);--rs-ki:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='8' cy='8' r='6.5'/%3E%3Cpath d='m5.2 8.2 2 2 3.6-4'/%3E%3C/svg%3E")}
.rs-toast.warn,:is(#sb,body) .rs-status.warn{--rs-k:var(--rs-warn);--rs-ki:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.6' stroke-linejoin='round' stroke-linecap='round'%3E%3Cpath d='M8 1.8 15 14H1z'/%3E%3Cpath d='M8 6.3v3.6M8 11.8v.1'/%3E%3C/svg%3E")}
.rs-toast.error,:is(#sb,body) .rs-status.error{--rs-k:var(--rs-err);--rs-ki:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round'%3E%3Ccircle cx='8' cy='8' r='6.5'/%3E%3Cpath d='m5.6 5.6 4.8 4.8m0-4.8-4.8 4.8'/%3E%3C/svg%3E")}
:is(#sb,body) .rs-status:empty{display:none}
:is(#sb,body) .rs-status::before{content:"";flex:none;width:16px;height:16px;margin-top:1px;background:var(--rs-k);-webkit-mask:var(--rs-ki) center/16px no-repeat;mask:var(--rs-ki) center/16px no-repeat}
.rs-toast-i{flex:none;color:var(--rs-k);display:flex;margin-top:1px}
.rs-toast-t{flex:1;min-width:0}
.rs-toast :is(.rs-toast-x,.rs-toast-a){flex:none;margin:-3px 0;border:0;background:none;color:inherit;cursor:pointer;border-radius:8px}
.rs-toast .rs-toast-x{width:26px;height:26px;padding:0;font:18px/1 system-ui,sans-serif;opacity:.7}
.rs-toast .rs-toast-a{height:26px;padding:0 9px;color:var(--accent);font:600 12.5px system-ui,sans-serif}
.rs-toast :is(.rs-toast-x,.rs-toast-a):is(:hover,:focus-visible){opacity:1;background:var(--rs-hover-bg);color:var(--accent)}
html.rs-phone #rs-toasts{left:50%!important;top:max(8px,env(safe-area-inset-top));bottom:auto;flex-direction:column;width:calc(100vw - 16px)}
/* 11. the confirm dialog: the look of the help window; a sheet at the bottom of a phone. The OK button is filled (.sb-primary), or red (.sb-danger) */
.rs-dialog{width:min(400px,calc(100vw - 32px));box-sizing:border-box;margin:auto;padding:18px 20px 16px;border:1px solid var(--rs-tb-border);border-radius:14px;
  background:var(--rs-pop-bg);color:var(--rs-pop-ink);box-shadow:0 12px 36px rgba(0,0,0,.35);font:13px/1.5 system-ui,sans-serif}
.rs-dialog::backdrop{background:var(--rs-box-bg);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}      /* the boxes' layer of the settings, not a colour of its own */
.rs-dialog-ttl{font-size:16px;font-weight:700;margin-bottom:4px}
.rs-dialog-text{color:color-mix(in srgb,var(--rs-pop-ink) 80%,var(--rs-pop-bg))}
.rs-dialog-bar{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}
.rs-dialog button{height:34px;padding:0 16px;border:1px solid var(--rs-tb-border);border-radius:10px;background:none;color:inherit;font:600 13px system-ui,sans-serif;cursor:pointer}
.rs-dialog button:is(:hover,:focus-visible){background:var(--rs-hover-bg);color:var(--rs-accent-text);border-color:var(--rs-tb-border);box-shadow:inset 0 0 0 1px var(--accent)}
.rs-dialog button:focus-visible,:is(#sb,body) button.sb-danger:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.rs-dialog button.sb-primary{background:var(--accent-fill);border-color:var(--accent-fill);color:#fff}
:is(#sb,body,.rs-dialog) button.sb-danger{background:var(--rs-danger-fill);border-color:var(--rs-danger-fill);color:#fff;font-weight:600}
.rs-dialog button:is(.sb-primary,.sb-danger):is(:hover,:focus-visible),:is(#sb,body) button.sb-danger:is(:hover,:focus-visible):not(:disabled){filter:brightness(1.1);color:#fff}
.rs-dialog button.sb-primary:is(:hover,:focus-visible){background:var(--accent-fill);border-color:var(--accent-fill)}
:is(#sb,body,.rs-dialog) button.sb-danger:is(:hover,:focus-visible):not(:disabled){background:var(--rs-danger-fill);border-color:var(--rs-danger-fill)}
html.rs-phone .rs-dialog{width:100%;max-width:none;margin:auto 0 0;border-radius:14px 14px 0 0;border-bottom:0;padding-bottom:max(16px,env(safe-area-inset-bottom))}
html.rs-phone .rs-dialog-bar button{flex:1;height:44px}
/* 12. the action menu: the "⋯" button, and its list */
:is(#sb,body) .rs-more-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;margin:0;padding:0;border:0;border-radius:8px;background:none;color:var(--mut);cursor:pointer;vertical-align:middle}
:is(#sb,body) .rs-more-btn:is(:hover,:focus-visible,[aria-expanded=true]){border:0;background:var(--rs-hover-bg);color:var(--accent)}
:is(#sb,body) .rs-more-btn:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.rs-menu{min-width:180px}
.rs-menu-item{display:flex;align-items:center;gap:10px;width:100%;box-sizing:border-box;margin:0;padding:8px 11px;border:0;border-radius:10px;background:none;color:inherit;font:13px system-ui,sans-serif;text-align:left;cursor:pointer}
.rs-menu-item svg{flex:none;width:16px;height:16px;opacity:.8}
.rs-menu-item:is(:hover,:focus-visible):not(:disabled){outline:0;background:var(--rs-hover-bg);color:var(--rs-accent-text)}
.rs-menu-item.danger{color:var(--rs-err)}
.rs-menu-item.danger:is(:hover,:focus-visible):not(:disabled){background:color-mix(in srgb,var(--rs-err) 14%,transparent);color:var(--rs-err)}
.rs-menu-item:disabled{opacity:.45;cursor:default}
.rs-menu-line{height:1px;margin:4px 6px;background:var(--rs-tb-border)}
html.rs-phone .rs-menu-item{padding:12px 13px}
/* 13. a count on a tab or a button, and the amber "not saved" dot */
.rs-badge{display:inline-block;min-width:18px;height:18px;box-sizing:border-box;margin-left:6px;padding:0 5px;border-radius:9px;background:color-mix(in srgb,var(--accent) 16%,transparent);
  color:color-mix(in srgb,var(--accent) 70%,var(--ink));font:700 11px/18px system-ui,sans-serif;text-align:center;font-variant-numeric:tabular-nums;vertical-align:1px}
:is(.on,.sb-primary,[aria-selected=true]) > .rs-badge{background:color-mix(in srgb,var(--accent-fill) 55%,#000);color:#fff}      /* on a fill: a darker teal with white text (8:1 or more), in both themes */
.rs-unsaved{display:inline-block;width:8px;height:8px;margin-left:6px;border-radius:50%;background:var(--rs-unsaved);vertical-align:1px}
:is(.on,[aria-selected=true]) > .rs-unsaved{box-shadow:0 0 0 2px #fff}
/* 14. steps: numbered cards; a done step has a check mark, the open step an accent edge, a step that waits is dimmed and says what it waits for */
:is(#sb,body) .rs-steps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--rs-card-gap,12px)}
:is(#sb,body) .rs-step{display:flex;gap:12px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--card);color:var(--ink)}
:is(#sb,body) .rs-step.on{border-color:transparent;box-shadow:inset 0 0 0 1px var(--accent),inset 3px 0 0 var(--accent)}
:is(#sb,body) .rs-step-b{flex:1;min-width:0}
:is(#sb,body) .rs-step-b > b{display:block;font-size:13.5px;line-height:24px}
:is(#sb,body) .rs-step-b > p{margin:2px 0 0;color:color-mix(in srgb,var(--ink) 72%,var(--card));font-size:12.5px}
:is(#sb,body) :is(.rs-step-n,.rs-sec-n){flex:none;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;box-sizing:border-box;border-radius:50%;
  box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--ink) 40%,var(--card));color:var(--ink);font:700 12px/1 system-ui,sans-serif}
:is(#sb,body) .rs-step.on .rs-step-n{box-shadow:none;background:var(--accent-fill);color:#fff}
:is(#sb,body) :is(.rs-step.done .rs-step-n,.sb-sec[data-rs-done] > .rs-sec-hd > .rs-sec-n){box-shadow:inset 0 0 0 1.5px var(--accent);font-size:0;position:relative}      /* the check mark in place of the number */
:is(#sb,body) :is(.rs-step.done .rs-step-n,.sb-sec[data-rs-done] > .rs-sec-hd > .rs-sec-n)::after{content:"";position:absolute;left:7px;top:4px;width:5px;height:10px;border:solid var(--accent);border-width:0 2px 2px 0;transform:rotate(45deg)}
:is(#sb,body) .rs-step.wait{opacity:.6}
:is(#sb,body) .rs-step-note{display:inline-block;margin-top:4px;padding:1px 8px;border-radius:9px;background:color-mix(in srgb,var(--mut) 18%,transparent);color:var(--ink);font-size:11.5px;font-weight:600}
/* 15. a tool row: icon buttons in one group; the pressed one has the accent tint and edge (one pressed: rs.tabs.use on it) */
:is(#sb,body) .rs-toolrow{display:inline-flex;gap:2px;padding:2px;border-radius:10px;background:color-mix(in srgb,var(--mut) 18%,transparent)}
:is(#sb,body) .rs-toolrow button{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;margin:0;padding:0;border:0;border-radius:8px;background:none;color:var(--ink);cursor:pointer}
:is(#sb,body) .rs-toolrow button svg{width:18px;height:18px}
:is(#sb,body) .rs-toolrow button:is(:hover,:focus-visible):not(:disabled){border:0;background:var(--rs-hover-bg);color:var(--accent)}
:is(#sb,body) .rs-toolrow button:is(.on,[aria-pressed=true]){background:var(--card);color:var(--accent);box-shadow:inset 0 0 0 1.5px var(--accent)}
:is(#sb,body) .rs-toolrow button:is(.on,[aria-pressed=true]):is(:hover,:focus-visible){background:color-mix(in srgb,var(--accent) 12%,var(--card))}      /* as the selected button of rs-seg */
:is(#sb,body) .rs-toolrow button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
:is(#sb,body) .rs-toolrow button:disabled{opacity:.4;cursor:default}
/* 16. an empty state: a line in the middle, and a button under it (any place, not only the old side panel) */
:is(#sb,body) .rs-empty{display:flex;flex-direction:column;align-items:center;gap:10px;padding:26px 12px;color:var(--mut);font:12.5px/1.5 system-ui,sans-serif;text-align:center}
:is(#sb,body) .rs-empty svg{width:28px;height:28px;opacity:.7}
:is(#sb,body) .rs-empty b{color:var(--ink);font-size:13px}
/* 17. "show more": the count of the list and a button to show the next page */
:is(#sb,body) .rs-more{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 2px 2px;color:var(--mut);font:12px system-ui,sans-serif}
:is(#sb,body) .rs-more[hidden]{display:none}
:is(#sb,body) .rs-more-b{margin:0;padding:4px 10px;border:0;border-radius:8px;background:none;color:var(--accent);font:600 12.5px system-ui,sans-serif;cursor:pointer}
:is(#sb,body) .rs-more-b:is(:hover,:focus-visible){border:0;background:var(--rs-hover-bg);color:var(--accent)}
/* 18. a list of rows that a click selects (no check box): a title, a line under it, a value at the end; the selected row has the accent tint and an accent bar */
:is(#sb,body) .rs-rows{display:flex;flex-direction:column;gap:2px}
:is(#sb,body) .rs-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;column-gap:10px;width:100%;box-sizing:border-box;margin:0;padding:7px 10px;
  border:0;border-radius:8px;background:none;color:var(--ink);font:13px/1.35 system-ui,sans-serif;text-align:left;cursor:pointer}
:is(#sb,body) .rs-row > :not(.rs-row-i,.rs-row-v){grid-column:2;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
:is(#sb,body) .rs-row > b{font-weight:600}
:is(#sb,body) .rs-row > small{color:var(--mut);font-size:12px}
:is(#sb,body) .rs-row-i{grid-column:1;grid-row:1 / span 2;display:flex;color:var(--mut)}
:is(#sb,body) .rs-row-i svg{width:18px;height:18px}
:is(#sb,body) .rs-row-v{grid-column:3;grid-row:1 / span 2;color:var(--mut);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}
:is(#sb,body) .rs-row:is(:hover,:focus-visible):not(:disabled){border:0;background:var(--rs-hover-bg);color:var(--accent)}
:is(#sb,body) .rs-row:is(.on,[aria-selected=true]){background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--ink);box-shadow:inset 3px 0 0 var(--accent)}
:is(#sb,body) .rs-row:is(.on,[aria-selected=true]) :is(.rs-row-i,.rs-row-v){color:var(--rs-accent-text)}
:is(#sb,body) .rs-row:is(.on,[aria-selected=true]) > small{color:color-mix(in srgb,var(--ink) 78%,var(--mut))}
:is(#sb,body) .rs-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
/* 19. a toggle button: a plain button that stays pressed (aria-pressed): the accent tint, the accent edge and text */
:is(#sb,body) button.rs-toggle{display:inline-flex;align-items:center;gap:6px}
:is(#sb,body) button.rs-toggle svg{width:16px;height:16px;flex:none}
:is(#sb,body) button.rs-toggle[aria-pressed=true],:is(#sb,body) button.rs-toggle[aria-pressed=true]:hover{background:color-mix(in srgb,var(--accent) 16%,var(--card));border-color:transparent;box-shadow:inset 0 0 0 1px var(--accent);color:var(--rs-accent-text);font-weight:600}
/* 20. an icon button for a card's title row (and any place): 24 px, no edge, muted; in a title row it is at the right end, before the "?" and the chevron */
:is(#sb,body) .rs-icon-btn{display:inline-flex;align-items:center;justify-content:center;flex:none;width:24px;height:24px;margin:-4px 0;padding:0;border:0;border-radius:6px;background:none;color:var(--mut);cursor:pointer;vertical-align:middle}
:is(#sb,body) .rs-icon-btn svg{width:16px;height:16px;display:block}
:is(#sb,body) .rs-icon-btn:is(:hover,:focus-visible):not(:disabled){border:0;background:var(--rs-hover-bg);color:var(--accent)}
:is(#sb,body) .rs-icon-btn:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
:is(#sb,body) .rs-icon-btn:disabled{opacity:.4;cursor:default}
#sb .rs-card-title .rs-icon-btn{float:right;margin:-4px 0 -4px 6px}
html.rs-phone :is(#sb,body) .rs-row{padding:11px 10px}
html.rs-phone :is(#sb,body) .rs-icon-btn{width:36px;height:36px;margin:-10px 0}
/* 21. the fixed bar of the panel (rs.panel.bar()): the look of the editor frame's bar (.rs-frame-bar), under the cards; the frame's own bar takes its place */
.sb-card:has(> .rs-frame) > .rs-panel-bar{display:none}
.rs-panel-bar{display:flex;align-items:center;flex-wrap:wrap;gap:8px}
.rs-panel-bar > :is(b,span,.sb-note):first-child{flex:1;min-width:0;margin:0}
/* 22. a select box in an editor frame has the thin edge of a field, as on a card (a form in a frame) */
#sb .rs-frame .rs-sel-btn{border:1px solid var(--line);padding:5px 8px}
/* 23. a field's error and warning: a line under the field (red or amber, with an icon) and a red edge on the field that is wrong (aria-invalid="true") */
:is(#sb,body) :is(input,textarea,.rs-sel-btn)[aria-invalid=true],:is(#sb,body) .rs-sel:has(select[aria-invalid=true]) .rs-sel-btn{border-color:var(--rs-err)!important;box-shadow:0 0 0 1px var(--rs-err)}
:is(#sb,body) .rs-field-msg{display:flex;gap:6px;align-items:flex-start;margin:4px 0 0;color:var(--rs-err);font:12px/1.4 system-ui,sans-serif}
:is(#sb,body) .rs-field-msg.warn{color:var(--rs-warn)}
:is(#sb,body) .rs-field-msg::before{content:"";flex:none;width:14px;height:14px;margin-top:1px;background:currentColor;
  -webkit-mask:var(--rs-fm-i) center/14px no-repeat;mask:var(--rs-fm-i) center/14px no-repeat;
  --rs-fm-i:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round'%3E%3Ccircle cx='8' cy='8' r='6.5'/%3E%3Cpath d='M8 4.6v4.2M8 11.3v.1'/%3E%3C/svg%3E")}
:is(#sb,body) .rs-field-msg:empty{display:none}
/* 24. a row of rs-rows with a control in it (a select box, a button): the row is a <div tabindex="0">, and the control is at its end */
:is(#sb,body) div.rs-row > :is(select,.rs-sel,button){grid-column:3;grid-row:1 / span 2;width:auto;min-width:96px;margin:0}
/* a phone: the controls are 40 px or more high, so that a finger hits them */
html.rs-phone :is(#sb,body) :is(.rs-num-box,.rs-color-btn,.rs-search-box){height:42px}
html.rs-phone :is(#sb,body) .rs-day :is(button,.rs-day-step){height:42px}      /* the day picker, the date range and the hour picker */
html.rs-phone :is(#sb,body) .rs-day .rs-day-step{width:42px}
html.rs-phone :is(#sb,body) .rs-num-st{width:42px}
html.rs-phone :is(#sb,body) :is(.rs-toolrow button,.rs-more-btn){width:40px;height:40px}
html.rs-phone :is(#sb,body) .rs-slider-track{height:36px}
html.rs-phone :is(#sb,body) .rs-slider input[type=range]{height:36px}
html.rs-phone :is(#sb,body) .rs-slider-track::before,html.rs-phone .rs-slider-fill{top:16px}
html.rs-phone .rs-slider input[type=range]::-webkit-slider-thumb{width:24px;height:24px}
html.rs-phone :is(#sb,body) .rs-more-b{padding:10px 12px}
html.rs-phone :is(#sb,body) label.rs-switch{min-height:40px;margin:2px 0}
